diff -Nru backintime-1.0.36/AUTHORS backintime-1.1.12/AUTHORS --- backintime-1.0.36/AUTHORS 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/AUTHORS 2016-01-11 18:07:58.000000000 +0000 @@ -2,3 +2,4 @@ Bart de Koning () Richard Bailey () Germar Reitze () +Taylor Raack (taylor@raack.info) diff -Nru backintime-1.0.36/CHANGES backintime-1.1.12/CHANGES --- backintime-1.0.36/CHANGES 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/CHANGES 2016-01-11 18:07:58.000000000 +0000 @@ -1,5 +1,182 @@ Back In Time +Version 1.1.12 +* Fix bug: remove x-terminal-emulator dependency (https://github.com/bit-team/backintime/issues/515) +* Fix bug: AttributeError in About Dialog (https://github.com/bit-team/backintime/issues/515) + +Version 1.1.10 +* Fix bug: failed to remove empty lock file (https://github.com/bit-team/backintime/issues/505) +* Add Icon 'show-hidden' (https://github.com/bit-team/backintime/issues/507) +* Add Modify for Full System Backup button to settings page, to change some profile settings +* Fix bug: Restore the correct file owner and group fail if they are not present in system (https://github.com/bit-team/backintime/issues/58) +* add get|set_list_value to configfile +* Fix bug: QObject::startTimer error on closing app +* subclass ApplicationInstance in GUIApplicationInstance to reduce redundant code +* speed up app start by adding snapshots to timeline in background thread +* add warning on failed permission restore (https://github.com/bit-team/backintime/issues/58) +* add unittest (thanks to Dorian, Alexandre, Aurélien and Gregory from IAGL) +* Fix bug: FileNotFoundError while starting pw-cache from source +* continue an unfinished new_snapshot if possible (https://github.com/bit-team/backintime/issues/400) +* Fix bug: suppress warning about failed inhibit suspend if run as root (https://github.com/bit-team/backintime/issues/500) +* Fix bug: UI blocked/greyed out while removing snapshot (https://github.com/bit-team/backintime/issues/487) +* Fix bug: pw-cache failed on leftover PID file, using ApplicationInstance now (https://github.com/bit-team/backintime/issues/468) +* Fix bug: failed to parse some arguments (https://github.com/bit-team/backintime/issues/492) +* Fix bug: failed to start GUI if launched from systray icon +* Fix bug: deleted snapshot is still listed in Timeline if using mode SSH (https://github.com/bit-team/backintime/issues/493) +* Fix bug: PermissionError while deleting readonly files on sshfs mounted share (https://github.com/bit-team/backintime/issues/490) +* Add Nautilus-like shortcuts for navigating in file browser (https://github.com/bit-team/backintime/issues/483) +* speed up mounting of SSH+encrypted profiles +* Fix bug: creat new encrypted profiles with encfs >= 1.8.0 failed (https://github.com/bit-team/backintime/issues/477) +* Fix bug: AttributeError in common/tools.py if keyring is missing (https://github.com/bit-team/backintime/issues/473) +* Fix bug: remote rename of 'new_snapshot' folder sometimes isn't recognized locally; rename local now (https://answers.launchpad.net/questions/271792) +* Move source code and bug tracking to GitHub + +Version 1.1.8 +* Fix bug: unlock private SSH key run into 5sec timeout if password is empty +* show current app name and profile ID in syslog (https://launchpad.net/bugs/906213) +* Fix bug: BiT freeze when activate 'Decode path' in 'Snapshot Log View' +* Show 'Profiles' dropdown only in 'Last Log Viewer', add 'Snapshots' dropdown in 'Snapshot Log Viewer' (https://launchpad.net/bugs/1478219) +* Fix bug: empty grey window appears when starting the gui as root (https://launchpad.net/bugs/1493020) +* do not restore permission if they are identical with current permissions +* Fix bug: gnu_find_suffix_support doesn't set back to True (https://launchpad.net/bugs/1487781) +* security issue: do not run user-callback in a shell +* add option to not log user-callback output +* Fix lintian warning dbus-policy-without-send-destination +* apply timestamps-in-gzip.patch from Debian backintime/1.1.6-1 package +* run multiple smart-remove jobs in one screen session (https://launchpad.net/bugs/1487781) +* add error messages if PID file creation fail +* Fix bug: dbus exception if dbus systembus is not running +* Fix bug: depend on virtual package cron-daemon instead of cron for compatiblity with other cron implementations (https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=776856) +* Fix bug: wasn't able to start from alternate install dir (https://launchpad.net/bugs/478689) +* Fix bug: wasn't able to start from source dir +* Add Warning about unsupported filesystems +* use native Python code to check mountpoint +* Add expert option for stdout and stderr redirection in cronjobs (https://answers.launchpad.net/questions/270105) +* Fix bug: 'Inhibit Suspend' fails with 'org.freedesktop.PowerManagement.Inhibit' (https://launchpad.net/bugs/1485242) +* Fix bug: No mounting while selecting a secondary profile in the gui (https://launchpad.net/bugs/1481267) +* remove shebang in common/askpass.py and common/create-manpage-backintime-config.py +* Fix bug: fix for bug #1419466 broke crontab on Slackware (https://launchpad.net/bugs/1478576) +* Fix bug: fix for bug #1431305 broke pw-cache on Ubuntu (https://launchpad.net/bugs/1431305) +* Fix bash-complete +* show 'man backintime' on Help; remove link to backintime.le-web.org (https://launchpad.net/bugs/1475995) +* add --debug argument +* Fix bug: Settings accepted empty strings for Host/User/Profile-ID (https://launchpad.net/bugs/1477733) +* Fix bug: IndexError on 'check_remote_commands' due to too long args (https://launchpad.net/bugs/1471930) +* add --local-backup, --no-local-backup and --delete option to restore on command-line (https://launchpad.net/bugs/1467239) +* add 'backup on restore' option to confirm dialog +* add check-config command for command-line +* rewrite command-line argument parsing. Now using argparse +* add expert option SSH command prefix +* Fix bug: Makefile has no uninstall target (https://launchpad.net/bugs/1469152) + +Version 1.1.6 +* show Profile name in systrayicon menu +* Fix bug: encrypted remote backup hangs on 'start encfsctl encode process' (https://launchpad.net/bugs/1455925) +* make own Exceptions a childclass from BackInTimeException +* Fix bug: missing profile.name crashed GUI +* Fix bug: Segmentation fault caused by two QApplication instances (https://launchpad.net/bugs/1463732) +* remove consolekit from dependencies +* Fix bug: no Changes [C] log entries with 'Check for changes' disabled (https://launchpad.net/bugs/1463367) +* Fix bug: some changed options from Settingsdialog where not respected during automatic tests after hitting OK +* Fix bug: python version check fails on python 3.3 (https://launchpad.net/bugs/1463686) +* Specifying the SSH private key whenever ssh is called (https://launchpad.net/bugs/1433682) +* add to in-/exclude directly from mainwindow (https://launchpad.net/bugs/1454856) +* Fix bug: pw-cache didn't start on Mint KDE because of missing stdout and stderr (https://launchpad.net/bugs/1431305) +* add option to run Smart Remove in background on remote host (https://launchpad.net/bugs/1457210) +* Use current profile when starting GUI from Systray +* Fix bug: failed to restore file names with white spaces using CLI (https://launchpad.net/bugs/1435602) +* Fix bug: UnboundLocalError with 'last_snapshot' in _free_space (https://launchpad.net/bugs/1437623) + +Version 1.1.4 +* add option to keep new snapshot with 'full rsync mode' regardless of changes (https://launchpad.net/bugs/1434722) +* Fix bug: wrong quote in 'Save config file' +* Fix bug: Deleting the last snapshot does not update the last_snapshot symlink (https://launchpad.net/bugs/1434724) +* remove base64 encoding for passwords as it doesn't add any security but broke the password process (https://launchpad.net/bugs/1431305) +* add confirm dialog before restoring (https://launchpad.net/bugs/438079) +* Fix bug: Wrong status text in the tray icon (https://launchpad.net/bugs/1429400) +* add option to run only one snapshot at a time +* Fix bug: restore permissions of lots of files made BackInTime unresposive (https://launchpad.net/bugs/1428423) +* Fix bug: failed to restore file owner and group +* cache uuid in config so it doesn't fail if the device isn't pluged in (https://launchpad.net/bugs/1426881) +* add warning about wrong Python version in configure +* prevent snapshots from being removed with restore and delete; show warning if restore and delete filesystem root (https://answers.launchpad.net/questions/262837) +* Fix bug: OSError in free_space; add alternate method to get free space +* add bash-completion +* Fix bug: ugly theme while running as root on Gnome based DEs (https://launchpad.net/bugs/1418447) +* Fix bug: filename with broken charset throwed UnicodeError exception (https://launchpad.net/bugs/1419694) +* use 'crontab' instead of 'crontab -' to read from stdin (https://launchpad.net/bugs/1419466) + +Version 1.1.2 +* sort 'Backup folders' in main window +* save in- and exclude sort order +* use PolicyKit to install Udev rules +* move compression from install to build in Makefiles +* use pkexec to start backintime-qt4 as root + +Version 1.1.0 +* add tooltips for rsync options +* make only one debian/control +* multiselect files to restore (https://launchpad.net/bugs/1135886) +* force run manual snapshots on battery (https://launchpad.net/bugs/861553) +* backup encfs config to local config folder +* apply 'install-docs-move.patch' from Debian package by Jonathan Wiltshire +* add restore option to delete new files during restore (https://launchpad.net/bugs/1371951) +* use flock to prevent two instances running at the same time +* restore config dialog added (https://launchpad.net/bugs/480391) +* inhibit suspend/hibernate while take_snapshot or restore +* use more reliable code for get_user +* implement anacrons functions inside BIT => more flexible schedules and no new timestamp if there was an error +* automatically run in background if started with 'backintime --backup-job' +* fix typos and style warnings in manpages reported by Lintian (https://lintian.debian.org/full/jmw@debian.org.html#backintime_1.0.34-0.1) +* add exclude files by size (https://launchpad.net/bugs/823719) +* remove 'Auto Host/User/Profile-ID' as this is more confiusing than helping +* Fix bug: check procname of pid-locks (https://launchpad.net/bugs/1341414) +* optional run 'rsync' with 'nocache' (https://launchpad.net/bugs/1344528) +* mark invalid exclude pattern with mode ssh-encrypted +* make Settingsdialog tabs scrollable +* remove colon (:) restriction in exclude pattern +* prevent starting new snapshot if restore is running +* Fix bug: Port check failed on IPv6 (https://launchpad.net/bugs/1361634) +* add top-level directory for tarball (https://launchpad.net/bugs/1359076) +* add more user-callback events (on App start and exit, on mount and unmount) +* add context menu to files view +* remove snapshots from commandline +* multi selection in timeline => remove multiple snapshots with one click +* print warning if started with sudo +* add more default exclude; remove [Cc]ache* from exclude +* Fix bug: 'inotify_add_watch failed' while closing BIT +* add option for custom rsync-options +* add ProgressBar for rsync +* add progress for smart-remove +* remove old status-bar message after a snapshot crashed. +* ask to include symlinks target instead link (https://launchpad.net/bugs/1117709) +* port to Python 3.x +* returncode >0 if there was an error (https://launchpad.net/bugs/1040995) +* Enable user-callback script to cancel a backup by returning a non-zero exit code. +* merge backintime-notify into backintime-qt4 +* add --gksu/--gksudo arg to qt4/configure +* remember last path for each profile (https://bugs.launchpad.net/bugs/1254870) +* sort include and exclude list (https://bugs.launchpad.net/bugs/1193149) +* Timeline show tooltip 'Last check' +* Fix bug: systray icon didn't show up (https://bugs.launchpad.net/backintime/+bug/658424) +* show hidden files in FileDialog (https://bugs.launchpad.net/backintime/+bug/995925) +* add button text for all buttons (https://bugs.launchpad.net/backintime/+bug/992020) +* add shortcuts (https://bugs.launchpad.net/backintime/+bug/686694) +* add menubar (https://bugs.launchpad.net/backintime/+bug/528851) +* port KDE4 GUI to pure Qt4 to replace both KDE4 and Gnome GUI + +Version 1.0.40 +* use fingerprint to check if ssh key was unlocked correctly (https://answers.launchpad.net/questions/256408) +* add fallback method to get UUID (https://answers.launchpad.net/questions/254140) +* Fix bug: 'Attempt to unlock mutex that was not locked'... this time for good + +Version 1.0.38 +* Fix bug: 'Attempt to unlock mutex that was not locked' in gnomeplugin (https://answers.launchpad.net/questions/255225) +* compare os.path.realpath instead of os.stat to get devices UUID +* Fix bug: housekeeping by gnome-session-daemon might delete backup and original data (https://bugs.launchpad.net/bugs/1374343) +* Fix bug: Type Error in 'backintime --decode' (https://bugs.launchpad.net/bugs/1365072) +* Fix bug: take_snapshot didn't wait for snapshot folder come available if notifications are disabled (https://bugs.launchpad.net/bugs/1332979) + Version 1.0.36 * remove UbuntuOne from exclude (https://bugs.launchpad.net/bugs/1340131) * Gray out 'Add Profile' if 'Main Profile' isn't configured yet (https://bugs.launchpad.net/bugs/1335545) @@ -122,7 +299,7 @@ * Fix bug: https://bugs.launchpad.net/backintime/+bug/1073867 Version 1.0.10 -* Add "Restore to ..." in replacement of copy (with or without drag & drop) because copy don't restore user/group/rights +* Add "Restore to ..." in replacement of copy (with or without drag & drop) because copy don't restore user/group/rights Version 1.0.8 * Fix bug: https://bugs.launchpad.net/backintime/+bug/723545 * Fix bug: https://bugs.launchpad.net/backintime/+bug/705237 @@ -269,7 +446,7 @@ * GNOME bugfix: fix a crush in files view for files with special characters (ex: "a%20b") * GNOME SettingsDialog bugfix: if snapshots path is a new created folder, snapshots navigation (files view) don't work * update doc -* GNOME & KDE4 MainWindow: Rename "Places" list with "Snapshots" +* GNOME & KDE4 MainWindow: Rename "Places" list with "Snapshots" * GNOME SettingsDialog bugfix: modify something, then press cancel. If you reopen the dialog it show wrong values (the ones before cancel) * GNOME & KDE4: add root mode menu entries (use gksu for gnome and kdesudo for kde) * GNOME & KDE4: MainWindow - Files view: if the current directory don't exists in current snapshot display a message @@ -296,7 +473,7 @@ * give more information for 'take snapshot' progress (to prove that is not blocked) * MainWindow: rename 'Timeline' column with 'Snapshots' * when it tries to take a snapshot if the snapshots directory don't exists - (it is on a removable drive that is not plugged) it will notify and wait maximum 30 seconds + (it is on a removable drive that is not plugged) it will notify and wait maximum 30 seconds (for the drive to be plugged) * GNOME & KDE4: add notify if the snapshots directory don't exists * KDE4: rework MainWindow @@ -360,10 +537,10 @@ * update Spanish translation (Francisco Manuel García Claramonte ) * make deb packages more debian friendly (thanks to Michael Wiedmann ) * update German translation (Michael Wiedmann ) -* bug fix: when you open snapshots dialog for the second time ( or more ) and you make a diff - it will make the diff on the file for the first dialog ( all previous dialogs ) and then for +* bug fix: when you open snapshots dialog for the second time ( or more ) and you make a diff + it will make the diff on the file for the first dialog ( all previous dialogs ) and then for the current one -* better separation between common and gnome specific files and +* better separation between common and gnome specific files and divide backintime package in backintime-common & backintime-gnome (this will allow me to write other GUI front-ends like KDE4 or KDE) * code cleanup @@ -439,7 +616,7 @@ * capitalize month in timeline (bug in french translation) Version 0.7 -* fix cron segfault +* fix cron segfault * fix a crush when launched the very first time (not configured) * multi-lingual support * add French translation @@ -463,4 +640,3 @@ Version 0.5 * This is the first release. - diff -Nru backintime-1.0.36/common/applicationinstance.py backintime-1.1.12/common/applicationinstance.py --- backintime-1.0.36/common/applicationinstance.py 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/applicationinstance.py 2016-01-11 18:07:58.000000000 +0000 @@ -1,5 +1,5 @@ # Back In Time -# Copyright (C) 2008-2009 Oprea Dan, Bart de Koning, Richard Bailey +# Copyright (C) 2008-2016 Oprea Dan, Bart de Koning, Richard Bailey, Germar Reitze # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -17,44 +17,78 @@ import os -import os.path -import time +import fcntl +import errno +import logger -#class used to handle one application instance mechanism class ApplicationInstance: + '''class used to handle one application instance mechanism - #specify the file used to save the application instance pid - def __init__( self, pid_file, auto_exit = True ): + pid_file: full path of file used to save pid and procname + auto_exit: automatically call sys.exit if there is an other + instance running + flock: use file-locks to make sure only one instance + is checking at the same time + + tests: + test/test_applicationinstance.TestApplicationInstance.test_create_and_remove_pid_file + test/test_applicationinstance.TestApplicationInstance.test_write_pid_file + test/test_applicationinstance.TestApplicationInstance.test_existing_process_with_correct_procname + test/test_applicationinstance.TestApplicationInstance.test_existing_process_with_wrong_procname + test/test_applicationinstance.TestApplicationInstance.test_existing_process_with_wrong_pid + test/test_applicationinstance.TestApplicationInstance.test_killing_existing_process + test/test_applicationinstance.TestApplicationInstance.test_non_existing_process + test/test_applicationinstance.TestApplicationInstance.test_leftover_empty_lockfile + ''' + + def __init__( self, pid_file, auto_exit = True, flock = False ): + '''specify the file used to save the application instance pid + ''' self.pid_file = pid_file + self.pid = 0 + self.procname = '' + self.flock_file = None + if flock: + self.flockExclusiv() if auto_exit: if self.check( True ): self.start_application() - #check if the current application is already running, returns True if this is the application instance + def __del__(self): + '''unlock and clean up + ''' + self.flockUnlock() + def check( self, auto_exit = False ): + '''check if the current application is already running + returns True if this is the only application instance + + auto_exit: automatically call sys.exit if there is an other + instance running + ''' #check if the pidfile exists if not os.path.isfile( self.pid_file ): return True - #read the pid from the file - pid = 0 - try: - file = open( self.pid_file, 'rt' ) - data = file.read() - file.close() - pid = int( data ) - except: - pass + self.pid, self.procname = self.readPidFile() #check if the process with specified by pid exists - if 0 == pid: + if 0 == self.pid: return True try: - os.kill( pid, 0 ) #this will raise an exception if the pid is not valid - except: + os.kill( self.pid, 0 ) #this will raise an exception if the pid is not valid + except OSError as err: + if err.errno == errno.ESRCH: + #no such process + return True + else: + raise + + #check if the process has the same procname + if self.procname and self.procname != self.readProcName(self.pid): return True if auto_exit: @@ -64,21 +98,89 @@ return False - #called when the single instance starts to save it's pid def start_application( self ): - file = open( self.pid_file, 'wt' ) - file.write( str( os.getpid() ) ) - file.close() + '''called when the single instance starts to save it's pid + ''' + pid = str(os.getpid()) + procname = self.readProcName(pid) + + try: + with open( self.pid_file, 'wt' ) as f: + f.write( pid + '\n' + procname ) + except OSError as e: + logger.error('Failed to write PID file %s: [%s] %s' %(e.filename, e.errno, e.strerror)) + + self.flockUnlock() - #called when the single instance exit ( remove pid file ) def exit_application( self ): + '''called when the single instance exit ( remove pid file ) + ''' try: os.remove( self.pid_file ) except: pass + def flockExclusiv(self): + '''create an exclusive lock to block a second instance while + the first instance is starting. + + tests: + test/test_applicationinstance.TestApplicationInstance.test_thread_write_without_flock + test/test_applicationinstance.TestApplicationInstance.test_flock_exclusive + ''' + try: + self.flock_file = open(self.pid_file + '.flock', 'w') + fcntl.flock(self.flock_file, fcntl.LOCK_EX) + except OSError as e: + logger.error('Failed to write flock file %s: [%s] %s' %(e.filename, e.errno, e.strerror)) + + def flockUnlock(self): + '''remove the exclusive lock. Second instance can now continue + but should find it self to be obsolet. + ''' + if self.flock_file: + fcntl.fcntl(self.flock_file, fcntl.LOCK_UN) + self.flock_file.close() + try: + os.remove(self.flock_file.name) + except: + #an other instance was faster + #race condition while using 'if os.path.exists(...)' + pass + self.flock_file = None + + def readProcName(self, pid): + try: + with open('/proc/%s/cmdline' % pid, 'r') as f: + return f.read().strip('\n') + except OSError as e: + logger.warning('Failed to read process name from %s: [%s] %s' %(e.filename, e.errno, e.strerror)) + return '' + + def readPidFile(self): + '''read the pid and procname from the file + + pid: Process Indicator (int) + ''' + pid = 0 + procname = '' + try: + with open( self.pid_file, 'rt' ) as f: + data = f.read() + data = data.split('\n', 1) + pid = int(data[0]) + if len(data) > 1: + procname = data[1].strip('\n') + except OSError as e: + logger.warning('Failed to read PID and process name from %s: [%s] %s' %(e.filename, e.errno, e.strerror)) + except ValueError as e: + logger.warning('Failed to extract PID and process name from %s: %s' + %(self.pid_file, str(e))) + return (pid, procname) if __name__ == '__main__': + import time + #create application instance app_instance = ApplicationInstance( '/tmp/myapp.pid' ) @@ -89,4 +191,3 @@ #remove pid file app_instance.exit_application() - diff -Nru backintime-1.0.36/common/askpass.py backintime-1.1.12/common/askpass.py --- backintime-1.0.36/common/askpass.py 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/askpass.py 2016-01-11 18:07:58.000000000 +0000 @@ -1,5 +1,4 @@ -#!/usr/bin/env python -# Copyright (c) 2012-2013 Germar Reitze +# Copyright (C) 2012-2016 Germar Reitze # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -17,7 +16,6 @@ import os import sys -import base64 try: import gtk except: @@ -33,7 +31,7 @@ return password. """ cfg = config.Config() - tools.load_env(cfg) + tools.load_env(cfg.get_cron_env_file()) profile_id = os.getenv('ASKPASS_PROFILE_ID', '1') mode = os.getenv('ASKPASS_MODE', 'local') @@ -44,9 +42,9 @@ pw = password.Password(cfg) print(pw.get_password(None, profile_id, mode)) sys.exit(0) - + #temp mode fifo = password_ipc.FIFO(temp_file) - pw_base64 = fifo.read(5) - if pw_base64: - print(base64.decodestring(pw_base64)) + pw = fifo.read(5) + if pw: + print(pw) diff -Nru backintime-1.0.36/common/backintime backintime-1.1.12/common/backintime --- backintime-1.0.36/common/backintime 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/backintime 2016-01-11 18:07:58.000000000 +0000 @@ -1,7 +1,7 @@ #!/bin/sh # Back In Time -# Copyright (C) 2008-2009 Oprea Dan, Bart de Koning, Richard Bailey +# Copyright (C) 2008-2016 Oprea Dan, Bart de Koning, Richard Bailey, Germar Reitze # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -17,15 +17,31 @@ # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -if [ -f backintime.py ]; then - APP_PATH="." +CUR_PATH="$(dirname $(readlink -m $0))" +if [ -f "${CUR_PATH}/backintime.py" ]; then + APP_PATH=$CUR_PATH else - APP_PATH="/usr/share/backintime/common" + APP_PATH=$(readlink -m "${CUR_PATH}/../share/backintime/common") fi +run () { #starting a new ssh-agent all the time is just a workaround for #https://bugs.launchpad.net/ubuntu/+source/openssh/+bug/841672 #normally this should only be necessary if run as cronjob #and the user is not logged in -ssh-agent python $APP_PATH/backintime.py "$@" +ssh-agent python3 $APP_PATH/backintime.py "$@" +} +detach="false" +for arg in $@; do + if [ "x$arg" = "x--backup-job" ] || [ "x$arg" = "xbackup-job" ]; then + detach="true" + break + fi +done + +if [ "$detach" = "true" ]; then + run "$@" & +else + run "$@" +fi diff -Nru backintime-1.0.36/common/backintime-askpass backintime-1.1.12/common/backintime-askpass --- backintime-1.0.36/common/backintime-askpass 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/backintime-askpass 2016-01-11 18:07:58.000000000 +0000 @@ -1,7 +1,7 @@ #!/bin/sh # Back In Time -# Copyright (C) 2008-2009 Oprea Dan, Bart de Koning, Richard Bailey +# Copyright (C) 2008-2016 Oprea Dan, Bart de Koning, Richard Bailey, Germar Reitze # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -17,11 +17,15 @@ # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -if [ -f askpass.py ]; then - APP_PATH="." +#fixing gray window error +#https://launchpad.net/bugs/1493020 +export QT_GRAPHICSSYSTEM="native" + +CUR_PATH="$(dirname $(readlink -m $0))" +if [ -f "${CUR_PATH}/askpass.py" ]; then + APP_PATH=$CUR_PATH else - APP_PATH="/usr/share/backintime/common" + APP_PATH=$(readlink -m "${CUR_PATH}/../share/backintime/common") fi -python $APP_PATH/askpass.py "$@" - +python3 $APP_PATH/askpass.py "$@" diff -Nru backintime-1.0.36/common/backintime.desktop backintime-1.1.12/common/backintime.desktop --- backintime-1.0.36/common/backintime.desktop 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/backintime.desktop 2016-01-11 18:07:58.000000000 +0000 @@ -1,7 +1,7 @@ [Desktop Entry] Version=1.0 Name=Backintime Password Cache -Exec=backintime --pw-cache start +Exec=/bin/sh -c "backintime pw-cache start 2>&1 >/dev/null" Comment=Cache passwords for non-interactive Backintime cronjobs Icon=gtk-save Terminal=false diff -Nru backintime-1.0.36/common/backintime.py backintime-1.1.12/common/backintime.py --- backintime-1.0.36/common/backintime.py 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/backintime.py 2016-01-11 18:07:58.000000000 +0000 @@ -1,5 +1,5 @@ # Back In Time -# Copyright (C) 2008-2009 Oprea Dan, Bart de Koning, Richard Bailey +# Copyright (C) 2008-2016 Oprea Dan, Bart de Koning, Richard Bailey, Germar Reitze # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,13 +15,10 @@ # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -#print into file like it is done in Python3 -from __future__ import print_function import os -import os.path -import stat import sys import gettext +import argparse import config import logger @@ -32,11 +29,22 @@ import password import encfstools import cli +from exceptions import MountException _=gettext.gettext +RETURN_OK = 0 +RETURN_ERR = 1 +RETURN_NO_CFG = 2 + +parsers = {} def take_snapshot_now_async( cfg ): + '''fork a new backintime process with 'backup' command which will + take a new snapshot in background. + + cfg: config.Config instance + ''' cmd = '' if cfg.is_run_ionice_from_user_enabled(): cmd += 'ionice -c2 -n7 ' @@ -45,362 +53,813 @@ cmd += '--profile-id %s ' % cfg.get_current_profile() if not cfg._LOCAL_CONFIG_PATH is cfg._DEFAULT_CONFIG_PATH: cmd += '--config %s ' % cfg._LOCAL_CONFIG_PATH - cmd += '--backup &' + if logger.DEBUG: + cmd += '--debug ' + cmd += 'backup &' os.system( cmd ) - def take_snapshot( cfg, force = True ): - logger.openlog() - tools.load_env(cfg) - snapshots.Snapshots( cfg ).take_snapshot( force ) - logger.closelog() + '''take a new snapshot. + + cfg: config.Config instance + force: take the snapshot even if it wouldn't need to or would be + prevented (e.g. running on battery) + ''' + tools.load_env(cfg.get_cron_env_file()) + ret = snapshots.Snapshots( cfg ).take_snapshot( force ) + return ret def _mount(cfg): + '''mount external filesystems. + + cfg: config.Config instance + ''' try: hash_id = mount.Mount(cfg = cfg).mount() - except mount.MountException as ex: + except MountException as ex: logger.error(str(ex)) - sys.exit(1) + sys.exit(RETURN_ERR) else: cfg.set_current_hash_id(hash_id) def _umount(cfg): + '''unmount external filesystems. + + cfg: config.Config instance + ''' try: mount.Mount(cfg = cfg).umount(cfg.current_hash_id) - except mount.MountException as ex: + except MountException as ex: logger.error(str(ex)) +def create_parsers(app_name = 'backintime'): + '''define parsers for commandline arguments. -def print_version( cfg, app_name ): + app_name: string representing the current application + ''' + global parsers + + #define debug + debugArgsParser = argparse.ArgumentParser(add_help = False) + debugArgsParser.add_argument('--debug', + action = 'store_true', + help = 'Increase verbosity.') + + #define config argument + configArgsParser = argparse.ArgumentParser(add_help = False) + configArgsParser.add_argument('--config', + metavar = 'PATH', + type = str, + action = 'store', + help = 'Read config from %(metavar)s.') + + #define common arguments which are used for all commands + commonArgsParser = argparse.ArgumentParser(add_help = False, parents = [configArgsParser, debugArgsParser]) + profileGroup = commonArgsParser.add_mutually_exclusive_group() + profileGroup.add_argument ('--profile', + metavar = 'NAME', + type = str, + action = 'store', + help = 'Select profile by %(metavar)s.') + profileGroup.add_argument ('--profile-id', + metavar = 'ID', + type = int, + action = 'store', + help = 'Select profile by %(metavar)s.') + commonArgsParser.add_argument('--quiet', + action = 'store_true', + help = 'Be quiet. Suppress messages on stdout.') + + #define arguments which are only used by snapshots-path, snapshots-list-path and last-snapshot-path + snapshotPathParser = argparse.ArgumentParser(add_help = False) + snapshotPathParser.add_argument('--keep-mount', + action = 'store_true', + help = "Don't unmount on exit.") + + #define arguments which are used by rsync commands (backup and restore) + rsyncArgsParser = argparse.ArgumentParser(add_help = False) + rsyncArgsParser.add_argument('--checksum', + action = 'store_true', + help = 'force to use checksum for checking if files have been changed.') + + #define arguments for snapshot remove + removeArgsParser = argparse.ArgumentParser(add_help = False) + removeArgsParser.add_argument('SNAPSHOT_ID', + type = str, + action = 'store', + nargs = '*', + help = 'ID of snapshots which should be removed.') + + #define main argument parser + parser = argparse.ArgumentParser(prog = app_name, + parents = [commonArgsParser], + description = '%(app)s - a simple backup tool for Linux.' + % {'app': config.Config.APP_NAME}, + epilog = "For backwards compatibility commands can also be used with trailing '--'. " + "All listed arguments will work with all commands. Some commands have extra arguments. " + "Run '%(app_name)s -h' to see the extra arguments." + % {'app_name': app_name}) + parsers['main'] = parser + parser.add_argument('--version', '-v', + action = 'version', + version = '%(prog)s ' + str(config.Config.VERSION), + help = "show %(prog)s's version number.") + parser.add_argument('--license', + action = printLicense, + nargs = 0, + help = "show %(prog)s's license.") + + ####################### + ### define commands ### + ####################### + epilog = "Run '%(app_name)s -h' to get help for additional arguments. " %{'app_name': app_name} + epilogCommon = epilog + 'Additional arguments: --config, --debug, --profile, --profile-id, --quiet' + epilogConfig = epilog + 'Additional arguments: --config, --debug' + + subparsers = parser.add_subparsers(title = 'Commands', dest = 'command') + command = 'backup' + nargs = 0 + aliases = [(command, nargs), ('b', nargs)] + description = 'Take a new snapshot. Ignore if the profile ' +\ + 'is not scheduled or if the machine runs on battery.' + backupCP = subparsers.add_parser(command, + parents = [rsyncArgsParser], + epilog = epilogCommon, + help = description, + description = description) + backupCP.set_defaults(func = backup) + parsers[command] = backupCP + + command = 'backup-job' + nargs = 0 + aliases.append((command, nargs)) + description = 'Take a new snapshot in background only ' +\ + 'if the profile is scheduled and the machine ' +\ + 'is not on battery. This is use by cron jobs.' + backupJobCP = subparsers.add_parser(command, + parents = [rsyncArgsParser], + epilog = epilogCommon, + help = description, + description = description) + backupJobCP.set_defaults(func = backupJob) + parsers[command] = backupJobCP + + command = 'benchmark-cipher' + nargs = '?' + aliases.append((command, nargs)) + description = 'Show a benchmark of all ciphers for ssh transfer.' + benchmarkCipherCP = subparsers.add_parser(command, + epilog = epilogCommon, + help = description, + description = description) + benchmarkCipherCP.set_defaults(func = benchmarkCipher) + parsers[command] = benchmarkCipherCP + benchmarkCipherCP.add_argument ('FILE_SIZE', + type = int, + action = 'store', + default = 40, + nargs = '?', + help = 'File size used to for benchmark.') + + command = 'check-config' + description = 'Check the profiles configuration and install crontab entries.' + checkConfigCP = subparsers.add_parser(command, + epilog = epilogCommon, + help = description, + description = description) + checkConfigCP.add_argument ('--no-crontab', + action = 'store_true', + help = 'Do not install crontab entries.') + checkConfigCP.set_defaults(func = checkConfig) + parsers[command] = checkConfigCP + + command = 'decode' + nargs = '*' + aliases.append((command, nargs)) + description = "Decode pathes with 'encfsctl decode'" + decodeCP = subparsers.add_parser(command, + epilog = epilogCommon, + help = description, + description = description) + decodeCP.set_defaults(func = decode) + parsers[command] = decodeCP + decodeCP.add_argument ('PATH', + type = str, + action = 'store', + nargs = '*', + help = 'Decode PATH. If no PATH is specified on command line ' +\ + 'a list of filenames will be read from stdin.') + + command = 'last-snapshot' + nargs = 0 + aliases.append((command, nargs)) + description = 'Show the ID of the last snapshot.' + lastSnapshotCP = subparsers.add_parser(command, + epilog = epilogCommon, + help = description, + description = description) + lastSnapshotCP.set_defaults(func = lastSnapshot) + parsers[command] = lastSnapshotCP + + command = 'last-snapshot-path' + nargs = 0 + aliases.append((command, nargs)) + description = 'Show the path of the last snapshot.' + lastSnapshotsPathCP = subparsers.add_parser(command, + parents = [snapshotPathParser], + epilog = epilogCommon, + help = description, + description = description) + lastSnapshotsPathCP.set_defaults(func = lastSnapshotPath) + parsers[command] = lastSnapshotsPathCP + + command = 'pw-cache' + nargs = '*' + aliases.append((command, nargs)) + description = 'Control Password Cache for non-interactive cronjobs.' + pwCacheCP = subparsers.add_parser(command, + epilog = epilogConfig, + help = description, + description = description) + pwCacheCP.set_defaults(func = pwCache) + parsers[command] = pwCacheCP + pwCacheCP.add_argument ('ACTION', + action = 'store', + choices = ['start', 'stop', 'restart', 'reload', 'status'], + nargs = '?', + help = 'Command to send to Password Cache daemon.') + + command = 'remove' + nargs = '*' + aliases.append((command, nargs)) + description = 'Remove a snapshot.' + removeCP = subparsers.add_parser(command, + parents = [removeArgsParser], + epilog = epilogCommon, + help = description, + description = description) + removeCP.set_defaults(func = remove) + parsers[command] = removeCP + + command = 'remove-and-do-not-ask-again' + nargs = '*' + aliases.append((command, nargs)) + description = "Remove snapshots and don't ask for confirmation before. Be careful!" + removeDoNotAskCP = subparsers.add_parser(command, + parents = [removeArgsParser], + epilog = epilogCommon, + help = description, + description = description) + removeDoNotAskCP.set_defaults(func = removeAndDoNotAskAgain) + parsers[command] = removeDoNotAskCP + + command = 'restore' + nargs = '*' + aliases.append((command, nargs)) + description = 'Restore files.' + restoreCP = subparsers.add_parser(command, + parents = [rsyncArgsParser], + epilog = epilogCommon, + help = description, + description = description) + restoreCP.set_defaults(func = restore) + parsers[command] = restoreCP + backupGroup = restoreCP.add_mutually_exclusive_group() + restoreCP.add_argument ('WHAT', + type = str, + action = 'store', + nargs = '?', + help = 'Restore file or folder WHAT.') + + restoreCP.add_argument ('WHERE', + type = str, + action = 'store', + nargs = '?', + help = "Restore to WHERE. An empty argument '' will restore to original destination.") + + restoreCP.add_argument ('SNAPSHOT_ID', + type = str, + action = 'store', + nargs = '?', + help = 'Which SNAPSHOT_ID should be used. This can be a snapshot ID or ' +\ + 'an integer starting with 0 for the last snapshot, 1 for the overlast, ... ' +\ + 'the very first snapshot is -1') + + restoreCP.add_argument ('--delete', + action = 'store_true', + help = 'Restore and delete newer files which are not in the snapshot. ' +\ + 'WARNING: deleting files in filesystem root could break your whole system!!!') + + backupGroup.add_argument ('--local-backup', + action = 'store_true', + help = 'Create backup files before changing local files.') + + backupGroup.add_argument ('--no-local-backup', + action = 'store_true', + help = 'Temporary disable creation of backup files before changing local files. ' +\ + 'This can be switched of permanently in Settings, too.') + + command = 'snapshots-list' + nargs = 0 + aliases.append((command, nargs)) + description = 'Show a list of snapshots IDs.' + snapshotsListCP = subparsers.add_parser(command, + parents = [snapshotPathParser], + epilog = epilogCommon, + help = description, + description = description) + snapshotsListCP.set_defaults(func = snapshotsList) + parsers[command] = snapshotsListCP + + command = 'snapshots-list-path' + nargs = 0 + aliases.append((command, nargs)) + description = "Show the path's to snapshots." + snapshotsListPathCP = subparsers.add_parser(command, + parents = [snapshotPathParser], + epilog = epilogCommon, + help = description, + description = description) + snapshotsListPathCP.set_defaults(func = snapshotsListPath) + parsers[command] = snapshotsListPathCP + + command = 'snapshots-path' + nargs = 0 + aliases.append((command, nargs)) + description = 'Show the path where snapshots are stored.' + snapshotsPathCP = subparsers.add_parser(command, + parents = [snapshotPathParser], + epilog = epilogCommon, + help = description, + description = description) + snapshotsPathCP.set_defaults(func = snapshotsPath) + parsers[command] = snapshotsPathCP + + command = 'unmount' + nargs = 0 + aliases.append((command, nargs)) + description = 'Unmount the profile.' + unmountCP = subparsers.add_parser(command, + epilog = epilogCommon, + help = description, + description = description) + unmountCP.set_defaults(func = unmount) + parsers[command] = unmountCP + + #define aliases for all commands with trailing -- + group = parser.add_mutually_exclusive_group() + for alias, nargs in aliases: + if len(alias) == 1: + arg = '-%s' % alias + else: + arg = '--%s' % alias + group.add_argument(arg, + nargs = nargs, + action = PseudoAliasAction, + help = argparse.SUPPRESS) + +def start_app(app_name = 'backintime'): + '''start the requested command or return config if there was no command + in arguments. + + app_name: string representing the current application + ''' + create_parsers(app_name) + #open log + logger.APP_NAME = app_name + logger.openlog() + + #parse args + args = arg_parse(None) + + #add source path to $PATH environ if running from source + if tools.running_from_source(): + tools.add_source_to_path_environ() + + #warn about sudo + if tools.usingSudo() and os.getenv('BIT_SUDO_WARNING_PRINTED', 'false') == 'false': + os.putenv('BIT_SUDO_WARNING_PRINTED', 'true') + logger.warning("It looks like you're using 'sudo' to start %(app)s. " + "This will cause some troubles. Please use either 'sudo -i %(app_name)s' " + "or 'pkexec %(app_name)s'." + %{'app_name': app_name, 'app': config.Config.APP_NAME}) + + #call commands + if 'func' in dir(args): + args.func(args) + else: + setQuiet(args) + printHeader() + return getConfig(args, False) + +def arg_parse(args): + '''parse arguments given on commandline. + + args: argparse.ArgumentParser instance that should be enhanced or None + + tests: + test/test_argparser.TestArgParser.* (all of them) + ''' + def join(args, subArgs): + '''add new arguments to existing ArgumentParser. + + args: main argparse.ArgumentParser instance that should + get new arguments + subArgs: second argparse.ArgumentParser instance which have + new arguments that should be merged into args + ''' + for key, value in vars(subArgs).items(): + #only add new values if it isn't set already or if there really IS a value + if getattr(args, key, None) is None or value: + setattr(args, key, value) + + #first parse the main parser without subparsers + #otherwise positional args in subparsers will be to greedy + mainParser = parsers['main'] + sub = [] + for i in mainParser._actions: + if isinstance(i, argparse._SubParsersAction): + #remove subparsers + mainParser._remove_action(i) + sub.append(i) + args, unknownArgs = mainParser.parse_known_args(args) + #readd subparsers again + if sub: + [mainParser._add_action(i) for i in sub] + + #parse it again for unknown args + if unknownArgs: + subArgs, unknownArgs = mainParser.parse_known_args(unknownArgs) + join(args, subArgs) + + #finally parse only the command parser, otherwise we miss + #some arguments from command + if unknownArgs and 'command' in args and args.command in parsers: + commandParser = parsers[args.command] + subArgs, unknownArgs = commandParser.parse_known_args(unknownArgs) + join(args, subArgs) + + if 'debug' in args: + logger.DEBUG = args.debug + + dargs = vars(args) + logger.debug('Arguments: %s | unknownArgs: %s' + %({arg:dargs[arg] for arg in dargs if dargs[arg]}, + unknownArgs)) + + #report unknown arguments + #but not if we run aliasParser next because we will parse again in there + if unknownArgs and not ('func' in args and args.func is aliasParser): + mainParser.error('Unknown Argument(s): %s' % ', '.join(unknownArgs)) + return args + +def printHeader(): + '''print application name, version and legal notes. + ''' + version = config.Config.VERSION + ref, hashid = tools.get_git_ref_hash() + if ref: + version += " git branch '{}' hash '{}'".format(ref, hashid) print('') print('Back In Time') - print('Version: ' + cfg.VERSION) + print('Version: ' + version) print('') print('Back In Time comes with ABSOLUTELY NO WARRANTY.') print('This is free software, and you are welcome to redistribute it') - print("under certain conditions; type `%s --license\' for details." % app_name) + print("under certain conditions; type `backintime --license' for details.") print('') +class PseudoAliasAction(argparse.Action): + '''translate '--COMMAND' into 'COMMAND' for backwards compatibility. + ''' + def __call__(self, parser, namespace, values, option_string=None): + '''translate '--COMMAND' into 'COMMAND' for backwards compatibility. + + parser: + namespace: + values: + option_string: + ''' + #TODO: find a more elegant way to solve this + dest = self.dest.replace('_', '-') + if self.dest == 'b': + replace = '-b' + alias = 'backup' + else: + replace = '--%s' % dest + alias = dest + setattr(namespace, 'func', aliasParser) + setattr(namespace, 'replace', replace) + setattr(namespace, 'alias', alias) + +def aliasParser(args): + '''call commands which where given with leading -- for backwards + compatibility. + + args: argparse.ArgumentParser instance + ''' + logger.info("Run command '%(alias)s' instead of argument '%(replace)s' due to backwards compatibility." + % {'alias': args.alias, 'replace': args.replace}) + argv = [w.replace(args.replace, args.alias) for w in sys.argv[1:]] + newArgs = arg_parse(argv) + if 'func' in dir(newArgs): + newArgs.func(newArgs) + +def getConfig(args, check = True): + '''load config and change to profile selected on commandline. + + args: argparse.ArgumentParser instance + check: if there is no valid config call sys.exit + ''' + cfg = config.Config(args.config) + logger.debug('config file: %s' % cfg._LOCAL_CONFIG_PATH) + logger.debug('profiles: %s' % cfg.get_profiles()) + if 'profile_id' in args and args.profile_id: + if not cfg.set_current_profile(args.profile_id): + logger.error('Profile-ID not found: %s' % args.profile_id) + sys.exit(RETURN_ERR) + if 'profile' in args and args.profile: + if not cfg.set_current_profile_by_name(args.profile): + logger.error('Profile not found: %s' % args.profile) + sys.exit(RETURN_ERR) + if check and not cfg.is_configured(): + logger.error('%(app)s is not configured!' %{'app': cfg.APP_NAME}) + sys.exit(RETURN_NO_CFG) + if 'checksum' in args: + cfg.force_use_checksum = args.checksum + return cfg -def print_help( cfg ): - print('OPTIONS (use these before other actions):') - print('--profile ') - print('\tSelect profile by name') - print('--profile-id ') - print('\tSelect profile by id') - print('--keep-mount') - print('\tDon\'t unmount on exit. Only valid with') - print('\t--snapshots-list-path and --last-snapshot-path.') - print('--quiet') - print('\tBe quiet. Suppress messages on stdout.') - print('--config PATH') - print('\tread config from PATH.') - print('--checksum') - print('\tforce to use checksum for checking if files have been changed.') - print('') - print('ACTIONS:') - print('-b | --backup') - print('\tTake a snapshot (and exit)') - print('--backup-job') - print('\tUsed for cron job: take a snapshot (and exit)') - print('--snapshots-path') - print('\tShow the path where is saves the snapshots (and exit)') - print('--snapshots-list') - print('\tShow the list of snapshots IDs (and exit)') - print('--snapshots-list-path') - print('\tShow the paths to snapshots (and exit)') - print('--last-snapshot') - print('\tShow the ID of the last snapshot (and exit)') - print('--last-snapshot-path') - print('\tShow the path to the last snapshot (and exit)') - print('--unmount') - print('\tUnmount the profile.') - print('--benchmark-cipher [file-size]') - print('\tShow a benchmark of all ciphers for ssh transfer (and exit)') - print('--pw-cache [start|stop|restart|reload|status]') - print('\tControl Password Cache for non-interactive cronjobs') - print('--decode [encoded_PATH]') - print('\tDecode PATH. If no PATH is specified on command line') - print('\ta list of filenames will be read from stdin.') - print('--restore [WHAT [WHERE [SNAPSHOT_ID]]]') - print('\tRestore file WHAT to path WHERE from snapshot SNAPSHOT_ID.') - print('\tIf arguments are missing they will be prompted.') - print('-v | --version') - print('\tShow version (and exit)') - print('--license') - print('\tShow license (and exit)') - print('-h | --help') - print('\tShow this help (and exit)') - print('') - +def setQuiet(args): + '''redirect sys.stdout to /dev/null if --quiet was set on commandline. + Return the original sys.stdout fileobject which can be used to print + absolute necessary information. -def start_app( app_name = 'backintime', extra_args = [] ): + args: argparse.ArgumentParser instance + ''' force_stdout = sys.stdout - if '--quiet' in sys.argv: - f = open(os.devnull, 'w') - sys.stdout = f - - config_path = None - if '--config' in sys.argv: - i = sys.argv.index('--config') - try: - path = sys.argv[i + 1] - if os.path.isfile(path): - config_path = path - except IndexError: - pass - - cfg = config.Config(config_path) - print_version( cfg, app_name ) - - skip = False - index = 0 - keep_mount = False - - for arg in sys.argv[ 1 : ]: - index = index + 1 - - if skip: - skip = False - continue - - if arg == '--profile': - if not cfg.set_current_profile_by_name( sys.argv[index + 1] ): - print("Profile not found: %s" % sys.argv[index + 1], file=sys.stderr) - sys.exit(0) - skip = True - continue - - if arg == '--profile-id': - if not cfg.set_current_profile( sys.argv[index + 1] ): - print("Profile id not found: %s" % sys.argv[index + 1], file=sys.stderr) - sys.exit(0) - skip = True - continue - - if arg == '--backup' or arg == '-b': - take_snapshot( cfg, True ) - sys.exit(0) - - if arg == '--backup-job': - take_snapshot( cfg, False ) - sys.exit(0) - - if arg == '--version' or arg == '-v': - sys.exit(0) - - if arg == '--license': - print(cfg.get_license()) - sys.exit(0) - - if arg == '--help' or arg == '-h': - print_help( cfg ) - sys.exit(0) - - if arg == '--snapshots-path': - if not cfg.is_configured(): - print("The application is not configured !", file=sys.stderr) - else: - print("SnapshotsPath: %s" % cfg.get_snapshots_full_path(), file=force_stdout) - sys.exit(0) - - if arg == '--snapshots-list': - if not cfg.is_configured(): - print("The application is not configured !", file=sys.stderr) - else: - _mount(cfg) - _list = snapshots.Snapshots( cfg ).get_snapshots_list() - if len( _list ) <= 0: - print("There are no snapshots", file=sys.stderr) - else: - for snapshot_id in _list: - print("SnapshotID: %s" % snapshot_id, file=force_stdout) - _umount(cfg) - sys.exit(0) - - if arg == '--snapshots-list-path': - if not cfg.is_configured(): - print("The application is not configured !", file=sys.stderr) - else: - _mount(cfg) - s = snapshots.Snapshots( cfg ) - _list = s.get_snapshots_list() - if len( _list ) <= 0: - print("There are no snapshots", file=sys.stderr) - else: - for snapshot_id in _list: - print("SnapshotPath: %s" % s.get_snapshot_path( snapshot_id ), file=force_stdout) - if not keep_mount: - _umount(cfg) - sys.exit(0) - - if arg == '--last-snapshot': - if not cfg.is_configured(): - print("The application is not configured !", file=sys.stderr) - else: - _mount(cfg) - _list = snapshots.Snapshots( cfg ).get_snapshots_list() - if len( _list ) <= 0: - print("There are no snapshots", file=sys.stderr) - else: - print("SnapshotID: %s" % _list[0], file=force_stdout) - _umount(cfg) - sys.exit(0) - - if arg == '--last-snapshot-path': - if not cfg.is_configured(): - print("The application is not configured !", file=sys.stderr) - else: - _mount(cfg) - s = snapshots.Snapshots( cfg ) - _list = s.get_snapshots_list() - if len( _list ) <= 0: - print("There are no snapshots", file=sys.stderr) - else: - print("SnapshotPath: %s" % s.get_snapshot_path( _list[0] ), file=force_stdout) - if not keep_mount: - _umount(cfg) - sys.exit(0) - - if arg == '--keep-mount': - keep_mount = True - continue - - if arg == '--unmount': - _mount(cfg) - _umount(cfg) - sys.exit(0) - - if arg == '--benchmark-cipher': - if not cfg.is_configured(): - print("The application is not configured !", file=sys.stderr) - else: - try: - size = sys.argv[index + 1] - except IndexError: - size = '40' - if cfg.get_snapshots_mode() in ['ssh', 'ssh_encfs']: - ssh = sshtools.SSH(cfg=cfg) - ssh.benchmark_cipher(size) - else: - print('ssh is not configured !', file=sys.stderr) - sys.exit(0) - - if arg == '--pw-cache': - if not cfg.is_configured(): - print("The application is not configured !", file=sys.stderr) - sys.exit(0) - else: - logger.openlog() - daemon = password.Password_Cache(cfg) - try: - if sys.argv[index + 1].startswith('-'): - daemon.run() - elif 'start' == sys.argv[index + 1]: - daemon.start() - elif 'stop' == sys.argv[index + 1]: - daemon.stop() - elif 'restart' == sys.argv[index + 1]: - daemon.restart() - elif 'reload' == sys.argv[index + 1]: - daemon.reload() - elif 'status' == sys.argv[index + 1]: - print('Backintime Password Cache:', end=' ', file=force_stdout) - if daemon.status(): - print('running', file=force_stdout) - else: - print('not running', file=force_stdout) - else: - print("Unknown command") - print("usage: %s %s start|stop|restart|reload|status" % (sys.argv[0], sys.argv[index])) - sys.exit(2) - except IndexError: - daemon.run() - logger.closelog() - sys.exit(0) - - if arg == '--decode': - if not cfg.is_configured(): - print("The application is not configured !", file=sys.stderr) - sys.exit(0) - else: - mode = cfg.get_snapshots_mode() - if not mode in ['local_encfs', 'ssh_encfs']: - print('Profile \'%s\' is not encrypted.' % cfg.get_profile_name(), file=sys.stderr) - path = '' - _list = [] - try: - path = sys.argv[index + 1] - except IndexError: - pass - if len(path) > 0: - _list.append(path) - else: - while True: - try: - path = raw_input() - except EOFError: - break - if len(path) <= 0: - break - _list.append(path) - - _mount(cfg) - decode = encfstools.Decode(cfg) - ret = decode.list(list) - decode.close() - _umount(cfg) - - print('\n'.join(ret), file=force_stdout) - sys.exit(0) - - if arg == '--restore': - if not cfg.is_configured(): - print("The application is not configured !", file=sys.stderr) - sys.exit(0) - what = None - where = None - snapshot_id = None - - try: - what = sys.argv[index + 1] - where = sys.argv[index + 2] - snapshot_id = sys.argv[index + 3] - except IndexError: - pass - - _mount(cfg) - cli.restore(cfg, snapshot_id, what, where) - _umount(cfg) - sys.exit(0) - - if arg == '--checksum': - print('Force using checksum') - cfg.force_use_checksum = True - continue - - if arg == '--snapshots' or arg == '-s': - continue - - if arg == '--gnome' or arg == '--kde4' or arg == '--kde3': - continue - - if arg == '--quiet': - continue - - if arg == '--config': - skip = True - continue - - if arg[0] == '-': - if not arg[0] in extra_args: - print("Ignore option: %s" % arg) - continue + if args.quiet: + sys.stdout = open(os.devnull, 'w') + return force_stdout + +class printLicense(argparse.Action): + '''print custom license + ''' + def __init__(self, *args, **kwargs): + super(printLicense, self).__init__(*args, **kwargs) + + def __call__(self, *args, **kwargs): + cfg = config.Config() + print(cfg.get_license()) + sys.exit(RETURN_OK) + +def backup(args, force = True): + '''command for taking a new snapshot. + + force: take the snapshot even if it wouldn't need to or would be + args: argparse.ArgumentParser instance + prevented (e.g. running on battery) + ''' + setQuiet(args) + printHeader() + cfg = getConfig(args) + ret = take_snapshot(cfg, force) + sys.exit(int(not ret)) + +def backupJob(args): + '''command for force taking a new snapshot. + + args: argparse.ArgumentParser instance + ''' + backup(args, False) + +def snapshotsPath(args): + '''command for printing the full snapshot path of current profile. + + args: argparse.ArgumentParser instance + ''' + force_stdout = setQuiet(args) + cfg = getConfig(args) + if args.keep_mount: + _mount(cfg) + print('SnapshotsPath: %s' % cfg.get_snapshots_full_path(), file=force_stdout) + sys.exit(RETURN_OK) + +def snapshotsList(args): + '''command for printing a list of all snapshots in current profile. + + args: argparse.ArgumentParser instance + ''' + force_stdout = setQuiet(args) + cfg = getConfig(args) + _mount(cfg) + s = snapshots.Snapshots(cfg) + snapshots_list = s.get_snapshots_list() + if snapshots_list: + for snapshot_id in snapshots_list: + print('SnapshotID: %s' % snapshot_id, file=force_stdout) + else: + logger.error("There are no snapshots in '%s'" % cfg.get_profile_name()) + if not args.keep_mount: + _umount(cfg) + sys.exit(RETURN_OK) + +def snapshotsListPath(args): + '''command for printing a list of all snapshots pathes in current profile. + + args: argparse.ArgumentParser instance + ''' + force_stdout = setQuiet(args) + cfg = getConfig(args) + _mount(cfg) + s = snapshots.Snapshots(cfg) + snapshots_list = s.get_snapshots_list() + if snapshots_list: + for snapshot_id in snapshots_list: + print('SnapshotPath: %s' % s.get_snapshot_path(snapshot_id), file=force_stdout) + else: + logger.error("There are no snapshots in '%s'" % cfg.get_profile_name()) + if not args.keep_mount: + _umount(cfg) + sys.exit(RETURN_OK) + +def lastSnapshot(args): + '''command for printing the very last snapshot in current profile. + + args: argparse.ArgumentParser instance + ''' + force_stdout = setQuiet(args) + cfg = getConfig(args) + _mount(cfg) + s = snapshots.Snapshots(cfg) + snapshots_list = s.get_snapshots_list() + if snapshots_list: + print('SnapshotID: %s' % snapshots_list[0], file=force_stdout) + else: + logger.error("There are no snapshots in '%s'" % cfg.get_profile_name()) + _umount(cfg) + sys.exit(RETURN_OK) + +def lastSnapshotPath(args): + '''command for printing the path of the very last snapshot in + current profile. + + args: argparse.ArgumentParser instance + ''' + force_stdout = setQuiet(args) + cfg = getConfig(args) + _mount(cfg) + s = snapshots.Snapshots(cfg) + snapshots_list = s.get_snapshots_list() + if snapshots_list: + print('SnapshotPath: %s' % s.get_snapshot_path(snapshots_list[0]), file=force_stdout) + else: + logger.error("There are no snapshots in '%s'" % cfg.get_profile_name()) + if not args.keep_mount: + _umount(cfg) + sys.exit(RETURN_OK) + +def unmount(args): + '''command for unmounting all filesystems. + + args: argparse.ArgumentParser instance + ''' + setQuiet(args) + cfg = getConfig(args) + _mount(cfg) + _umount(cfg) + sys.exit(RETURN_OK) + +def benchmarkCipher(args): + '''command for transfering a file with scp to remote host with all + available ciphers and print its speed and time. + + args: argparse.ArgumentParser instance + ''' + setQuiet(args) + printHeader() + cfg = getConfig(args) + if cfg.get_snapshots_mode() in ('ssh', 'ssh_encfs'): + ssh = sshtools.SSH(cfg) + ssh.benchmark_cipher(args.FILE_SIZE) + sys.exit(RETURN_OK) + else: + logger.error("SSH is not configured for profile '%s'!" % cfg.get_profile_name()) + sys.exit(RETURN_ERR) - return cfg +def pwCache(args): + '''command for starting password cache daemon. + args: argparse.ArgumentParser instance + ''' + force_stdout = setQuiet(args) + printHeader() + cfg = getConfig(args) + ret = RETURN_OK + daemon = password.Password_Cache(cfg) + if args.ACTION and args.ACTION != 'status': + getattr(daemon, args.ACTION)() + elif args.ACTION == 'status': + print('%(app)s Password Cache: ' % {'app': cfg.APP_NAME}, end=' ', file = force_stdout) + if daemon.status(): + print(cli.bcolors.OKGREEN + 'running' + cli.bcolors.ENDC, file = force_stdout) + ret = RETURN_OK + else: + print(cli.bcolors.FAIL + 'not running' + cli.bcolors.ENDC, file = force_stdout) + ret = RETURN_ERR + else: + daemon.run() + sys.exit(ret) + +def decode(args): + '''command for decoding pathes given pathes with 'encfsctl'. + Will listen on stdin if no path was given. + + args: argparse.ArgumentParser instance + ''' + force_stdout = setQuiet(args) + cfg = getConfig(args) + if cfg.get_snapshots_mode() not in ('local_encfs', 'ssh_encfs'): + logger.error("Profile '%s' is not encrypted." % cfg.get_profile_name()) + sys.exit(RETURN_ERR) + _mount(cfg) + d = encfstools.Decode(cfg) + if not args.PATH: + while True: + try: + path = input() + except EOFError: + break + if not path: + break + print(d.path(path), file = force_stdout) + else: + print('\n'.join(d.list(args.PATH)), file = force_stdout) + d.close() + _umount(cfg) + sys.exit(RETURN_OK) + +def remove(args, force = False): + '''command for removing snapshots. + + args: argparse.ArgumentParser instance + force: don't ask before removing (BE CAREFUL!) + ''' + setQuiet(args) + printHeader() + cfg = getConfig(args) + _mount(cfg) + cli.remove(cfg, args.SNAPSHOT_ID, force) + _umount(cfg) + sys.exit(RETURN_OK) + +def removeAndDoNotAskAgain(args): + '''command for removing snapshots without asking before remove + (BE CAREFUL!) + + args: argparse.ArgumentParser instance + ''' + remove(args, True) + +def restore(args): + '''command for restoring files from snapshots. + + args: argparse.ArgumentParser instance + ''' + setQuiet(args) + printHeader() + cfg = getConfig(args) + _mount(cfg) + cli.restore(cfg, + args.SNAPSHOT_ID, + args.WHAT, + args.WHERE, + delete = args.delete, + backup = args.local_backup, + no_backup = args.no_local_backup) + _umount(cfg) + sys.exit(RETURN_OK) + +def checkConfig(args): + '''command for checking the config file. + + args: argparse.ArgumentParser instance + ''' + force_stdout = setQuiet(args) + printHeader() + cfg = getConfig(args) + if cli.checkConfig(cfg, crontab = not args.no_crontab): + print("\nConfig %(cfg)s profile '%(profile)s' is fine." + % {'cfg': cfg._LOCAL_CONFIG_PATH, + 'profile': cfg.get_profile_name()}, + file = force_stdout) + sys.exit(RETURN_OK) + else: + print("\nConfig %(cfg)s profile '%(profile)s' has errors." + % {'cfg': cfg._LOCAL_CONFIG_PATH, + 'profile': cfg.get_profile_name()}, + file = force_stdout) + sys.exit(RETURN_ERR) if __name__ == '__main__': start_app() - diff -Nru backintime-1.0.36/common/bash-completion/backintime backintime-1.1.12/common/bash-completion/backintime --- backintime-1.0.36/common/bash-completion/backintime 1970-01-01 00:00:00.000000000 +0000 +++ backintime-1.1.12/common/bash-completion/backintime 2016-01-11 18:07:58.000000000 +0000 @@ -0,0 +1,104 @@ +#extract profile and config arguments +_bit_extr_opts() +{ + local c=0 last="" opts="" + while [[ $c -le ${COMP_CWORD} ]]; do + case "${last}" in + --profile|--profile-id|--config) + if [[ ${COMP_WORDS[$c]} != -* ]]; then + opts="${opts} ${last} ${COMP_WORDS[$c]}" + fi ;; + esac + last=${COMP_WORDS[$c]} + c=$[$c+1] + done + echo "${opts}" +} + +#return a list of all snapshots +_bit_snapshots_list() +{ + backintime$(_bit_extr_opts) --quiet snapshots-list | awk '{print $2}' +} + +_backintime() +{ + local cur prev actions opts pw_cache_commands + local cur_action='' pos_action=0 c=0 + COMPREPLY=() + cur="${COMP_WORDS[COMP_CWORD]}" + prev="${COMP_WORDS[COMP_CWORD-1]}" + opts="--profile --profile-id --quiet --config --version --license \ + --help --debug --checksum --no-crontab --keep-mount --delete \ + --local-backup --no-local-backup" + actions="backup backup-job snapshots-path snapshots-list \ + snapshots-list-path last-snapshot last-snapshot-path unmount \ + benchmark-cipher pw-cache decode remove restore check-config" + pw_cache_commands="start stop restart reload status" + + #extract the current action + while [[ $c -le $[${COMP_CWORD} - 1] ]]; do + case ${actions} in + *"${COMP_WORDS[$c]}"*) + cur_action="${COMP_WORDS[$c]}" + pos_action=${c} + break ;; + esac + c=$[${c}+1] + done + + case "${cur_action}" in + restore) + if [[ ${cur} != -* ]]; then + #which positional argument is $cur? + case $[${COMP_CWORD}-${pos_action}] in + #first arg is a filename + 1) _filedir + return 0 + ;; + #second arg is a dirname + 2) _filedir -d + return 0 + ;; + #third arg is snapshot-id + 3) COMPREPLY=( $(compgen -W "$(_bit_snapshots_list)" -- ${cur}) ) + return 0 + ;; + esac + fi + ;; + remove|remove-and-do-not-ask-again) + if [[ ${cur} != -* ]]; then + #snapshot-ids + COMPREPLY=( $(compgen -W "$(_bit_snapshots_list)" -- ${cur}) ) + return 0 + else + #other args + COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) + return 0 + fi + ;; + esac + + case "${prev}" in + --config|decode|restore) + if [[ ${cur} != -* ]]; then + _filedir + return 0 + fi ;; + pw-cache) + if [[ ${cur} != -* ]]; then + COMPREPLY=( $(compgen -W "${pw_cache_commands}" -- ${cur}) ) + return 0 + fi ;; + *) + if [[ -z "${cur_action}" ]]; then + opts="${opts} ${actions}" + fi + COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) + return 0 + ;; + esac +} +complete -F _backintime backintime +complete -F _backintime backintime-qt4 diff -Nru backintime-1.0.36/common/bcolors.py backintime-1.1.12/common/bcolors.py --- backintime-1.0.36/common/bcolors.py 1970-01-01 00:00:00.000000000 +0000 +++ backintime-1.1.12/common/bcolors.py 2016-01-11 18:07:58.000000000 +0000 @@ -0,0 +1,37 @@ +#!/usr/bin/env python3 +# Copyright (C) 2015 Germar Reitze +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +import sys + +if sys.stdout.isatty(): + HEADER = '\033[95m' + OKBLUE = '\033[94m' + OKGREEN = '\033[92m' + WARNING = '\033[93m' + FAIL = '\033[91m' + ENDC = '\033[0m' + BOLD = '\033[1m' + UNDERLINE = '\033[4m' +else: + HEADER = '' + OKBLUE = '' + OKGREEN = '' + WARNING = '' + FAIL = '' + ENDC = '' + BOLD = '' + UNDERLINE = '' diff -Nru backintime-1.0.36/common/cli.py backintime-1.1.12/common/cli.py --- backintime-1.0.36/common/cli.py 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/cli.py 2016-01-11 18:07:58.000000000 +0000 @@ -1,5 +1,6 @@ +# -*- coding: utf-8 -*- # Back In Time -# Copyright (c) 2012-2013 Germar Reitze +# Copyright (C) 2012-2016 Germar Reitze # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -20,86 +21,198 @@ import tools import snapshots +import bcolors -def restore(cfg, snapshot_id = None, what = None, where = None): +def restore(cfg, snapshot_id = None, what = None, where = None, **kwargs): if what is None: - what = raw_input('File to restore: ') + what = input('File to restore: ') what = tools.prepare_path(os.path.abspath(os.path.expanduser(what))) if where is None: - where = raw_input('Restore to (empty for original path): ') - if len(where) >= 1: + where = input('Restore to (empty for original path): ') + if where: where = tools.prepare_path(os.path.abspath(os.path.expanduser(where))) - _snapshots = snapshots.Snapshots(cfg) - snapshot_list = _snapshots.get_snapshots_list() + snapshots_ = snapshots.Snapshots(cfg) + snapshot_id = selectSnapshot(snapshots_, snapshot_id, 'SnapshotID to restore') + print('') + RestoreDialog(cfg, snapshots_, snapshot_id, what, where, **kwargs).run() + +def remove(cfg, snapshot_ids = None, force = None): + snapshots_ = snapshots.Snapshots(cfg) + if not snapshot_ids: + snapshot_ids = (None,) + sids = [selectSnapshot(snapshots_, sid, 'SnapshotID to remove') for sid in snapshot_ids] + + if not force: + print('Do you really want to remove this snapshots?') + [print(snapshots_.get_snapshot_display_name(sid)) for sid in sids] + if not 'yes' == input('(no/yes): '): + return + + [snapshots_.remove_snapshot(sid) for sid in sids] + +def checkConfig(cfg, crontab = True): + import mount + from exceptions import MountException + def announceTest(): + print() + print(frame(test)) + + def failed(): + print(test + ': ' + bcolors.FAIL + 'failed' + bcolors.ENDC) + + def okay(): + print(test + ': ' + bcolors.OKGREEN + 'done' + bcolors.ENDC) + + def errorHandler(msg): + print(bcolors.WARNING + 'WARNING: ' + bcolors.ENDC + msg) + + cfg.set_error_handler(errorHandler) + mode = cfg.get_snapshots_mode() + + if cfg.SNAPSHOT_MODES[mode][0] is not None: + #pre_mount_check + test = 'Run mount tests' + announceTest() + mnt = mount.Mount(cfg = cfg, tmp_mount = True) + try: + mnt.pre_mount_check(mode = mode, first_run = True) + except MountException as ex: + failed() + print(str(ex)) + return False + okay() + + #okay, lets try to mount + test = 'Mount' + announceTest() + try: + hash_id = mnt.mount(mode = mode, check = False) + except MountException as ex: + failed() + print(str(ex)) + return False + okay() + + test = 'Check/prepair snapshot path' + announceTest() + snapshots_path = cfg.get_snapshots_path(mode = mode, tmp_mount = True) + + if not cfg.set_snapshots_path( snapshots_path, mode = mode ): + failed() + return False + okay() + + #umount + if not cfg.SNAPSHOT_MODES[mode][0] is None: + test = 'Unmount' + announceTest() + try: + mnt.umount(hash_id = hash_id) + except MountException as ex: + failed() + print(str(ex)) + return False + okay() + + test = 'Check config' + announceTest() + if not cfg.check_config(): + failed() + return False + okay() + + if crontab: + test = 'Install crontab' + announceTest() + if not cfg.setup_cron(): + failed() + return False + okay() + + return True + +def selectSnapshot(snapshots_, snapshot_id = None, msg = 'SnapshotID'): + '''check if given snapshot is valid. If not print a list of all + snapshots and ask to choose one''' + snapshot_list = snapshots_.get_snapshots_list() + len_snapshots = len(snapshot_list) + if not snapshot_id is None: if len(snapshot_id) == 19: - if not snapshot_id in snapshot_list: + if snapshot_id in snapshot_list: + return snapshot_id + else: print('SnapshotID %s not found.' % snapshot_id) - snapshot_id = None else: try: index = int(snapshot_id) - snapshot_id = snapshot_list[index] + return snapshot_list[index] except (ValueError, IndexError): print('Invalid SnaphotID index: %s' % snapshot_id) - snapshot_id = None - if snapshot_id is None: - print('\nSnapshotID\'s:') - #get terminal size - size = (24, 80) - for fd in (sys.stdin, sys.stdout, sys.stderr): - try: - import fcntl, termios, struct - rc = struct.unpack('hh', fcntl.ioctl(fd, termios.TIOCGWINSZ, '1234')) - except: - rc = None - if not rc is None: - size = rc - break - len_snapshots = len(snapshot_list) - columns = (int(size[1]) - 25) / 26 + 1 - rows = len_snapshots // columns - if len_snapshots % columns > 0: - rows += 1 - for row in range(rows): - line = [] - for column in range(columns): - index = row + column * rows - if index > len_snapshots - 1: - continue - line.append('{i:>4}: {s}'.format(i = index, s = snapshot_list[index])) - print(' '.join(line)) - print('') - while snapshot_id is None: - try: - input = int(raw_input('SnapshotID to restore ( 0 - %d ): ' % (len_snapshots - 1) )) - snapshot_id = snapshot_list[input] - except (ValueError, IndexError): - print('Invalid Input') - continue + snapshot_id = None + columns = (terminalSize()[1] - 25) // 26 + 1 + rows = len_snapshots // columns + if len_snapshots % columns > 0: + rows += 1 + + print('SnapshotID\'s:') + for row in range(rows): + line = [] + for column in range(columns): + index = row + column * rows + if index > len_snapshots - 1: + continue + line.append('{i:>4}: {s}'.format(i = index, s = snapshot_list[index])) + print(' '.join(line)) print('') - RestoreDialog(cfg, _snapshots, snapshot_id, what, where).run() + while snapshot_id is None: + try: + sid = int(input(msg + ' ( 0 - %d ): ' % (len_snapshots - 1) )) + snapshot_id = snapshot_list[sid] + except (ValueError, IndexError): + print('Invalid Input') + continue + return snapshot_id + +def terminalSize(): + '''get terminal size''' + for fd in (sys.stdin, sys.stdout, sys.stderr): + try: + import fcntl, termios, struct + return [int(x) for x in struct.unpack('hh', fcntl.ioctl(fd, termios.TIOCGWINSZ, '1234'))] + except: + pass + return [24, 80] + +def frame(msg, size = 32): + ret = ' ┌' + '─' * size + '┐\n' + ret += ' │' + msg.center(size) + '│\n' + ret += ' └' + '─' * size + '┘' + return ret class RestoreDialog(object): - def __init__(self, cfg, _snapshots, snapshot_id, what, where): + def __init__(self, cfg, snapshots_, snapshot_id, what, where, **kwargs): self.config = cfg - self.snapshots = _snapshots + self.snapshots = snapshots_ self.snapshot_id = snapshot_id self.what = what self.where = where - + self.kwargs = kwargs + self.log_file = self.config.get_restore_log_file() if os.path.exists(self.log_file): os.remove(self.log_file) def callback(self, line, *params): + if not line: + return print(line) with open(self.log_file, 'a') as log: log.write(line + '\n') def run(self): - self.snapshots.restore(self.snapshot_id, self.what, self.callback, self.where) + self.snapshots.restore(self.snapshot_id, self.what, self.callback, self.where, **self.kwargs) print('\nLog saved to %s' % self.log_file) diff -Nru backintime-1.0.36/common/configfile.py backintime-1.1.12/common/configfile.py --- backintime-1.0.36/common/configfile.py 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/configfile.py 2016-01-11 18:07:58.000000000 +0000 @@ -1,5 +1,5 @@ # Back In Time -# Copyright (C) 2008-2009 Oprea Dan, Bart de Koning, Richard Bailey +# Copyright (C) 2008-2016 Oprea Dan, Bart de Koning, Richard Bailey, Germar Reitze # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,100 +15,200 @@ # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -import os.path import os -import gettext +import gettext +import logger _=gettext.gettext - -class ConfigFile: +class ConfigFile(object): + '''store options in a plain text file in form of: + key=value + ''' def __init__( self ): self.dict = {} self.error_handler = None self.question_handler = None def set_error_handler( self, handler ): + '''register a function that should be called for notifying errors. + + handler: callable function + ''' self.error_handler = handler def set_question_handler( self, handler ): + '''register a function that should be called for asking questions. + + handler: callable function + ''' self.question_handler = handler def clear_handlers( self ): + '''reset error and question handlers. + ''' self.error_handler = None self.question_handler = None def notify_error( self, message ): + '''call previously registered function to show an error. + + message: error message (str) that should be shown + ''' if self.error_handler is None: return self.error_handler( message ) def ask_question( self, message ): + '''call previously registered function to ask a question. + + message: question (str) that should be shown + ''' if self.question_handler is None: return False return self.question_handler( message ) def save( self, filename ): + '''save all options to file. + + filename: full path + + tests: + test/test_configfile.TestConfigFile.test_save + ''' try: - file = open( filename, 'w' ) - keys = self.dict.keys() - keys.sort() - for key in keys: - file.write( "%s=%s\n" % ( key, self.dict[key] ) ) - file.close() - except: - pass + with open( filename, 'wt' ) as f: + keys = list(self.dict.keys()) + keys.sort() + for key in keys: + f.write( "%s=%s\n" % ( key, self.dict[key] ) ) + except OSError as e: + logger.error('Failed to save config: %s' %str(e), self) + self.notify_error(_('Failed to save config: %s') %str(e)) + return False + return True def load( self, filename, **kwargs ): + '''reset current options and load new options from file. + + filename: full path + + tests: + test/test_configfile.TestConfigFile.test_load + ''' self.dict = {} self.append( filename, **kwargs ) - def append( self, filename, maxsplit = -1 ): + def append( self, filename, maxsplit = 1 ): + '''load options from file and append them to current options. + + filename: full path + maxsplit: split lines only n times on '=' + ''' lines = [] + if not os.path.isfile(filename): + return try: - file = open( filename, 'r' ) - lines = file.readlines() - file.close() - except: - pass + with open( filename, 'rt' ) as f: + lines = f.readlines() + except OSError as e: + logger.error('Failed to load config: %s' %str(e), self) + self.notify_error(_('Failed to load config: %s') %str(e)) for line in lines: - items = line.split( '=', maxsplit ) + items = line.strip('\n').split( '=', maxsplit ) if len( items ) == 2: - self.dict[ items[ 0 ] ] = items[ 1 ][ : -1 ] + self.dict[ items[ 0 ] ] = items[ 1 ] def remap_key( self, old_key, new_key ): + '''remap keys to a new key name. + + old_key: old key name + new_key: new key name + + tests: + test/test_configfile.TestConfigFile.test_remap_key + ''' if old_key != new_key: - if self.dict.has_key( old_key ): - if not self.dict.has_key( new_key ): + if old_key in self.dict: + if new_key not in self.dict: self.dict[ new_key ] = self.dict[ old_key ] del self.dict[ old_key ] def has_value( self, key ): - return self.dict.has_key( key ) + '''True if key is set. + + key: string used as key + + tests: + test/test_configfile.TestConfigFile.test_has_value + ''' + return key in self.dict def get_str_value( self, key, default_value = '' ): - if self.dict.has_key( key ): + '''return a 'str' instance of key's value. + + key: string used as key + default_value: return this if key is not set + + tests: + test/test_configfile.TestConfigFile.test_get_str_value + test/test_configfile.TestConfigFile.test_get_str_value_default + ''' + if key in self.dict: return self.dict[ key ] else: return default_value def set_str_value( self, key, value ): + '''set a string value for key. + + key: string used as key + value: store this option + + tests: + test/test_configfile.TestConfigFile.test_set_str_value + ''' self.dict[ key ] = value def get_int_value( self, key, default_value = 0 ): + '''return a 'int' instance of key's value. + + key: string used as key + default_value: return this if key is not set + + tests: + test/test_configfile.TestConfigFile.test_get_int_value + test/test_configfile.TestConfigFile.test_get_int_value_default + ''' try: return int( self.dict[ key ] ) except: return default_value def set_int_value( self, key, value ): + '''set an integer value for key. + + key: string used as key + value: store this option + + tests: + test/test_configfile.TestConfigFile.test_set_int_value + ''' self.set_str_value( key, str( value ) ) def get_bool_value( self, key, default_value = False ): + '''return a 'bool' instance of key's value. + + key: string used as key + default_value: return this if key is not set + + tests: + test/test_configfile.TestConfigFile.test_get_bool_value + test/test_configfile.TestConfigFile.test_get_bool_value_default + ''' try: val = self.dict[ key ] if "1" == val or "TRUE" == val.upper(): @@ -118,19 +218,146 @@ return default_value def set_bool_value( self, key, value ): + '''set a bool value for key. + + key: string used as key + value: store this option + + tests: + test/test_configfile.TestConfigFile.test_set_bool_value + ''' if value: self.set_str_value( key, 'true' ) else: self.set_str_value( key, 'false' ) + def get_list_value(self, key, type_key = 'str:value', default_value = []): + '''return a list of values + + key: used base-key + type_key: 'str:value' => return str values from key.value + 'int:type' => return int values from key.type + 'bool:enabled' => return bool values from key.enabled + ('str:value', 'int:type') => return tuple of values + default_value: defualt value + + size of list must be stored in key.size + + tests: + test/test_configfile.TestConfigFile.test_get_list_value_default + test/test_configfile.TestConfigFile.test_get_list_value_int + test/test_configfile.TestConfigFile.test_get_list_value_str + test/test_configfile.TestConfigFile.test_get_list_value_bool + test/test_configfile.TestConfigFile.test_get_list_value_tuple + test/test_configfile.TestConfigFile.test_get_list_value_tuple_missing_values + test/test_configfile.TestConfigFile.test_get_list_value_invalid_type + ''' + def get_value(key, tk): + t = '' + if isinstance(tk, str): + t, k = tk.split(':', maxsplit = 1) + if t in ('str', 'int', 'bool'): + func = getattr(self, 'get_%s_value' %t) + return func('%s.%s' %(key, k)) + raise TypeError('Invalid type_key: %s' %tk) + + size = self.get_int_value('%s.size' %key, -1) + if size <= 0: + return default_value + + ret = [] + for i in range(1, size + 1): + if isinstance(type_key, str): + ret.append(get_value('%s.%s' %(key, i), type_key)) + elif isinstance(type_key, tuple): + items = [] + for tk in type_key: + items.append(get_value('%s.%s' %(key, i), tk)) + ret.append(tuple(items)) + else: + raise TypeError('Invalid type_key: %s' %type_key) + return ret + + def set_list_value(self, key, type_key, value): + '''set a list of values + + key: used base-key + type_key: 'str:value' => set str values from key.value + 'int:type' => set int values from key.type + 'bool:enabled' => set bool values from key.enabled + ('str:value', 'int:type') => set tuple of values + value: that should be stored + + size of list will be stored in key.size + + tests: + test/test_configfile.TestConfigFile.test_set_list_value_int + test/test_configfile.TestConfigFile.test_set_list_value_str + test/test_configfile.TestConfigFile.test_set_list_value_bool + test/test_configfile.TestConfigFile.test_set_list_value_tuple + test/test_configfile.TestConfigFile.test_set_list_value_tuple_missing_values + test/test_configfile.TestConfigFile.test_set_list_value_remove_leftovers + test/test_configfile.TestConfigFile.test_set_list_value_remove_leftovers_tuple + test/test_configfile.TestConfigFile.test_set_list_value_invalid_type + ''' + def set_value(key, tk, v): + t = '' + if isinstance(tk, str): + t, k = tk.split(':', maxsplit = 1) + if t in ('str', 'int', 'bool'): + func = getattr(self, 'set_%s_value' %t) + return func('%s.%s' %(key, k), v) + raise TypeError('Invalid type_key: %s' %tk) + + if not isinstance(value, (list, tuple)): + raise TypeError('value has wrong type: %s' %value) + + old_size = self.get_int_value('%s.size' %key, -1) + self.set_int_value('%s.size' %key, len(value)) + + for i, v in enumerate(value, start = 1): + if isinstance(type_key, str): + set_value('%s.%s' %(key, i), type_key, v) + elif isinstance(type_key, tuple): + for iv, tk in enumerate(type_key): + if len(v) > iv: + set_value('%s.%s' %(key, i), tk, v[iv]) + else: + self.remove_key('%s.%s.%s' %(key, i, tk.split(':')[1])) + else: + raise TypeError('Invalid type_key: %s' %type_key) + + if len(value) < old_size: + for i in range(len(value) + 1, old_size + 1): + if isinstance(type_key, str): + self.remove_key('%s.%s.%s' %(key, i, type_key.split(':')[1])) + elif isinstance(type_key, tuple): + for tk in type_key: + self.remove_key('%s.%s.%s' %(key, i, tk.split(':')[1])) + def remove_key( self, key ): - if self.dict.has_key( key ): + '''remove key from options. + + key: string used as key + + tests: + test/test_configfile.TestConfigFile.test_remove_key + ''' + if key in self.dict: del self.dict[ key ] def remove_keys_starts_with( self, prefix ): + '''remove key from options which start with given prefix. + + prefix: prefix for keys (key starts with this string) that should be removed + + tests: + test/test_configfile.TestConfigFile.test_remove_keys_start_with + test/test_configfile.TestConfigFile.test_remove_keys_start_with_not_matching_prefix + ''' remove_keys = [] - for key in self.dict.iterkeys(): + for key in self.dict.keys(): if key.startswith( prefix ): remove_keys.append( key ) @@ -138,7 +365,7 @@ del self.dict[ key ] def get_keys(self): - return self.dict.keys() + return list(self.dict.keys()) class ConfigFileWithProfiles( ConfigFile ): def __init__( self, default_profile_name = '' ): @@ -148,11 +375,22 @@ self.current_profile_id = '1' def load( self, filename ): + '''reset current options and load new options from file. + + filename: full path + + tests: + test/test_configfile.TestConfigFileWithProfiles.test_load + ''' self.current_profile_id = '1' - ConfigFile.load( self, filename ) + super(ConfigFileWithProfiles, self).load(filename) def append( self, filename ): - ConfigFile.append( self, filename ) + '''load options from file and append them to current options. + + filename: full path + ''' + super(ConfigFileWithProfiles, self).append(filename) found = False profiles = self.get_profiles() @@ -161,13 +399,13 @@ found = True break - if not found and len( profiles ) > 0: + if not found and profiles: self.current_profile_id = profiles[0] if self.get_int_value( 'profiles.version' ) <= 0: rename_keys = [] - for key in self.dict.iterkeys(): + for key in self.dict.keys(): if key.startswith( 'profile.0.' ): rename_keys.append( key ) @@ -180,9 +418,20 @@ self.set_int_value( 'profiles.version', 1 ) def get_profiles( self ): + '''return a list of all available profile IDs. Profile IDs are strings! + + tests: + test/test_configfile.TestConfigFileWithProfiles.test_get_profiles + ''' return self.get_str_value( 'profiles', '1' ).split(':') def get_profiles_sorted_by_name( self ): + '''return a list of available profile IDs alphabetical sorted by their names. + Profile IDs are strings! + + tests: + test/test_configfile.TestConfigFileWithProfiles.test_get_profiles_sorted_by_name + ''' profiles_unsorted = self.get_profiles() if len( profiles_unsorted ) <= 1: return profiles_unsorted @@ -192,7 +441,7 @@ for profile_id in profiles_unsorted: profiles_dict[ self.get_profile_name( profile_id ).upper() ] = profile_id - keys = profiles_dict.keys() + keys = list(profiles_dict.keys()) keys.sort() profiles_sorted = [] @@ -202,38 +451,73 @@ return profiles_sorted def get_current_profile( self ): + '''return the currently selected profile ID. Profile IDs are strings! + + tests: + test/test_configfile.TestConfigFileWithProfiles.test_current_profile + ''' return self.current_profile_id def set_current_profile( self, profile_id ): + '''change the current profile. + + profile_id: valid profile ID + + tests: + test/test_configfile.TestConfigFileWithProfiles.test_current_profile + ''' + if isinstance(profile_id, int): + profile_id = str(profile_id) profiles = self.get_profiles() - for id in profiles: - if id == profile_id: + for i in profiles: + if i == profile_id: self.current_profile_id = profile_id + logger.debug('change current profile: %s' %profile_id, self) + logger.changeProfile(profile_id) return True return False def set_current_profile_by_name( self, name ): + '''change the current profile. + + name: valid profile name + + tests: + test/test_configfile.TestConfigFileWithProfiles.test_current_profile_by_name + ''' profiles = self.get_profiles() for profile_id in profiles: if self.get_profile_name( profile_id ) == name: self.current_profile_id = profile_id + logger.debug('change current profile: %s' %name, self) + logger.changeProfile(profile_id) return True return False def profile_exists( self, profile_id ): - profiles = self.get_profiles() + '''True if the profile exists. - for id in profiles: - if id == profile_id: - return True + profile_id: profile ID - return False + tests: + test/test_configfile.TestConfigFileWithProfiles.test_profile_exists + ''' + if isinstance(profile_id, int): + profile_id = str(profile_id) + return profile_id in self.get_profiles() def profile_exists_by_name( self, name ): + '''True if the profile exists. + + name: profile name + + tests: + test/test_configfile.TestConfigFileWithProfiles.test_profile_exists_by_name + ''' profiles = self.get_profiles() for profile_id in profiles: @@ -243,9 +527,32 @@ return False def get_profile_name( self, profile_id = None ): - return self.get_profile_str_value( 'name', self.default_profile_name, profile_id ) + '''return the name of the profile. + + profile_id: valid profile ID + + tests: + test/test_configfile.TestConfigFileWithProfiles.test_get_profile_name + ''' + if isinstance(profile_id, int): + profile_id = str(profile_id) + if profile_id is None: + profile_id = self.current_profile_id + if profile_id == '1': + default = self.default_profile_name + else: + default = 'Profile %s' % profile_id + return self.get_profile_str_value( 'name', default, profile_id ) def add_profile( self, name ): + '''add a new profile if the name is not already in use. + Return the new profile ID. + + name: new profile name + + tests: + test/test_configfile.TestConfigFileWithProfiles.test_add_profile + ''' profiles = self.get_profiles() for profile_id in profiles: @@ -257,10 +564,8 @@ while True: ok = True - for profile in profiles: - if profile == str(new_id): - ok = False - break + if str(new_id) in profiles: + ok = False if ok: break @@ -276,6 +581,15 @@ return new_id def remove_profile( self, profile_id = None ): + '''remove profile and all its keys and values. + + profile_id: valid profile ID + + tests: + test/test_configfile.TestConfigFileWithProfiles.test_remove_profile + ''' + if isinstance(profile_id, int): + profile_id = str(profile_id) if profile_id == None: profile_id = self.current_profile_id @@ -304,6 +618,15 @@ return True def set_profile_name( self, name, profile_id = None ): + '''change the name of the profile. + name: new profile name + profile_id: valid profile ID + + tests: + test/test_configfile.TestConfigFileWithProfiles.test_set_profile_name + ''' + if isinstance(profile_id, int): + profile_id = str(profile_id) if profile_id == None: profile_id = self.current_profile_id @@ -319,18 +642,53 @@ return True def _get_profile_key_( self, key, profile_id = None ): + '''return the prefix for keys with profile. e.g. 'profile1.key' + + key: key name + profile_id: valid profile ID + + tests: + test/test_configfile.TestConfigFileWithProfiles.test_get_profile_key + ''' + if isinstance(profile_id, int): + profile_id = str(profile_id) if profile_id is None: profile_id = self.current_profile_id return 'profile' + profile_id + '.' + key def remove_profile_key( self, key, profile_id = None ): + '''remove the key from profile. + + key: key name + profile_id: valid profile ID + + tests: + test/test_configfile.TestConfigFileWithProfiles.test_remove_profile_key + ''' self.remove_key( self._get_profile_key_( key, profile_id ) ) def remove_profile_keys_starts_with( self, prefix, profile_id = None ): + '''remove the keys starting with prefix from profile. + + prefix: prefix for keys (key starts with this string) that + should be removed + profile_id: valid profile ID + + tests: + test/test_configfile.TestConfigFileWithProfiles.test_remove_profile_keys_starts_with + ''' self.remove_keys_starts_with( self._get_profile_key_( prefix, profile_id ) ) def has_profile_value( self, key, profile_id = None ): - return self.dict.has_key( self._get_profile_key_( key, profile_id ) ) + '''True if key is set in profile. + + key: string used as key + profile_id: valid profile ID + + tests: + test/test_configfile.TestConfigFileWithProfiles.test_has_profile_value + ''' + return self._get_profile_key_( key, profile_id ) in self.dict def get_profile_str_value( self, key, default_value = '', profile_id = None ): return self.get_str_value( self._get_profile_key_( key, profile_id ), default_value ) @@ -349,3 +707,9 @@ def set_profile_bool_value( self, key, value, profile_id = None ): self.set_bool_value( self._get_profile_key_( key, profile_id ), value ) + + def get_profile_list_value(self, key, type_key = 'str:value', default_value = [], profile_id = None): + return self.get_list_value(self._get_profile_key_(key, profile_id), type_key, default_value) + + def set_profile_list_value(self, key, type_key, value, profile_id = None): + self.set_list_value(self._get_profile_key_(key, profile_id), type_key, value) diff -Nru backintime-1.0.36/common/config.py backintime-1.1.12/common/config.py --- backintime-1.0.36/common/config.py 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/config.py 2016-01-11 18:07:58.000000000 +0000 @@ -1,5 +1,5 @@ # Back In Time -# Copyright (C) 2008-2009 Oprea Dan, Bart de Koning, Richard Bailey +# Copyright (C) 2008-2016 Oprea Dan, Bart de Koning, Richard Bailey, Germar Reitze # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -16,35 +16,38 @@ # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -import os.path import os import datetime import gettext import socket import random -import re -import tempfile -import stat +import shlex +try: + import pwd +except ImportError: + import getpass + pwd = None -import configfile import tools +import configfile import logger import mount import sshtools import encfstools -##import dummytools import password +import pluginmanager +from exceptions import PermissionDeniedByPolicy, InvalidChar _=gettext.gettext -gettext.bindtextdomain( 'backintime', '/usr/share/locale' ) +gettext.bindtextdomain('backintime', os.path.join(tools.get_share_path(), 'locale')) gettext.textdomain( 'backintime' ) class Config( configfile.ConfigFileWithProfiles ): APP_NAME = 'Back In Time' - VERSION = '1.0.36' - COPYRIGHT = 'Copyright (c) 2008-2013 Oprea Dan, Bart de Koning, Richard Bailey, Germar Reitze' + VERSION = '1.1.12' + COPYRIGHT = 'Copyright (C) 2008-2016 Oprea Dan, Bart de Koning, Richard Bailey, Germar Reitze' CONFIG_VERSION = 5 NONE = 0 @@ -52,6 +55,7 @@ _5_MIN = 2 _10_MIN = 4 _30_MIN = 7 + HOUR = 10 _1_HOUR = 10 _2_HOURS = 12 _4_HOURS = 14 @@ -59,7 +63,7 @@ _12_HOURS = 18 CUSTOM_HOUR = 19 DAY = 20 - DAY_ANACRON = 25 + REPEATEDLY = 25 UDEV = 27 WEEK = 30 MONTH = 40 @@ -68,35 +72,57 @@ DISK_UNIT_MB = 10 DISK_UNIT_GB = 20 - AUTOMATIC_BACKUP_MODES = { - NONE : _('Disabled'), - AT_EVERY_BOOT : _('At every boot/reboot'), - _5_MIN: _('Every 5 minutes'), - _10_MIN: _('Every 10 minutes'), - _30_MIN: _('Every 30 minutes'), - _1_HOUR : _('Every hour'), - _2_HOURS : _('Every 2 hours'), - _4_HOURS : _('Every 4 hours'), - _6_HOURS : _('Every 6 hours'), - _12_HOURS : _('Every 12 hours'), - CUSTOM_HOUR : _('Custom Hours'), - DAY : _('Every Day'), - DAY_ANACRON : _('Daily (anacron)'), + AUTOMATIC_BACKUP_MODES = { + NONE : _('Disabled'), + AT_EVERY_BOOT : _('At every boot/reboot'), + _5_MIN: _('Every 5 minutes'), + _10_MIN: _('Every 10 minutes'), + _30_MIN: _('Every 30 minutes'), + _1_HOUR : _('Every hour'), + _2_HOURS : _('Every 2 hours'), + _4_HOURS : _('Every 4 hours'), + _6_HOURS : _('Every 6 hours'), + _12_HOURS : _('Every 12 hours'), + CUSTOM_HOUR : _('Custom Hours'), + DAY : _('Every Day'), + REPEATEDLY : _('Repeatedly (anacron)'), UDEV : _('When drive get connected (udev)'), - WEEK : _('Every Week'), + WEEK : _('Every Week'), MONTH : _('Every Month') } - REMOVE_OLD_BACKUP_UNITS = { - DAY : _('Day(s)'), - WEEK : _('Week(s)'), + REMOVE_OLD_BACKUP_UNITS = { + DAY : _('Day(s)'), + WEEK : _('Week(s)'), YEAR : _('Year(s)') } - MIN_FREE_SPACE_UNITS = { DISK_UNIT_MB : 'Mb', DISK_UNIT_GB : 'Gb' } + REPEATEDLY_UNITS = { + HOUR : _('Hour(s)'), + DAY : _('Day(s)'), + WEEK : _('Week(s)'), + MONTH : _('Month(s)') + } + + MIN_FREE_SPACE_UNITS = { DISK_UNIT_MB : 'MiB', DISK_UNIT_GB : 'GiB' } + + DEFAULT_EXCLUDE = [ '.gvfs', '.cache/*', '.thumbnails*', '[Tt]rash*', \ + '*.backup*', '*~', '.dropbox*', '/proc/*', '/sys/*', \ + '/dev/*', '/run/*', '/etc/mtab', \ + '/var/cache/apt/archives/*.deb', 'lost+found/*', \ + '/tmp/*', '/var/tmp/*', '/var/backups/*', '.Private' ] + + DEFAULT_RUN_NICE_FROM_CRON = True + DEFAULT_RUN_NICE_ON_REMOTE = False + DEFAULT_RUN_IONICE_FROM_CRON = True + DEFAULT_RUN_IONICE_FROM_USER = False + DEFAULT_RUN_IONICE_ON_REMOTE = False + DEFAULT_RUN_NOCACHE_ON_LOCAL = False + DEFAULT_RUN_NOCACHE_ON_REMOTE = False + DEFAULT_SSH_PREFIX = 'PATH=/opt/bin:/opt/sbin:\$PATH' + DEFAULT_REDIRECT_STDOUT_IN_CRON = True + DEFAULT_REDIRECT_STDERR_IN_CRON = False - DEFAULT_EXCLUDE = [ '.gvfs', '.cache*', '[Cc]ache*', '.thumbnails*', '[Tt]rash*', '*.backup*', '*~', '.dropbox*', '/proc/*', '/sys/*', '/dev/*', '/run/*' ] - exp = _(' EXPERIMENTAL!') SNAPSHOT_MODES = { #mode : (, 'ComboBox Text', need_pw|lbl_pw_1, need_2_pw|lbl_pw_2 ), @@ -104,42 +130,45 @@ 'ssh' : (sshtools.SSH, _('SSH'), _('SSH private key'), False ), 'local_encfs' : (encfstools.EncFS_mount, _('Local encrypted'), _('Encryption'), False ), 'ssh_encfs' : (encfstools.EncFS_SSH, _('SSH encrypted'), _('SSH private key'), _('Encryption') ) - ##'dummy' : (dummytools.Dummy, 'Dummy', 'Dummy', False ) } - MOUNT_ROOT = '/tmp/backintime' - SSH_CIPHERS = {'default': _('Default'), - 'aes128-ctr': _('AES128-CTR'), - 'aes192-ctr': _('AES192-CTR'), - 'aes256-ctr': _('AES256-CTR'), - 'arcfour256': _('ARCFOUR256'), - 'arcfour128': _('ARCFOUR128'), - 'aes128-cbc': _('AES128-CBC'), - '3des-cbc': _('3DES-CBC'), - 'blowfish-cbc': _('Blowfish-CBC'), - 'cast128-cbc': _('Cast128-CBC'), - 'aes192-cbc': _('AES192-CBC'), - 'aes256-cbc': _('AES256-CBC'), + 'aes128-ctr': _('AES128-CTR'), + 'aes192-ctr': _('AES192-CTR'), + 'aes256-ctr': _('AES256-CTR'), + 'arcfour256': _('ARCFOUR256'), + 'arcfour128': _('ARCFOUR128'), + 'aes128-cbc': _('AES128-CBC'), + '3des-cbc': _('3DES-CBC'), + 'blowfish-cbc': _('Blowfish-CBC'), + 'cast128-cbc': _('Cast128-CBC'), + 'aes192-cbc': _('AES192-CBC'), + 'aes256-cbc': _('AES256-CBC'), 'arcfour': _('ARCFOUR') } - + ENCODE = encfstools.Bounce() + PLUGIN_MANAGER = pluginmanager.PluginManager() def __init__( self, config_path = None ): configfile.ConfigFileWithProfiles.__init__( self, _('Main profile') ) - self._APP_PATH = os.path.dirname( os.path.abspath( os.path.dirname( __file__ ) ) ) - self._DOC_PATH = '/usr/share/doc/backintime' + self._APP_PATH = tools.get_backintime_path() + self._DOC_PATH = os.path.join(tools.get_share_path(), 'doc', 'backintime-common') if os.path.exists( os.path.join( self._APP_PATH, 'LICENSE' ) ): self._DOC_PATH = self._APP_PATH self._GLOBAL_CONFIG_PATH = '/etc/backintime/config' HOME_FOLDER = os.path.expanduser( '~' ) - self._LOCAL_DATA_FOLDER = os.path.join( os.getenv( 'XDG_DATA_HOME', '$HOME/.local/share' ).replace( '$HOME', HOME_FOLDER ), 'backintime' ) - self._LOCAL_CONFIG_FOLDER = os.path.join( os.getenv( 'XDG_CONFIG_HOME', '$HOME/.config' ).replace( '$HOME', HOME_FOLDER ), 'backintime' ) + DATA_FOLDER = '.local/share' + CONFIG_FOLDER = '.config' + BIT_FOLDER = 'backintime' + self._LOCAL_DATA_FOLDER = os.path.join(HOME_FOLDER, DATA_FOLDER, BIT_FOLDER) + self._LOCAL_CONFIG_FOLDER = os.path.join(HOME_FOLDER, CONFIG_FOLDER, BIT_FOLDER) + + self._MOUNT_ROOT = os.path.join(DATA_FOLDER, BIT_FOLDER, 'mnt') + self._LOCAL_MOUNT_ROOT = os.path.join(HOME_FOLDER, self._MOUNT_ROOT) - #self._LOCAL_CONFIG_FOLDER = os.path.expanduser( '~/.config/backintime' ) tools.make_dirs( self._LOCAL_CONFIG_FOLDER ) tools.make_dirs( self._LOCAL_DATA_FOLDER ) @@ -196,26 +225,25 @@ self.remap_key( 'snapshots.min_free_space.value', 'profile1.snapshots.min_free_space.value' ) self.remap_key( 'snapshots.min_free_space.unit', 'profile1.snapshots.min_free_space.unit' ) self.remap_key( 'snapshots.dont_remove_named_snapshots', 'profile1.snapshots.dont_remove_named_snapshots' ) - + if self.get_int_value( 'config.version', self.CONFIG_VERSION ) < 4: # version 4 uses as path backintime/machine/user/profile_id # but must be able to read old paths profiles = self.get_profiles() self.set_bool_value( 'update.other_folders', True ) - logger.info( "Update to config version 4: other snapshot locations" ) - + logger.info("Update to config version 4: other snapshot locations", self) + for profile_id in profiles: old_folder = self.get_snapshots_path( profile_id ) other_folder = os.path.join( old_folder, 'backintime' ) other_folder_key = 'profile' + str( profile_id ) + '.snapshots.other_folders' self.set_str_value( other_folder_key, other_folder ) - #self.set_snapshots_path( old_folder, profile_id ) tag = str( random.randint(100, 999) ) - logger.info( "Random tag for profile %s: %s" %( profile_id, tag ) ) - self.set_profile_str_value( 'snapshots.tag', tag, profile_id ) + logger.info("Random tag for profile %s: %s" %(profile_id, tag), self) + self.set_profile_str_value( 'snapshots.tag', tag, profile_id ) if self.get_int_value( 'config.version', self.CONFIG_VERSION ) < 5: - logger.info( "Update to config version 5: other snapshot locations" ) + logger.info("Update to config version 5: other snapshot locations", self) profiles = self.get_profiles() for profile_id in profiles: #change include @@ -235,13 +263,16 @@ self.set_int_value( 'config.version', self.CONFIG_VERSION ) self.save() - + self.current_hash_id = 'local' self.pw = None self.force_use_checksum = False + self.xWindowId = None + self.inhibitCookie = None + self.setupUdev = tools.SetupUdev() def save( self ): - configfile.ConfigFile.save( self, self._LOCAL_CONFIG_PATH ) + return super(Config, self).save(self._LOCAL_CONFIG_PATH) def check_config( self ): profiles = self.get_profiles() @@ -251,28 +282,17 @@ for profile_id in profiles: profile_name = self.get_profile_name( profile_id ) snapshots_path = self.get_snapshots_path( profile_id ) + logger.debug('Check profile %s' %profile_name, self) #check snapshots path - if len( snapshots_path ) <= 0: + if not snapshots_path: self.notify_error( _('Profile: "%s"') % profile_name + '\n' + _('Snapshots folder is not valid !') ) return False - ## Should not check for similar snapshot paths any longer! - #for other_profile in checked_profiles: - # if snapshots_path == self.get_snapshots_path( other_profile[0] ): - # self.notify_error( _('Profiles "%s" and "%s" have the same snapshots path !') % ( profile_name, other_profile[1] ) ) - # return False - # - #if not os.path.isdir( snapshots_path ): - # return ( 0, _('Snapshots folder is not valid !') ) - - #if len( self.get_snapshots_path( profile_id ) ) <= 1: - # return ( 0, _('Snapshots folder can\'t be the root folder !') ) - #check include include_list = self.get_include( profile_id ) - if len( include_list ) <= 0: + if not include_list: self.notify_error( _('Profile: "%s"') % profile_name + '\n' + _('You must select at least one folder to backup !') ) return False @@ -286,7 +306,7 @@ if path == snapshots_path: self.notify_error( _('Profile: "%s"') % profile_name + '\n' + _('You can\'t include backup folder !') ) return False - + if len( path ) >= len( snapshots_path2 ): if path[ : len( snapshots_path2 ) ] == snapshots_path2: self.notify_error( _('Profile: "%s"') % self.get_current_profile() + '\n' + _('You can\'t include a backup sub-folder !') ) @@ -297,22 +317,14 @@ return True def get_user( self ): - user = '' - - try: - user = os.environ['USER'] - except: - user = '' - - if len( user ) != 0: - return user - - try: - user = os.environ['LOGNAME'] - except: - user = '' - - return user + '''portable way to get username + cc by-sa 3.0 http://stackoverflow.com/a/19865396/1139841 + author: techtonik http://stackoverflow.com/users/239247/techtonik + ''' + if pwd: + return pwd.getpwuid(os.geteuid()).pw_name + else: + return getpass.getuser() def get_pid(self): return str(os.getpid()) @@ -325,13 +337,13 @@ mode = self.get_snapshots_mode(profile_id) if self.SNAPSHOT_MODES[mode][0] == None: #no mount needed - #?Where to save snapshots in mode 'local'. This path must contain a + #?Where to save snapshots in mode 'local'. This path must contain a #?folderstructure like 'backintime///';absolute path return self.get_profile_str_value( 'snapshots.path', '', profile_id ) else: #mode need to be mounted; return mountpoint symlink = self.get_snapshots_symlink(profile_id = profile_id, tmp_mount = tmp_mount) - return os.path.join(self.MOUNT_ROOT, self.get_user(), symlink) + return os.path.join(self._LOCAL_MOUNT_ROOT, symlink) def get_snapshots_full_path( self, profile_id = None, version = None ): '''Returns the full path for the snapshots: .../backintime/machine/user/profile_id/''' @@ -342,19 +354,16 @@ return os.path.join( self.get_snapshots_path( profile_id ), 'backintime' ) else: host, user, profile = self.get_host_user_profile( profile_id ) - return os.path.join( self.get_snapshots_path( profile_id ), 'backintime', host, user, profile ) + return os.path.join( self.get_snapshots_path( profile_id ), 'backintime', host, user, profile ) def set_snapshots_path( self, value, profile_id = None, mode = None ): """Sets the snapshot path to value, initializes, and checks it""" - if len( value ) <= 0: + if not value: return False if profile_id == None: - # print("BUG: calling set_snapshots_path without profile_id!") - # tjoep - # return False profile_id = self.get_current_profile() - + if mode is None: mode = self.get_snapshots_mode( profile_id ) @@ -363,46 +372,67 @@ return False #Initialize the snapshots folder - print("Check snapshot folder: %s" % value) - #machine = socket.gethostname() - #user = self.get_user() + logger.debug("Check snapshot folder: %s" %value, self) host, user, profile = self.get_host_user_profile( profile_id ) - full_path = os.path.join( value, 'backintime', host, user, profile ) + if not all((host, user, profile)): + self.notify_error(_('Host/User/Profile-ID must not be empty!')) + return False + + full_path = os.path.join( value, 'backintime', host, user, profile ) if not os.path.isdir( full_path ): - print("Create folder: %s" % full_path) + logger.debug("Create folder: %s" %full_path, self) tools.make_dirs( full_path ) if not os.path.isdir( full_path ): self.notify_error( _( 'Can\'t write to: %s\nAre you sure you have write access ?' % value ) ) return False - path1 = os.path.join( value, 'backintime' ) + path1 = os.path.join( value, 'backintime' ) os.system( "chmod a+rwx \"%s\"" % path1 ) - path1 = os.path.join( value, 'backintime', host ) + path1 = os.path.join( value, 'backintime', host ) os.system( "chmod a+rwx \"%s\"" % path1 ) - + + #Test filesystem + fs = tools.get_filesystem(full_path) + if fs == 'vfat': + self.notify_error(_("Destination filesystem for '%(path)s' is formatted with FAT which doesn't support hard-links. " + "Please use a native Linux filesystem.") % + {'path': value}) + return False + elif fs == 'cifs' and not self.copy_links(): + self.notify_error(_("Destination filsystem for '%(path)s' is a SMB mounted share. Please make sure " + "the remote SMB server supports symlinks or activate '%(copyLinks)s' in '%(expertOptions)s'.") % + {'path': value, + 'copyLinks': _('Copy links (dereference symbolic links)'), + 'expertOptions': _('Expert Options')}) + elif fs == 'fuse.sshfs' and mode not in ('ssh', 'ssh_encfs'): + self.notify_error(_("Destination filesystem for '%(path)s is a sshfs mounted share. sshfs doesn't support hard-links. " + "Please use mode 'SSH' instead.") % + {'path': value}) + return False + #Test write access for the folder check_path = os.path.join( full_path, 'check' ) tools.make_dirs( check_path ) if not os.path.isdir( check_path ): self.notify_error( _( 'Can\'t write to: %s\nAre you sure you have write access ?' % full_path ) ) return False - + os.rmdir( check_path ) if self.SNAPSHOT_MODES[mode][0] is None: self.set_profile_str_value( 'snapshots.path', value, profile_id ) return True - + def get_snapshots_mode( self, profile_id = None ): - #?Use mode (or backend) for this snapshot. Look at 'man backintime' + #?Use mode (or backend) for this snapshot. Look at 'man backintime' #?section 'Modes'.;local|local_encfs|ssh|ssh_encfs return self.get_profile_str_value( 'snapshots.mode', 'local', profile_id ) - + def set_snapshots_mode( self, value, profile_id = None ): self.set_profile_str_value( 'snapshots.mode', value, profile_id ) - + def get_snapshots_symlink(self, profile_id = None, tmp_mount = False): if profile_id is None: profile_id = self.current_profile_id @@ -410,37 +440,36 @@ if tmp_mount: symlink = 'tmp_%s' % symlink return symlink - + def set_current_hash_id(self, hash_id): self.current_hash_id = hash_id - + def get_hash_collision(self): #?Internal value used to prevent hash collisions on mountpoints. Do not change this. return self.get_int_value( 'global.hash_collision', 0 ) - + def increment_hash_collision(self): value = self.get_hash_collision() + 1 self.set_int_value( 'global.hash_collision', value ) - + def get_snapshots_path_ssh( self, profile_id = None ): - #?Snapshot path on remote host. If the path is relative (no leading '/') - #?it will start from remote Users homedir. An empty path will be replaced - #?with './'. This path must contain a folderstructure like - #?'backintime///';absolute or relative path + #?Snapshot path on remote host. If the path is relative (no leading '/') + #?it will start from remote Users homedir. An empty path will be replaced + #?with './'.;absolute or relative path return self.get_profile_str_value( 'snapshots.ssh.path', '', profile_id ) - + def get_snapshots_full_path_ssh( self, profile_id = None, version = None ): '''Returns the full path for the snapshots: .../backintime/machine/user/profile_id/''' if version is None: version = self.get_int_value( 'config.version', self.CONFIG_VERSION ) path = self.get_snapshots_path_ssh( profile_id ) - if len(path) == 0: + if not path: path = './' if version < 4: return os.path.join( path, 'backintime' ) else: host, user, profile = self.get_host_user_profile( profile_id ) - return os.path.join( path, 'backintime', host, user, profile ) + return os.path.join( path, 'backintime', host, user, profile ) def set_snapshots_path_ssh( self, value, profile_id = None ): self.set_profile_str_value( 'snapshots.ssh.path', value, profile_id ) @@ -461,11 +490,11 @@ self.set_profile_int_value( 'snapshots.ssh.port', value, profile_id ) def get_ssh_cipher( self, profile_id = None ): - #?Cipher that is used for encrypting the SSH tunnel. Depending on the - #?environment (network bandwidth, cpu and hdd performance) a different - #?cipher might be faster.;default|aes192-cbc|aes256-cbc|aes128-ctr| - #?aes192-ctr|aes256-ctr|arcfour|arcfour256|arcfour128|aes128-cbc| - #?3des-cbc|blowfish-cbc|cast128-cbc + #?Cipher that is used for encrypting the SSH tunnel. Depending on the + #?environment (network bandwidth, cpu and hdd performance) a different + #?cipher might be faster.;default | aes192-cbc | aes256-cbc | aes128-ctr | + #? aes192-ctr | aes256-ctr | arcfour | arcfour256 | arcfour128 | aes128-cbc | + #? 3des-cbc | blowfish-cbc | cast128-cbc return self.get_profile_str_value( 'snapshots.ssh.cipher', 'default', profile_id ) def set_ssh_cipher( self, value, profile_id = None ): @@ -477,70 +506,62 @@ def set_ssh_user( self, value, profile_id = None ): self.set_profile_str_value( 'snapshots.ssh.user', value, profile_id ) - + def get_ssh_host_port_user_path_cipher(self, profile_id = None ): host = self.get_ssh_host(profile_id) port = self.get_ssh_port(profile_id) user = self.get_ssh_user(profile_id) path = self.get_snapshots_path_ssh(profile_id) cipher = self.get_ssh_cipher(profile_id) - if len(path) == 0: + if not path: path = './' return (host, port, user, path, cipher) - + def get_ssh_private_key_file(self, profile_id = None): ssh = self.get_ssh_private_key_folder() default = '' - for file in ['id_dsa', 'id_rsa', 'identity']: - private_key = os.path.join(ssh, file) + for f in ['id_dsa', 'id_rsa', 'identity']: + private_key = os.path.join(ssh, f) if os.path.isfile(private_key): default = private_key break #?Private key file used for password-less authentication on remote host. #?;absolute path to private key file;~/.ssh/id_dsa - file = self.get_profile_str_value( 'snapshots.ssh.private_key_file', default, profile_id ) - if len(file) == 0: - return default - else: - return file + f = self.get_profile_str_value( 'snapshots.ssh.private_key_file', default, profile_id ) + if f: + return f + return default def get_ssh_private_key_folder(self): return os.path.join(os.path.expanduser('~'), '.ssh') - + def set_ssh_private_key_file( self, value, profile_id = None ): self.set_profile_str_value( 'snapshots.ssh.private_key_file', value, profile_id ) - + + def ssh_max_arg_length(self, profile_id = None): + #?Maximum argument length of commands run on remote host. This can be tested + #?with 'python3 /usr/share/backintime/common/sshMaxArg.py USER@HOST'.\n + #?0 = unlimited;0, >700 + value = self.get_profile_int_value('snapshots.ssh.max_arg_length', 0, profile_id) + if value and value < 700: + raise ValueError('SSH max arg length %s is to low to run commands' % value) + return value + + def set_ssh_max_arg_length(self, value, profile_id = None): + self.set_profile_int_value('snapshots.ssh.max_arg_length', value, profile_id) + #ENCFS def get_local_encfs_path( self, profile_id = None ): - #?Where to save snapshots in mode 'local_encfs'. The encrypted path must contian - #?a folderstructure like 'backintime///';absolute path + #?Where to save snapshots in mode 'local_encfs'.;absolute path return self.get_profile_str_value( 'snapshots.local_encfs.path', '', profile_id ) - + def set_local_encfs_path( self, value, profile_id = None ): self.set_profile_str_value( 'snapshots.local_encfs.path', value, profile_id ) -## def get_dummy_host( self, profile_id = None ): -## return self.get_profile_str_value( 'snapshots.dummy.host', '', profile_id ) -## -## def set_dummy_host( self, value, profile_id = None ): -## self.set_profile_str_value( 'snapshots.dummy.host', value, profile_id ) -## -## def get_dummy_port( self, profile_id = None ): -## return self.get_profile_int_value( 'snapshots.dummy.port', '22', profile_id ) -## -## def set_dummy_port( self, value, profile_id = None ): -## self.set_profile_int_value( 'snapshots.dummy.port', value, profile_id ) -## -## def get_dummy_user( self, profile_id = None ): -## return self.get_profile_str_value( 'snapshots.dummy.user', self.get_user(), profile_id ) -## -## def set_dummy_user( self, value, profile_id = None ): -## self.set_profile_str_value( 'snapshots.dummy.user', value, profile_id ) - def get_password_save( self, profile_id = None, mode = None ): if mode is None: mode = self.get_snapshots_mode(profile_id) - #?Save password to system keyring (gnome-keyring or kwallet). + #?Save password to system keyring (gnome-keyring or kwallet). #? must be the same as \fIprofile.snapshots.mode\fR return self.get_profile_bool_value( 'snapshots.%s.password.save' % mode, False, profile_id ) @@ -553,8 +574,8 @@ if mode is None: mode = self.get_snapshots_mode(profile_id) default = not tools.check_home_encrypt() - #?Cache password in RAM so it can be read by cronjobs. - #?Security issue: root might be able to read that password, too. + #?Cache password in RAM so it can be read by cronjobs. + #?Security issue: root might be able to read that password, too. #? must be the same as \fIprofile.snapshots.mode\fR;;true if home is not encrypted return self.get_profile_bool_value( 'snapshots.%s.password.use_cache' % mode, default, profile_id ) @@ -580,7 +601,7 @@ if mode is None: mode = self.get_snapshots_mode(profile_id) self.pw.set_password(password, profile_id, mode, pw_id) - + def mode_need_password(self, mode, pw_id = 1): need_pw = self.SNAPSHOT_MODES[mode][pw_id + 1] if need_pw is False: @@ -599,13 +620,6 @@ profile_id = self.get_current_profile() return 'profile_id_%s' % profile_id - def get_auto_host_user_profile( self, profile_id = None ): - #?Automaticaly set HOST, USER and PROFILE_ID for snapshot path. - return self.get_profile_bool_value( 'snapshots.path.auto', True, profile_id ) - - def set_auto_host_user_profile( self, value, profile_id = None ): - self.set_profile_bool_value( 'snapshots.path.auto', value, profile_id ) - def get_default_host_user_profile( self, profile_id = None ): host = socket.gethostname() user = self.get_user() @@ -617,34 +631,18 @@ def get_host_user_profile( self, profile_id = None ): default_host, default_user, default_profile = self.get_default_host_user_profile( profile_id ) - - if self.get_auto_host_user_profile( profile_id ): - return ( default_host, default_user, default_profile ) - - #?Set Host for snapshot path if \fIprofile.snapshots.path.auto\fR - #?is false;;local hostname + #?Set Host for snapshot path;;local hostname host = self.get_profile_str_value( 'snapshots.path.host', default_host, profile_id ) - if len( host ) <= 0: - host = default_host - #?Set User for snapshot path if \fIprofile.snapshots.path.auto\fR - #?is false;;local username + #?Set User for snapshot path;;local username user = self.get_profile_str_value( 'snapshots.path.user', default_user, profile_id ) - if len( user ) <= 0: - user = default_user - #?Set Profile-ID for snapshot path if \fIprofile.snapshots.path.auto\fR - #?is false;1-99999;current Profile-ID + #?Set Profile-ID for snapshot path;1-99999;current Profile-ID profile = self.get_profile_str_value( 'snapshots.path.profile', default_profile, profile_id ) - if len( profile ) <= 0: - profile = default_profile return ( host, user, profile ) def set_host_user_profile( self, host, user, profile, profile_id = None ): - if profile_id is None: - profile_id = self.get_current_profile() - self.set_profile_str_value( 'snapshots.path.host', host, profile_id ) self.set_profile_str_value( 'snapshots.path.user', user, profile_id ) self.set_profile_str_value( 'snapshots.path.profile', profile, profile_id ) @@ -653,25 +651,23 @@ '''Returns the other snapshots folders paths as a list''' #?!ignore this in manpage value = self.get_profile_str_value( 'snapshots.other_folders', '', profile_id ) - if len( value ) <= 0: + if not value: return [] - + paths = [] for item in value.split(':'): - fields = item.split( '|' ) - path = os.path.expanduser( item ) path = os.path.abspath( path ) paths.append( ( path ) ) return paths - + def get_include_v4( self, profile_id = None ): #?!ignore this in manpage value = self.get_profile_str_value( 'snapshots.include_folders', '', profile_id ) - if len( value ) <= 0: + if not value: return [] paths = [] @@ -681,103 +677,61 @@ path = os.path.expanduser( fields[0] ) path = os.path.abspath( path ) - - if len( fields ) >= 2: - automatic_backup_mode = int( fields[1] ) - else: - automatic_backup_mode = self.get_automatic_backup_mode() - - #paths.append( ( path, automatic_backup_mode ) ) paths.append( path ) return paths - def get_include( self, profile_id = None ): - #?Quantity of include entrys.;1-99999 - size = self.get_profile_int_value( 'snapshots.include.size', -1, profile_id ) - if size <= 0: - return [] + def get_include(self, profile_id = None): + #?Include this file or folder. must be a counter starting with 1;absolute path:: + #?Specify if \fIprofile.snapshots.include..value\fR is a folder (0) or a file (1).;0|1;0 + return self.get_profile_list_value('snapshots.include', ('str:value', 'int:type'), [], profile_id) - include = [] - - for i in xrange( 1, size + 1 ): - #?Include this file or folder. must be a counter - #?starting with 1;absolute path - value = self.get_profile_str_value( "snapshots.include.%s.value" % i, '', profile_id ) - if len( value ) > 0: - #?Specify if \fIprofile.snapshots.include..value\fR - #?is a folder (0) or a file (1).;0|1 - type = self.get_profile_int_value( "snapshots.include.%s.type" % i, 0, profile_id ) - include.append( ( value, type ) ) - - return include - - def set_include( self, _list, profile_id = None ): - old_size = self.get_profile_int_value( 'snapshots.include.size', 0, profile_id ) - - counter = 0 - for value in _list: - if len( value[0] ) > 0: - counter = counter + 1 - self.set_profile_str_value( "snapshots.include.%s.value" % counter, value[0], profile_id ) - self.set_profile_int_value( "snapshots.include.%s.type" % counter, value[1], profile_id ) - - self.set_profile_int_value( 'snapshots.include.size', counter, profile_id ) - - if counter < old_size: - for i in xrange( counter + 1, old_size + 1 ): - self.remove_profile_key( "snapshots.include.%s.value" % i, profile_id ) - self.remove_profile_key( "snapshots.include.%s.type" % i, profile_id ) + def set_include(self, values, profile_id = None): + self.set_profile_list_value('snapshots.include', ('str:value', 'int:type'), values, profile_id) def get_exclude_v4( self, profile_id = None ): '''Gets the exclude patterns: conf version 4''' #?!ignore this in manpage value = self.get_profile_str_value( 'snapshots.exclude_patterns', '.gvfs:.cache*:[Cc]ache*:.thumbnails*:[Tt]rash*:*.backup*:*~', profile_id ) - if len( value ) <= 0: + if not value: return [] return value.split( ':' ) - def get_exclude( self, profile_id = None ): + def get_exclude(self, profile_id = None): '''Gets the exclude patterns''' - #?Quantity of exclude entrys.;1-99999 - size = self.get_profile_int_value( 'snapshots.exclude.size', -1, profile_id ) - if size < 0: - return self.DEFAULT_EXCLUDE - - exclude = [] - for i in xrange( 1, size + 1 ): - #?Exclude this file or folder. must be a counter - #?starting with 1;file, folder or pattern (relative or absolute) - value = self.get_profile_str_value( "snapshots.exclude.%s.value" % i, '', profile_id ) - if len( value ) > 0: - exclude.append( value ) - - return exclude - - def set_exclude( self, _list, profile_id = None ): - old_size = self.get_profile_int_value( 'snapshots.exclude.size', 0, profile_id ) - - counter = 0 - for value in _list: - if len( value ) > 0: - counter = counter + 1 - self.set_profile_str_value( "snapshots.exclude.%s.value" % counter, value, profile_id ) - - self.set_profile_int_value( 'snapshots.exclude.size', counter, profile_id ) - - if counter < old_size: - for i in xrange( counter + 1, old_size + 1 ): - self.remove_profile_key( "snapshots.exclude.%s.value" % i, profile_id ) + #?Exclude this file or folder. must be a counter + #?starting with 1;file, folder or pattern (relative or absolute) + return self.get_profile_list_value('snapshots.exclude', 'str:value', self.DEFAULT_EXCLUDE, profile_id) + + def set_exclude(self, values, profile_id = None): + self.set_profile_list_value('snapshots.exclude', 'str:value', values, profile_id) + + def exclude_by_size_enabled(self, profile_id = None): + #?Enable exclude files by size. + return self.get_profile_bool_value('snapshots.exclude.bysize.enabled', False, profile_id) + + def set_exclude_by_size_enabled(self, value, profile_id = None): + self.set_profile_bool_value('snapshots.exclude.bysize.enabled', value, profile_id) + + def exclude_by_size(self, profile_id = None): + #?Exclude files bigger than value in MiB. + #?With 'Full rsync mode' disabled this will only affect new files + #?because for rsync this is a transfer option, not an exclude option. + #?So big files that has been backed up before will remain in snapshots + #?even if they had changed. + return self.get_profile_int_value('snapshots.exclude.bysize.value', 500, profile_id) + + def set_exclude_by_size(self, value, profile_id = None): + self.set_profile_int_value('snapshots.exclude.bysize.value', value, profile_id) def get_tag( self, profile_id = None ): #?!ignore this in manpage return self.get_profile_str_value( 'snapshots.tag', str(random.randint(100, 999)), profile_id ) def get_automatic_backup_mode( self, profile_id = None ): - #?Which shedule used for crontab. Note that the crontab entry is only - #?generated during saving in settings dialog. If you don't run a GUI - #?version of BackInTime you'll have to create the crontab entry on your - #?own.\n 0 = Disabled\n 1 = at every boot\n 2 = every 5 minute\n + #?Which schedule used for crontab. The crontab entry will be + #?generated with 'backintime check-config'.\n + #? 0 = Disabled\n 1 = at every boot\n 2 = every 5 minute\n #? 4 = every 10 minute\n 7 = every 30 minute\n10 = every hour\n #?12 = every 2 hours\n14 = every 4 hours\n16 = every 6 hours\n #?18 = every 12 hours\n19 = custom defined hours\n20 = every day\n @@ -790,7 +744,7 @@ self.set_profile_int_value( 'snapshots.automatic_backup_mode', value, profile_id ) def get_automatic_backup_time( self, profile_id = None ): - #?What time the cronjob should run? Only valid for + #?What time the cronjob should run? Only valid for #?\fIprofile.snapshots.automatic_backup_mode\fR >= 20;0-24 return self.get_profile_int_value( 'snapshots.automatic_backup_time', 0, profile_id ) @@ -798,7 +752,7 @@ self.set_profile_int_value( 'snapshots.automatic_backup_time', value, profile_id ) def get_automatic_backup_day( self, profile_id = None ): - #?Which day of month the cronjob should run? Only valid for + #?Which day of month the cronjob should run? Only valid for #?\fIprofile.snapshots.automatic_backup_mode\fR >= 40;1-28 return self.get_profile_int_value( 'snapshots.automatic_backup_day', 1, profile_id ) @@ -806,15 +760,15 @@ self.set_profile_int_value( 'snapshots.automatic_backup_day', value, profile_id ) def get_automatic_backup_weekday( self, profile_id = None ): - #?Which day of week the cronjob should run? Only valid for - #?\fIprofile.snapshots.automatic_backup_mode\fR = 30;1 = monday - 7 = sunday + #?Which day of week the cronjob should run? Only valid for + #?\fIprofile.snapshots.automatic_backup_mode\fR = 30;1 = monday \- 7 = sunday return self.get_profile_int_value( 'snapshots.automatic_backup_weekday', 7, profile_id ) def set_automatic_backup_weekday( self, value, profile_id = None ): self.set_profile_int_value( 'snapshots.automatic_backup_weekday', value, profile_id ) def get_custom_backup_time( self, profile_id = None ): - #?Custom hours for cronjob. Only valid for + #?Custom hours for cronjob. Only valid for #?\fIprofile.snapshots.automatic_backup_mode\fR = 19 #?;comma separated int (8,12,18,23) or */3;8,12,18,23 return self.get_profile_str_value( 'snapshots.custom_backup_time', '8,12,18,23', profile_id ) @@ -823,43 +777,47 @@ self.set_profile_str_value( 'snapshots.custom_backup_time', value, profile_id ) def get_automatic_backup_anacron_period(self, profile_id = None): - #?How many days to wait between new snapshots with anacron? Only valid + #?How many units to wait between new snapshots with anacron? Only valid #?for \fIprofile.snapshots.automatic_backup_mode\fR = 25|27 return self.get_profile_int_value('snapshots.automatic_backup_anacron_period', 1, profile_id) def set_automatic_backup_anacron_period(self, value, profile_id = None): self.set_profile_int_value('snapshots.automatic_backup_anacron_period', value, profile_id) - #def get_per_directory_schedule( self, profile_id = None ): - # return self.get_profile_bool_value( 'snapshots.expert.per_directory_schedule', False, profile_id ) + def get_automatic_backup_anacron_unit(self, profile_id = None): + #?Units to wait between new snapshots with anacron.\n + #?10 = hours\n20 = days\n30 = weeks\n40 = months\n + #?Only valid for \fIprofile.snapshots.automatic_backup_mode\fR = 25|27; + #?10|20|30|40;20 + return self.get_profile_int_value('snapshots.automatic_backup_anacron_unit', self.DAY, profile_id) - #def set_per_directory_schedule( self, value, profile_id = None ): - # return self.set_profile_bool_value( 'snapshots.expert.per_directory_schedule', value, profile_id ) + def set_automatic_backup_anacron_unit(self, value, profile_id = None): + self.set_profile_int_value('snapshots.automatic_backup_anacron_unit', value, profile_id) def get_remove_old_snapshots( self, profile_id = None ): - #?Remove all snapshots older than value + unit - return ( self.get_profile_bool_value( 'snapshots.remove_old_snapshots.enabled', True, profile_id ), - #?Snapshots older than this times units will be removed - self.get_profile_int_value( 'snapshots.remove_old_snapshots.value', 10, profile_id ), - #?20 = days\n30 = weeks\n80 = years;20|30|80;80 - self.get_profile_int_value( 'snapshots.remove_old_snapshots.unit', self.YEAR, profile_id ) ) - + #?Remove all snapshots older than value + unit + return (self.get_profile_bool_value( 'snapshots.remove_old_snapshots.enabled', True, profile_id ), + #?Snapshots older than this times units will be removed + self.get_profile_int_value( 'snapshots.remove_old_snapshots.value', 10, profile_id ), + #?20 = days\n30 = weeks\n80 = years;20|30|80;80 + self.get_profile_int_value( 'snapshots.remove_old_snapshots.unit', self.YEAR, profile_id ) ) + def keep_only_one_snapshot( self, profile_id = None ): #?NOT YET IMPLEMENTED. Remove all snapshots but one. return self.get_profile_bool_value( 'snapshots.keep_only_one_snapshot.enabled', False, profile_id ) - + def set_keep_only_one_snapshot( self, value, profile_id = None ): self.set_profile_bool_value( 'snapshots.keep_only_one_snapshot.enabled', value, profile_id ) - + def is_remove_old_snapshots_enabled( self, profile_id = None ): return self.get_profile_bool_value( 'snapshots.remove_old_snapshots.enabled', True, profile_id ) - + def get_remove_old_snapshots_date( self, profile_id = None ): enabled, value, unit = self.get_remove_old_snapshots( profile_id ) if not enabled: return datetime.date( 1, 1, 1 ) - if unit == self.DAY: + if unit == self.DAY: date = datetime.date.today() date = date - datetime.timedelta( days = value ) return date @@ -868,11 +826,11 @@ date = datetime.date.today() date = date - datetime.timedelta( days = date.weekday() + 7 * value ) return date - + if unit == self.YEAR: date = datetime.date.today() return date.replace( day = 1, year = date.year - value ) - + return datetime.date( 1, 1, 1 ) def set_remove_old_snapshots( self, enabled, value, unit, profile_id = None ): @@ -881,14 +839,14 @@ self.set_profile_int_value( 'snapshots.remove_old_snapshots.unit', unit, profile_id ) def get_min_free_space( self, profile_id = None ): - #?Remove snapshots until \fIprofile.snapshots.min_free_space.value\fR - #?free space is reached. - return ( self.get_profile_bool_value( 'snapshots.min_free_space.enabled', True, profile_id ), - #?Keep at least value + unit free space.;1-99999 - self.get_profile_int_value( 'snapshots.min_free_space.value', 1, profile_id ), - #?10 = MB\n20 = GB;10|20;20 - self.get_profile_int_value( 'snapshots.min_free_space.unit', self.DISK_UNIT_GB, profile_id ) ) - + #?Remove snapshots until \fIprofile.snapshots.min_free_space.value\fR + #?free space is reached. + return (self.get_profile_bool_value( 'snapshots.min_free_space.enabled', True, profile_id ), + #?Keep at least value + unit free space.;1-99999 + self.get_profile_int_value( 'snapshots.min_free_space.value', 1, profile_id ), + #?10 = MB\n20 = GB;10|20;20 + self.get_profile_int_value( 'snapshots.min_free_space.unit', self.DISK_UNIT_GB, profile_id ) ) + def is_min_free_space_enabled( self, profile_id = None ): return self.get_profile_bool_value( 'snapshots.min_free_space.enabled', True, profile_id ) @@ -916,7 +874,7 @@ return self.get_profile_int_value('snapshots.min_free_inodes.value', 2, profile_id) def min_free_inodes_enabled(self, profile_id = None): - #?Remove snapshots until \fIprofile.snapshots.min_free_inodes.value\fR + #?Remove snapshots until \fIprofile.snapshots.min_free_inodes.value\fR #?free inodes in % is reached. return self.get_profile_bool_value('snapshots.min_free_inodes.enabled', True, profile_id) @@ -930,18 +888,18 @@ def set_dont_remove_named_snapshots( self, value, profile_id = None ): self.set_profile_bool_value( 'snapshots.dont_remove_named_snapshots', value, profile_id ) - + def get_smart_remove( self, profile_id = None ): - #?Run smart_remove to clean up old snapshots after a new snapshot was created. - return ( self.get_profile_bool_value( 'snapshots.smart_remove', False, profile_id ), - #?Keep all snapshots for X days. - self.get_profile_int_value( 'snapshots.smart_remove.keep_all', 2, profile_id ), - #?Keep one snapshot per day for X days. - self.get_profile_int_value( 'snapshots.smart_remove.keep_one_per_day', 7, profile_id ), - #?Keep one snapshot per week for X weeks. - self.get_profile_int_value( 'snapshots.smart_remove.keep_one_per_week', 4, profile_id ), - #?Keep one snapshot per month for X month. - self.get_profile_int_value( 'snapshots.smart_remove.keep_one_per_month', 24, profile_id ) ) + #?Run smart_remove to clean up old snapshots after a new snapshot was created. + return (self.get_profile_bool_value( 'snapshots.smart_remove', False, profile_id ), + #?Keep all snapshots for X days. + self.get_profile_int_value( 'snapshots.smart_remove.keep_all', 2, profile_id ), + #?Keep one snapshot per day for X days. + self.get_profile_int_value( 'snapshots.smart_remove.keep_one_per_day', 7, profile_id ), + #?Keep one snapshot per week for X weeks. + self.get_profile_int_value( 'snapshots.smart_remove.keep_one_per_week', 4, profile_id ), + #?Keep one snapshot per month for X month. + self.get_profile_int_value( 'snapshots.smart_remove.keep_one_per_month', 24, profile_id ) ) def set_smart_remove( self, value, keep_all, keep_one_per_day, keep_one_per_week, keep_one_per_month, profile_id = None ): self.set_profile_bool_value( 'snapshots.smart_remove', value, profile_id ) @@ -949,7 +907,14 @@ self.set_profile_int_value( 'snapshots.smart_remove.keep_one_per_day', keep_one_per_day, profile_id ) self.set_profile_int_value( 'snapshots.smart_remove.keep_one_per_week', keep_one_per_week, profile_id ) self.set_profile_int_value( 'snapshots.smart_remove.keep_one_per_month', keep_one_per_month, profile_id ) - + + def get_smart_remove_run_remote_in_background(self, profile_id = None): + #?If using mode SSH or SSH-encrypted, run smart_remove in background on remote machine + return self.get_profile_bool_value('snapshots.smart_remove.run_remote_in_background', False, profile_id) + + def set_smart_remove_run_remote_in_background(self, value, profile_id = None): + self.set_profile_bool_value('snapshots.smart_remove.run_remote_in_background', value, profile_id) + def is_notify_enabled( self, profile_id = None ): #?Display notifications (errors, warnings) through libnotify. return self.get_profile_bool_value( 'snapshots.notify.enabled', True, profile_id ) @@ -965,52 +930,80 @@ self.set_profile_bool_value( 'snapshots.backup_on_restore.enabled', value, profile_id ) def is_run_nice_from_cron_enabled( self, profile_id = None ): - #?Run cronjobs with 'nice -n 19'. This will give BackInTime the - #?lowest CPU priority to not interupt any other working process.\n - #?Note that the crontab entry is only generated during saving in - #?settings dialog. If you don't run a GUI version of BackInTime - #?you'll have to create the crontab entry on your own. - return self.get_profile_bool_value( 'snapshots.cron.nice', True, profile_id ) + #?Run cronjobs with 'nice \-n 19'. This will give BackInTime the + #?lowest CPU priority to not interupt any other working process. + return self.get_profile_bool_value( 'snapshots.cron.nice', self.DEFAULT_RUN_NICE_FROM_CRON, profile_id ) def set_run_nice_from_cron_enabled( self, value, profile_id = None ): self.set_profile_bool_value( 'snapshots.cron.nice', value, profile_id ) def is_run_ionice_from_cron_enabled( self, profile_id = None ): - #?Run cronjobs with 'ionice -c2 -n7'. This will give BackInTime the - #?lowest IO bandwidth priority to not interupt any other working process.\n - #?Note that the crontab entry is only generated during saving in - #?settings dialog. If you don't run a GUI version of BackInTime - #?you'll have to create the crontab entry on your own. - return self.get_profile_bool_value( 'snapshots.cron.ionice', True, profile_id ) + #?Run cronjobs with 'ionice \-c2 \-n7'. This will give BackInTime the + #?lowest IO bandwidth priority to not interupt any other working process. + return self.get_profile_bool_value( 'snapshots.cron.ionice', self.DEFAULT_RUN_IONICE_FROM_CRON, profile_id ) def set_run_ionice_from_cron_enabled( self, value, profile_id = None ): self.set_profile_bool_value( 'snapshots.cron.ionice', value, profile_id ) def is_run_ionice_from_user_enabled( self, profile_id = None ): - #?Run BackInTime with 'ionice -c2 -n7' when taking a manual snapshot. - #?This will give BackInTime the lowest IO bandwidth priority to not + #?Run BackInTime with 'ionice \-c2 \-n7' when taking a manual snapshot. + #?This will give BackInTime the lowest IO bandwidth priority to not #?interupt any other working process. - return self.get_profile_bool_value( 'snapshots.user_backup.ionice', False, profile_id ) + return self.get_profile_bool_value( 'snapshots.user_backup.ionice', self.DEFAULT_RUN_IONICE_FROM_USER, profile_id ) def set_run_ionice_from_user_enabled( self, value, profile_id = None ): self.set_profile_bool_value( 'snapshots.user_backup.ionice', value, profile_id ) def is_run_nice_on_remote_enabled(self, profile_id = None): - #?Run rsync and other commands on remote host with 'nice -n 19' - return self.get_profile_bool_value('snapshots.ssh.nice', False, profile_id) + #?Run rsync and other commands on remote host with 'nice \-n 19' + return self.get_profile_bool_value('snapshots.ssh.nice', self.DEFAULT_RUN_NICE_ON_REMOTE, profile_id) def set_run_nice_on_remote_enabled(self, value, profile_id = None): self.set_profile_bool_value('snapshots.ssh.nice', value, profile_id) def is_run_ionice_on_remote_enabled(self, profile_id = None): - #?Run rsync and other commands on remote host with 'ionice -c2 -n7' - return self.get_profile_bool_value('snapshots.ssh.ionice', False, profile_id) + #?Run rsync and other commands on remote host with 'ionice \-c2 \-n7' + return self.get_profile_bool_value('snapshots.ssh.ionice', self.DEFAULT_RUN_IONICE_ON_REMOTE, profile_id) def set_run_ionice_on_remote_enabled(self, value, profile_id = None): self.set_profile_bool_value('snapshots.ssh.ionice', value, profile_id) + def is_run_nocache_on_local_enabled( self, profile_id = None ): + #?Run rsync on local machine with 'nocache'. + #?This will prevent files from being cached in memory. + return self.get_profile_bool_value( 'snapshots.local.nocache', self.DEFAULT_RUN_NOCACHE_ON_LOCAL, profile_id ) + + def set_run_nocache_on_local_enabled( self, value, profile_id = None ): + self.set_profile_bool_value( 'snapshots.local.nocache', value, profile_id ) + + def is_run_nocache_on_remote_enabled(self, profile_id = None): + #?Run rsync on remote host with 'nocache'. + #?This will prevent files from being cached in memory. + return self.get_profile_bool_value('snapshots.ssh.nocache', self.DEFAULT_RUN_NOCACHE_ON_REMOTE, profile_id) + + def set_run_nocache_on_remote_enabled(self, value, profile_id = None): + self.set_profile_bool_value('snapshots.ssh.nocache', value, profile_id) + + def redirect_stdout_in_cron(self, profile_id = None): + #?redirect stdout to /dev/null in cronjobs + return self.get_profile_bool_value('snapshots.cron.redirect_stdout', self.DEFAULT_REDIRECT_STDOUT_IN_CRON, profile_id) + + def redirect_stderr_in_cron(self, profile_id = None): + #?redirect stderr to /dev/null in cronjobs;;self.DEFAULT_REDIRECT_STDERR_IN_CRON + if self.is_configured(profile_id): + default = True + else: + default = self.DEFAULT_REDIRECT_STDERR_IN_CRON + return self.get_profile_bool_value('snapshots.cron.redirect_stderr', default, profile_id) + + def set_redirect_stdout_in_cron(self, value, profile_id = None): + self.set_profile_bool_value('snapshots.cron.redirect_stdout', value, profile_id) + + def set_redirect_stderr_in_cron(self, value, profile_id = None): + self.set_profile_bool_value('snapshots.cron.redirect_stderr', value, profile_id) + def bwlimit_enabled( self, profile_id = None ): - #?Limit rsync bandwidth usage over network. Use this with mode SSH. + #?Limit rsync bandwidth usage over network. Use this with mode SSH. #?For mode Local you should rather use ionice. return self.get_profile_bool_value( 'snapshots.bwlimit.enabled', False, profile_id ) @@ -1032,7 +1025,7 @@ self.set_profile_bool_value( 'snapshots.no_on_battery', value, profile_id ) def preserve_acl( self, profile_id = None ): - #?Preserve ACL. The source and destination systems must have + #?Preserve ACL. The source and destination systems must have #?compatible ACL entries for this option to work properly. return self.get_profile_bool_value( 'snapshots.preserve_acl', False, profile_id ) @@ -1047,8 +1040,8 @@ return self.set_profile_bool_value( 'snapshots.preserve_xattr', value, profile_id ) def copy_unsafe_links( self, profile_id = None ): - #?This tells rsync to copy the referent of symbolic links that point - #?outside the copied tree. Absolute symlinks are also treated like + #?This tells rsync to copy the referent of symbolic links that point + #?outside the copied tree. Absolute symlinks are also treated like #?ordinary files. return self.get_profile_bool_value( 'snapshots.copy_unsafe_links', False, profile_id ) @@ -1056,15 +1049,58 @@ return self.set_profile_bool_value( 'snapshots.copy_unsafe_links', value, profile_id ) def copy_links( self, profile_id = None ): - #?When symlinks are encountered, the item that they point to - #?(the referent) is copied, rather than the symlink. + #?When symlinks are encountered, the item that they point to + #?(the reference) is copied, rather than the symlink. return self.get_profile_bool_value( 'snapshots.copy_links', False, profile_id ) def set_copy_links( self, value, profile_id = None ): return self.set_profile_bool_value( 'snapshots.copy_links', value, profile_id ) + def rsync_options_enabled( self, profile_id = None ): + #?Past additional options to rsync + return self.get_profile_bool_value( 'snapshots.rsync_options.enabled', False, profile_id ) + + def set_rsync_options_enabled( self, value, profile_id = None ): + return self.set_profile_bool_value( 'snapshots.rsync_options.enabled', value, profile_id ) + + def rsync_options( self, profile_id = None ): + #?rsync options. Options must be quoted e.g. \-\-exclude-from="/path/to/my exclude file" + return self.get_profile_str_value( 'snapshots.rsync_options.value', '', profile_id ) + + def set_rsync_options( self, value, profile_id = None ): + return self.set_profile_str_value( 'snapshots.rsync_options.value', value, profile_id ) + + def ssh_prefix_enabled(self, profile_id = None): + #?Add prefix to every command which run through SSH on remote host. + return self.get_profile_bool_value('snapshots.ssh.prefix.enabled', False, profile_id) + + def set_ssh_prefix_enabled(self, value, profile_id = None): + return self.set_profile_bool_value('snapshots.ssh.prefix.enabled', value, profile_id) + + def ssh_prefix(self, profile_id = None): + #?Prefix to run before every command on remote host. Variables need to be escaped with \\$FOO. + #?This doesn't touch rsync. So to add a prefix for rsync use + #?\fIprofile.snapshots.rsync_options.value\fR with + #?--rsync-path="FOO=bar:\\$FOO /usr/bin/rsync" + return self.get_profile_str_value('snapshots.ssh.prefix.value', self.DEFAULT_SSH_PREFIX, profile_id) + + def set_ssh_prefix(self, value, profile_id = None): + return self.set_profile_str_value('snapshots.ssh.prefix.value', value, profile_id) + + def ssh_prefix_cmd(self, profile_id = None, cmd_type = str): + if cmd_type == list: + if self.ssh_prefix_enabled(profile_id): + return shlex.split(self.ssh_prefix(profile_id)) + else: + return [] + if cmd_type == str: + if self.ssh_prefix_enabled(profile_id): + return self.ssh_prefix(profile_id).strip() + ' ' + else: + return '' + def continue_on_errors( self, profile_id = None ): - #?Continue on errors. This will keep incomplete snapshots rather than + #?Continue on errors. This will keep incomplete snapshots rather than #?deleting and start over again. return self.get_profile_bool_value( 'snapshots.continue_on_errors', True, profile_id ) @@ -1086,24 +1122,42 @@ return self.set_profile_int_value( 'snapshots.log_level', value, profile_id ) def full_rsync( self, profile_id = None ): - #?Full rsync mode. May be faster but snapshots are not read-only - #?anymore and destination file-system must support all linux + #?Full rsync mode. May be faster but snapshots are not read-only + #?anymore and destination file-system must support all linux #?attributes (date, rights, user, group...) return self.get_profile_bool_value( 'snapshots.full_rsync', False, profile_id ) def set_full_rsync( self, value, profile_id = None ): return self.set_profile_bool_value( 'snapshots.full_rsync', value, profile_id ) + def take_snapshot_regardless_of_changes(self, profile_id = None): + #?Create a new snapshot regardless if there were changes or not. + #?Only valid with \fIprofile.snapshots.full_rsync\fR = true + return self.get_profile_bool_value('snapshots.full_rsync.take_snapshot_regardless_of_changes', False, profile_id) + + def set_take_snapshot_regardless_of_changes(self, value, profile_id = None): + return self.set_profile_bool_value('snapshots.full_rsync.take_snapshot_regardless_of_changes', value, profile_id ) + def check_for_changes( self, profile_id = None ): - #?Perform a dry-run before taking snapshots. Don't take a new snapshot + #?Perform a dry-run before taking snapshots. Don't take a new snapshot #?if nothing has changed. + #?Only valid with \fIprofile.snapshots.full_rsync\fR = false return self.get_profile_bool_value( 'snapshots.check_for_changes', True, profile_id ) def set_check_for_changes( self, value, profile_id = None ): return self.set_profile_bool_value( 'snapshots.check_for_changes', value, profile_id ) + def user_callback_no_logging(self, profile_id = None): + #?Do not catch std{out|err} from user-callback script. + #?The script will only write to current TTY. + #?Default is to catch std{out|err} and write it to + #?syslog and TTY again. + return self.get_profile_bool_value('user_callback.no_logging', False, profile_id) + + ########################################################################### + def gnu_find_suffix_support( self, profile_id = None ): - #?Remote SSH host support GNU find suffix (find -exec COMMAND {} +). + #?Remote SSH host support GNU find suffix (find \-exec COMMAND {} +). return self.get_profile_bool_value( 'snapshots.gnu_find_suffix_support', True, profile_id ) def find_suffix( self, profile_id = None ): @@ -1116,7 +1170,7 @@ return self.set_profile_bool_value( 'snapshots.gnu_find_suffix_support', value, profile_id ) def get_take_snapshot_user_script( self, step, profile_id = None ): - #?Run this scrip on events defined by .\nPossible events for + #?Run this scrip on events defined by .\nPossible events for #?:\n before\n after\n new_snapshot\n error;absolute path return self.get_profile_str_value ( "snapshots.take_snapshot.%s.user.script" % step, '', profile_id ) @@ -1147,6 +1201,13 @@ def set_take_snapshot_user_script_error( self, path, profile_id = None ): self.set_take_snapshot_user_script( 'error', path, profile_id ) + def use_global_flock(self): + #?Prevent multiple snapshots (from different profiles or users) to be run at the same time + return self.get_bool_value('global.use_flock', False) + + def set_use_global_flock(self, value): + self.set_bool_value('global.use_flock', value) + def get_app_path( self ): return self._APP_PATH @@ -1169,12 +1230,12 @@ def get_take_snapshot_message_file( self, profile_id = None ): return os.path.join( self._LOCAL_DATA_FOLDER, "worker%s.message" % self.__get_file_id__( profile_id ) ) + def get_take_snapshot_progress_file( self, profile_id = None ): + return os.path.join( self._LOCAL_DATA_FOLDER, "worker%s.progress" % self.__get_file_id__( profile_id ) ) + def get_take_snapshot_instance_file( self, profile_id = None ): return os.path.join( self._LOCAL_DATA_FOLDER, "worker%s.lock" % self.__get_file_id__( profile_id ) ) - #def get_last_snapshot_info_file( self, profile_id = None ): - # return os.path.join( self._LOCAL_DATA_FOLDER, "snapshot%s.last" % self.__get_file_id__( profile_id ) ) - def get_take_snapshot_user_callback( self, profile_id = None ): return os.path.join( self._LOCAL_CONFIG_FOLDER, "user-callback" ) @@ -1194,20 +1255,43 @@ return os.path.join( self._LOCAL_DATA_FOLDER, "cron_env" ) def get_anacrontab(self, suffix = ''): + '''Deprecated since 1.1. Just keep this to delete old anacrontab files''' return os.path.join(self._LOCAL_CONFIG_FOLDER, 'anacrontab' + suffix) + def anacrontab_files(self): + '''list existing old anacrontab files''' + dirname, basename = os.path.split(self.get_anacrontab()) + for f in os.listdir(dirname): + if f.startswith(basename): + yield os.path.join(dirname, f) + def get_anacron_spool(self): return os.path.join(self._LOCAL_DATA_FOLDER, 'anacron') + def get_anacron_spool_file(self, profile_id = None): + return os.path.join(self.get_anacron_spool(), self.get_anacron_job_identify(profile_id)) + + def get_anacron_job_identify(self, profile_id = None): + if not profile_id: + profile_id = self.get_current_profile() + profile_name = self.get_profile_name(profile_id) + return profile_id + '_' + profile_name.replace(' ', '_') + def get_udev_rules_path(self): return os.path.join('/etc/udev/rules.d', '99-backintime-%s.rules' % self.get_user()) def get_restore_log_file( self, profile_id = None ): return os.path.join( self._LOCAL_DATA_FOLDER, "restore_%s.log" % self.__get_file_id__( profile_id ) ) + def get_restore_instance_file( self, profile_id = None ): + return os.path.join( self._LOCAL_DATA_FOLDER, "restore%s.lock" % self.__get_file_id__( profile_id ) ) + def get_last_snapshot_symlink(self, profile_id = None): return os.path.join(self.get_snapshots_full_path(profile_id), 'last_snapshot') + def get_encfsconfig_backup_folder(self, profile_id = None): + return os.path.join(self._LOCAL_DATA_FOLDER, 'encfsconfig_backup_%s' % self.__get_file_id__( profile_id )) + def get_license( self ): return tools.read_file( os.path.join( self.get_doc_path(), 'LICENSE' ), '' ) @@ -1217,6 +1301,14 @@ def get_authors( self ): return tools.read_file( os.path.join( self.get_doc_path(), 'AUTHORS' ), '' ) + def get_changelog(self): + for i in ('CHANGES', 'changelog'): + f = os.path.join(self.get_doc_path(), i) + clog = tools.read_file(f, '') + if clog: + return clog + return '' + def prepare_path( self, path ): if len( path ) > 1: if path[ -1 ] == os.sep: @@ -1224,236 +1316,253 @@ return path def is_configured( self, profile_id = None ): - '''Checks if the program is configured''' - if len( self.get_snapshots_path( profile_id ) ) == 0: - return False + '''Checks if the program is configured''' + return bool(self.get_snapshots_path(profile_id) and self.get_include(profile_id)) - if len( self.get_include( profile_id ) ) == 0: - return False - - return True - def can_backup( self, profile_id = None ): - '''Checks if snapshots_path exists''' + '''Checks if snapshots_path exists''' if not self.is_configured( profile_id ): return False if not os.path.isdir( self.get_snapshots_full_path( profile_id ) ): - print("%s does not exist" % self.get_snapshots_full_path( profile_id )) + logger.error("%s does not exist" + %self.get_snapshots_full_path(profile_id), + self) return False return True - def setup_cron( self ): - system_entry_message = "#Back In Time system entry, this will be edited by the gui:" - - """We have to check if the system_entry_message is in use, - if not then the entries are most likely from Back In Time 0.9.26 - or earlier.""" - if os.system( "crontab -l | grep '%s' > /dev/null" % system_entry_message ) != 0: - """Then the system entry message has not yet been used in this crontab - therefore we assume all entries are system entries and clear them all. - This is the old behaviour""" - print("Clearing all Back In Time entries") - os.system( "crontab -l | grep -v backintime | crontab -" ) - - print("Clearing system Back In Time entries") - #os.system( "crontab -l | grep -Pv '(?s)%s.*?backintime' | crontab -" % system_entry_message ) #buggy in Ubuntu 10.10 - os.system( "crontab -l | sed '/%s/{N;/backintime/d;}' | crontab -" % system_entry_message ) + def is_backup_scheduled(self, profile_id = None): + '''check if profile is supposed to be run this time''' + if self.get_automatic_backup_mode(profile_id) not in (self.REPEATEDLY, self.UDEV): + return True - print("Clearing anacrontab") - dirname, basename = os.path.split(self.get_anacrontab()) - for file in os.listdir(dirname): - if file.startswith(basename): - os.remove(os.path.join(dirname, file)) - - empty = True - start_anacron = False - uuid_tmp_fd = None - uuids = [] - profiles = self.get_profiles() - - try: - for profile_id in profiles: - profile_name = self.get_profile_name( profile_id ) - print("Profile: %s" % profile_name) - backup_mode = self.get_automatic_backup_mode( profile_id ) - print("Automatic backup: %s" % self.AUTOMATIC_BACKUP_MODES[ backup_mode ]) + #if crontab wasn't updated since upgrading BIT to version without anacron + #we are most likely started by anacron and should run this task without asking. + if list(self.anacrontab_files()): + return True - if self.NONE == backup_mode: - continue + last_time = tools.readTimeStamp(self.get_anacron_spool_file(profile_id)) + if not last_time: + return True - if not tools.check_command( 'crontab' ): - self.notify_error( _( 'Can\'t find crontab.\nAre you sure cron is installed ?\nIf not you should disable all automatic backups.' ) ) - return False + value = self.get_automatic_backup_anacron_period(profile_id) + unit = self.get_automatic_backup_anacron_unit(profile_id) - cron_line = '' - anacron_line = '' + return self.olderThan(last_time, value, unit) - hour = self.get_automatic_backup_time(profile_id) / 100; - minute = self.get_automatic_backup_time(profile_id) % 100; - day = self.get_automatic_backup_day(profile_id) - weekday = self.get_automatic_backup_weekday(profile_id) - period = str(self.get_automatic_backup_anacron_period(profile_id)) - job_identify = profile_id + '_' + profile_name.replace(' ', '_') - - if self.AT_EVERY_BOOT == backup_mode: - cron_line = 'echo "{msg}\n@reboot {cmd}"' - elif self._5_MIN == backup_mode: - cron_line = 'echo "{msg}\n*/5 * * * * {cmd}"' - elif self._10_MIN == backup_mode: - cron_line = 'echo "{msg}\n*/10 * * * * {cmd}"' - elif self._30_MIN == backup_mode: - cron_line = 'echo "{msg}\n*/30 * * * * {cmd}"' - elif self._1_HOUR == backup_mode: - cron_line = 'echo "{msg}\n0 * * * * {cmd}"' - elif self._2_HOURS == backup_mode: - cron_line = 'echo "{msg}\n0 */2 * * * {cmd}"' - elif self._4_HOURS == backup_mode: - cron_line = 'echo "{msg}\n0 */4 * * * {cmd}"' - elif self._6_HOURS == backup_mode: - cron_line = 'echo "{msg}\n0 */6 * * * {cmd}"' - elif self._12_HOURS == backup_mode: - cron_line = 'echo "{msg}\n0 */12 * * * {cmd}"' - elif self.CUSTOM_HOUR == backup_mode: - cron_line = 'echo "{msg}\n0 ' + self.get_custom_backup_time( profile_id ) + ' * * * {cmd}"' - elif self.DAY == backup_mode: - cron_line = "echo \"{msg}\n%s %s * * * {cmd}\"" % (minute, hour) - elif self.DAY_ANACRON == backup_mode: - if not self.check_anacron(): - return False - anacrontab_suffix = '' - if not start_anacron: - cron_line = 'echo "{msg}\n*/15 * * * * %s"' % self.anacron_cmd(anacrontab_suffix) - start_anacron = True - anacron_line = '\t'.join((period, '0', job_identify, '{cmd}')) + '\n' - elif self.UDEV == backup_mode: - if not self.check_anacron(): - return False - mode = self.get_snapshots_mode(profile_id) - if mode == 'local': - dest_path = self.get_snapshots_full_path(profile_id) - elif mode == 'local_encfs': - dest_path = self.get_local_encfs_path(profile_id) - else: - self.notify_error( _('Schedule udev doesn\'t work with mode %s') % mode) - return False - uuid = tools.get_uuid_from_path(dest_path) - if uuid is None: - self.notify_error( _('Couldn\'t find UUID for "%s"') % dest_path) - return False - if uuid_tmp_fd is None: - uuid_tmp_fd = tempfile.NamedTemporaryFile() - anacrontab_suffix = '-%s' % uuid - anacron_line = '\t'.join((period, '0', job_identify, '{cmd}')) + '\n' - if not uuid in uuids: - self.prepair_udev(uuid_tmp_fd, uuid, anacrontab_suffix) - uuids += uuid - elif self.WEEK == backup_mode: - cron_line = "echo \"{msg}\n%s %s * * %s {cmd}\"" % (minute, hour, weekday) - elif self.MONTH == backup_mode: - cron_line = "echo \"{msg}\n%s %s %s * * {cmd}\"" % (minute, hour, day) - - cmd = self.cron_cmd(profile_id) - - if len( cron_line ) > 0: - empty = False - cron_line = cron_line.replace( '{cmd}', cmd ) - cron_line = cron_line.replace( '{msg}', system_entry_message ) - os.system( "( crontab -l; %s ) | crontab -" % cron_line ) - - if len(anacron_line) > 0: - anacron_line = anacron_line.replace('{cmd}', cmd) - tools.make_dirs(self.get_anacron_spool()) - env = '' - if not os.path.exists(self.get_anacrontab(anacrontab_suffix)): - env = 'SHELL=%s\n' % os.environ['SHELL'] - env += 'PATH=%s\n' % os.environ['PATH'] - env += 'DISPLAY=%s\n' % os.environ['DISPLAY'] - env += '\n\n' - with open(self.get_anacrontab(anacrontab_suffix), 'a') as f: - f.write(env) - f.write(anacron_line) - - if uuid_tmp_fd is None: - if not self.remove_udev(): - self.notify_error( _('Failed to remove udev rules') ) - else: - uuid_tmp_fd.flush() - uuid_tmp_fd.seek(0) - if len(uuid_tmp_fd.read()) > 0: - if not self.setup_udev(uuid_tmp_fd): - self.notify_error( _('Failed to create udev rules') ) - uuid_tmp_fd.close() - return False - uuid_tmp_fd.close() - except: - raise - finally: - if empty: - # Leave one system_entry_message in to prevent deleting of manual - # entries if there is no automatic entry. - info_message = "#Please don't delete these two lines, or all custom backintime entries are going to be deleted next time you call the gui options!" - os.system( '(crontab -l; echo "%s"; echo "%s") | crontab -' - % (system_entry_message, info_message) ) + def olderThan(self, time, value, unit): + '''return True if time is older than months, weeks, days or hours''' + assert isinstance(time, datetime.datetime), 'time is not datetime.datetime type: %s' % time + + now = datetime.datetime.now() + + if unit <= self.HOUR: + return time < now - datetime.timedelta(hours = value) + elif unit <= self.DAY: + return time.date() <= now.date() - datetime.timedelta(days = value) + elif unit <= self.WEEK: + return time.date() < now.date() \ + - datetime.timedelta(days = now.date().weekday()) \ + - datetime.timedelta(weeks = value - 1) + elif unit <= self.MONTH: + firstDay = now.date() - datetime.timedelta(days = now.date().day + 1) + for i in range(value - 1): + if firstDay.month == 1: + firstDay = firstDay.replace(month = 12, year = firstDay.year - 1) + else: + firstDay = firstDay.replace(month = firstDay.month - 1) + return time.date() < firstDay + else: + return True + + SYSTEM_ENTRY_MESSAGE = "#Back In Time system entry, this will be edited by the gui:" + + def setup_cron(self): + for f in self.anacrontab_files(): + logger.debug("Clearing anacrontab %s" + %f, self) + os.remove(f) + self.setupUdev.clean() + + oldCrontab = tools.readCrontab() + + strippedCrontab = self.removeOldCrontab(oldCrontab) + newCrontab = self. createNewCrontab(strippedCrontab) + if not isinstance(newCrontab, (list, tuple)): + return newCrontab + + #save Udev rules + try: + if self.setupUdev.isReady and self.setupUdev.save(): + logger.debug('Udev rules added successfully', self) + except PermissionDeniedByPolicy as e: + logger.error(str(e), self) + self.notify_error(str(e)) + return False + + if not newCrontab == oldCrontab: + if not tools.check_command('crontab'): + logger.error('crontab not found.', self) + self.notify_error(_('Can\'t find crontab.\nAre you sure cron is installed ?\n' + 'If not you should disable all automatic backups.')) + return False + if not tools.writeCrontab(newCrontab): + self.notify_error(_('Failed to write new crontab.')) + return False + else: + logger.debug("Crontab didn't change. Skip writing.") return True + def removeOldCrontab(self, crontab): + #We have to check if the self.SYSTEM_ENTRY_MESSAGE is in use, + #if not then the entries are most likely from Back In Time 0.9.26 + #or earlier. + if not self.SYSTEM_ENTRY_MESSAGE in crontab: + #Then the system entry message has not yet been used in this crontab + #therefore we assume all entries are system entries and clear them all. + #This is the old behaviour + logger.debug("Clearing all Back In Time entries", self) + return [x for x in crontab if not 'backintime' in x] + else: + #clear all line peers which have a SYSTEM_ENTRY_MESSAGE followed by + #one backintime command line + logger.debug("Clearing system Back In Time entries", self) + delLines = [] + for i, line in enumerate(crontab): + if self.SYSTEM_ENTRY_MESSAGE in line and \ + len(crontab) > i + 1 and \ + 'backintime' in crontab[i + 1]: + delLines.extend((i, i + 1)) + return [line for i, line in enumerate(crontab) if i not in delLines] + + def createNewCrontab(self, oldCrontab): + newCrontab = oldCrontab[:] + for profile_id in self.get_profiles(): + cronLine = self.cronLine(profile_id) + if not isinstance(cronLine, str): + return cronLine + if cronLine: + newCrontab.append(self.SYSTEM_ENTRY_MESSAGE) + newCrontab.append(cronLine.replace('{cmd}', self.cron_cmd(profile_id))) + + if newCrontab == oldCrontab: + # Leave one self.SYSTEM_ENTRY_MESSAGE in to prevent deleting of manual + # entries if there is no automatic entry. + newCrontab.append(self.SYSTEM_ENTRY_MESSAGE) + newCrontab.append("#Please don't delete these two lines, or all custom backintime " + "entries are going to be deleted next time you call the gui options!") + return newCrontab + + def cronLine(self, profile_id): + cron_line = '' + profile_name = self.get_profile_name(profile_id) + backup_mode = self.get_automatic_backup_mode(profile_id) + logger.debug("Profile: %s | Automatic backup: %s" + %(profile_name, self.AUTOMATIC_BACKUP_MODES[backup_mode]), + self) + + if self.NONE == backup_mode: + return cron_line + + hour = self.get_automatic_backup_time(profile_id) // 100 + minute = self.get_automatic_backup_time(profile_id) % 100 + day = self.get_automatic_backup_day(profile_id) + weekday = self.get_automatic_backup_weekday(profile_id) + + if self.AT_EVERY_BOOT == backup_mode: + cron_line = '@reboot {cmd}' + elif self._5_MIN == backup_mode: + cron_line = '*/5 * * * * {cmd}' + elif self._10_MIN == backup_mode: + cron_line = '*/10 * * * * {cmd}' + elif self._30_MIN == backup_mode: + cron_line = '*/30 * * * * {cmd}' + elif self._1_HOUR == backup_mode: + cron_line = '0 * * * * {cmd}' + elif self._2_HOURS == backup_mode: + cron_line = '0 */2 * * * {cmd}' + elif self._4_HOURS == backup_mode: + cron_line = '0 */4 * * * {cmd}' + elif self._6_HOURS == backup_mode: + cron_line = '0 */6 * * * {cmd}' + elif self._12_HOURS == backup_mode: + cron_line = '0 */12 * * * {cmd}' + elif self.CUSTOM_HOUR == backup_mode: + cron_line = '0 ' + self.get_custom_backup_time( profile_id ) + ' * * * {cmd}' + elif self.DAY == backup_mode: + cron_line = '%s %s * * * {cmd}' % (minute, hour) + elif self.REPEATEDLY == backup_mode: + if self.get_automatic_backup_anacron_unit(profile_id) <= self.DAY: + cron_line = '*/15 * * * * {cmd}' + else: + cron_line = '0 * * * * {cmd}' + elif self.UDEV == backup_mode: + if not self.setupUdev.isReady: + logger.error("Failed to install Udev rule for profile %s. " + "DBus Service 'net.launchpad.backintime.serviceHelper' not available" + %profile_id, self) + self.notify_error( _('Could not install Udev rule for profile %(profile_id)s. ' + 'DBus Service \'%(dbus_interface)s\' ' + 'wasn\'t available') + %{'profile_id': profile_id, + 'dbus_interface': 'net.launchpad.backintime.serviceHelper'}) + mode = self.get_snapshots_mode(profile_id) + if mode == 'local': + dest_path = self.get_snapshots_full_path(profile_id) + elif mode == 'local_encfs': + dest_path = self.get_local_encfs_path(profile_id) + else: + logger.error('Schedule udev doesn\'t work with mode %s' %mode, self) + self.notify_error( _('Schedule udev doesn\'t work with mode %s') % mode) + return False + uuid = tools.get_uuid_from_path(dest_path) + if uuid is None: + #try using cached uuid + #?Devices uuid used to automatically set up udev rule if the drive is not connected. + uuid = self.get_profile_str_value('snapshots.path.uuid', '', profile_id) + if not uuid: + logger.error('Couldn\'t find UUID for "%s"' %dest_path, self) + self.notify_error( _('Couldn\'t find UUID for "%s"') % dest_path) + return False + else: + #cache uuid in config + self.set_profile_str_value('snapshots.path.uuid', uuid, profile_id) + try: + self.setupUdev.addRule(self.cron_cmd(profile_id), uuid) + except InvalidChar as e: + logger.error(str(e), self) + self.notify_error(str(e)) + return False + elif self.WEEK == backup_mode: + cron_line = '%s %s * * %s {cmd}' %(minute, hour, weekday) + elif self.MONTH == backup_mode: + cron_line = '%s %s %s * * {cmd}' %(minute, hour, day) + + return cron_line + def cron_cmd(self, profile_id): cmd = tools.which('backintime') + ' ' if profile_id != '1': cmd += '--profile-id %s ' % profile_id if not self._LOCAL_CONFIG_PATH is self._DEFAULT_CONFIG_PATH: cmd += '--config %s ' % self._LOCAL_CONFIG_PATH - cmd += '--backup-job >/dev/null 2>&1' + if logger.DEBUG: + cmd += '--debug ' + cmd += 'backup-job' + if self.redirect_stdout_in_cron(profile_id): + cmd += ' >/dev/null' + if self.redirect_stderr_in_cron(profile_id): + if self.redirect_stdout_in_cron(profile_id): + cmd += ' 2>&1' + else: + cmd += ' 2>/dev/null' if self.is_run_ionice_from_cron_enabled(profile_id) and tools.check_command('ionice'): cmd = tools.which('ionice') + ' -c2 -n7 ' + cmd if self.is_run_nice_from_cron_enabled( profile_id ) and tools.check_command('nice'): cmd = tools.which('nice') + ' -n 19 ' + cmd return cmd - def anacron_cmd(self, suffix = ''): - return 'test -x %(cmd)s && test -e %(tab)s && %(cmd)s -s -t %(tab)s -S %(spool)s' \ - % {'cmd': tools.which('anacron'), - 'tab': self.get_anacrontab(suffix), - 'spool': self.get_anacron_spool()} - - def check_anacron(self): - if tools.check_command('anacron'): - return True - self.notify_error( _( 'Can\'t find anacron.\nAre you sure anacron is installed ?\nIf not you should disable daily anacron backups.' ) ) - return False - - def prepair_udev(self, tmp_fd, uuid, anacrontab_suffix): - cmd = self.anacron_cmd(anacrontab_suffix) - cmd = "%s - '%s' -c '%s' &" %(tools.which('su'), self.get_user(), cmd) - tmp_fd.write('ACTION=="add", ENV{ID_FS_UUID}=="%s", RUN+="%s"\n' %(uuid, cmd)) - return True - - def setup_udev(self, tmp_fd): - tmp_fd.flush() - path = self.get_udev_rules_path() - os.chmod(tmp_fd.name, stat.S_IRUSR | stat.S_IWUSR | stat.S_IRGRP | stat.S_IROTH) - try: - if os.path.exists(path) and tools._get_md5sum_from_path(tmp_fd.name) == tools._get_md5sum_from_path(path): - return True - except TypeError: - pass - cmd = 'cp "%s" "%s"' %(tmp_fd.name, path) - return tools.sudo_execute(self, cmd, _('Please provide your sudo password to install the udev rule.')) == 0 - - def remove_udev(self): - if not os.path.exists(self.get_udev_rules_path()): - return True - cmd = 'rm %s' % self.get_udev_rules_path() - return tools.sudo_execute(self, cmd, _('Please provide your sudo password to remove unused udev rules.')) == 0 - - #def get_update_other_folders( self ): - # return self.get_bool_value( 'update.other_folders', True ) - - #def set_update_other_folders( self, value ): - # self.set_bool_value( 'update.other_folders', value ) - if __name__ == "__main__": config = Config() print("snapshots path = %s" % config.get_snapshots_full_path()) - diff -Nru backintime-1.0.36/common/configure backintime-1.1.12/common/configure --- backintime-1.0.36/common/configure 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/configure 2016-01-11 18:07:58.000000000 +0000 @@ -1,43 +1,131 @@ #!/bin/sh +#clean up if [ -e Makefile ]; then rm Makefile; fi +#tmp files +MAKEFILE="$(mktemp)" +UNINSTALL_FILES="$(mktemp)" +UNINSTALL_DIRS="$(mktemp)" + #set default options -PYTHON="--python" +PYTHON="--python3" FUSE_GROUP="--fuse-group" USR_BIN_FILES="backintime backintime-askpass" FUSE_FILES="sshtools.py encfstools.py" +usage () { +echo "Usage:" +echo "$0 [--python | --python3], [--fuse-group | --no-fuse-group]" +echo "" +echo "--python" +echo "\tuse 'python' to start Python3" +echo "--python3" +echo "\tuse 'python3' to start Python3" +echo "--fuse-group" +echo "\tmake sure user is in group 'fuse' to be able to use fuse-based file-systems" +echo "--no-fuse-group" +echo "\tdo not check for 'fuse' group membership (if not necessary on destination platform)" +} + +addInstallFiles () { +file=$1 +dest=$2 +mode=$3 +if [ -z "$mode" ]; then + mode=644 +fi +for i in $(ls $file); do + addInstallFile "$i" "$dest" "$mode" +done +} + +addInstallFile () { +file=$1 +dest=$2 +mode=$3 +if [ -z "$mode" ]; then + mode=644 +fi +printf "\tinstall --mode=$mode $file \$(DEST)$dest\n" >> ${MAKEFILE} +addUninstallFile "$file" "$dest" +} + +addInstallFileRename () { +file=$1 +dest=$2 +mode=$3 +if [ -z "$mode" ]; then + mode=644 +fi +printf "\tinstall --mode=$mode $file \$(DEST)$dest\n" >> ${MAKEFILE} +addUninstallFileRename "$dest" +} + +addUninstallFile () { +file=$(basename "$1") +dest=$2 +printf "\trm -f \$(DEST)$dest/$file\n" >> ${UNINSTALL_FILES} +} + +addUninstallFileRename () { +file=$1 +printf "\trm -f \$(DEST)$file\n" >> ${UNINSTALL_FILES} +} + +addInstallDir () { +dest=$1 +printf "\tinstall -d \$(DEST)$dest\n" >> ${MAKEFILE} +addUninstallDir "$dest" +} + +addUninstallDir () { +dest=$1 +printf "\tif [ -d \$(DEST)$dest ]; then rmdir --ignore-fail-on-non-empty \$(DEST)$dest; fi\n" >> ${UNINSTALL_DIRS} +} + +addComment () { +printf "\t#install $1\n" >> ${MAKEFILE} +printf "\t#uninstall files $1\n" >> ${UNINSTALL_FILES} +printf "\t#uninstall directory $1\n" >> ${UNINSTALL_DIRS} +} + +addNewline () { +printf "\n" >> ${MAKEFILE} +printf "\n" >> ${UNINSTALL_FILES} +printf "\n" >> ${UNINSTALL_DIRS} +} + #get commandline arguments for arg in $*; do case $arg in - --python | --python2) PYTHON=$arg;; + --python | --python3) PYTHON=$arg;; --fuse-group | --no-fuse-group) FUSE_GROUP=$arg;; + --help | -h | *) usage; exit 0;; esac done #patch python command -#use 'python' or 'python2' to start Python Version 2.x +#use 'python' or 'python3' to start Python Version 3.x case $PYTHON in - --python) sed -e "s/^python2\? /python /g" \ - -e "s/^ssh-agent python2\? /ssh-agent python /g" \ - -i $USR_BIN_FILES - ;; - --python2) sed -e "s/^python2\? /python2 /g" \ - -e "s/^ssh-agent python2\? /ssh-agent python2 /g" \ - -i $USR_BIN_FILES - ;; + --python) PYVERSION="" ;; + --python3) PYVERSION="3";; esac +sed -e "s/^python3\? /python${PYVERSION} /g" \ + -e "s/^ssh-agent python3\? /ssh-agent python${PYVERSION} /g" \ + -i $USR_BIN_FILES #patch check for 'fuse' group #Some distributions require user to be in group 'fuse' to use sshfs and encfs case $FUSE_GROUP in - --fuse-group) sed -e "s/CHECK_FUSE_GROUP = \(True\|False\)/CHECK_FUSE_GROUP = True/" -i $FUSE_FILES;; - --no-fuse-group) sed -e "s/CHECK_FUSE_GROUP = \(True\|False\)/CHECK_FUSE_GROUP = False/" -i $FUSE_FILES;; + --fuse-group) CHECKFUSE="True" ;; + --no-fuse-group) CHECKFUSE="False";; esac +sed -e "s/CHECK_FUSE_GROUP = \(True\|False\)/CHECK_FUSE_GROUP = ${CHECKFUSE}/" \ + -i $FUSE_FILES #check languages mos="" @@ -48,29 +136,165 @@ langs="$lang $langs" done -#Start Makefile -printf "LANGS=$langs\n\n" >> Makefile +#start Makefile +printf "LANGS=$langs\n\n" >> ${MAKEFILE} + +printf "PREFIX=/usr\n" >> ${MAKEFILE} +printf "DEST=\$(DESTDIR)\$(PREFIX)\n\n" >> ${MAKEFILE} + +printf "all:\tbuild\n\n" >> ${MAKEFILE} -#add template -cat Makefile.template >> Makefile +printf "build:\ttranslate compress\n\n" >> ${MAKEFILE} + +printf "clean:\n" >> ${MAKEFILE} +printf "\trm -f po/*.mo\n" >> ${MAKEFILE} +printf "\trm -f man/C/*.gz\n" >> ${MAKEFILE} +printf "\trm -f config-example-*.gz\n\n" >> ${MAKEFILE} + +#create install and uninstall target +printf "install:\tinstall_translations\n" >> ${MAKEFILE} +addComment "python" +addUninstallDir "/share/backintime/common/__pycache__" +addUninstallFile "*.pyc" "/share/backintime/common/__pycache__" +addInstallDir "/share/backintime/common" +addInstallFiles "*.py" "/share/backintime/common" +addNewline + +addComment "plugins" +addUninstallDir "/share/backintime/plugins/__pycache__" +addUninstallFile "*.pyc" "/share/backintime/plugins/__pycache__" +addInstallDir "/share/backintime/plugins" +addInstallFiles "plugins/*.py" "/share/backintime/plugins" +addUninstallDir "/share/backintime" +addNewline + +addComment "documentation" +addInstallDir "/share/doc/backintime-common" +addInstallFile "../debian/copyright" "/share/doc/backintime-common" +addInstallFile "../AUTHORS" "/share/doc/backintime-common" +addInstallFile "../LICENSE" "/share/doc/backintime-common" +addInstallFile "../README.md" "/share/doc/backintime-common" +addInstallFile "../TRANSLATIONS" "/share/doc/backintime-common" +addInstallFile "../VERSION" "/share/doc/backintime-common" +addInstallFile "../CHANGES" "/share/doc/backintime-common" +addNewline + +addComment "config-examples" +addInstallDir "/share/doc/backintime-common/examples" +addInstallFile "config-example-local.gz" "/share/doc/backintime-common/examples" +addInstallFile "config-example-ssh.gz" "/share/doc/backintime-common/examples" +addUninstallDir "/share/doc/backintime-common" +addUninstallDir "/share/doc" +addNewline + +addComment "man" +addInstallDir "/share/man/man1" +addInstallFile "man/C/backintime.1.gz" "/share/man/man1" +addInstallFile "man/C/backintime-askpass.1.gz" "/share/man/man1" +addInstallFile "man/C/backintime-config.1.gz" "/share/man/man1" +addUninstallDir "/share/man" +addNewline + +addComment "application" +addInstallDir "/bin" +addInstallFile "backintime" "/bin" "755" +addInstallFile "backintime-askpass" "/bin" "755" +addNewline + +addComment "autostart" +addInstallDir "/../etc/xdg/autostart" +addInstallFile "backintime.desktop" "/../etc/xdg/autostart" +addUninstallDir "/../etc/xdg" +addUninstallDir "/../etc" +addNewline + +addComment "bash-completion" +addInstallDir "/share/bash-completion/completions" +addInstallFiles "bash-completion/*" "/share/bash-completion/completions" +addUninstallDir "/share/bash-completion" +addNewline + +#compress +printf "compress:\n" >> ${MAKEFILE} +printf "\t#man pages\n" >> ${MAKEFILE} +printf "\tfor i in \$\$(ls -1 man/C/); do case \$\$i in *.gz|*~) continue;; *) gzip -n --best -c man/C/\$\$i > man/C/\$\${i}.gz;; esac; done\n\n" >> ${MAKEFILE} + +printf "\t#config-examples\n" >> ${MAKEFILE} +printf "\tgzip -n --best -c config-example-local > config-example-local.gz\n" >> ${MAKEFILE} +printf "\tgzip -n --best -c config-example-ssh > config-example-ssh.gz\n\n" >> ${MAKEFILE} #translate -printf "translate: $mos\n\n" >> Makefile +printf "translate:\t$mos\n\n" >> ${MAKEFILE} for lang in $langs; do - printf "po/$lang.mo: po/$lang.po\n" >> Makefile - printf "\tmsgfmt -o po/$lang.mo po/$lang.po\n\n" >> Makefile + printf "po/$lang.mo: po/$lang.po\n" >> ${MAKEFILE} + printf "\tmsgfmt -o po/$lang.mo po/$lang.po\n\n" >> ${MAKEFILE} done #common langs -printf "install_translations:\n" >> Makefile +printf "install_translations:\n" >> ${MAKEFILE} +addComment "translations" for lang in $langs; do - printf "\tinstall -d \$(DEST)/share/locale/$lang/LC_MESSAGES\n" >> Makefile - printf "\tinstall --mode=644 po/$lang.mo \$(DEST)/share/locale/$lang/LC_MESSAGES/backintime.mo\n" >> Makefile + addInstallDir "/share/locale/$lang/LC_MESSAGES" + addInstallFileRename "po/$lang.mo" "/share/locale/$lang/LC_MESSAGES/backintime.mo" + addUninstallDir "/share/locale/$lang" done -printf "\n" >> Makefile +addUninstallDir "/share/locale" +addUninstallDir "/share" +addNewline + +#uninstall +printf "uninstall:\tuninstall_files uninstall_dirs\n\n" >> ${MAKEFILE} +printf "uninstall_files:\n" >> ${MAKEFILE} +cat ${UNINSTALL_FILES} >> ${MAKEFILE} + +printf "uninstall_dirs:\n" >> ${MAKEFILE} +cat ${UNINSTALL_DIRS} >> ${MAKEFILE} + +#test +PYTEST=$(which py.test-3) +COVERAGE=$(which coverage) +#use 'coverage run' if available to pass informations to coveralls.io +if [ -n ${COVERAGE} ]; then + CMD='coverage run -p' +else + CMD='python${PYVERSION}' +fi +printf "test:\tunittest integrationtest\n\n" >> ${MAKEFILE} +printf "test-v:\tunittest-v integrationtest\n\n" >> ${MAKEFILE} +for v in "" "-v"; do + printf "unittest${v}:\n" >> ${MAKEFILE} + if [ -z "${PYTEST}" ]; then + for i in $(ls -1 test/test_*.py); do + printf "\t${CMD} -m unittest ${v} -b $i\n" >> ${MAKEFILE} + done + else + printf "\tpy.test-3 ${v}\n" >> ${MAKEFILE} + fi + printf "\n" >> ${MAKEFILE} +done + +printf "integrationtest:\n" >> ${MAKEFILE} +printf "\ttest/test.sh\n" >> ${MAKEFILE} + +#copy Makefile +mv ${MAKEFILE} Makefile +chmod 644 Makefile + +#clean up +for i in "${UNINSTALL_FILES}" "${UNINSTALL_DIRS}"; do + if [ -e "$i" ]; then + rm "$i" + fi +done + +#check python version +if [ $(python${PYVERSION} --version 2>&1 | grep -c "^Python 3") -ne 1 ]; then + printf "Warning: Wrong Python version.\n" + printf "Please make sure Python 3.x is used by adding '--python' or '--python3'.\n" + exit 1 +fi printf "All OK. Now run:\n" printf " make\n" printf " sudo make install\n" - diff -Nru backintime-1.0.36/common/.coveragerc backintime-1.1.12/common/.coveragerc --- backintime-1.0.36/common/.coveragerc 1970-01-01 00:00:00.000000000 +0000 +++ backintime-1.1.12/common/.coveragerc 2016-01-11 18:07:58.000000000 +0000 @@ -0,0 +1,10 @@ +# default options for coverage from coveralls-python + +[run] +omit = + */virtualenv/python3* + +[report] +exclude_lines = + pragma: no cover + if __name__ == '__main__': diff -Nru backintime-1.0.36/common/create-manpage-backintime-config.py backintime-1.1.12/common/create-manpage-backintime-config.py --- backintime-1.0.36/common/create-manpage-backintime-config.py 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/create-manpage-backintime-config.py 2016-01-11 18:07:58.000000000 +0000 @@ -1,6 +1,5 @@ -#!/usr/bin/env python # Back In Time -# Copyright (c) 2012-2013 Germar Reitze +# Copyright (C) 2012-2016 Germar Reitze # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -28,7 +27,10 @@ with open(os.path.join(PATH, '../VERSION'), 'r') as f: VERSION = f.read().strip('\n') SORT = True #True = sort by alphabet; False = sort by line numbering -c = re.compile(r'.*?self\.get((?:_profile)?)_(.*?)_value ?\( ?[\'"](.*?)[\'"] ?(%?[^,]*?), ?[\'"]?([^\'",\)]*)[\'"]?') + +c_list = re.compile(r'.*?self\.get((?:_profile)?)_(list)_value ?\( ?[\'"](.*?)[\'"], ?((?:\(.*\)|[^,]*)), ?[\'"]?([^\'",\)]*)[\'"]?') +c = re.compile(r'.*?self\.get((?:_profile)?)_(.*?)_value ?\( ?[\'"](.*?)[\'"] ?(%?[^,]*?), ?[\'"]?([^\'",\)]*)[\'"]?') +c_default = re.compile(r'(^DEFAULT[\w]*)[\s]*= (.*)') HEADER = '''.TH backintime-config 1 "%s" "version %s" "USER COMMANDS" .SH NAME @@ -38,10 +40,10 @@ .br /etc/backintime/config .SH DESCRIPTION -Back In Time was developed as pure GUI program and so most functions are only -useable with backintime-gnome or backintime-kde4. But it is possible to use +Back In Time was developed as pure GUI program and so most functions are only +useable with backintime-qt4. But it is possible to use Back In Time e.g. on a headless server. You have to create the configuration file -(~/.config/backintime/config) manually. Look inside /usr/share/doc/backintime/examples/ for examples. +(~/.config/backintime/config) manually. Look inside /usr/share/doc/backintime\-common/examples/ for examples. .PP The configuration file has the following format: .br @@ -49,27 +51,19 @@ .PP Arguments don't need to be quoted. All characters are allowed except '='. .PP -The given path (\\fIprofile.snapshots.path\\fR, \\fIprofile.snapshots.local_encfs.path\\fR -or \\fIprofile.snapshots.ssh.path\\fR) must contain a folderstructure like -backintime///. This has to be created manually. -.PP -Also the crontab entry for automatic backup shedules has to be created manually. -.PP -crontab example: -.br -0 */2 * * * nice -n 19 ionice -c2 -n7 /usr/bin/backintime --backup-job >/dev/null 2>&1 +Run 'backintime check-config' to verify the configfile, create the snapshot folder and crontab entries. .SH POSSIBLE KEYWORDS ''' % (strftime('%b %Y', gmtime()), VERSION) FOOTER = '''.SH SEE ALSO -backintime, backintime-gnome, backintime-kde4. +backintime, backintime-qt4. .PP -Back In Time also has a website: http://backintime.le\-web.org +Back In Time also has a website: https://github.com/bit-team/backintime .SH AUTHOR This manual page was written by BIT Team(). ''' -TYPE = 'type' +INSTANCE = 'instance' NAME = 'name' VALUES = 'values' DEFAULT = 'default' @@ -77,12 +71,12 @@ REFERENCE = 'reference' LINE = 'line' -def output(type = '', name = '', values = '', default = '', comment = '', reference = '', line = 0): - if len(default) == 0: +def output(instance = '', name = '', values = '', default = '', comment = '', reference = '', line = 0): + if not default: default = "''" ret = '.IP "\\fI%s\\fR" 6\n' % name ret += '.RS\n' - ret += 'Type: %-10sAllowed Values: %s\n' %(type, values) + ret += 'Type: %-10sAllowed Values: %s\n' %(instance, values) ret += '.br\n' ret += '%s\n' % comment ret += '.PP\n' @@ -98,85 +92,111 @@ return a return b -def select_values(type, values): +def select_values(instance, values): if values: return values - if type == 'bool': + if instance == 'bool': return 'true|false' - if type == 'str': + if instance == 'str': return 'text' - if type == 'int': + if instance == 'int': return '0-99999' +def process_line(d, key, profile, instance, name, var, default, commentline, values, force_var, force_default, replace_default, counter): + #Ignore commentlines with #?! and 'config.version' + comment = None + if not commentline.startswith('!') and not name == 'config.version' and not key in d: + d[key] = {} + commentline = commentline.split(';') + try: + comment = commentline[0] + values = commentline[1] + force_default = commentline[2] + force_var = commentline[3] + except IndexError: + pass + + if default.startswith('self.') and default[5:] in replace_default: + default = replace_default[default[5:]] + + if isinstance(force_default, str) and force_default.startswith('self.') and force_default[5:] in replace_default: + force_default = replace_default[force_default[5:]] + + if instance == 'bool': + default = default.lower() + d[key][INSTANCE] = instance + d[key][NAME] = re.sub(r'%[\S]', '<%s>' % select(force_var, var).upper(), name) + d[key][VALUES] = select_values(instance, values) + d[key][DEFAULT] = select(force_default, default) + d[key][COMMENT] = re.sub(r'\\n', '\n.br\n', comment) + d[key][REFERENCE] = 'config.py' + d[key][LINE] = counter + def main(): - dict = {} - dict['profiles.version'] = {TYPE : 'int', - NAME : 'profiles.version', - VALUES : '1', - DEFAULT : '1', - COMMENT : 'Internal version of profiles config.', - REFERENCE : 'configfile.py', - LINE : 180} - dict['profiles'] = {TYPE : 'str', - NAME : 'profiles', - VALUES : 'int seperated by colon (e.g. 1:3:4)', - DEFAULT : '1', - COMMENT : 'All active Profiles ( in profile.snapshots...).', - REFERENCE : 'configfile.py', - LINE : 273} - dict['profile.name'] = {TYPE : 'str', - NAME : 'profile.name', - VALUES : 'text', - DEFAULT : 'Main profile', - COMMENT : 'Name of this profile.', - REFERENCE : 'configfile.py', - LINE : 246} + replace_default = {} + d = {} + d['profiles.version'] = {INSTANCE : 'int', + NAME : 'profiles.version', + VALUES : '1', + DEFAULT : '1', + COMMENT : 'Internal version of profiles config.', + REFERENCE : 'configfile.py', + LINE : 180} + d['profiles'] = {INSTANCE : 'str', + NAME : 'profiles', + VALUES : 'int separated by colon (e.g. 1:3:4)', + DEFAULT : '1', + COMMENT : 'All active Profiles ( in profile.snapshots...).', + REFERENCE : 'configfile.py', + LINE : 273} + d['profile.name'] = {INSTANCE : 'str', + NAME : 'profile.name', + VALUES : 'text', + DEFAULT : 'Main profile', + COMMENT : 'Name of this profile.', + REFERENCE : 'configfile.py', + LINE : 246} with open(CONFIG, 'r') as f: - counter = 0 commentline = '' - comment = values = force_var = force_default = type = name = var = default = None - while True: - counter += 1 - line = f.readline() - if len(line) == 0: - break + values = force_var = force_default = instance = name = var = default = None + for counter, line in enumerate(f, 1): line = line.lstrip() + m_default = c_default.match(line) + if m_default: + replace_default[m_default.group(1)] = m_default.group(2).replace('\\$', '\\\$') + continue if line.startswith('#?'): + if commentline and not ';' in commentline and not commentline.endswith('\\n'): + commentline += ' ' commentline += line.lstrip('#?').rstrip('\n') continue if line.startswith('#'): commentline = '' continue - m = c.match(line) - if not m is None: - profile, type, name, var, default = m.groups() + # m = c_list_tuple.match(line) + # if not m: + m = c_list.match(line) + if not m: + m = c.match(line) + if m: + profile, instance, name, var, default = m.groups() if profile == '_profile': name = 'profile.' + name var = var.lstrip('% ') - key = re.sub(r'%[\S]', var, name).lower() - #Ignore commentlines with #?! and 'config.version' - if not commentline.startswith('!') and not name == 'config.version' and not key in dict: - dict[key] = {} - commentline = commentline.split(';') - try: - comment = commentline[0] - values = commentline[1] - force_default = commentline[2] - force_var = commentline[3] - except IndexError: - pass - - if type == 'bool': - default = default.lower() - dict[key][TYPE] = type - dict[key][NAME] = re.sub(r'%[\S]', '<%s>' % select(force_var, var).upper(), name) - dict[key][VALUES] = select_values(type, values) - dict[key][DEFAULT] = select(force_default, default) - dict[key][COMMENT] = re.sub(r'\\n', '\n.br\n', comment) - dict[key][REFERENCE] = 'config.py' - dict[key][LINE] = counter + if instance == 'list': + type_key = [x.strip('"\'') for x in re.findall(r'["\'].*?["\']', var)] + commentline_split = commentline.split('::') + for i, tk in enumerate(type_key): + t, k = tk.split(':', maxsplit = 1) + process_line(d, key, profile, 'int', '%s.size' %name, var, '\-1', 'Quantity of %s. entries.' %name, values, force_var, force_default, replace_default, counter) + key = '%s.%s' %(name, k) + key = key.lower() + process_line(d, key, profile, t, '%s..%s' %(name, k), var, '', commentline_split[i], values, force_var, force_default, replace_default, counter) + else: + key = re.sub(r'%[\S]', var, name).lower() + process_line(d, key, profile, instance, name, var, default, commentline, values, force_var, force_default, replace_default, counter) - comment = values = force_var = force_default = type = name = var = default = None + values = force_var = force_default = instance = name = var = default = None commentline = '' with open(MAN, 'w') as f: @@ -184,8 +204,8 @@ if SORT: s = lambda x: x else: - s = lambda x: dict[x][LINE] - f.write('\n'.join(output(**dict[key]) for key in sorted(dict, key = s))) + s = lambda x: d[x][LINE] + f.write('\n'.join(output(**d[key]) for key in sorted(d, key = s))) f.write(FOOTER) if __name__ == "__main__": diff -Nru backintime-1.0.36/common/debian_specific/changelog backintime-1.1.12/common/debian_specific/changelog --- backintime-1.0.36/common/debian_specific/changelog 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/debian_specific/changelog 1970-01-01 00:00:00.000000000 +0000 @@ -1,11 +0,0 @@ -$BACKINTIME ($VERSION~$RELEASE) $RELEASE; urgency=low - * remove UbuntuOne from exclude (https://bugs.launchpad.net/bugs/1340131) - * Gray out 'Add Profile' if 'Main Profile' isn't configured yet (https://bugs.launchpad.net/bugs/1335545) - * Don't check for fuse group-membership if group doesn't exist - * Fix bug: backintime-kde4 as root failed to load ssh-key (https://bugs.launchpad.net/bugs/1276348) - * Fix bug: kdesystrayicon.py crashes because of missing environ (https://bugs.launchpad.net/bugs/1332126) - * Fix bug: OSError if sshfs/encfs is not installed (https://bugs.launchpad.net/bugs/1316288) - * Fix bug: TypeError in config.py check_config() (https://bugzilla.redhat.com/show_bug.cgi?id=1091644) - * Fix bug: unhandled exception in create_last_snapshot_symlink() (https://bugs.launchpad.net/bugs/1269991) - * disable keyring for root - -- BIT Team Wed, 06 Aug 2014 13:15:38 +0200 diff -Nru backintime-1.0.36/common/debian_specific/compat backintime-1.1.12/common/debian_specific/compat --- backintime-1.0.36/common/debian_specific/compat 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/debian_specific/compat 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -5 diff -Nru backintime-1.0.36/common/debian_specific/conffiles backintime-1.1.12/common/debian_specific/conffiles --- backintime-1.0.36/common/debian_specific/conffiles 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/debian_specific/conffiles 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -/etc/xdg/autostart/backintime.desktop diff -Nru backintime-1.0.36/common/debian_specific/control backintime-1.1.12/common/debian_specific/control --- backintime-1.0.36/common/debian_specific/control 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/debian_specific/control 1970-01-01 00:00:00.000000000 +0000 @@ -1,14 +0,0 @@ -Package: backintime-common -Version: 1.0.36 -Source: backintime-common -Section: utils -Priority: optional -Maintainer: BIT Team -Homepage: http://backintime.le-web.org -Architecture: all -Depends: python, rsync, cron, openssh-client, python-keyring -Recommends: powermgmt-base, sshfs, encfs -Conflicts: backintime -Replaces: backintime -Description: Simple backup system (common) - This package contains non GUI files used by different GUI fontends. diff -Nru backintime-1.0.36/common/debian_specific/control.source backintime-1.1.12/common/debian_specific/control.source --- backintime-1.0.36/common/debian_specific/control.source 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/debian_specific/control.source 1970-01-01 00:00:00.000000000 +0000 @@ -1,8 +0,0 @@ -Source: backintime-common -Maintainer: BIT Team -Section: utils -Priority: optional -Build-Depends: debhelper (>= 7) -Standards-Version: 3.9.5 -Homepage: http://backintime.le-web.org - diff -Nru backintime-1.0.36/common/debian_specific/copyright backintime-1.1.12/common/debian_specific/copyright --- backintime-1.0.36/common/debian_specific/copyright 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/debian_specific/copyright 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ -Back In Time -Copyright (C) 2008-2009 Oprea Dan, Bart de Koning, Richard Bailey - -A copy of the license can be found: -/usr/share/common-licenses/GPL-2 -/usr/share/doc/backintime/LICENSE - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - diff -Nru backintime-1.0.36/common/debian_specific/postrm backintime-1.1.12/common/debian_specific/postrm --- backintime-1.0.36/common/debian_specific/postrm 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/debian_specific/postrm 1970-01-01 00:00:00.000000000 +0000 @@ -1,16 +0,0 @@ -#!/bin/sh -rm -rf /usr/share/backintime/common/*.pyc -rm -rf /usr/share/backintime/plugins/*.pyc -for arg in $*; do - case $arg in - purge) rm -rf /etc/udev/rules.d/99-backintime-*.rules - find /home -maxdepth 3 -type d -path '*/.config/backintime' -exec rm -rf {} \; - find /home -maxdepth 4 -type d -path '*/.local/share/backintime' -exec rm -rf {} \; - rm -rf /root/.config/backintime - rm -rf /root/.local/share/backintime - ;; - esac -done -exit 0 - -#DEBHELPER# diff -Nru backintime-1.0.36/common/debian_specific/rules backintime-1.1.12/common/debian_specific/rules --- backintime-1.0.36/common/debian_specific/rules 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/debian_specific/rules 1970-01-01 00:00:00.000000000 +0000 @@ -1,75 +0,0 @@ -#!/usr/bin/make -f - -package = backintime-common - -clean: - dh_testdir - dh_clean - rm -f build - -install: build - dh_clean - - #install python - #dh_installdirs /usr/share/backintime/common - dh_install *.py /usr/share/backintime/common - - #install plugin(s) - #dh_installdirs /usr/share/backintime/plugins - dh_install plugins/*.py /usr/share/backintime/plugins - - #install copyright file - #dh_installdirs /usr/share/doc/backintime-common - dh_install debian/copyright /usr/share/doc/backintime-common - - #install doc file(s) - #dh_installdirs /usr/share/doc/backintime - dh_install doc/AUTHORS /usr/share/doc/backintime - dh_install doc/LICENSE /usr/share/doc/backintime - dh_install doc/README /usr/share/doc/backintime - dh_install doc/TRANSLATIONS /usr/share/doc/backintime - dh_install doc/VERSION /usr/share/doc/backintime - dh_install doc/CHANGES /usr/share/doc/backintime - - #install man file(s) - #dh_installdirs /usr/share/man/man1 - dh_install man/C/*.gz /usr/share/man/man1 - - #install application - #dh_installdirs /usr/bin - dh_install backintime /usr/bin - dh_install backintime-askpass /usr/bin - - #install autostart - dh_install backintime.desktop /etc/xdg/autostart - - #install langs - [INSTALL_LANGS] - -build: - touch build - -build-arch: build - -build-indep: build - -binary-indep: install - dh_testdir -i - dh_testroot -i - #dh_installdocs -i NEWS - #dh_installchangelogs -i ChangeLog - #dh_strip -i - #dh_compress -i - dh_fixperms -i - dh_installdeb -i - #dh_shlibdeps -i - dh_gencontrol -i - dh_md5sums -i - dh_builddeb -i - -binary-arch: install - -binary: binary-indep - -.PHONY: binary binary-arch binary-indep clean - diff -Nru backintime-1.0.36/common/debian_specific/source/format backintime-1.1.12/common/debian_specific/source/format --- backintime-1.0.36/common/debian_specific/source/format 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/debian_specific/source/format 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -1.0 diff -Nru backintime-1.0.36/common/driveinfo.py backintime-1.1.12/common/driveinfo.py --- backintime-1.0.36/common/driveinfo.py 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/driveinfo.py 2016-01-11 18:07:58.000000000 +0000 @@ -1,5 +1,5 @@ # Back In Time -# Copyright (C) 2008-2009 Oprea Dan, Bart de Koning, Richard Bailey +# Copyright (C) 2008-2016 Oprea Dan, Bart de Koning, Richard Bailey, Germar Reitze # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -16,7 +16,6 @@ # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -import os.path import os import configfile import sys @@ -53,13 +52,13 @@ def support_hardlinks( self ): return self.get_bool_value( 'hardlinks', False ) - + def support_permissions( self ): return self.get_bool_value( 'permissions', False ) - + def support_usergroup( self ): return self.get_bool_value( 'usergroup', False ) - + def _get_driveinfo_file_( self ): return os.path.join( self.path, 'driveinfo' ) @@ -176,4 +175,3 @@ os.system( "rm -rf \"%s\"" % tmp_path ) return ret_val - diff -Nru backintime-1.0.36/common/dummytools.py backintime-1.1.12/common/dummytools.py --- backintime-1.0.36/common/dummytools.py 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/dummytools.py 2016-01-11 18:07:58.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2013 Germar Reitze +# Copyright (C) 2012-2016 Germar Reitze # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -29,7 +29,7 @@ - add settings in gnome/settingsdialog.glade (copy GtkFrame 'mode_dummy') - add settings in common/config.py (search for the dummy examples) - modify a copy of this file - + Please use self.mountpoint as your local mountpoint. This class inherit from mount.MountControl. All methodes from MountControl can be used exactly like they were in this class. @@ -39,22 +39,22 @@ self.config = cfg if self.config is None: self.config = config.Config() - + self.profile_id = profile_id if self.profile_id is None: self.profile_id = self.config.get_current_profile() - + self.tmp_mount = tmp_mount self.hash_id = hash_id self.parent = parent self.symlink = symlink - + #init MountControl - mount.MountControl.__init__(self) - + super(Dummy, self).__init__() + self.all_kwargs = {} - - #First we need to map the settings. + + #First we need to map the settings. #If is in kwargs (e.g. if this class is called with dummytools.Dummy( = ) #this will map self. to kwargs[]; else self. = from config #e.g. self.setattr_kwargs(, , **kwargs) @@ -65,44 +65,43 @@ self.setattr_kwargs('host', self.config.get_dummy_host(self.profile_id), **kwargs) self.setattr_kwargs('port', self.config.get_dummy_port(self.profile_id), **kwargs) self.setattr_kwargs('password', self.config.get_password(parent, self.profile_id), store = False, **kwargs) - + self.set_default_args() - + #if self.mountpoint is not the remote snapshot path you can specify #a subfolder of self.mountpoint for the symlink self.symlink_subfolder = None - + self.log_command = '%s: %s@%s' % (self.mode, self.user, self.host) - + def _mount(self): """mount the service""" #implement your mountprocess here pass - + def _umount(self): """umount the service""" #implement your unmountprocess here pass - + def pre_mount_check(self, first_run = False): """check what ever conditions must be given for the mount to be done successful raise MountException( _('Error discription') ) if service can not mount return True if everything is okay all pre|post_[u]mount_check can also be used to prepare things or clean up""" return True - + def post_mount_check(self): """check if mount was successful raise MountException( _('Error discription') ) if not""" return True - + def pre_umount_check(self): """check if service is safe to umount raise MountException( _('Error discription') ) if not""" return True - + def post_umount_check(self): """check if umount successful raise MountException( _('Error discription') ) if not""" return True - \ No newline at end of file diff -Nru backintime-1.0.36/common/encfstools.py backintime-1.1.12/common/encfstools.py --- backintime-1.0.36/common/encfstools.py 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/encfstools.py 2016-01-11 18:07:58.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2013 Germar Reitze +# Copyright (C) 2012-2016 Germar Reitze # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -19,7 +19,10 @@ import gettext import subprocess import re -import pdb +import shutil +import tempfile +from datetime import datetime +from distutils.version import StrictVersion import config import mount @@ -28,7 +31,7 @@ import tools import sshtools import logger - +from exceptions import MountException, EncodeValueError _=gettext.gettext class EncFS_mount(mount.MountControl): @@ -42,21 +45,21 @@ self.config = cfg if self.config is None: self.config = config.Config() - + self.profile_id = profile_id if self.profile_id is None: self.profile_id = self.config.get_current_profile() - + self.tmp_mount = tmp_mount self.hash_id = hash_id self.parent = parent self.symlink = symlink - + #init MountControl - mount.MountControl.__init__(self) - + super(EncFS_mount, self).__init__() + self.all_kwargs = {} - + self.setattr_kwargs('mode', self.config.get_snapshots_mode(self.profile_id), **kwargs) self.setattr_kwargs('hash_collision', self.config.get_hash_collision(), **kwargs) self.setattr_kwargs('path', self.config.get_local_encfs_path(self.profile_id), **kwargs) @@ -65,129 +68,173 @@ self.setattr_kwargs('password', None, store = False, **kwargs) self.setattr_kwargs('hash_id_1', None, **kwargs) self.setattr_kwargs('hash_id_2', None, **kwargs) - + self.set_default_args() - + self.symlink_subfolder = None self.log_command = '%s: %s' % (self.mode, self.path) - + def _mount(self): """mount the service""" if self.password is None: self.password = self.config.get_password(self.parent, self.profile_id, self.mode) + logger.debug('Provide password through temp FIFO', self) thread = password_ipc.TempPasswordThread(self.password) env = self.get_env() env['ASKPASS_TEMP'] = thread.temp_file thread.start() - + encfs = ['encfs', '--extpass=backintime-askpass'] if self.reverse: encfs += ['--reverse'] if not self.is_configured(): encfs += ['--standard'] encfs += [self.path, self.mountpoint] - + logger.debug('Call mount command: %s' + %' '.join(encfs), + self) + proc = subprocess.Popen(encfs, env = env, stdout = subprocess.PIPE, - stderr = subprocess.STDOUT) + stderr = subprocess.STDOUT, + universal_newlines = True) output = proc.communicate()[0] + self.backup_config() if proc.returncode: - raise mount.MountException( _('Can\'t mount \'%(command)s\':\n\n%(error)s') \ - % {'command': ' '.join(encfs), 'error': output} ) - + raise MountException( _('Can\'t mount \'%(command)s\':\n\n%(error)s') \ + % {'command': ' '.join(encfs), 'error': output} ) + thread.stop() - + def _umount(self): """umount the service""" try: subprocess.check_call(['fusermount', '-u', self.mountpoint]) except subprocess.CalledProcessError: - raise mount.MountException( _('Can\'t unmount encfs %s') % self.mountpoint) - + raise MountException( _('Can\'t unmount encfs %s') % self.mountpoint) + def pre_mount_check(self, first_run = False): """check what ever conditions must be given for the mount""" self.check_fuse() if first_run: self.check_version() return True - + def post_mount_check(self): """check if mount was successful raise MountException( _('Error discription') ) if not""" return True - + def pre_umount_check(self): """check if service is safe to umount raise MountException( _('Error discription') ) if not""" return True - + def post_umount_check(self): """check if umount successful raise MountException( _('Error discription') ) if not""" return True - + def get_env(self): """return environment with encfs configfile""" env = os.environ.copy() - env['ENCFS6_CONFIG'] = self.get_config_file() + cfg = self.get_config_file() + if os.path.isfile(cfg): + env['ENCFS6_CONFIG'] = cfg return env - + def get_config_file(self): """return encfs config file""" - file = '.encfs6.xml' + f = '.encfs6.xml' if self.config_path is None: - return os.path.join(self.path, file) + cfg = os.path.join(self.path, f) else: - return os.path.join(self.config_path, file) - + cfg = os.path.join(self.config_path, f) + return cfg + def is_configured(self): """check if encfs config file exist. If not and if we are in settingsdialog ask for password confirmation. _mount will then create a new config""" - if os.path.isfile(self.get_config_file()): + cfg = self.get_config_file() + if os.path.isfile(cfg): + logger.debug('Found encfs config in %s' + %cfg, self) return True else: + logger.debug('No encfs config in %s' + %cfg, self) msg = _('Config for encrypted folder not found.') if not self.tmp_mount: - raise mount.MountException( msg ) + raise MountException( msg ) else: if not self.config.ask_question( msg + _('\nCreate a new encrypted folder?')): - raise mount.MountException( _('Cancel') ) + raise MountException( _('Cancel') ) else: pw = password.Password(self.config) password_confirm = pw._get_password_from_user(self.parent, prompt = _('Please confirm password')) if self.password == password_confirm: return False else: - raise mount.MountException( _('Password doesn\'t match') ) + raise MountException( _('Password doesn\'t match') ) def check_fuse(self): """check if encfs is installed and user is part of group fuse""" + logger.debug('Check fuse', self) if not tools.check_command('encfs'): - raise mount.MountException( _('encfs not found. Please install e.g. \'apt-get install encfs\'') ) + logger.debug('sshfs is missing', self) + raise MountException( _('encfs not found. Please install e.g. \'apt-get install encfs\'') ) if self.CHECK_FUSE_GROUP: user = self.config.get_user() try: fuse_grp_members = grp.getgrnam('fuse')[3] except KeyError: #group fuse doesn't exist. So most likely it isn't used by this distribution + logger.debug("Group fuse doesn't exist. Skip test", self) return if not user in fuse_grp_members: - raise mount.MountException( _('%(user)s is not member of group \'fuse\'.\n Run \'sudo adduser %(user)s fuse\'. To apply changes logout and login again.\nLook at \'man backintime\' for further instructions.') % {'user': user}) - + logger.debug('User %s is not in group fuse' %user, self) + raise MountException( _('%(user)s is not member of group \'fuse\'.\n Run \'sudo adduser %(user)s fuse\'. To apply changes logout and login again.\nLook at \'man backintime\' for further instructions.') % {'user': user}) + def check_version(self): """check encfs version. 1.7.2 had a bug with --reverse that will create corrupt files""" + logger.debug('Check version', self) if self.reverse: proc = subprocess.Popen(['encfs', '--version'], stdout = subprocess.PIPE, - stderr = subprocess.STDOUT) + stderr = subprocess.STDOUT, + universal_newlines = True) output = proc.communicate()[0] m = re.search(r'(\d\.\d\.\d)', output) - if m == None: + if m and StrictVersion(m.group(1)) <= StrictVersion('1.7.2'): + logger.debug('Wrong encfs version %s' %m.group(1), self) + raise MountException( _('encfs version 1.7.2 and before has a bug with option --reverse. Please update encfs')) + + def backup_config(self): + """create a backup of encfs config file into local config folder + so in cases of the config file get deleted or corrupt user can restore + it from there""" + cfg = self.get_config_file() + if not os.path.isfile(cfg): + logger.warning('No encfs config in %s. Skip backup of config file.' %cfg, self) + return + backup_folder = self.config.get_encfsconfig_backup_folder(self.profile_id) + tools.make_dirs(backup_folder) + old_backups = tools.get_nonsnapshots_list_in_folder(backup_folder, True) + if len(old_backups): + last_backup = os.path.join(backup_folder, old_backups[-1]) + + #don't create a new backup if config hasn't changed + if tools._get_md5sum_from_path(cfg) == \ + tools._get_md5sum_from_path(last_backup): + logger.debug('Encfs config did not change. Skip backup', self) return - version = int(m.group(1).replace('.', '')) - if version <= 172: - raise mount.MountException( _('encfs version 1.7.2 and before has a bug with option --reverse. Please update encfs')) + + new_backup_file = '.'.join((os.path.basename(cfg), datetime.now().strftime('%Y%m%d%H%M') )) + new_backup = os.path.join(backup_folder, new_backup_file) + logger.debug('Create backup of encfs config %s to %s' + %(cfg, new_backup), self) + shutil.copy2(cfg, new_backup) class EncFS_SSH(EncFS_mount): """Mount encrypted remote path with sshfs and encfs. @@ -203,85 +250,115 @@ self.mode = mode if self.mode is None: self.mode = self.config.get_snapshots_mode(self.profile_id) - + self.parent = parent self.args = args self.kwargs = kwargs - + self.ssh = sshtools.SSH(*self.args, symlink = False, **self.split_kwargs('ssh')) self.rev_root = EncFS_mount(*self.args, symlink = False, **self.split_kwargs('encfs_reverse')) - EncFS_mount.__init__(self, *self.args, **self.split_kwargs('encfs')) - + super(EncFS_SSH, self).__init__(*self.args, **self.split_kwargs('encfs')) + def mount(self, *args, **kwargs): """call mount for sshfs, encfs --reverse and encfs register 'encfsctl encode' in config.ENCODE""" + logger.debug('Mount sshfs', self) self.ssh.mount(*args, **kwargs) + #mount fsroot with encfs --reverse first. + #If the config does not exist already this will make sure + #the new created config works with --reverse + if not os.path.isfile(self.get_config_file()): + #encfs >= 1.8.0 changed behavior when ENCFS6_CONFIG environ variable + #file does not exist. It will not create a new one anymore but just fail. + #As encfs would create the config in /.encfs6.xml (which will most likly fail) + #we need to mount a temp folder with reverse first and copy the config when done. + logger.debug('Mount temp folder with encfs --reverse to create a new encfs config', self) + with tempfile.TemporaryDirectory() as src: + tmp_kwargs = self.split_kwargs('encfs_reverse') + tmp_kwargs['path'] = src + tmp_kwargs['config_path'] = src + tmp_mount = EncFS_mount(*self.args, symlink = False, **tmp_kwargs) + tmp_mount.mount(*args, **kwargs) + tmp_mount.umount() + cfg = tmp_mount.get_config_file() + if os.path.isfile(cfg): + logger.debug('Copy new encfs config %s to its original place %s' %(cfg, self.ssh.mountpoint), self) + shutil.copy2(cfg, self.ssh.mountpoint) + else: + logger.error('New encfs config %s not found' %cfg, self) + logger.debug('Mount local filesystem root with encfs --reverse', self) self.rev_root.mount(*args, **kwargs) - ret = EncFS_mount.mount(self, *args, **kwargs) + + logger.debug('Mount encfs', self) + kwargs['check'] = False + ret = super(EncFS_SSH, self).mount(*args, **kwargs) self.config.ENCODE = Encode(self) return ret - + def umount(self, *args, **kwargs): """close 'encfsctl encode' process and set config.ENCODE back to the dummy class. call umount for encfs, encfs --reverse and sshfs""" self.config.ENCODE.close() self.config.ENCODE = Bounce() - EncFS_mount.umount(self, *args, **kwargs) + logger.debug('Unmount encfs', self) + super(EncFS_SSH, self).umount(*args, **kwargs) + logger.debug('Unmount local filesystem root mount encfs --reverse', self) self.rev_root.umount(*args, **kwargs) + logger.debug('Unmount sshfs', self) self.ssh.umount(*args, **kwargs) - + def pre_mount_check(self, *args, **kwargs): """call pre_mount_check for sshfs, encfs --reverse and encfs""" if self.ssh.pre_mount_check(*args, **kwargs) and \ self.rev_root.pre_mount_check(*args, **kwargs) and \ - EncFS_mount.pre_mount_check(self, *args, **kwargs): + super(EncFS_SSH, self).pre_mount_check(*args, **kwargs): return True - + def split_kwargs(self, mode): """split all given arguments for the desired mount class""" - dict = self.kwargs.copy() - dict['cfg'] = self.config - dict['profile_id'] = self.profile_id - dict['mode'] = self.mode - dict['parent'] = self.parent + d = self.kwargs.copy() + d['cfg'] = self.config + d['profile_id'] = self.profile_id + d['mode'] = self.mode + d['parent'] = self.parent if mode == 'ssh': - if 'path' in dict: - dict.pop('path') - if 'ssh_path' in dict: - dict['path'] = dict.pop('ssh_path') - if 'ssh_password' in dict: - dict['password'] = dict.pop('ssh_password') + if 'path' in d: + d.pop('path') + if 'ssh_path' in d: + d['path'] = d.pop('ssh_path') + if 'ssh_password' in d: + d['password'] = d.pop('ssh_password') else: - dict['password'] = self.config.get_password(parent = self.parent, profile_id = self.profile_id, mode = self.mode) - if 'hash_id' in dict: - dict.pop('hash_id') - if 'hash_id_2' in dict: - dict['hash_id'] = dict['hash_id_2'] - return dict - + d['password'] = self.config.get_password(parent = self.parent, profile_id = self.profile_id, mode = self.mode) + if 'hash_id' in d: + d.pop('hash_id') + if 'hash_id_2' in d: + d['hash_id'] = d['hash_id_2'] + return d + elif mode == 'encfs': - dict['path'] = self.ssh.mountpoint - dict['hash_id_1'] = self.rev_root.hash_id - dict['hash_id_2'] = self.ssh.hash_id - if 'encfs_password' in dict: - dict['password'] = dict.pop('encfs_password') + d['path'] = self.ssh.mountpoint + d['hash_id_1'] = self.rev_root.hash_id + d['hash_id_2'] = self.ssh.hash_id + if 'encfs_password' in d: + d['password'] = d.pop('encfs_password') else: - dict['password'] = self.config.get_password(parent = self.parent, profile_id = self.profile_id, mode = self.mode, pw_id = 2) - return dict - + d['password'] = self.config.get_password(parent = self.parent, profile_id = self.profile_id, mode = self.mode, pw_id = 2) + return d + elif mode == 'encfs_reverse': - dict['reverse'] = True - dict['path'] = '/' - dict['config_path'] = self.ssh.mountpoint - if 'encfs_password' in dict: - dict['password'] = dict.pop('encfs_password') + d['reverse'] = True + d['path'] = '/' + d['config_path'] = self.ssh.mountpoint + if 'encfs_password' in d: + d['password'] = d.pop('encfs_password') else: - dict['password'] = self.config.get_password(parent = self.parent, profile_id = self.profile_id, mode = self.mode, pw_id = 2) - if 'hash_id' in dict: - dict.pop('hash_id') - if 'hash_id_1' in dict: - dict['hash_id'] = dict['hash_id_1'] - return dict + d['password'] = self.config.get_password(parent = self.parent, profile_id = self.profile_id, mode = self.mode, pw_id = 2) + if 'hash_id' in d: + d.pop('hash_id') + if 'hash_id_1' in d: + d['hash_id'] = d['hash_id_1'] + return d class Encode(object): """encode path with encfsctl. @@ -295,10 +372,9 @@ self.remote_path = self.encfs.ssh.path if not self.remote_path[-1] == os.sep: self.remote_path += os.sep - + #precompile some regular expressions self.re_asterisk = re.compile(r'\*') - self.re_wildcard = re.compile(r'(\[|\]|\?)') self.re_separate_asterisk = re.compile(r'(.*?)(\*+)(.*)') def __del__(self): @@ -310,62 +386,67 @@ env = self.encfs.get_env() env['ASKPASS_TEMP'] = thread.temp_file thread.start() - - logger.info('start \'encfsctl encode\' process') + + logger.debug('start \'encfsctl encode\' process', self) encfsctl = ['encfsctl', 'encode', '--extpass=backintime-askpass', '/'] - self.p = subprocess.Popen(encfsctl, env = env, + logger.debug('Call command: %s' + %' '.join(encfsctl), + self) + self.p = subprocess.Popen(encfsctl, env = env, bufsize = 0, stdin=subprocess.PIPE, - stdout=subprocess.PIPE - ) + stdout=subprocess.PIPE, + universal_newlines = True) thread.stop() - + def path(self, path): """write plain path to encfsctl stdin and read encrypted path from stdout""" if not 'p' in vars(self): self.start_process() if not self.p.returncode is None: - logger.warning('\'encfsctl encode\' process terminated. Restarting.') + logger.warning('\'encfsctl encode\' process terminated. Restarting.', self) del self.p self.start_process() self.p.stdin.write(path + '\n') - ret = self.p.stdout.readline() - return ret.strip('\n') - + ret = self.p.stdout.readline().strip('\n') + if not len(ret) and len(path): + logger.debug('Failed to encode %s. Got empty string' + %path, self) + raise EncodeValueError() + return ret + def exclude(self, path): """encrypt paths for snapshots.take_snapshot exclude list. After encoding the path a wildcard would not match anymore so all paths with wildcards are ignored. Only single and double asterisk that will match a full file or folder name will work. """ - #return None if path has wildcards [ ] ? - m = self.re_wildcard.search(path) - if not m is None: + if tools.patternHasNotEncryptableWildcard(path): return None - + enc = '' m = self.re_asterisk.search(path) if not m is None: - _path = path + path_ = path[:] while True: #search for foo/*, foo/*/bar, */bar or **/bar #but not foo* or foo/*bar - m = self.re_separate_asterisk.search(_path) + m = self.re_separate_asterisk.search(path_) if m is None: return None - if len(m.group(1)) > 0: + if m.group(1): if not m.group(1).endswith(os.sep): return None enc = os.path.join(enc, self.path(m.group(1)) ) enc = os.path.join(enc, m.group(2) ) - if len(m.group(3)) > 0: + if m.group(3): if not m.group(3).startswith(os.sep): return None - _m = self.re_asterisk.search(m.group(3)) - if _m is None: + m1 = self.re_asterisk.search(m.group(3)) + if m1 is None: enc = os.path.join(enc, self.path(m.group(3)) ) break else: - _path = m.group(3) + path_ = m.group(3) continue else: break @@ -374,20 +455,20 @@ if os.path.isabs(path): return os.path.join(os.sep, enc) return enc - + def include(self, path): """encrypt paths for snapshots.take_snapshot include list.""" return os.path.join(os.sep, self.path(path)) - + def remote(self, path): """encode the path on remote host starting from backintime/host/user/...""" enc_path = self.path( path[len(self.remote_path):] ) return os.path.join(self.remote_path, enc_path) - + def close(self): """stop encfsctl process""" if 'p' in vars(self) and self.p.returncode is None: - logger.info('stop \'encfsctl encode\' process') + logger.debug('stop \'encfsctl encode\' process', self) self.p.communicate() class Bounce(object): @@ -395,25 +476,25 @@ This is the standard for config.ENCODE""" def __init__(self): self.chroot = os.sep - + def path(self, path): return path - + def exclude(self, path): return path - + def include(self, path): return path - + def remote(self, path): return path - + def close(self): pass class Decode(object): """decode path with encfsctl.""" - def __init__(self, cfg): + def __init__(self, cfg, string = True): self.mode = cfg.get_snapshots_mode() if self.mode == 'local_encfs': self.password = cfg.get_password(pw_id = 1) @@ -421,64 +502,83 @@ self.password = cfg.get_password(pw_id = 2) self.encfs = cfg.SNAPSHOT_MODES[self.mode][0](cfg) self.remote_path = cfg.get_snapshots_path_ssh() - if len(self.remote_path) <= 0: + if not self.remote_path: self.remote_path = './' if not self.remote_path[-1] == os.sep: self.remote_path += os.sep - + + #german translation changed from Snapshot to Schnappschuss. + #catch both variants otherwise old logs wouldn't get decoded. + _take_snapshot = _('Take snapshot').replace('Schnappschuss', '(?:Schnappschuss|Snapshot)') + #precompile some regular expressions host, port, user, path, cipher = cfg.get_ssh_host_port_user_path_cipher() #replace: --exclude"" or --include"" self.re_include_exclude = re.compile(r'(--(?:ex|in)clude=")(.*?)(")') - + #replace: 'USER@HOST:"PATH"' self.re_remote_path = re.compile(r'(\'%s@%s:"%s)(.*?)("\')' %(user, host, path) ) - + #replace: --link-dest="../../" self.re_link_dest = re.compile(r'(--link-dest="\.\./\.\./)(.*?)(")') - + #search for: [C] self.re_change = re.compile(r'(^\[C\] .{11} )(.*)') - + #search for: [I] Take snapshot (rsync: BACKINTIME: ) # [I] Take snapshot (rsync: deleting ) - # [I] Take snapshot (rsync: rsync: readlink_stat("/tmp...mountpoint/") - # [I] Take snapshot (rsync: rsync: send_files failed to open "/tmp...mountpoint/": Permission denied (13)) + # [I] Take snapshot (rsync: rsync: readlink_stat("...mountpoint/") + # [I] Take snapshot (rsync: rsync: send_files failed to open "...mountpoint/": Permission denied (13)) + # [I] Take snapshot (rsync: file has vanished: "...mountpoint/") # [I] Take snapshot (rsync: ) pattern = [] pattern.append(r' BACKINTIME: .{11} ') pattern.append(r' deleting ') - pattern.append(r' rsync: readlink_stat\("/tmp.*?mountpoint/') - pattern.append(r' rsync: send_files failed to open "/tmp.*?mountpoint/') + pattern.append(r' rsync: readlink_stat\(".*?mountpoint/') + pattern.append(r' rsync: send_files failed to open ".*?mountpoint/') + pattern.append(r' file has vanished: ".*?mountpoint/') pattern.append(r' ') - self.re_info = re.compile(r'(^\[I\] %s \(rsync:(?:%s))(.*?)(\).*|".*)' % (_('Take snapshot'), '|'.join(pattern)) ) - - #search for: [E] Error: rsync readlink_stat("/tmp...mountpoint/") - # [E] Error: rsync: send_files failed to open "/tmp...mountpoint/": Permission denied (13) + self.re_info = re.compile(r'(^\[I\] %s \(rsync:(?:%s))(.*?)(\).*|".*)' % (_take_snapshot, '|'.join(pattern)) ) + + #search for: [E] Error: rsync readlink_stat("...mountpoint/") + # [E] Error: rsync: send_files failed to open "...mountpoint/": Permission denied (13) + # [E] Error: rsync: recv_generator: failed to stat "...mountpoint/": File name too long (36) pattern = [] - pattern.append(r' rsync: readlink_stat\("/tmp.*?mountpoint/') - pattern.append(r' rsync: send_files failed to open "/tmp.*?mountpoint/') + pattern.append(r' rsync: readlink_stat\(".*?mountpoint/') + pattern.append(r' rsync: send_files failed to open ".*?mountpoint/') + pattern.append(r' rsync: recv_generator: failed to stat ".*?mountpoint/') + pattern.append(r' rsync: .*?".*?mountpoint/') self.re_error = re.compile(r'(^\[E\] Error:(?:%s))(.*?)(".*)' % '|'.join(pattern)) - + #search for: [I] ssh USER@HOST cp -aRl "PATH"* "PATH" self.re_info_cp= re.compile(r'(^\[I\] .*? cp -aRl "%s/)(.*?)("\* "%s/)(.*?)(")' % (path, path) ) - + #search for all chars except * self.re_all_except_asterisk = re.compile(r'[^\*]+') - + #search for: -> self.re_all_except_arrow = re.compile(r'(.*?)((?: [-=]> )+)(.*)') - + #skip: [I] Take snapshot (rsync: sending incremental file list) + # [I] Take snapshot (rsync: building file list ... done) # [I] Take snapshot (rsync: sent 26569703 bytes received 239616 bytes 85244.26 bytes/sec) # [I] Take snapshot (rsync: total size is 9130263449 speedup is 340.56) # [I] Take snapshot (rsync: rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1070) [sender=3.0.9]) + # [I] Take snapshot (rsync: rsync warning: some files vanished before they could be transferred (code 24) at main.c(1070) [sender=3.0.9]) pattern = [] pattern.append(r'sending incremental file list') + pattern.append(r'building file list ... done') pattern.append(r'sent .*? received') pattern.append(r'total size is .*? speedup is') pattern.append(r'rsync error: some files/attrs were not transferred') - self.re_skip = re.compile(r'^\[I\] %s \(rsync: (%s)' % (_('Take snapshot'), '|'.join(pattern)) ) + pattern.append(r'rsync warning: some files vanished before they could be transferred') + self.re_skip = re.compile(r'^\[I\] %s \(rsync: (%s)' % (_take_snapshot, '|'.join(pattern)) ) + + self.string = string + if string: + self.newline = '\n' + else: + self.newline = b'\n' def __del__(self): self.close() @@ -489,42 +589,50 @@ env = os.environ.copy() env['ASKPASS_TEMP'] = thread.temp_file thread.start() - - logger.info('start \'encfsctl decode\' process') + + logger.debug('start \'encfsctl decode\' process', self) encfsctl = ['encfsctl', 'decode', '--extpass=backintime-askpass', self.encfs.path] + logger.debug('Call command: %s' + %' '.join(encfsctl), + self) self.p = subprocess.Popen(encfsctl, env = env, - stdin=subprocess.PIPE, - stdout=subprocess.PIPE - ) + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + universal_newlines = self.string, #return string (if True) or bytes + bufsize = 0) thread.stop() - + def path(self, path): """write crypted path to encfsctl stdin and read plain path from stdout if stdout is empty (most likly because there was an error) return crypt path""" + if self.string: + assert isinstance(path, str), 'path is not str type: %s' % path + else: + assert isinstance(path, bytes), 'path is not bytes type: %s' % path if not 'p' in vars(self): self.start_process() if not self.p.returncode is None: - logger.warning('\'encfsctl decode\' process terminated. Restarting.') + logger.warning('\'encfsctl decode\' process terminated. Restarting.', self) del self.p self.start_process() - self.p.stdin.write(path + '\n') + self.p.stdin.write(path + self.newline) ret = self.p.stdout.readline() - ret = ret.strip('\n') - if len(ret) <= 0: - return path - return ret - - def list(self, _list): + ret = ret.strip(self.newline) + if ret: + return ret + return path + + def list(self, list_): """decode a list of paths""" output = [] - for path in _list: + for path in list_: output.append(self.path(path)) return output - + def log(self, line): """decode paths in takesnapshot.log""" #rsync cmd - if line.startswith('[I] rsync'): + if line.startswith('[I] rsync') or line.startswith('[I] nocache rsync'): line = self.re_include_exclude.sub(self.replace, line) line = self.re_remote_path.sub(self.replace, line) line = self.re_link_dest.sub(self.replace, line) @@ -571,11 +679,14 @@ def remote(self, path): """decode the path on remote host starting from backintime/host/user/...""" - dec_path = self.path( path[len(self.remote_path):] ) - return os.path.join(self.remote_path, dec_path) + assert isinstance(path, bytes), 'path is not bytes type: %s' % path + + remote_path = self.remote_path.encode() + dec_path = self.path( path[len(remote_path):] ) + return os.path.join(remote_path, dec_path) def close(self): """stop encfsctl process""" if 'p' in vars(self) and self.p.returncode is None: - logger.info('stop \'encfsctl decode\' process') + logger.debug('stop \'encfsctl decode\' process', self) self.p.communicate() diff -Nru backintime-1.0.36/common/exceptions.py backintime-1.1.12/common/exceptions.py --- backintime-1.0.36/common/exceptions.py 1970-01-01 00:00:00.000000000 +0000 +++ backintime-1.1.12/common/exceptions.py 2016-01-11 18:07:58.000000000 +0000 @@ -0,0 +1,47 @@ +# Copyright (C) 2015 Germar Reitze +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +class BackInTimeException(Exception): + pass + +class MountException(BackInTimeException): + pass + +class HashCollision(BackInTimeException): + pass + +class EncodeValueError(BackInTimeException): + pass + +class StopException(BackInTimeException): + pass + +class Timeout(BackInTimeException): + pass + +class InvalidChar(BackInTimeException): + def __init__(self, msg): + self.msg = msg + + def __str__(self): + return self.msg + +class PermissionDeniedByPolicy(BackInTimeException): + def __init__(self, msg): + self.msg = msg + + def __str__(self): + return self.msg diff -Nru backintime-1.0.36/common/guiapplicationinstance.py backintime-1.1.12/common/guiapplicationinstance.py --- backintime-1.0.36/common/guiapplicationinstance.py 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/guiapplicationinstance.py 2016-01-11 18:07:58.000000000 +0000 @@ -1,5 +1,5 @@ # Back In Time -# Copyright (C) 2008-2009 Oprea Dan, Bart de Koning, Richard Bailey +# Copyright (C) 2008-2016 Oprea Dan, Bart de Koning, Richard Bailey, Germar Reitze # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -17,92 +17,57 @@ import os -import os.path -import time +import logger +from applicationinstance import ApplicationInstance -#class used to handle one application instance mechanism -class GUIApplicationInstance: - - #specify the base for control files +class GUIApplicationInstance(ApplicationInstance): + '''class used to handle one application instance mechanism + ''' def __init__( self, base_control_file, raise_cmd = '' ): - self.pid_file = base_control_file + '.pid' + '''specify the base for control files + ''' self.raise_file = base_control_file + '.raise' self.raise_cmd = raise_cmd + super(GUIApplicationInstance, self).__init__(base_control_file + '.pid', False, False) + #remove raise_file is already exists - try: + if os.path.exists(self.raise_file): os.remove( self.raise_file ) - except: - pass - self.check( raise_cmd ) + self.check(raise_cmd) self.start_application() - #check if the current application is already running - def check( self, raise_cmd ): - #check if the pidfile exists - if not os.path.isfile( self.pid_file ): - return - - #read the pid from the file - pid = 0 - try: - file = open( self.pid_file, 'rt' ) - data = file.read() - file.close() - pid = int( data ) - except: - pass - - #check if the process with specified by pid exists - if 0 == pid: - return - - try: - os.kill( pid, 0 ) #this will raise an exception if the pid is not valid - except: - return + def check(self, raise_cmd): + '''check if the current application is already running + ''' + ret = super(GUIApplicationInstance, self).check(False) + if not ret: + print("The application is already running! (pid: %s)" % self.pid) + #notify raise + try: + with open( self.raise_file, 'wt' ) as f: + f.write(raise_cmd) + except OSError as e: + logger.error('Failed to write raise file %s: [%s] %s' %(e.filename, e.errno, e.strerror)) + + exit(0) #exit raise an exception so don't put it in a try/except block + else: + return ret - #exit the application - print("The application is already running ! (pid: %s)" % pid) - - #notify raise - try: - file = open( self.raise_file, 'wt' ) - file.write( raise_cmd ) - file.close() - except: - pass - - exit(0) #exit raise an exception so don't put it in a try/except block - - #called when the single instance starts to save it's pid - def start_application( self ): - file = open( self.pid_file, 'wt' ) - file.write( str( os.getpid() ) ) - file.close() - - #called when the single instance exit ( remove pid file ) - def exit_application( self ): - try: - os.remove( self.pid_file ) - except: - pass - - #check if the application must to be raised - #return None if no raise needed, or a string command to raise def raise_command( self ): + '''check if the application must to be raised + return None if no raise needed, or a string command to raise + ''' ret_val = None try: if os.path.isfile( self.raise_file ): - file = open( self.raise_file, 'rt' ) - ret_val = file.read() - file.close() + with open( self.raise_file, 'rt' ) as f: + ret_val = f.read() os.remove( self.raise_file ) except: pass return ret_val - diff -Nru backintime-1.0.36/common/logger.py backintime-1.1.12/common/logger.py --- backintime-1.0.36/common/logger.py 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/logger.py 2016-01-11 18:07:58.000000000 +0000 @@ -1,5 +1,5 @@ # Back In Time -# Copyright (C) 2008-2009 Oprea Dan, Bart de Koning, Richard Bailey +# Copyright (C) 2008-2016 Oprea Dan, Bart de Koning, Richard Bailey, Germar Reitze # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,32 +15,65 @@ # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -#print into file like it is done in Python3 -from __future__ import print_function import syslog import os import sys +import atexit import tools +import bcolors + +DEBUG = False +APP_NAME = 'backintime' def openlog(): name = os.getenv( 'LOGNAME', 'unknown' ) - syslog.openlog( "backintime (%s)" % name ) + syslog.openlog("%s (%s/1)" %(APP_NAME, name)) + atexit.register(closelog) + +def changeProfile(profile_id): + name = os.getenv( 'LOGNAME', 'unknown' ) + syslog.openlog("%s (%s/%s)" %(APP_NAME, name, profile_id)) def closelog(): syslog.closelog() -def error( msg ): - print('ERROR: ' + msg, file=sys.stderr) +def error(msg , parent = None, traceDepth = 0): + if DEBUG: + msg = '%s %s' %(_debugHeader(parent, traceDepth), msg) + print('%sERROR%s: %s' %(bcolors.FAIL, bcolors.ENDC, msg), file=sys.stderr) for line in tools.wrap_line(msg): syslog.syslog( syslog.LOG_ERR, 'ERROR: ' + line ) -def warning( msg ): - print('WARNING: ' + msg, file=sys.stderr) +def warning(msg , parent = None, traceDepth = 0): + if DEBUG: + msg = '%s %s' %(_debugHeader(parent, traceDepth), msg) + print('%sWARNING%s: %s' %(bcolors.WARNING, bcolors.ENDC, msg), file=sys.stderr) for line in tools.wrap_line(msg): syslog.syslog( syslog.LOG_WARNING, 'WARNING: ' + line ) -def info( msg ): - print('INFO: ' + msg, file=sys.stdout) +def info(msg , parent = None, traceDepth = 0): + if DEBUG: + msg = '%s %s' %(_debugHeader(parent, traceDepth), msg) + print('%sINFO%s: %s' %(bcolors.OKGREEN, bcolors.ENDC, msg), file=sys.stdout) for line in tools.wrap_line(msg): syslog.syslog( syslog.LOG_INFO, 'INFO: ' + line ) + +def debug(msg, parent = None, traceDepth = 0): + if DEBUG: + msg = '%s %s' %(_debugHeader(parent, traceDepth), msg) + print('%sDEBUG%s: %s' %(bcolors.OKBLUE, bcolors.ENDC, msg), file = sys.stdout) + for line in tools.wrap_line(msg): + syslog.syslog(syslog.LOG_DEBUG, 'DEBUG: %s' %line) + +def _debugHeader(parent, traceDepth): + frame = sys._getframe(2 + traceDepth) + fdir, fname = os.path.split(frame.f_code.co_filename) + fmodule = os.path.basename(fdir) + line = frame.f_lineno + if parent: + fclass = '%s.' %parent.__class__.__name__ + else: + fclass = '' + func = frame.f_code.co_name + return '[%s/%s:%s %s%s]' %(fmodule, fname, line, fclass, func) diff -Nru backintime-1.0.36/common/makedeb-src.sh backintime-1.1.12/common/makedeb-src.sh --- backintime-1.0.36/common/makedeb-src.sh 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/makedeb-src.sh 1970-01-01 00:00:00.000000000 +0000 @@ -1,67 +0,0 @@ -#!/bin/bash - -if [ -z $1 ]; then - echo "ERROR: You need to specify the install dir" - exit 1 -fi - -VERSION=`cat ../VERSION` - -DEST=$1 - -mkdir -p $DEST/debian/source -mkdir -p $DEST/man/C -mkdir -p $DEST/mo -mkdir -p $DEST/doc -mkdir -p $DEST/plugins - -#app -cp backintime $DEST/ -cp backintime-askpass $DEST/ - -#autostart -cp backintime.desktop $DEST/ - -#python files -cp *.py $DEST/ - -#plugins -cp plugins/*.py $DEST/plugins - -#man pages -gzip --best -c man/C/backintime.1 >$DEST/man/C/backintime.1.gz - -#doc files -cp ../AUTHORS $DEST/doc -cp ../LICENSE $DEST/doc -cp ../README $DEST/doc -cp ../TRANSLATIONS $DEST/doc -cp ../VERSION $DEST/doc -cp ../CHANGES $DEST/doc - -#debian: copyright -cp debian_specific/copyright $DEST/debian - -#debian: postrm -cp debian_specific/postrm $DEST/debian - -#debian: rules -cp debian_specific/rules $DEST/debian - -#debian: compatibility level -cp debian_specific/compat $DEST/debian - -#debian: dpkg-source format -cp debian_specific/source/format $DEST/debian/source - -#add languages to rules -for langfile in `ls po/*.po`; do - lang=`echo $langfile | cut -d/ -f2 | cut -d. -f1` - mkdir -p $DEST/mo/$lang - msgfmt -o $DEST/mo/$lang/backintime.mo po/$lang.po - #sed -i -e "s/\t\[INSTALL_LANGS\]/\tdh_installdirs \/usr\/share\/locale\/$lang\/LC_MESSAGES\n\tdh_install mo\/$lang.mo \/usr\/share\/locale\/$lang\/LC_MESSAGES\/backintime.mo\n\t[INSTALL_LANGS]/g" $DEST/debian/rules - sed -i -e "s/\t\[INSTALL_LANGS\]/\tdh_install mo\/$lang\/backintime.mo \/usr\/share\/locale\/$lang\/LC_MESSAGES\n\t[INSTALL_LANGS]/g" $DEST/debian/rules -done - -sed -i -e "s/\t\[INSTALL_LANGS\]/\t/" $DEST/debian/rules - diff -Nru backintime-1.0.36/common/Makefile.template backintime-1.1.12/common/Makefile.template --- backintime-1.0.36/common/Makefile.template 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/Makefile.template 1970-01-01 00:00:00.000000000 +0000 @@ -1,53 +0,0 @@ -PREFIX=/usr -DEST=$(DESTDIR)$(PREFIX) - -all: build - -build: translate - -clean: - rm po/*.mo - -install: build install_translations - #install python - install -d $(DEST)/share/backintime/common - install --mode=644 *.py $(DEST)/share/backintime/common - - #install plugin(s) - install -d $(DEST)/share/backintime/plugins - install --mode=644 plugins/*.py $(DEST)/share/backintime/plugins - - #install copyright file - install -d $(DEST)/share/doc/backintime-common - install --mode=644 debian_specific/copyright $(DEST)/share/doc/backintime-common - - #install doc file(s) - install -d $(DEST)/share/doc/backintime - install --mode=644 ../AUTHORS $(DEST)/share/doc/backintime - install --mode=644 ../LICENSE $(DEST)/share/doc/backintime - install --mode=644 ../README $(DEST)/share/doc/backintime - install --mode=644 ../TRANSLATIONS $(DEST)/share/doc/backintime - install --mode=644 ../VERSION $(DEST)/share/doc/backintime - install --mode=644 ../CHANGES $(DEST)/share/doc/backintime - - #install config-example files(s) - gzip --best -c config-example-local > config-example-local.gz - gzip --best -c config-example-ssh > config-example-ssh.gz - install -d $(DEST)/share/doc/backintime/examples - install --mode=644 config-example-local.gz $(DEST)/share/doc/backintime/examples - install --mode=644 config-example-ssh.gz $(DEST)/share/doc/backintime/examples - - #install man file(s) - for i in $$(ls -1 man/C/); do case $$i in *.gz|*~) continue;; *) gzip --best -c man/C/$$i > man/C/$${i}.gz;; esac; done - install -d $(DEST)/share/man/man1 - install --mode=644 man/C/*.gz $(DEST)/share/man/man1 - - #install application - install -d $(DEST)/bin - install backintime $(DEST)/bin - install backintime-askpass $(DEST)/bin - - #install autostart - install -d $(DEST)/../etc/xdg/autostart - install --mode=644 backintime.desktop $(DEST)/../etc/xdg/autostart - diff -Nru backintime-1.0.36/common/man/C/backintime.1 backintime-1.1.12/common/man/C/backintime.1 --- backintime-1.0.36/common/man/C/backintime.1 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/man/C/backintime.1 2016-01-11 18:07:58.000000000 +0000 @@ -1,125 +1,202 @@ -.TH backintime 1 "Oct 2013" "version 1.0.36" "USER COMMANDS" +.TH backintime 1 "July 2015" "version 1.1.12" "USER COMMANDS" .SH NAME backintime \- a simple backup tool for Linux. .PP -This is command line tool. -The graphical tools are: backintime-gnome and backintime-kde4. +This is the command line tool. +The graphical tool is backintime-qt4. .SH SYNOPSIS .B backintime -[ \-\-profile | -\-\-profile\-id ] -[ \-\-keep\-mount ] -[ \-\-quiet ] -[ \-\-config PATH ] -[ \-\-checksum ] -[ \-\-backup | \-\-backup\-job | -\-\-snapshots\-path | -\-\-snapshots\-list | \-\-snapshots\-list\-path | -\-\-last\-snapshot | \-\-last\-snapshot\-path | -\-\-unmount | -\-\-benchmark-cipher [SIZE] | -\-\-pw\-cache [start|stop|restart|reload|status] | -\-\-decode [PATH] | -\-\-restore [WHAT [WHERE [SNAPSHOT_ID]]] | -\-\-help | \-\-version | \-\-license ] +[\-\-checksum] +[\-\-config PATH] +[\-\-debug] +[\-\-delete] +[\-\-help | \-h] +[\-\-keep\-mount] +[\-\-license] +[\-\-local\-backup] +[\-\-no\-crontab] +[\-\-no\-local\-backup] +[\-\-profile NAME | +\-\-profile\-id ID] +[\-\-quiet] +[\-\-version] + +{ backup | backup\-job | +benchmark-cipher [FILE-SIZE] | +check-config | +decode [PATH] | +last\-snapshot | last\-snapshot\-path | +pw\-cache [start|stop|restart|reload|status] | +remove[\-and\-do\-not\-ask\-again] [SNAPSHOT_ID] | +restore [WHAT [WHERE [SNAPSHOT_ID]]] | +snapshots\-list | snapshots\-list\-path | +snapshots\-path | +unmount } + .SH DESCRIPTION Back In Time is a simple backup tool for Linux. The backup is done by taking snapshots of a specified set of folders. .PP All you have to do is configure: where to save snapshots, what folders to backup. -You can also specify a backup schedule: disabled, every 5 minutes, every 10 minutes, -every hour, every day, every week, every month. To configure it use one of the graphical -interfaces available (backintime-gnome or backintime-kde4). +You can also specify a backup schedule: disabled, every 5 minutes, every +10 minutes, every hour, every day, every week, every month. To configure it use +one of the graphical interfaces available (backintime-gnome or backintime-kde4). .PP -It acts as a 'user mode' backup tool. This means that you can backup/restore only folders -you have write access to (actually you can backup read\-only folders, +It acts as a 'user mode' backup tool. This means that you can backup/restore only +folders you have write access to (actually you can backup read\-only folders, but you can't restore them). .PP -If you want to run it as root you need to use 'su'. +If you want to run it as root you need to use 'sudo -i backintime'. .PP -A new snapshot is created only if something changed since the last snapshot (if any). +A new snapshot is created only if something changed since the last snapshot +(if any). .PP -A snapshot contains all the files from the selected folders (except for exclude patterns). -In order to reduce disk space it use hard\-links (if possible) between snapshots -for unchanged files. This way a file of 10Mb, unchanged for 10 snapshots, will use only -10Mb on the disk. +A snapshot contains all the files from the selected folders (except for exclude +patterns). In order to reduce disk space it use hard\-links (if possible) +between snapshots for unchanged files. This way a file of 10MiB, unchanged for +10 snapshots, will use only 10MiB on the disk. .PP -When you restore a file 'A', if it already exists on the file system it will be renamed to 'A.backup.currentdate'. +When you restore a file 'A', if it already exists on the file system it will be +renamed to 'A.backup.currentdate'. .PP -For automatic backup it use 'cron' so there is no need for a daemon, but 'cron' must be running. +For automatic backup it use 'cron' so there is no need for a daemon, but 'cron' +must be running. .SS Modes .IP "\fILocal\fR" 4 .RS -Store snapshots on local HDD's (internal or USB). The drive has to be mounted before creating a new snapshot. +Store snapshots on local HDD's (internal or USB). The drive has to be mounted +before creating a new snapshot. .RE .IP "\fILocal encrypted\fR" 4 .RS -Store encrypted snapshots on local HDD's (internal or USB). Backintime uses 'encfs' with standard configuration to encrypt all data. You have to be member of group fuse to use this. In terminal type 'sudo adduser fuse'. To apply changes you have to logout and login again. +Store encrypted snapshots on local HDD's (internal or USB). +Back In Time uses 'encfs' with standard configuration to encrypt all data. +Please take a look at \fIA NOTE ON SECURITY\fR. +You have to be member of group fuse to use this. In terminal +type 'sudo adduser fuse'. To apply changes you have to logout and login +again. .RE .IP "\fISSH \fR" 4 .RS -With Mode set to SSH you can store the backup on a remote host using the SecureShellHost protocol (ssh). -The remote path will be mount local using sshfs to provide file-access for the graphical interface and the backup process. -Rsync and other processes called during backup process will run directly on the remote host using ssh. -.PP -To prepare your user account for ssh-mode you have to add the user to group 'fuse' by typing 'sudo adduser fuse' in terminal. To apply changes you have to logout and login again. -.PP -Next you have to create a password-less login to the remote host (for further informations look at http://www.debian-administration.org/articles/152). -Type in terminal 'ssh-keygen -t dsa' hit enter for default path and enter a passphrase for the private key. -.PP -Finally type 'ssh-copy-id -i ~/.ssh/id_dsa.pub @' and enter your password on remote host. -.PP -In Settingsdialog you need to set the host and remote user. If you enter a relative path (no leading / ) it will start from remote users homedir. The password has to be the passphrase for your private key. +With Mode set to SSH you can store the backup on a remote host using the +SecureShellHost protocol (ssh). +The remote path will be mount local using sshfs to provide file-access for the +graphical interface and the backup process. +Rsync and other processes called during backup process will run directly on the +remote host using ssh. +.PP +To prepare your user account for ssh-mode you have to add the user to +group 'fuse' by typing 'sudo adduser fuse' in terminal. To apply +changes you have to logout and login again. +.PP +Next you have to create a password-less login to the remote host (for further +information look at http://www.debian-administration.org/articles/152). +Type in terminal 'ssh-keygen \-t rsa' hit enter for default path and enter a +passphrase for the private key. +.PP +Finally type 'ssh-copy-id \-i ~/.ssh/id_rsa.pub @' and enter +your password on remote host. +.PP +In Settingsdialog you need to set the host and remote user. If you enter a +relative path (no leading / ) it will start from remote users homedir. The +password has to be the passphrase for your private key. .PP .B Cipher (the algorithm used to encrypt the data during transfer) .br -To optimize performance you can choose the cipher used by ssh. Depending on your environment you can have a massive speed increase compared to the default cipher. +To optimize performance you can choose the cipher used by ssh. Depending on your +environment you can have a massive speed increase compared to the default cipher. .PP -\-\-benchmark\-cipher will give you an overview over which cipher is the fastest in your environment. +\fIbenchmark\-cipher\fR will give you an overview over which cipher is the fastest +in your environment. .PP -If the bottleneck of your environment is the hard-drive or the network you will not see a big difference between the ciphers. In this case you should stay on 'default'. -.PP -Please read security informations about the cipher before using them in untrusted networks (Wifi, Internet). Some of them (Arcfour, 3DES, ...) should be handled as not secure anymore. +If the bottleneck of your environment is the hard-drive or the network you will +not see a big difference between the ciphers. In this case you should rather +stay on 'default'. +.PP +Please read security information about the cipher before using them in untrusted +networks (Wifi, Internet). Some of them (Arcfour, 3DES, ...) should be handled +as not secure anymore. .PP .B "Remote Host" .br -If your remote host is an embedded Linux NAS or any other device with limited functions, you could run into some problems caused by feature-less commands. -For example some devices may not have hardlink support for 'cp', 'chmod' and 'rsync'. In this case it may help to install so-called Optware on your device if available. +If your remote host is an embedded Linux NAS or any other device with limited +functions, you could run into some problems caused by feature-less commands. +For example some devices may not have hardlink support for 'cp', 'chmod' +and 'rsync'. In this case it may help to install so-called Optware or Entware +on your device if available. .PP .B WARNING: THIS IS ONLY FOR EXPERIENCED USERS! .br -If you don't know how to compile packages and how to modify a Linux system you should NOT try to do this. There is a significant chance to break your device and make it completely -unusable with the following procedure. We will not take any warranty for this. Make a backup of your device before proceed! You have been warned! -.PP -You should install at least packages called 'bash', 'coreutils' and 'rsync'. You will have to change users default shell from '/bin/sh' to '/opt/bin/bash' in '/etc/passwd'. -Add '/opt/bin:/opt/sbin:' to the start of the PATH environment variable in '/etc/profiles'. -.PP -To check if it does work you can compare the output of '/bin/cp --help' and '/opt/bin/cp --help'. -If 'ssh @ cp --help' called from your PC will print the same as '/opt/bin/cp --help' -called on the remote host (via interactive ssh session) you are ready to go. -.PP -If you have questions on how to install and configure the Optware please refer to the community of your device. You can also take a look on BackInTime FAQ on Launchpad https://answers.launchpad.net/backintime/+faqs -.PP -If you successfully modified your device to be able to make backups over ssh, it would be nice if you write a 'How to' on Launchpad's Answers so we can add this to the FAQ. +If you don't know how to compile packages and how to modify a Linux system you +should NOT try to do this. There is a significant chance to break your device +and make it completely unusable with the following procedure. We will not take +any warranty for this. Make a backup of your device before proceed! +You have been warned! +.PP +You should install at least packages called 'bash', 'coreutils' and 'rsync'. +You will have to change users default shell from '/bin/sh' to '/opt/bin/bash' +in '/etc/passwd'. To add '/opt/bin:/opt/sbin:' to the start of the PATH environment +you can use 'Add prefix to SSH commands' in 'Expert Options' +with 'PATH=/opt/bin:/opt/sbin:\\\$PATH'. +.PP +To check if it does work you can compare the output of '/bin/cp \-\-help' +and '/opt/bin/cp \-\-help'. If 'ssh @ cp \-\-help' called from +your PC will print the same as '/opt/bin/cp \-\-help' called on the +remote host (via interactive ssh session) you are ready to go. +.PP +If you have questions on how to install and configure the Optware please refer +to the community of your device. You can also take a look on Back In Time FAQ on +GitHub https://github.com/bit-team/backintime/wiki/FAQ +.PP +If you successfully modified your device to be able to make backups over ssh, +it would be nice if you write a 'How to' on Launchpad's Answers so we can add +this to the FAQ. .RE .IP "\fISSH encrypted\fR" 4 .RS -Store encrypted snapshots on remote hosts using SSH. Backintime uses 'encfs --reverse' to mount the root filesystem '/'. Rsync will sync this encrypted view of '/' to a remote host over SSH. All encoding will be done on the local machine. So the password will never be exposed to the remote host and you can use the (normally) more powerful processor in you local machine for encryption instead of weak NAS CPU's. The downside on this is 'encfs --reverse' does not support 'Filename Initialization Vector Chaining' and 'Per-File Initialization Vectors' from the standard configuration (take a look at 'man encfs' for further informations). -.PP -Because of all data is transferred encrypted the log output shows encrypted filenames, too. In the Logview-Dialog you can use 'decode' option to decrypt the paths automatically or you can use 'backintime --decode' to manually decrypt paths. Backintime will show all snapshots decoded so you can browse all files as normal. +Store encrypted snapshots on remote hosts using SSH. Backintime +uses 'encfs \-\-reverse' to mount the root filesystem '/'. Rsync will sync this +encrypted view of '/' to a remote host over SSH. All encoding will be done on +the local machine. So the password will never be exposed to the remote host and +you can use the (normally) more powerful processor in you local machine for +encryption instead of weak NAS CPU's. The downside on this +is 'encfs \-\-reverse' does not support 'Filename Initialization Vector Chaining' +and 'Per-File Initialization Vectors' from the standard configuration +(take a look at 'man encfs' for further information). Please take a look at +\fIA NOTE ON SECURITY\fR. +.PP +Because of all data is transferred encrypted the log output shows encrypted +filenames, too. In the Logview-Dialog you can use 'decode' option to decrypt +the paths automatically or you can use 'backintime decode' to manually +decrypt paths. Back In Time will show all snapshots decoded so you can browse +all files as normal. +.PP +Exclude does not support wildcards ('foo*', '[fF]oo', 'fo?') because after +encoding a file these wildcards can't match any more. Only separate asterisk +that match a full file or folder will work ('foo/*', 'foo/**/bar'). All other +excludes that have wildcards will be silently ignored. .PP -Exclude does not support wildcards ('foo*', '[fF]oo', 'fo?') because after encoding a file these wildcards can't match any more. Only separate asterisk that match a full file or folder will work ('foo/*', 'foo/**/bar'). All other excludes that have wildcards will be silently ignored. -.PP -Please refer to the 'SSH' section above for informations on setting up the SSH connection. +Please refer to the 'SSH' section above for information on setting up the SSH +connection. .RE .SS Password -If 'Save Password to Keyring' is activated BackinTime will save the Password into GnomeKeyring (Seahorse) or KDE-KWallet. Both are secure password storages which encrypt the password with the users login-password. So they can only be accessed if the user is logged in. -.PP -A backup cronjob during the user isn't logged in can not collect the password from keyring. Also if the homedir is encrypted the keyring is not accessible from cronjobs (even if the user is logged in). For these cases the password can be cached in RAM. If 'Cache Password for Cron' is activated BackinTime will start a small daemon in user-space which will collect the password from keyring and provide them for cronjobs. They will never be written to the harddrive but a user with root permissions could access the daemon and read the password. +If 'Save Password to Keyring' is activated Back In Time will save the Password +into GnomeKeyring (Seahorse) or KDE-KWallet. Both are secure password storages +which encrypt the password with the users login-password. So they can only be +accessed if the user is logged in. +.PP +A backup cronjob during the user isn't logged in can not collect the password +from keyring. Also if the homedir is encrypted the keyring is not accessible +from cronjobs (even if the user is logged in). For these cases the password can +be cached in RAM. If 'Cache Password for Cron' is activated Back In Time will +start a small daemon in user-space which will collect the password from keyring +and provide them for cronjobs. They will never be written to the harddrive but +a user with root permissions could access the daemon and read the password. .SS user-callback During backup process the application can call a user callback at different steps. -This callback is "$XDG_CONFIG_HOME/backintime/user-callback" (by default $XDG_CONFIG_HOME is ~/.config). +This callback is "$XDG_CONFIG_HOME/backintime/user-callback" +(by default $XDG_CONFIG_HOME is ~/.config). .PP The first argument is the profile id (1=Main Profile, ...). .PP @@ -154,74 +231,141 @@ 4 A snapshot for "now" already exist. .RE -.SH OPTIONS (use these before other actions) .TP -\-\-profile -select profile by name +5 +On (graphical) App start. .TP -\-\-profile\-id -select profile by id +6 +On (graphical) App close. .TP -\-\-keep\-mount -Don't unmount on exit. Only valid with \-\-snapshots\-list\-path and \-\-last\-snapshot\-path. +7 +Mount all necessary drives. .TP -\-\-quiet -suppress status messages on standard output. +8 +Unmount all drives. +.SH OPTIONS +.TP +\-\-checksum +Force to use checksum for checking if files have been changed. This is the same +as 'Use checksum to detect changes' in Options. But you can use this to +periodically run checksums from cronjobs. Only valid with \fIbackup\fR, +\fIbackup-job\fR and \fIrestore\fR. .TP \-\-config PATH -read config from PATH. +Read config from PATH. .TP -\-\-checksum -force to use checksum for checking if files have been changed. This is the same as 'Use checksum to detect changes' in Options. But you can use this to periodically run checksums from cronjobs. -.SH ACTIONS +--debug +Show debug messages. +.TP +--delete +Restore and delete newer files which are not in the snapshot. +WARNING: deleting files in filesystem root could break your whole system!!! +Only valid with \fIrestore\fR. .TP -\-b, \-\-backup -take a snapshot now (if needed) +\-h, \-\-help +Display a short help .TP -\-\-backup\-job -take a snapshot (if needed) depending on schedule rules (used for cron jobs) +\-\-keep\-mount +Don't unmount on exit. Only valid with \fIsnapshots\-path\fR, \fIsnapshots\-list\-path\fR and +\fIlast\-snapshot\-path\fR. .TP -\-\-snapshots\-path -display path where is saves the snapshots (if configured) +\-\-license +Show license .TP -\-\-snapshots\-list -display the list of snapshot IDs (if any) +--local-backup +Create backup files before changing local files. +Only valid with \fIrestore\fR. .TP -\-\-snapshots\-list\-path -display the paths to snapshots (if any) +--no-crontab +Do not install crontab entries. +Only valid with \fIcheck-config\fR. .TP -\-\-last\-snapshot -display last snapshot ID (if any) +--no-local-backup +Temporary disable creation of backup files before changing local files. +Only valid with \fIrestore\fR. .TP -\-\-last\-snapshot\-path -display the path to the last snapshot (if any) +\-\-profile NAME +Select profile by name .TP - \-\-unmount -Unmount the profile. +\-\-profile\-id ID +Select profile by id .TP -\-\-benchmark-cipher [SIZE] -Show a benchmark of all ciphers for ssh transfer. +\-\-quiet +Suppress status messages on standard output. .TP -\-\-pw\-cache [start|stop|restart|reload|status] -Control the Password Cache Daemon. If no argument is given the Password Cache will start in foreground. +\-v, \-\-version +Show version + +.SH COMMANDS +.TP +backup | \-b | \-\-backup +Take a snapshot now (if needed) +.TP +backup\-job | \-\-backup\-job +Take a snapshot (if needed) depending on schedule rules (used for cron jobs). +Back In Time will run in background for this. .TP -\-\-decode [PATH] -decode encrypted PATH. If no PATH is given Backintime will read paths from standard input. +benchmark-cipher | \-\-benchmark-cipher [FILE-SIZE] +Show a benchmark of all ciphers for ssh transfer. .TP -\-\-restore [WHAT [WHERE [SNAPSHOT_ID]]] -Restore file WHAT to path WHERE from snapshot SNAPSHOT_ID. If arguments are missing they will be prompted. To restore to the original path WHERE can be an empty string '' or just press Enter at the prompt. SNAPSHOT_ID can be an index (starting with 0 for the last snapshot) or the exact SnapshotID (19 caracters like '20130606-230501-984') +check-config +Verify the profile in config, create snapshot path and crontab entries. .TP -\-h, \-\-help -display a short help +decode | \-\-decode [PATH] +Decode encrypted PATH. If no PATH is given Back In Time will read paths from +standard input. +.TP +last\-snapshot | \-\-last\-snapshot +Display last snapshot ID (if any) +.TP +last\-snapshot\-path | \-\-last\-snapshot\-path +Display the path to the last snapshot (if any) +.TP +pw\-cache | \-\-pw\-cache [start|stop|restart|reload|status] +Control the Password Cache Daemon. If no argument is given the Password Cache +will start in foreground. +.TP +remove[\-and\-do\-not\-ask\-again] | \-\-remove[\-and\-do\-not\-ask\-again] [SNAPSHOT_ID] +Remove the snapshot. If SNAPSHOT_ID is missing it will be prompted. SNAPSHOT_ID +can be an index (starting with 0 for the last snapshot) or the exact SnapshotID +(19 caracters like '20130606-230501-984'). +\fIremove\-and\-do\-not\-ask\-again\fR will remove the snapshot immediately. +Be careful with this! +.TP +restore | \-\-restore [WHAT [WHERE [SNAPSHOT_ID]]] +Restore file WHAT to path WHERE from snapshot SNAPSHOT_ID. If arguments are +missing they will be prompted. To restore to the original path WHERE can be an +empty string '' or just press Enter at the prompt. SNAPSHOT_ID can be an index +(starting with 0 for the last snapshot) or the exact SnapshotID +(19 caracters like '20130606-230501-984') +.TP +snapshots\-list | \-\-snapshots\-list +Display the list of snapshot IDs (if any) .TP -\-v, \-\-version -show version +snapshots\-list\-path | \-\-snapshots\-list\-path +Display the paths to snapshots (if any) .TP -\-\-license -show license +snapshots\-path | \-\-snapshots\-path +Display path where is saves the snapshots (if configured) +.TP +unmount | \-\-unmount +Unmount the profile. + +.SH A NOTE ON SECURITY +There was a paid security audit for EncFS in Feb 2014 which revealed several +potential vulnerabilities. +.TP +From https://defuse.ca/audits/encfs.htm +EncFS is probably safe as long as the adversary only gets one copy of +the ciphertext and nothing more. EncFS is not safe if the adversary +has the opportunity to see two or more snapshots of the ciphertext at +different times. EncFS attempts to protect files from malicious +modification, but there are serious problems with this feature. +.PP +This might be a problem with Back In Time snapshots. .SH SEE ALSO -backintime-gnome, backintime-kde4, backintime-config. +backintime-qt4, backintime-config. .PP -Back In Time also has a website: http://backintime.le\-web.org +Back In Time also has a website: https://github.com/bit-team/backintime .SH AUTHOR This manual page was written by BIT Team(). diff -Nru backintime-1.0.36/common/man/C/backintime-askpass.1 backintime-1.1.12/common/man/C/backintime-askpass.1 --- backintime-1.0.36/common/man/C/backintime-askpass.1 1970-01-01 00:00:00.000000000 +0000 +++ backintime-1.1.12/common/man/C/backintime-askpass.1 2016-01-11 18:07:58.000000000 +0000 @@ -0,0 +1,32 @@ +.TH backintime-askpass 1 "Jan 2015" "version 1.1.12" "USER COMMANDS" +.SH NAME +backintime-askpass \- a simple backup tool for Linux. +.PP +This is the command line tool for piping passwords into ssh/sshfs and encfs. +.SH SYNOPSIS +.B backintime-askpass + +.SH DESCRIPTION +Back In Time is a simple backup tool for Linux. This is a helper tool for +piping passwords into ssh/sshfs and encfs. Options will will be read from +environ variables. It doesn't provide any useful enduser service. + + +.SH ENVIRON +.TP +ASKPASS_PROFILE_ID +Back In Time Profile-ID. +.TP +ASKPASS_MODE +Backup mode (or backend). Take a look at 'man backintime-config' +section \fIprofile.snapshots.mode\fR +.TP +ASKPASS_TEMP +Temp FIFO socket used to pipe the password + +.SH SEE ALSO +backintime, backintime-config. +.PP +Back In Time also has a website: https://github.com/bit-team/backintime +.SH AUTHOR +This manual page was written by BIT Team(). diff -Nru backintime-1.0.36/common/man/C/backintime-config.1 backintime-1.1.12/common/man/C/backintime-config.1 --- backintime-1.0.36/common/man/C/backintime-config.1 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/man/C/backintime-config.1 2016-01-11 18:07:58.000000000 +0000 @@ -1,4 +1,4 @@ -.TH backintime-config 1 "Oct 2013" "version 1.0.36" "USER COMMANDS" +.TH backintime-config 1 "Dec 2015" "version 1.1.12" "USER COMMANDS" .SH NAME config \- BackInTime configuration files. .SH SYNOPSIS @@ -6,10 +6,10 @@ .br /etc/backintime/config .SH DESCRIPTION -Back In Time was developed as pure GUI program and so most functions are only -useable with backintime-gnome or backintime-kde4. But it is possible to use +Back In Time was developed as pure GUI program and so most functions are only +useable with backintime-qt4. But it is possible to use Back In Time e.g. on a headless server. You have to create the configuration file -(~/.config/backintime/config) manually. Look inside /usr/share/doc/backintime/examples/ for examples. +(~/.config/backintime/config) manually. Look inside /usr/share/doc/backintime\-common/examples/ for examples. .PP The configuration file has the following format: .br @@ -17,15 +17,7 @@ .PP Arguments don't need to be quoted. All characters are allowed except '='. .PP -The given path (\fIprofile.snapshots.path\fR, \fIprofile.snapshots.local_encfs.path\fR -or \fIprofile.snapshots.ssh.path\fR) must contain a folderstructure like -backintime///. This has to be created manually. -.PP -Also the crontab entry for automatic backup shedules has to be created manually. -.PP -crontab example: -.br -0 */2 * * * nice -n 19 ionice -c2 -n7 /usr/bin/backintime --backup-job >/dev/null 2>&1 +Run 'backintime check-config' to verify the configfile, create the snapshot folder and crontab entries. .SH POSSIBLE KEYWORDS .IP "\fIglobal.hash_collision\fR" 6 .RS @@ -36,6 +28,15 @@ Default: 0 .RE +.IP "\fIglobal.use_flock\fR" 6 +.RS +Type: bool Allowed Values: true|false +.br +Prevent multiple snapshots (from different profiles or users) to be run at the same time +.PP +Default: false +.RE + .IP "\fIprofile.name\fR" 6 .RS Type: str Allowed Values: text @@ -49,11 +50,30 @@ .RS Type: int Allowed Values: 0-99999 .br -How many days to wait between new snapshots with anacron? Only validfor \fIprofile.snapshots.automatic_backup_mode\fR = 25|27 +How many units to wait between new snapshots with anacron? Only valid for \fIprofile.snapshots.automatic_backup_mode\fR = 25|27 .PP Default: 1 .RE +.IP "\fIprofile.snapshots.automatic_backup_anacron_unit\fR" 6 +.RS +Type: int Allowed Values: 10|20|30|40 +.br +Units to wait between new snapshots with anacron. +.br +10 = hours +.br +20 = days +.br +30 = weeks +.br +40 = months +.br +Only valid for \fIprofile.snapshots.automatic_backup_mode\fR = 25|27 +.PP +Default: 20 +.RE + .IP "\fIprofile.snapshots.automatic_backup_day\fR" 6 .RS Type: int Allowed Values: 1-28 @@ -67,7 +87,7 @@ .RS Type: int Allowed Values: 0|1|2|4|7|10|12|14|16|18|19|20|25|27|30|40|80 .br -Which shedule used for crontab. Note that the crontab entry is only generated during saving in settings dialog. If you don't run a GUI version of BackInTime you'll have to create the crontab entry on your own. +Which schedule used for crontab. The crontab entry will be generated with 'backintime check-config'. .br 0 = Disabled .br @@ -101,7 +121,7 @@ .br 40 = every month .br -80 = every year +80 = every year .PP Default: 0 .RE @@ -117,7 +137,7 @@ .IP "\fIprofile.snapshots.automatic_backup_weekday\fR" 6 .RS -Type: int Allowed Values: 1 = monday - 7 = sunday +Type: int Allowed Values: 1 = monday \- 7 = sunday .br Which day of week the cronjob should run? Only valid for \fIprofile.snapshots.automatic_backup_mode\fR = 30 .PP @@ -155,7 +175,7 @@ .RS Type: bool Allowed Values: true|false .br -Perform a dry-run before taking snapshots. Don't take a new snapshot if nothing has changed. +Perform a dry-run before taking snapshots. Don't take a new snapshot if nothing has changed. Only valid with \fIprofile.snapshots.full_rsync\fR = false .PP Default: true .RE @@ -173,7 +193,7 @@ .RS Type: bool Allowed Values: true|false .br -When symlinks are encountered, the item that they point to (the referent) is copied, rather than the symlink. +When symlinks are encountered, the item that they point to (the reference) is copied, rather than the symlink. .PP Default: false .RE @@ -191,9 +211,7 @@ .RS Type: bool Allowed Values: true|false .br -Run cronjobs with 'ionice -c2 -n7'. This will give BackInTime the lowest IO bandwidth priority to not interupt any other working process. -.br -Note that the crontab entry is only generated during saving in settings dialog. If you don't run a GUI version of BackInTime you'll have to create the crontab entry on your own. +Run cronjobs with 'ionice \-c2 \-n7'. This will give BackInTime the lowest IO bandwidth priority to not interupt any other working process. .PP Default: true .RE @@ -202,9 +220,25 @@ .RS Type: bool Allowed Values: true|false .br -Run cronjobs with 'nice -n 19'. This will give BackInTime the lowest CPU priority to not interupt any other working process. +Run cronjobs with 'nice \-n 19'. This will give BackInTime the lowest CPU priority to not interupt any other working process. +.PP +Default: true +.RE + +.IP "\fIprofile.snapshots.cron.redirect_stderr\fR" 6 +.RS +Type: bool Allowed Values: true|false +.br +redirect stderr to /dev/null in cronjobs +.PP +Default: False +.RE + +.IP "\fIprofile.snapshots.cron.redirect_stdout\fR" 6 +.RS +Type: bool Allowed Values: true|false .br -Note that the crontab entry is only generated during saving in settings dialog. If you don't run a GUI version of BackInTime you'll have to create the crontab entry on your own. +redirect stdout to /dev/null in cronjobs .PP Default: true .RE @@ -213,7 +247,7 @@ .RS Type: str Allowed Values: comma separated int (8,12,18,23) or */3 .br -Custom hours for cronjob. Only valid for \fIprofile.snapshots.automatic_backup_mode\fR = 19 +Custom hours for cronjob. Only valid for \fIprofile.snapshots.automatic_backup_mode\fR = 19 .PP Default: 8,12,18,23 .RE @@ -227,6 +261,24 @@ Default: true .RE +.IP "\fIprofile.snapshots.exclude.bysize.enabled\fR" 6 +.RS +Type: bool Allowed Values: true|false +.br +Enable exclude files by size. +.PP +Default: false +.RE + +.IP "\fIprofile.snapshots.exclude.bysize.value\fR" 6 +.RS +Type: int Allowed Values: 0-99999 +.br +Exclude files bigger than value in MiB. With 'Full rsync mode' disabled this will only affect new files because for rsync this is a transfer option, not an exclude option. So big files that has been backed up before will remain in snapshots even if they had changed. +.PP +Default: 500 +.RE + .IP "\fIprofile.snapshots.exclude..value\fR" 6 .RS Type: str Allowed Values: file, folder or pattern (relative or absolute) @@ -238,11 +290,11 @@ .IP "\fIprofile.snapshots.exclude.size\fR" 6 .RS -Type: int Allowed Values: 1-99999 +Type: int Allowed Values: 0-99999 .br -Quantity of exclude entrys. +Quantity of profile.snapshots.exclude. entries. .PP -Default: -1 +Default: \-1 .RE .IP "\fIprofile.snapshots.full_rsync\fR" 6 @@ -254,11 +306,20 @@ Default: false .RE +.IP "\fIprofile.snapshots.full_rsync.take_snapshot_regardless_of_changes\fR" 6 +.RS +Type: bool Allowed Values: true|false +.br +Create a new snapshot regardless if there were changes or not. Only valid with \fIprofile.snapshots.full_rsync\fR = true +.PP +Default: false +.RE + .IP "\fIprofile.snapshots.gnu_find_suffix_support\fR" 6 .RS Type: bool Allowed Values: true|false .br -Remote SSH host support GNU find suffix (find -exec COMMAND {} +). +Remote SSH host support GNU find suffix (find \-exec COMMAND {} +). .PP Default: true .RE @@ -283,11 +344,11 @@ .IP "\fIprofile.snapshots.include.size\fR" 6 .RS -Type: int Allowed Values: 1-99999 +Type: int Allowed Values: 0-99999 .br -Quantity of include entrys. +Quantity of profile.snapshots.include. entries. .PP -Default: -1 +Default: \-1 .RE .IP "\fIprofile.snapshots.keep_only_one_snapshot.enabled\fR" 6 @@ -299,11 +360,20 @@ Default: false .RE +.IP "\fIprofile.snapshots.local.nocache\fR" 6 +.RS +Type: bool Allowed Values: true|false +.br +Run rsync on local machine with 'nocache'. This will prevent files from being cached in memory. +.PP +Default: false +.RE + .IP "\fIprofile.snapshots.local_encfs.path\fR" 6 .RS Type: str Allowed Values: absolute path .br -Where to save snapshots in mode 'local_encfs'. The encrypted path must contian a folderstructure like 'backintime///' +Where to save snapshots in mode 'local_encfs'. .PP Default: '' .RE @@ -424,20 +494,11 @@ Default: '' .RE -.IP "\fIprofile.snapshots.path.auto\fR" 6 -.RS -Type: bool Allowed Values: true|false -.br -Automaticaly set HOST, USER and PROFILE_ID for snapshot path. -.PP -Default: true -.RE - .IP "\fIprofile.snapshots.path.host\fR" 6 .RS Type: str Allowed Values: text .br -Set Host for snapshot path if \fIprofile.snapshots.path.auto\fR is false +Set Host for snapshot path .PP Default: local hostname .RE @@ -446,7 +507,7 @@ .RS Type: str Allowed Values: 1-99999 .br -Set Profile-ID for snapshot path if \fIprofile.snapshots.path.auto\fR is false +Set Profile-ID for snapshot path .PP Default: current Profile-ID .RE @@ -455,11 +516,20 @@ .RS Type: str Allowed Values: text .br -Set User for snapshot path if \fIprofile.snapshots.path.auto\fR is false +Set User for snapshot path .PP Default: local username .RE +.IP "\fIprofile.snapshots.path.uuid\fR" 6 +.RS +Type: str Allowed Values: text +.br +Devices uuid used to automatically set up udev rule if the drive is not connected. +.PP +Default: '' +.RE + .IP "\fIprofile.snapshots.preserve_acl\fR" 6 .RS Type: bool Allowed Values: true|false @@ -509,6 +579,24 @@ Default: 10 .RE +.IP "\fIprofile.snapshots.rsync_options.enabled\fR" 6 +.RS +Type: bool Allowed Values: true|false +.br +Past additional options to rsync +.PP +Default: false +.RE + +.IP "\fIprofile.snapshots.rsync_options.value\fR" 6 +.RS +Type: str Allowed Values: text +.br +rsync options. Options must be quoted e.g. \-\-exclude-from="/path/to/my exclude file" +.PP +Default: '' +.RE + .IP "\fIprofile.snapshots.smart_remove\fR" 6 .RS Type: bool Allowed Values: true|false @@ -554,9 +642,18 @@ Default: 4 .RE +.IP "\fIprofile.snapshots.smart_remove.run_remote_in_background\fR" 6 +.RS +Type: bool Allowed Values: true|false +.br +If using mode SSH or SSH-encrypted, run smart_remove in background on remote machine +.PP +Default: false +.RE + .IP "\fIprofile.snapshots.ssh.cipher\fR" 6 .RS -Type: str Allowed Values: default|aes192-cbc|aes256-cbc|aes128-ctr|aes192-ctr|aes256-ctr|arcfour|arcfour256|arcfour128|aes128-cbc|3des-cbc|blowfish-cbc|cast128-cbc +Type: str Allowed Values: default | aes192-cbc | aes256-cbc | aes128-ctr | aes192-ctr | aes256-ctr | arcfour | arcfour256 | arcfour128 | aes128-cbc | 3des-cbc | blowfish-cbc | cast128-cbc .br Cipher that is used for encrypting the SSH tunnel. Depending on the environment (network bandwidth, cpu and hdd performance) a different cipher might be faster. .PP @@ -576,16 +673,36 @@ .RS Type: bool Allowed Values: true|false .br -Run rsync and other commands on remote host with 'ionice -c2 -n7' +Run rsync and other commands on remote host with 'ionice \-c2 \-n7' .PP Default: false .RE +.IP "\fIprofile.snapshots.ssh.max_arg_length\fR" 6 +.RS +Type: int Allowed Values: 0, >700 +.br +Maximum argument length of commands run on remote host. This can be tested with 'python3 /usr/share/backintime/common/sshMaxArg.py USER@HOST'. +.br +0 = unlimited +.PP +Default: 0 +.RE + .IP "\fIprofile.snapshots.ssh.nice\fR" 6 .RS Type: bool Allowed Values: true|false .br -Run rsync and other commands on remote host with 'nice -n 19' +Run rsync and other commands on remote host with 'nice \-n 19' +.PP +Default: false +.RE + +.IP "\fIprofile.snapshots.ssh.nocache\fR" 6 +.RS +Type: bool Allowed Values: true|false +.br +Run rsync on remote host with 'nocache'. This will prevent files from being cached in memory. .PP Default: false .RE @@ -594,7 +711,7 @@ .RS Type: str Allowed Values: absolute or relative path .br -Snapshot path on remote host. If the path is relative (no leading '/') it will start from remote Users homedir. An empty path will be replaced with './'. This path must contain a folderstructure like 'backintime///' +Snapshot path on remote host. If the path is relative (no leading '/') it will start from remote Users homedir. An empty path will be replaced with './'. .PP Default: '' .RE @@ -608,11 +725,29 @@ Default: 22 .RE +.IP "\fIprofile.snapshots.ssh.prefix.enabled\fR" 6 +.RS +Type: bool Allowed Values: true|false +.br +Add prefix to every command which run through SSH on remote host. +.PP +Default: false +.RE + +.IP "\fIprofile.snapshots.ssh.prefix.value\fR" 6 +.RS +Type: str Allowed Values: text +.br +Prefix to run before every command on remote host. Variables need to be escaped with \\$FOO. This doesn't touch rsync. So to add a prefix for rsync use \fIprofile.snapshots.rsync_options.value\fR with --rsync-path="FOO=bar:\\$FOO /usr/bin/rsync" +.PP +Default: 'PATH=/opt/bin:/opt/sbin:\\$PATH' +.RE + .IP "\fIprofile.snapshots.ssh.private_key_file\fR" 6 .RS Type: str Allowed Values: absolute path to private key file .br -Private key file used for password-less authentication on remote host. +Private key file used for password-less authentication on remote host. .PP Default: ~/.ssh/id_dsa .RE @@ -658,14 +793,23 @@ .RS Type: bool Allowed Values: true|false .br -Run BackInTime with 'ionice -c2 -n7' when taking a manual snapshot. This will give BackInTime the lowest IO bandwidth priority to not interupt any other working process. +Run BackInTime with 'ionice \-c2 \-n7' when taking a manual snapshot. This will give BackInTime the lowest IO bandwidth priority to not interupt any other working process. +.PP +Default: false +.RE + +.IP "\fIprofile.user_callback.no_logging\fR" 6 +.RS +Type: bool Allowed Values: true|false +.br +Do not catch std{out|err} from user-callback script. The script will only write to current TTY. Default is to catch std{out|err} and write it to syslog and TTY again. .PP Default: false .RE .IP "\fIprofiles\fR" 6 .RS -Type: str Allowed Values: int seperated by colon (e.g. 1:3:4) +Type: str Allowed Values: int separated by colon (e.g. 1:3:4) .br All active Profiles ( in profile.snapshots...). .PP @@ -681,8 +825,8 @@ Default: 1 .RE .SH SEE ALSO -backintime, backintime-gnome, backintime-kde4. +backintime, backintime-qt4. .PP -Back In Time also has a website: http://backintime.le\-web.org +Back In Time also has a website: https://github.com/bit-team/backintime .SH AUTHOR This manual page was written by BIT Team(). diff -Nru backintime-1.0.36/common/mount.py backintime-1.1.12/common/mount.py --- backintime-1.0.36/common/mount.py 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/mount.py 2016-01-11 18:07:58.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2013 Germar Reitze +# Copyright (C) 2012-2016 Germar Reitze # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -16,7 +16,6 @@ import os import subprocess -import socket import json import gettext from zlib import crc32 @@ -26,46 +25,54 @@ import logger import tools import password +from exceptions import MountException, HashCollision _=gettext.gettext -class MountException(Exception): - pass - -class HashCollision(Exception): - pass - class Mount(object): def __init__(self, cfg = None, profile_id = None, tmp_mount = False, parent = None): self.config = cfg if self.config is None: self.config = config.Config() - + self.profile_id = profile_id if self.profile_id is None: self.profile_id = self.config.get_current_profile() - + self.tmp_mount = tmp_mount self.parent = parent - + if self.config.get_password_use_cache(self.profile_id): pw_cache = password.Password_Cache(self.config) action = None running = pw_cache.status() if not running: + logger.debug('pw-cache is not running', self) action = 'start' if running and not pw_cache.check_version(): + logger.debug('pw-cache is running but is an old version', self) action = 'restart' - if not action is None: - try: - subprocess.check_call(['backintime', '--pw-cache', action], stdout=open(os.devnull, 'w')) - except subprocess.CalledProcessError: + bit = tools.which('backintime') + if not action is None and len(bit): + cmd = [bit, 'pw-cache', action] + logger.debug('Call command: %s' + %' '.join(cmd), self) + proc = subprocess.Popen(cmd, + stdout = open(os.devnull, 'w'), + stderr = open(os.devnull, 'w')) + if proc.returncode: + logger.error('Failed to %s pw-cache: %s' + %(action, proc.returncode), + self) pass - - def mount(self, mode = None, check = True, **kwargs): + + def mount(self, mode = None, check = True, plugins = True, **kwargs): + if plugins: + self.config.PLUGIN_MANAGER.load_plugins(cfg = self.config) + self.config.PLUGIN_MANAGER.do_mount() if mode is None: mode = self.config.get_snapshots_mode(self.profile_id) - + if self.config.SNAPSHOT_MODES[mode][0] is None: #mode doesn't need to mount return 'local' @@ -78,20 +85,23 @@ parent = self.parent, **kwargs) return tools.mount(check = check) except HashCollision as ex: - logger.warning(str(ex)) + logger.warning(str(ex), self) del tools check = False continue break - - def umount(self, hash_id = None): + + def umount(self, hash_id = None, plugins = True): + if plugins: + self.config.PLUGIN_MANAGER.load_plugins(cfg = self.config) + self.config.PLUGIN_MANAGER.do_unmount() if hash_id is None: hash_id = self.config.current_hash_id if hash_id == 'local': #mode doesn't need to umount return else: - umount_info = os.path.join(self.config.MOUNT_ROOT, self.config.get_user(), 'mnt', hash_id, 'umount') + umount_info = os.path.join(self.config._LOCAL_MOUNT_ROOT, hash_id, 'umount') with open(umount_info, 'r') as f: data_string = f.read() f.close() @@ -102,13 +112,13 @@ tmp_mount = self.tmp_mount, mode = mode, hash_id = hash_id, parent = self.parent, **kwargs) tools.umount() - + def pre_mount_check(self, mode = None, first_run = False, **kwargs): """called by SettingsDialog.save_profile() to check if settings are correct before saving""" if mode is None: mode = self.config.get_snapshots_mode(self.profile_id) - + if self.config.SNAPSHOT_MODES[mode][0] is None: #mode doesn't need to mount return True @@ -118,7 +128,7 @@ tmp_mount = self.tmp_mount, mode = mode, parent = self.parent, **kwargs) return tools.pre_mount_check(first_run) - + def remount(self, new_profile_id, mode = None, hash_id = None, **kwargs): """mode <= new profile kwargs <= new profile @@ -128,62 +138,61 @@ mode = self.config.get_snapshots_mode(new_profile_id) if hash_id is None: hash_id = self.config.current_hash_id - + if self.config.SNAPSHOT_MODES[mode][0] is None: #new profile don't need to mount. - self.umount(hash_id = hash_id) + self.umount(hash_id = hash_id, plugins = False) return 'local' - + if hash_id == 'local': #old profile don't need to umount. self.profile_id = new_profile_id - return self.mount(mode = mode, **kwargs) - + return self.mount(mode = mode, plugins = False, **kwargs) + mounttools = self.config.SNAPSHOT_MODES[mode][0] tools = mounttools(cfg = self.config, profile_id = new_profile_id, tmp_mount = self.tmp_mount, mode = mode, parent = self.parent, **kwargs) if tools.compare_remount(hash_id): #profiles uses the same settings. just swap the symlinks - tools.remove_symlink(profile_id = self.profile_id) + tools.remove_symlink(profile_id = self.profile_id) tools.set_symlink(profile_id = new_profile_id, hash_id = hash_id) return hash_id else: #profiles are different. we need to umount and mount again - self.umount(hash_id = hash_id) + self.umount(hash_id = hash_id, plugins = False) self.profile_id = new_profile_id - return self.mount(mode = mode, **kwargs) + return self.mount(mode = mode, plugins = False, **kwargs) class MountControl(object): def __init__(self): self.local_host = self.config.get_host() self.local_user = self.config.get_user() self.pid = self.config.get_pid() - + def set_default_args(self): #self.destination should contain all arguments that are nessesary for mount. - args = self.all_kwargs.keys() + args = list(self.all_kwargs.keys()) self.destination = '%s:' % self.all_kwargs['mode'] args.remove('mode') args.sort() for arg in args: self.destination += ' %s' % self.all_kwargs[arg] - + #unique id for every different mount settings. Similar settings even in #different profiles will generate the same hash_id and so share the same #mountpoint if self.hash_id is None: self.hash_id = self.hash(self.destination) - - self.mount_root = self.config.MOUNT_ROOT - self.mount_user_path = os.path.join(self.mount_root, self.local_user) + + self.mount_root = self.config._LOCAL_MOUNT_ROOT self.snapshots_path = self.config.get_snapshots_path(profile_id = self.profile_id, mode = self.mode, tmp_mount = self.tmp_mount) - + self.hash_id_path = self.get_hash_id_path() self.mountpoint = self.get_mountpoint() self.lock_path = self.get_lock_path() self.umount_info = self.get_umount_info() - + def mount(self, check = True): self.create_mountstructure() self.mountprocess_lock_acquire() @@ -193,13 +202,15 @@ #We probably have a hash collision self.config.increment_hash_collision() raise HashCollision( _('Hash collision occurred in hash_id %s. Incrementing global value hash_collision and try again.') % self.hash_id) - logger.info('Mountpoint %s is already mounted' % self.mountpoint) + logger.info('Mountpoint %s is already mounted' %self.mountpoint, self) else: if check: self.pre_mount_check() self._mount() self.post_mount_check() - logger.info('mount %s on %s' % (self.log_command, self.mountpoint)) + logger.info('mount %s on %s' + %(self.log_command, self.mountpoint), + self) self.write_umount_info() except Exception: raise @@ -209,26 +220,28 @@ finally: self.mountprocess_lock_release() return self.hash_id - + def umount(self): self.mountprocess_lock_acquire() try: if not os.path.isdir(self.hash_id_path): - logger.info('Mountpoint %s does not exist.' % self.hash_id_path) + logger.info('Mountpoint %s does not exist.' % self.hash_id_path, self) else: if not self.is_mounted(): - logger.info('Mountpoint %s is not mounted' % self.hash_id_path) + logger.info('Mountpoint %s is not mounted' % self.hash_id_path, self) else: if self.check_mount_lock(): - logger.info('Mountpoint %s still in use. Keep mounted' % self.mountpoint) + logger.info('Mountpoint %s still in use. Keep mounted' % self.mountpoint, self) else: self.pre_umount_check() self._umount() self.post_umount_check() - if len(os.listdir(self.mountpoint)) > 0: - logger.warning('Mountpoint %s not empty after unmount' % self.mountpoint) + if os.listdir(self.mountpoint): + logger.warning('Mountpoint %s not empty after unmount' %self.mountpoint, self) else: - logger.info('unmount %s from %s' % (self.log_command, self.mountpoint)) + logger.info('unmount %s from %s' + %(self.log_command, self.mountpoint), + self) except Exception: raise else: @@ -236,124 +249,129 @@ self.remove_symlink() finally: self.mountprocess_lock_release() - + def is_mounted(self): """return True if path is is already mounted""" - if tools.check_mountpoint(self.mountpoint): + if os.path.ismount(self.mountpoint): return True else: - if len(os.listdir(self.mountpoint)) > 0: + if os.listdir(self.mountpoint): raise MountException( _('mountpoint %s not empty.') % self.mountpoint) return False - + def create_mountstructure(self): - """ folder structure in /tmp/backintime//: - mnt/ <= used for mount points - .lock <= mountprocess lock that will prevent different - processes modifying mountpoints at one time - / <= will be shared by all profiles with the same mount settings - mountpoint/ <= real mountpoint - umount <= json file with all nessesary args for unmount - locks/ <= for each process you have a .lock file - _/ <= sym-link to the right path. return by config.get_snapshots_path - (can be ../mnt//mount_point for ssh or - ../mnt/// for fusesmb ...) - tmp__/ <= sym-link for testing mountpoints in settingsdialog + """ folder structure in ~/.local/share/backintime/mnt/: + .lock <= mountprocess lock that will prevent different + processes modifying mountpoints at one time + / <= will be shared by all profiles with the same mount settings + mountpoint/ <= real mountpoint + umount <= json file with all nessesary args for unmount + locks/ <= for each process you have a .lock file + _/ <= sym-link to the right path. return by config.get_snapshots_path + (can be ../mnt//mount_point for ssh or + ../mnt/// for fusesmb ...) + tmp__/ <= sym-link for testing mountpoints in settingsdialog """ - self.mkdir(self.mount_root, 0777, force_chmod = True) - self.mkdir(self.mount_user_path, 0700) - self.mkdir(os.path.join(self.mount_user_path, 'mnt'), 0700) - self.mkdir(self.hash_id_path, 0700) - self.mkdir(self.mountpoint, 0700) - self.mkdir(self.lock_path, 0700) - - def mkdir(self, path, mode = 0777, force_chmod = False): + self.mkdir(self.mount_root, 0o700) + self.mkdir(self.hash_id_path, 0o700) + self.mkdir(self.mountpoint, 0o700) + self.mkdir(self.lock_path, 0o700) + + def mkdir(self, path, mode = 0o777, force_chmod = False): if not os.path.isdir(path): os.mkdir(path, mode) if force_chmod: #hack: debian and ubuntu won't set go+w on mkdir in tmp os.chmod(path, mode) - + def mountprocess_lock_acquire(self, timeout = 60): """block while an other process is mounting or unmounting""" - lock_path = os.path.join(self.mount_user_path, 'mnt') + lock_path = self.mount_root lock_suffix = '.lock' - lock = self.pid + lock_suffix + lock = os.path.join(lock_path, self.pid + lock_suffix) count = 0 while self.check_locks(lock_path, lock_suffix): count += 1 if count == timeout: raise MountException( _('Mountprocess lock timeout') ) sleep(1) - - with open(os.path.join(lock_path, lock), 'w') as f: + + logger.debug('Acquire mountprocess lock %s' + %lock, self) + with open(lock, 'w') as f: f.write(self.pid) - f.close() - + def mountprocess_lock_release(self): - lock_path = os.path.join(self.mount_user_path, 'mnt') + lock_path = self.mount_root lock_suffix = '.lock' lock = os.path.join(lock_path, self.pid + lock_suffix) + logger.debug('Release mountprocess lock %s' + %lock, self) if os.path.exists(lock): os.remove(lock) - + def set_mount_lock(self): """lock mount for this process""" if self.tmp_mount: lock_suffix = '.tmp.lock' else: lock_suffix = '.lock' - lock = self.pid + lock_suffix - with open(os.path.join(self.lock_path, lock), 'w') as f: + lock = os.path.join(self.lock_path, self.pid + lock_suffix) + logger.debug('Set mount lock %s' + %lock, self) + with open(lock, 'w') as f: f.write(self.pid) - f.close() - + def check_mount_lock(self): """return True if mount is locked by other processes""" - lock_suffix = '.lock' + lock_suffix = '.lock' return self.check_locks(self.lock_path, lock_suffix) - + def del_mount_lock(self): """remove mount lock for this process""" if self.tmp_mount: lock_suffix = '.tmp.lock' else: - lock_suffix = '.lock' + lock_suffix = '.lock' lock = os.path.join(self.lock_path, self.pid + lock_suffix) if os.path.exists(lock): + logger.debug('Remove mount lock %s' + %lock, self) os.remove(lock) - + def check_process_alive(self, pid): """check if process is still alive""" if os.path.exists(os.path.join('/proc', pid)): return True return False - + def check_locks(self, path, lock_suffix): """return True if there are active locks""" - for file in os.listdir(path): - if not file[-len(lock_suffix):] == lock_suffix: + for f in os.listdir(path): + if not f[-len(lock_suffix):] == lock_suffix: continue is_tmp = False - if os.path.basename(file)[-len(lock_suffix)-len('.tmp'):-len(lock_suffix)] == '.tmp': + if os.path.basename(f)[-len(lock_suffix)-len('.tmp'):-len(lock_suffix)] == '.tmp': is_tmp = True if is_tmp: - lock_pid = os.path.basename(file)[:-len('.tmp')-len(lock_suffix)] + lock_pid = os.path.basename(f)[:-len('.tmp')-len(lock_suffix)] else: - lock_pid = os.path.basename(file)[:-len(lock_suffix)] + lock_pid = os.path.basename(f)[:-len(lock_suffix)] if lock_pid == self.pid: if is_tmp == self.tmp_mount: continue if self.check_process_alive(lock_pid): return True else: + logger.debug('Remove old and invalid lock %s' + %f, self) #clean up - os.remove(os.path.join(path, file)) - for symlink in os.listdir(self.mount_user_path): + os.remove(os.path.join(path, f)) + for symlink in os.listdir(self.mount_root): if symlink.endswith('_%s' % lock_pid): - os.remove(os.path.join(self.mount_user_path, symlink)) + os.remove(os.path.join(self.mount_root, symlink)) return False - + def setattr_kwargs(self, arg, default, store = True, **kwargs): """if kwargs[arg] exist set self. to kwargs[arg] else set self. to default which should be the value from config""" @@ -365,14 +383,14 @@ if store: #make dictionary with all used args for umount self.all_kwargs[arg] = value - + def write_umount_info(self): """dump dictionary self.all_kwargs to umount_info file""" data_string = json.dumps(self.all_kwargs) with open(self.umount_info, 'w') as f: - f.write(data_string) + f.write(data_string) f.close - + def read_umount_info(self, umount_info = None): """load dictionary kwargs from umount_info file""" if umount_info is None: @@ -381,7 +399,7 @@ data_string = f.read() f.close() return json.loads(data_string) - + def compare_umount_info(self, umount_info = None): """just in case of hash collisions in we compare self.all_kwargs with the old saved in umount_info file. @@ -391,19 +409,19 @@ saved_kwargs = self.read_umount_info(umount_info) if not len(current_kwargs) == len(saved_kwargs): return False - for arg in current_kwargs.keys(): - if not arg in saved_kwargs.keys(): + for arg in list(current_kwargs.keys()): + if not arg in list(saved_kwargs.keys()): return False if not current_kwargs[arg] == saved_kwargs[arg]: return False return True - + def compare_remount(self, old_hash_id): """return True if profiles are identiacal and we don't need to remount""" if old_hash_id == self.hash_id: return self.compare_umount_info(self.get_umount_info(old_hash_id)) return False - + def set_symlink(self, profile_id = None, hash_id = None, tmp_mount = None): if not self.symlink: return @@ -422,7 +440,7 @@ if os.path.exists(dst): os.remove(dst) os.symlink(src, dst) - + def remove_symlink(self, profile_id = None, tmp_mount = None): if not self.symlink: return @@ -431,21 +449,21 @@ if tmp_mount is None: tmp_mount = self.tmp_mount os.remove(self.config.get_snapshots_path(profile_id = profile_id, mode = self.mode, tmp_mount = tmp_mount)) - - def hash(self, str): - """return a hex crc32 hash of str""" - return('%X' % (crc32(str) & 0xFFFFFFFF)) - + + def hash(self, s): + """return a hex crc32 hash of s""" + return('%X' % (crc32(s.encode()) & 0xFFFFFFFF)) + def get_hash_id_path(self, hash_id = None): if hash_id is None: hash_id = self.hash_id - return os.path.join(self.mount_user_path, 'mnt', self.hash_id) - + return os.path.join(self.mount_root, self.hash_id) + def get_mountpoint(self, hash_id = None): return os.path.join(self.get_hash_id_path(hash_id), 'mountpoint') - + def get_lock_path(self, hash_id = None): return os.path.join(self.get_hash_id_path(hash_id), 'locks') - + def get_umount_info(self, hash_id = None): return os.path.join(self.get_hash_id_path(hash_id), 'umount') diff -Nru backintime-1.0.36/common/password_ipc.py backintime-1.1.12/common/password_ipc.py --- backintime-1.0.36/common/password_ipc.py 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/password_ipc.py 2016-01-11 18:07:58.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2013 Germar Reitze +# Copyright (C) 2012-2016 Germar Reitze # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -17,10 +17,8 @@ import os import sys import stat -import signal import tools import threading -import base64 import tempfile import logger @@ -32,7 +30,7 @@ def __init__(self, fname): self.fifo = fname self.alarm = tools.Alarm() - + def delfifo(self): """ remove FIFO @@ -41,7 +39,7 @@ os.remove(self.fifo) except: pass - + def create(self): """ create the FIFO in a way that only the current user can access it. @@ -49,11 +47,11 @@ if os.path.exists(self.fifo): self.delfifo() try: - os.mkfifo(self.fifo, 0600) - except OSError, e: - logger.error('Failed to create FIFO: %s' % e.strerror) + os.mkfifo(self.fifo, 0o600) + except OSError as e: + logger.error('Failed to create FIFO: %s' % str(e), self) sys.exit(1) - + def read(self, timeout = 0): """ read from fifo untill timeout. If timeout is 0 it will wait forever @@ -67,7 +65,7 @@ ret = fifo.read() self.alarm.stop() return ret - + def write(self, string, timeout = 0): """ write to fifo untill timeout. If timeout is 0 it will wait forever @@ -77,10 +75,10 @@ if not self.is_fifo(): sys.exit(1) self.alarm.start(timeout) - with open(self.fifo, 'a') as fifo: + with open(self.fifo, 'w') as fifo: fifo.write(string) self.alarm.stop() - + def is_fifo(self): """ make sure file is still a FIFO and has correct permissions @@ -90,15 +88,15 @@ except OSError: return False if not s.st_uid == os.getuid(): - logger.error('%s is not owned by user' % self.fifo) + logger.error('%s is not owned by user' % self.fifo, self) return False mode = s.st_mode if not stat.S_ISFIFO(mode): - logger.error('%s is not a FIFO' % self.fifo) + logger.error('%s is not a FIFO' % self.fifo, self) return False forbidden_perm = stat.S_IXUSR + stat.S_IRWXG + stat.S_IRWXO if mode & forbidden_perm > 0: - logger.error('%s has wrong permissions' % self.fifo) + logger.error('%s has wrong permissions' % self.fifo, self) return False return True @@ -108,14 +106,14 @@ to backintime-askpass. """ def __init__(self, string): - threading.Thread.__init__(self) - self.pw_base64 = base64.encodestring(string) + super(TempPasswordThread, self).__init__() + self.pw = string self.temp_file = os.path.join(tempfile.mkdtemp(), 'FIFO') self.fifo = FIFO(self.temp_file) - + def run(self): self.fifo.create() - self.fifo.write(self.pw_base64) + self.fifo.write(self.pw) self.fifo.delfifo() def read(self): @@ -124,7 +122,7 @@ use only if thread timeout. """ self.fifo.read() - + def stop(self): self.join(5) if self.isAlive(): @@ -133,4 +131,4 @@ try: os.rmdir(os.path.dirname(self.temp_file)) except OSError: - pass \ No newline at end of file + pass diff -Nru backintime-1.0.36/common/password.py backintime-1.1.12/common/password.py --- backintime-1.0.36/common/password.py 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/password.py 2016-01-11 18:07:58.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2013 Germar Reitze +# Copyright (C) 2012-2016 Germar Reitze # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -19,25 +19,27 @@ import time import atexit import signal -import base64 import subprocess import gettext import re +import errno import config import configfile import tools import password_ipc import logger +from applicationinstance import ApplicationInstance +from exceptions import Timeout _=gettext.gettext class Daemon: """ A generic daemon class. - + Usage: subclass the Daemon class and override the run() method - + Daemon Copyright by Sander Marechal License CC BY-SA 3.0 http://www.jejik.com/articles/2007/02/a_simple_unix_linux_daemon_in_python/ @@ -47,21 +49,22 @@ self.stdout = stdout self.stderr = stderr self.pidfile = pidfile - + self.appInstance = ApplicationInstance(pidfile, auto_exit = False, flock = False) + def daemonize(self): """ do the UNIX double-fork magic, see Stevens' "Advanced Programming in the UNIX Environment" for details (ISBN 0201563177) http://www.erlenstar.demon.co.uk/unix/faq_2.html#SEC16 """ - #logger.info('[Password_Cache.Daemon.daemonize] start') + logger.debug('start', self) try: pid = os.fork() if pid > 0: # exit first parent sys.exit(0) - except OSError, e: - logger.error("[Password_Cache.Daemon.daemonize] fork #1 failed: %d (%s)" % (e.errno, e.strerror)) + except OSError as e: + logger.error("fork #1 failed: %d (%s)" % (e.errno, str(e)), self) sys.exit(1) # decouple from parent environment @@ -75,55 +78,41 @@ if pid > 0: # exit from second parent sys.exit(0) - except OSError, e: - logger.error("[Password_Cache.Daemon.daemonize] fork #2 failed: %d (%s)" % (e.errno, e.strerror)) + except OSError as e: + logger.error("fork #2 failed: %d (%s)" % (e.errno, str(e)), self) sys.exit(1) # redirect standard file descriptors sys.stdout.flush() sys.stderr.flush() - si = file(self.stdin, 'r') - so = file(self.stdout, 'a+') - se = file(self.stderr, 'a+', 0) + si = open(self.stdin, 'r') + so = open(self.stdout, 'w') + se = open(self.stderr, 'w') os.dup2(si.fileno(), sys.stdin.fileno()) os.dup2(so.fileno(), sys.stdout.fileno()) os.dup2(se.fileno(), sys.stderr.fileno()) # write pidfile - #logger.info('[Password_Cache.Daemon.daemonize] write pidfile') - atexit.register(self.delpid) + logger.debug('write pidfile', self) + atexit.register(self.appInstance.exit_application) signal.signal(signal.SIGTERM, self._cleanup_handler) - pid = str(os.getpid()) - with open(self.pidfile, 'w+') as pidfile: - pidfile.write("%s\n" % pid) - os.chmod(self.pidfile, 0600) + self.appInstance.start_application() def _cleanup_handler(self, signum, frame): self.fifo.delfifo() - self.delpid() + self.appInstance.exit_application() sys.exit(0) - - def delpid(self): - try: - os.remove(self.pidfile) - except: - pass def start(self): """ Start the daemon """ # Check for a pidfile to see if the daemon already runs - pid = self.read_pid() + if not self.appInstance.check(): + message = "pidfile %s already exist. Daemon already running?\n" + logger.error(message % self.pidfile, self) + sys.exit(1) - if pid: - if tools.is_process_alive(pid): - message = "pidfile %s already exist. Daemon already running?\n" - logger.error('[Password_Cache.Daemon.start] ' + message % self.pidfile) - sys.exit(1) - else: - self.delpid() - # Start the daemon self.daemonize() self.run() @@ -133,24 +122,24 @@ Stop the daemon """ # Get the pid from the pidfile - pid = self.read_pid() + pid, procname = self.appInstance.readPidFile() if not pid: message = "pidfile %s does not exist. Daemon not running?\n" - logger.error('[Password_Cache.Daemon.stop] ' + message % self.pidfile) + logger.error(message % self.pidfile, self) return # not an error in a restart - # Try killing the daemon process + # Try killing the daemon process try: - while 1: + while True: os.kill(pid, signal.SIGTERM) time.sleep(0.1) - except OSError, err: - if err.errno == 3: - if os.path.exists(self.pidfile): - os.remove(self.pidfile) + except OSError as err: + if err.errno == errno.ESRCH: + #no such process + self.appInstance.exit_application() else: - print(err.strerror) + logger.error(str(err), self) sys.exit(1) def restart(self): @@ -159,56 +148,35 @@ """ self.stop() self.start() - + def reload(self): """ send SIGHUP signal to process """ # Get the pid from the pidfile - pid = self.read_pid() + pid, procname = self.appInstance.readPidFile() if not pid: message = "pidfile %s does not exist. Daemon not running?\n" - logger.error('[Password_Cache.Daemon.reload] ' + message % self.pidfile) + logger.error(message % self.pidfile, self) return - - # Try killing the daemon process + + # Try killing the daemon process try: os.kill(pid, signal.SIGHUP) - except OSError, err: - if err.errno == 3: - if os.path.exists(self.pidfile): - os.remove(self.pidfile) + except OSError as err: + if err.errno == errno.ESRCH: + #no such process + self.appInstance.exit_application() else: - sys.stderr.write(err.strerror) + sys.stderr.write(str(err)) sys.exit(1) - + def status(self): """ return status """ - # Get the pid from the pidfile - pid = self.read_pid() - - if not pid: - return False - - #kill -0 can false report process alive because of still active threads - cmd = ['ps', 'ax', '-o', 'pid=', '-o', 'args='] - p = subprocess.Popen(cmd, stdout = subprocess.PIPE) - output = p.communicate()[0] - - c = re.compile(r'(\d+) (.*)') - for line in output.split('\n'): - res = c.findall(line) - if res: - _pid = int(res[0][0]) - _name = res[0][1] - if _pid == pid and _name.find('backintime.py --pw-cache'): - return True - if os.path.exists(self.pidfile): - os.remove(self.pidfile) - return False + return not self.appInstance.check() def run(self): """ @@ -217,14 +185,6 @@ """ pass - def read_pid(self): - """read PID from PID-file""" - try: - with open(self.pidfile, 'r') as pf: - return(int(pf.read().strip())) - except (IOError, ValueError): - return(None) - class Password_Cache(Daemon): """ Password_Cache get started on User login. It provides passwords for @@ -232,7 +192,7 @@ logged in. Does not start if there is no password to cache (e.g. no profile allows to cache). """ - PW_CACHE_VERSION = 1 + PW_CACHE_VERSION = 3 def __init__(self, cfg = None, *args, **kwargs): self.config = cfg @@ -240,16 +200,16 @@ self.config = config.Config() pw_cache_path = self.config.get_password_cache_folder() if not os.path.isdir(pw_cache_path): - os.mkdir(pw_cache_path, 0700) + os.mkdir(pw_cache_path, 0o700) else: - os.chmod(pw_cache_path, 0700) + os.chmod(pw_cache_path, 0o700) Daemon.__init__(self, self.config.get_password_cache_pid(), *args, **kwargs) self.db_keyring = {} self.db_usr = {} self.fifo = password_ipc.FIFO(self.config.get_password_cache_fifo()) - + self.keyring_supported = tools.keyring_supported() - + def run(self): """ wait for password request on FIFO and answer with password @@ -258,17 +218,19 @@ info = configfile.ConfigFile() info.set_int_value('version', self.PW_CACHE_VERSION) info.save(self.config.get_password_cache_info()) - os.chmod(self.config.get_password_cache_info(), 0600) + os.chmod(self.config.get_password_cache_info(), 0o600) + + logger.debug('Keyring supported: %s' %self.keyring_supported, self) - tools.save_env(self.config) + tools.save_env(self.config.get_cron_env_file()) if not self._collect_passwords(): - #logger.info('[Password_Cache.run] Nothing to cache. Quit.') + logger.debug('Nothing to cache. Quit.', self) sys.exit(0) self.fifo.create() atexit.register(self.fifo.delfifo) signal.signal(signal.SIGHUP, self._reload_handler) - #logger.info('[Password_Cache.run] start loop') + logger.debug('Start loop', self) while True: try: request = self.fifo.read() @@ -276,9 +238,9 @@ task, value = request.split(':', 1) if task == 'get_pw': key = value - if key in self.db_keyring.keys(): + if key in list(self.db_keyring.keys()): answer = 'pw:' + self.db_keyring[key] - elif key in self.db_usr.keys(): + elif key in list(self.db_usr.keys()): answer = 'pw:' + self.db_usr[key] else: answer = 'none:' @@ -286,28 +248,29 @@ elif task == 'set_pw': key, value = value.split(':', 1) self.db_usr[key] = value - + except IOError as e: - logger.error('[Password_Cache.run] Error in writing answer to FIFO: %s' % e.strerror) - except KeyboardInterrupt: - print('Quit.') + logger.error('Error in writing answer to FIFO: %s' % str(e), self) + except KeyboardInterrupt: + logger.debug('Quit.', self) break - except tools.Timeout: - logger.error('[Password_Cache.run] FIFO timeout') - except StandardError as e: - logger.error('[Password_Cache.run] ERROR: %s' % str(e)) - + except Timeout: + logger.error('FIFO timeout', self) + except Exception as e: + logger.error('ERROR: %s' % str(e), self) + def _reload_handler(self, signum, frame): """ reload passwords during runtime. """ time.sleep(2) + cfgPath = self.config._LOCAL_CONFIG_PATH del(self.config) - self.config = config.Config() + self.config = config.Config(cfgPath) del(self.db_keyring) self.db_keyring = {} self._collect_passwords() - + def _collect_passwords(self): """ search all profiles in config and collect passwords from keyring. @@ -323,13 +286,11 @@ if self.config.get_password_save(profile_id) and self.keyring_supported: service_name = self.config.get_keyring_service_name(profile_id, mode, pw_id) user_name = self.config.get_keyring_user_name(profile_id) - + password = tools.get_password(service_name, user_name) if password is None: continue - #add some snakeoil - pw_base64 = base64.encodestring(password) - self.db_keyring['%s/%s' %(service_name, user_name)] = pw_base64 + self.db_keyring['%s/%s' %(service_name, user_name)] = password return run_daemon def check_version(self): @@ -341,7 +302,7 @@ class Password(object): """ - provide passwords for BIT either from keyring, Password_Cache or + provide passwords for BIT either from keyring, Password_Cache or by asking User. """ def __init__(self, cfg = None): @@ -351,9 +312,9 @@ self.pw_cache = Password_Cache(self.config) self.fifo = password_ipc.FIFO(self.config.get_password_cache_fifo()) self.db = {} - + self.keyring_supported = tools.keyring_supported() - + def get_password(self, parent, profile_id, mode, pw_id = 1, only_from_keyring = False): """ based on profile settings return password from keyring, @@ -388,7 +349,7 @@ self._set_password_db(service_name, user_name, password) return password return password - + def _get_password_from_keyring(self, service_name, user_name): """ get password from system keyring (seahorse). The keyring is only @@ -398,9 +359,9 @@ try: return tools.get_password(service_name, user_name) except Exception: - logger.error('get password from Keyring failed') + logger.error('get password from Keyring failed', self) return None - + def _get_password_from_pw_cache(self, service_name, user_name): """ get password from Password_Cache @@ -409,13 +370,13 @@ self.pw_cache.check_version() self.fifo.write('get_pw:%s/%s' %(service_name, user_name), timeout = 5) answer = self.fifo.read(timeout = 5) - mode, pw_base64 = answer.split(':', 1) + mode, pw = answer.split(':', 1) if mode == 'none': return None - return base64.decodestring(pw_base64) + return pw else: return None - + def _get_password_from_user(self, parent, profile_id = None, mode = None, pw_id = 1, prompt = None): """ ask user for password. This does even work when run as cronjob @@ -423,14 +384,9 @@ """ if prompt is None: prompt = _('Profile \'%(profile)s\': Enter password for %(mode)s: ') % {'profile': self.config.get_profile_name(profile_id), 'mode': self.config.SNAPSHOT_MODES[mode][pw_id + 1]} - - gnome = os.path.join(self.config.get_app_path(), 'gnome') - kde = os.path.join(self.config.get_app_path(), 'kde4') - for path in (gnome, kde): - if os.path.isdir(path): - sys.path = [path] + sys.path - break - + + tools.register_backintime_path('qt4') + x_server = tools.check_x_server() import_successful = False if x_server: @@ -439,7 +395,7 @@ import_successful = True except ImportError: pass - + if not import_successful or not x_server: import getpass alarm = tools.Alarm() @@ -447,22 +403,22 @@ try: password = getpass.getpass(prompt) alarm.stop() - except tools.Timeout: + except Timeout: password = '' return password - - password = messagebox.ask_password_dialog(parent, self.config, 'Back in Time', + + password = messagebox.ask_password_dialog(parent, self.config.APP_NAME, prompt = prompt, timeout = 300) return password - + def _set_password_db(self, service_name, user_name, password): """ internal Password cache. Prevent to ask password several times during runtime. """ self.db['%s/%s' %(service_name, user_name)] = password - + def set_password(self, password, profile_id, mode, pw_id): """ store password to keyring and Password_Cache @@ -470,13 +426,13 @@ if self.config.mode_need_password(mode, pw_id): service_name = self.config.get_keyring_service_name(profile_id, mode, pw_id) user_name = self.config.get_keyring_user_name(profile_id) - + if self.config.get_password_save(profile_id): self._set_password_to_keyring(service_name, user_name, password) - + if self.config.get_password_use_cache(profile_id): self._set_password_to_cache(service_name, user_name, password) - + self._set_password_db(service_name, user_name, password) def _set_password_to_keyring(self, service_name, user_name, password): @@ -485,5 +441,4 @@ def _set_password_to_cache(self, service_name, user_name, password): if self.pw_cache.status(): self.pw_cache.check_version() - pw_base64 = base64.encodestring(password) - self.fifo.write('set_pw:%s/%s:%s' %(service_name, user_name, pw_base64), timeout = 5) + self.fifo.write('set_pw:%s/%s:%s' %(service_name, user_name, password), timeout = 5) diff -Nru backintime-1.0.36/common/pluginmanager.py backintime-1.1.12/common/pluginmanager.py --- backintime-1.0.36/common/pluginmanager.py 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/pluginmanager.py 2016-01-11 18:07:58.000000000 +0000 @@ -1,5 +1,5 @@ # Back In Time -# Copyright (C) 2008-2009 Oprea Dan, Bart de Koning, Richard Bailey +# Copyright (C) 2008-2016 Oprea Dan, Bart de Koning, Richard Bailey, Germar Reitze # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -16,13 +16,15 @@ # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -import os.path +import os +import sys import tools -import types tools.register_backintime_path( 'common' ) tools.register_backintime_path( 'plugins' ) +import logger +from exceptions import StopException class Plugin: def __init__( self ): @@ -49,6 +51,17 @@ def on_message( self, profile_id, profile_name, level, message, timeout ): return + def on_app_start(self): + return + + def on_app_exit(self): + return + + def do_mount(self): + return + + def do_unmount(self): + return class PluginManager: def __init__( self ): @@ -56,75 +69,121 @@ self.has_gui_plugins_ = False self.plugins_loaded = False - def load_plugins( self, snapshots, force = False ): + def load_plugins( self, snapshots = None, cfg = None, force = False ): if self.plugins_loaded and not force: return + if snapshots is None: + import snapshots as snapshots_ + snapshots = snapshots_.Snapshots(cfg) + self.plugins_loaded = True self.plugins = [] self.has_gui_plugins_ = False - - plugins_path = tools.get_backintime_path( 'plugins' ) - for file in os.listdir( plugins_path ): - try: - if file.endswith( '.py' ) and not file.startswith( '__' ): - path = os.path.join( plugins_path, file ) - - module = __import__( file[ : -3 ] ) - module_dict = module.__dict__ - - for key, value in module_dict.items(): - if key.startswith( '__' ): - continue - - if type(value) is types.ClassType: - if issubclass( value, Plugin ): - plugin = value() - if plugin.init( snapshots ): - if plugin.is_gui(): - self.has_gui_plugins_ = True - self.plugins.insert( 0, plugin ) - else: - self.plugins.append( plugin ) - except: - pass + loadedPlugins = [] + for path in ('plugins', 'common/plugins', 'qt4/plugins'): + fullPath = tools.get_backintime_path(path) + if os.path.isdir(fullPath): + logger.debug('Register plugin path %s' %fullPath, self) + tools.register_backintime_path(path) + for f in os.listdir(fullPath): + if f not in loadedPlugins and f.endswith('.py') and not f.startswith('__'): + try: + module = __import__( f[ : -3 ] ) + module_dict = module.__dict__ + + for key, value in list(module_dict.items()): + if key.startswith( '__' ): + continue + + if type(value) is type: + if issubclass( value, Plugin ): + plugin = value() + if plugin.init( snapshots ): + logger.debug('Add plugin %s' %f, self) + if plugin.is_gui(): + self.has_gui_plugins_ = True + self.plugins.insert( 0, plugin ) + else: + self.plugins.append( plugin ) + loadedPlugins.append(f) + except BaseException as e: + logger.error('Failed to load plugin %s: %s' %(f, str(e)), self) def has_gui_plugins( self ): return self.has_gui_plugins_ def on_process_begins( self ): + ret_val = True for plugin in self.plugins: try: plugin.on_process_begins() - except: - pass + except StopException: + ret_val = False + except BaseException as e: + self.log_error(plugin, e) + return ret_val def on_process_ends( self ): for plugin in reversed( self.plugins ): try: plugin.on_process_ends() - except: - pass + except BaseException as e: + self.log_error(plugin, e) def on_error( self, code, message = '' ): for plugin in self.plugins: try: plugin.on_error( code, message ) - except: - pass + except BaseException as e: + self.log_error(plugin, e) def on_new_snapshot( self, snapshot_id, snapshot_path ): for plugin in self.plugins: try: plugin.on_new_snapshot( snapshot_id, snapshot_path ) - except: - pass + except BaseException as e: + self.log_error(plugin, e) def on_message( self, profile_id, profile_name, level, message, timeout = -1 ): for plugin in self.plugins: try: plugin.on_message( profile_id, profile_name, level, message, timeout ) - except: - pass + except BaseException as e: + self.log_error(plugin, e) + def on_app_start( self ): + for plugin in reversed( self.plugins ): + try: + plugin.on_app_start() + except BaseException as e: + self.log_error(plugin, e) + + def on_app_exit( self ): + for plugin in reversed( self.plugins ): + try: + plugin.on_app_exit() + except BaseException as e: + self.log_error(plugin, e) + + def do_mount( self ): + for plugin in reversed( self.plugins ): + try: + plugin.do_mount() + except BaseException as e: + self.log_error(plugin, e) + + def do_unmount( self ): + for plugin in reversed( self.plugins ): + try: + plugin.do_unmount() + except BaseException as e: + self.log_error(plugin, e) + + def log_error(self, plugin, e): + logger.error('Plugin %s %s failed: %s' + %(plugin.__module__, #plugin name + sys._getframe(1).f_code.co_name, #method name + str(e)), #exception + self, 1) diff -Nru backintime-1.0.36/common/plugins/usercallbackplugin.py backintime-1.1.12/common/plugins/usercallbackplugin.py --- backintime-1.0.36/common/plugins/usercallbackplugin.py 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/plugins/usercallbackplugin.py 2016-01-11 18:07:58.000000000 +0000 @@ -1,5 +1,5 @@ # Back In Time -# Copyright (C) 2008-2009 Oprea Dan, Bart de Koning, Richard Bailey +# Copyright (C) 2008-2016 Oprea Dan, Bart de Koning, Richard Bailey, Germar Reitze # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -17,13 +17,11 @@ import os -import os.path import pluginmanager -import tools import logger import gettext -from subprocess import Popen -from subprocess import PIPE +from subprocess import Popen, PIPE +from exceptions import StopException _=gettext.gettext @@ -39,19 +37,29 @@ return False return True - def notify_callback( self, args = '' ): - logger.info( "[UserCallbackPlugin.notify_callback] %s" % args ) + def notify_callback(self, *args): + cmd = [self.callback, self.config.get_current_profile(), self.config.get_profile_name()] + cmd.extend([str(x) for x in args]) + logger.debug('Call user-callback: %s' %' '.join(cmd), self) + if self.config.user_callback_no_logging(): + stdout, stderr = None, None + else: + stdout, stderr = PIPE, PIPE try: - callback = Popen( "\"%s\" %s \"%s\" %s" % ( self.callback, self.config.get_current_profile(), self.config.get_profile_name(), args ), shell=True, stdout=PIPE, stderr=PIPE ) + callback = Popen(cmd, + stdout = stdout, + stderr = stderr, + universal_newlines = True) output = callback.communicate() if output[0]: - logger.info( "[UserCallbackPlugin.notify_callback callback output] %s" % output[0] ) + logger.info('user-callback returned \'%s\'' %output[0].strip('\n'), self) if output[1]: - logger.error( "[UserCallbackPlugin.notify_callback callback error] %s" % output[1] ) + logger.error('user-callback returned \'%s\'' %output[1].strip('\n'), self) if callback.returncode != 0: - exit() - except OSError: - logger.error( "[UserCallbackPlugin.notify_callback] Exception when trying to run user callback" ) + logger.warning('user-callback returncode: %s' %callback.returncode, self) + raise StopException() + except OSError as e: + logger.error("Exception when trying to run user callback: %s" % e.strerror, self) def on_process_begins( self ): self.notify_callback( '1' ) @@ -59,12 +67,23 @@ def on_process_ends( self ): self.notify_callback( '2' ) - def on_error( self, code, message ): - if len( message ) <= 0: - self.notify_callback( "4 %s" % code ) + def on_error(self, code, message): + if not message: + self.notify_callback('4', code) else: - self.notify_callback( "4 %s \"%s\"" % ( code, message ) ) + self.notify_callback('4', code, message) def on_new_snapshot( self, snapshot_id, snapshot_path ): - self.notify_callback( "3 %s \"%s\"" % ( snapshot_id, snapshot_path ) ) + self.notify_callback('3', snapshot_id, snapshot_path) + + def on_app_start(self): + self.notify_callback('5') + + def on_app_exit(self): + self.notify_callback('6') + + def do_mount(self): + self.notify_callback('7') + def do_unmount(self): + self.notify_callback('8') diff -Nru backintime-1.0.36/common/plugins/userscriptsplugin.py backintime-1.1.12/common/plugins/userscriptsplugin.py --- backintime-1.0.36/common/plugins/userscriptsplugin.py 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/plugins/userscriptsplugin.py 2016-01-11 18:07:58.000000000 +0000 @@ -1,5 +1,5 @@ # Back In Time -# Copyright (C) 2008-2009 Oprea Dan, Bart de Koning, Richard Bailey +# Copyright (C) 2008-2016 Oprea Dan, Bart de Koning, Richard Bailey, Germar Reitze # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -17,7 +17,6 @@ import os -import os.path import pluginmanager import tools import logger @@ -35,12 +34,12 @@ return True def notify_script( self, path, args = '' ): - if path == None: - return - if len( path ) <= 0: + if not path: return - logger.info( "[UserScriptsPlugin.notify_script] %s %s" % ( path, args ) ) + logger.info("[UserScriptsPlugin.notify_script] %s %s" + %(path, args), + self) os.system( "sh \"%s\" %s" % ( self.callback, args ) ) def on_process_begins( self ): @@ -51,11 +50,10 @@ def on_error( self, code, message ): code = str( code ) - if len( message ) > 0: + if message: code = code + " \"" + message + "\"" self.notify_script( self.config.get_take_snapshot_user_script_error(), code ) def on_new_snapshot( self, snapshot_id, snapshot_path ): self.notify_script( self.config.get_take_snapshot_user_script_new_snapshot(), "%s \"%s\"" % ( snapshot_id, snapshot_path ) ) - diff -Nru backintime-1.0.36/common/po/ar.po backintime-1.1.12/common/po/ar.po --- backintime-1.0.36/common/po/ar.po 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/po/ar.po 2016-01-11 18:07:58.000000000 +0000 @@ -7,207 +7,239 @@ msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2013-11-09 22:34+0100\n" -"PO-Revision-Date: 2013-05-16 07:48+0000\n" -"Last-Translator: nofallyaqoo \n" +"POT-Creation-Date: 2015-12-19 00:47+0100\n" +"PO-Revision-Date: 2015-09-09 21:49+0000\n" +"Last-Translator: Back In Time Team \n" "Language-Team: Arabic \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n % 100 >= " "3 && n % 100 <= 10 ? 3 : n % 100 >= 11 && n % 100 <= 99 ? 4 : 5;\n" -"X-Launchpad-Export-Date: 2014-08-06 10:20+0000\n" -"X-Generator: Launchpad (build 17147)\n" +"X-Launchpad-Export-Date: 2016-01-11 17:52+0000\n" +"X-Generator: Launchpad (build 17881)\n" -#: ../../common/config.py:72 +#: ../../common/configfile.py:60 +#, python-format +msgid "Failed to save config: %s" +msgstr "" + +#: ../../common/configfile.py:78 +#, python-format +msgid "Failed to load config: %s" +msgstr "" + +#: ../../common/configfile.py:352 ../../common/configfile.py:414 +#, python-format +msgid "Profile \"%s\" already exists !" +msgstr "الملف الشخصي \"%s\" موجود بالفعل" + +#: ../../common/configfile.py:383 +msgid "You can't remove the last profile !" +msgstr "لا يُمكنك إزالة آخر ملف شخصي !" + +#: ../../common/config.py:76 msgid "Disabled" msgstr "مُعطل" -#: ../../common/config.py:73 +#: ../../common/config.py:77 msgid "At every boot/reboot" msgstr "في كل اقلاع/اعادة اقلاع" -#: ../../common/config.py:74 +#: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "كل ٥ دقائق" -#: ../../common/config.py:75 +#: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "كل ١٠ دقائق" -#: ../../common/config.py:76 +#: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "كل ٣٠ دقيقة" -#: ../../common/config.py:77 +#: ../../common/config.py:81 msgid "Every hour" msgstr "كل ساعة" -#: ../../common/config.py:78 +#: ../../common/config.py:82 msgid "Every 2 hours" msgstr "" -#: ../../common/config.py:79 +#: ../../common/config.py:83 msgid "Every 4 hours" msgstr "كل ٤ ساعات" -#: ../../common/config.py:80 +#: ../../common/config.py:84 msgid "Every 6 hours" msgstr "كل ٦ ساعات" -#: ../../common/config.py:81 +#: ../../common/config.py:85 msgid "Every 12 hours" msgstr "كل ١٢ ساعات" -#: ../../common/config.py:82 +#: ../../common/config.py:86 msgid "Custom Hours" msgstr "ساعات مخصصة" -#: ../../common/config.py:83 +#: ../../common/config.py:87 msgid "Every Day" msgstr "كل يوم" -#: ../../common/config.py:84 -msgid "Daily (anacron)" +#: ../../common/config.py:88 +msgid "Repeatedly (anacron)" msgstr "" -#: ../../common/config.py:85 +#: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "" -#: ../../common/config.py:86 +#: ../../common/config.py:90 msgid "Every Week" msgstr "كل أسبوع" -#: ../../common/config.py:87 +#: ../../common/config.py:91 msgid "Every Month" msgstr "كل شهر" -#: ../../common/config.py:91 +#: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "يوم(أيام)" -#: ../../common/config.py:92 +#: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "أسبوع(أسابيع)" -#: ../../common/config.py:93 +#: ../../common/config.py:97 msgid "Year(s)" msgstr "سنة(سنين)" -#: ../../common/config.py:100 +#: ../../common/config.py:101 +msgid "Hour(s)" +msgstr "" + +#: ../../common/config.py:104 +msgid "Month(s)" +msgstr "" + +#: ../../common/config.py:126 ../../qt4/settingsdialog.py:551 msgid " EXPERIMENTAL!" msgstr "" -#: ../../common/config.py:103 +#: ../../common/config.py:129 msgid "Local" msgstr "محلي" -#: ../../common/config.py:104 +#: ../../common/config.py:130 msgid "SSH" msgstr "SSH" -#: ../../common/config.py:104 ../../common/config.py:106 -#: ../../gnome/settingsdialog.py:475 ../../kde4/settingsdialog.py:1325 +#: ../../common/config.py:130 ../../common/config.py:132 +#: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "" -#: ../../common/config.py:105 +#: ../../common/config.py:131 msgid "Local encrypted" msgstr "" -#: ../../common/config.py:105 ../../common/config.py:106 +#: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "" -#: ../../common/config.py:106 +#: ../../common/config.py:132 msgid "SSH encrypted" msgstr "" -#: ../../common/config.py:112 +#: ../../common/config.py:135 msgid "Default" msgstr "إفتراضيّ" -#: ../../common/config.py:113 +#: ../../common/config.py:136 msgid "AES128-CTR" msgstr "AES128-CTR" -#: ../../common/config.py:114 +#: ../../common/config.py:137 msgid "AES192-CTR" msgstr "AES192-CTR" -#: ../../common/config.py:115 +#: ../../common/config.py:138 msgid "AES256-CTR" msgstr "AES256-CTR" -#: ../../common/config.py:116 +#: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "ARCFOUR256" -#: ../../common/config.py:117 +#: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "ARCFOUR128" -#: ../../common/config.py:118 +#: ../../common/config.py:141 msgid "AES128-CBC" msgstr "AES128-CBC" -#: ../../common/config.py:119 +#: ../../common/config.py:142 msgid "3DES-CBC" msgstr "3DES-CBC" -#: ../../common/config.py:120 +#: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "Blowfish-CBC" -#: ../../common/config.py:121 +#: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "Cast128-CBC" -#: ../../common/config.py:122 +#: ../../common/config.py:145 msgid "AES192-CBC" msgstr "AES192-CBC" -#: ../../common/config.py:123 +#: ../../common/config.py:146 msgid "AES256-CBC" msgstr "AES256-CBC" -#: ../../common/config.py:124 +#: ../../common/config.py:147 msgid "ARCFOUR" msgstr "ARCFOUR" -#: ../../common/config.py:129 +#: ../../common/config.py:153 msgid "Main profile" msgstr "الملف الشخصي الرئيسي" -#: ../../common/config.py:256 ../../common/config.py:275 -#: ../../common/config.py:286 ../../common/config.py:291 +#: ../../common/config.py:289 ../../common/config.py:296 +#: ../../common/config.py:307 ../../common/config.py:312 +#: ../../qt4/qt4systrayicon.py:61 #, python-format msgid "Profile: \"%s\"" msgstr "الملف الشخصي: \"%s\"" -#: ../../common/config.py:256 +#: ../../common/config.py:289 msgid "Snapshots folder is not valid !" msgstr "مُجلد اللقطات غير صالح !" -#: ../../common/config.py:275 +#: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "يجب أن تُحدد على الأقل مُجلداً واحداً للنسخ الأحتياطي !" -#: ../../common/config.py:286 +#: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "لا يُمكنك أن تُضَمْن مُجلد النسخ الإحتياطي !" -#: ../../common/config.py:291 +#: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "لا يُمكنك أن تُضَمْن مُجلد نسخ إحتياطي فرعي !" -#: ../../common/config.py:361 +#: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s ليس مُجلداً !" -#: ../../common/config.py:376 ../../common/config.py:389 +#: ../../common/config.py:380 +msgid "Host/User/Profile-ID must not be empty!" +msgstr "" + +#: ../../common/config.py:388 ../../common/config.py:420 #, python-format msgid "" "Can't write to: %s\n" @@ -216,59 +248,68 @@ "لا يستطيع الكتابة على %s\n" "هل انت مُتأكد بأن لديك حق الكتابة ؟" -#: ../../common/config.py:1286 +#: ../../common/config.py:400 +#, python-format msgid "" -"Can't find crontab.\n" -"Are you sure cron is installed ?\n" -"If not you should disable all automatic backups." +"Destination filesystem for '%(path)s' is formatted with FAT which doesn't " +"support hard-links. Please use a native Linux filesystem." msgstr "" -"لا يستطيع إيجاد crontab.\n" -"ِِِِِِِِِِهل أنت مُتأكد بأن cron مثبت فعلاً ؟\n" -"أن لم يكن كذلك فعليك بإظهار جميع نُسخ الإحتياطية التلّقائية." -#: ../../common/config.py:1338 +#: ../../common/config.py:405 #, python-format -msgid "Schedule udev doesn't work with mode %s" +msgid "" +"Destination filsystem for '%(path)s' is a SMB mounted share. Please make " +"sure the remote SMB server supports symlinks or activate '%(copyLinks)s' in " +"'%(expertOptions)s'." msgstr "" -#: ../../common/config.py:1342 -#, python-format -msgid "Couldn't find UUID for \"%s\"" -msgstr "" +#: ../../common/config.py:408 ../../qt4/settingsdialog.py:815 +msgid "Copy links (dereference symbolic links)" +msgstr "نسخ الروابط (احصل علي محتوي العنوان الرمزي)" -#: ../../common/config.py:1379 -msgid "Failed to remove udev rules" -msgstr "" +#: ../../common/config.py:409 ../../qt4/settingsdialog.py:669 +msgid "Expert Options" +msgstr "خيارات الخبراء" -#: ../../common/config.py:1385 -msgid "Failed to create udev rules" +#: ../../common/config.py:411 +#, python-format +msgid "" +"Destination filesystem for '%(path)s is a sshfs mounted share. sshfs doesn't " +"support hard-links. Please use mode 'SSH' instead." msgstr "" -#: ../../common/config.py:1420 +#: ../../common/config.py:1407 msgid "" -"Can't find anacron.\n" -"Are you sure anacron is installed ?\n" -"If not you should disable daily anacron backups." +"Can't find crontab.\n" +"Are you sure cron is installed ?\n" +"If not you should disable all automatic backups." msgstr "" +"لا يستطيع إيجاد crontab.\n" +"ِِِِِِِِِِهل أنت مُتأكد بأن cron مثبت فعلاً ؟\n" +"أن لم يكن كذلك فعليك بإظهار جميع نُسخ الإحتياطية التلّقائية." -#: ../../common/config.py:1439 -msgid "Please provide your sudo password to install the udev rule." +#: ../../common/config.py:1411 +msgid "Failed to write new crontab." msgstr "" -#: ../../common/config.py:1445 -msgid "Please provide your sudo password to remove unused udev rules." +#: ../../common/config.py:1505 +#, python-format +msgid "" +"Could not install Udev rule for profile %(profile_id)s. DBus Service " +"'%(dbus_interface)s' wasn't available" msgstr "" -#: ../../common/configfile.py:253 ../../common/configfile.py:315 +#: ../../common/config.py:1517 #, python-format -msgid "Profile \"%s\" already exists !" -msgstr "الملف الشخصي \"%s\" موجود بالفعل" +msgid "Schedule udev doesn't work with mode %s" +msgstr "" -#: ../../common/configfile.py:284 -msgid "You can't remove the last profile !" -msgstr "لا يُمكنك إزالة آخر ملف شخصي !" +#: ../../common/config.py:1526 +#, python-format +msgid "Couldn't find UUID for \"%s\"" +msgstr "" -#: ../../common/encfstools.py:95 +#: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" @@ -276,38 +317,38 @@ "%(error)s" msgstr "" -#: ../../common/encfstools.py:105 +#: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "" -#: ../../common/encfstools.py:149 +#: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "" -#: ../../common/encfstools.py:153 +#: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" -#: ../../common/encfstools.py:154 +#: ../../common/encfstools.py:171 msgid "Cancel" msgstr "" -#: ../../common/encfstools.py:157 +#: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "" -#: ../../common/encfstools.py:161 +#: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "" -#: ../../common/encfstools.py:166 +#: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" -#: ../../common/encfstools.py:174 ../../common/sshtools.py:207 +#: ../../common/encfstools.py:196 ../../common/sshtools.py:262 #, python-format msgid "" "%(user)s is not member of group 'fuse'.\n" @@ -315,63 +356,66 @@ "Look at 'man backintime' for further instructions." msgstr "" -#: ../../common/encfstools.py:189 +#: ../../common/encfstools.py:211 msgid "" "encfs version 1.7.2 and before has a bug with option --reverse. Please " "update encfs" msgstr "" -#: ../../common/encfstools.py:453 ../../common/encfstools.py:480 -#: ../../common/snapshots.py:982 ../../common/snapshots.py:1288 -#: ../../kde4/app.py:82 ../../gnome/mainwindow.glade:43 +#: ../../common/encfstools.py:512 ../../common/snapshots.py:1131 +#: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "خذ لقطة" -#: ../../common/mount.py:195 +#: ../../common/mount.py:204 #, python-format msgid "" "Hash collision occurred in hash_id %s. Incrementing global value " "hash_collision and try again." msgstr "" -#: ../../common/mount.py:246 +#: ../../common/mount.py:259 #, python-format msgid "mountpoint %s not empty." msgstr "" -#: ../../common/mount.py:286 +#: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" -#: ../../common/password.py:425 +#: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" -#: ../../common/snapshots.py:171 ../../gnome/app.py:1127 -#: ../../kde4/app.py:1014 +#: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "الآن" -#: ../../common/snapshots.py:182 ../../gnome/gnometools.py:37 +#: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "بأخطاء" -#: ../../common/snapshots.py:282 +#: ../../common/snapshots.py:344 msgid "" "### This log has been decoded with automatic search pattern\n" "### If some paths are not decoded you can manually decode them with:\n" msgstr "" -#: ../../common/snapshots.py:465 +#: ../../common/snapshots.py:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "فشل" -#: ../../common/snapshots.py:564 +#: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "إستعادة التراخيص:" -#: ../../common/snapshots.py:739 +#: ../../common/snapshots.py:752 ../../qt4/app.py:377 ../../qt4/app.py:675 +#: ../../qt4/app.py:692 ../../qt4/qt4systrayicon.py:65 +msgid "Done" +msgstr "تم" + +#: ../../common/snapshots.py:860 msgid "" "Back In Time changed its backup format.\n" "\n" @@ -381,7 +425,7 @@ "\n" "يمكن نقل لقطات القديمة الخاصة بك وفقاً لِهذه الطريقة الجديدة. مُوافق؟" -#: ../../common/snapshots.py:749 +#: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" @@ -398,7 +442,7 @@ "\n" "(البرنامج سيظلُ قادراً على التمييز بينهُما)" -#: ../../common/snapshots.py:752 +#: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" @@ -406,7 +450,7 @@ "لم يتم العثور على ملفات شخصية. أولاً حَدثّ ملفات الشخصية، ثم أعِد تشغيل باك " "إن تايم من فضلك" -#: ../../common/snapshots.py:803 +#: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" @@ -419,7 +463,7 @@ "cannot continue taking snapshots" msgstr "" -#: ../../common/snapshots.py:812 +#: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" @@ -434,7 +478,7 @@ "بإمكانك نقل اللقطات يدوياً، \n" "إذا انتهيت, أعِد تشغيل باك إن تايم للأستكمال" -#: ../../common/snapshots.py:825 +#: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" @@ -444,7 +488,7 @@ "\n" "باك إن تايم سيستمر بأخذ لقطات مُجدداً كما هو مُجدول" -#: ../../common/snapshots.py:830 +#: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" @@ -464,11 +508,11 @@ "\n" "إذا لم تكن تُريد ذلك, ستُسأل مُجدداً المرة القادمة حينَ تُشغلّ باك إن تايم." -#: ../../common/snapshots.py:839 +#: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "باك إن تايم سيستمر بأخذ لقطات مجدداً كما هو مُجدول" -#: ../../common/snapshots.py:841 +#: ../../common/snapshots.py:953 msgid "" "Back In Time still cannot continue taking new snapshots.\n" "Restart Back In Time to see the questions again" @@ -476,7 +520,11 @@ "باك إن تايم لا يزال غير قادراً على أخذ لقطات جديدة.\n" "أعِد تشغيل باك إن تايم لِترى الأسئلة مجدداً" -#: ../../common/snapshots.py:913 +#: ../../common/snapshots.py:972 +msgid "Deferring backup while on battery" +msgstr "" + +#: ../../common/snapshots.py:1035 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it." @@ -484,7 +532,7 @@ "لا يستطيع إيجاد مُجلد اللقطات.\n" "إذا كان في قرص قابل للإزالة من فضلك وَصْلّهُ." -#: ../../common/snapshots.py:915 +#: ../../common/snapshots.py:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." @@ -495,149 +543,156 @@ msgstr[4] "ينتظر %s ثانية." msgstr[5] "ينتظر %s ثواني." -#: ../../common/snapshots.py:941 +#: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "فشل بأخذ لقطة %s !!!" -#: ../../common/snapshots.py:950 +#: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "يُنْهيّ" -#: ../../common/snapshots.py:1088 +#: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "لا يُمكن إنشاء مُجلد: %s" -#: ../../common/snapshots.py:1107 +#: ../../common/snapshots.py:1217 msgid "..." msgstr "..." -#: ../../common/snapshots.py:1134 +#: ../../common/snapshots.py:1238 +#, python-format +msgid "Found leftover '%s' which can be continued." +msgstr "" + +#: ../../common/snapshots.py:1250 +#, python-format +msgid "Remove leftover '%s' folder from last run" +msgstr "" + +#: ../../common/snapshots.py:1263 #, python-format msgid "Can't remove folder: %s" msgstr "لا يُمكن إزالة مُجلد: %s" -#: ../../common/snapshots.py:1219 +#: ../../common/snapshots.py:1340 #, python-format msgid "Compare with snapshot %s" msgstr "قارن مع لقطة %s" -#: ../../common/snapshots.py:1248 +#: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "انشئ hard-links" -#: ../../common/snapshots.py:1335 +#: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "أحفظ ملف التعديل ..." -#: ../../common/snapshots.py:1341 +#: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "أحفظ ترخيص ..." -#: ../../common/snapshots.py:1442 +#: ../../common/snapshots.py:1470 +msgid "Save permission over ssh failed. Retry normal method" +msgstr "" + +#: ../../common/snapshots.py:1521 #, python-format msgid "Can't rename %(new_path)s to %(path)s" msgstr "" -#: ../../common/snapshots.py:1562 -msgid "Remove old snapshots" -msgstr "أزل اللقطات القديمة" - -#: ../../common/snapshots.py:1586 ../../kde4/settingsdialog.py:501 -#: ../../gnome/settingsdialog.glade:1660 +#: ../../common/snapshots.py:1695 ../../common/snapshots.py:1728 +#: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "إزالة ذكية" -#: ../../common/snapshots.py:1591 +#: ../../common/snapshots.py:1704 +msgid "Remove old snapshots" +msgstr "أزل اللقطات القديمة" + +#: ../../common/snapshots.py:1733 msgid "Try to keep min free space" msgstr "حاول أبقاء حد أدنى من المساحة فارغة" -#: ../../common/snapshots.py:1621 +#: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" -#: ../../common/sshtools.py:106 +#: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "" -#: ../../common/sshtools.py:113 +#: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "" -#: ../../common/sshtools.py:187 -#, python-format -msgid "" -"Failed to unlock SSH private key:\n" -"Error: %s" -msgstr "" - -#: ../../common/sshtools.py:194 +#: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" -#: ../../common/sshtools.py:199 +#: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" -#: ../../common/sshtools.py:217 +#: ../../common/sshtools.py:278 #, python-format msgid "" "Password-less authentication for %(user)s@%(host)s failed. Look at 'man " "backintime' for further instructions." msgstr "" -#: ../../common/sshtools.py:229 +#: ../../common/sshtools.py:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" -#: ../../common/sshtools.py:254 +#: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" -#: ../../common/sshtools.py:274 +#: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" -#: ../../common/sshtools.py:276 +#: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:278 +#: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:280 +#: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" -#: ../../common/sshtools.py:302 +#: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" -#: ../../common/sshtools.py:325 ../../common/sshtools.py:383 +#: ../../common/sshtools.py:423 ../../common/sshtools.py:553 #, python-format msgid "" "Remote host %(host)s doesn't support '%(command)s':\n" @@ -645,7 +700,7 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:387 +#: ../../common/sshtools.py:556 #, python-format msgid "" "Check commands on host %(host)s returned unknown error:\n" @@ -653,96 +708,149 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:400 +#: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "" -#: ../../gnome/app.py:185 ../../gnome/app.py:594 ../../gnome/app.py:608 -#: ../../kde4/app.py:299 ../../kde4/app.py:570 ../../kde4/app.py:587 -msgid "Done" -msgstr "تم" +#: ../../qt4/app.py:81 +msgid "Refresh snapshots list" +msgstr "حدث قائمة اللقطات" + +#: ../../qt4/app.py:85 ../../qt4/app.py:890 +msgid "Snapshot Name" +msgstr "اسم اللقطة" + +#: ../../qt4/app.py:88 +msgid "Remove Snapshot" +msgstr "أزل اللقطة" + +#: ../../qt4/app.py:91 +msgid "View Snapshot Log" +msgstr "عرض سجل اللقطات" + +#: ../../qt4/app.py:94 +msgid "View Last Log" +msgstr "عرض اخر سجل" + +#: ../../qt4/app.py:99 ../../qt4/settingsdialog.py:51 +msgid "Settings" +msgstr "إعدادات" + +#: ../../qt4/app.py:104 +msgid "Shutdown" +msgstr "" -#: ../../gnome/app.py:189 ../../kde4/app.py:143 ../../kde4/app.py:159 -#: ../../gnome/mainwindow.glade:225 +#: ../../qt4/app.py:105 +msgid "Shutdown system after snapshot has finished." +msgstr "" + +#: ../../qt4/app.py:111 +msgid "Exit" +msgstr "أخرج" + +#: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 msgid "Help" msgstr "مُساعدة" -#: ../../gnome/app.py:191 ../../kde4/app.py:146 -#: ../../gnome/mainwindow.glade:223 +#: ../../qt4/app.py:122 +msgid "Config File Help" +msgstr "" + +#: ../../qt4/app.py:125 msgid "Website" msgstr "موقع إلكتروني" -#: ../../gnome/app.py:192 ../../kde4/app.py:148 +#: ../../qt4/app.py:127 ../../qt4/app.py:982 +msgid "Changelog" +msgstr "" + +#: ../../qt4/app.py:129 msgid "FAQ" msgstr "الأسئلة الأكثر شيوعاً" -#: ../../gnome/app.py:193 ../../kde4/app.py:150 +#: ../../qt4/app.py:131 msgid "Ask a question" msgstr "إسأل سُؤالاً" -#: ../../gnome/app.py:194 ../../kde4/app.py:152 +#: ../../qt4/app.py:133 msgid "Report a bug" msgstr "بلّغ عن عِلة" -#: ../../gnome/app.py:196 ../../kde4/app.py:155 +#: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "عنْ" -#: ../../gnome/app.py:202 ../../gnome/app.py:887 -#: ../../gnome/restoredialog.py:84 ../../gnome/snapshotsdialog.py:83 -#: ../../gnome/snapshotsdialog.py:244 ../../kde4/app.py:206 -#: ../../kde4/app.py:216 ../../kde4/restoredialog.py:68 -#: ../../kde4/snapshotsdialog.py:111 ../../kde4/snapshotsdialog.py:117 -#: ../../gnome/mainwindow.glade:350 ../../gnome/mainwindow.glade:352 -#: ../../gnome/snapshotsdialog.glade:169 ../../gnome/snapshotsdialog.glade:171 +#: ../../qt4/app.py:163 +msgid "Up" +msgstr "أعلى" + +#: ../../qt4/app.py:174 ../../qt4/settingsdialog.py:1776 +msgid "Show hidden files" +msgstr "أظهر الملفات المخفيّة" + +#: ../../qt4/app.py:184 ../../qt4/app.py:199 ../../qt4/app.py:233 +#: ../../qt4/restoredialog.py:62 ../../qt4/settingsdialog.py:1818 +#: ../../qt4/snapshotsdialog.py:134 ../../qt4/snapshotsdialog.py:139 msgid "Restore" msgstr "إسترجع" -#: ../../gnome/app.py:203 ../../gnome/app.py:888 ../../gnome/gnometools.py:67 -#: ../../gnome/snapshotsdialog.py:84 ../../gnome/snapshotsdialog.py:245 -#: ../../kde4/app.py:208 ../../kde4/restoredialog.py:42 -#: ../../kde4/snapshotsdialog.py:113 +#: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 +#: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "إسترجع إلى ..." -#: ../../gnome/app.py:205 ../../gnome/app.py:896 ../../gnome/app.py:1146 -#: ../../kde4/app.py:1041 -#, python-format -msgid "Restore '%s'" -msgstr "إسترجع '%s'" +#: ../../qt4/app.py:194 +msgid "Restore and delete new files" +msgstr "" -#: ../../gnome/app.py:207 ../../gnome/app.py:897 ../../gnome/app.py:1147 -#: ../../kde4/app.py:1042 +#: ../../qt4/app.py:201 #, python-format -msgid "Restore '%s' to ..." -msgstr "إسترجع '%s' إلى ..." +msgid "" +"Restore selected file or folder.\n" +"If this button is grayed out this is most likely because \"%(now)s\" is " +"selected in left hand snapshots list." +msgstr "" -#: ../../gnome/app.py:226 ../../kde4/app.py:235 +#: ../../qt4/app.py:206 ../../qt4/logviewdialog.py:67 +#: ../../qt4/qt4tools.py:160 ../../qt4/snapshotsdialog.py:96 +msgid "Snapshots" +msgstr "لقطات" + +#: ../../qt4/app.py:213 +msgid "Snapshot" +msgstr "" + +#: ../../qt4/app.py:224 +msgid "View" +msgstr "" + +#: ../../qt4/app.py:277 msgid "Shortcuts" msgstr "إختصارات" -#: ../../gnome/app.py:249 -msgid "Name" -msgstr "أسم" - -#: ../../gnome/app.py:260 -msgid "Size" -msgstr "حجم" - -#: ../../gnome/app.py:267 -msgid "Date" -msgstr "تاريخ" - -#: ../../gnome/app.py:286 ../../gnome/app.py:883 -#: ../../gnome/snapshotsdialog.py:116 ../../kde4/app.py:171 -#: ../../kde4/app.py:221 ../../kde4/snapshotsdialog.py:91 -#: ../../gnome/mainwindow.glade:366 ../../gnome/mainwindow.glade:368 -#: ../../gnome/snapshotsdialog.glade:8 -msgid "Snapshots" -msgstr "لقطات" +#: ../../qt4/app.py:295 +msgid "" +"This folder doesn't exist\n" +"in the current selected snapshot!" +msgstr "" + +#: ../../qt4/app.py:359 +msgid "Add to Include" +msgstr "" + +#: ../../qt4/app.py:360 +msgid "Add to Exclude" +msgstr "" -#: ../../gnome/app.py:348 ../../kde4/app.py:362 +#: ../../qt4/app.py:416 +#, python-format +msgid "" +"%(appName)s is not configured. Would you like to restore a previous " +"configuration?" +msgstr "" + +#: ../../qt4/app.py:440 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it and then press OK" @@ -750,733 +858,794 @@ "لا يُمكن إيجاد مُجلد اللقطات.\n" "إذا كان على قرص قابل للإزالة من فضلك وَصْلّهُ ومن ثم أضغط موافق" -#: ../../gnome/app.py:611 ../../kde4/app.py:590 -msgid "Done, no backup needed" -msgstr "تم، لا حاجة للنسخ الاحتياطي" +#: ../../qt4/app.py:473 +msgid "" +"If you close this window Back In Time will not be able to shutdown your " +"system when the snapshot has finished.\n" +"Do you really want to close?" +msgstr "" -#: ../../gnome/app.py:619 ../../kde4/app.py:598 +#: ../../qt4/app.py:667 ../../qt4/app.py:703 msgid "Working:" msgstr "يعمل:" -#: ../../gnome/app.py:623 ../../kde4/app.py:602 +#: ../../qt4/app.py:695 +msgid "Done, no backup needed" +msgstr "تم، لا حاجة للنسخ الاحتياطي" + +#: ../../qt4/app.py:707 msgid "Error:" msgstr "خطأ:" -#: ../../gnome/app.py:636 ../../kde4/app.py:649 +#: ../../qt4/app.py:726 ../../qt4/qt4systrayicon.py:153 +msgid "Sent:" +msgstr "" + +#: ../../qt4/app.py:727 ../../qt4/qt4systrayicon.py:154 +msgid "Speed:" +msgstr "" + +#: ../../qt4/app.py:728 ../../qt4/qt4systrayicon.py:155 +msgid "ETA:" +msgstr "" + +#: ../../qt4/app.py:777 msgid "Global" msgstr "عام" -#: ../../gnome/app.py:637 ../../kde4/app.py:650 +#: ../../qt4/app.py:778 msgid "Root" msgstr "جذر" -#: ../../gnome/app.py:638 ../../kde4/app.py:651 +#: ../../qt4/app.py:779 msgid "Home" msgstr "Home" -#: ../../gnome/app.py:662 -msgid "Bookmarks" -msgstr "العلامات" - -#: ../../gnome/app.py:675 ../../kde4/app.py:662 +#: ../../qt4/app.py:794 msgid "Backup folders" msgstr "مجلدات النسخ الاحتياطي" -#: ../../gnome/app.py:701 ../../kde4/app.py:734 -msgid "Today" -msgstr "اليوم" +#: ../../qt4/app.py:849 +msgid "This is NOT a snapshot but a live view of your local files" +msgstr "" -#: ../../gnome/app.py:705 ../../kde4/app.py:738 -msgid "Yesterday" -msgstr "البارحة" +#: ../../qt4/app.py:860 ../../qt4/app.py:1476 +#, python-format +msgid "Last check %s" +msgstr "" -#: ../../gnome/app.py:709 ../../kde4/app.py:742 -msgid "This week" -msgstr "هذا الأسبوع" +#: ../../qt4/app.py:928 +#, python-format +msgid "" +"Are you sure you want to remove the snapshot:\n" +"%s" +msgstr "" +"هل أنت مُتأكد بأنك تُريد إزالة اللقطة:\n" +"%s" -#: ../../gnome/app.py:713 ../../kde4/app.py:746 -msgid "Last week" -msgstr "الأسبوع الماضي" +#: ../../qt4/app.py:1004 +#, python-format +msgid "" +"Backup local files before overwriting or\n" +"removing with trailing '%(suffix)s'." +msgstr "" -#: ../../gnome/app.py:764 ../../kde4/app.py:398 +#: ../../qt4/app.py:1010 msgid "" -"If you close this window Back In Time will not be able to shutdown your " -"system when the snapshot has finished.\n" -"Do you really want to close?" +"Are you sure you want to remove all newer files in your original folder?" msgstr "" -#: ../../gnome/app.py:881 ../../gnome/snapshotsdialog.py:238 -msgid "Open" -msgstr "افتح" +#: ../../qt4/app.py:1014 +msgid "" +"WARNING: deleting files in filesystem root could break your whole system!!!" +msgstr "" -#: ../../gnome/app.py:1056 ../../kde4/app.py:90 ../../kde4/app.py:805 -#: ../../gnome/mainwindow.glade:73 ../../gnome/mainwindow.glade:75 -msgid "Snapshot Name" -msgstr "اسم اللقطة" +#: ../../qt4/app.py:1016 +msgid "Files to be restored:" +msgstr "" -#: ../../gnome/app.py:1075 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +#: ../../qt4/app.py:1031 +msgid "Do you really want to restore this files(s):" msgstr "" -"هل أنت مُتأكد بأنك تُريد إزالة اللقطة:\n" -"%s" -#: ../../gnome/app.py:1123 ../../kde4/app.py:1010 +#: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "لقطة: %s" -#: ../../gnome/app.py:1124 ../../kde4/app.py:1011 +#: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "أعرض اللقطة المُعِدة في %s" -#: ../../gnome/app.py:1126 ../../kde4/app.py:1013 +#: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "أعرض مُحتوى القرص الحالي" -#: ../../gnome/logviewdialog.py:106 ../../gnome/settingsdialog.py:414 -#: ../../kde4/logviewdialog.py:83 ../../kde4/settingsdialog.py:590 -msgid "All" -msgstr "كل" +#: ../../qt4/app.py:1268 +#, python-format +msgid "Restore '%s'" +msgstr "إسترجع '%s'" -#: ../../gnome/logviewdialog.py:107 ../../gnome/settingsdialog.py:412 -#: ../../kde4/logviewdialog.py:84 ../../kde4/settingsdialog.py:588 -msgid "Errors" -msgstr "أخطاء" +#: ../../qt4/app.py:1269 +#, python-format +msgid "Restore '%s' to ..." +msgstr "إسترجع '%s' إلى ..." -#: ../../gnome/logviewdialog.py:112 ../../kde4/logviewdialog.py:89 -msgid "Changes" -msgstr "تغييرات" +#: ../../qt4/app.py:1270 +#, python-format +msgid "Restore '%s' and delete new files" +msgstr "" -#: ../../gnome/logviewdialog.py:115 ../../kde4/logviewdialog.py:92 -msgid "Informations" -msgstr "معلومات" +#: ../../qt4/app.py:1368 ../../qt4/app.py:1385 +msgid "Authors" +msgstr "" -#: ../../gnome/settingsdialog.py:235 ../../kde4/settingsdialog.py:387 -msgid "Include files and folders" -msgstr "ضمْن ملفات ومُجلدات" +#: ../../qt4/app.py:1369 ../../qt4/app.py:1388 +msgid "Translations" +msgstr "" -#: ../../gnome/settingsdialog.py:264 -msgid "Exclude patterns, files or folders" -msgstr "إستثني الأنماط, ملفات أو مُجلدات" +#: ../../qt4/app.py:1370 ../../qt4/app.py:1391 +msgid "License" +msgstr "" -#: ../../gnome/settingsdialog.py:411 ../../kde4/settingsdialog.py:587 -msgid "None" -msgstr "لا شيء" +#: ../../qt4/logviewdialog.py:49 +msgid "Last Log View" +msgstr "" -#: ../../gnome/settingsdialog.py:413 ../../kde4/settingsdialog.py:589 -msgid "Changes & Errors" -msgstr "تغييرات & أخطاء" - -#: ../../gnome/settingsdialog.py:458 -msgid "Snapshots folder" -msgstr "مُجلد اللقطات" - -#: ../../gnome/settingsdialog.py:466 ../../kde4/settingsdialog.py:1314 -msgid "Are you sure you want to change snapshots folder ?" -msgstr "هل أنت مُتأكد بأنك تُريد تغيير مُجلد اللقطات ؟" - -#: ../../gnome/settingsdialog.py:901 ../../kde4/settingsdialog.py:914 -msgid "" -"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " -"*/3 for periodic backups every 3 hours" +#: ../../qt4/logviewdialog.py:51 +msgid "Snapshot Log View" msgstr "" -#: ../../gnome/settingsdialog.py:1141 ../../kde4/settingsdialog.py:653 -msgid "New profile" -msgstr "ملف شخصي جديد" - -#: ../../gnome/settingsdialog.py:1155 ../../kde4/settingsdialog.py:669 -msgid "Rename profile" -msgstr "أعِد تسمية الملف الشخصي" - -#: ../../gnome/settingsdialog.py:1167 ../../kde4/settingsdialog.py:683 -#, python-format -msgid "Are you sure you want to delete the profile \"%s\" ?" -msgstr "هل أنت مُتأكد بأنك تُريد حذف ملف الشخصي \"%s\" ؟" - -#: ../../gnome/settingsdialog.py:1173 ../../kde4/settingsdialog.py:1292 -msgid "Include folder" -msgstr "ضمْن مُجلد" - -#: ../../gnome/settingsdialog.py:1193 ../../kde4/settingsdialog.py:1278 -msgid "Include file" -msgstr "ضمْن ملف" - -#: ../../gnome/settingsdialog.py:1235 ../../kde4/settingsdialog.py:1241 -msgid "Exclude pattern" -msgstr "إستثني نمط" - -#: ../../gnome/settingsdialog.py:1240 ../../kde4/settingsdialog.py:1251 -msgid "Exclude patterns can't contain ':' char !" -msgstr "إستثني الأنماط التي لا يُمكِنُها إحتواءَ حرف ':' !" +#: ../../qt4/logviewdialog.py:59 ../../qt4/settingsdialog.py:59 +#: ../../qt4/settingsdialog.py:274 ../../qt4/settingsdialog.py:1899 +msgid "Profile:" +msgstr "ملف شخصي:" -#: ../../gnome/settingsdialog.py:1246 ../../kde4/settingsdialog.py:1257 -msgid "Exclude file" -msgstr "إستثني ملف" +#: ../../qt4/logviewdialog.py:81 +msgid "Filter:" +msgstr "مُرَشِح:" -#: ../../gnome/settingsdialog.py:1257 ../../kde4/settingsdialog.py:1261 -msgid "Exclude folder" -msgstr "إستثني مُجلد" +#: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 +msgid "All" +msgstr "كل" -#: ../../gnome/snapshotsdialog.py:240 -msgid "Jump to" -msgstr "أنتقل إلى" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 +#: ../../qt4/settingsdialog.py:657 +msgid "Errors" +msgstr "أخطاء" -#: ../../gnome/snapshotsdialog.py:248 ../../kde4/snapshotsdialog.py:164 -msgid "Diff" -msgstr "فرق" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 +msgid "Changes" +msgstr "تغييرات" -#: ../../gnome/snapshotsdialog.py:277 ../../kde4/snapshotsdialog.py:339 -msgid "You can't compare a snapshot to itself" -msgstr "لا تستطيع مُقارنة اللقطة بنفسها" +#: ../../qt4/logviewdialog.py:92 +msgid "Informations" +msgstr "معلومات" -#: ../../gnome/snapshotsdialog.py:284 ../../kde4/snapshotsdialog.py:346 -#, python-format -msgid "Command not found: %s" -msgstr "الأمر لم يُعثر عليه: %s" +#: ../../qt4/logviewdialog.py:101 +msgid "[E] Error, [I] Information, [C] Change" +msgstr "[E] خطأ، [I] معلومات، [C] غيّر" -#: ../../gnome/snapshotsdialog.py:307 ../../kde4/snapshotsdialog.py:367 -#, python-format -msgid "" -"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" +#: ../../qt4/logviewdialog.py:104 +msgid "decode paths" msgstr "" -#: ../../gnome/snapshotsdialog.py:310 ../../kde4/snapshotsdialog.py:370 -#, python-format -msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +#: ../../qt4/messagebox.py:56 +msgid "Error" msgstr "" -#: ../../gnome/snapshotsdialog.py:312 ../../kde4/snapshotsdialog.py:372 -msgid "WARNING: This can not be revoked!" +#: ../../qt4/messagebox.py:62 ../../qt4/messagebox.py:68 +msgid "Question" msgstr "" -#: ../../gnome/snapshotsdialog.py:317 ../../kde4/snapshotsdialog.py:377 -#, python-format -msgid "Exclude \"%s\" from future snapshots?" +#: ../../qt4/qt4systrayicon.py:69 +msgid "Start BackInTime" msgstr "" -#: ../../kde4/app.py:86 ../../gnome/mainwindow.glade:58 -#: ../../gnome/mainwindow.glade:60 -msgid "Refresh snapshots list" -msgstr "حدث قائمة اللقطات" +#: ../../qt4/qt4systrayicon.py:124 +msgid "Working..." +msgstr "يعمل..." -#: ../../kde4/app.py:94 ../../gnome/mainwindow.glade:88 -#: ../../gnome/mainwindow.glade:90 -msgid "Remove Snapshot" -msgstr "أزل اللقطة" +#: ../../qt4/qt4tools.py:178 +msgid "Today" +msgstr "اليوم" -#: ../../kde4/app.py:98 ../../gnome/mainwindow.glade:105 -msgid "View Snapshot Log" -msgstr "عرض سجل اللقطات" +#: ../../qt4/qt4tools.py:183 +msgid "Yesterday" +msgstr "البارحة" -#: ../../kde4/app.py:102 ../../gnome/mainwindow.glade:121 -msgid "View Last Log" -msgstr "عرض اخر سجل" +#: ../../qt4/qt4tools.py:188 +msgid "This week" +msgstr "هذا الأسبوع" -#: ../../kde4/app.py:108 ../../kde4/settingsdialog.py:69 -#: ../../gnome/mainwindow.glade:144 ../../gnome/mainwindow.glade:146 -#: ../../gnome/settingsdialog.glade:7 -msgid "Settings" -msgstr "إعدادات" +#: ../../qt4/qt4tools.py:193 +msgid "Last week" +msgstr "الأسبوع الماضي" -#: ../../kde4/app.py:124 ../../gnome/mainwindow.glade:169 -msgid "Shutdown system after snapshot has finished." +#: ../../qt4/restoredialog.py:75 +msgid "Show full Log" msgstr "" -#: ../../kde4/app.py:131 ../../gnome/mainwindow.glade:184 -#: ../../gnome/mainwindow.glade:186 -msgid "Exit" -msgstr "أخرج" - -#: ../../kde4/app.py:186 ../../gnome/mainwindow.glade:289 -msgid "Up" -msgstr "أعلى" - -#: ../../kde4/app.py:199 ../../gnome/mainwindow.glade:325 -msgid "Show hidden files" -msgstr "أظهر الملفات المخفيّة" +#: ../../qt4/settingsdialog.py:68 +msgid "Edit" +msgstr "تعديل" -#: ../../kde4/app.py:244 -msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +#: ../../qt4/settingsdialog.py:73 +msgid "Modify for Full System Backup" msgstr "" -"هذا المُجلد لا وجود له\n" -"في اللقطة الحالية !" -#: ../../kde4/app.py:839 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +#: ../../qt4/settingsdialog.py:77 ../../qt4/settingsdialog.py:451 +msgid "Add" msgstr "" -"هل أنت مُتأكد بأنك تُريد إزالة اللقطة:\n" -"%s" -#: ../../kde4/app.py:1140 ../../kde4/kde4systrayicon.py:117 -msgid "Working..." -msgstr "يعمل..." - -#: ../../kde4/logviewdialog.py:55 -msgid "Error Log View" -msgstr "خطأ في عرض السجل" - -#: ../../kde4/logviewdialog.py:65 ../../kde4/settingsdialog.py:79 -#: ../../kde4/settingsdialog.py:293 ../../gnome/logviewdialog.glade:73 -#: ../../gnome/settingsdialog.glade:72 -msgid "Profile:" -msgstr "ملف شخصي:" - -#: ../../kde4/logviewdialog.py:77 ../../gnome/logviewdialog.glade:110 -msgid "Filter:" -msgstr "مُرَشِح:" - -#: ../../kde4/logviewdialog.py:100 ../../gnome/logviewdialog.glade:169 -msgid "[E] Error, [I] Information, [C] Change" -msgstr "[E] خطأ، [I] معلومات، [C] غيّر" - -#: ../../kde4/logviewdialog.py:103 ../../gnome/logviewdialog.glade:195 -msgid "decode paths" +#: ../../qt4/settingsdialog.py:81 ../../qt4/settingsdialog.py:408 +#: ../../qt4/settingsdialog.py:467 +msgid "Remove" msgstr "" -#: ../../kde4/settingsdialog.py:88 -msgid "Edit" -msgstr "تعديل" - -#: ../../kde4/settingsdialog.py:106 ../../gnome/settingsdialog.glade:1207 +#: ../../qt4/settingsdialog.py:96 msgid "General" msgstr "عام" -#: ../../kde4/settingsdialog.py:114 ../../gnome/settingsdialog.glade:199 +#: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "" -#: ../../kde4/settingsdialog.py:127 ../../kde4/settingsdialog.py:1311 +#: ../../qt4/settingsdialog.py:119 +#, python-format +msgid "" +"Warning: %(app)s uses EncFS for encryption. A recent security audit " +"revealed several possible attack vectors for this. Please take a look at 'A " +"NOTE ON SECURITY' in 'man backintime'." +msgstr "" + +#: ../../qt4/settingsdialog.py:129 ../../qt4/settingsdialog.py:1568 msgid "Where to save snapshots" msgstr "أين سيتم حفظ اللقطات" -#: ../../kde4/settingsdialog.py:146 +#: ../../qt4/settingsdialog.py:145 +msgid "Folder" +msgstr "" + +#: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" -#: ../../kde4/settingsdialog.py:158 ../../kde4/settingsdialog.py:283 -#: ../../gnome/settingsdialog.glade:323 ../../gnome/settingsdialog.glade:583 -#: ../../gnome/settingsdialog.glade:874 +#: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "المُضيف:" -#: ../../kde4/settingsdialog.py:163 ../../gnome/settingsdialog.glade:350 -#: ../../gnome/settingsdialog.glade:610 +#: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "" -#: ../../kde4/settingsdialog.py:168 ../../kde4/settingsdialog.py:288 -#: ../../gnome/settingsdialog.glade:377 ../../gnome/settingsdialog.glade:637 -#: ../../gnome/settingsdialog.glade:902 +#: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "مستخدم:" -#: ../../kde4/settingsdialog.py:173 ../../gnome/settingsdialog.glade:416 +#: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" -#: ../../kde4/settingsdialog.py:178 ../../gnome/settingsdialog.glade:459 +#: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" -#: ../../kde4/settingsdialog.py:184 +#: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "" -#: ../../kde4/settingsdialog.py:228 ../../kde4/settingsdialog.py:237 -#: ../../kde4/settingsdialog.py:243 ../../gnome/settingsdialog.glade:703 -#: ../../gnome/settingsdialog.glade:743 +#: ../../qt4/settingsdialog.py:201 +msgid "Key File" +msgstr "" + +#: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 +#: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "" -#: ../../kde4/settingsdialog.py:249 ../../gnome/settingsdialog.glade:775 +#: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" -#: ../../kde4/settingsdialog.py:252 ../../gnome/settingsdialog.glade:792 +#: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" -#: ../../kde4/settingsdialog.py:264 ../../gnome/settingsdialog.glade:968 +#: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "مُتقدم" -#: ../../kde4/settingsdialog.py:276 ../../gnome/settingsdialog.glade:848 -msgid "Auto Host / User / Profile Id" -msgstr "Auto Host / User / Profile Id" +#: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 +msgid "Full snapshot path: " +msgstr "" -#: ../../kde4/settingsdialog.py:301 +#: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "جدول" -#: ../../kde4/settingsdialog.py:311 ../../gnome/settingsdialog.glade:1092 +#: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "يوم:" -#: ../../kde4/settingsdialog.py:322 ../../gnome/settingsdialog.glade:1079 +#: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "يوم الأسبوع:" -#: ../../kde4/settingsdialog.py:333 ../../gnome/settingsdialog.glade:1066 +#: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "ساعة:" -#: ../../kde4/settingsdialog.py:344 ../../gnome/settingsdialog.glade:1053 +#: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "ساعات:" -#: ../../kde4/settingsdialog.py:353 ../../gnome/settingsdialog.glade:1014 +#: ../../qt4/settingsdialog.py:339 msgid "" -"Run Back In Time periodically with anacron. This is useful if the computer " -"is not running regular." +"Run Back In Time repeatedly. This is useful if the computer is not running " +"regular." msgstr "" -#: ../../kde4/settingsdialog.py:357 ../../gnome/settingsdialog.glade:1040 -msgid "Frequency in days:" +#: ../../qt4/settingsdialog.py:344 +msgid "Every:" msgstr "" -#: ../../kde4/settingsdialog.py:368 ../../gnome/settingsdialog.glade:1026 +#: ../../qt4/settingsdialog.py:362 msgid "" "Run Back In Time as soon as the drive is connected (only once every X " "days).\n" "You will be prompted for your sudo password." msgstr "" -#: ../../kde4/settingsdialog.py:379 ../../gnome/settingsdialog.glade:1310 +#: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "ضمْن" -#: ../../kde4/settingsdialog.py:403 ../../kde4/settingsdialog.py:445 -#: ../../gnome/settingsdialog.glade:1411 +#: ../../qt4/settingsdialog.py:381 +msgid "Include files and folders" +msgstr "ضمْن ملفات ومُجلدات" + +#: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "أضف ملف" -#: ../../kde4/settingsdialog.py:408 ../../kde4/settingsdialog.py:450 -#: ../../gnome/settingsdialog.glade:1427 +#: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "أضف مُجلد" -#: ../../kde4/settingsdialog.py:418 ../../gnome/settingsdialog.glade:1474 +#: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "أستثني" -#: ../../kde4/settingsdialog.py:421 ../../gnome/settingsdialog.glade:1328 +#: ../../qt4/settingsdialog.py:417 msgid "" "Warning: Wildcards ('foo*', '[fF]oo', 'fo?') will be ignored with " "mode 'SSH encrypted'.\n" "Only separate asterisk are allowed ('foo/*', 'foo/**/bar')" msgstr "" -#: ../../kde4/settingsdialog.py:430 +#: ../../qt4/settingsdialog.py:425 +msgid "Exclude patterns, files or folders" +msgstr "إستثني الأنماط, ملفات أو مُجلدات" + +#: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "مُوصى بشدة:" -#: ../../kde4/settingsdialog.py:460 ../../gnome/settingsdialog.glade:1905 +#: ../../qt4/settingsdialog.py:463 +msgid "Add default" +msgstr "" + +#: ../../qt4/settingsdialog.py:474 +msgid "Exclude files bigger than: " +msgstr "" + +#: ../../qt4/settingsdialog.py:475 +#, python-format +msgid "" +"Exclude files bigger than value in %(prefix)s.\n" +"With 'Full rsync mode' disabled this will only affect new files\n" +"because for rsync this is a transfer option, not an exclude option.\n" +"So big files that has been backed up before will remain in snapshots\n" +"even if they had changed." +msgstr "" + +#: ../../qt4/settingsdialog.py:493 msgid "Auto-remove" msgstr "إزالة-تلقائية" -#: ../../kde4/settingsdialog.py:464 ../../gnome/settingsdialog.glade:1608 +#: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "أقدم من:" -#: ../../kde4/settingsdialog.py:478 ../../gnome/settingsdialog.glade:1624 +#: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "إذا كانت المساحة الفارغة أقل من:" -#: ../../kde4/settingsdialog.py:490 ../../gnome/settingsdialog.glade:1642 +#: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" -#: ../../kde4/settingsdialog.py:514 ../../gnome/settingsdialog.glade:1697 +#: ../../qt4/settingsdialog.py:551 +msgid "Run in background on remote Host." +msgstr "" + +#: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "أبقي كل اللقطات حتى نهاية" -#: ../../kde4/settingsdialog.py:517 ../../kde4/settingsdialog.py:522 -#: ../../gnome/settingsdialog.glade:1705 ../../gnome/settingsdialog.glade:1729 +#: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "يوم (أيّام)" -#: ../../kde4/settingsdialog.py:519 ../../gnome/settingsdialog.glade:1717 +#: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "أبقي لقطة واحدة ليوم واحد حتى النهاية" -#: ../../kde4/settingsdialog.py:524 ../../gnome/settingsdialog.glade:1743 +#: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "أبقي لقطة واحدة للأسبوع حتى النهاية" -#: ../../kde4/settingsdialog.py:527 +#: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "أسبوع(أسابيع)" -#: ../../kde4/settingsdialog.py:529 ../../gnome/settingsdialog.glade:1769 +#: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "أبقي لقطة واحدة لكل شهر حتى النهاية" -#: ../../kde4/settingsdialog.py:532 ../../gnome/settingsdialog.glade:1781 +#: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "شهر(أشهر)" -#: ../../kde4/settingsdialog.py:534 ../../gnome/settingsdialog.glade:1795 +#: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "أبقي لقطة واحدة للسنة وهكذا لكل السنين" -#: ../../kde4/settingsdialog.py:537 ../../gnome/settingsdialog.glade:1496 +#: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "لا تُزيل اللقطات المُسماّة" -#: ../../kde4/settingsdialog.py:546 ../../gnome/settingsdialog.glade:2104 +#: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "خيارات" -#: ../../kde4/settingsdialog.py:549 ../../gnome/settingsdialog.glade:1920 +#: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "فَعْلّ التنبيهات" -#: ../../kde4/settingsdialog.py:552 ../../gnome/settingsdialog.glade:1937 +#: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "عطلّ اللقطات عندما تعمل بالجهاز على البطارية" -#: ../../kde4/settingsdialog.py:555 +#: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" msgstr "حالة الطاقة غير متوفرة من النظام" -#: ../../kde4/settingsdialog.py:558 ../../gnome/settingsdialog.glade:1955 -msgid "Backup files on restore" -msgstr "نسخ إحتياطي عند الإسترجاع" +#: ../../qt4/settingsdialog.py:611 +msgid "Run only one snapshot at a time" +msgstr "" + +#: ../../qt4/settingsdialog.py:612 +msgid "" +"Other snapshots will be blocked until the current snapshot is done.\n" +"This is a global option. So it will effect all profiles for this user.\n" +"But you need to activate this for all other users, too." +msgstr "" + +#: ../../qt4/settingsdialog.py:617 +msgid "Backup replaced files on restore" +msgstr "" + +#: ../../qt4/settingsdialog.py:618 +#, python-format +msgid "" +"Newer versions of files will be renamed with trailing '%(suffix)s' before " +"restoring.\n" +"If you don't need them anymore you can remove them with '%(cmd)s'" +msgstr "" -#: ../../kde4/settingsdialog.py:561 ../../gnome/settingsdialog.glade:1972 +#: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "أستمر عند الأخطاء (أبقي اللقطات الغير مُكتملة)" -#: ../../kde4/settingsdialog.py:564 ../../gnome/settingsdialog.glade:1989 +#: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "أستخدم تدقيق المجموع لِكشف التغيُّرات" -#: ../../kde4/settingsdialog.py:567 ../../gnome/settingsdialog.glade:2006 +#: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "وضع التزَامُنْ المُتكامل. قد يكون أسرع ولكن:" -#: ../../kde4/settingsdialog.py:568 ../../gnome/settingsdialog.glade:2032 +#: ../../qt4/settingsdialog.py:634 msgid "" -"- snapshots are no read-only\n" -"- destination file-system must support all linux attributes (dates, rights, " +"- snapshots are not read-only\n" +"- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" "- اللقطات ليست read-only\n" -"- الوجهة file-system يجب أن تدعم جميع الخصائص (تواريخ, حقوق, مستخدم, مجموعة " -"...)" +"- الوجهة file-system يجب أن تدعم جميع الخصائص (تواريخ, حقوق, مستخدم, " +"مجموعة...)" -#: ../../kde4/settingsdialog.py:575 ../../gnome/settingsdialog.glade:2045 +#: ../../qt4/settingsdialog.py:641 +msgid "Take a new snapshot regardless of there were changes or not." +msgstr "" + +#: ../../qt4/settingsdialog.py:644 msgid "Check for changes (don't take a new snapshot if nothing changed)" msgstr "تفحص من وجود تغييرات (لا تأخذ لقطات جديدة إذا لم يتغير شيء)" -#: ../../kde4/settingsdialog.py:582 +#: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "مستوي السجل:" -#: ../../kde4/settingsdialog.py:597 ../../gnome/settingsdialog.glade:2366 -msgid "Expert Options" -msgstr "خيارات الخبراء" +#: ../../qt4/settingsdialog.py:656 +msgid "None" +msgstr "لا شيء" + +#: ../../qt4/settingsdialog.py:658 +msgid "Changes & Errors" +msgstr "تغييرات & أخطاء" -#: ../../kde4/settingsdialog.py:600 +#: ../../qt4/settingsdialog.py:674 msgid "Change these options only if you really know what you are doing !" msgstr "غيّر هذه الخيارات فقط عندما تكون واثق مما تفعله !" -#: ../../kde4/settingsdialog.py:608 ../../gnome/settingsdialog.glade:2133 -msgid "Run 'nice' as cron job (default: enabled)" -msgstr "شغلّ 'nice' كوظيفة cron (أفتراضياً: مُفَعَلّ)" +#: ../../qt4/settingsdialog.py:678 +msgid "Run 'nice':" +msgstr "" + +#: ../../qt4/settingsdialog.py:684 ../../qt4/settingsdialog.py:696 +msgid "as cron job" +msgstr "" + +#: ../../qt4/settingsdialog.py:687 ../../qt4/settingsdialog.py:702 +#: ../../qt4/settingsdialog.py:716 +msgid "on remote host" +msgstr "" + +#: ../../qt4/settingsdialog.py:690 +msgid "Run 'ionice':" +msgstr "" + +#: ../../qt4/settingsdialog.py:699 +msgid "when taking a manual snapshot" +msgstr "" -#: ../../kde4/settingsdialog.py:611 ../../gnome/settingsdialog.glade:2150 -msgid "Run 'ionice' as cron job (default: enabled)" -msgstr "شغلّ 'ionice' كوظيفة cron (أفتراضياً: مُفَعَلّ)" +#: ../../qt4/settingsdialog.py:706 +msgid "Run 'rsync' with 'nocache':" +msgstr "" -#: ../../kde4/settingsdialog.py:614 ../../gnome/settingsdialog.glade:2167 -msgid "Run 'ionice' when taking a manual snapshot (default: disabled)" -msgstr "شغلّ 'ionice' عندما تأخذ لقطة يدوياً (أفتراضياً: مُعَطلّ)" +#: ../../qt4/settingsdialog.py:712 +msgid "on local machine" +msgstr "" -#: ../../kde4/settingsdialog.py:617 ../../gnome/settingsdialog.glade:2184 -msgid "Run 'nice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:719 +msgid "Redirect stdout to /dev/null in cronjobs." msgstr "" -#: ../../kde4/settingsdialog.py:620 ../../gnome/settingsdialog.glade:2201 -msgid "Run 'ionice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:725 +msgid "Redirect stderr to /dev/null in cronjobs." msgstr "" -#: ../../kde4/settingsdialog.py:626 ../../gnome/settingsdialog.glade:2224 +#: ../../qt4/settingsdialog.py:734 msgid "Limit rsync bandwidth usage: " msgstr "" -#: ../../kde4/settingsdialog.py:629 ../../gnome/settingsdialog.glade:2259 +#: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" -#: ../../kde4/settingsdialog.py:634 ../../gnome/settingsdialog.glade:2280 +#: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "حِفاظ ACL" -#: ../../kde4/settingsdialog.py:637 ../../gnome/settingsdialog.glade:2297 +#: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "المُحافظة على الصفات المُوسعة (xattr)" -#: ../../kde4/settingsdialog.py:640 ../../gnome/settingsdialog.glade:2314 +#: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute links)" msgstr "أنسخ الروابط الغير الآمنة (تعمل فقط مع الروابط الأساسية)" -#: ../../kde4/settingsdialog.py:643 ../../gnome/settingsdialog.glade:2331 -msgid "Copy links (dereference symbolic links)" -msgstr "نسخ الروابط (احصل علي محتوي العنوان الرمزي)" +#: ../../qt4/settingsdialog.py:834 +msgid "Paste additional options to rsync" +msgstr "" -#: ../../kde4/snapshotsdialog.py:46 ../../kde4/snapshotsdialog.py:173 -#: ../../gnome/snapshotsdialog.glade:385 -msgid "Diff Options" -msgstr "خيارات الاختلافات" +#: ../../qt4/settingsdialog.py:837 +msgid "" +"Options must be quoted e.g. --exclude-from=\"/path/to/my exclude file\"." +msgstr "" -#: ../../kde4/snapshotsdialog.py:56 ../../gnome/snapshotsdialog.glade:314 -msgid "Command:" -msgstr "الأمر :" +#: ../../qt4/settingsdialog.py:847 +msgid "Add prefix to SSH commands" +msgstr "" -#: ../../kde4/snapshotsdialog.py:60 ../../gnome/snapshotsdialog.glade:322 -msgid "Parameters:" -msgstr "الموسطات:" +#: ../../qt4/settingsdialog.py:850 +#, python-format +msgid "" +"Prefix to run before every command on remote host.\n" +"Variables need to be escaped with \\$FOO.\n" +"This doesn't touch rsync. So to add a prefix\n" +"for rsync use \"%(cb_rsync_options)s\" with\n" +"%(rsync_options_value)s\n" +"\n" +"%(default)s: %(def_value)s" +msgstr "" -#: ../../kde4/snapshotsdialog.py:64 ../../gnome/snapshotsdialog.glade:334 -msgid "Use %1 and %2 for path parameters" -msgstr "استعمل ١٪ و ٢٪ لِمسار الموسطات" +#: ../../qt4/settingsdialog.py:858 ../../qt4/settingsdialog.py:1691 +msgid "default" +msgstr "" -#: ../../kde4/snapshotsdialog.py:123 ../../gnome/snapshotsdialog.glade:184 -#: ../../gnome/snapshotsdialog.glade:186 -msgid "Delete" +#: ../../qt4/settingsdialog.py:875 +msgid "Restore Config" msgstr "" -#: ../../kde4/snapshotsdialog.py:128 ../../gnome/snapshotsdialog.glade:199 -#: ../../gnome/snapshotsdialog.glade:201 -msgid "Select All" +#: ../../qt4/settingsdialog.py:891 +msgid "" +"Full system backup can only create a snapshot to be restored to the same " +"physical disk(s) with the same disk partitioning as from the source; " +"restoring to new physical disks or the same disks with different " +"partitioning will yield a potentially broken and unusable system.\n" +"\n" +"Full system backup will override some settings that may have been " +"customized. Continue?" msgstr "" -#: ../../kde4/snapshotsdialog.py:132 ../../gnome/snapshotsdialog.glade:88 -msgid "List only different snapshots" -msgstr "سرد لقطات المُختلفة فقط" +#: ../../qt4/settingsdialog.py:922 +msgid "New profile" +msgstr "ملف شخصي جديد" -#: ../../kde4/snapshotsdialog.py:139 ../../gnome/snapshotsdialog.glade:110 -msgid "List only equal snapshots to: " +#: ../../qt4/settingsdialog.py:938 +msgid "Rename profile" +msgstr "أعِد تسمية الملف الشخصي" + +#: ../../qt4/settingsdialog.py:952 +#, python-format +msgid "Are you sure you want to delete the profile \"%s\" ?" +msgstr "هل أنت مُتأكد بأنك تُريد حذف ملف الشخصي \"%s\" ؟" + +#: ../../qt4/settingsdialog.py:1191 +msgid "" +"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " +"*/3 for periodic backups every 3 hours" msgstr "" -#: ../../kde4/snapshotsdialog.py:149 ../../gnome/snapshotsdialog.glade:146 -msgid "Deep check (more accurate, but slow)" -msgstr "فحص بعمق (أكثر دقة, ولكن بطيء)" +#: ../../qt4/settingsdialog.py:1489 +msgid "Exclude pattern" +msgstr "إستثني نمط" -#: ../../kde4/snapshotsdialog.py:174 -msgid "Go To" -msgstr "أذهب إلى" +#: ../../qt4/settingsdialog.py:1502 +msgid "Exclude file" +msgstr "إستثني ملف" + +#: ../../qt4/settingsdialog.py:1506 +msgid "Exclude folder" +msgstr "إستثني مُجلد" -#: ../../gnome/logviewdialog.glade:9 -msgid "Log View" -msgstr "عرض السجل" +#: ../../qt4/settingsdialog.py:1525 +msgid "Include file" +msgstr "ضمْن ملف" -#: ../../gnome/logviewdialog.glade:179 -msgid "scroll down automatic" +#: ../../qt4/settingsdialog.py:1533 ../../qt4/settingsdialog.py:1553 +#, python-format +msgid "" +"\"%s\" is a symlink. The linked target will not be backed up until you " +"include it, too.\n" +"Would you like to include the symlinks target instead?" msgstr "" -#: ../../gnome/mainwindow.glade:7 -msgid "Back In Time" -msgstr "باك إن تايم" +#: ../../qt4/settingsdialog.py:1545 +msgid "Include folder" +msgstr "ضمْن مُجلد" -#: ../../gnome/mainwindow.glade:45 -msgid "Backup Now" -msgstr "قم بنسخ إحتياطي الآن" +#: ../../qt4/settingsdialog.py:1572 +msgid "Are you sure you want to change snapshots folder ?" +msgstr "هل أنت مُتأكد بأنك تُريد تغيير مُجلد اللقطات ؟" -#: ../../gnome/mainwindow.glade:171 -msgid "Shutdown" +#: ../../qt4/settingsdialog.py:1688 +msgid "enabled" msgstr "" -#: ../../gnome/mainwindow.glade:287 -msgid "Parent folder" -msgstr "مُجلد أساسي" +#: ../../qt4/settingsdialog.py:1690 +msgid "disabled" +msgstr "" -#: ../../gnome/mainwindow.glade:327 -msgid "Hidden files" -msgstr "ملفات المخفية" +#: ../../qt4/settingsdialog.py:1715 +msgid "Restore Settings" +msgstr "" -#: ../../gnome/mainwindow.glade:451 +#: ../../qt4/settingsdialog.py:1732 +msgid " and add your user to group 'fuse'" +msgstr "" + +#: ../../qt4/settingsdialog.py:1736 +#, python-format msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +"Please navigate to the snapshot from which you want to restore %(appName)s's " +"configuration. The path may look like: \n" +"%(samplePath)s\n" +"\n" +"If your snapshots are on a remote drive or if they are encrypted you need to " +"manually mount them first. If you use Mode SSH you also may need to set up " +"public key login to the remote host%(addFuse)s.\n" +"Take a look at 'man backintime'." +msgstr "" + +#: ../../qt4/settingsdialog.py:1794 ../../qt4/settingsdialog.py:1854 +msgid "No config found" msgstr "" -"هذا المُجلد لا وجود له\n" -"في اللقطة الحالية!" -#: ../../gnome/settingsdialog.glade:287 -msgid "Where to save snapshots" -msgstr "أين تُحفظ اللقطات" +#: ../../qt4/snapshotsdialog.py:49 ../../qt4/snapshotsdialog.py:173 +msgid "Diff Options" +msgstr "خيارات الاختلافات" + +#: ../../qt4/snapshotsdialog.py:56 +msgid "Command:" +msgstr "الأمر :" -#: ../../gnome/settingsdialog.glade:483 -msgid "Private key:" -msgstr "مفتاح خاص:" +#: ../../qt4/snapshotsdialog.py:60 +msgid "Parameters:" +msgstr "الموسطات:" -#: ../../gnome/settingsdialog.glade:534 -msgid "Advanced SSH Settings" -msgstr "" +#: ../../qt4/snapshotsdialog.py:64 +msgid "Use %1 and %2 for path parameters" +msgstr "استعمل ١٪ و ٢٪ لِمسار الموسطات" -#: ../../gnome/settingsdialog.glade:552 -msgid "SSH Settings" +#: ../../qt4/snapshotsdialog.py:106 +msgid "List only different snapshots" +msgstr "سرد لقطات المُختلفة فقط" + +#: ../../qt4/snapshotsdialog.py:113 +msgid "List only equal snapshots to: " msgstr "" -#: ../../gnome/settingsdialog.glade:815 -msgid "Password" -msgstr "كلمة سرّ" +#: ../../qt4/snapshotsdialog.py:123 +msgid "Deep check (more accurate, but slow)" +msgstr "فحص بعمق (أكثر دقة, ولكن بطيء)" -#: ../../gnome/settingsdialog.glade:930 -msgid "Profile Id:" -msgstr "هوية الملف الشخصي:" +#: ../../qt4/snapshotsdialog.py:144 +msgid "Delete" +msgstr "" -#: ../../gnome/settingsdialog.glade:1115 -msgid "" -"hours seperate by comma ( e.g. 8,12,18,23) or */3 for periodic backups every " -"3 hours (cron style)" +#: ../../qt4/snapshotsdialog.py:148 +msgid "Select All" msgstr "" -#: ../../gnome/settingsdialog.glade:1163 -msgid "Schedule" -msgstr "جدول" +#: ../../qt4/snapshotsdialog.py:161 +msgid "Diff" +msgstr "فرق" -#: ../../gnome/settingsdialog.glade:1363 -msgid "Highly recommended:" -msgstr "موصى بشدة:" +#: ../../qt4/snapshotsdialog.py:172 +msgid "Go To" +msgstr "أذهب إلى" -#: ../../gnome/settingsdialog.glade:1377 -msgid "label" -msgstr "مُلصق" +#: ../../qt4/snapshotsdialog.py:326 +msgid "You can't compare a snapshot to itself" +msgstr "لا تستطيع مُقارنة اللقطة بنفسها" -#: ../../gnome/settingsdialog.glade:1755 -msgid "week(s)" -msgstr "أسبوع(أسابيع)" +#: ../../qt4/snapshotsdialog.py:333 +#, python-format +msgid "Command not found: %s" +msgstr "الأمر لم يُعثر عليه: %s" -#: ../../gnome/settingsdialog.glade:2069 -msgid "Log level:" -msgstr "مستوى التسجيل:" - -#: ../../gnome/settingsdialog.glade:2121 -msgid "" -"Change these options only if you really know what you are doing !" -msgstr "غيّر هذه الخيارات فقط إذا كنت تعلم جيداً ما تفعله !" - -#: ../../gnome/snapshotsdialog.glade:263 -msgid "Diff with" -msgstr "إختلاف مع" - -#: ../../gnome/textinputdialog.glade:7 -msgid "Pattern" -msgstr "نمط" - -#: ../../gnome/textinputdialog.glade:70 -msgid "Text" -msgstr "نص" +#: ../../qt4/snapshotsdialog.py:354 +#, python-format +msgid "" +"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" +msgstr "" + +#: ../../qt4/snapshotsdialog.py:357 +#, python-format +msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +msgstr "" + +#: ../../qt4/snapshotsdialog.py:359 +msgid "WARNING: This can not be revoked!" +msgstr "" + +#: ../../qt4/snapshotsdialog.py:374 +#, python-format +msgid "Exclude \"%s\" from future snapshots?" +msgstr "" diff -Nru backintime-1.0.36/common/po/bg.po backintime-1.1.12/common/po/bg.po --- backintime-1.0.36/common/po/bg.po 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/po/bg.po 2016-01-11 18:07:58.000000000 +0000 @@ -7,210 +7,242 @@ msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2013-11-09 22:34+0100\n" -"PO-Revision-Date: 2011-06-07 21:22+0000\n" +"POT-Creation-Date: 2015-12-19 00:47+0100\n" +"PO-Revision-Date: 2015-09-09 21:49+0000\n" "Last-Translator: PhobosK \n" "Language-Team: Bulgarian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2014-08-06 10:20+0000\n" -"X-Generator: Launchpad (build 17147)\n" +"X-Launchpad-Export-Date: 2016-01-11 17:52+0000\n" +"X-Generator: Launchpad (build 17881)\n" -#: ../../gnome/app.py:636 ../../kde4/app.py:649 +#: ../../qt4/app.py:777 msgid "Global" msgstr "Глобални" -#: ../../common/config.py:72 +#: ../../common/configfile.py:60 +#, python-format +msgid "Failed to save config: %s" +msgstr "" + +#: ../../common/configfile.py:78 +#, python-format +msgid "Failed to load config: %s" +msgstr "" + +#: ../../common/configfile.py:352 ../../common/configfile.py:414 +#, python-format +msgid "Profile \"%s\" already exists !" +msgstr "Профилът \"%s\" вече съществува!" + +#: ../../common/configfile.py:383 +msgid "You can't remove the last profile !" +msgstr "Не можете да премахнете последния профил!" + +#: ../../common/config.py:76 msgid "Disabled" msgstr "Изключено" -#: ../../common/config.py:73 +#: ../../common/config.py:77 msgid "At every boot/reboot" msgstr "При всяко зареждане/рестартиране" -#: ../../common/config.py:74 +#: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "На всеки 5 минути" -#: ../../common/config.py:75 +#: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "На всеки 10 минути" -#: ../../common/config.py:76 +#: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "" -#: ../../common/config.py:77 +#: ../../common/config.py:81 msgid "Every hour" msgstr "" -#: ../../common/config.py:78 +#: ../../common/config.py:82 msgid "Every 2 hours" msgstr "" -#: ../../common/config.py:79 +#: ../../common/config.py:83 msgid "Every 4 hours" msgstr "" -#: ../../common/config.py:80 +#: ../../common/config.py:84 msgid "Every 6 hours" msgstr "" -#: ../../common/config.py:81 +#: ../../common/config.py:85 msgid "Every 12 hours" msgstr "" -#: ../../common/config.py:82 +#: ../../common/config.py:86 msgid "Custom Hours" msgstr "" -#: ../../common/config.py:83 +#: ../../common/config.py:87 msgid "Every Day" msgstr "Ежедневно" -#: ../../common/config.py:84 -msgid "Daily (anacron)" +#: ../../common/config.py:88 +msgid "Repeatedly (anacron)" msgstr "" -#: ../../common/config.py:85 +#: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "" -#: ../../common/config.py:86 +#: ../../common/config.py:90 msgid "Every Week" msgstr "Ежеседмично" -#: ../../common/config.py:87 +#: ../../common/config.py:91 msgid "Every Month" msgstr "Ежемесечно" -#: ../../common/config.py:91 +#: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Дни" -#: ../../common/config.py:92 +#: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Седмици" -#: ../../common/config.py:93 +#: ../../common/config.py:97 msgid "Year(s)" msgstr "Години" -#: ../../common/config.py:100 +#: ../../common/config.py:101 +msgid "Hour(s)" +msgstr "" + +#: ../../common/config.py:104 +msgid "Month(s)" +msgstr "" + +#: ../../common/config.py:126 ../../qt4/settingsdialog.py:551 msgid " EXPERIMENTAL!" msgstr "" -#: ../../common/config.py:103 +#: ../../common/config.py:129 msgid "Local" msgstr "" -#: ../../common/config.py:104 +#: ../../common/config.py:130 msgid "SSH" msgstr "" -#: ../../common/config.py:104 ../../common/config.py:106 -#: ../../gnome/settingsdialog.py:475 ../../kde4/settingsdialog.py:1325 +#: ../../common/config.py:130 ../../common/config.py:132 +#: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "" -#: ../../common/config.py:105 +#: ../../common/config.py:131 msgid "Local encrypted" msgstr "" -#: ../../common/config.py:105 ../../common/config.py:106 +#: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "" -#: ../../common/config.py:106 +#: ../../common/config.py:132 msgid "SSH encrypted" msgstr "" -#: ../../common/config.py:112 +#: ../../common/config.py:135 msgid "Default" msgstr "" -#: ../../common/config.py:113 +#: ../../common/config.py:136 msgid "AES128-CTR" msgstr "" -#: ../../common/config.py:114 +#: ../../common/config.py:137 msgid "AES192-CTR" msgstr "" -#: ../../common/config.py:115 +#: ../../common/config.py:138 msgid "AES256-CTR" msgstr "" -#: ../../common/config.py:116 +#: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "" -#: ../../common/config.py:117 +#: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "" -#: ../../common/config.py:118 +#: ../../common/config.py:141 msgid "AES128-CBC" msgstr "" -#: ../../common/config.py:119 +#: ../../common/config.py:142 msgid "3DES-CBC" msgstr "" -#: ../../common/config.py:120 +#: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "" -#: ../../common/config.py:121 +#: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "" -#: ../../common/config.py:122 +#: ../../common/config.py:145 msgid "AES192-CBC" msgstr "" -#: ../../common/config.py:123 +#: ../../common/config.py:146 msgid "AES256-CBC" msgstr "" -#: ../../common/config.py:124 +#: ../../common/config.py:147 msgid "ARCFOUR" msgstr "" -#: ../../common/config.py:129 +#: ../../common/config.py:153 msgid "Main profile" msgstr "Основен профил" -#: ../../common/config.py:256 ../../common/config.py:275 -#: ../../common/config.py:286 ../../common/config.py:291 +#: ../../common/config.py:289 ../../common/config.py:296 +#: ../../common/config.py:307 ../../common/config.py:312 +#: ../../qt4/qt4systrayicon.py:61 #, python-format msgid "Profile: \"%s\"" msgstr "Профил: \"%s\"" -#: ../../common/config.py:256 +#: ../../common/config.py:289 msgid "Snapshots folder is not valid !" msgstr "Папката за моментни архиви не е валидна!" -#: ../../common/config.py:275 +#: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "Трябва да изберете поне една папка за архивиране !" -#: ../../common/config.py:286 +#: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "Не можете да включите папката за резервни архиви !" -#: ../../common/config.py:291 +#: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "Не можете да включите подпапките в резервно копие !" -#: ../../common/config.py:361 +#: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s не е папка !" -#: ../../common/config.py:376 ../../common/config.py:389 +#: ../../common/config.py:380 +msgid "Host/User/Profile-ID must not be empty!" +msgstr "" + +#: ../../common/config.py:388 ../../common/config.py:420 #, python-format msgid "" "Can't write to: %s\n" @@ -219,59 +251,68 @@ "Не може да се записва в: %s\n" "Сигурни ли сте, че имате права за запис?" -#: ../../common/config.py:1286 +#: ../../common/config.py:400 +#, python-format msgid "" -"Can't find crontab.\n" -"Are you sure cron is installed ?\n" -"If not you should disable all automatic backups." +"Destination filesystem for '%(path)s' is formatted with FAT which doesn't " +"support hard-links. Please use a native Linux filesystem." msgstr "" -"crontab не може да бъде намерен.\n" -"Сигурни ли сте, че cron е инсталиран ?\n" -"Ако не е, трябва да изключите всички автоматични архивирания." -#: ../../common/config.py:1338 +#: ../../common/config.py:405 #, python-format -msgid "Schedule udev doesn't work with mode %s" +msgid "" +"Destination filsystem for '%(path)s' is a SMB mounted share. Please make " +"sure the remote SMB server supports symlinks or activate '%(copyLinks)s' in " +"'%(expertOptions)s'." msgstr "" -#: ../../common/config.py:1342 -#, python-format -msgid "Couldn't find UUID for \"%s\"" -msgstr "" +#: ../../common/config.py:408 ../../qt4/settingsdialog.py:815 +msgid "Copy links (dereference symbolic links)" +msgstr "Копирай връзките към файлове (следвай символните връзки)" -#: ../../common/config.py:1379 -msgid "Failed to remove udev rules" -msgstr "" +#: ../../common/config.py:409 ../../qt4/settingsdialog.py:669 +msgid "Expert Options" +msgstr "Експертни настройки" -#: ../../common/config.py:1385 -msgid "Failed to create udev rules" +#: ../../common/config.py:411 +#, python-format +msgid "" +"Destination filesystem for '%(path)s is a sshfs mounted share. sshfs doesn't " +"support hard-links. Please use mode 'SSH' instead." msgstr "" -#: ../../common/config.py:1420 +#: ../../common/config.py:1407 msgid "" -"Can't find anacron.\n" -"Are you sure anacron is installed ?\n" -"If not you should disable daily anacron backups." +"Can't find crontab.\n" +"Are you sure cron is installed ?\n" +"If not you should disable all automatic backups." msgstr "" +"crontab не може да бъде намерен.\n" +"Сигурни ли сте, че cron е инсталиран ?\n" +"Ако не е, трябва да изключите всички автоматични архивирания." -#: ../../common/config.py:1439 -msgid "Please provide your sudo password to install the udev rule." +#: ../../common/config.py:1411 +msgid "Failed to write new crontab." msgstr "" -#: ../../common/config.py:1445 -msgid "Please provide your sudo password to remove unused udev rules." +#: ../../common/config.py:1505 +#, python-format +msgid "" +"Could not install Udev rule for profile %(profile_id)s. DBus Service " +"'%(dbus_interface)s' wasn't available" msgstr "" -#: ../../common/configfile.py:253 ../../common/configfile.py:315 +#: ../../common/config.py:1517 #, python-format -msgid "Profile \"%s\" already exists !" -msgstr "Профилът \"%s\" вече съществува!" +msgid "Schedule udev doesn't work with mode %s" +msgstr "" -#: ../../common/configfile.py:284 -msgid "You can't remove the last profile !" -msgstr "Не можете да премахнете последния профил!" +#: ../../common/config.py:1526 +#, python-format +msgid "Couldn't find UUID for \"%s\"" +msgstr "" -#: ../../common/encfstools.py:95 +#: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" @@ -279,38 +320,38 @@ "%(error)s" msgstr "" -#: ../../common/encfstools.py:105 +#: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "" -#: ../../common/encfstools.py:149 +#: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "" -#: ../../common/encfstools.py:153 +#: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" -#: ../../common/encfstools.py:154 +#: ../../common/encfstools.py:171 msgid "Cancel" msgstr "" -#: ../../common/encfstools.py:157 +#: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "" -#: ../../common/encfstools.py:161 +#: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "" -#: ../../common/encfstools.py:166 +#: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" -#: ../../common/encfstools.py:174 ../../common/sshtools.py:207 +#: ../../common/encfstools.py:196 ../../common/sshtools.py:262 #, python-format msgid "" "%(user)s is not member of group 'fuse'.\n" @@ -318,63 +359,66 @@ "Look at 'man backintime' for further instructions." msgstr "" -#: ../../common/encfstools.py:189 +#: ../../common/encfstools.py:211 msgid "" "encfs version 1.7.2 and before has a bug with option --reverse. Please " "update encfs" msgstr "" -#: ../../common/encfstools.py:453 ../../common/encfstools.py:480 -#: ../../common/snapshots.py:982 ../../common/snapshots.py:1288 -#: ../../kde4/app.py:82 ../../gnome/mainwindow.glade:43 +#: ../../common/encfstools.py:512 ../../common/snapshots.py:1131 +#: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "Създаване на моментен архив" -#: ../../common/mount.py:195 +#: ../../common/mount.py:204 #, python-format msgid "" "Hash collision occurred in hash_id %s. Incrementing global value " "hash_collision and try again." msgstr "" -#: ../../common/mount.py:246 +#: ../../common/mount.py:259 #, python-format msgid "mountpoint %s not empty." msgstr "" -#: ../../common/mount.py:286 +#: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" -#: ../../common/password.py:425 +#: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" -#: ../../common/snapshots.py:171 ../../gnome/app.py:1127 -#: ../../kde4/app.py:1014 +#: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Сега" -#: ../../common/snapshots.py:182 ../../gnome/gnometools.py:37 +#: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "С ГРЕШКИ!" -#: ../../common/snapshots.py:282 +#: ../../common/snapshots.py:344 msgid "" "### This log has been decoded with automatic search pattern\n" "### If some paths are not decoded you can manually decode them with:\n" msgstr "" -#: ../../common/snapshots.py:465 +#: ../../common/snapshots.py:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "" -#: ../../common/snapshots.py:564 +#: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "" -#: ../../common/snapshots.py:739 +#: ../../common/snapshots.py:752 ../../qt4/app.py:377 ../../qt4/app.py:675 +#: ../../qt4/app.py:692 ../../qt4/qt4systrayicon.py:65 +msgid "Done" +msgstr "Готово" + +#: ../../common/snapshots.py:860 msgid "" "Back In Time changed its backup format.\n" "\n" @@ -385,7 +429,7 @@ "Старите ви моментни архиви ще бъдат преместени съобразно този нов формат. " "Продължаване?" -#: ../../common/snapshots.py:749 +#: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" @@ -403,7 +447,7 @@ "\n" "(Програмата ще може да прави разлика между тях)" -#: ../../common/snapshots.py:752 +#: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" @@ -411,7 +455,7 @@ "Не са открити профили. Първо трябва да се обновят профилите. Моля " "рестартирайте Back In Time" -#: ../../common/snapshots.py:803 +#: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" @@ -424,7 +468,7 @@ "cannot continue taking snapshots" msgstr "" -#: ../../common/snapshots.py:812 +#: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" @@ -439,7 +483,7 @@ "Може ръчно да преместите моментните архиви, а ако сте свършили\n" "рестартирайте Back In Time за да продължите" -#: ../../common/snapshots.py:825 +#: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" @@ -449,7 +493,7 @@ "\n" "Back In Time ще продължи да прави моментни архиви по разписание" -#: ../../common/snapshots.py:830 +#: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" @@ -470,11 +514,11 @@ "Ако не сте сигурно, този въпрос ще ви бъде зададен отново при следващото " "стартиране на програмата." -#: ../../common/snapshots.py:839 +#: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "Back In Time ще продължи да прави моментни архиви по разписание" -#: ../../common/snapshots.py:841 +#: ../../common/snapshots.py:953 msgid "" "Back In Time still cannot continue taking new snapshots.\n" "Restart Back In Time to see the questions again" @@ -482,7 +526,11 @@ "Back In Time все още не може да продължи да прави моментни архиви\n" "Рестартирайте програмата за да видите отново въпросите" -#: ../../common/snapshots.py:913 +#: ../../common/snapshots.py:972 +msgid "Deferring backup while on battery" +msgstr "" + +#: ../../common/snapshots.py:1035 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it." @@ -490,156 +538,163 @@ "Папката за моментни архиви не може да бъде открита.\n" "Ако е на преносимо устройство, моля включете го." -#: ../../common/snapshots.py:915 +#: ../../common/snapshots.py:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "Изчакване %s секунда." msgstr[1] "Изчакване %s секунди." -#: ../../common/snapshots.py:941 +#: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "Неуспех при създаването на моментен архив %s !!!" -#: ../../common/snapshots.py:950 +#: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "Приключване" -#: ../../common/snapshots.py:1088 +#: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "Папката не може да бъде създадена: %s" -#: ../../common/snapshots.py:1107 +#: ../../common/snapshots.py:1217 msgid "..." msgstr "..." -#: ../../common/snapshots.py:1134 +#: ../../common/snapshots.py:1238 +#, python-format +msgid "Found leftover '%s' which can be continued." +msgstr "" + +#: ../../common/snapshots.py:1250 +#, python-format +msgid "Remove leftover '%s' folder from last run" +msgstr "" + +#: ../../common/snapshots.py:1263 #, python-format msgid "Can't remove folder: %s" msgstr "Папката не може да бъде премахната: %s" -#: ../../common/snapshots.py:1219 +#: ../../common/snapshots.py:1340 #, python-format msgid "Compare with snapshot %s" msgstr "Сравняване с моментния архив %s" -#: ../../common/snapshots.py:1248 +#: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "Създаване на твърди връзки" -#: ../../common/snapshots.py:1335 +#: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "Запазване на конфигурационен файл ..." -#: ../../common/snapshots.py:1341 +#: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "Запазване на правата ..." -#: ../../common/snapshots.py:1442 +#: ../../common/snapshots.py:1470 +msgid "Save permission over ssh failed. Retry normal method" +msgstr "" + +#: ../../common/snapshots.py:1521 #, python-format msgid "Can't rename %(new_path)s to %(path)s" msgstr "" -#: ../../common/snapshots.py:1562 -msgid "Remove old snapshots" -msgstr "Премахване на старите моментни архиви" - -#: ../../common/snapshots.py:1586 ../../kde4/settingsdialog.py:501 -#: ../../gnome/settingsdialog.glade:1660 +#: ../../common/snapshots.py:1695 ../../common/snapshots.py:1728 +#: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "Умно премахване" -#: ../../common/snapshots.py:1591 +#: ../../common/snapshots.py:1704 +msgid "Remove old snapshots" +msgstr "Премахване на старите моментни архиви" + +#: ../../common/snapshots.py:1733 msgid "Try to keep min free space" msgstr "Опит за запазване на минимално свободно пространство" -#: ../../common/snapshots.py:1621 +#: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" -#: ../../common/sshtools.py:106 +#: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "" -#: ../../common/sshtools.py:113 +#: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "" -#: ../../common/sshtools.py:187 -#, python-format -msgid "" -"Failed to unlock SSH private key:\n" -"Error: %s" -msgstr "" - -#: ../../common/sshtools.py:194 +#: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" -#: ../../common/sshtools.py:199 +#: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" -#: ../../common/sshtools.py:217 +#: ../../common/sshtools.py:278 #, python-format msgid "" "Password-less authentication for %(user)s@%(host)s failed. Look at 'man " "backintime' for further instructions." msgstr "" -#: ../../common/sshtools.py:229 +#: ../../common/sshtools.py:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" -#: ../../common/sshtools.py:254 +#: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" -#: ../../common/sshtools.py:274 +#: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" -#: ../../common/sshtools.py:276 +#: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:278 +#: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:280 +#: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" -#: ../../common/sshtools.py:302 +#: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" -#: ../../common/sshtools.py:325 ../../common/sshtools.py:383 +#: ../../common/sshtools.py:423 ../../common/sshtools.py:553 #, python-format msgid "" "Remote host %(host)s doesn't support '%(command)s':\n" @@ -647,7 +702,7 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:387 +#: ../../common/sshtools.py:556 #, python-format msgid "" "Check commands on host %(host)s returned unknown error:\n" @@ -655,96 +710,149 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:400 +#: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "" -#: ../../gnome/app.py:185 ../../gnome/app.py:594 ../../gnome/app.py:608 -#: ../../kde4/app.py:299 ../../kde4/app.py:570 ../../kde4/app.py:587 -msgid "Done" -msgstr "Готово" +#: ../../qt4/app.py:81 +msgid "Refresh snapshots list" +msgstr "Опресняване списъка с моментни архиви" + +#: ../../qt4/app.py:85 ../../qt4/app.py:890 +msgid "Snapshot Name" +msgstr "Име на моментния архив" + +#: ../../qt4/app.py:88 +msgid "Remove Snapshot" +msgstr "Премахване на моментния архив" + +#: ../../qt4/app.py:91 +msgid "View Snapshot Log" +msgstr "Преглед на дневника на моментните архиви" + +#: ../../qt4/app.py:94 +msgid "View Last Log" +msgstr "Преглед на последния запис" + +#: ../../qt4/app.py:99 ../../qt4/settingsdialog.py:51 +msgid "Settings" +msgstr "Настройки" + +#: ../../qt4/app.py:104 +msgid "Shutdown" +msgstr "" -#: ../../gnome/app.py:189 ../../kde4/app.py:143 ../../kde4/app.py:159 -#: ../../gnome/mainwindow.glade:225 +#: ../../qt4/app.py:105 +msgid "Shutdown system after snapshot has finished." +msgstr "" + +#: ../../qt4/app.py:111 +msgid "Exit" +msgstr "Изход" + +#: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 msgid "Help" msgstr "Помощ" -#: ../../gnome/app.py:191 ../../kde4/app.py:146 -#: ../../gnome/mainwindow.glade:223 +#: ../../qt4/app.py:122 +msgid "Config File Help" +msgstr "" + +#: ../../qt4/app.py:125 msgid "Website" msgstr "Уебсайт" -#: ../../gnome/app.py:192 ../../kde4/app.py:148 +#: ../../qt4/app.py:127 ../../qt4/app.py:982 +msgid "Changelog" +msgstr "" + +#: ../../qt4/app.py:129 msgid "FAQ" msgstr "" -#: ../../gnome/app.py:193 ../../kde4/app.py:150 +#: ../../qt4/app.py:131 msgid "Ask a question" msgstr "" -#: ../../gnome/app.py:194 ../../kde4/app.py:152 +#: ../../qt4/app.py:133 msgid "Report a bug" msgstr "" -#: ../../gnome/app.py:196 ../../kde4/app.py:155 +#: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "Относно" -#: ../../gnome/app.py:202 ../../gnome/app.py:887 -#: ../../gnome/restoredialog.py:84 ../../gnome/snapshotsdialog.py:83 -#: ../../gnome/snapshotsdialog.py:244 ../../kde4/app.py:206 -#: ../../kde4/app.py:216 ../../kde4/restoredialog.py:68 -#: ../../kde4/snapshotsdialog.py:111 ../../kde4/snapshotsdialog.py:117 -#: ../../gnome/mainwindow.glade:350 ../../gnome/mainwindow.glade:352 -#: ../../gnome/snapshotsdialog.glade:169 ../../gnome/snapshotsdialog.glade:171 +#: ../../qt4/app.py:163 +msgid "Up" +msgstr "Нагоре" + +#: ../../qt4/app.py:174 ../../qt4/settingsdialog.py:1776 +msgid "Show hidden files" +msgstr "Показване на скритите файлове" + +#: ../../qt4/app.py:184 ../../qt4/app.py:199 ../../qt4/app.py:233 +#: ../../qt4/restoredialog.py:62 ../../qt4/settingsdialog.py:1818 +#: ../../qt4/snapshotsdialog.py:134 ../../qt4/snapshotsdialog.py:139 msgid "Restore" msgstr "Възстановяване" -#: ../../gnome/app.py:203 ../../gnome/app.py:888 ../../gnome/gnometools.py:67 -#: ../../gnome/snapshotsdialog.py:84 ../../gnome/snapshotsdialog.py:245 -#: ../../kde4/app.py:208 ../../kde4/restoredialog.py:42 -#: ../../kde4/snapshotsdialog.py:113 +#: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 +#: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "" -#: ../../gnome/app.py:205 ../../gnome/app.py:896 ../../gnome/app.py:1146 -#: ../../kde4/app.py:1041 -#, python-format -msgid "Restore '%s'" +#: ../../qt4/app.py:194 +msgid "Restore and delete new files" msgstr "" -#: ../../gnome/app.py:207 ../../gnome/app.py:897 ../../gnome/app.py:1147 -#: ../../kde4/app.py:1042 +#: ../../qt4/app.py:201 #, python-format -msgid "Restore '%s' to ..." +msgid "" +"Restore selected file or folder.\n" +"If this button is grayed out this is most likely because \"%(now)s\" is " +"selected in left hand snapshots list." +msgstr "" + +#: ../../qt4/app.py:206 ../../qt4/logviewdialog.py:67 +#: ../../qt4/qt4tools.py:160 ../../qt4/snapshotsdialog.py:96 +msgid "Snapshots" +msgstr "Моментни архиви" + +#: ../../qt4/app.py:213 +msgid "Snapshot" +msgstr "" + +#: ../../qt4/app.py:224 +msgid "View" msgstr "" -#: ../../gnome/app.py:226 ../../kde4/app.py:235 +#: ../../qt4/app.py:277 msgid "Shortcuts" msgstr "Препратки" -#: ../../gnome/app.py:249 -msgid "Name" -msgstr "Име" - -#: ../../gnome/app.py:260 -msgid "Size" -msgstr "Размер" - -#: ../../gnome/app.py:267 -msgid "Date" -msgstr "Дата" - -#: ../../gnome/app.py:286 ../../gnome/app.py:883 -#: ../../gnome/snapshotsdialog.py:116 ../../kde4/app.py:171 -#: ../../kde4/app.py:221 ../../kde4/snapshotsdialog.py:91 -#: ../../gnome/mainwindow.glade:366 ../../gnome/mainwindow.glade:368 -#: ../../gnome/snapshotsdialog.glade:8 -msgid "Snapshots" -msgstr "Моментни архиви" +#: ../../qt4/app.py:295 +msgid "" +"This folder doesn't exist\n" +"in the current selected snapshot!" +msgstr "" + +#: ../../qt4/app.py:359 +msgid "Add to Include" +msgstr "" + +#: ../../qt4/app.py:360 +msgid "Add to Exclude" +msgstr "" + +#: ../../qt4/app.py:416 +#, python-format +msgid "" +"%(appName)s is not configured. Would you like to restore a previous " +"configuration?" +msgstr "" -#: ../../gnome/app.py:348 ../../kde4/app.py:362 +#: ../../qt4/app.py:440 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it and then press OK" @@ -752,725 +860,786 @@ "Папката за моментни архиви не може да бъде открите.\n" "Ако е на преносимо устройство, моля включете го." -#: ../../gnome/app.py:611 ../../kde4/app.py:590 -msgid "Done, no backup needed" -msgstr "Готово, не е необходимо архивиране" +#: ../../qt4/app.py:473 +msgid "" +"If you close this window Back In Time will not be able to shutdown your " +"system when the snapshot has finished.\n" +"Do you really want to close?" +msgstr "" -#: ../../gnome/app.py:619 ../../kde4/app.py:598 +#: ../../qt4/app.py:667 ../../qt4/app.py:703 msgid "Working:" msgstr "Изпълнение:" -#: ../../gnome/app.py:623 ../../kde4/app.py:602 +#: ../../qt4/app.py:695 +msgid "Done, no backup needed" +msgstr "Готово, не е необходимо архивиране" + +#: ../../qt4/app.py:707 msgid "Error:" msgstr "Грешка:" -#: ../../gnome/app.py:637 ../../kde4/app.py:650 +#: ../../qt4/app.py:726 ../../qt4/qt4systrayicon.py:153 +msgid "Sent:" +msgstr "" + +#: ../../qt4/app.py:727 ../../qt4/qt4systrayicon.py:154 +msgid "Speed:" +msgstr "" + +#: ../../qt4/app.py:728 ../../qt4/qt4systrayicon.py:155 +msgid "ETA:" +msgstr "" + +#: ../../qt4/app.py:778 msgid "Root" msgstr "Файлова система" -#: ../../gnome/app.py:638 ../../kde4/app.py:651 +#: ../../qt4/app.py:779 msgid "Home" msgstr "Домашна папка" -#: ../../gnome/app.py:662 -msgid "Bookmarks" -msgstr "Отметки" - -#: ../../gnome/app.py:675 ../../kde4/app.py:662 +#: ../../qt4/app.py:794 msgid "Backup folders" msgstr "Резевни папки" -#: ../../gnome/app.py:701 ../../kde4/app.py:734 -msgid "Today" -msgstr "Днес" +#: ../../qt4/app.py:849 +msgid "This is NOT a snapshot but a live view of your local files" +msgstr "" -#: ../../gnome/app.py:705 ../../kde4/app.py:738 -msgid "Yesterday" -msgstr "Вчера" +#: ../../qt4/app.py:860 ../../qt4/app.py:1476 +#, python-format +msgid "Last check %s" +msgstr "" -#: ../../gnome/app.py:709 ../../kde4/app.py:742 -msgid "This week" -msgstr "Тази седмица" +#: ../../qt4/app.py:928 +#, python-format +msgid "" +"Are you sure you want to remove the snapshot:\n" +"%s" +msgstr "" +"Сигурни ли сте, че желаете окончателно да премахнете моментния архив '%s'?" -#: ../../gnome/app.py:713 ../../kde4/app.py:746 -msgid "Last week" -msgstr "Миналата седмица" +#: ../../qt4/app.py:1004 +#, python-format +msgid "" +"Backup local files before overwriting or\n" +"removing with trailing '%(suffix)s'." +msgstr "" -#: ../../gnome/app.py:764 ../../kde4/app.py:398 +#: ../../qt4/app.py:1010 msgid "" -"If you close this window Back In Time will not be able to shutdown your " -"system when the snapshot has finished.\n" -"Do you really want to close?" +"Are you sure you want to remove all newer files in your original folder?" msgstr "" -#: ../../gnome/app.py:881 ../../gnome/snapshotsdialog.py:238 -msgid "Open" -msgstr "Отваряне" +#: ../../qt4/app.py:1014 +msgid "" +"WARNING: deleting files in filesystem root could break your whole system!!!" +msgstr "" -#: ../../gnome/app.py:1056 ../../kde4/app.py:90 ../../kde4/app.py:805 -#: ../../gnome/mainwindow.glade:73 ../../gnome/mainwindow.glade:75 -msgid "Snapshot Name" -msgstr "Име на моментния архив" +#: ../../qt4/app.py:1016 +msgid "Files to be restored:" +msgstr "" -#: ../../gnome/app.py:1075 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +#: ../../qt4/app.py:1031 +msgid "Do you really want to restore this files(s):" msgstr "" -"Сигурни ли сте, че желаете да премахнете моментния архив:\n" -"%s" -#: ../../gnome/app.py:1123 ../../kde4/app.py:1010 +#: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "Моментен архив: %s" -#: ../../gnome/app.py:1124 ../../kde4/app.py:1011 +#: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "Преглеждане на моментния архив, създаден на %s" -#: ../../gnome/app.py:1126 ../../kde4/app.py:1013 +#: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "Преглеждане на текущото съдържание на диска" -#: ../../gnome/logviewdialog.py:106 ../../gnome/settingsdialog.py:414 -#: ../../kde4/logviewdialog.py:83 ../../kde4/settingsdialog.py:590 +#: ../../qt4/app.py:1268 +#, python-format +msgid "Restore '%s'" +msgstr "" + +#: ../../qt4/app.py:1269 +#, python-format +msgid "Restore '%s' to ..." +msgstr "" + +#: ../../qt4/app.py:1270 +#, python-format +msgid "Restore '%s' and delete new files" +msgstr "" + +#: ../../qt4/app.py:1368 ../../qt4/app.py:1385 +msgid "Authors" +msgstr "" + +#: ../../qt4/app.py:1369 ../../qt4/app.py:1388 +msgid "Translations" +msgstr "" + +#: ../../qt4/app.py:1370 ../../qt4/app.py:1391 +msgid "License" +msgstr "" + +#: ../../qt4/logviewdialog.py:49 +msgid "Last Log View" +msgstr "" + +#: ../../qt4/logviewdialog.py:51 +msgid "Snapshot Log View" +msgstr "" + +#: ../../qt4/logviewdialog.py:59 ../../qt4/settingsdialog.py:59 +#: ../../qt4/settingsdialog.py:274 ../../qt4/settingsdialog.py:1899 +msgid "Profile:" +msgstr "Профил:" + +#: ../../qt4/logviewdialog.py:81 +msgid "Filter:" +msgstr "Филтър:" + +#: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 msgid "All" msgstr "Всичко" -#: ../../gnome/logviewdialog.py:107 ../../gnome/settingsdialog.py:412 -#: ../../kde4/logviewdialog.py:84 ../../kde4/settingsdialog.py:588 +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 +#: ../../qt4/settingsdialog.py:657 msgid "Errors" msgstr "Грешки" -#: ../../gnome/logviewdialog.py:112 ../../kde4/logviewdialog.py:89 +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 msgid "Changes" msgstr "Промени" -#: ../../gnome/logviewdialog.py:115 ../../kde4/logviewdialog.py:92 +#: ../../qt4/logviewdialog.py:92 msgid "Informations" msgstr "Информации" -#: ../../gnome/settingsdialog.py:235 ../../kde4/settingsdialog.py:387 -msgid "Include files and folders" -msgstr "Включване на файлове и папки" +#: ../../qt4/logviewdialog.py:101 +msgid "[E] Error, [I] Information, [C] Change" +msgstr "[Г] Грешка, [И] Информация, [П] Промяна" -#: ../../gnome/settingsdialog.py:264 -msgid "Exclude patterns, files or folders" -msgstr "Изключване на шарки, файлове или папки" - -#: ../../gnome/settingsdialog.py:411 ../../kde4/settingsdialog.py:587 -msgid "None" -msgstr "Нищо" - -#: ../../gnome/settingsdialog.py:413 ../../kde4/settingsdialog.py:589 -msgid "Changes & Errors" -msgstr "Промени и грешки" - -#: ../../gnome/settingsdialog.py:458 -msgid "Snapshots folder" -msgstr "Папка с моментни архиви" - -#: ../../gnome/settingsdialog.py:466 ../../kde4/settingsdialog.py:1314 -msgid "Are you sure you want to change snapshots folder ?" -msgstr "Сигурни ли сте, че жеалете да промените папката за моментни архиви ?" - -#: ../../gnome/settingsdialog.py:901 ../../kde4/settingsdialog.py:914 -msgid "" -"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " -"*/3 for periodic backups every 3 hours" -msgstr "" - -#: ../../gnome/settingsdialog.py:1141 ../../kde4/settingsdialog.py:653 -msgid "New profile" -msgstr "Нов профил" - -#: ../../gnome/settingsdialog.py:1155 ../../kde4/settingsdialog.py:669 -msgid "Rename profile" -msgstr "Преименуване на профил" - -#: ../../gnome/settingsdialog.py:1167 ../../kde4/settingsdialog.py:683 -#, python-format -msgid "Are you sure you want to delete the profile \"%s\" ?" -msgstr "Сигурни ли сте, че желаете да изтриете профила \"%s\" ?" - -#: ../../gnome/settingsdialog.py:1173 ../../kde4/settingsdialog.py:1292 -msgid "Include folder" -msgstr "Включване на папка" - -#: ../../gnome/settingsdialog.py:1193 ../../kde4/settingsdialog.py:1278 -msgid "Include file" -msgstr "Включване на файл" - -#: ../../gnome/settingsdialog.py:1235 ../../kde4/settingsdialog.py:1241 -msgid "Exclude pattern" -msgstr "Шаблон за изключване" - -#: ../../gnome/settingsdialog.py:1240 ../../kde4/settingsdialog.py:1251 -msgid "Exclude patterns can't contain ':' char !" -msgstr "Изключващите маски не могат да съдържат знакът ':' !" - -#: ../../gnome/settingsdialog.py:1246 ../../kde4/settingsdialog.py:1257 -msgid "Exclude file" -msgstr "Изключване на файл" - -#: ../../gnome/settingsdialog.py:1257 ../../kde4/settingsdialog.py:1261 -msgid "Exclude folder" -msgstr "Изключване на папка" - -#: ../../gnome/snapshotsdialog.py:240 -msgid "Jump to" -msgstr "" - -#: ../../gnome/snapshotsdialog.py:248 ../../kde4/snapshotsdialog.py:164 -msgid "Diff" -msgstr "Сравняване" - -#: ../../gnome/snapshotsdialog.py:277 ../../kde4/snapshotsdialog.py:339 -msgid "You can't compare a snapshot to itself" -msgstr "Не можете да сравнявате моментен архив сам със себе си" - -#: ../../gnome/snapshotsdialog.py:284 ../../kde4/snapshotsdialog.py:346 -#, python-format -msgid "Command not found: %s" -msgstr "Командата не е открита: %s" - -#: ../../gnome/snapshotsdialog.py:307 ../../kde4/snapshotsdialog.py:367 -#, python-format -msgid "" -"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" +#: ../../qt4/logviewdialog.py:104 +msgid "decode paths" msgstr "" -#: ../../gnome/snapshotsdialog.py:310 ../../kde4/snapshotsdialog.py:370 -#, python-format -msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +#: ../../qt4/messagebox.py:56 +msgid "Error" msgstr "" -#: ../../gnome/snapshotsdialog.py:312 ../../kde4/snapshotsdialog.py:372 -msgid "WARNING: This can not be revoked!" +#: ../../qt4/messagebox.py:62 ../../qt4/messagebox.py:68 +msgid "Question" msgstr "" -#: ../../gnome/snapshotsdialog.py:317 ../../kde4/snapshotsdialog.py:377 -#, python-format -msgid "Exclude \"%s\" from future snapshots?" +#: ../../qt4/qt4systrayicon.py:69 +msgid "Start BackInTime" msgstr "" -#: ../../kde4/app.py:86 ../../gnome/mainwindow.glade:58 -#: ../../gnome/mainwindow.glade:60 -msgid "Refresh snapshots list" -msgstr "Опресняване списъка с моментни архиви" +#: ../../qt4/qt4systrayicon.py:124 +msgid "Working..." +msgstr "Изпълнение..." -#: ../../kde4/app.py:94 ../../gnome/mainwindow.glade:88 -#: ../../gnome/mainwindow.glade:90 -msgid "Remove Snapshot" -msgstr "Премахване на моментния архив" +#: ../../qt4/qt4tools.py:178 +msgid "Today" +msgstr "Днес" -#: ../../kde4/app.py:98 ../../gnome/mainwindow.glade:105 -msgid "View Snapshot Log" -msgstr "Преглед на дневника на моментните архиви" +#: ../../qt4/qt4tools.py:183 +msgid "Yesterday" +msgstr "Вчера" -#: ../../kde4/app.py:102 ../../gnome/mainwindow.glade:121 -msgid "View Last Log" -msgstr "Преглед на последния запис" +#: ../../qt4/qt4tools.py:188 +msgid "This week" +msgstr "Тази седмица" -#: ../../kde4/app.py:108 ../../kde4/settingsdialog.py:69 -#: ../../gnome/mainwindow.glade:144 ../../gnome/mainwindow.glade:146 -#: ../../gnome/settingsdialog.glade:7 -msgid "Settings" -msgstr "Настройки" +#: ../../qt4/qt4tools.py:193 +msgid "Last week" +msgstr "Миналата седмица" -#: ../../kde4/app.py:124 ../../gnome/mainwindow.glade:169 -msgid "Shutdown system after snapshot has finished." +#: ../../qt4/restoredialog.py:75 +msgid "Show full Log" msgstr "" -#: ../../kde4/app.py:131 ../../gnome/mainwindow.glade:184 -#: ../../gnome/mainwindow.glade:186 -msgid "Exit" -msgstr "Изход" - -#: ../../kde4/app.py:186 ../../gnome/mainwindow.glade:289 -msgid "Up" -msgstr "Нагоре" - -#: ../../kde4/app.py:199 ../../gnome/mainwindow.glade:325 -msgid "Show hidden files" -msgstr "Показване на скритите файлове" +#: ../../qt4/settingsdialog.py:68 +msgid "Edit" +msgstr "Редактиране" -#: ../../kde4/app.py:244 -msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +#: ../../qt4/settingsdialog.py:73 +msgid "Modify for Full System Backup" msgstr "" -"Тази папка не съществува\n" -"в текущия моментен архив !" -#: ../../kde4/app.py:839 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +#: ../../qt4/settingsdialog.py:77 ../../qt4/settingsdialog.py:451 +msgid "Add" msgstr "" -"Сигурни ли сте, че желаете окончателно да премахнете моментния архив '%s'?" - -#: ../../kde4/app.py:1140 ../../kde4/kde4systrayicon.py:117 -msgid "Working..." -msgstr "Изпълнение..." -#: ../../kde4/logviewdialog.py:55 -msgid "Error Log View" -msgstr "Преглед на дневника с грешки" - -#: ../../kde4/logviewdialog.py:65 ../../kde4/settingsdialog.py:79 -#: ../../kde4/settingsdialog.py:293 ../../gnome/logviewdialog.glade:73 -#: ../../gnome/settingsdialog.glade:72 -msgid "Profile:" -msgstr "Профил:" - -#: ../../kde4/logviewdialog.py:77 ../../gnome/logviewdialog.glade:110 -msgid "Filter:" -msgstr "Филтър:" - -#: ../../kde4/logviewdialog.py:100 ../../gnome/logviewdialog.glade:169 -msgid "[E] Error, [I] Information, [C] Change" -msgstr "[Г] Грешка, [И] Информация, [П] Промяна" - -#: ../../kde4/logviewdialog.py:103 ../../gnome/logviewdialog.glade:195 -msgid "decode paths" +#: ../../qt4/settingsdialog.py:81 ../../qt4/settingsdialog.py:408 +#: ../../qt4/settingsdialog.py:467 +msgid "Remove" msgstr "" -#: ../../kde4/settingsdialog.py:88 -msgid "Edit" -msgstr "Редактиране" - -#: ../../kde4/settingsdialog.py:106 ../../gnome/settingsdialog.glade:1207 +#: ../../qt4/settingsdialog.py:96 msgid "General" msgstr "Общи" -#: ../../kde4/settingsdialog.py:114 ../../gnome/settingsdialog.glade:199 +#: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "" -#: ../../kde4/settingsdialog.py:127 ../../kde4/settingsdialog.py:1311 +#: ../../qt4/settingsdialog.py:119 +#, python-format +msgid "" +"Warning: %(app)s uses EncFS for encryption. A recent security audit " +"revealed several possible attack vectors for this. Please take a look at 'A " +"NOTE ON SECURITY' in 'man backintime'." +msgstr "" + +#: ../../qt4/settingsdialog.py:129 ../../qt4/settingsdialog.py:1568 msgid "Where to save snapshots" msgstr "Къде да се запазват моментните архиви" -#: ../../kde4/settingsdialog.py:146 +#: ../../qt4/settingsdialog.py:145 +msgid "Folder" +msgstr "" + +#: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" -#: ../../kde4/settingsdialog.py:158 ../../kde4/settingsdialog.py:283 -#: ../../gnome/settingsdialog.glade:323 ../../gnome/settingsdialog.glade:583 -#: ../../gnome/settingsdialog.glade:874 +#: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "Компютър:" -#: ../../kde4/settingsdialog.py:163 ../../gnome/settingsdialog.glade:350 -#: ../../gnome/settingsdialog.glade:610 +#: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "" -#: ../../kde4/settingsdialog.py:168 ../../kde4/settingsdialog.py:288 -#: ../../gnome/settingsdialog.glade:377 ../../gnome/settingsdialog.glade:637 -#: ../../gnome/settingsdialog.glade:902 +#: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "Потребител:" -#: ../../kde4/settingsdialog.py:173 ../../gnome/settingsdialog.glade:416 +#: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" -#: ../../kde4/settingsdialog.py:178 ../../gnome/settingsdialog.glade:459 +#: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" -#: ../../kde4/settingsdialog.py:184 +#: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "" -#: ../../kde4/settingsdialog.py:228 ../../kde4/settingsdialog.py:237 -#: ../../kde4/settingsdialog.py:243 ../../gnome/settingsdialog.glade:703 -#: ../../gnome/settingsdialog.glade:743 +#: ../../qt4/settingsdialog.py:201 +msgid "Key File" +msgstr "" + +#: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 +#: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "" -#: ../../kde4/settingsdialog.py:249 ../../gnome/settingsdialog.glade:775 +#: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" -#: ../../kde4/settingsdialog.py:252 ../../gnome/settingsdialog.glade:792 +#: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" -#: ../../kde4/settingsdialog.py:264 ../../gnome/settingsdialog.glade:968 +#: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "Разширени" -#: ../../kde4/settingsdialog.py:276 ../../gnome/settingsdialog.glade:848 -msgid "Auto Host / User / Profile Id" -msgstr "Автоматично идентифициране на Компютър/Потребител/Профил" +#: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 +msgid "Full snapshot path: " +msgstr "" -#: ../../kde4/settingsdialog.py:301 +#: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "Разписание" -#: ../../kde4/settingsdialog.py:311 ../../gnome/settingsdialog.glade:1092 +#: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "" -#: ../../kde4/settingsdialog.py:322 ../../gnome/settingsdialog.glade:1079 +#: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "" -#: ../../kde4/settingsdialog.py:333 ../../gnome/settingsdialog.glade:1066 +#: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "Час:" -#: ../../kde4/settingsdialog.py:344 ../../gnome/settingsdialog.glade:1053 +#: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "" -#: ../../kde4/settingsdialog.py:353 ../../gnome/settingsdialog.glade:1014 +#: ../../qt4/settingsdialog.py:339 msgid "" -"Run Back In Time periodically with anacron. This is useful if the computer " -"is not running regular." +"Run Back In Time repeatedly. This is useful if the computer is not running " +"regular." msgstr "" -#: ../../kde4/settingsdialog.py:357 ../../gnome/settingsdialog.glade:1040 -msgid "Frequency in days:" +#: ../../qt4/settingsdialog.py:344 +msgid "Every:" msgstr "" -#: ../../kde4/settingsdialog.py:368 ../../gnome/settingsdialog.glade:1026 +#: ../../qt4/settingsdialog.py:362 msgid "" "Run Back In Time as soon as the drive is connected (only once every X " "days).\n" "You will be prompted for your sudo password." msgstr "" -#: ../../kde4/settingsdialog.py:379 ../../gnome/settingsdialog.glade:1310 +#: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Включване" -#: ../../kde4/settingsdialog.py:403 ../../kde4/settingsdialog.py:445 -#: ../../gnome/settingsdialog.glade:1411 +#: ../../qt4/settingsdialog.py:381 +msgid "Include files and folders" +msgstr "Включване на файлове и папки" + +#: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "Добавяне на файл" -#: ../../kde4/settingsdialog.py:408 ../../kde4/settingsdialog.py:450 -#: ../../gnome/settingsdialog.glade:1427 +#: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Добавяне на папка" -#: ../../kde4/settingsdialog.py:418 ../../gnome/settingsdialog.glade:1474 +#: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Изключване" -#: ../../kde4/settingsdialog.py:421 ../../gnome/settingsdialog.glade:1328 +#: ../../qt4/settingsdialog.py:417 msgid "" "Warning: Wildcards ('foo*', '[fF]oo', 'fo?') will be ignored with " "mode 'SSH encrypted'.\n" "Only separate asterisk are allowed ('foo/*', 'foo/**/bar')" msgstr "" -#: ../../kde4/settingsdialog.py:430 +#: ../../qt4/settingsdialog.py:425 +msgid "Exclude patterns, files or folders" +msgstr "Изключване на шарки, файлове или папки" + +#: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "Силно препоръчително:" -#: ../../kde4/settingsdialog.py:460 ../../gnome/settingsdialog.glade:1905 +#: ../../qt4/settingsdialog.py:463 +msgid "Add default" +msgstr "" + +#: ../../qt4/settingsdialog.py:474 +msgid "Exclude files bigger than: " +msgstr "" + +#: ../../qt4/settingsdialog.py:475 +#, python-format +msgid "" +"Exclude files bigger than value in %(prefix)s.\n" +"With 'Full rsync mode' disabled this will only affect new files\n" +"because for rsync this is a transfer option, not an exclude option.\n" +"So big files that has been backed up before will remain in snapshots\n" +"even if they had changed." +msgstr "" + +#: ../../qt4/settingsdialog.py:493 msgid "Auto-remove" msgstr "Автоматично премахване" -#: ../../kde4/settingsdialog.py:464 ../../gnome/settingsdialog.glade:1608 +#: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "По-стари от:" -#: ../../kde4/settingsdialog.py:478 ../../gnome/settingsdialog.glade:1624 +#: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "Ако свободното пространство е по-малко от:" -#: ../../kde4/settingsdialog.py:490 ../../gnome/settingsdialog.glade:1642 +#: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" -#: ../../kde4/settingsdialog.py:514 ../../gnome/settingsdialog.glade:1697 +#: ../../qt4/settingsdialog.py:551 +msgid "Run in background on remote Host." +msgstr "" + +#: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "" -#: ../../kde4/settingsdialog.py:517 ../../kde4/settingsdialog.py:522 -#: ../../gnome/settingsdialog.glade:1705 ../../gnome/settingsdialog.glade:1729 +#: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "" -#: ../../kde4/settingsdialog.py:519 ../../gnome/settingsdialog.glade:1717 +#: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "" -#: ../../kde4/settingsdialog.py:524 ../../gnome/settingsdialog.glade:1743 +#: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "" -#: ../../kde4/settingsdialog.py:527 +#: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "" -#: ../../kde4/settingsdialog.py:529 ../../gnome/settingsdialog.glade:1769 +#: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "" -#: ../../kde4/settingsdialog.py:532 ../../gnome/settingsdialog.glade:1781 +#: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "" -#: ../../kde4/settingsdialog.py:534 ../../gnome/settingsdialog.glade:1795 +#: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "" -#: ../../kde4/settingsdialog.py:537 ../../gnome/settingsdialog.glade:1496 +#: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "Да не се премахват именувани архиви" -#: ../../kde4/settingsdialog.py:546 ../../gnome/settingsdialog.glade:2104 +#: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Настройки" -#: ../../kde4/settingsdialog.py:549 ../../gnome/settingsdialog.glade:1920 +#: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Включване на известяването" -#: ../../kde4/settingsdialog.py:552 ../../gnome/settingsdialog.glade:1937 +#: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "Изключване на моментни архиви при работа на батерия" -#: ../../kde4/settingsdialog.py:555 +#: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" msgstr "Енергийното състояние не е налично от системата" -#: ../../kde4/settingsdialog.py:558 ../../gnome/settingsdialog.glade:1955 -msgid "Backup files on restore" -msgstr "Създаване на резервен архив при възстановяване" +#: ../../qt4/settingsdialog.py:611 +msgid "Run only one snapshot at a time" +msgstr "" + +#: ../../qt4/settingsdialog.py:612 +msgid "" +"Other snapshots will be blocked until the current snapshot is done.\n" +"This is a global option. So it will effect all profiles for this user.\n" +"But you need to activate this for all other users, too." +msgstr "" + +#: ../../qt4/settingsdialog.py:617 +msgid "Backup replaced files on restore" +msgstr "" + +#: ../../qt4/settingsdialog.py:618 +#, python-format +msgid "" +"Newer versions of files will be renamed with trailing '%(suffix)s' before " +"restoring.\n" +"If you don't need them anymore you can remove them with '%(cmd)s'" +msgstr "" -#: ../../kde4/settingsdialog.py:561 ../../gnome/settingsdialog.glade:1972 +#: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "Продължаване при грешки (запазване на непълни моментни архиви)" -#: ../../kde4/settingsdialog.py:564 ../../gnome/settingsdialog.glade:1989 +#: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "Използвайте проверка на контролната сума, за да засечете промените" -#: ../../kde4/settingsdialog.py:567 ../../gnome/settingsdialog.glade:2006 +#: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "" -#: ../../kde4/settingsdialog.py:568 ../../gnome/settingsdialog.glade:2032 +#: ../../qt4/settingsdialog.py:634 msgid "" -"- snapshots are no read-only\n" -"- destination file-system must support all linux attributes (dates, rights, " +"- snapshots are not read-only\n" +"- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" -#: ../../kde4/settingsdialog.py:575 ../../gnome/settingsdialog.glade:2045 +#: ../../qt4/settingsdialog.py:641 +msgid "Take a new snapshot regardless of there were changes or not." +msgstr "" + +#: ../../qt4/settingsdialog.py:644 msgid "Check for changes (don't take a new snapshot if nothing changed)" msgstr "" -#: ../../kde4/settingsdialog.py:582 +#: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "Ниво на записа:" -#: ../../kde4/settingsdialog.py:597 ../../gnome/settingsdialog.glade:2366 -msgid "Expert Options" -msgstr "Експертни настройки" +#: ../../qt4/settingsdialog.py:656 +msgid "None" +msgstr "Нищо" -#: ../../kde4/settingsdialog.py:600 +#: ../../qt4/settingsdialog.py:658 +msgid "Changes & Errors" +msgstr "Промени и грешки" + +#: ../../qt4/settingsdialog.py:674 msgid "Change these options only if you really know what you are doing !" msgstr "Пременяйте тези настройки само ако знаете какво правите !" -#: ../../kde4/settingsdialog.py:608 ../../gnome/settingsdialog.glade:2133 -msgid "Run 'nice' as cron job (default: enabled)" -msgstr "Изпълняване 'nice' като задача на cron (стандартно: включено)" +#: ../../qt4/settingsdialog.py:678 +msgid "Run 'nice':" +msgstr "" -#: ../../kde4/settingsdialog.py:611 ../../gnome/settingsdialog.glade:2150 -msgid "Run 'ionice' as cron job (default: enabled)" -msgstr "Изпълнение на 'ionice' като задача на cron (стандартно: включено)" +#: ../../qt4/settingsdialog.py:684 ../../qt4/settingsdialog.py:696 +msgid "as cron job" +msgstr "" + +#: ../../qt4/settingsdialog.py:687 ../../qt4/settingsdialog.py:702 +#: ../../qt4/settingsdialog.py:716 +msgid "on remote host" +msgstr "" -#: ../../kde4/settingsdialog.py:614 ../../gnome/settingsdialog.glade:2167 -msgid "Run 'ionice' when taking a manual snapshot (default: disabled)" +#: ../../qt4/settingsdialog.py:690 +msgid "Run 'ionice':" msgstr "" -#: ../../kde4/settingsdialog.py:617 ../../gnome/settingsdialog.glade:2184 -msgid "Run 'nice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:699 +msgid "when taking a manual snapshot" msgstr "" -#: ../../kde4/settingsdialog.py:620 ../../gnome/settingsdialog.glade:2201 -msgid "Run 'ionice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:706 +msgid "Run 'rsync' with 'nocache':" msgstr "" -#: ../../kde4/settingsdialog.py:626 ../../gnome/settingsdialog.glade:2224 +#: ../../qt4/settingsdialog.py:712 +msgid "on local machine" +msgstr "" + +#: ../../qt4/settingsdialog.py:719 +msgid "Redirect stdout to /dev/null in cronjobs." +msgstr "" + +#: ../../qt4/settingsdialog.py:725 +msgid "Redirect stderr to /dev/null in cronjobs." +msgstr "" + +#: ../../qt4/settingsdialog.py:734 msgid "Limit rsync bandwidth usage: " msgstr "" -#: ../../kde4/settingsdialog.py:629 ../../gnome/settingsdialog.glade:2259 +#: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" -#: ../../kde4/settingsdialog.py:634 ../../gnome/settingsdialog.glade:2280 +#: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "Запазване на ACL (списък за контрол на достъпа)" -#: ../../kde4/settingsdialog.py:637 ../../gnome/settingsdialog.glade:2297 +#: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "Запазване на разширените атрибути (xattr)" -#: ../../kde4/settingsdialog.py:640 ../../gnome/settingsdialog.glade:2314 +#: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute links)" msgstr "Копиране на несигурните връзки (работи само с абсолютни връзки)" -#: ../../kde4/settingsdialog.py:643 ../../gnome/settingsdialog.glade:2331 -msgid "Copy links (dereference symbolic links)" -msgstr "Копирай връзките към файлове (следвай символните връзки)" - -#: ../../kde4/snapshotsdialog.py:46 ../../kde4/snapshotsdialog.py:173 -#: ../../gnome/snapshotsdialog.glade:385 -msgid "Diff Options" -msgstr "Настройки на сравняването" - -#: ../../kde4/snapshotsdialog.py:56 ../../gnome/snapshotsdialog.glade:314 -msgid "Command:" -msgstr "Команда:" +#: ../../qt4/settingsdialog.py:834 +msgid "Paste additional options to rsync" +msgstr "" -#: ../../kde4/snapshotsdialog.py:60 ../../gnome/snapshotsdialog.glade:322 -msgid "Parameters:" -msgstr "Параметри:" +#: ../../qt4/settingsdialog.py:837 +msgid "" +"Options must be quoted e.g. --exclude-from=\"/path/to/my exclude file\"." +msgstr "" -#: ../../kde4/snapshotsdialog.py:64 ../../gnome/snapshotsdialog.glade:334 -msgid "Use %1 and %2 for path parameters" -msgstr "Използване на %1 и %2 за параметри на пътя" +#: ../../qt4/settingsdialog.py:847 +msgid "Add prefix to SSH commands" +msgstr "" -#: ../../kde4/snapshotsdialog.py:123 ../../gnome/snapshotsdialog.glade:184 -#: ../../gnome/snapshotsdialog.glade:186 -msgid "Delete" +#: ../../qt4/settingsdialog.py:850 +#, python-format +msgid "" +"Prefix to run before every command on remote host.\n" +"Variables need to be escaped with \\$FOO.\n" +"This doesn't touch rsync. So to add a prefix\n" +"for rsync use \"%(cb_rsync_options)s\" with\n" +"%(rsync_options_value)s\n" +"\n" +"%(default)s: %(def_value)s" msgstr "" -#: ../../kde4/snapshotsdialog.py:128 ../../gnome/snapshotsdialog.glade:199 -#: ../../gnome/snapshotsdialog.glade:201 -msgid "Select All" +#: ../../qt4/settingsdialog.py:858 ../../qt4/settingsdialog.py:1691 +msgid "default" msgstr "" -#: ../../kde4/snapshotsdialog.py:132 ../../gnome/snapshotsdialog.glade:88 -msgid "List only different snapshots" -msgstr "Изброяване само на различаващите се моментни архиви" +#: ../../qt4/settingsdialog.py:875 +msgid "Restore Config" +msgstr "" -#: ../../kde4/snapshotsdialog.py:139 ../../gnome/snapshotsdialog.glade:110 -msgid "List only equal snapshots to: " +#: ../../qt4/settingsdialog.py:891 +msgid "" +"Full system backup can only create a snapshot to be restored to the same " +"physical disk(s) with the same disk partitioning as from the source; " +"restoring to new physical disks or the same disks with different " +"partitioning will yield a potentially broken and unusable system.\n" +"\n" +"Full system backup will override some settings that may have been " +"customized. Continue?" msgstr "" -#: ../../kde4/snapshotsdialog.py:149 ../../gnome/snapshotsdialog.glade:146 -msgid "Deep check (more accurate, but slow)" -msgstr "Дълбока проверка (по-точна, но бавна)" +#: ../../qt4/settingsdialog.py:922 +msgid "New profile" +msgstr "Нов профил" -#: ../../kde4/snapshotsdialog.py:174 -msgid "Go To" -msgstr "Отиване до" +#: ../../qt4/settingsdialog.py:938 +msgid "Rename profile" +msgstr "Преименуване на профил" -#: ../../gnome/logviewdialog.glade:9 -msgid "Log View" -msgstr "Преглед на дневника" +#: ../../qt4/settingsdialog.py:952 +#, python-format +msgid "Are you sure you want to delete the profile \"%s\" ?" +msgstr "Сигурни ли сте, че желаете да изтриете профила \"%s\" ?" -#: ../../gnome/logviewdialog.glade:179 -msgid "scroll down automatic" +#: ../../qt4/settingsdialog.py:1191 +msgid "" +"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " +"*/3 for periodic backups every 3 hours" msgstr "" -#: ../../gnome/mainwindow.glade:7 -msgid "Back In Time" -msgstr "Back In Time" - -#: ../../gnome/mainwindow.glade:45 -msgid "Backup Now" -msgstr "Архивиране сега" +#: ../../qt4/settingsdialog.py:1489 +msgid "Exclude pattern" +msgstr "Шаблон за изключване" -#: ../../gnome/mainwindow.glade:171 -msgid "Shutdown" -msgstr "" +#: ../../qt4/settingsdialog.py:1502 +msgid "Exclude file" +msgstr "Изключване на файл" -#: ../../gnome/mainwindow.glade:287 -msgid "Parent folder" -msgstr "Родителска папка" +#: ../../qt4/settingsdialog.py:1506 +msgid "Exclude folder" +msgstr "Изключване на папка" -#: ../../gnome/mainwindow.glade:327 -msgid "Hidden files" -msgstr "Скрити файлове" +#: ../../qt4/settingsdialog.py:1525 +msgid "Include file" +msgstr "Включване на файл" -#: ../../gnome/mainwindow.glade:451 +#: ../../qt4/settingsdialog.py:1533 ../../qt4/settingsdialog.py:1553 +#, python-format msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +"\"%s\" is a symlink. The linked target will not be backed up until you " +"include it, too.\n" +"Would you like to include the symlinks target instead?" msgstr "" -"Тази папка не съществува\n" -"в текущия моментен архив !" -#: ../../gnome/settingsdialog.glade:287 -msgid "Where to save snapshots" -msgstr "Къде да се запазват моментните архиви" +#: ../../qt4/settingsdialog.py:1545 +msgid "Include folder" +msgstr "Включване на папка" -#: ../../gnome/settingsdialog.glade:483 -msgid "Private key:" -msgstr "" +#: ../../qt4/settingsdialog.py:1572 +msgid "Are you sure you want to change snapshots folder ?" +msgstr "Сигурни ли сте, че жеалете да промените папката за моментни архиви ?" -#: ../../gnome/settingsdialog.glade:534 -msgid "Advanced SSH Settings" +#: ../../qt4/settingsdialog.py:1688 +msgid "enabled" msgstr "" -#: ../../gnome/settingsdialog.glade:552 -msgid "SSH Settings" +#: ../../qt4/settingsdialog.py:1690 +msgid "disabled" msgstr "" -#: ../../gnome/settingsdialog.glade:815 -msgid "Password" +#: ../../qt4/settingsdialog.py:1715 +msgid "Restore Settings" msgstr "" -#: ../../gnome/settingsdialog.glade:930 -msgid "Profile Id:" -msgstr "Ид на профила:" +#: ../../qt4/settingsdialog.py:1732 +msgid " and add your user to group 'fuse'" +msgstr "" -#: ../../gnome/settingsdialog.glade:1115 +#: ../../qt4/settingsdialog.py:1736 +#, python-format msgid "" -"hours seperate by comma ( e.g. 8,12,18,23) or */3 for periodic backups every " -"3 hours (cron style)" +"Please navigate to the snapshot from which you want to restore %(appName)s's " +"configuration. The path may look like: \n" +"%(samplePath)s\n" +"\n" +"If your snapshots are on a remote drive or if they are encrypted you need to " +"manually mount them first. If you use Mode SSH you also may need to set up " +"public key login to the remote host%(addFuse)s.\n" +"Take a look at 'man backintime'." msgstr "" -#: ../../gnome/settingsdialog.glade:1163 -msgid "Schedule" -msgstr "Разписание" +#: ../../qt4/settingsdialog.py:1794 ../../qt4/settingsdialog.py:1854 +msgid "No config found" +msgstr "" + +#: ../../qt4/snapshotsdialog.py:49 ../../qt4/snapshotsdialog.py:173 +msgid "Diff Options" +msgstr "Настройки на сравняването" + +#: ../../qt4/snapshotsdialog.py:56 +msgid "Command:" +msgstr "Команда:" + +#: ../../qt4/snapshotsdialog.py:60 +msgid "Parameters:" +msgstr "Параметри:" + +#: ../../qt4/snapshotsdialog.py:64 +msgid "Use %1 and %2 for path parameters" +msgstr "Използване на %1 и %2 за параметри на пътя" + +#: ../../qt4/snapshotsdialog.py:106 +msgid "List only different snapshots" +msgstr "Изброяване само на различаващите се моментни архиви" -#: ../../gnome/settingsdialog.glade:1363 -msgid "Highly recommended:" -msgstr "Силно препоръчително:" +#: ../../qt4/snapshotsdialog.py:113 +msgid "List only equal snapshots to: " +msgstr "" + +#: ../../qt4/snapshotsdialog.py:123 +msgid "Deep check (more accurate, but slow)" +msgstr "Дълбока проверка (по-точна, но бавна)" -#: ../../gnome/settingsdialog.glade:1377 -msgid "label" -msgstr "етикет" +#: ../../qt4/snapshotsdialog.py:144 +msgid "Delete" +msgstr "" -#: ../../gnome/settingsdialog.glade:1755 -msgid "week(s)" +#: ../../qt4/snapshotsdialog.py:148 +msgid "Select All" msgstr "" -#: ../../gnome/settingsdialog.glade:2069 -msgid "Log level:" -msgstr "Ниво на записа:" +#: ../../qt4/snapshotsdialog.py:161 +msgid "Diff" +msgstr "Сравняване" + +#: ../../qt4/snapshotsdialog.py:172 +msgid "Go To" +msgstr "Отиване до" -#: ../../gnome/settingsdialog.glade:2121 +#: ../../qt4/snapshotsdialog.py:326 +msgid "You can't compare a snapshot to itself" +msgstr "Не можете да сравнявате моментен архив сам със себе си" + +#: ../../qt4/snapshotsdialog.py:333 +#, python-format +msgid "Command not found: %s" +msgstr "Командата не е открита: %s" + +#: ../../qt4/snapshotsdialog.py:354 +#, python-format msgid "" -"Change these options only if you really know what you are doing !" -msgstr "Променяйте тези настройки, само ако знаете какво правите !" +"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" +msgstr "" -#: ../../gnome/snapshotsdialog.glade:263 -msgid "Diff with" -msgstr "Сравняване с" +#: ../../qt4/snapshotsdialog.py:357 +#, python-format +msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +msgstr "" -#: ../../gnome/textinputdialog.glade:7 -msgid "Pattern" -msgstr "Шаблон" +#: ../../qt4/snapshotsdialog.py:359 +msgid "WARNING: This can not be revoked!" +msgstr "" -#: ../../gnome/textinputdialog.glade:70 -msgid "Text" +#: ../../qt4/snapshotsdialog.py:374 +#, python-format +msgid "Exclude \"%s\" from future snapshots?" msgstr "" diff -Nru backintime-1.0.36/common/po/bs.po backintime-1.1.12/common/po/bs.po --- backintime-1.0.36/common/po/bs.po 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/po/bs.po 2016-01-11 18:07:58.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2013-11-09 22:34+0100\n" +"POT-Creation-Date: 2015-12-19 00:47+0100\n" "PO-Revision-Date: 2010-08-26 01:13+0000\n" "Last-Translator: Semir Hodzic \n" "Language-Team: Bosnian \n" @@ -16,254 +16,295 @@ "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Launchpad-Export-Date: 2014-08-06 10:20+0000\n" -"X-Generator: Launchpad (build 17147)\n" +"X-Launchpad-Export-Date: 2016-01-11 17:52+0000\n" +"X-Generator: Launchpad (build 17881)\n" -#: ../../common/config.py:72 +#: ../../common/configfile.py:60 +#, python-format +msgid "Failed to save config: %s" +msgstr "" + +#: ../../common/configfile.py:78 +#, python-format +msgid "Failed to load config: %s" +msgstr "" + +#: ../../common/configfile.py:352 ../../common/configfile.py:414 +#, python-format +msgid "Profile \"%s\" already exists !" +msgstr "Profil \"%s\" već postoji !" + +#: ../../common/configfile.py:383 +msgid "You can't remove the last profile !" +msgstr "Ne možeš izbrisati zadnji profil!" + +#: ../../common/config.py:76 msgid "Disabled" msgstr "Isključeno" -#: ../../common/config.py:73 +#: ../../common/config.py:77 msgid "At every boot/reboot" msgstr "" -#: ../../common/config.py:74 +#: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Svakih 5 minuta" -#: ../../common/config.py:75 +#: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Svakih 10 minuta" -#: ../../common/config.py:76 +#: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "" -#: ../../common/config.py:77 +#: ../../common/config.py:81 msgid "Every hour" msgstr "" -#: ../../common/config.py:78 +#: ../../common/config.py:82 msgid "Every 2 hours" msgstr "" -#: ../../common/config.py:79 +#: ../../common/config.py:83 msgid "Every 4 hours" msgstr "" -#: ../../common/config.py:80 +#: ../../common/config.py:84 msgid "Every 6 hours" msgstr "" -#: ../../common/config.py:81 +#: ../../common/config.py:85 msgid "Every 12 hours" msgstr "" -#: ../../common/config.py:82 +#: ../../common/config.py:86 msgid "Custom Hours" msgstr "" -#: ../../common/config.py:83 +#: ../../common/config.py:87 msgid "Every Day" msgstr "Svaki dan" -#: ../../common/config.py:84 -msgid "Daily (anacron)" +#: ../../common/config.py:88 +msgid "Repeatedly (anacron)" msgstr "" -#: ../../common/config.py:85 +#: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "" -#: ../../common/config.py:86 +#: ../../common/config.py:90 msgid "Every Week" msgstr "Svake sedmice" -#: ../../common/config.py:87 +#: ../../common/config.py:91 msgid "Every Month" msgstr "Svaki mjesec" -#: ../../common/config.py:91 +#: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Dan(i)" -#: ../../common/config.py:92 +#: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Sedmica(e)" -#: ../../common/config.py:93 +#: ../../common/config.py:97 msgid "Year(s)" msgstr "Godina(e)" -#: ../../common/config.py:100 +#: ../../common/config.py:101 +msgid "Hour(s)" +msgstr "" + +#: ../../common/config.py:104 +msgid "Month(s)" +msgstr "" + +#: ../../common/config.py:126 ../../qt4/settingsdialog.py:551 msgid " EXPERIMENTAL!" msgstr "" -#: ../../common/config.py:103 +#: ../../common/config.py:129 msgid "Local" msgstr "" -#: ../../common/config.py:104 +#: ../../common/config.py:130 msgid "SSH" msgstr "" -#: ../../common/config.py:104 ../../common/config.py:106 -#: ../../gnome/settingsdialog.py:475 ../../kde4/settingsdialog.py:1325 +#: ../../common/config.py:130 ../../common/config.py:132 +#: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "" -#: ../../common/config.py:105 +#: ../../common/config.py:131 msgid "Local encrypted" msgstr "" -#: ../../common/config.py:105 ../../common/config.py:106 +#: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "" -#: ../../common/config.py:106 +#: ../../common/config.py:132 msgid "SSH encrypted" msgstr "" -#: ../../common/config.py:112 +#: ../../common/config.py:135 msgid "Default" msgstr "" -#: ../../common/config.py:113 +#: ../../common/config.py:136 msgid "AES128-CTR" msgstr "" -#: ../../common/config.py:114 +#: ../../common/config.py:137 msgid "AES192-CTR" msgstr "" -#: ../../common/config.py:115 +#: ../../common/config.py:138 msgid "AES256-CTR" msgstr "" -#: ../../common/config.py:116 +#: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "" -#: ../../common/config.py:117 +#: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "" -#: ../../common/config.py:118 +#: ../../common/config.py:141 msgid "AES128-CBC" msgstr "" -#: ../../common/config.py:119 +#: ../../common/config.py:142 msgid "3DES-CBC" msgstr "" -#: ../../common/config.py:120 +#: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "" -#: ../../common/config.py:121 +#: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "" -#: ../../common/config.py:122 +#: ../../common/config.py:145 msgid "AES192-CBC" msgstr "" -#: ../../common/config.py:123 +#: ../../common/config.py:146 msgid "AES256-CBC" msgstr "" -#: ../../common/config.py:124 +#: ../../common/config.py:147 msgid "ARCFOUR" msgstr "" -#: ../../common/config.py:129 +#: ../../common/config.py:153 msgid "Main profile" msgstr "Glavni profil!" -#: ../../common/config.py:256 ../../common/config.py:275 -#: ../../common/config.py:286 ../../common/config.py:291 +#: ../../common/config.py:289 ../../common/config.py:296 +#: ../../common/config.py:307 ../../common/config.py:312 +#: ../../qt4/qt4systrayicon.py:61 #, python-format msgid "Profile: \"%s\"" msgstr "Profil: \"%s\"" -#: ../../common/config.py:256 +#: ../../common/config.py:289 msgid "Snapshots folder is not valid !" msgstr "Folder za slike zaslona nije validan !" -#: ../../common/config.py:275 +#: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "Moraš izabrati najmanje jedan folder za rezervu !" -#: ../../common/config.py:286 +#: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "Ne možeš dodati folder rezerve !" -#: ../../common/config.py:291 +#: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "" -#: ../../common/config.py:361 +#: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s nije direktorij !" -#: ../../common/config.py:376 ../../common/config.py:389 +#: ../../common/config.py:380 +msgid "Host/User/Profile-ID must not be empty!" +msgstr "" + +#: ../../common/config.py:388 ../../common/config.py:420 #, python-format msgid "" "Can't write to: %s\n" "Are you sure you have write access ?" msgstr "" -#: ../../common/config.py:1286 +#: ../../common/config.py:400 +#, python-format msgid "" -"Can't find crontab.\n" -"Are you sure cron is installed ?\n" -"If not you should disable all automatic backups." +"Destination filesystem for '%(path)s' is formatted with FAT which doesn't " +"support hard-links. Please use a native Linux filesystem." msgstr "" -#: ../../common/config.py:1338 +#: ../../common/config.py:405 #, python-format -msgid "Schedule udev doesn't work with mode %s" +msgid "" +"Destination filsystem for '%(path)s' is a SMB mounted share. Please make " +"sure the remote SMB server supports symlinks or activate '%(copyLinks)s' in " +"'%(expertOptions)s'." msgstr "" -#: ../../common/config.py:1342 -#, python-format -msgid "Couldn't find UUID for \"%s\"" +#: ../../common/config.py:408 ../../qt4/settingsdialog.py:815 +msgid "Copy links (dereference symbolic links)" msgstr "" -#: ../../common/config.py:1379 -msgid "Failed to remove udev rules" +#: ../../common/config.py:409 ../../qt4/settingsdialog.py:669 +msgid "Expert Options" msgstr "" -#: ../../common/config.py:1385 -msgid "Failed to create udev rules" +#: ../../common/config.py:411 +#, python-format +msgid "" +"Destination filesystem for '%(path)s is a sshfs mounted share. sshfs doesn't " +"support hard-links. Please use mode 'SSH' instead." msgstr "" -#: ../../common/config.py:1420 +#: ../../common/config.py:1407 msgid "" -"Can't find anacron.\n" -"Are you sure anacron is installed ?\n" -"If not you should disable daily anacron backups." +"Can't find crontab.\n" +"Are you sure cron is installed ?\n" +"If not you should disable all automatic backups." msgstr "" -#: ../../common/config.py:1439 -msgid "Please provide your sudo password to install the udev rule." +#: ../../common/config.py:1411 +msgid "Failed to write new crontab." msgstr "" -#: ../../common/config.py:1445 -msgid "Please provide your sudo password to remove unused udev rules." +#: ../../common/config.py:1505 +#, python-format +msgid "" +"Could not install Udev rule for profile %(profile_id)s. DBus Service " +"'%(dbus_interface)s' wasn't available" msgstr "" -#: ../../common/configfile.py:253 ../../common/configfile.py:315 +#: ../../common/config.py:1517 #, python-format -msgid "Profile \"%s\" already exists !" -msgstr "Profil \"%s\" već postoji !" +msgid "Schedule udev doesn't work with mode %s" +msgstr "" -#: ../../common/configfile.py:284 -msgid "You can't remove the last profile !" -msgstr "Ne možeš izbrisati zadnji profil!" +#: ../../common/config.py:1526 +#, python-format +msgid "Couldn't find UUID for \"%s\"" +msgstr "" -#: ../../common/encfstools.py:95 +#: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" @@ -271,38 +312,38 @@ "%(error)s" msgstr "" -#: ../../common/encfstools.py:105 +#: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "" -#: ../../common/encfstools.py:149 +#: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "" -#: ../../common/encfstools.py:153 +#: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" -#: ../../common/encfstools.py:154 +#: ../../common/encfstools.py:171 msgid "Cancel" msgstr "" -#: ../../common/encfstools.py:157 +#: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "" -#: ../../common/encfstools.py:161 +#: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "" -#: ../../common/encfstools.py:166 +#: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" -#: ../../common/encfstools.py:174 ../../common/sshtools.py:207 +#: ../../common/encfstools.py:196 ../../common/sshtools.py:262 #, python-format msgid "" "%(user)s is not member of group 'fuse'.\n" @@ -310,70 +351,73 @@ "Look at 'man backintime' for further instructions." msgstr "" -#: ../../common/encfstools.py:189 +#: ../../common/encfstools.py:211 msgid "" "encfs version 1.7.2 and before has a bug with option --reverse. Please " "update encfs" msgstr "" -#: ../../common/encfstools.py:453 ../../common/encfstools.py:480 -#: ../../common/snapshots.py:982 ../../common/snapshots.py:1288 -#: ../../kde4/app.py:82 ../../gnome/mainwindow.glade:43 +#: ../../common/encfstools.py:512 ../../common/snapshots.py:1131 +#: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "" -#: ../../common/mount.py:195 +#: ../../common/mount.py:204 #, python-format msgid "" "Hash collision occurred in hash_id %s. Incrementing global value " "hash_collision and try again." msgstr "" -#: ../../common/mount.py:246 +#: ../../common/mount.py:259 #, python-format msgid "mountpoint %s not empty." msgstr "" -#: ../../common/mount.py:286 +#: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" -#: ../../common/password.py:425 +#: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" -#: ../../common/snapshots.py:171 ../../gnome/app.py:1127 -#: ../../kde4/app.py:1014 +#: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Sad" -#: ../../common/snapshots.py:182 ../../gnome/gnometools.py:37 +#: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "" -#: ../../common/snapshots.py:282 +#: ../../common/snapshots.py:344 msgid "" "### This log has been decoded with automatic search pattern\n" "### If some paths are not decoded you can manually decode them with:\n" msgstr "" -#: ../../common/snapshots.py:465 +#: ../../common/snapshots.py:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "" -#: ../../common/snapshots.py:564 +#: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "" -#: ../../common/snapshots.py:739 +#: ../../common/snapshots.py:752 ../../qt4/app.py:377 ../../qt4/app.py:675 +#: ../../qt4/app.py:692 ../../qt4/qt4systrayicon.py:65 +msgid "Done" +msgstr "Završeno" + +#: ../../common/snapshots.py:860 msgid "" "Back In Time changed its backup format.\n" "\n" "Your old snapshots can be moved according to this new format. OK?" msgstr "" -#: ../../common/snapshots.py:749 +#: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" @@ -384,13 +428,13 @@ "(The program will still be able to discriminate between them)" msgstr "" -#: ../../common/snapshots.py:752 +#: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" msgstr "" -#: ../../common/snapshots.py:803 +#: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" @@ -403,7 +447,7 @@ "cannot continue taking snapshots" msgstr "" -#: ../../common/snapshots.py:812 +#: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" @@ -413,14 +457,14 @@ "if you are done restart Back In Time to proceed" msgstr "" -#: ../../common/snapshots.py:825 +#: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" msgstr "" -#: ../../common/snapshots.py:830 +#: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" @@ -432,172 +476,183 @@ "If you do not, you will be asked again next time you start Back In Time." msgstr "" -#: ../../common/snapshots.py:839 +#: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "" -#: ../../common/snapshots.py:841 +#: ../../common/snapshots.py:953 msgid "" "Back In Time still cannot continue taking new snapshots.\n" "Restart Back In Time to see the questions again" msgstr "" -#: ../../common/snapshots.py:913 +#: ../../common/snapshots.py:972 +msgid "Deferring backup while on battery" +msgstr "" + +#: ../../common/snapshots.py:1035 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it." msgstr "" -#: ../../common/snapshots.py:915 +#: ../../common/snapshots.py:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "" msgstr[1] "" -#: ../../common/snapshots.py:941 +#: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "" -#: ../../common/snapshots.py:950 +#: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "" -#: ../../common/snapshots.py:1088 +#: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "Nemoguće kreirati direktorij: %s" -#: ../../common/snapshots.py:1107 +#: ../../common/snapshots.py:1217 msgid "..." msgstr "..." -#: ../../common/snapshots.py:1134 +#: ../../common/snapshots.py:1238 +#, python-format +msgid "Found leftover '%s' which can be continued." +msgstr "" + +#: ../../common/snapshots.py:1250 +#, python-format +msgid "Remove leftover '%s' folder from last run" +msgstr "" + +#: ../../common/snapshots.py:1263 #, python-format msgid "Can't remove folder: %s" msgstr "Nemoguće izbrisati direktorij: %s" -#: ../../common/snapshots.py:1219 +#: ../../common/snapshots.py:1340 #, python-format msgid "Compare with snapshot %s" msgstr "" -#: ../../common/snapshots.py:1248 +#: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "" -#: ../../common/snapshots.py:1335 +#: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "" -#: ../../common/snapshots.py:1341 +#: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "Spremi dozvole ..." -#: ../../common/snapshots.py:1442 -#, python-format -msgid "Can't rename %(new_path)s to %(path)s" +#: ../../common/snapshots.py:1470 +msgid "Save permission over ssh failed. Retry normal method" msgstr "" -#: ../../common/snapshots.py:1562 -msgid "Remove old snapshots" +#: ../../common/snapshots.py:1521 +#, python-format +msgid "Can't rename %(new_path)s to %(path)s" msgstr "" -#: ../../common/snapshots.py:1586 ../../kde4/settingsdialog.py:501 -#: ../../gnome/settingsdialog.glade:1660 +#: ../../common/snapshots.py:1695 ../../common/snapshots.py:1728 +#: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "Pametno brisanje" -#: ../../common/snapshots.py:1591 +#: ../../common/snapshots.py:1704 +msgid "Remove old snapshots" +msgstr "" + +#: ../../common/snapshots.py:1733 msgid "Try to keep min free space" msgstr "" -#: ../../common/snapshots.py:1621 +#: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" -#: ../../common/sshtools.py:106 +#: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "" -#: ../../common/sshtools.py:113 +#: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "" -#: ../../common/sshtools.py:187 -#, python-format -msgid "" -"Failed to unlock SSH private key:\n" -"Error: %s" -msgstr "" - -#: ../../common/sshtools.py:194 +#: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" -#: ../../common/sshtools.py:199 +#: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" -#: ../../common/sshtools.py:217 +#: ../../common/sshtools.py:278 #, python-format msgid "" "Password-less authentication for %(user)s@%(host)s failed. Look at 'man " "backintime' for further instructions." msgstr "" -#: ../../common/sshtools.py:229 +#: ../../common/sshtools.py:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" -#: ../../common/sshtools.py:254 +#: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" -#: ../../common/sshtools.py:274 +#: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" -#: ../../common/sshtools.py:276 +#: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:278 +#: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:280 +#: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" -#: ../../common/sshtools.py:302 +#: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" -#: ../../common/sshtools.py:325 ../../common/sshtools.py:383 +#: ../../common/sshtools.py:423 ../../common/sshtools.py:553 #, python-format msgid "" "Remote host %(host)s doesn't support '%(command)s':\n" @@ -605,7 +660,7 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:387 +#: ../../common/sshtools.py:556 #, python-format msgid "" "Check commands on host %(host)s returned unknown error:\n" @@ -613,817 +668,937 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:400 +#: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "" -#: ../../gnome/app.py:185 ../../gnome/app.py:594 ../../gnome/app.py:608 -#: ../../kde4/app.py:299 ../../kde4/app.py:570 ../../kde4/app.py:587 -msgid "Done" -msgstr "Završeno" +#: ../../qt4/app.py:81 +msgid "Refresh snapshots list" +msgstr "" + +#: ../../qt4/app.py:85 ../../qt4/app.py:890 +msgid "Snapshot Name" +msgstr "" -#: ../../gnome/app.py:189 ../../kde4/app.py:143 ../../kde4/app.py:159 -#: ../../gnome/mainwindow.glade:225 +#: ../../qt4/app.py:88 +msgid "Remove Snapshot" +msgstr "" + +#: ../../qt4/app.py:91 +msgid "View Snapshot Log" +msgstr "" + +#: ../../qt4/app.py:94 +msgid "View Last Log" +msgstr "" + +#: ../../qt4/app.py:99 ../../qt4/settingsdialog.py:51 +msgid "Settings" +msgstr "Postavke" + +#: ../../qt4/app.py:104 +msgid "Shutdown" +msgstr "" + +#: ../../qt4/app.py:105 +msgid "Shutdown system after snapshot has finished." +msgstr "" + +#: ../../qt4/app.py:111 +msgid "Exit" +msgstr "Izlaz" + +#: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 msgid "Help" msgstr "Pomoć" -#: ../../gnome/app.py:191 ../../kde4/app.py:146 -#: ../../gnome/mainwindow.glade:223 +#: ../../qt4/app.py:122 +msgid "Config File Help" +msgstr "" + +#: ../../qt4/app.py:125 msgid "Website" msgstr "" -#: ../../gnome/app.py:192 ../../kde4/app.py:148 +#: ../../qt4/app.py:127 ../../qt4/app.py:982 +msgid "Changelog" +msgstr "" + +#: ../../qt4/app.py:129 msgid "FAQ" msgstr "" -#: ../../gnome/app.py:193 ../../kde4/app.py:150 +#: ../../qt4/app.py:131 msgid "Ask a question" msgstr "" -#: ../../gnome/app.py:194 ../../kde4/app.py:152 +#: ../../qt4/app.py:133 msgid "Report a bug" msgstr "" -#: ../../gnome/app.py:196 ../../kde4/app.py:155 +#: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "O" -#: ../../gnome/app.py:202 ../../gnome/app.py:887 -#: ../../gnome/restoredialog.py:84 ../../gnome/snapshotsdialog.py:83 -#: ../../gnome/snapshotsdialog.py:244 ../../kde4/app.py:206 -#: ../../kde4/app.py:216 ../../kde4/restoredialog.py:68 -#: ../../kde4/snapshotsdialog.py:111 ../../kde4/snapshotsdialog.py:117 -#: ../../gnome/mainwindow.glade:350 ../../gnome/mainwindow.glade:352 -#: ../../gnome/snapshotsdialog.glade:169 ../../gnome/snapshotsdialog.glade:171 +#: ../../qt4/app.py:163 +msgid "Up" +msgstr "Gore" + +#: ../../qt4/app.py:174 ../../qt4/settingsdialog.py:1776 +msgid "Show hidden files" +msgstr "Prikaži skrivene datoteke" + +#: ../../qt4/app.py:184 ../../qt4/app.py:199 ../../qt4/app.py:233 +#: ../../qt4/restoredialog.py:62 ../../qt4/settingsdialog.py:1818 +#: ../../qt4/snapshotsdialog.py:134 ../../qt4/snapshotsdialog.py:139 msgid "Restore" msgstr "Obnovi" -#: ../../gnome/app.py:203 ../../gnome/app.py:888 ../../gnome/gnometools.py:67 -#: ../../gnome/snapshotsdialog.py:84 ../../gnome/snapshotsdialog.py:245 -#: ../../kde4/app.py:208 ../../kde4/restoredialog.py:42 -#: ../../kde4/snapshotsdialog.py:113 +#: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 +#: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "" -#: ../../gnome/app.py:205 ../../gnome/app.py:896 ../../gnome/app.py:1146 -#: ../../kde4/app.py:1041 -#, python-format -msgid "Restore '%s'" +#: ../../qt4/app.py:194 +msgid "Restore and delete new files" msgstr "" -#: ../../gnome/app.py:207 ../../gnome/app.py:897 ../../gnome/app.py:1147 -#: ../../kde4/app.py:1042 +#: ../../qt4/app.py:201 #, python-format -msgid "Restore '%s' to ..." +msgid "" +"Restore selected file or folder.\n" +"If this button is grayed out this is most likely because \"%(now)s\" is " +"selected in left hand snapshots list." msgstr "" -#: ../../gnome/app.py:226 ../../kde4/app.py:235 -msgid "Shortcuts" -msgstr "Prečice" - -#: ../../gnome/app.py:249 -msgid "Name" -msgstr "Ime" - -#: ../../gnome/app.py:260 -msgid "Size" -msgstr "Veličina" - -#: ../../gnome/app.py:267 -msgid "Date" -msgstr "Datum" - -#: ../../gnome/app.py:286 ../../gnome/app.py:883 -#: ../../gnome/snapshotsdialog.py:116 ../../kde4/app.py:171 -#: ../../kde4/app.py:221 ../../kde4/snapshotsdialog.py:91 -#: ../../gnome/mainwindow.glade:366 ../../gnome/mainwindow.glade:368 -#: ../../gnome/snapshotsdialog.glade:8 +#: ../../qt4/app.py:206 ../../qt4/logviewdialog.py:67 +#: ../../qt4/qt4tools.py:160 ../../qt4/snapshotsdialog.py:96 msgid "Snapshots" msgstr "" -#: ../../gnome/app.py:348 ../../kde4/app.py:362 -msgid "" -"Can't find snapshots folder.\n" -"If it is on a removable drive please plug it and then press OK" +#: ../../qt4/app.py:213 +msgid "Snapshot" msgstr "" -#: ../../gnome/app.py:611 ../../kde4/app.py:590 -msgid "Done, no backup needed" +#: ../../qt4/app.py:224 +msgid "View" msgstr "" -#: ../../gnome/app.py:619 ../../kde4/app.py:598 -msgid "Working:" -msgstr "" +#: ../../qt4/app.py:277 +msgid "Shortcuts" +msgstr "Prečice" -#: ../../gnome/app.py:623 ../../kde4/app.py:602 -msgid "Error:" +#: ../../qt4/app.py:295 +msgid "" +"This folder doesn't exist\n" +"in the current selected snapshot!" msgstr "" -#: ../../gnome/app.py:636 ../../kde4/app.py:649 -msgid "Global" -msgstr "Globalno" - -#: ../../gnome/app.py:637 ../../kde4/app.py:650 -msgid "Root" -msgstr "Korijen" - -#: ../../gnome/app.py:638 ../../kde4/app.py:651 -msgid "Home" +#: ../../qt4/app.py:359 +msgid "Add to Include" msgstr "" -#: ../../gnome/app.py:662 -msgid "Bookmarks" -msgstr "Zabilješke" - -#: ../../gnome/app.py:675 ../../kde4/app.py:662 -msgid "Backup folders" +#: ../../qt4/app.py:360 +msgid "Add to Exclude" msgstr "" -#: ../../gnome/app.py:701 ../../kde4/app.py:734 -msgid "Today" -msgstr "Danas" - -#: ../../gnome/app.py:705 ../../kde4/app.py:738 -msgid "Yesterday" -msgstr "Jučer" - -#: ../../gnome/app.py:709 ../../kde4/app.py:742 -msgid "This week" -msgstr "Ove sedmice" +#: ../../qt4/app.py:416 +#, python-format +msgid "" +"%(appName)s is not configured. Would you like to restore a previous " +"configuration?" +msgstr "" -#: ../../gnome/app.py:713 ../../kde4/app.py:746 -msgid "Last week" -msgstr "Prošle sedmice" +#: ../../qt4/app.py:440 +msgid "" +"Can't find snapshots folder.\n" +"If it is on a removable drive please plug it and then press OK" +msgstr "" -#: ../../gnome/app.py:764 ../../kde4/app.py:398 +#: ../../qt4/app.py:473 msgid "" "If you close this window Back In Time will not be able to shutdown your " "system when the snapshot has finished.\n" "Do you really want to close?" msgstr "" -#: ../../gnome/app.py:881 ../../gnome/snapshotsdialog.py:238 -msgid "Open" -msgstr "Otvori" - -#: ../../gnome/app.py:1056 ../../kde4/app.py:90 ../../kde4/app.py:805 -#: ../../gnome/mainwindow.glade:73 ../../gnome/mainwindow.glade:75 -msgid "Snapshot Name" +#: ../../qt4/app.py:667 ../../qt4/app.py:703 +msgid "Working:" msgstr "" -#: ../../gnome/app.py:1075 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +#: ../../qt4/app.py:695 +msgid "Done, no backup needed" msgstr "" -#: ../../gnome/app.py:1123 ../../kde4/app.py:1010 -#, python-format -msgid "Snapshot: %s" +#: ../../qt4/app.py:707 +msgid "Error:" msgstr "" -#: ../../gnome/app.py:1124 ../../kde4/app.py:1011 -#, python-format -msgid "View the snapshot made at %s" +#: ../../qt4/app.py:726 ../../qt4/qt4systrayicon.py:153 +msgid "Sent:" msgstr "" -#: ../../gnome/app.py:1126 ../../kde4/app.py:1013 -msgid "View the current disk content" -msgstr "Pogledaj trenutni sadržaj diska" - -#: ../../gnome/logviewdialog.py:106 ../../gnome/settingsdialog.py:414 -#: ../../kde4/logviewdialog.py:83 ../../kde4/settingsdialog.py:590 -msgid "All" +#: ../../qt4/app.py:727 ../../qt4/qt4systrayicon.py:154 +msgid "Speed:" msgstr "" -#: ../../gnome/logviewdialog.py:107 ../../gnome/settingsdialog.py:412 -#: ../../kde4/logviewdialog.py:84 ../../kde4/settingsdialog.py:588 -msgid "Errors" +#: ../../qt4/app.py:728 ../../qt4/qt4systrayicon.py:155 +msgid "ETA:" msgstr "" -#: ../../gnome/logviewdialog.py:112 ../../kde4/logviewdialog.py:89 -msgid "Changes" -msgstr "" +#: ../../qt4/app.py:777 +msgid "Global" +msgstr "Globalno" -#: ../../gnome/logviewdialog.py:115 ../../kde4/logviewdialog.py:92 -msgid "Informations" +#: ../../qt4/app.py:778 +msgid "Root" +msgstr "Korijen" + +#: ../../qt4/app.py:779 +msgid "Home" msgstr "" -#: ../../gnome/settingsdialog.py:235 ../../kde4/settingsdialog.py:387 -msgid "Include files and folders" +#: ../../qt4/app.py:794 +msgid "Backup folders" msgstr "" -#: ../../gnome/settingsdialog.py:264 -msgid "Exclude patterns, files or folders" +#: ../../qt4/app.py:849 +msgid "This is NOT a snapshot but a live view of your local files" msgstr "" -#: ../../gnome/settingsdialog.py:411 ../../kde4/settingsdialog.py:587 -msgid "None" +#: ../../qt4/app.py:860 ../../qt4/app.py:1476 +#, python-format +msgid "Last check %s" msgstr "" -#: ../../gnome/settingsdialog.py:413 ../../kde4/settingsdialog.py:589 -msgid "Changes & Errors" +#: ../../qt4/app.py:928 +#, python-format +msgid "" +"Are you sure you want to remove the snapshot:\n" +"%s" msgstr "" -#: ../../gnome/settingsdialog.py:458 -msgid "Snapshots folder" +#: ../../qt4/app.py:1004 +#, python-format +msgid "" +"Backup local files before overwriting or\n" +"removing with trailing '%(suffix)s'." msgstr "" -#: ../../gnome/settingsdialog.py:466 ../../kde4/settingsdialog.py:1314 -msgid "Are you sure you want to change snapshots folder ?" +#: ../../qt4/app.py:1010 +msgid "" +"Are you sure you want to remove all newer files in your original folder?" msgstr "" -#: ../../gnome/settingsdialog.py:901 ../../kde4/settingsdialog.py:914 +#: ../../qt4/app.py:1014 msgid "" -"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " -"*/3 for periodic backups every 3 hours" +"WARNING: deleting files in filesystem root could break your whole system!!!" msgstr "" -#: ../../gnome/settingsdialog.py:1141 ../../kde4/settingsdialog.py:653 -msgid "New profile" +#: ../../qt4/app.py:1016 +msgid "Files to be restored:" msgstr "" -#: ../../gnome/settingsdialog.py:1155 ../../kde4/settingsdialog.py:669 -msgid "Rename profile" +#: ../../qt4/app.py:1031 +msgid "Do you really want to restore this files(s):" msgstr "" -#: ../../gnome/settingsdialog.py:1167 ../../kde4/settingsdialog.py:683 +#: ../../qt4/app.py:1226 #, python-format -msgid "Are you sure you want to delete the profile \"%s\" ?" +msgid "Snapshot: %s" msgstr "" -#: ../../gnome/settingsdialog.py:1173 ../../kde4/settingsdialog.py:1292 -msgid "Include folder" -msgstr "Uključi direktorij" - -#: ../../gnome/settingsdialog.py:1193 ../../kde4/settingsdialog.py:1278 -msgid "Include file" +#: ../../qt4/app.py:1227 +#, python-format +msgid "View the snapshot made at %s" msgstr "" -#: ../../gnome/settingsdialog.py:1235 ../../kde4/settingsdialog.py:1241 -msgid "Exclude pattern" -msgstr "" +#: ../../qt4/app.py:1229 +msgid "View the current disk content" +msgstr "Pogledaj trenutni sadržaj diska" -#: ../../gnome/settingsdialog.py:1240 ../../kde4/settingsdialog.py:1251 -msgid "Exclude patterns can't contain ':' char !" +#: ../../qt4/app.py:1268 +#, python-format +msgid "Restore '%s'" msgstr "" -#: ../../gnome/settingsdialog.py:1246 ../../kde4/settingsdialog.py:1257 -msgid "Exclude file" +#: ../../qt4/app.py:1269 +#, python-format +msgid "Restore '%s' to ..." msgstr "" -#: ../../gnome/settingsdialog.py:1257 ../../kde4/settingsdialog.py:1261 -msgid "Exclude folder" +#: ../../qt4/app.py:1270 +#, python-format +msgid "Restore '%s' and delete new files" msgstr "" -#: ../../gnome/snapshotsdialog.py:240 -msgid "Jump to" +#: ../../qt4/app.py:1368 ../../qt4/app.py:1385 +msgid "Authors" msgstr "" -#: ../../gnome/snapshotsdialog.py:248 ../../kde4/snapshotsdialog.py:164 -msgid "Diff" +#: ../../qt4/app.py:1369 ../../qt4/app.py:1388 +msgid "Translations" msgstr "" -#: ../../gnome/snapshotsdialog.py:277 ../../kde4/snapshotsdialog.py:339 -msgid "You can't compare a snapshot to itself" +#: ../../qt4/app.py:1370 ../../qt4/app.py:1391 +msgid "License" msgstr "" -#: ../../gnome/snapshotsdialog.py:284 ../../kde4/snapshotsdialog.py:346 -#, python-format -msgid "Command not found: %s" -msgstr "Komanda nije pronađena: %s" - -#: ../../gnome/snapshotsdialog.py:307 ../../kde4/snapshotsdialog.py:367 -#, python-format -msgid "" -"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" +#: ../../qt4/logviewdialog.py:49 +msgid "Last Log View" msgstr "" -#: ../../gnome/snapshotsdialog.py:310 ../../kde4/snapshotsdialog.py:370 -#, python-format -msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +#: ../../qt4/logviewdialog.py:51 +msgid "Snapshot Log View" msgstr "" -#: ../../gnome/snapshotsdialog.py:312 ../../kde4/snapshotsdialog.py:372 -msgid "WARNING: This can not be revoked!" +#: ../../qt4/logviewdialog.py:59 ../../qt4/settingsdialog.py:59 +#: ../../qt4/settingsdialog.py:274 ../../qt4/settingsdialog.py:1899 +msgid "Profile:" msgstr "" -#: ../../gnome/snapshotsdialog.py:317 ../../kde4/snapshotsdialog.py:377 -#, python-format -msgid "Exclude \"%s\" from future snapshots?" +#: ../../qt4/logviewdialog.py:81 +msgid "Filter:" msgstr "" -#: ../../kde4/app.py:86 ../../gnome/mainwindow.glade:58 -#: ../../gnome/mainwindow.glade:60 -msgid "Refresh snapshots list" +#: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 +msgid "All" msgstr "" -#: ../../kde4/app.py:94 ../../gnome/mainwindow.glade:88 -#: ../../gnome/mainwindow.glade:90 -msgid "Remove Snapshot" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 +#: ../../qt4/settingsdialog.py:657 +msgid "Errors" msgstr "" -#: ../../kde4/app.py:98 ../../gnome/mainwindow.glade:105 -msgid "View Snapshot Log" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 +msgid "Changes" msgstr "" -#: ../../kde4/app.py:102 ../../gnome/mainwindow.glade:121 -msgid "View Last Log" +#: ../../qt4/logviewdialog.py:92 +msgid "Informations" msgstr "" -#: ../../kde4/app.py:108 ../../kde4/settingsdialog.py:69 -#: ../../gnome/mainwindow.glade:144 ../../gnome/mainwindow.glade:146 -#: ../../gnome/settingsdialog.glade:7 -msgid "Settings" -msgstr "Postavke" - -#: ../../kde4/app.py:124 ../../gnome/mainwindow.glade:169 -msgid "Shutdown system after snapshot has finished." +#: ../../qt4/logviewdialog.py:101 +msgid "[E] Error, [I] Information, [C] Change" msgstr "" -#: ../../kde4/app.py:131 ../../gnome/mainwindow.glade:184 -#: ../../gnome/mainwindow.glade:186 -msgid "Exit" -msgstr "Izlaz" - -#: ../../kde4/app.py:186 ../../gnome/mainwindow.glade:289 -msgid "Up" -msgstr "Gore" +#: ../../qt4/logviewdialog.py:104 +msgid "decode paths" +msgstr "" -#: ../../kde4/app.py:199 ../../gnome/mainwindow.glade:325 -msgid "Show hidden files" -msgstr "Prikaži skrivene datoteke" +#: ../../qt4/messagebox.py:56 +msgid "Error" +msgstr "" -#: ../../kde4/app.py:244 -msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +#: ../../qt4/messagebox.py:62 ../../qt4/messagebox.py:68 +msgid "Question" msgstr "" -#: ../../kde4/app.py:839 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +#: ../../qt4/qt4systrayicon.py:69 +msgid "Start BackInTime" msgstr "" -#: ../../kde4/app.py:1140 ../../kde4/kde4systrayicon.py:117 +#: ../../qt4/qt4systrayicon.py:124 msgid "Working..." msgstr "" -#: ../../kde4/logviewdialog.py:55 -msgid "Error Log View" -msgstr "" +#: ../../qt4/qt4tools.py:178 +msgid "Today" +msgstr "Danas" -#: ../../kde4/logviewdialog.py:65 ../../kde4/settingsdialog.py:79 -#: ../../kde4/settingsdialog.py:293 ../../gnome/logviewdialog.glade:73 -#: ../../gnome/settingsdialog.glade:72 -msgid "Profile:" +#: ../../qt4/qt4tools.py:183 +msgid "Yesterday" +msgstr "Jučer" + +#: ../../qt4/qt4tools.py:188 +msgid "This week" +msgstr "Ove sedmice" + +#: ../../qt4/qt4tools.py:193 +msgid "Last week" +msgstr "Prošle sedmice" + +#: ../../qt4/restoredialog.py:75 +msgid "Show full Log" msgstr "" -#: ../../kde4/logviewdialog.py:77 ../../gnome/logviewdialog.glade:110 -msgid "Filter:" +#: ../../qt4/settingsdialog.py:68 +msgid "Edit" msgstr "" -#: ../../kde4/logviewdialog.py:100 ../../gnome/logviewdialog.glade:169 -msgid "[E] Error, [I] Information, [C] Change" +#: ../../qt4/settingsdialog.py:73 +msgid "Modify for Full System Backup" msgstr "" -#: ../../kde4/logviewdialog.py:103 ../../gnome/logviewdialog.glade:195 -msgid "decode paths" +#: ../../qt4/settingsdialog.py:77 ../../qt4/settingsdialog.py:451 +msgid "Add" msgstr "" -#: ../../kde4/settingsdialog.py:88 -msgid "Edit" +#: ../../qt4/settingsdialog.py:81 ../../qt4/settingsdialog.py:408 +#: ../../qt4/settingsdialog.py:467 +msgid "Remove" msgstr "" -#: ../../kde4/settingsdialog.py:106 ../../gnome/settingsdialog.glade:1207 +#: ../../qt4/settingsdialog.py:96 msgid "General" msgstr "Opšte" -#: ../../kde4/settingsdialog.py:114 ../../gnome/settingsdialog.glade:199 +#: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "" -#: ../../kde4/settingsdialog.py:127 ../../kde4/settingsdialog.py:1311 +#: ../../qt4/settingsdialog.py:119 +#, python-format +msgid "" +"Warning: %(app)s uses EncFS for encryption. A recent security audit " +"revealed several possible attack vectors for this. Please take a look at 'A " +"NOTE ON SECURITY' in 'man backintime'." +msgstr "" + +#: ../../qt4/settingsdialog.py:129 ../../qt4/settingsdialog.py:1568 msgid "Where to save snapshots" msgstr "" -#: ../../kde4/settingsdialog.py:146 +#: ../../qt4/settingsdialog.py:145 +msgid "Folder" +msgstr "" + +#: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" -#: ../../kde4/settingsdialog.py:158 ../../kde4/settingsdialog.py:283 -#: ../../gnome/settingsdialog.glade:323 ../../gnome/settingsdialog.glade:583 -#: ../../gnome/settingsdialog.glade:874 +#: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "" -#: ../../kde4/settingsdialog.py:163 ../../gnome/settingsdialog.glade:350 -#: ../../gnome/settingsdialog.glade:610 +#: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "" -#: ../../kde4/settingsdialog.py:168 ../../kde4/settingsdialog.py:288 -#: ../../gnome/settingsdialog.glade:377 ../../gnome/settingsdialog.glade:637 -#: ../../gnome/settingsdialog.glade:902 +#: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "" -#: ../../kde4/settingsdialog.py:173 ../../gnome/settingsdialog.glade:416 +#: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" -#: ../../kde4/settingsdialog.py:178 ../../gnome/settingsdialog.glade:459 +#: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" -#: ../../kde4/settingsdialog.py:184 +#: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "" -#: ../../kde4/settingsdialog.py:228 ../../kde4/settingsdialog.py:237 -#: ../../kde4/settingsdialog.py:243 ../../gnome/settingsdialog.glade:703 -#: ../../gnome/settingsdialog.glade:743 +#: ../../qt4/settingsdialog.py:201 +msgid "Key File" +msgstr "" + +#: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 +#: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "" -#: ../../kde4/settingsdialog.py:249 ../../gnome/settingsdialog.glade:775 +#: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" -#: ../../kde4/settingsdialog.py:252 ../../gnome/settingsdialog.glade:792 +#: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" -#: ../../kde4/settingsdialog.py:264 ../../gnome/settingsdialog.glade:968 +#: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "" -#: ../../kde4/settingsdialog.py:276 ../../gnome/settingsdialog.glade:848 -msgid "Auto Host / User / Profile Id" +#: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 +msgid "Full snapshot path: " msgstr "" -#: ../../kde4/settingsdialog.py:301 +#: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "" -#: ../../kde4/settingsdialog.py:311 ../../gnome/settingsdialog.glade:1092 +#: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "" -#: ../../kde4/settingsdialog.py:322 ../../gnome/settingsdialog.glade:1079 +#: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "" -#: ../../kde4/settingsdialog.py:333 ../../gnome/settingsdialog.glade:1066 +#: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "" -#: ../../kde4/settingsdialog.py:344 ../../gnome/settingsdialog.glade:1053 +#: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "" -#: ../../kde4/settingsdialog.py:353 ../../gnome/settingsdialog.glade:1014 +#: ../../qt4/settingsdialog.py:339 msgid "" -"Run Back In Time periodically with anacron. This is useful if the computer " -"is not running regular." +"Run Back In Time repeatedly. This is useful if the computer is not running " +"regular." msgstr "" -#: ../../kde4/settingsdialog.py:357 ../../gnome/settingsdialog.glade:1040 -msgid "Frequency in days:" +#: ../../qt4/settingsdialog.py:344 +msgid "Every:" msgstr "" -#: ../../kde4/settingsdialog.py:368 ../../gnome/settingsdialog.glade:1026 +#: ../../qt4/settingsdialog.py:362 msgid "" "Run Back In Time as soon as the drive is connected (only once every X " "days).\n" "You will be prompted for your sudo password." msgstr "" -#: ../../kde4/settingsdialog.py:379 ../../gnome/settingsdialog.glade:1310 +#: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Uključi" -#: ../../kde4/settingsdialog.py:403 ../../kde4/settingsdialog.py:445 -#: ../../gnome/settingsdialog.glade:1411 +#: ../../qt4/settingsdialog.py:381 +msgid "Include files and folders" +msgstr "" + +#: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "Dodaje datoteku" -#: ../../kde4/settingsdialog.py:408 ../../kde4/settingsdialog.py:450 -#: ../../gnome/settingsdialog.glade:1427 +#: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Dodaj direktorij" -#: ../../kde4/settingsdialog.py:418 ../../gnome/settingsdialog.glade:1474 +#: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Isključi" -#: ../../kde4/settingsdialog.py:421 ../../gnome/settingsdialog.glade:1328 +#: ../../qt4/settingsdialog.py:417 msgid "" "Warning: Wildcards ('foo*', '[fF]oo', 'fo?') will be ignored with " "mode 'SSH encrypted'.\n" "Only separate asterisk are allowed ('foo/*', 'foo/**/bar')" msgstr "" -#: ../../kde4/settingsdialog.py:430 +#: ../../qt4/settingsdialog.py:425 +msgid "Exclude patterns, files or folders" +msgstr "" + +#: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "" -#: ../../kde4/settingsdialog.py:460 ../../gnome/settingsdialog.glade:1905 +#: ../../qt4/settingsdialog.py:463 +msgid "Add default" +msgstr "" + +#: ../../qt4/settingsdialog.py:474 +msgid "Exclude files bigger than: " +msgstr "" + +#: ../../qt4/settingsdialog.py:475 +#, python-format +msgid "" +"Exclude files bigger than value in %(prefix)s.\n" +"With 'Full rsync mode' disabled this will only affect new files\n" +"because for rsync this is a transfer option, not an exclude option.\n" +"So big files that has been backed up before will remain in snapshots\n" +"even if they had changed." +msgstr "" + +#: ../../qt4/settingsdialog.py:493 msgid "Auto-remove" msgstr "Automatsko brisanje" -#: ../../kde4/settingsdialog.py:464 ../../gnome/settingsdialog.glade:1608 +#: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "Starije od:" -#: ../../kde4/settingsdialog.py:478 ../../gnome/settingsdialog.glade:1624 +#: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "Ako je sloboni prostor manji od:" -#: ../../kde4/settingsdialog.py:490 ../../gnome/settingsdialog.glade:1642 +#: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" -#: ../../kde4/settingsdialog.py:514 ../../gnome/settingsdialog.glade:1697 +#: ../../qt4/settingsdialog.py:551 +msgid "Run in background on remote Host." +msgstr "" + +#: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "" -#: ../../kde4/settingsdialog.py:517 ../../kde4/settingsdialog.py:522 -#: ../../gnome/settingsdialog.glade:1705 ../../gnome/settingsdialog.glade:1729 +#: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "" -#: ../../kde4/settingsdialog.py:519 ../../gnome/settingsdialog.glade:1717 +#: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "" -#: ../../kde4/settingsdialog.py:524 ../../gnome/settingsdialog.glade:1743 +#: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "" -#: ../../kde4/settingsdialog.py:527 +#: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "" -#: ../../kde4/settingsdialog.py:529 ../../gnome/settingsdialog.glade:1769 +#: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "" -#: ../../kde4/settingsdialog.py:532 ../../gnome/settingsdialog.glade:1781 +#: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "" -#: ../../kde4/settingsdialog.py:534 ../../gnome/settingsdialog.glade:1795 +#: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "" -#: ../../kde4/settingsdialog.py:537 ../../gnome/settingsdialog.glade:1496 +#: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "" -#: ../../kde4/settingsdialog.py:546 ../../gnome/settingsdialog.glade:2104 +#: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Opcije" -#: ../../kde4/settingsdialog.py:549 ../../gnome/settingsdialog.glade:1920 +#: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Uključi obavijesti" -#: ../../kde4/settingsdialog.py:552 ../../gnome/settingsdialog.glade:1937 +#: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "" -#: ../../kde4/settingsdialog.py:555 +#: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" msgstr "" -#: ../../kde4/settingsdialog.py:558 ../../gnome/settingsdialog.glade:1955 -msgid "Backup files on restore" +#: ../../qt4/settingsdialog.py:611 +msgid "Run only one snapshot at a time" +msgstr "" + +#: ../../qt4/settingsdialog.py:612 +msgid "" +"Other snapshots will be blocked until the current snapshot is done.\n" +"This is a global option. So it will effect all profiles for this user.\n" +"But you need to activate this for all other users, too." +msgstr "" + +#: ../../qt4/settingsdialog.py:617 +msgid "Backup replaced files on restore" msgstr "" -#: ../../kde4/settingsdialog.py:561 ../../gnome/settingsdialog.glade:1972 +#: ../../qt4/settingsdialog.py:618 +#, python-format +msgid "" +"Newer versions of files will be renamed with trailing '%(suffix)s' before " +"restoring.\n" +"If you don't need them anymore you can remove them with '%(cmd)s'" +msgstr "" + +#: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "" -#: ../../kde4/settingsdialog.py:564 ../../gnome/settingsdialog.glade:1989 +#: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "" -#: ../../kde4/settingsdialog.py:567 ../../gnome/settingsdialog.glade:2006 +#: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "" -#: ../../kde4/settingsdialog.py:568 ../../gnome/settingsdialog.glade:2032 +#: ../../qt4/settingsdialog.py:634 msgid "" -"- snapshots are no read-only\n" -"- destination file-system must support all linux attributes (dates, rights, " +"- snapshots are not read-only\n" +"- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" -#: ../../kde4/settingsdialog.py:575 ../../gnome/settingsdialog.glade:2045 +#: ../../qt4/settingsdialog.py:641 +msgid "Take a new snapshot regardless of there were changes or not." +msgstr "" + +#: ../../qt4/settingsdialog.py:644 msgid "Check for changes (don't take a new snapshot if nothing changed)" msgstr "" -#: ../../kde4/settingsdialog.py:582 +#: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "" -#: ../../kde4/settingsdialog.py:597 ../../gnome/settingsdialog.glade:2366 -msgid "Expert Options" +#: ../../qt4/settingsdialog.py:656 +msgid "None" msgstr "" -#: ../../kde4/settingsdialog.py:600 +#: ../../qt4/settingsdialog.py:658 +msgid "Changes & Errors" +msgstr "" + +#: ../../qt4/settingsdialog.py:674 msgid "Change these options only if you really know what you are doing !" msgstr "" -#: ../../kde4/settingsdialog.py:608 ../../gnome/settingsdialog.glade:2133 -msgid "Run 'nice' as cron job (default: enabled)" +#: ../../qt4/settingsdialog.py:678 +msgid "Run 'nice':" +msgstr "" + +#: ../../qt4/settingsdialog.py:684 ../../qt4/settingsdialog.py:696 +msgid "as cron job" +msgstr "" + +#: ../../qt4/settingsdialog.py:687 ../../qt4/settingsdialog.py:702 +#: ../../qt4/settingsdialog.py:716 +msgid "on remote host" +msgstr "" + +#: ../../qt4/settingsdialog.py:690 +msgid "Run 'ionice':" +msgstr "" + +#: ../../qt4/settingsdialog.py:699 +msgid "when taking a manual snapshot" msgstr "" -#: ../../kde4/settingsdialog.py:611 ../../gnome/settingsdialog.glade:2150 -msgid "Run 'ionice' as cron job (default: enabled)" +#: ../../qt4/settingsdialog.py:706 +msgid "Run 'rsync' with 'nocache':" msgstr "" -#: ../../kde4/settingsdialog.py:614 ../../gnome/settingsdialog.glade:2167 -msgid "Run 'ionice' when taking a manual snapshot (default: disabled)" +#: ../../qt4/settingsdialog.py:712 +msgid "on local machine" msgstr "" -#: ../../kde4/settingsdialog.py:617 ../../gnome/settingsdialog.glade:2184 -msgid "Run 'nice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:719 +msgid "Redirect stdout to /dev/null in cronjobs." msgstr "" -#: ../../kde4/settingsdialog.py:620 ../../gnome/settingsdialog.glade:2201 -msgid "Run 'ionice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:725 +msgid "Redirect stderr to /dev/null in cronjobs." msgstr "" -#: ../../kde4/settingsdialog.py:626 ../../gnome/settingsdialog.glade:2224 +#: ../../qt4/settingsdialog.py:734 msgid "Limit rsync bandwidth usage: " msgstr "" -#: ../../kde4/settingsdialog.py:629 ../../gnome/settingsdialog.glade:2259 +#: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" -#: ../../kde4/settingsdialog.py:634 ../../gnome/settingsdialog.glade:2280 +#: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "" -#: ../../kde4/settingsdialog.py:637 ../../gnome/settingsdialog.glade:2297 +#: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "" -#: ../../kde4/settingsdialog.py:640 ../../gnome/settingsdialog.glade:2314 +#: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute links)" msgstr "" -#: ../../kde4/settingsdialog.py:643 ../../gnome/settingsdialog.glade:2331 -msgid "Copy links (dereference symbolic links)" +#: ../../qt4/settingsdialog.py:834 +msgid "Paste additional options to rsync" msgstr "" -#: ../../kde4/snapshotsdialog.py:46 ../../kde4/snapshotsdialog.py:173 -#: ../../gnome/snapshotsdialog.glade:385 -msgid "Diff Options" +#: ../../qt4/settingsdialog.py:837 +msgid "" +"Options must be quoted e.g. --exclude-from=\"/path/to/my exclude file\"." msgstr "" -#: ../../kde4/snapshotsdialog.py:56 ../../gnome/snapshotsdialog.glade:314 -msgid "Command:" -msgstr "Komanda:" +#: ../../qt4/settingsdialog.py:847 +msgid "Add prefix to SSH commands" +msgstr "" -#: ../../kde4/snapshotsdialog.py:60 ../../gnome/snapshotsdialog.glade:322 -msgid "Parameters:" -msgstr "Parametri:" +#: ../../qt4/settingsdialog.py:850 +#, python-format +msgid "" +"Prefix to run before every command on remote host.\n" +"Variables need to be escaped with \\$FOO.\n" +"This doesn't touch rsync. So to add a prefix\n" +"for rsync use \"%(cb_rsync_options)s\" with\n" +"%(rsync_options_value)s\n" +"\n" +"%(default)s: %(def_value)s" +msgstr "" -#: ../../kde4/snapshotsdialog.py:64 ../../gnome/snapshotsdialog.glade:334 -msgid "Use %1 and %2 for path parameters" -msgstr "Koristite %1 i %2 za parametre putanje" +#: ../../qt4/settingsdialog.py:858 ../../qt4/settingsdialog.py:1691 +msgid "default" +msgstr "" -#: ../../kde4/snapshotsdialog.py:123 ../../gnome/snapshotsdialog.glade:184 -#: ../../gnome/snapshotsdialog.glade:186 -msgid "Delete" +#: ../../qt4/settingsdialog.py:875 +msgid "Restore Config" msgstr "" -#: ../../kde4/snapshotsdialog.py:128 ../../gnome/snapshotsdialog.glade:199 -#: ../../gnome/snapshotsdialog.glade:201 -msgid "Select All" +#: ../../qt4/settingsdialog.py:891 +msgid "" +"Full system backup can only create a snapshot to be restored to the same " +"physical disk(s) with the same disk partitioning as from the source; " +"restoring to new physical disks or the same disks with different " +"partitioning will yield a potentially broken and unusable system.\n" +"\n" +"Full system backup will override some settings that may have been " +"customized. Continue?" msgstr "" -#: ../../kde4/snapshotsdialog.py:132 ../../gnome/snapshotsdialog.glade:88 -msgid "List only different snapshots" +#: ../../qt4/settingsdialog.py:922 +msgid "New profile" msgstr "" -#: ../../kde4/snapshotsdialog.py:139 ../../gnome/snapshotsdialog.glade:110 -msgid "List only equal snapshots to: " +#: ../../qt4/settingsdialog.py:938 +msgid "Rename profile" msgstr "" -#: ../../kde4/snapshotsdialog.py:149 ../../gnome/snapshotsdialog.glade:146 -msgid "Deep check (more accurate, but slow)" +#: ../../qt4/settingsdialog.py:952 +#, python-format +msgid "Are you sure you want to delete the profile \"%s\" ?" msgstr "" -#: ../../kde4/snapshotsdialog.py:174 -msgid "Go To" -msgstr "Idi na" +#: ../../qt4/settingsdialog.py:1191 +msgid "" +"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " +"*/3 for periodic backups every 3 hours" +msgstr "" -#: ../../gnome/logviewdialog.glade:9 -msgid "Log View" +#: ../../qt4/settingsdialog.py:1489 +msgid "Exclude pattern" msgstr "" -#: ../../gnome/logviewdialog.glade:179 -msgid "scroll down automatic" +#: ../../qt4/settingsdialog.py:1502 +msgid "Exclude file" msgstr "" -#: ../../gnome/mainwindow.glade:7 -msgid "Back In Time" +#: ../../qt4/settingsdialog.py:1506 +msgid "Exclude folder" msgstr "" -#: ../../gnome/mainwindow.glade:45 -msgid "Backup Now" +#: ../../qt4/settingsdialog.py:1525 +msgid "Include file" msgstr "" -#: ../../gnome/mainwindow.glade:171 -msgid "Shutdown" +#: ../../qt4/settingsdialog.py:1533 ../../qt4/settingsdialog.py:1553 +#, python-format +msgid "" +"\"%s\" is a symlink. The linked target will not be backed up until you " +"include it, too.\n" +"Would you like to include the symlinks target instead?" msgstr "" -#: ../../gnome/mainwindow.glade:287 -msgid "Parent folder" -msgstr "Roditeljski direktorij" +#: ../../qt4/settingsdialog.py:1545 +msgid "Include folder" +msgstr "Uključi direktorij" -#: ../../gnome/mainwindow.glade:327 -msgid "Hidden files" -msgstr "Skrivene datoteke" +#: ../../qt4/settingsdialog.py:1572 +msgid "Are you sure you want to change snapshots folder ?" +msgstr "" -#: ../../gnome/mainwindow.glade:451 -msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +#: ../../qt4/settingsdialog.py:1688 +msgid "enabled" msgstr "" -#: ../../gnome/settingsdialog.glade:287 -msgid "Where to save snapshots" +#: ../../qt4/settingsdialog.py:1690 +msgid "disabled" msgstr "" -#: ../../gnome/settingsdialog.glade:483 -msgid "Private key:" +#: ../../qt4/settingsdialog.py:1715 +msgid "Restore Settings" msgstr "" -#: ../../gnome/settingsdialog.glade:534 -msgid "Advanced SSH Settings" +#: ../../qt4/settingsdialog.py:1732 +msgid " and add your user to group 'fuse'" msgstr "" -#: ../../gnome/settingsdialog.glade:552 -msgid "SSH Settings" +#: ../../qt4/settingsdialog.py:1736 +#, python-format +msgid "" +"Please navigate to the snapshot from which you want to restore %(appName)s's " +"configuration. The path may look like: \n" +"%(samplePath)s\n" +"\n" +"If your snapshots are on a remote drive or if they are encrypted you need to " +"manually mount them first. If you use Mode SSH you also may need to set up " +"public key login to the remote host%(addFuse)s.\n" +"Take a look at 'man backintime'." msgstr "" -#: ../../gnome/settingsdialog.glade:815 -msgid "Password" +#: ../../qt4/settingsdialog.py:1794 ../../qt4/settingsdialog.py:1854 +msgid "No config found" msgstr "" -#: ../../gnome/settingsdialog.glade:930 -msgid "Profile Id:" +#: ../../qt4/snapshotsdialog.py:49 ../../qt4/snapshotsdialog.py:173 +msgid "Diff Options" msgstr "" -#: ../../gnome/settingsdialog.glade:1115 -msgid "" -"hours seperate by comma ( e.g. 8,12,18,23) or */3 for periodic backups every " -"3 hours (cron style)" +#: ../../qt4/snapshotsdialog.py:56 +msgid "Command:" +msgstr "Komanda:" + +#: ../../qt4/snapshotsdialog.py:60 +msgid "Parameters:" +msgstr "Parametri:" + +#: ../../qt4/snapshotsdialog.py:64 +msgid "Use %1 and %2 for path parameters" +msgstr "Koristite %1 i %2 za parametre putanje" + +#: ../../qt4/snapshotsdialog.py:106 +msgid "List only different snapshots" msgstr "" -#: ../../gnome/settingsdialog.glade:1163 -msgid "Schedule" +#: ../../qt4/snapshotsdialog.py:113 +msgid "List only equal snapshots to: " msgstr "" -#: ../../gnome/settingsdialog.glade:1363 -msgid "Highly recommended:" +#: ../../qt4/snapshotsdialog.py:123 +msgid "Deep check (more accurate, but slow)" msgstr "" -#: ../../gnome/settingsdialog.glade:1377 -msgid "label" +#: ../../qt4/snapshotsdialog.py:144 +msgid "Delete" msgstr "" -#: ../../gnome/settingsdialog.glade:1755 -msgid "week(s)" +#: ../../qt4/snapshotsdialog.py:148 +msgid "Select All" msgstr "" -#: ../../gnome/settingsdialog.glade:2069 -msgid "Log level:" +#: ../../qt4/snapshotsdialog.py:161 +msgid "Diff" msgstr "" -#: ../../gnome/settingsdialog.glade:2121 +#: ../../qt4/snapshotsdialog.py:172 +msgid "Go To" +msgstr "Idi na" + +#: ../../qt4/snapshotsdialog.py:326 +msgid "You can't compare a snapshot to itself" +msgstr "" + +#: ../../qt4/snapshotsdialog.py:333 +#, python-format +msgid "Command not found: %s" +msgstr "Komanda nije pronađena: %s" + +#: ../../qt4/snapshotsdialog.py:354 +#, python-format msgid "" -"Change these options only if you really know what you are doing !" +"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" msgstr "" -#: ../../gnome/snapshotsdialog.glade:263 -msgid "Diff with" +#: ../../qt4/snapshotsdialog.py:357 +#, python-format +msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" msgstr "" -#: ../../gnome/textinputdialog.glade:7 -msgid "Pattern" -msgstr "Šablon" +#: ../../qt4/snapshotsdialog.py:359 +msgid "WARNING: This can not be revoked!" +msgstr "" -#: ../../gnome/textinputdialog.glade:70 -msgid "Text" +#: ../../qt4/snapshotsdialog.py:374 +#, python-format +msgid "Exclude \"%s\" from future snapshots?" msgstr "" diff -Nru backintime-1.0.36/common/po/ca.po backintime-1.1.12/common/po/ca.po --- backintime-1.0.36/common/po/ca.po 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/po/ca.po 2016-01-11 18:07:58.000000000 +0000 @@ -7,206 +7,238 @@ msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2013-11-09 22:34+0100\n" -"PO-Revision-Date: 2013-09-15 08:06+0000\n" -"Last-Translator: Marc Coll Carrillo \n" +"POT-Creation-Date: 2015-12-19 00:47+0100\n" +"PO-Revision-Date: 2015-09-09 21:50+0000\n" +"Last-Translator: Back In Time Team \n" "Language-Team: Catalan \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2014-08-06 10:20+0000\n" -"X-Generator: Launchpad (build 17147)\n" +"X-Launchpad-Export-Date: 2016-01-11 17:52+0000\n" +"X-Generator: Launchpad (build 17881)\n" -#: ../../common/config.py:72 +#: ../../common/configfile.py:60 +#, python-format +msgid "Failed to save config: %s" +msgstr "" + +#: ../../common/configfile.py:78 +#, python-format +msgid "Failed to load config: %s" +msgstr "" + +#: ../../common/configfile.py:352 ../../common/configfile.py:414 +#, python-format +msgid "Profile \"%s\" already exists !" +msgstr "El perfil \"%s\" ja existeix !" + +#: ../../common/configfile.py:383 +msgid "You can't remove the last profile !" +msgstr "No es pot esborrar el darrer perfil !" + +#: ../../common/config.py:76 msgid "Disabled" msgstr "Deshabilitat" -#: ../../common/config.py:73 +#: ../../common/config.py:77 msgid "At every boot/reboot" msgstr "En cada inici/reinici" -#: ../../common/config.py:74 +#: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Cada 5 minuts" -#: ../../common/config.py:75 +#: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Cada 10 minuts" -#: ../../common/config.py:76 +#: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "Cada 30 minuts" -#: ../../common/config.py:77 +#: ../../common/config.py:81 msgid "Every hour" msgstr "Cada hora" -#: ../../common/config.py:78 +#: ../../common/config.py:82 msgid "Every 2 hours" msgstr "Cada 2 hores" -#: ../../common/config.py:79 +#: ../../common/config.py:83 msgid "Every 4 hours" msgstr "Cada 4 hores" -#: ../../common/config.py:80 +#: ../../common/config.py:84 msgid "Every 6 hours" msgstr "Cada 6 hores" -#: ../../common/config.py:81 +#: ../../common/config.py:85 msgid "Every 12 hours" msgstr "Cada 12 hores" -#: ../../common/config.py:82 +#: ../../common/config.py:86 msgid "Custom Hours" msgstr "Hores personalitzades" -#: ../../common/config.py:83 +#: ../../common/config.py:87 msgid "Every Day" msgstr "Cada dia" -#: ../../common/config.py:84 -msgid "Daily (anacron)" -msgstr "A diari (anacron)" +#: ../../common/config.py:88 +msgid "Repeatedly (anacron)" +msgstr "" -#: ../../common/config.py:85 +#: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "" -#: ../../common/config.py:86 +#: ../../common/config.py:90 msgid "Every Week" msgstr "Cada setmana" -#: ../../common/config.py:87 +#: ../../common/config.py:91 msgid "Every Month" msgstr "Cada mes" -#: ../../common/config.py:91 +#: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Dia(es)" -#: ../../common/config.py:92 +#: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Setmana(es)" -#: ../../common/config.py:93 +#: ../../common/config.py:97 msgid "Year(s)" msgstr "Any(s)" -#: ../../common/config.py:100 +#: ../../common/config.py:101 +msgid "Hour(s)" +msgstr "" + +#: ../../common/config.py:104 +msgid "Month(s)" +msgstr "" + +#: ../../common/config.py:126 ../../qt4/settingsdialog.py:551 msgid " EXPERIMENTAL!" msgstr " EXPERIMENTAL!" -#: ../../common/config.py:103 +#: ../../common/config.py:129 msgid "Local" msgstr "Local" -#: ../../common/config.py:104 +#: ../../common/config.py:130 msgid "SSH" msgstr "SSH" -#: ../../common/config.py:104 ../../common/config.py:106 -#: ../../gnome/settingsdialog.py:475 ../../kde4/settingsdialog.py:1325 +#: ../../common/config.py:130 ../../common/config.py:132 +#: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "Clau privada SSH" -#: ../../common/config.py:105 +#: ../../common/config.py:131 msgid "Local encrypted" msgstr "Xifrat local" -#: ../../common/config.py:105 ../../common/config.py:106 +#: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "Xifrat" -#: ../../common/config.py:106 +#: ../../common/config.py:132 msgid "SSH encrypted" msgstr "Xifrat amb SSH" -#: ../../common/config.py:112 +#: ../../common/config.py:135 msgid "Default" msgstr "Predeterminat" -#: ../../common/config.py:113 +#: ../../common/config.py:136 msgid "AES128-CTR" msgstr "AES128-CTR" -#: ../../common/config.py:114 +#: ../../common/config.py:137 msgid "AES192-CTR" msgstr "AES192-CTR" -#: ../../common/config.py:115 +#: ../../common/config.py:138 msgid "AES256-CTR" msgstr "AES256-CTR" -#: ../../common/config.py:116 +#: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "ARCFOUR256" -#: ../../common/config.py:117 +#: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "ARCFOUR128" -#: ../../common/config.py:118 +#: ../../common/config.py:141 msgid "AES128-CBC" msgstr "AES128-CBC" -#: ../../common/config.py:119 +#: ../../common/config.py:142 msgid "3DES-CBC" msgstr "3DES-CBC" -#: ../../common/config.py:120 +#: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "Blowfish-CBC" -#: ../../common/config.py:121 +#: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "Cast128-CBC" -#: ../../common/config.py:122 +#: ../../common/config.py:145 msgid "AES192-CBC" msgstr "AES192-CBC" -#: ../../common/config.py:123 +#: ../../common/config.py:146 msgid "AES256-CBC" msgstr "AES256-CBC" -#: ../../common/config.py:124 +#: ../../common/config.py:147 msgid "ARCFOUR" msgstr "ARCFOUR" -#: ../../common/config.py:129 +#: ../../common/config.py:153 msgid "Main profile" msgstr "Perfil principal" -#: ../../common/config.py:256 ../../common/config.py:275 -#: ../../common/config.py:286 ../../common/config.py:291 +#: ../../common/config.py:289 ../../common/config.py:296 +#: ../../common/config.py:307 ../../common/config.py:312 +#: ../../qt4/qt4systrayicon.py:61 #, python-format msgid "Profile: \"%s\"" msgstr "Perfil: \"%s\"" -#: ../../common/config.py:256 +#: ../../common/config.py:289 msgid "Snapshots folder is not valid !" msgstr "La carpeta d'instantànies no es vàlida!" -#: ../../common/config.py:275 +#: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "Heu de seleccionar al menys una carpeta per salvaguardar!" -#: ../../common/config.py:286 +#: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "No podeu incloure la carpeta de còpies de seguretat!" -#: ../../common/config.py:291 +#: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "No podeu incloure una subcarpeta de còpies de seguretat!" -#: ../../common/config.py:361 +#: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s no és una carpeta!" -#: ../../common/config.py:376 ../../common/config.py:389 +#: ../../common/config.py:380 +msgid "Host/User/Profile-ID must not be empty!" +msgstr "" + +#: ../../common/config.py:388 ../../common/config.py:420 #, python-format msgid "" "Can't write to: %s\n" @@ -215,62 +247,68 @@ "No es pot escriure a: %s\n" "Esteu segurs de que teniu permisos d'escriptura ?" -#: ../../common/config.py:1286 +#: ../../common/config.py:400 +#, python-format msgid "" -"Can't find crontab.\n" -"Are you sure cron is installed ?\n" -"If not you should disable all automatic backups." +"Destination filesystem for '%(path)s' is formatted with FAT which doesn't " +"support hard-links. Please use a native Linux filesystem." msgstr "" -"No es pot trobar el 'crontab'.\n" -"Esteu segur que el 'cron' està instal·lat ?\n" -"Si no és així, deveu desactivar totes les còpies automàtiques." -#: ../../common/config.py:1338 +#: ../../common/config.py:405 #, python-format -msgid "Schedule udev doesn't work with mode %s" +msgid "" +"Destination filsystem for '%(path)s' is a SMB mounted share. Please make " +"sure the remote SMB server supports symlinks or activate '%(copyLinks)s' in " +"'%(expertOptions)s'." msgstr "" -#: ../../common/config.py:1342 -#, python-format -msgid "Couldn't find UUID for \"%s\"" -msgstr "" +#: ../../common/config.py:408 ../../qt4/settingsdialog.py:815 +msgid "Copy links (dereference symbolic links)" +msgstr "Copia enllaços (desarbitra els enllaços simbòlics)" -#: ../../common/config.py:1379 -msgid "Failed to remove udev rules" -msgstr "" +#: ../../common/config.py:409 ../../qt4/settingsdialog.py:669 +msgid "Expert Options" +msgstr "Opcions avançades" -#: ../../common/config.py:1385 -msgid "Failed to create udev rules" +#: ../../common/config.py:411 +#, python-format +msgid "" +"Destination filesystem for '%(path)s is a sshfs mounted share. sshfs doesn't " +"support hard-links. Please use mode 'SSH' instead." msgstr "" -#: ../../common/config.py:1420 +#: ../../common/config.py:1407 msgid "" -"Can't find anacron.\n" -"Are you sure anacron is installed ?\n" -"If not you should disable daily anacron backups." +"Can't find crontab.\n" +"Are you sure cron is installed ?\n" +"If not you should disable all automatic backups." msgstr "" -"No s'ha pogut trobar anacron.\n" -"Esteu segur de que es troba instal·lat?\n" -"Si no, hauríeu de deshabilitar les còpies diàries amb anacron." +"No es pot trobar el 'crontab'.\n" +"Esteu segur que el 'cron' està instal·lat ?\n" +"Si no és així, deveu desactivar totes les còpies automàtiques." -#: ../../common/config.py:1439 -msgid "Please provide your sudo password to install the udev rule." +#: ../../common/config.py:1411 +msgid "Failed to write new crontab." msgstr "" -#: ../../common/config.py:1445 -msgid "Please provide your sudo password to remove unused udev rules." +#: ../../common/config.py:1505 +#, python-format +msgid "" +"Could not install Udev rule for profile %(profile_id)s. DBus Service " +"'%(dbus_interface)s' wasn't available" msgstr "" -#: ../../common/configfile.py:253 ../../common/configfile.py:315 +#: ../../common/config.py:1517 #, python-format -msgid "Profile \"%s\" already exists !" -msgstr "El perfil \"%s\" ja existeix !" +msgid "Schedule udev doesn't work with mode %s" +msgstr "" -#: ../../common/configfile.py:284 -msgid "You can't remove the last profile !" -msgstr "No es pot esborrar el darrer perfil !" +#: ../../common/config.py:1526 +#, python-format +msgid "Couldn't find UUID for \"%s\"" +msgstr "" -#: ../../common/encfstools.py:95 +#: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" @@ -281,16 +319,16 @@ "\n" "%(error)s" -#: ../../common/encfstools.py:105 +#: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "No s'ha pogut desmuntar el volum encfs %s" -#: ../../common/encfstools.py:149 +#: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "No s'ha trobat la configuració de la carpeta xifrada." -#: ../../common/encfstools.py:153 +#: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" @@ -298,25 +336,25 @@ "\n" "Voleu crear una nova carpeta xifrada?" -#: ../../common/encfstools.py:154 +#: ../../common/encfstools.py:171 msgid "Cancel" msgstr "Canceŀla" -#: ../../common/encfstools.py:157 +#: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "Confirmeu la contrasenya" -#: ../../common/encfstools.py:161 +#: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "La contrasenya no concorda" -#: ../../common/encfstools.py:166 +#: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" "No s'ha trobat encfs. Si us plau, instal·leu-lo (p.e. 'apt-get install " "encfs')" -#: ../../common/encfstools.py:174 ../../common/sshtools.py:207 +#: ../../common/encfstools.py:196 ../../common/sshtools.py:262 #, python-format msgid "" "%(user)s is not member of group 'fuse'.\n" @@ -328,63 +366,66 @@ "sortiu i torneu a entrar a la sessió.\n" "Mireu a 'man backintime' per a més instruccions." -#: ../../common/encfstools.py:189 +#: ../../common/encfstools.py:211 msgid "" "encfs version 1.7.2 and before has a bug with option --reverse. Please " "update encfs" msgstr "" -#: ../../common/encfstools.py:453 ../../common/encfstools.py:480 -#: ../../common/snapshots.py:982 ../../common/snapshots.py:1288 -#: ../../kde4/app.py:82 ../../gnome/mainwindow.glade:43 +#: ../../common/encfstools.py:512 ../../common/snapshots.py:1131 +#: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "Fes una instantània" -#: ../../common/mount.py:195 +#: ../../common/mount.py:204 #, python-format msgid "" "Hash collision occurred in hash_id %s. Incrementing global value " "hash_collision and try again." msgstr "" -#: ../../common/mount.py:246 +#: ../../common/mount.py:259 #, python-format msgid "mountpoint %s not empty." msgstr "el punt de muntatge %s no està buit." -#: ../../common/mount.py:286 +#: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" -#: ../../common/password.py:425 +#: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" -#: ../../common/snapshots.py:171 ../../gnome/app.py:1127 -#: ../../kde4/app.py:1014 +#: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Ara" -#: ../../common/snapshots.py:182 ../../gnome/gnometools.py:37 +#: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "AMB ERRORS !" -#: ../../common/snapshots.py:282 +#: ../../common/snapshots.py:344 msgid "" "### This log has been decoded with automatic search pattern\n" "### If some paths are not decoded you can manually decode them with:\n" msgstr "" -#: ../../common/snapshots.py:465 +#: ../../common/snapshots.py:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "HA FALLAT" -#: ../../common/snapshots.py:564 +#: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "Restaura els permisos:" -#: ../../common/snapshots.py:739 +#: ../../common/snapshots.py:752 ../../qt4/app.py:377 ../../qt4/app.py:675 +#: ../../qt4/app.py:692 ../../qt4/qt4systrayicon.py:65 +msgid "Done" +msgstr "Fet" + +#: ../../common/snapshots.py:860 msgid "" "Back In Time changed its backup format.\n" "\n" @@ -395,7 +436,7 @@ "Les vostres antigues instantànies poden ser convertides al nou format. Esteu " "d'acord?" -#: ../../common/snapshots.py:749 +#: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" @@ -412,7 +453,7 @@ "\n" "(El programa es capaç de discriminar entre ells)" -#: ../../common/snapshots.py:752 +#: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" @@ -420,7 +461,7 @@ "No s'han trobat perfils. Primer actualitzarem a perfils, sis plau reinicieu " "'Back In Time'" -#: ../../common/snapshots.py:803 +#: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" @@ -433,7 +474,7 @@ "cannot continue taking snapshots" msgstr "" -#: ../../common/snapshots.py:812 +#: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" @@ -448,7 +489,7 @@ "Vostè pot moure manualment les instantànies, \n" "si està preparat, reinicii 'Back In Time' per avançar" -#: ../../common/snapshots.py:825 +#: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" @@ -459,7 +500,7 @@ "'Back In Time' continuarà prenent instantànies altre vegada tal i com ha " "estat programat" -#: ../../common/snapshots.py:830 +#: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" @@ -480,12 +521,12 @@ "\n" "Si no ho feu, s'os preguntarà la propera vegada que inicieu 'Back In Time'." -#: ../../common/snapshots.py:839 +#: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "" "'Back In Time' continuarà fent instantànies de nou tal i com s'ha programat" -#: ../../common/snapshots.py:841 +#: ../../common/snapshots.py:953 msgid "" "Back In Time still cannot continue taking new snapshots.\n" "Restart Back In Time to see the questions again" @@ -493,7 +534,11 @@ "'Back In Time' encar no pot continuar fent noves instantànies.\n" "Reinicieu 'Back In Time' per veure de nou les preguntes" -#: ../../common/snapshots.py:913 +#: ../../common/snapshots.py:972 +msgid "Deferring backup while on battery" +msgstr "" + +#: ../../common/snapshots.py:1035 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it." @@ -501,156 +546,163 @@ "No es pot trobar la carpeta d'instantànies.\n" "Si està en una unitat extraïble, connecteu-la." -#: ../../common/snapshots.py:915 +#: ../../common/snapshots.py:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "Esperant %s segon." msgstr[1] "Esperant %s segons." -#: ../../common/snapshots.py:941 +#: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "S'ha produït un error fent la instantània %s!!!" -#: ../../common/snapshots.py:950 +#: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "Finalitzant" -#: ../../common/snapshots.py:1088 +#: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "No es pot crear la carpeta: %s" -#: ../../common/snapshots.py:1107 +#: ../../common/snapshots.py:1217 msgid "..." msgstr "..." -#: ../../common/snapshots.py:1134 +#: ../../common/snapshots.py:1238 +#, python-format +msgid "Found leftover '%s' which can be continued." +msgstr "" + +#: ../../common/snapshots.py:1250 +#, python-format +msgid "Remove leftover '%s' folder from last run" +msgstr "" + +#: ../../common/snapshots.py:1263 #, python-format msgid "Can't remove folder: %s" msgstr "No es pot eliminar la carpeta: %s" -#: ../../common/snapshots.py:1219 +#: ../../common/snapshots.py:1340 #, python-format msgid "Compare with snapshot %s" msgstr "Compara amb la instantània %s" -#: ../../common/snapshots.py:1248 +#: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "Crea enllaços forts" -#: ../../common/snapshots.py:1335 +#: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "Guarda el fixter de configuració ..." -#: ../../common/snapshots.py:1341 +#: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "Guarda els permisos ..." -#: ../../common/snapshots.py:1442 +#: ../../common/snapshots.py:1470 +msgid "Save permission over ssh failed. Retry normal method" +msgstr "" + +#: ../../common/snapshots.py:1521 #, python-format msgid "Can't rename %(new_path)s to %(path)s" msgstr "" -#: ../../common/snapshots.py:1562 -msgid "Remove old snapshots" -msgstr "Elimina les instantànies antigues" - -#: ../../common/snapshots.py:1586 ../../kde4/settingsdialog.py:501 -#: ../../gnome/settingsdialog.glade:1660 +#: ../../common/snapshots.py:1695 ../../common/snapshots.py:1728 +#: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "Eliminació intel·ligent" -#: ../../common/snapshots.py:1591 +#: ../../common/snapshots.py:1704 +msgid "Remove old snapshots" +msgstr "Elimina les instantànies antigues" + +#: ../../common/snapshots.py:1733 msgid "Try to keep min free space" msgstr "Proveu de mantenir un minim d'espai lliure" -#: ../../common/snapshots.py:1621 +#: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" -#: ../../common/sshtools.py:106 +#: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "No s'ha pogut muntar %s" -#: ../../common/sshtools.py:113 +#: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "No s'ha pogut desmuntar el sshfs %s" -#: ../../common/sshtools.py:187 -#, python-format -msgid "" -"Failed to unlock SSH private key:\n" -"Error: %s" -msgstr "" - -#: ../../common/sshtools.py:194 +#: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" -#: ../../common/sshtools.py:199 +#: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" -#: ../../common/sshtools.py:217 +#: ../../common/sshtools.py:278 #, python-format msgid "" "Password-less authentication for %(user)s@%(host)s failed. Look at 'man " "backintime' for further instructions." msgstr "" -#: ../../common/sshtools.py:229 +#: ../../common/sshtools.py:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" -#: ../../common/sshtools.py:254 +#: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" -#: ../../common/sshtools.py:274 +#: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" -#: ../../common/sshtools.py:276 +#: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:278 +#: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:280 +#: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" -#: ../../common/sshtools.py:302 +#: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" -#: ../../common/sshtools.py:325 ../../common/sshtools.py:383 +#: ../../common/sshtools.py:423 ../../common/sshtools.py:553 #, python-format msgid "" "Remote host %(host)s doesn't support '%(command)s':\n" @@ -658,7 +710,7 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:387 +#: ../../common/sshtools.py:556 #, python-format msgid "" "Check commands on host %(host)s returned unknown error:\n" @@ -666,96 +718,149 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:400 +#: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "" -#: ../../gnome/app.py:185 ../../gnome/app.py:594 ../../gnome/app.py:608 -#: ../../kde4/app.py:299 ../../kde4/app.py:570 ../../kde4/app.py:587 -msgid "Done" -msgstr "Fet" +#: ../../qt4/app.py:81 +msgid "Refresh snapshots list" +msgstr "Refresca la llista d'instantànies" + +#: ../../qt4/app.py:85 ../../qt4/app.py:890 +msgid "Snapshot Name" +msgstr "Nom de la instantània" + +#: ../../qt4/app.py:88 +msgid "Remove Snapshot" +msgstr "Elimina la instantània" + +#: ../../qt4/app.py:91 +msgid "View Snapshot Log" +msgstr "Visualitza el log d'instantànies" -#: ../../gnome/app.py:189 ../../kde4/app.py:143 ../../kde4/app.py:159 -#: ../../gnome/mainwindow.glade:225 +#: ../../qt4/app.py:94 +msgid "View Last Log" +msgstr "Visualitza l'últim log" + +#: ../../qt4/app.py:99 ../../qt4/settingsdialog.py:51 +msgid "Settings" +msgstr "Configuració" + +#: ../../qt4/app.py:104 +msgid "Shutdown" +msgstr "" + +#: ../../qt4/app.py:105 +msgid "Shutdown system after snapshot has finished." +msgstr "" + +#: ../../qt4/app.py:111 +msgid "Exit" +msgstr "Sortir" + +#: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 msgid "Help" msgstr "Ajuda" -#: ../../gnome/app.py:191 ../../kde4/app.py:146 -#: ../../gnome/mainwindow.glade:223 +#: ../../qt4/app.py:122 +msgid "Config File Help" +msgstr "" + +#: ../../qt4/app.py:125 msgid "Website" msgstr "Lloc web" -#: ../../gnome/app.py:192 ../../kde4/app.py:148 +#: ../../qt4/app.py:127 ../../qt4/app.py:982 +msgid "Changelog" +msgstr "" + +#: ../../qt4/app.py:129 msgid "FAQ" msgstr "PMF" -#: ../../gnome/app.py:193 ../../kde4/app.py:150 +#: ../../qt4/app.py:131 msgid "Ask a question" msgstr "Fer una pregunta" -#: ../../gnome/app.py:194 ../../kde4/app.py:152 +#: ../../qt4/app.py:133 msgid "Report a bug" msgstr "Informar d'un error" -#: ../../gnome/app.py:196 ../../kde4/app.py:155 +#: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "Quant a" -#: ../../gnome/app.py:202 ../../gnome/app.py:887 -#: ../../gnome/restoredialog.py:84 ../../gnome/snapshotsdialog.py:83 -#: ../../gnome/snapshotsdialog.py:244 ../../kde4/app.py:206 -#: ../../kde4/app.py:216 ../../kde4/restoredialog.py:68 -#: ../../kde4/snapshotsdialog.py:111 ../../kde4/snapshotsdialog.py:117 -#: ../../gnome/mainwindow.glade:350 ../../gnome/mainwindow.glade:352 -#: ../../gnome/snapshotsdialog.glade:169 ../../gnome/snapshotsdialog.glade:171 +#: ../../qt4/app.py:163 +msgid "Up" +msgstr "Amunt" + +#: ../../qt4/app.py:174 ../../qt4/settingsdialog.py:1776 +msgid "Show hidden files" +msgstr "Mostra els fitxers ocults" + +#: ../../qt4/app.py:184 ../../qt4/app.py:199 ../../qt4/app.py:233 +#: ../../qt4/restoredialog.py:62 ../../qt4/settingsdialog.py:1818 +#: ../../qt4/snapshotsdialog.py:134 ../../qt4/snapshotsdialog.py:139 msgid "Restore" msgstr "Restaura" -#: ../../gnome/app.py:203 ../../gnome/app.py:888 ../../gnome/gnometools.py:67 -#: ../../gnome/snapshotsdialog.py:84 ../../gnome/snapshotsdialog.py:245 -#: ../../kde4/app.py:208 ../../kde4/restoredialog.py:42 -#: ../../kde4/snapshotsdialog.py:113 +#: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 +#: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "Restaura a..." -#: ../../gnome/app.py:205 ../../gnome/app.py:896 ../../gnome/app.py:1146 -#: ../../kde4/app.py:1041 -#, python-format -msgid "Restore '%s'" -msgstr "Restaura '%s'" +#: ../../qt4/app.py:194 +msgid "Restore and delete new files" +msgstr "" -#: ../../gnome/app.py:207 ../../gnome/app.py:897 ../../gnome/app.py:1147 -#: ../../kde4/app.py:1042 +#: ../../qt4/app.py:201 #, python-format -msgid "Restore '%s' to ..." -msgstr "Restaura '%s' a..." +msgid "" +"Restore selected file or folder.\n" +"If this button is grayed out this is most likely because \"%(now)s\" is " +"selected in left hand snapshots list." +msgstr "" + +#: ../../qt4/app.py:206 ../../qt4/logviewdialog.py:67 +#: ../../qt4/qt4tools.py:160 ../../qt4/snapshotsdialog.py:96 +msgid "Snapshots" +msgstr "Instantànies" + +#: ../../qt4/app.py:213 +msgid "Snapshot" +msgstr "" + +#: ../../qt4/app.py:224 +msgid "View" +msgstr "" -#: ../../gnome/app.py:226 ../../kde4/app.py:235 +#: ../../qt4/app.py:277 msgid "Shortcuts" msgstr "Dreceres" -#: ../../gnome/app.py:249 -msgid "Name" -msgstr "Nom" - -#: ../../gnome/app.py:260 -msgid "Size" -msgstr "Mida" - -#: ../../gnome/app.py:267 -msgid "Date" -msgstr "Data" - -#: ../../gnome/app.py:286 ../../gnome/app.py:883 -#: ../../gnome/snapshotsdialog.py:116 ../../kde4/app.py:171 -#: ../../kde4/app.py:221 ../../kde4/snapshotsdialog.py:91 -#: ../../gnome/mainwindow.glade:366 ../../gnome/mainwindow.glade:368 -#: ../../gnome/snapshotsdialog.glade:8 -msgid "Snapshots" -msgstr "Instantànies" +#: ../../qt4/app.py:295 +msgid "" +"This folder doesn't exist\n" +"in the current selected snapshot!" +msgstr "" + +#: ../../qt4/app.py:359 +msgid "Add to Include" +msgstr "" + +#: ../../qt4/app.py:360 +msgid "Add to Exclude" +msgstr "" + +#: ../../qt4/app.py:416 +#, python-format +msgid "" +"%(appName)s is not configured. Would you like to restore a previous " +"configuration?" +msgstr "" -#: ../../gnome/app.py:348 ../../kde4/app.py:362 +#: ../../qt4/app.py:440 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it and then press OK" @@ -763,741 +868,798 @@ "No es pot trobar la carpeta d'instantànies.\n" "Si es troba en una unitat extraïble, connecteu-la i premeu OK" -#: ../../gnome/app.py:611 ../../kde4/app.py:590 -msgid "Done, no backup needed" -msgstr "Fet, no ha estat necessari crear una còpia de seguretat" +#: ../../qt4/app.py:473 +msgid "" +"If you close this window Back In Time will not be able to shutdown your " +"system when the snapshot has finished.\n" +"Do you really want to close?" +msgstr "" -#: ../../gnome/app.py:619 ../../kde4/app.py:598 +#: ../../qt4/app.py:667 ../../qt4/app.py:703 msgid "Working:" msgstr "S'està treballant:" -#: ../../gnome/app.py:623 ../../kde4/app.py:602 +#: ../../qt4/app.py:695 +msgid "Done, no backup needed" +msgstr "Fet, no ha estat necessari crear una còpia de seguretat" + +#: ../../qt4/app.py:707 msgid "Error:" msgstr "S'ha produït un error:" -#: ../../gnome/app.py:636 ../../kde4/app.py:649 +#: ../../qt4/app.py:726 ../../qt4/qt4systrayicon.py:153 +msgid "Sent:" +msgstr "" + +#: ../../qt4/app.py:727 ../../qt4/qt4systrayicon.py:154 +msgid "Speed:" +msgstr "" + +#: ../../qt4/app.py:728 ../../qt4/qt4systrayicon.py:155 +msgid "ETA:" +msgstr "" + +#: ../../qt4/app.py:777 msgid "Global" msgstr "Global" -#: ../../gnome/app.py:637 ../../kde4/app.py:650 +#: ../../qt4/app.py:778 msgid "Root" msgstr "Arrel" -#: ../../gnome/app.py:638 ../../kde4/app.py:651 +#: ../../qt4/app.py:779 msgid "Home" msgstr "Inici" -#: ../../gnome/app.py:662 -msgid "Bookmarks" -msgstr "Favorits" - -#: ../../gnome/app.py:675 ../../kde4/app.py:662 +#: ../../qt4/app.py:794 msgid "Backup folders" msgstr "Carpetes de còpia de seguretat" -#: ../../gnome/app.py:701 ../../kde4/app.py:734 -msgid "Today" -msgstr "Avui" +#: ../../qt4/app.py:849 +msgid "This is NOT a snapshot but a live view of your local files" +msgstr "" -#: ../../gnome/app.py:705 ../../kde4/app.py:738 -msgid "Yesterday" -msgstr "Ahir" +#: ../../qt4/app.py:860 ../../qt4/app.py:1476 +#, python-format +msgid "Last check %s" +msgstr "" -#: ../../gnome/app.py:709 ../../kde4/app.py:742 -msgid "This week" -msgstr "Aquesta setmana" +#: ../../qt4/app.py:928 +#, python-format +msgid "" +"Are you sure you want to remove the snapshot:\n" +"%s" +msgstr "" +"Esteu segur que voleu eliminar la instantània:\n" +"%s" -#: ../../gnome/app.py:713 ../../kde4/app.py:746 -msgid "Last week" -msgstr "La setmana passada" +#: ../../qt4/app.py:1004 +#, python-format +msgid "" +"Backup local files before overwriting or\n" +"removing with trailing '%(suffix)s'." +msgstr "" -#: ../../gnome/app.py:764 ../../kde4/app.py:398 +#: ../../qt4/app.py:1010 msgid "" -"If you close this window Back In Time will not be able to shutdown your " -"system when the snapshot has finished.\n" -"Do you really want to close?" +"Are you sure you want to remove all newer files in your original folder?" msgstr "" -#: ../../gnome/app.py:881 ../../gnome/snapshotsdialog.py:238 -msgid "Open" -msgstr "Obre" +#: ../../qt4/app.py:1014 +msgid "" +"WARNING: deleting files in filesystem root could break your whole system!!!" +msgstr "" -#: ../../gnome/app.py:1056 ../../kde4/app.py:90 ../../kde4/app.py:805 -#: ../../gnome/mainwindow.glade:73 ../../gnome/mainwindow.glade:75 -msgid "Snapshot Name" -msgstr "Nom de la instantània" +#: ../../qt4/app.py:1016 +msgid "Files to be restored:" +msgstr "" -#: ../../gnome/app.py:1075 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +#: ../../qt4/app.py:1031 +msgid "Do you really want to restore this files(s):" msgstr "" -"Esteu segur que voleu eliminar la instantània?:\n" -"%s" -#: ../../gnome/app.py:1123 ../../kde4/app.py:1010 +#: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "Instantània: %s" -#: ../../gnome/app.py:1124 ../../kde4/app.py:1011 +#: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "Visualitza la instantània creada a %s" -#: ../../gnome/app.py:1126 ../../kde4/app.py:1013 +#: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "Visualitza el contingut actual del disc" -#: ../../gnome/logviewdialog.py:106 ../../gnome/settingsdialog.py:414 -#: ../../kde4/logviewdialog.py:83 ../../kde4/settingsdialog.py:590 -msgid "All" -msgstr "Tots" +#: ../../qt4/app.py:1268 +#, python-format +msgid "Restore '%s'" +msgstr "Restaura '%s'" -#: ../../gnome/logviewdialog.py:107 ../../gnome/settingsdialog.py:412 -#: ../../kde4/logviewdialog.py:84 ../../kde4/settingsdialog.py:588 -msgid "Errors" -msgstr "Errors" +#: ../../qt4/app.py:1269 +#, python-format +msgid "Restore '%s' to ..." +msgstr "Restaura '%s' a..." -#: ../../gnome/logviewdialog.py:112 ../../kde4/logviewdialog.py:89 -msgid "Changes" -msgstr "Canvis" +#: ../../qt4/app.py:1270 +#, python-format +msgid "Restore '%s' and delete new files" +msgstr "" -#: ../../gnome/logviewdialog.py:115 ../../kde4/logviewdialog.py:92 -msgid "Informations" -msgstr "Informacions" +#: ../../qt4/app.py:1368 ../../qt4/app.py:1385 +msgid "Authors" +msgstr "" -#: ../../gnome/settingsdialog.py:235 ../../kde4/settingsdialog.py:387 -msgid "Include files and folders" -msgstr "Inclou fitxers i carpetes" +#: ../../qt4/app.py:1369 ../../qt4/app.py:1388 +msgid "Translations" +msgstr "" -#: ../../gnome/settingsdialog.py:264 -msgid "Exclude patterns, files or folders" -msgstr "Exclou fitxers i carpetes" +#: ../../qt4/app.py:1370 ../../qt4/app.py:1391 +msgid "License" +msgstr "" -#: ../../gnome/settingsdialog.py:411 ../../kde4/settingsdialog.py:587 -msgid "None" -msgstr "Cap" +#: ../../qt4/logviewdialog.py:49 +msgid "Last Log View" +msgstr "" -#: ../../gnome/settingsdialog.py:413 ../../kde4/settingsdialog.py:589 -msgid "Changes & Errors" -msgstr "Canvis i Errors" - -#: ../../gnome/settingsdialog.py:458 -msgid "Snapshots folder" -msgstr "Carpeta d'instantànies" - -#: ../../gnome/settingsdialog.py:466 ../../kde4/settingsdialog.py:1314 -msgid "Are you sure you want to change snapshots folder ?" -msgstr "Esteu segur que voleu cambiar el directori d'instantànies?" - -#: ../../gnome/settingsdialog.py:901 ../../kde4/settingsdialog.py:914 -msgid "" -"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " -"*/3 for periodic backups every 3 hours" +#: ../../qt4/logviewdialog.py:51 +msgid "Snapshot Log View" msgstr "" -"Les hores personalitzades només poden ser una llista d'hores separades per " -"comes (p.e. 8,12,18,23) o */3 per fer còpies periòdiques cada 3 hores" - -#: ../../gnome/settingsdialog.py:1141 ../../kde4/settingsdialog.py:653 -msgid "New profile" -msgstr "Perfil nou" -#: ../../gnome/settingsdialog.py:1155 ../../kde4/settingsdialog.py:669 -msgid "Rename profile" -msgstr "Reanomena el perfil" - -#: ../../gnome/settingsdialog.py:1167 ../../kde4/settingsdialog.py:683 -#, python-format -msgid "Are you sure you want to delete the profile \"%s\" ?" -msgstr "Esteu segurs de que voleu eliminar el perfil \"%s\"?" - -#: ../../gnome/settingsdialog.py:1173 ../../kde4/settingsdialog.py:1292 -msgid "Include folder" -msgstr "Inclou el directori" - -#: ../../gnome/settingsdialog.py:1193 ../../kde4/settingsdialog.py:1278 -msgid "Include file" -msgstr "Afegeix un fitxer" - -#: ../../gnome/settingsdialog.py:1235 ../../kde4/settingsdialog.py:1241 -msgid "Exclude pattern" -msgstr "Exclou el patró" - -#: ../../gnome/settingsdialog.py:1240 ../../kde4/settingsdialog.py:1251 -msgid "Exclude patterns can't contain ':' char !" -msgstr "Els patrons d'exculsió no poden contenir el caràcter ':'!" +#: ../../qt4/logviewdialog.py:59 ../../qt4/settingsdialog.py:59 +#: ../../qt4/settingsdialog.py:274 ../../qt4/settingsdialog.py:1899 +msgid "Profile:" +msgstr "Perfil:" -#: ../../gnome/settingsdialog.py:1246 ../../kde4/settingsdialog.py:1257 -msgid "Exclude file" -msgstr "Exclou el fitxer" +#: ../../qt4/logviewdialog.py:81 +msgid "Filter:" +msgstr "Filtra:" -#: ../../gnome/settingsdialog.py:1257 ../../kde4/settingsdialog.py:1261 -msgid "Exclude folder" -msgstr "Exclou el directori" +#: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 +msgid "All" +msgstr "Tots" -#: ../../gnome/snapshotsdialog.py:240 -msgid "Jump to" -msgstr "Vés a" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 +#: ../../qt4/settingsdialog.py:657 +msgid "Errors" +msgstr "Errors" -#: ../../gnome/snapshotsdialog.py:248 ../../kde4/snapshotsdialog.py:164 -msgid "Diff" -msgstr "Diff" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 +msgid "Changes" +msgstr "Canvis" -#: ../../gnome/snapshotsdialog.py:277 ../../kde4/snapshotsdialog.py:339 -msgid "You can't compare a snapshot to itself" -msgstr "No podeu compara una instantània amb sí mateixa" +#: ../../qt4/logviewdialog.py:92 +msgid "Informations" +msgstr "Informacions" -#: ../../gnome/snapshotsdialog.py:284 ../../kde4/snapshotsdialog.py:346 -#, python-format -msgid "Command not found: %s" -msgstr "No s'ha trobat l'ordre: %s" +#: ../../qt4/logviewdialog.py:101 +msgid "[E] Error, [I] Information, [C] Change" +msgstr "[E]Errors, [I]Informació, [C]Canvia" -#: ../../gnome/snapshotsdialog.py:307 ../../kde4/snapshotsdialog.py:367 -#, python-format -msgid "" -"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" +#: ../../qt4/logviewdialog.py:104 +msgid "decode paths" msgstr "" -#: ../../gnome/snapshotsdialog.py:310 ../../kde4/snapshotsdialog.py:370 -#, python-format -msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +#: ../../qt4/messagebox.py:56 +msgid "Error" msgstr "" -#: ../../gnome/snapshotsdialog.py:312 ../../kde4/snapshotsdialog.py:372 -msgid "WARNING: This can not be revoked!" +#: ../../qt4/messagebox.py:62 ../../qt4/messagebox.py:68 +msgid "Question" msgstr "" -#: ../../gnome/snapshotsdialog.py:317 ../../kde4/snapshotsdialog.py:377 -#, python-format -msgid "Exclude \"%s\" from future snapshots?" +#: ../../qt4/qt4systrayicon.py:69 +msgid "Start BackInTime" msgstr "" -#: ../../kde4/app.py:86 ../../gnome/mainwindow.glade:58 -#: ../../gnome/mainwindow.glade:60 -msgid "Refresh snapshots list" -msgstr "Refresca la llista d'instantànies" +#: ../../qt4/qt4systrayicon.py:124 +msgid "Working..." +msgstr "S'està treballant..." -#: ../../kde4/app.py:94 ../../gnome/mainwindow.glade:88 -#: ../../gnome/mainwindow.glade:90 -msgid "Remove Snapshot" -msgstr "Elimina la instantània" +#: ../../qt4/qt4tools.py:178 +msgid "Today" +msgstr "Avui" -#: ../../kde4/app.py:98 ../../gnome/mainwindow.glade:105 -msgid "View Snapshot Log" -msgstr "Visualitza el log d'instantànies" +#: ../../qt4/qt4tools.py:183 +msgid "Yesterday" +msgstr "Ahir" -#: ../../kde4/app.py:102 ../../gnome/mainwindow.glade:121 -msgid "View Last Log" -msgstr "Visualitza l'últim log" +#: ../../qt4/qt4tools.py:188 +msgid "This week" +msgstr "Aquesta setmana" -#: ../../kde4/app.py:108 ../../kde4/settingsdialog.py:69 -#: ../../gnome/mainwindow.glade:144 ../../gnome/mainwindow.glade:146 -#: ../../gnome/settingsdialog.glade:7 -msgid "Settings" -msgstr "Configuració" +#: ../../qt4/qt4tools.py:193 +msgid "Last week" +msgstr "La setmana passada" -#: ../../kde4/app.py:124 ../../gnome/mainwindow.glade:169 -msgid "Shutdown system after snapshot has finished." +#: ../../qt4/restoredialog.py:75 +msgid "Show full Log" msgstr "" -#: ../../kde4/app.py:131 ../../gnome/mainwindow.glade:184 -#: ../../gnome/mainwindow.glade:186 -msgid "Exit" -msgstr "Sortir" - -#: ../../kde4/app.py:186 ../../gnome/mainwindow.glade:289 -msgid "Up" -msgstr "Amunt" - -#: ../../kde4/app.py:199 ../../gnome/mainwindow.glade:325 -msgid "Show hidden files" -msgstr "Mostra els fitxers ocults" +#: ../../qt4/settingsdialog.py:68 +msgid "Edit" +msgstr "Edita" -#: ../../kde4/app.py:244 -msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +#: ../../qt4/settingsdialog.py:73 +msgid "Modify for Full System Backup" msgstr "" -"La carpeta no existeix\n" -"en la instantània acual" -#: ../../kde4/app.py:839 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +#: ../../qt4/settingsdialog.py:77 ../../qt4/settingsdialog.py:451 +msgid "Add" msgstr "" -"Esteu segur que voleu eliminar la instantània:\n" -"%s" - -#: ../../kde4/app.py:1140 ../../kde4/kde4systrayicon.py:117 -msgid "Working..." -msgstr "S'està treballant..." - -#: ../../kde4/logviewdialog.py:55 -msgid "Error Log View" -msgstr "Visualitza el log d'errors" - -#: ../../kde4/logviewdialog.py:65 ../../kde4/settingsdialog.py:79 -#: ../../kde4/settingsdialog.py:293 ../../gnome/logviewdialog.glade:73 -#: ../../gnome/settingsdialog.glade:72 -msgid "Profile:" -msgstr "Perfil:" - -#: ../../kde4/logviewdialog.py:77 ../../gnome/logviewdialog.glade:110 -msgid "Filter:" -msgstr "Filtra:" -#: ../../kde4/logviewdialog.py:100 ../../gnome/logviewdialog.glade:169 -msgid "[E] Error, [I] Information, [C] Change" -msgstr "[E]Errors, [I]Informació, [C]Canvia" - -#: ../../kde4/logviewdialog.py:103 ../../gnome/logviewdialog.glade:195 -msgid "decode paths" +#: ../../qt4/settingsdialog.py:81 ../../qt4/settingsdialog.py:408 +#: ../../qt4/settingsdialog.py:467 +msgid "Remove" msgstr "" -#: ../../kde4/settingsdialog.py:88 -msgid "Edit" -msgstr "Edita" - -#: ../../kde4/settingsdialog.py:106 ../../gnome/settingsdialog.glade:1207 +#: ../../qt4/settingsdialog.py:96 msgid "General" msgstr "General" -#: ../../kde4/settingsdialog.py:114 ../../gnome/settingsdialog.glade:199 +#: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "Mode:" -#: ../../kde4/settingsdialog.py:127 ../../kde4/settingsdialog.py:1311 +#: ../../qt4/settingsdialog.py:119 +#, python-format +msgid "" +"Warning: %(app)s uses EncFS for encryption. A recent security audit " +"revealed several possible attack vectors for this. Please take a look at 'A " +"NOTE ON SECURITY' in 'man backintime'." +msgstr "" + +#: ../../qt4/settingsdialog.py:129 ../../qt4/settingsdialog.py:1568 msgid "Where to save snapshots" msgstr "A on guardar Instanànies" -#: ../../kde4/settingsdialog.py:146 +#: ../../qt4/settingsdialog.py:145 +msgid "Folder" +msgstr "" + +#: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" -#: ../../kde4/settingsdialog.py:158 ../../kde4/settingsdialog.py:283 -#: ../../gnome/settingsdialog.glade:323 ../../gnome/settingsdialog.glade:583 -#: ../../gnome/settingsdialog.glade:874 +#: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "Ordinador amfitrió:" -#: ../../kde4/settingsdialog.py:163 ../../gnome/settingsdialog.glade:350 -#: ../../gnome/settingsdialog.glade:610 +#: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "Port:" -#: ../../kde4/settingsdialog.py:168 ../../kde4/settingsdialog.py:288 -#: ../../gnome/settingsdialog.glade:377 ../../gnome/settingsdialog.glade:637 -#: ../../gnome/settingsdialog.glade:902 +#: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "Usuari:" -#: ../../kde4/settingsdialog.py:173 ../../gnome/settingsdialog.glade:416 +#: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "Camí:" -#: ../../kde4/settingsdialog.py:178 ../../gnome/settingsdialog.glade:459 +#: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "Xifrat:" -#: ../../kde4/settingsdialog.py:184 +#: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "Clau privada:" -#: ../../kde4/settingsdialog.py:228 ../../kde4/settingsdialog.py:237 -#: ../../kde4/settingsdialog.py:243 ../../gnome/settingsdialog.glade:703 -#: ../../gnome/settingsdialog.glade:743 +#: ../../qt4/settingsdialog.py:201 +msgid "Key File" +msgstr "" + +#: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 +#: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "Contrasenya" -#: ../../kde4/settingsdialog.py:249 ../../gnome/settingsdialog.glade:775 +#: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" -#: ../../kde4/settingsdialog.py:252 ../../gnome/settingsdialog.glade:792 +#: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" -#: ../../kde4/settingsdialog.py:264 ../../gnome/settingsdialog.glade:968 +#: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "Avançat" -#: ../../kde4/settingsdialog.py:276 ../../gnome/settingsdialog.glade:848 -msgid "Auto Host / User / Profile Id" -msgstr "Auto amfitrió / Usuari / Perfil ID" +#: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 +msgid "Full snapshot path: " +msgstr "" -#: ../../kde4/settingsdialog.py:301 +#: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "Planificació" -#: ../../kde4/settingsdialog.py:311 ../../gnome/settingsdialog.glade:1092 +#: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "Dia:" -#: ../../kde4/settingsdialog.py:322 ../../gnome/settingsdialog.glade:1079 +#: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "Dia de la setmana:" -#: ../../kde4/settingsdialog.py:333 ../../gnome/settingsdialog.glade:1066 +#: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "Hora:" -#: ../../kde4/settingsdialog.py:344 ../../gnome/settingsdialog.glade:1053 +#: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "Hores:" -#: ../../kde4/settingsdialog.py:353 ../../gnome/settingsdialog.glade:1014 +#: ../../qt4/settingsdialog.py:339 msgid "" -"Run Back In Time periodically with anacron. This is useful if the computer " -"is not running regular." +"Run Back In Time repeatedly. This is useful if the computer is not running " +"regular." msgstr "" -#: ../../kde4/settingsdialog.py:357 ../../gnome/settingsdialog.glade:1040 -msgid "Frequency in days:" +#: ../../qt4/settingsdialog.py:344 +msgid "Every:" msgstr "" -#: ../../kde4/settingsdialog.py:368 ../../gnome/settingsdialog.glade:1026 +#: ../../qt4/settingsdialog.py:362 msgid "" "Run Back In Time as soon as the drive is connected (only once every X " "days).\n" "You will be prompted for your sudo password." msgstr "" -#: ../../kde4/settingsdialog.py:379 ../../gnome/settingsdialog.glade:1310 +#: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Inclou" -#: ../../kde4/settingsdialog.py:403 ../../kde4/settingsdialog.py:445 -#: ../../gnome/settingsdialog.glade:1411 +#: ../../qt4/settingsdialog.py:381 +msgid "Include files and folders" +msgstr "Inclou fitxers i carpetes" + +#: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "Afegeix un fitxer" -#: ../../kde4/settingsdialog.py:408 ../../kde4/settingsdialog.py:450 -#: ../../gnome/settingsdialog.glade:1427 +#: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Afegeix un directori" -#: ../../kde4/settingsdialog.py:418 ../../gnome/settingsdialog.glade:1474 +#: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Exclou" -#: ../../kde4/settingsdialog.py:421 ../../gnome/settingsdialog.glade:1328 +#: ../../qt4/settingsdialog.py:417 msgid "" "Warning: Wildcards ('foo*', '[fF]oo', 'fo?') will be ignored with " "mode 'SSH encrypted'.\n" "Only separate asterisk are allowed ('foo/*', 'foo/**/bar')" msgstr "" -#: ../../kde4/settingsdialog.py:430 +#: ../../qt4/settingsdialog.py:425 +msgid "Exclude patterns, files or folders" +msgstr "Exclou fitxers i carpetes" + +#: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "Molt recomanat" -#: ../../kde4/settingsdialog.py:460 ../../gnome/settingsdialog.glade:1905 +#: ../../qt4/settingsdialog.py:463 +msgid "Add default" +msgstr "" + +#: ../../qt4/settingsdialog.py:474 +msgid "Exclude files bigger than: " +msgstr "" + +#: ../../qt4/settingsdialog.py:475 +#, python-format +msgid "" +"Exclude files bigger than value in %(prefix)s.\n" +"With 'Full rsync mode' disabled this will only affect new files\n" +"because for rsync this is a transfer option, not an exclude option.\n" +"So big files that has been backed up before will remain in snapshots\n" +"even if they had changed." +msgstr "" + +#: ../../qt4/settingsdialog.py:493 msgid "Auto-remove" msgstr "Eliminació automàtica" -#: ../../kde4/settingsdialog.py:464 ../../gnome/settingsdialog.glade:1608 +#: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "Més antics que:" -#: ../../kde4/settingsdialog.py:478 ../../gnome/settingsdialog.glade:1624 +#: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "Si l'espai lliure és inferior a:" -#: ../../kde4/settingsdialog.py:490 ../../gnome/settingsdialog.glade:1642 +#: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" -#: ../../kde4/settingsdialog.py:514 ../../gnome/settingsdialog.glade:1697 +#: ../../qt4/settingsdialog.py:551 +msgid "Run in background on remote Host." +msgstr "" + +#: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "Mantingues totes les instantànies durant els darrers" -#: ../../kde4/settingsdialog.py:517 ../../kde4/settingsdialog.py:522 -#: ../../gnome/settingsdialog.glade:1705 ../../gnome/settingsdialog.glade:1729 +#: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "dia(es)" -#: ../../kde4/settingsdialog.py:519 ../../gnome/settingsdialog.glade:1717 +#: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "Mantingues una instantània al dia durant els darrers" -#: ../../kde4/settingsdialog.py:524 ../../gnome/settingsdialog.glade:1743 +#: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "Mantingues una instantània a la setmana durant les darreres" -#: ../../kde4/settingsdialog.py:527 +#: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "setmana(es)" -#: ../../kde4/settingsdialog.py:529 ../../gnome/settingsdialog.glade:1769 +#: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "Mantingues una instantània al mes durant els darrers" -#: ../../kde4/settingsdialog.py:532 ../../gnome/settingsdialog.glade:1781 +#: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "mes(os)" -#: ../../kde4/settingsdialog.py:534 ../../gnome/settingsdialog.glade:1795 +#: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "Mantingues una instantània a l'any durant els darrers" -#: ../../kde4/settingsdialog.py:537 ../../gnome/settingsdialog.glade:1496 +#: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "No eliminis les instantànies amb nom" -#: ../../kde4/settingsdialog.py:546 ../../gnome/settingsdialog.glade:2104 +#: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Opcions" -#: ../../kde4/settingsdialog.py:549 ../../gnome/settingsdialog.glade:1920 +#: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Activa les notificacions" -#: ../../kde4/settingsdialog.py:552 ../../gnome/settingsdialog.glade:1937 +#: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "Desactiva les instantànies treballant en bateria" -#: ../../kde4/settingsdialog.py:555 +#: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" msgstr "No està disponible l'estat de l'energia" -#: ../../kde4/settingsdialog.py:558 ../../gnome/settingsdialog.glade:1955 -msgid "Backup files on restore" -msgstr "Fes una còpia al tornar a iniciar" +#: ../../qt4/settingsdialog.py:611 +msgid "Run only one snapshot at a time" +msgstr "" + +#: ../../qt4/settingsdialog.py:612 +msgid "" +"Other snapshots will be blocked until the current snapshot is done.\n" +"This is a global option. So it will effect all profiles for this user.\n" +"But you need to activate this for all other users, too." +msgstr "" + +#: ../../qt4/settingsdialog.py:617 +msgid "Backup replaced files on restore" +msgstr "" + +#: ../../qt4/settingsdialog.py:618 +#, python-format +msgid "" +"Newer versions of files will be renamed with trailing '%(suffix)s' before " +"restoring.\n" +"If you don't need them anymore you can remove them with '%(cmd)s'" +msgstr "" -#: ../../kde4/settingsdialog.py:561 ../../gnome/settingsdialog.glade:1972 +#: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "Continua amb errors (Mantingues instantànies incompletes)" -#: ../../kde4/settingsdialog.py:564 ../../gnome/settingsdialog.glade:1989 +#: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "Utilitza el checksum per detectar canvis" -#: ../../kde4/settingsdialog.py:567 ../../gnome/settingsdialog.glade:2006 +#: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "Mode rsync complet. Pot ser més ràpid, però:" -#: ../../kde4/settingsdialog.py:568 ../../gnome/settingsdialog.glade:2032 +#: ../../qt4/settingsdialog.py:634 msgid "" -"- snapshots are no read-only\n" -"- destination file-system must support all linux attributes (dates, rights, " +"- snapshots are not read-only\n" +"- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" "- les instantànies no són de només lectura\n" "- el sistema de fitxers de destí ha de permetre tots els atributs de Linux " "(dates, permisos, usuari, grup...)" -#: ../../kde4/settingsdialog.py:575 ../../gnome/settingsdialog.glade:2045 +#: ../../qt4/settingsdialog.py:641 +msgid "Take a new snapshot regardless of there were changes or not." +msgstr "" + +#: ../../qt4/settingsdialog.py:644 msgid "Check for changes (don't take a new snapshot if nothing changed)" msgstr "" "Comprova si hi ha hagut canvis (no facis una nova instantània si no ha " "canviat res)" -#: ../../kde4/settingsdialog.py:582 +#: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "Nivell de log" -#: ../../kde4/settingsdialog.py:597 ../../gnome/settingsdialog.glade:2366 -msgid "Expert Options" -msgstr "Opcions avançades" +#: ../../qt4/settingsdialog.py:656 +msgid "None" +msgstr "Cap" + +#: ../../qt4/settingsdialog.py:658 +msgid "Changes & Errors" +msgstr "Canvis i Errors" -#: ../../kde4/settingsdialog.py:600 +#: ../../qt4/settingsdialog.py:674 msgid "Change these options only if you really know what you are doing !" msgstr "Canvia aquestes opcions només si saps el que estas fent !" -#: ../../kde4/settingsdialog.py:608 ../../gnome/settingsdialog.glade:2133 -msgid "Run 'nice' as cron job (default: enabled)" -msgstr "Executa 'nice' com a tasca del cron (habilitat per defecte)" +#: ../../qt4/settingsdialog.py:678 +msgid "Run 'nice':" +msgstr "" + +#: ../../qt4/settingsdialog.py:684 ../../qt4/settingsdialog.py:696 +msgid "as cron job" +msgstr "" + +#: ../../qt4/settingsdialog.py:687 ../../qt4/settingsdialog.py:702 +#: ../../qt4/settingsdialog.py:716 +msgid "on remote host" +msgstr "" + +#: ../../qt4/settingsdialog.py:690 +msgid "Run 'ionice':" +msgstr "" + +#: ../../qt4/settingsdialog.py:699 +msgid "when taking a manual snapshot" +msgstr "" -#: ../../kde4/settingsdialog.py:611 ../../gnome/settingsdialog.glade:2150 -msgid "Run 'ionice' as cron job (default: enabled)" -msgstr "Executa 'ionice' com a tasca del cron (habilitat per defecte)" +#: ../../qt4/settingsdialog.py:706 +msgid "Run 'rsync' with 'nocache':" +msgstr "" -#: ../../kde4/settingsdialog.py:614 ../../gnome/settingsdialog.glade:2167 -msgid "Run 'ionice' when taking a manual snapshot (default: disabled)" +#: ../../qt4/settingsdialog.py:712 +msgid "on local machine" msgstr "" -"Fes servir 'ionice' quan es faci una instantània manual (per defect: " -"deshabilitat)" -#: ../../kde4/settingsdialog.py:617 ../../gnome/settingsdialog.glade:2184 -msgid "Run 'nice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:719 +msgid "Redirect stdout to /dev/null in cronjobs." msgstr "" -#: ../../kde4/settingsdialog.py:620 ../../gnome/settingsdialog.glade:2201 -msgid "Run 'ionice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:725 +msgid "Redirect stderr to /dev/null in cronjobs." msgstr "" -#: ../../kde4/settingsdialog.py:626 ../../gnome/settingsdialog.glade:2224 +#: ../../qt4/settingsdialog.py:734 msgid "Limit rsync bandwidth usage: " msgstr "" -#: ../../kde4/settingsdialog.py:629 ../../gnome/settingsdialog.glade:2259 +#: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" -#: ../../kde4/settingsdialog.py:634 ../../gnome/settingsdialog.glade:2280 +#: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "Preserva ACL" -#: ../../kde4/settingsdialog.py:637 ../../gnome/settingsdialog.glade:2297 +#: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "Preserva els atributs extesos (xattr)" -#: ../../kde4/settingsdialog.py:640 ../../gnome/settingsdialog.glade:2314 +#: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute links)" msgstr "Copia links insegurs (Només funciona amb links absoluts)" -#: ../../kde4/settingsdialog.py:643 ../../gnome/settingsdialog.glade:2331 -msgid "Copy links (dereference symbolic links)" -msgstr "Copia enllaços (desarbitra els enllaços simbòlics)" +#: ../../qt4/settingsdialog.py:834 +msgid "Paste additional options to rsync" +msgstr "" -#: ../../kde4/snapshotsdialog.py:46 ../../kde4/snapshotsdialog.py:173 -#: ../../gnome/snapshotsdialog.glade:385 -msgid "Diff Options" -msgstr "Opcions de diff" +#: ../../qt4/settingsdialog.py:837 +msgid "" +"Options must be quoted e.g. --exclude-from=\"/path/to/my exclude file\"." +msgstr "" -#: ../../kde4/snapshotsdialog.py:56 ../../gnome/snapshotsdialog.glade:314 -msgid "Command:" -msgstr "Ordre:" +#: ../../qt4/settingsdialog.py:847 +msgid "Add prefix to SSH commands" +msgstr "" -#: ../../kde4/snapshotsdialog.py:60 ../../gnome/snapshotsdialog.glade:322 -msgid "Parameters:" -msgstr "Paràmetres:" +#: ../../qt4/settingsdialog.py:850 +#, python-format +msgid "" +"Prefix to run before every command on remote host.\n" +"Variables need to be escaped with \\$FOO.\n" +"This doesn't touch rsync. So to add a prefix\n" +"for rsync use \"%(cb_rsync_options)s\" with\n" +"%(rsync_options_value)s\n" +"\n" +"%(default)s: %(def_value)s" +msgstr "" -#: ../../kde4/snapshotsdialog.py:64 ../../gnome/snapshotsdialog.glade:334 -msgid "Use %1 and %2 for path parameters" -msgstr "Utilitza %1 i %2 com a paràmetres de les rutes" +#: ../../qt4/settingsdialog.py:858 ../../qt4/settingsdialog.py:1691 +msgid "default" +msgstr "" -#: ../../kde4/snapshotsdialog.py:123 ../../gnome/snapshotsdialog.glade:184 -#: ../../gnome/snapshotsdialog.glade:186 -msgid "Delete" +#: ../../qt4/settingsdialog.py:875 +msgid "Restore Config" msgstr "" -#: ../../kde4/snapshotsdialog.py:128 ../../gnome/snapshotsdialog.glade:199 -#: ../../gnome/snapshotsdialog.glade:201 -msgid "Select All" +#: ../../qt4/settingsdialog.py:891 +msgid "" +"Full system backup can only create a snapshot to be restored to the same " +"physical disk(s) with the same disk partitioning as from the source; " +"restoring to new physical disks or the same disks with different " +"partitioning will yield a potentially broken and unusable system.\n" +"\n" +"Full system backup will override some settings that may have been " +"customized. Continue?" msgstr "" -#: ../../kde4/snapshotsdialog.py:132 ../../gnome/snapshotsdialog.glade:88 -msgid "List only different snapshots" -msgstr "LLista només les instantànies diferents" +#: ../../qt4/settingsdialog.py:922 +msgid "New profile" +msgstr "Perfil nou" -#: ../../kde4/snapshotsdialog.py:139 ../../gnome/snapshotsdialog.glade:110 -msgid "List only equal snapshots to: " +#: ../../qt4/settingsdialog.py:938 +msgid "Rename profile" +msgstr "Reanomena el perfil" + +#: ../../qt4/settingsdialog.py:952 +#, python-format +msgid "Are you sure you want to delete the profile \"%s\" ?" +msgstr "Esteu segurs de que voleu eliminar el perfil \"%s\"?" + +#: ../../qt4/settingsdialog.py:1191 +msgid "" +"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " +"*/3 for periodic backups every 3 hours" msgstr "" +"Les hores personalitzades només poden ser una llista d'hores separades per " +"comes (p.e. 8,12,18,23) o */3 per fer còpies periòdiques cada 3 hores" -#: ../../kde4/snapshotsdialog.py:149 ../../gnome/snapshotsdialog.glade:146 -msgid "Deep check (more accurate, but slow)" -msgstr "Comprovació a fons (més acurada, però lenta)" +#: ../../qt4/settingsdialog.py:1489 +msgid "Exclude pattern" +msgstr "Exclou el patró" -#: ../../kde4/snapshotsdialog.py:174 -msgid "Go To" -msgstr "Vés a" +#: ../../qt4/settingsdialog.py:1502 +msgid "Exclude file" +msgstr "Exclou el fitxer" + +#: ../../qt4/settingsdialog.py:1506 +msgid "Exclude folder" +msgstr "Exclou el directori" -#: ../../gnome/logviewdialog.glade:9 -msgid "Log View" -msgstr "Visualitza el log" +#: ../../qt4/settingsdialog.py:1525 +msgid "Include file" +msgstr "Afegeix un fitxer" -#: ../../gnome/logviewdialog.glade:179 -msgid "scroll down automatic" +#: ../../qt4/settingsdialog.py:1533 ../../qt4/settingsdialog.py:1553 +#, python-format +msgid "" +"\"%s\" is a symlink. The linked target will not be backed up until you " +"include it, too.\n" +"Would you like to include the symlinks target instead?" msgstr "" -#: ../../gnome/mainwindow.glade:7 -msgid "Back In Time" -msgstr "Back In Time" +#: ../../qt4/settingsdialog.py:1545 +msgid "Include folder" +msgstr "Inclou el directori" -#: ../../gnome/mainwindow.glade:45 -msgid "Backup Now" -msgstr "Fés la còpia de seguretat ara" +#: ../../qt4/settingsdialog.py:1572 +msgid "Are you sure you want to change snapshots folder ?" +msgstr "Esteu segur que voleu cambiar el directori d'instantànies?" -#: ../../gnome/mainwindow.glade:171 -msgid "Shutdown" +#: ../../qt4/settingsdialog.py:1688 +msgid "enabled" msgstr "" -#: ../../gnome/mainwindow.glade:287 -msgid "Parent folder" -msgstr "Dirctori superior" +#: ../../qt4/settingsdialog.py:1690 +msgid "disabled" +msgstr "" -#: ../../gnome/mainwindow.glade:327 -msgid "Hidden files" -msgstr "Fitxers ocults" +#: ../../qt4/settingsdialog.py:1715 +msgid "Restore Settings" +msgstr "" -#: ../../gnome/mainwindow.glade:451 +#: ../../qt4/settingsdialog.py:1732 +msgid " and add your user to group 'fuse'" +msgstr "" + +#: ../../qt4/settingsdialog.py:1736 +#, python-format msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +"Please navigate to the snapshot from which you want to restore %(appName)s's " +"configuration. The path may look like: \n" +"%(samplePath)s\n" +"\n" +"If your snapshots are on a remote drive or if they are encrypted you need to " +"manually mount them first. If you use Mode SSH you also may need to set up " +"public key login to the remote host%(addFuse)s.\n" +"Take a look at 'man backintime'." msgstr "" -"Aquesta carpeta no existeix\n" -"en l'actual instantània!" -#: ../../gnome/settingsdialog.glade:287 -msgid "Where to save snapshots" -msgstr "On s'han de guardar les instantànies" +#: ../../qt4/settingsdialog.py:1794 ../../qt4/settingsdialog.py:1854 +msgid "No config found" +msgstr "" -#: ../../gnome/settingsdialog.glade:483 -msgid "Private key:" -msgstr "Clau privada:" +#: ../../qt4/snapshotsdialog.py:49 ../../qt4/snapshotsdialog.py:173 +msgid "Diff Options" +msgstr "Opcions de diff" -#: ../../gnome/settingsdialog.glade:534 -msgid "Advanced SSH Settings" -msgstr "" +#: ../../qt4/snapshotsdialog.py:56 +msgid "Command:" +msgstr "Ordre:" + +#: ../../qt4/snapshotsdialog.py:60 +msgid "Parameters:" +msgstr "Paràmetres:" + +#: ../../qt4/snapshotsdialog.py:64 +msgid "Use %1 and %2 for path parameters" +msgstr "Utilitza %1 i %2 com a paràmetres de les rutes" -#: ../../gnome/settingsdialog.glade:552 -msgid "SSH Settings" +#: ../../qt4/snapshotsdialog.py:106 +msgid "List only different snapshots" +msgstr "LLista només les instantànies diferents" + +#: ../../qt4/snapshotsdialog.py:113 +msgid "List only equal snapshots to: " msgstr "" -#: ../../gnome/settingsdialog.glade:815 -msgid "Password" -msgstr "Contrasenya" +#: ../../qt4/snapshotsdialog.py:123 +msgid "Deep check (more accurate, but slow)" +msgstr "Comprovació a fons (més acurada, però lenta)" -#: ../../gnome/settingsdialog.glade:930 -msgid "Profile Id:" -msgstr "ID del Perfil:" +#: ../../qt4/snapshotsdialog.py:144 +msgid "Delete" +msgstr "" -#: ../../gnome/settingsdialog.glade:1115 -msgid "" -"hours seperate by comma ( e.g. 8,12,18,23) or */3 for periodic backups every " -"3 hours (cron style)" +#: ../../qt4/snapshotsdialog.py:148 +msgid "Select All" msgstr "" -"hores separades per comes (p.e. 8,12,18,23) o */3 per fer còpies periòdiques " -"cada 3 hores (estil cron)" -#: ../../gnome/settingsdialog.glade:1163 -msgid "Schedule" -msgstr "Planificació" +#: ../../qt4/snapshotsdialog.py:161 +msgid "Diff" +msgstr "Diff" -#: ../../gnome/settingsdialog.glade:1363 -msgid "Highly recommended:" -msgstr "Molt recomanat" +#: ../../qt4/snapshotsdialog.py:172 +msgid "Go To" +msgstr "Vés a" -#: ../../gnome/settingsdialog.glade:1377 -msgid "label" -msgstr "etiqueta" +#: ../../qt4/snapshotsdialog.py:326 +msgid "You can't compare a snapshot to itself" +msgstr "No podeu compara una instantània amb sí mateixa" -#: ../../gnome/settingsdialog.glade:1755 -msgid "week(s)" -msgstr "setmana(es)" +#: ../../qt4/snapshotsdialog.py:333 +#, python-format +msgid "Command not found: %s" +msgstr "No s'ha trobat l'ordre: %s" + +#: ../../qt4/snapshotsdialog.py:354 +#, python-format +msgid "" +"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" +msgstr "" + +#: ../../qt4/snapshotsdialog.py:357 +#, python-format +msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +msgstr "" -#: ../../gnome/settingsdialog.glade:2069 -msgid "Log level:" -msgstr "Nivell de registre:" - -#: ../../gnome/settingsdialog.glade:2121 -msgid "" -"Change these options only if you really know what you are doing !" -msgstr "Canvia aquestes opcions només si està segur del que està fent!" - -#: ../../gnome/snapshotsdialog.glade:263 -msgid "Diff with" -msgstr "Mostra diferències amb" - -#: ../../gnome/textinputdialog.glade:7 -msgid "Pattern" -msgstr "Patró" - -#: ../../gnome/textinputdialog.glade:70 -msgid "Text" -msgstr "Text" +#: ../../qt4/snapshotsdialog.py:359 +msgid "WARNING: This can not be revoked!" +msgstr "" + +#: ../../qt4/snapshotsdialog.py:374 +#, python-format +msgid "Exclude \"%s\" from future snapshots?" +msgstr "" diff -Nru backintime-1.0.36/common/po/cs.po backintime-1.1.12/common/po/cs.po --- backintime-1.0.36/common/po/cs.po 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/po/cs.po 2016-01-11 18:07:58.000000000 +0000 @@ -7,290 +7,341 @@ msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2013-11-09 22:34+0100\n" -"PO-Revision-Date: 2013-12-23 12:16+0000\n" -"Last-Translator: Petr Šimáček \n" +"POT-Creation-Date: 2015-12-19 00:47+0100\n" +"PO-Revision-Date: 2016-01-11 15:17+0000\n" +"Last-Translator: Pavel Borecki \n" "Language-Team: Czech \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -"X-Launchpad-Export-Date: 2014-08-06 10:19+0000\n" -"X-Generator: Launchpad (build 17147)\n" +"X-Launchpad-Export-Date: 2016-01-11 17:52+0000\n" +"X-Generator: Launchpad (build 17881)\n" -#: ../../common/config.py:72 +#: ../../common/configfile.py:60 +#, python-format +msgid "Failed to save config: %s" +msgstr "Nastavení se nepodařilo uložit: %s" + +#: ../../common/configfile.py:78 +#, python-format +msgid "Failed to load config: %s" +msgstr "Nastavení se nepodařilo načíst: %s" + +#: ../../common/configfile.py:352 ../../common/configfile.py:414 +#, python-format +msgid "Profile \"%s\" already exists !" +msgstr "Profil %s už existuje!" + +#: ../../common/configfile.py:383 +msgid "You can't remove the last profile !" +msgstr "Nelze odebrat poslední zbývající profil!" + +#: ../../common/config.py:76 msgid "Disabled" -msgstr "Zakázáno" +msgstr "Vypnuto" -#: ../../common/config.py:73 +#: ../../common/config.py:77 msgid "At every boot/reboot" msgstr "Při každém startu/restartu" -#: ../../common/config.py:74 +#: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Každých 5 minut" -#: ../../common/config.py:75 +#: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Každých 10 minut" -#: ../../common/config.py:76 +#: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "Každých 30 minut" -#: ../../common/config.py:77 +#: ../../common/config.py:81 msgid "Every hour" msgstr "Každou hodinu" -#: ../../common/config.py:78 +#: ../../common/config.py:82 msgid "Every 2 hours" msgstr "Každé 2 hodiny" -#: ../../common/config.py:79 +#: ../../common/config.py:83 msgid "Every 4 hours" msgstr "Každé 4 hodiny" -#: ../../common/config.py:80 +#: ../../common/config.py:84 msgid "Every 6 hours" msgstr "Každých 6 hodin" -#: ../../common/config.py:81 +#: ../../common/config.py:85 msgid "Every 12 hours" msgstr "Každých 12 hodin" -#: ../../common/config.py:82 +#: ../../common/config.py:86 msgid "Custom Hours" -msgstr "Vlastní doba" +msgstr "Vlastní interval" -#: ../../common/config.py:83 +#: ../../common/config.py:87 msgid "Every Day" msgstr "Každý den" -#: ../../common/config.py:84 -msgid "Daily (anacron)" -msgstr "Denně (anacron)" +#: ../../common/config.py:88 +msgid "Repeatedly (anacron)" +msgstr "Opakovaně (anacron)" -#: ../../common/config.py:85 +#: ../../common/config.py:89 msgid "When drive get connected (udev)" -msgstr "Když se disk připojí (udev)" +msgstr "Při připojení (flash)disku (udev)" -#: ../../common/config.py:86 +#: ../../common/config.py:90 msgid "Every Week" msgstr "Každý týden" -#: ../../common/config.py:87 +#: ../../common/config.py:91 msgid "Every Month" msgstr "Každý měsíc" -#: ../../common/config.py:91 +#: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Dnů" -#: ../../common/config.py:92 +#: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Týdnů" -#: ../../common/config.py:93 +#: ../../common/config.py:97 msgid "Year(s)" -msgstr "Roků" +msgstr "Let" + +#: ../../common/config.py:101 +msgid "Hour(s)" +msgstr "Hodin" -#: ../../common/config.py:100 +#: ../../common/config.py:104 +msgid "Month(s)" +msgstr "Měsíců" + +#: ../../common/config.py:126 ../../qt4/settingsdialog.py:551 msgid " EXPERIMENTAL!" msgstr " EXPERIMENTÁLNÍ!" -#: ../../common/config.py:103 +#: ../../common/config.py:129 msgid "Local" msgstr "Místní" -#: ../../common/config.py:104 +#: ../../common/config.py:130 msgid "SSH" -msgstr "SSH" +msgstr "Vzdálené (SSH)" -#: ../../common/config.py:104 ../../common/config.py:106 -#: ../../gnome/settingsdialog.py:475 ../../kde4/settingsdialog.py:1325 +#: ../../common/config.py:130 ../../common/config.py:132 +#: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" -msgstr "SSH soukromý klíč" +msgstr "Soukromá část SSH klíče" -#: ../../common/config.py:105 +#: ../../common/config.py:131 msgid "Local encrypted" -msgstr "Místně zašifrováno" +msgstr "Místní šifrované" -#: ../../common/config.py:105 ../../common/config.py:106 +#: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "Šifrování" -#: ../../common/config.py:106 +#: ../../common/config.py:132 msgid "SSH encrypted" -msgstr "SSH šifrováno" +msgstr "Vzdálené (SSH) šifrované" -#: ../../common/config.py:112 +#: ../../common/config.py:135 msgid "Default" msgstr "Výchozí" -#: ../../common/config.py:113 +#: ../../common/config.py:136 msgid "AES128-CTR" -msgstr "AES128-CTR" +msgstr "" -#: ../../common/config.py:114 +#: ../../common/config.py:137 msgid "AES192-CTR" -msgstr "AES192-CTR" +msgstr "" -#: ../../common/config.py:115 +#: ../../common/config.py:138 msgid "AES256-CTR" -msgstr "AES256-CTR" +msgstr "" -#: ../../common/config.py:116 +#: ../../common/config.py:139 msgid "ARCFOUR256" -msgstr "ARCFOUR256" +msgstr "" -#: ../../common/config.py:117 +#: ../../common/config.py:140 msgid "ARCFOUR128" -msgstr "ARCFOUR128" +msgstr "" -#: ../../common/config.py:118 +#: ../../common/config.py:141 msgid "AES128-CBC" -msgstr "AES128-CBC" +msgstr "" -#: ../../common/config.py:119 +#: ../../common/config.py:142 msgid "3DES-CBC" -msgstr "3DES-CBC" +msgstr "" -#: ../../common/config.py:120 +#: ../../common/config.py:143 msgid "Blowfish-CBC" -msgstr "Blowfish-CBC" +msgstr "" -#: ../../common/config.py:121 +#: ../../common/config.py:144 msgid "Cast128-CBC" -msgstr "Cast128-CBC" +msgstr "" -#: ../../common/config.py:122 +#: ../../common/config.py:145 msgid "AES192-CBC" -msgstr "AES192-CBC" +msgstr "" -#: ../../common/config.py:123 +#: ../../common/config.py:146 msgid "AES256-CBC" -msgstr "AES256-CBC" +msgstr "" -#: ../../common/config.py:124 +#: ../../common/config.py:147 msgid "ARCFOUR" -msgstr "ARCFOUR" +msgstr "" -#: ../../common/config.py:129 +#: ../../common/config.py:153 msgid "Main profile" -msgstr "Základní profil" +msgstr "Hlavní profil" -#: ../../common/config.py:256 ../../common/config.py:275 -#: ../../common/config.py:286 ../../common/config.py:291 +#: ../../common/config.py:289 ../../common/config.py:296 +#: ../../common/config.py:307 ../../common/config.py:312 +#: ../../qt4/qt4systrayicon.py:61 #, python-format msgid "Profile: \"%s\"" -msgstr "Profil: \"%s\"" +msgstr "Profil: %s" -#: ../../common/config.py:256 +#: ../../common/config.py:289 msgid "Snapshots folder is not valid !" -msgstr "Složka snímků není platná!" +msgstr "Složka zachycených stavů není platná!" -#: ../../common/config.py:275 +#: ../../common/config.py:296 msgid "You must select at least one folder to backup !" -msgstr "Vyberte nejméně jednu složku k zálohování!" +msgstr "Vyberte alespoň jednu složku, která má být zálohovaná!" -#: ../../common/config.py:286 +#: ../../common/config.py:307 msgid "You can't include backup folder !" -msgstr "Nemůžete vložit složku zálohy!" +msgstr "" +"Složku se zálohami nelze zahrnout mezi zálohované položky (zacyklení)!" -#: ../../common/config.py:291 +#: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" -msgstr "Nemůžete vložit podsložku zálohy!" +msgstr "" +"Podsložku složky se zálohami nelze zahrnout mezi zálohované položky " +"(zacyklení)!" -#: ../../common/config.py:361 +#: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s není složka!" -#: ../../common/config.py:376 ../../common/config.py:389 +#: ../../common/config.py:380 +msgid "Host/User/Profile-ID must not be empty!" +msgstr "" +"Kolonka Stroj/Uživatel/Identifikátor-profilu nemůže zůstat nevyplněná!" + +#: ../../common/config.py:388 ../../common/config.py:420 #, python-format msgid "" "Can't write to: %s\n" "Are you sure you have write access ?" msgstr "" -"Nelze zapisovat do: %s\n" -"Máte nastavena práva zápisu?" +"Nedaří se zapisovat do: %s\n" +"Máte zde oprávnění k zápisu?" -#: ../../common/config.py:1286 +#: ../../common/config.py:400 +#, python-format msgid "" -"Can't find crontab.\n" -"Are you sure cron is installed ?\n" -"If not you should disable all automatic backups." +"Destination filesystem for '%(path)s' is formatted with FAT which doesn't " +"support hard-links. Please use a native Linux filesystem." msgstr "" -"Nelze nalézt crontab.\n" -"Máte určitě nainstalován cron?\n" -"Pokud ne, automatické zálohování bude vypnuto." +"Cílový souborový systém pro %(path)s je FAT, který nepodporuje pevné odkazy " +"(hardlink). Použijte namísto něj nějaký přirozený Linuxový souborový systém." -#: ../../common/config.py:1338 +#: ../../common/config.py:405 #, python-format -msgid "Schedule udev doesn't work with mode %s" -msgstr "Plán udev nepracuje v režimu %s" +msgid "" +"Destination filsystem for '%(path)s' is a SMB mounted share. Please make " +"sure the remote SMB server supports symlinks or activate '%(copyLinks)s' in " +"'%(expertOptions)s'." +msgstr "" +"Cílový souborový systém pro '%(path)s' je SMB sdílení. Ověřte, že SMB server " +"podporuje symbolické odkazy (symlink), případně v '%(expertOptions)s' " +"zapněte '%(copyLinks)s'" -#: ../../common/config.py:1342 -#, python-format -msgid "Couldn't find UUID for \"%s\"" -msgstr "Nelze najít UUID pro \"% s\"" +#: ../../common/config.py:408 ../../qt4/settingsdialog.py:815 +msgid "Copy links (dereference symbolic links)" +msgstr "Kopírovat cíle odkazů (vyřadí symbolické odkazy)" -#: ../../common/config.py:1379 -msgid "Failed to remove udev rules" -msgstr "Nepodařilo se odstranit pravidla udev" +#: ../../common/config.py:409 ../../qt4/settingsdialog.py:669 +msgid "Expert Options" +msgstr "Pokročilé předvolby" -#: ../../common/config.py:1385 -msgid "Failed to create udev rules" -msgstr "Nepodařilo se vytvořit pravidla udev" +#: ../../common/config.py:411 +#, python-format +msgid "" +"Destination filesystem for '%(path)s is a sshfs mounted share. sshfs doesn't " +"support hard-links. Please use mode 'SSH' instead." +msgstr "" +"Cílový souborový systém pro '%(path)s je sshfs sdílení. sshfs nepodporuje " +"pevné odkazy (hardlink). Použijte namísto toho přímo SSH režim." -#: ../../common/config.py:1420 +#: ../../common/config.py:1407 msgid "" -"Can't find anacron.\n" -"Are you sure anacron is installed ?\n" -"If not you should disable daily anacron backups." +"Can't find crontab.\n" +"Are you sure cron is installed ?\n" +"If not you should disable all automatic backups." msgstr "" -"Nelze nalézt anacron.\n" -"Je anacron opravdu nainstalovaný?\n" -"Pokud ne, měli byste vypnout denní anacron zálohy." +"Nelze nalézt soubor crontab.\n" +"Máte určitě nainstalován plánovač cron ?\n" +"V případě že ne, měli byste vypnout veškeré samočinné zálohování." -#: ../../common/config.py:1439 -msgid "Please provide your sudo password to install the udev rule." -msgstr "Uveďte, prosím, své sudo heslo pro instalaci pravidla udev." +#: ../../common/config.py:1411 +msgid "Failed to write new crontab." +msgstr "Nezdařilo se zapsat novou úlohu (crontab)." -#: ../../common/config.py:1445 -msgid "Please provide your sudo password to remove unused udev rules." -msgstr "Uveďte, prosím, své sudo heslo pro odebrání pravidel udev." +#: ../../common/config.py:1505 +#, python-format +msgid "" +"Could not install Udev rule for profile %(profile_id)s. DBus Service " +"'%(dbus_interface)s' wasn't available" +msgstr "" +"Nelze nainstalovat Udev pravidlo pro profil %(profile_id)s. Služba DBus " +"'%(dbus_interface)s' nebyla k dispozici" -#: ../../common/configfile.py:253 ../../common/configfile.py:315 +#: ../../common/config.py:1517 #, python-format -msgid "Profile \"%s\" already exists !" -msgstr "Profil \"%s\" už existuje!" +msgid "Schedule udev doesn't work with mode %s" +msgstr "Plán, používající správce zařízení udev, nefunguje v režimu %s" -#: ../../common/configfile.py:284 -msgid "You can't remove the last profile !" -msgstr "Nemůžete odebrat poslední profil!" +#: ../../common/config.py:1526 +#, python-format +msgid "Couldn't find UUID for \"%s\"" +msgstr "Nelze najít univerzálně jedinečný identifkátor (UUID) pro %s" -#: ../../common/encfstools.py:95 +#: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" "\n" "%(error)s" msgstr "" -"Nelze připojit '%(command)s':\n" +"Nelze připojit %(command)s:\n" "\n" "%(error)s" -#: ../../common/encfstools.py:105 +#: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" -msgstr "Nelze odpojit encfs %s" +msgstr "Nelze odpojit souborový systém encfs %s" -#: ../../common/encfstools.py:149 +#: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." -msgstr "Nastavení pro zašifrovanou složku nelze nalézt." +msgstr "Nastavení pro šifrovanou složku nebylo nalezeno." -#: ../../common/encfstools.py:153 +#: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" @@ -298,108 +349,114 @@ "\n" "Vytvořit novou šifrovanou složku?" -#: ../../common/encfstools.py:154 +#: ../../common/encfstools.py:171 msgid "Cancel" -msgstr "Zrušit" +msgstr "Storno" -#: ../../common/encfstools.py:157 +#: ../../common/encfstools.py:174 msgid "Please confirm password" -msgstr "Potvrďte, prosím, heslo" +msgstr "Potvrďte heslo" -#: ../../common/encfstools.py:161 +#: ../../common/encfstools.py:178 msgid "Password doesn't match" -msgstr "Heslo se neshoduje" +msgstr "Zadání hesla se neshodují" -#: ../../common/encfstools.py:166 +#: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" -"encfs nelze nalézt. Nainstalujte ho například 'apt-get install encfs'" +"Podporu pro encfs nelze nalézt. Nainstalujte příslušný balíček, např.: apt-" +"get install encfs" -#: ../../common/encfstools.py:174 ../../common/sshtools.py:207 +#: ../../common/encfstools.py:196 ../../common/sshtools.py:262 #, python-format msgid "" "%(user)s is not member of group 'fuse'.\n" " Run 'sudo adduser %(user)s fuse'. To apply changes logout and login again.\n" "Look at 'man backintime' for further instructions." msgstr "" -"%(user)s není členem skupiny 'fuse'.\n" -" Spusťte 'sudo adduser %(user)s fuse'. Aby se změny projevily, je nutné se " -"odhlásit a znovu přihlásit.\n" -"Podívejte se na 'man backintime' pro další instrukce." +"%(user)s není členem skupiny fuse.\n" +" Spusťte příkaz: sudo adduser %(user)s fuse . Aby se změny projevily, bude " +"nutné se odhlásit a znovu přihlásit.\n" +"Další pokyny naleznete v manuálové stránce aplikace (man backintime)." -#: ../../common/encfstools.py:189 +#: ../../common/encfstools.py:211 msgid "" "encfs version 1.7.2 and before has a bug with option --reverse. Please " "update encfs" msgstr "" -"encfs verze 1.7.2 a nižší mají chybu s možností - reverzní. Prosím, " -"aktualizujte encfs" +"Implementace encfs verze 1.7.2 a starší obsahují chybu ve volbě --reverse . " +"Aktualizujte encfs" -#: ../../common/encfstools.py:453 ../../common/encfstools.py:480 -#: ../../common/snapshots.py:982 ../../common/snapshots.py:1288 -#: ../../kde4/app.py:82 ../../gnome/mainwindow.glade:43 +#: ../../common/encfstools.py:512 ../../common/snapshots.py:1131 +#: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" -msgstr "Vytvořit snímek" +msgstr "Pořídit zachycený stav" -#: ../../common/mount.py:195 +#: ../../common/mount.py:204 #, python-format msgid "" "Hash collision occurred in hash_id %s. Incrementing global value " "hash_collision and try again." msgstr "" -"Hash kolize nastala v hash_id%s. Zvyšte globální hodnotu hash_collision a " +"Nastala kolize otisku v hash_id %s. Zvyšte celkovou hodnotu hash_collision a " "zkuste to znovu." -#: ../../common/mount.py:246 +#: ../../common/mount.py:259 #, python-format msgid "mountpoint %s not empty." msgstr "Přípojný bod %s není prázdný." -#: ../../common/mount.py:286 +#: ../../common/mount.py:296 msgid "Mountprocess lock timeout" -msgstr "Proces připojování je uzamčen časovým limitem" +msgstr "Vypršel časový limit zámku procesu připojování (mount)" -#: ../../common/password.py:425 +#: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " -msgstr "Profil '%(profile)s': Vložte heslo pro %(mode)s: " +msgstr "Profil %(profile)s: Zadejte heslo pro %(mode)s: " -#: ../../common/snapshots.py:171 ../../gnome/app.py:1127 -#: ../../kde4/app.py:1014 +#: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Nyní" -#: ../../common/snapshots.py:182 ../../gnome/gnometools.py:37 +#: ../../common/snapshots.py:196 msgid "WITH ERRORS !" -msgstr "S CHYBAMI !" +msgstr "S CHYBAMI!" -#: ../../common/snapshots.py:282 +#: ../../common/snapshots.py:344 msgid "" "### This log has been decoded with automatic search pattern\n" "### If some paths are not decoded you can manually decode them with:\n" msgstr "" -"### Tento záznam byl dekódován pomocí automatického vyhledávání vzorem\n" -"### Pokud některé cesty nejsou dekódovány můžete je ručně dekódovat s:\n" +"### Tento záznam událostí byl dekódován pomocí automatického vyhledávacího " +"vzorce\n" +"### Pokud některá umísění nejsou dekódována, můžete je dekódovat ručně, " +"pomocí:\n" -#: ../../common/snapshots.py:465 +#: ../../common/snapshots.py:562 ../../common/snapshots.py:750 msgid "FAILED" -msgstr "NEPLATNÉ" +msgstr "NEZDAŘILO SE" -#: ../../common/snapshots.py:564 +#: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" -msgstr "Obnovit oprávnění:" +msgstr "Obnovit přístupová práva:" + +#: ../../common/snapshots.py:752 ../../qt4/app.py:377 ../../qt4/app.py:675 +#: ../../qt4/app.py:692 ../../qt4/qt4systrayicon.py:65 +msgid "Done" +msgstr "Dokončeno" -#: ../../common/snapshots.py:739 +#: ../../common/snapshots.py:860 msgid "" "Back In Time changed its backup format.\n" "\n" "Your old snapshots can be moved according to this new format. OK?" msgstr "" -"Back in Time má nový formát zálohy.\n" +"Aplikace Back in Time nyní používá nový formát záloh.\n" "\n" -"Staré zálohy budou převedeny do nového formátu. OK?" +"Staré zálohy budou převedeny do nového formátu. Provést?" -#: ../../common/snapshots.py:749 +#: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" @@ -411,20 +468,20 @@ msgstr "" "%s profily nalezeny. \n" "\n" -"Nový zálohovací formát podporuje ukládání různých uživatelů a profilů do " -"stejného umístění. Chcete použít stejné umístění pro oba profily? \n" +"Nový formát záloh podporuje ukládání různých uživatelů a profilů do stejného " +"umístění. Chcete použít stejné umístění pro oba profily? \n" "\n" -"(Program mezi nimi bude stále rozlišovat)" +"(Aplikace mezi nimi bude stále schopen rozlišovat)" -#: ../../common/snapshots.py:752 +#: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" msgstr "" -"Nenalezen žádný profil. Nejprve je nutné obnovit profily a poté restartovat " -"Back in Time." +"Nebyly nalezeny žádné profily. Nejprve bude třeba je aktualizovat - " +"restartujte aplikaci Back in Time." -#: ../../common/snapshots.py:803 +#: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" @@ -439,13 +496,13 @@ "%(snapshots_left)s\n" "profilu %(profile_id)s nejsou přesunuty do jejich nového umístění\n" "Chcete pokračovat?\n" -"(Back In Time bude moci pokračovat v pořizování snapshotů, ale zbývající " -"snímky nebudou brány v úvahu pro automatické odstranění)\n" +"(Aplikace Back In Time bude moci pokračovat v pořizování zachycených stavů, " +"ale ty nepřesunuté nebudou brány v úvahu pro samočinné odstraňování)\n" "\n" -"Pokud Back In Time neobnoví dřívější nastavení pro tento profil, nesmí " -"pokračovat v přijímání snapshotů" +"Pokud pokračovat nechcete, aplikace obnoví dřívější nastavení pro tento " +"profil, nicméně pak nebude moci pokračovat v pořizování zachycených stavů" -#: ../../common/snapshots.py:812 +#: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" @@ -454,23 +511,24 @@ "You can manually move the snapshots, \n" "if you are done restart Back In Time to proceed" msgstr "" -"Nastavení profilu %s je obnoveno.\n" -"Back In Time nemůže pokračovat ve vytváření nových snímků.\n" +"Dřívější nastavení profilu %s jsou obnovena.\n" +"Aplikace Back In Time ale nemůže pokračovat v pořizování nových zachycených " +"stavů.\n" "\n" -"Můžete ručně přesunout snímky, \n" -"pokud máte hotovo, restartem programu můžete pokračovat." +"Zachycené stavy ale stále můžete přesunut ručně. \n" +"Až tak učiníte, restartujte aplikaci a bude možné pokračovat." -#: ../../common/snapshots.py:825 +#: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" msgstr "" -"Aktualizace byla úspěšná!\n" +"Aktualizace proběhla úspěšně!\n" "\n" -"Back In Time bude nadále pořizovat snímky podle plánu" +"Aplikace Back In Time tak bude nadále pořizovat zachycené stavy dle plánu" -#: ../../common/snapshots.py:830 +#: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" @@ -481,1062 +539,1252 @@ "\n" "If you do not, you will be asked again next time you start Back In Time." msgstr "" -"Opravdu chcete přesunout staré snímky?\n" +"Opravdu nechcete staré zachycené stavy přesunout?\n" "\n" "\n" -"Pokud ano, příště již tyto otázky neuvidíte, Back In Time bude opět " -"pokračovat ve vytváření snímků, ale chytré odstranění už nemůže vzít v úvahu " -"staré snímky!\n" +"Pokud je přesunete, příště už tyto otázky neuvidíte, aplikace Back In Time " +"bude opět pokračovat ve vytváření zachycených stavů, ale chytré odstranění " +"už nebude moci staré zachycené stavy brát v úvahu!\n" "\n" -"Pokud ne, Back in Time se při příštím spuštění opět dotáže." +"Pokud staré zachycené stavy přesunout nechcete, aplikace se při příštím " +"spuštění opět dotáže." -#: ../../common/snapshots.py:839 +#: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" -msgstr "Back in Time bude nadále pořizovat snímky podle plánu" +msgstr "Back in Time bude opět pořizovat zachycené stavy dle plánu" -#: ../../common/snapshots.py:841 +#: ../../common/snapshots.py:953 msgid "" "Back In Time still cannot continue taking new snapshots.\n" "Restart Back In Time to see the questions again" msgstr "" -"Back In Time stále nemůže pokračovat ve vytváření snímků.\n" -"Po restartu aplikace uvidíte otázku znovu." +"Aplikace Back In Time stále nemůže pokračovat ve vytváření zachycených " +"stavů.\n" +"Restartujte aplikaci pro opětovné zobrazení dotazu." + +#: ../../common/snapshots.py:972 +msgid "Deferring backup while on battery" +msgstr "Odložení zálohování po dobu provozu stroje na akumulátor" -#: ../../common/snapshots.py:913 +#: ../../common/snapshots.py:1035 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it." msgstr "" -"Nelze nalézt složku se snímky.\n" -"Pokud je umístěna na výměnném zařízení, připojte dané zařízení." +"Nelze nalézt složku se zachycenými stavy.\n" +"Pokud je umístěna na vyjímatelném zařízení, připojte jej." -#: ../../common/snapshots.py:915 +#: ../../common/snapshots.py:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." -msgstr[0] "Vyčkejte %s sekundu." -msgstr[1] "Vyčkejte %s sekundy." -msgstr[2] "Vyčkejte %s sekund." +msgstr[0] "Čekání %s sekundu." +msgstr[1] "Čekání %s sekundy." +msgstr[2] "Čekání %s sekund." -#: ../../common/snapshots.py:941 +#: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" -msgstr "Selhalo vytváření snímku %s !!!" +msgstr "Pořízení zachyceného stavu %s se nezdařilo!!!" -#: ../../common/snapshots.py:950 +#: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "Dokončování" -#: ../../common/snapshots.py:1088 +#: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "Nelze vytvořit složku: %s" -#: ../../common/snapshots.py:1107 +#: ../../common/snapshots.py:1217 msgid "..." -msgstr "..." +msgstr "…" + +#: ../../common/snapshots.py:1238 +#, python-format +msgid "Found leftover '%s' which can be continued." +msgstr "" -#: ../../common/snapshots.py:1134 +#: ../../common/snapshots.py:1250 +#, python-format +msgid "Remove leftover '%s' folder from last run" +msgstr "" + +#: ../../common/snapshots.py:1263 #, python-format msgid "Can't remove folder: %s" msgstr "Nelze odstranit složku: %s" -#: ../../common/snapshots.py:1219 +#: ../../common/snapshots.py:1340 #, python-format msgid "Compare with snapshot %s" -msgstr "Porovnat se snímkem %s" +msgstr "Porovnat se zachyceným stavem %s" -#: ../../common/snapshots.py:1248 +#: ../../common/snapshots.py:1360 msgid "Create hard-links" -msgstr "Vytvořit absolutní odkazy" +msgstr "Vytvořit pevné odkazy" -#: ../../common/snapshots.py:1335 +#: ../../common/snapshots.py:1439 msgid "Save config file ..." -msgstr "Uložit konfigurační soubor" +msgstr "Uložit soubor s nastaveními…" -#: ../../common/snapshots.py:1341 +#: ../../common/snapshots.py:1445 msgid "Save permission ..." -msgstr "Uložit oprávnění" +msgstr "Uložit přístupová práva…" -#: ../../common/snapshots.py:1442 +#: ../../common/snapshots.py:1470 +msgid "Save permission over ssh failed. Retry normal method" +msgstr "" +"Uložení přístupových práv přes ssh se nezdařilo. Zkuste to s normální metodou" + +#: ../../common/snapshots.py:1521 #, python-format msgid "Can't rename %(new_path)s to %(path)s" msgstr "Nelze přejmenovat %(new_path)s na %(path)s" -#: ../../common/snapshots.py:1562 -msgid "Remove old snapshots" -msgstr "Odstranit staré snímky" - -#: ../../common/snapshots.py:1586 ../../kde4/settingsdialog.py:501 -#: ../../gnome/settingsdialog.glade:1660 +#: ../../common/snapshots.py:1695 ../../common/snapshots.py:1728 +#: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "Chytré odstranění" -#: ../../common/snapshots.py:1591 +#: ../../common/snapshots.py:1704 +msgid "Remove old snapshots" +msgstr "Odstranit staré zachycené stavy" + +#: ../../common/snapshots.py:1733 msgid "Try to keep min free space" -msgstr "Snaž se zachovat minimální neobsazený prostor" +msgstr "Snažit se zachovat neobsazený prostor alespoň" -#: ../../common/snapshots.py:1621 +#: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" -msgstr "Snažte se udržet minimálně %d%% volných inodů" +msgstr "" +"Snažit se zachovat alespoň %d%% z počtu souborů a složek, které lze na " +"soubor. systému vytvořit (inode)" -#: ../../common/sshtools.py:106 +#: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" -msgstr "Nelze připojit %s" +msgstr "%s se nedaří připojit" -#: ../../common/sshtools.py:113 +#: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" -msgstr "Nelze odpojit sshfs %s" - -#: ../../common/sshtools.py:187 -#, python-format -msgid "" -"Failed to unlock SSH private key:\n" -"Error: %s" -msgstr "" -"Nepodařilo se odemknout SSH soukromý klíč:\n" -"Chyba: %s" +msgstr "Souborový systém sshfs %s se nedaří odpojit" -#: ../../common/sshtools.py:194 +#: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" -"Nelze odemknout ssh soukromý klíč. Chybné heslo nebo heslo není k dispozici " -"pro cron." +"Nelze odemknout soukromou část ssh klíče. Chybné heslo nebo heslo není k " +"dispozici pro plánovač cron." -#: ../../common/sshtools.py:199 +#: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" -"sshfs nebyl nalezen. Prosím, nainstalujte např. \"apt-get install sshfs\"" +"Podpora pro souborový systém sshfs nebyla nalezena. Nainstalujte např.: apt-" +"get install sshfs" -#: ../../common/sshtools.py:217 +#: ../../common/sshtools.py:278 #, python-format msgid "" "Password-less authentication for %(user)s@%(host)s failed. Look at 'man " "backintime' for further instructions." msgstr "" -"Bezheslová autentizace pro %(user)s@%(host)s selhala. Podívejte se na 'man " -"backintime' pro další instrukce." +"Ověření %(user)s@%(host)s bez hesla se nezdařilo. Další pokyny naleznete v " +"manuálové stránce aplikace (man backintime)." -#: ../../common/sshtools.py:229 +#: ../../common/sshtools.py:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" -"Cipher %(cipher)s selhal pro %(host)s:\n" +"Použití šifry %(cipher)s se na stroji %(host)s nezdařilo:\n" "%(err)s" -#: ../../common/sshtools.py:254 +#: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." -msgstr "%s nebyl nalezen v ssh_known_hosts." +msgstr "%s nebyl nalezen v souboru ssh_known_hosts." -#: ../../common/sshtools.py:274 +#: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" -"Vzdálená cesta existuje, ale není to adresář:\n" +"Vzdálené umístění existuje, ale není to složka:\n" " %s" -#: ../../common/sshtools.py:276 +#: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" -"Do vzdálené cesty nelze zapisovat:\n" +"Do vzdáleného umístění nelze zapisovat:\n" " %s" -#: ../../common/sshtools.py:278 +#: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" -"Vzdálená cesta není spustitelná:\n" +"Vzdálené umístění nemá nastaveno oprávnění ke spouštění (tj. nelze do něho " +"vstoupit):\n" " %s" -#: ../../common/sshtools.py:280 +#: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" -"Nelze vytvořit vzdálenou cestu:\n" +"Vzdálené umístění nelze vytvořit:\n" " %s" -#: ../../common/sshtools.py:302 +#: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." -msgstr "Ping %s selhal. Hostitel spadl a nebo je špatná adresa." +msgstr "" +"Zkouška nástrojem ping %s nedopadla úspěšně. Stroj je nedostupný a nebo je " +"chybná adresa." -#: ../../common/sshtools.py:325 ../../common/sshtools.py:383 +#: ../../common/sshtools.py:423 ../../common/sshtools.py:553 #, python-format msgid "" "Remote host %(host)s doesn't support '%(command)s':\n" "%(err)s\n" "Look at 'man backintime' for further instructions" msgstr "" -"Vzdálený hostitel %(host)s nepodporuje '%(command)s':\n" +"Vzdálený stroj %(host)s nepodporuje %(command)s:\n" "%(err)s\n" -"Podívejte se na 'man backintime' pro další instrukce" +"Další pokyny naleznete v manuálové stránce aplikace (man backintime)" -#: ../../common/sshtools.py:387 +#: ../../common/sshtools.py:556 #, python-format msgid "" "Check commands on host %(host)s returned unknown error:\n" "%(err)s\n" "Look at 'man backintime' for further instructions" msgstr "" -"Zkontrolujte příkazy u hostitele %(host)s vrátil neznámou chybu:\n" +"Kontrolní příkazy na stroji %(host)s vrátily neznámou chybu:\n" "%(err)s\n" -"Podívejte se na 'man backintime' pro další instrukce" +"Další pokyny naleznete v manuálové stránce aplikace (man backintime)" -#: ../../common/sshtools.py:400 +#: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" -msgstr "Vzdálený hostitel %s nepodporuje hardlinky" +msgstr "Na vzdáleném stroji %s nejsou podporovány pevné odkazy" -#: ../../gnome/app.py:185 ../../gnome/app.py:594 ../../gnome/app.py:608 -#: ../../kde4/app.py:299 ../../kde4/app.py:570 ../../kde4/app.py:587 -msgid "Done" -msgstr "Dokončeno" +#: ../../qt4/app.py:81 +msgid "Refresh snapshots list" +msgstr "Znovu načíst seznam zachycených stavů" -#: ../../gnome/app.py:189 ../../kde4/app.py:143 ../../kde4/app.py:159 -#: ../../gnome/mainwindow.glade:225 +#: ../../qt4/app.py:85 ../../qt4/app.py:890 +msgid "Snapshot Name" +msgstr "Nazvat zachycený stav" + +#: ../../qt4/app.py:88 +msgid "Remove Snapshot" +msgstr "Odstranit zachycený stav" + +#: ../../qt4/app.py:91 +msgid "View Snapshot Log" +msgstr "Zobrazit záznam událostí, týkajících se zachyceného stavu" + +#: ../../qt4/app.py:94 +msgid "View Last Log" +msgstr "Zobrazit záznam nedávných událostí" + +#: ../../qt4/app.py:99 ../../qt4/settingsdialog.py:51 +msgid "Settings" +msgstr "Nastavení" + +#: ../../qt4/app.py:104 +msgid "Shutdown" +msgstr "Vypnout" + +#: ../../qt4/app.py:105 +msgid "Shutdown system after snapshot has finished." +msgstr "Po dokončení pořízení zachyceného stavu vypnout stroj." + +#: ../../qt4/app.py:111 +msgid "Exit" +msgstr "Ukončit" + +#: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 msgid "Help" msgstr "Nápověda" -#: ../../gnome/app.py:191 ../../kde4/app.py:146 -#: ../../gnome/mainwindow.glade:223 +#: ../../qt4/app.py:122 +msgid "Config File Help" +msgstr "Nápověda k souboru s nastaveními" + +#: ../../qt4/app.py:125 msgid "Website" -msgstr "Webová stránka" +msgstr "Webové stránky projektu" + +#: ../../qt4/app.py:127 ../../qt4/app.py:982 +msgid "Changelog" +msgstr "Změny provedené v aplikaci" -#: ../../gnome/app.py:192 ../../kde4/app.py:148 +#: ../../qt4/app.py:129 msgid "FAQ" msgstr "Často kladené dotazy (FAQ)" -#: ../../gnome/app.py:193 ../../kde4/app.py:150 +#: ../../qt4/app.py:131 msgid "Ask a question" -msgstr "Položit otázku" +msgstr "Položit dotaz" -#: ../../gnome/app.py:194 ../../kde4/app.py:152 +#: ../../qt4/app.py:133 msgid "Report a bug" -msgstr "Nahlásit chybu" +msgstr "Nahlásit chybu / podnět pro vylepšení" -#: ../../gnome/app.py:196 ../../kde4/app.py:155 +#: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "O aplikaci" -#: ../../gnome/app.py:202 ../../gnome/app.py:887 -#: ../../gnome/restoredialog.py:84 ../../gnome/snapshotsdialog.py:83 -#: ../../gnome/snapshotsdialog.py:244 ../../kde4/app.py:206 -#: ../../kde4/app.py:216 ../../kde4/restoredialog.py:68 -#: ../../kde4/snapshotsdialog.py:111 ../../kde4/snapshotsdialog.py:117 -#: ../../gnome/mainwindow.glade:350 ../../gnome/mainwindow.glade:352 -#: ../../gnome/snapshotsdialog.glade:169 ../../gnome/snapshotsdialog.glade:171 +#: ../../qt4/app.py:163 +msgid "Up" +msgstr "O úroveň výš" + +#: ../../qt4/app.py:174 ../../qt4/settingsdialog.py:1776 +msgid "Show hidden files" +msgstr "Zobrazit skryté soubory" + +#: ../../qt4/app.py:184 ../../qt4/app.py:199 ../../qt4/app.py:233 +#: ../../qt4/restoredialog.py:62 ../../qt4/settingsdialog.py:1818 +#: ../../qt4/snapshotsdialog.py:134 ../../qt4/snapshotsdialog.py:139 msgid "Restore" msgstr "Obnovit" -#: ../../gnome/app.py:203 ../../gnome/app.py:888 ../../gnome/gnometools.py:67 -#: ../../gnome/snapshotsdialog.py:84 ../../gnome/snapshotsdialog.py:245 -#: ../../kde4/app.py:208 ../../kde4/restoredialog.py:42 -#: ../../kde4/snapshotsdialog.py:113 +#: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 +#: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." -msgstr "Obnovit na ..." +msgstr "Obnovit do…" -#: ../../gnome/app.py:205 ../../gnome/app.py:896 ../../gnome/app.py:1146 -#: ../../kde4/app.py:1041 -#, python-format -msgid "Restore '%s'" -msgstr "Obnovit '%s'" +#: ../../qt4/app.py:194 +msgid "Restore and delete new files" +msgstr "Obnovit a smazat přitom nové soubory" -#: ../../gnome/app.py:207 ../../gnome/app.py:897 ../../gnome/app.py:1147 -#: ../../kde4/app.py:1042 +#: ../../qt4/app.py:201 #, python-format -msgid "Restore '%s' to ..." -msgstr "Obnovit '%s' na ..." +msgid "" +"Restore selected file or folder.\n" +"If this button is grayed out this is most likely because \"%(now)s\" is " +"selected in left hand snapshots list." +msgstr "" +"Obnovit označený soubor či složku.\n" +"Pokud je toto tlačítko nedostupné (vyšedlé), je to nejspíš tím, že v seznamu " +"zachycených stavů (vlevo) je označena položka %(now)s." + +#: ../../qt4/app.py:206 ../../qt4/logviewdialog.py:67 +#: ../../qt4/qt4tools.py:160 ../../qt4/snapshotsdialog.py:96 +msgid "Snapshots" +msgstr "Zachycené stavy" + +#: ../../qt4/app.py:213 +msgid "Snapshot" +msgstr "Zachycený stav" -#: ../../gnome/app.py:226 ../../kde4/app.py:235 +#: ../../qt4/app.py:224 +msgid "View" +msgstr "Zobrazit" + +#: ../../qt4/app.py:277 msgid "Shortcuts" -msgstr "Oblíbené" +msgstr "Klávesové zkratky" -#: ../../gnome/app.py:249 -msgid "Name" -msgstr "Název" - -#: ../../gnome/app.py:260 -msgid "Size" -msgstr "Velikost" - -#: ../../gnome/app.py:267 -msgid "Date" -msgstr "Datum" - -#: ../../gnome/app.py:286 ../../gnome/app.py:883 -#: ../../gnome/snapshotsdialog.py:116 ../../kde4/app.py:171 -#: ../../kde4/app.py:221 ../../kde4/snapshotsdialog.py:91 -#: ../../gnome/mainwindow.glade:366 ../../gnome/mainwindow.glade:368 -#: ../../gnome/snapshotsdialog.glade:8 -msgid "Snapshots" -msgstr "Snímky" +#: ../../qt4/app.py:295 +msgid "" +"This folder doesn't exist\n" +"in the current selected snapshot!" +msgstr "" +"Tato složka v aktuálně označeném\n" +"zachyceném stavu neexistuje!" + +#: ../../qt4/app.py:359 +msgid "Add to Include" +msgstr "Přidat do zahrnutých" + +#: ../../qt4/app.py:360 +msgid "Add to Exclude" +msgstr "Přidat do vynechaných" + +#: ../../qt4/app.py:416 +#, python-format +msgid "" +"%(appName)s is not configured. Would you like to restore a previous " +"configuration?" +msgstr "" +"Aplikace %(appName)s není nastavena. Chcete obnovit její předchozí nastavení?" -#: ../../gnome/app.py:348 ../../kde4/app.py:362 +#: ../../qt4/app.py:440 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it and then press OK" msgstr "" -"Složka se snímky nebyla nalezena.\n" -"Pokud se nachází na výměnném médiu, připojte jej a stiskněte OK" +"Složka se zachycenými stavy nebyla nalezena.\n" +"Pokud se nachází na vyjímatelném médiu, připojte jej a stiskněte OK" -#: ../../gnome/app.py:611 ../../kde4/app.py:590 -msgid "Done, no backup needed" -msgstr "Dokončeno, záloha není potřeba" +#: ../../qt4/app.py:473 +msgid "" +"If you close this window Back In Time will not be able to shutdown your " +"system when the snapshot has finished.\n" +"Do you really want to close?" +msgstr "" +"Pokud toto okno zavřete, pak aplikace Back In Time nebude moci po dokončení " +"pořízení zachyceného stavu vypnout počítač.\n" +"Opravdu chcete okno zavřít?" -#: ../../gnome/app.py:619 ../../kde4/app.py:598 +#: ../../qt4/app.py:667 ../../qt4/app.py:703 msgid "Working:" msgstr "Zpracovává se:" -#: ../../gnome/app.py:623 ../../kde4/app.py:602 +#: ../../qt4/app.py:695 +msgid "Done, no backup needed" +msgstr "Dokončeno, záloha není potřebná" + +#: ../../qt4/app.py:707 msgid "Error:" msgstr "Chyba:" -#: ../../gnome/app.py:636 ../../kde4/app.py:649 +#: ../../qt4/app.py:726 ../../qt4/qt4systrayicon.py:153 +msgid "Sent:" +msgstr "Odesláno:" + +#: ../../qt4/app.py:727 ../../qt4/qt4systrayicon.py:154 +msgid "Speed:" +msgstr "Rychlost:" + +#: ../../qt4/app.py:728 ../../qt4/qt4systrayicon.py:155 +msgid "ETA:" +msgstr "Odhadovaný zbývající čas:" + +#: ../../qt4/app.py:777 msgid "Global" -msgstr "Globální" +msgstr "Celkové" -#: ../../gnome/app.py:637 ../../kde4/app.py:650 +#: ../../qt4/app.py:778 msgid "Root" msgstr "Kořen" -#: ../../gnome/app.py:638 ../../kde4/app.py:651 +#: ../../qt4/app.py:779 msgid "Home" msgstr "Domovská složka" -#: ../../gnome/app.py:662 -msgid "Bookmarks" -msgstr "Záložky" - -#: ../../gnome/app.py:675 ../../kde4/app.py:662 +#: ../../qt4/app.py:794 msgid "Backup folders" msgstr "Složky pro zálohu" -#: ../../gnome/app.py:701 ../../kde4/app.py:734 -msgid "Today" -msgstr "Dnes" - -#: ../../gnome/app.py:705 ../../kde4/app.py:738 -msgid "Yesterday" -msgstr "Včera" - -#: ../../gnome/app.py:709 ../../kde4/app.py:742 -msgid "This week" -msgstr "Tento týden" - -#: ../../gnome/app.py:713 ../../kde4/app.py:746 -msgid "Last week" -msgstr "Minulý týden" - -#: ../../gnome/app.py:764 ../../kde4/app.py:398 -msgid "" -"If you close this window Back In Time will not be able to shutdown your " -"system when the snapshot has finished.\n" -"Do you really want to close?" +#: ../../qt4/app.py:849 +msgid "This is NOT a snapshot but a live view of your local files" msgstr "" -"Pokud zavřete toto okno Back In Time, nebudete moci vypnout váš systém, když " -"byl snímek ukončen.\n" -"Opravdu chcete okno zavřít?" - -#: ../../gnome/app.py:881 ../../gnome/snapshotsdialog.py:238 -msgid "Open" -msgstr "Otevřít" +"Toto NENÍ zachycený stav, ale pohled přímo do stávajících místních souborů" -#: ../../gnome/app.py:1056 ../../kde4/app.py:90 ../../kde4/app.py:805 -#: ../../gnome/mainwindow.glade:73 ../../gnome/mainwindow.glade:75 -msgid "Snapshot Name" -msgstr "Název snímku" +#: ../../qt4/app.py:860 ../../qt4/app.py:1476 +#, python-format +msgid "Last check %s" +msgstr "Minulá kontrola %s" -#: ../../gnome/app.py:1075 +#: ../../qt4/app.py:928 #, python-format msgid "" "Are you sure you want to remove the snapshot:\n" -"%s" +"%s" msgstr "" -"Opravdu chcete odstranit snímek:\n" -"%s" - -#: ../../gnome/app.py:1123 ../../kde4/app.py:1010 -#, python-format -msgid "Snapshot: %s" -msgstr "Snímek: %s" +"Opravdu chcete odstranit zachycený stav:\n" +"%s" -#: ../../gnome/app.py:1124 ../../kde4/app.py:1011 +#: ../../qt4/app.py:1004 #, python-format -msgid "View the snapshot made at %s" -msgstr "Zobrazit snímek vytvořený %s" - -#: ../../gnome/app.py:1126 ../../kde4/app.py:1013 -msgid "View the current disk content" -msgstr "Zobrazit aktuální obsah disku" - -#: ../../gnome/logviewdialog.py:106 ../../gnome/settingsdialog.py:414 -#: ../../kde4/logviewdialog.py:83 ../../kde4/settingsdialog.py:590 -msgid "All" -msgstr "Vše" - -#: ../../gnome/logviewdialog.py:107 ../../gnome/settingsdialog.py:412 -#: ../../kde4/logviewdialog.py:84 ../../kde4/settingsdialog.py:588 -msgid "Errors" -msgstr "Chyby" - -#: ../../gnome/logviewdialog.py:112 ../../kde4/logviewdialog.py:89 -msgid "Changes" -msgstr "Změny" - -#: ../../gnome/logviewdialog.py:115 ../../kde4/logviewdialog.py:92 -msgid "Informations" -msgstr "Informace" - -#: ../../gnome/settingsdialog.py:235 ../../kde4/settingsdialog.py:387 -msgid "Include files and folders" -msgstr "Zahrnout soubory a složky" - -#: ../../gnome/settingsdialog.py:264 -msgid "Exclude patterns, files or folders" -msgstr "Vyloučit vzory, soubory nebo složky" - -#: ../../gnome/settingsdialog.py:411 ../../kde4/settingsdialog.py:587 -msgid "None" -msgstr "Žádné" - -#: ../../gnome/settingsdialog.py:413 ../../kde4/settingsdialog.py:589 -msgid "Changes & Errors" -msgstr "Změny & chyby" - -#: ../../gnome/settingsdialog.py:458 -msgid "Snapshots folder" -msgstr "Složka snímků" +msgid "" +"Backup local files before overwriting or\n" +"removing with trailing '%(suffix)s'." +msgstr "" +"Místní soubory, které by jinak byly přepsány, zálohovat připojením " +"%(suffix)s za název." -#: ../../gnome/settingsdialog.py:466 ../../kde4/settingsdialog.py:1314 -msgid "Are you sure you want to change snapshots folder ?" -msgstr "Opravdu změnit složku se snímky?" +#: ../../qt4/app.py:1010 +msgid "" +"Are you sure you want to remove all newer files in your original folder?" +msgstr "Opravdu chcete z původní složky odebrat veškeré novější soubory?" -#: ../../gnome/settingsdialog.py:901 ../../kde4/settingsdialog.py:914 +#: ../../qt4/app.py:1014 msgid "" -"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " -"*/3 for periodic backups every 3 hours" +"WARNING: deleting files in filesystem root could break your whole system!!!" msgstr "" -"Vlastní nastavení času může být jen čárkou oddělený seznam hodin (například " -"8,12,18,23) nebo */3 pro pravidelné zálohy každé 3 hodiny" +"VAROVÁNÍ: smazání souborů v kořeni souborového systému může vést k poškození " +"celého operačního systému!!!" -#: ../../gnome/settingsdialog.py:1141 ../../kde4/settingsdialog.py:653 -msgid "New profile" -msgstr "Nový profil" +#: ../../qt4/app.py:1016 +msgid "Files to be restored:" +msgstr "Soubory k obnovení:" -#: ../../gnome/settingsdialog.py:1155 ../../kde4/settingsdialog.py:669 -msgid "Rename profile" -msgstr "Přejmenovat profil" +#: ../../qt4/app.py:1031 +msgid "Do you really want to restore this files(s):" +msgstr "Opravdu chcete obnovit tyto soubory? :" -#: ../../gnome/settingsdialog.py:1167 ../../kde4/settingsdialog.py:683 +#: ../../qt4/app.py:1226 #, python-format -msgid "Are you sure you want to delete the profile \"%s\" ?" -msgstr "Opravdu chcete smazat profil \"%s\"?" +msgid "Snapshot: %s" +msgstr "Zachycený stav: %s" -#: ../../gnome/settingsdialog.py:1173 ../../kde4/settingsdialog.py:1292 -msgid "Include folder" -msgstr "Zahrnout složku" +#: ../../qt4/app.py:1227 +#, python-format +msgid "View the snapshot made at %s" +msgstr "Zobrazit zachycený stav vytvořený k %s" -#: ../../gnome/settingsdialog.py:1193 ../../kde4/settingsdialog.py:1278 -msgid "Include file" -msgstr "Zahrnout soubor" +#: ../../qt4/app.py:1229 +msgid "View the current disk content" +msgstr "Zobrazit stávající data" -#: ../../gnome/settingsdialog.py:1235 ../../kde4/settingsdialog.py:1241 -msgid "Exclude pattern" -msgstr "Vyloučit vzor" +#: ../../qt4/app.py:1268 +#, python-format +msgid "Restore '%s'" +msgstr "Obnovit %s" -#: ../../gnome/settingsdialog.py:1240 ../../kde4/settingsdialog.py:1251 -msgid "Exclude patterns can't contain ':' char !" -msgstr "Vyloučit vzory obsahující znak ':' !" +#: ../../qt4/app.py:1269 +#, python-format +msgid "Restore '%s' to ..." +msgstr "Obnovit %s na…" -#: ../../gnome/settingsdialog.py:1246 ../../kde4/settingsdialog.py:1257 -msgid "Exclude file" -msgstr "Vynechat soubor" +#: ../../qt4/app.py:1270 +#, python-format +msgid "Restore '%s' and delete new files" +msgstr "Obnovit %s a smazat nové soubory" -#: ../../gnome/settingsdialog.py:1257 ../../kde4/settingsdialog.py:1261 -msgid "Exclude folder" -msgstr "Vyloučit složku" +#: ../../qt4/app.py:1368 ../../qt4/app.py:1385 +msgid "Authors" +msgstr "Autoři" -#: ../../gnome/snapshotsdialog.py:240 -msgid "Jump to" -msgstr "Přejít na" +#: ../../qt4/app.py:1369 ../../qt4/app.py:1388 +msgid "Translations" +msgstr "Překlady" -#: ../../gnome/snapshotsdialog.py:248 ../../kde4/snapshotsdialog.py:164 -msgid "Diff" -msgstr "Rozdíl" +#: ../../qt4/app.py:1370 ../../qt4/app.py:1391 +msgid "License" +msgstr "Licence" -#: ../../gnome/snapshotsdialog.py:277 ../../kde4/snapshotsdialog.py:339 -msgid "You can't compare a snapshot to itself" -msgstr "Nemůžete porovnat své snímky" +#: ../../qt4/logviewdialog.py:49 +msgid "Last Log View" +msgstr "Zobrazení nedávných událostí" -#: ../../gnome/snapshotsdialog.py:284 ../../kde4/snapshotsdialog.py:346 -#, python-format -msgid "Command not found: %s" -msgstr "Příkaz nenalezen: %s" +#: ../../qt4/logviewdialog.py:51 +msgid "Snapshot Log View" +msgstr "Zobrazení událostí pořízení zachyceného stavu" -#: ../../gnome/snapshotsdialog.py:307 ../../kde4/snapshotsdialog.py:367 -#, python-format -msgid "" -"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" -msgstr "Opravdu chcete vymazat \"%(file)s\" ve snímku \"%(snapshot_id)s?\n" +#: ../../qt4/logviewdialog.py:59 ../../qt4/settingsdialog.py:59 +#: ../../qt4/settingsdialog.py:274 ../../qt4/settingsdialog.py:1899 +msgid "Profile:" +msgstr "Profil:" -#: ../../gnome/snapshotsdialog.py:310 ../../kde4/snapshotsdialog.py:370 -#, python-format -msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" -msgstr "Opravdu chcete vymazat \"%(file)s\" v %(count)d snímcích?\n" +#: ../../qt4/logviewdialog.py:81 +msgid "Filter:" +msgstr "Filtr:" -#: ../../gnome/snapshotsdialog.py:312 ../../kde4/snapshotsdialog.py:372 -msgid "WARNING: This can not be revoked!" -msgstr "UPOZORNĚNÍ: Tento nelze odvolat!" +#: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 +msgid "All" +msgstr "Vše" -#: ../../gnome/snapshotsdialog.py:317 ../../kde4/snapshotsdialog.py:377 -#, python-format -msgid "Exclude \"%s\" from future snapshots?" -msgstr "Vyloučit \"% s\" z budoucích snímků?" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 +#: ../../qt4/settingsdialog.py:657 +msgid "Errors" +msgstr "Chyby" -#: ../../kde4/app.py:86 ../../gnome/mainwindow.glade:58 -#: ../../gnome/mainwindow.glade:60 -msgid "Refresh snapshots list" -msgstr "Obnovit seznam snímků" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 +msgid "Changes" +msgstr "Změny" -#: ../../kde4/app.py:94 ../../gnome/mainwindow.glade:88 -#: ../../gnome/mainwindow.glade:90 -msgid "Remove Snapshot" -msgstr "Odstranit snímek" +#: ../../qt4/logviewdialog.py:92 +msgid "Informations" +msgstr "Informace" -#: ../../kde4/app.py:98 ../../gnome/mainwindow.glade:105 -msgid "View Snapshot Log" -msgstr "Zobrazit protokol snímku" +#: ../../qt4/logviewdialog.py:101 +msgid "[E] Error, [I] Information, [C] Change" +msgstr "[E] Chyba, [I] Informace, [C] Změna" -#: ../../kde4/app.py:102 ../../gnome/mainwindow.glade:121 -msgid "View Last Log" -msgstr "Zobrazit poslední protokol" +#: ../../qt4/logviewdialog.py:104 +msgid "decode paths" +msgstr "dekódovat popisy umístění" -#: ../../kde4/app.py:108 ../../kde4/settingsdialog.py:69 -#: ../../gnome/mainwindow.glade:144 ../../gnome/mainwindow.glade:146 -#: ../../gnome/settingsdialog.glade:7 -msgid "Settings" -msgstr "Nastavení" +#: ../../qt4/messagebox.py:56 +msgid "Error" +msgstr "Chyba" -#: ../../kde4/app.py:124 ../../gnome/mainwindow.glade:169 -msgid "Shutdown system after snapshot has finished." -msgstr "Vypnout systém po dokončení snímku." +#: ../../qt4/messagebox.py:62 ../../qt4/messagebox.py:68 +msgid "Question" +msgstr "Otázka" -#: ../../kde4/app.py:131 ../../gnome/mainwindow.glade:184 -#: ../../gnome/mainwindow.glade:186 -msgid "Exit" -msgstr "Ukončit" +#: ../../qt4/qt4systrayicon.py:69 +msgid "Start BackInTime" +msgstr "Spustit BackInTime" -#: ../../kde4/app.py:186 ../../gnome/mainwindow.glade:289 -msgid "Up" -msgstr "Nahoru" +#: ../../qt4/qt4systrayicon.py:124 +msgid "Working..." +msgstr "Zpracování…" -#: ../../kde4/app.py:199 ../../gnome/mainwindow.glade:325 -msgid "Show hidden files" -msgstr "Ukázat skryté soubory" +#: ../../qt4/qt4tools.py:178 +msgid "Today" +msgstr "Dnes" -#: ../../kde4/app.py:244 -msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" -msgstr "" -"Tato složka neexistuje\n" -"v současném snímku !" +#: ../../qt4/qt4tools.py:183 +msgid "Yesterday" +msgstr "Včera" -#: ../../kde4/app.py:839 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" -msgstr "" -"Opravdu chcete odstranit snímek:\n" -"%s" +#: ../../qt4/qt4tools.py:188 +msgid "This week" +msgstr "Tento týden" -#: ../../kde4/app.py:1140 ../../kde4/kde4systrayicon.py:117 -msgid "Working..." -msgstr "Zpracovává se..." +#: ../../qt4/qt4tools.py:193 +msgid "Last week" +msgstr "Minulý týden" -#: ../../kde4/logviewdialog.py:55 -msgid "Error Log View" -msgstr "Zobrazit chybový záznam" - -#: ../../kde4/logviewdialog.py:65 ../../kde4/settingsdialog.py:79 -#: ../../kde4/settingsdialog.py:293 ../../gnome/logviewdialog.glade:73 -#: ../../gnome/settingsdialog.glade:72 -msgid "Profile:" -msgstr "Profil:" +#: ../../qt4/restoredialog.py:75 +msgid "Show full Log" +msgstr "Zobrazit úplný záznam událostí" -#: ../../kde4/logviewdialog.py:77 ../../gnome/logviewdialog.glade:110 -msgid "Filter:" -msgstr "Filtr:" +#: ../../qt4/settingsdialog.py:68 +msgid "Edit" +msgstr "Upravit" -#: ../../kde4/logviewdialog.py:100 ../../gnome/logviewdialog.glade:169 -msgid "[E] Error, [I] Information, [C] Change" -msgstr "[E] Chyby, [I] Informace, [C] Změny" +#: ../../qt4/settingsdialog.py:73 +msgid "Modify for Full System Backup" +msgstr "" -#: ../../kde4/logviewdialog.py:103 ../../gnome/logviewdialog.glade:195 -msgid "decode paths" -msgstr "dekódovat cesty" +#: ../../qt4/settingsdialog.py:77 ../../qt4/settingsdialog.py:451 +msgid "Add" +msgstr "Přidat" -#: ../../kde4/settingsdialog.py:88 -msgid "Edit" -msgstr "Upravit" +#: ../../qt4/settingsdialog.py:81 ../../qt4/settingsdialog.py:408 +#: ../../qt4/settingsdialog.py:467 +msgid "Remove" +msgstr "Odebrat" -#: ../../kde4/settingsdialog.py:106 ../../gnome/settingsdialog.glade:1207 +#: ../../qt4/settingsdialog.py:96 msgid "General" msgstr "Obecné" -#: ../../kde4/settingsdialog.py:114 ../../gnome/settingsdialog.glade:199 +#: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "Režim:" -#: ../../kde4/settingsdialog.py:127 ../../kde4/settingsdialog.py:1311 +#: ../../qt4/settingsdialog.py:119 +#, python-format +msgid "" +"Warning: %(app)s uses EncFS for encryption. A recent security audit " +"revealed several possible attack vectors for this. Please take a look at 'A " +"NOTE ON SECURITY' in 'man backintime'." +msgstr "" +"Varování: %(app)s šifruje pomocí EncFS. Nedávná bezpečnostní prověrka " +"odhalila několik závažných nedostatků. Přečtěte si odstavec POZNÁMKA K " +"ZABEZPEČENÍ v manuálové stránce backintime." + +#: ../../qt4/settingsdialog.py:129 ../../qt4/settingsdialog.py:1568 msgid "Where to save snapshots" -msgstr "Umístění k uložení snímků" +msgstr "Kam ukládat zachycené stavy" -#: ../../kde4/settingsdialog.py:146 +#: ../../qt4/settingsdialog.py:145 +msgid "Folder" +msgstr "Složka" + +#: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" -msgstr "SSH nastavení" +msgstr "Nastavení SSH" -#: ../../kde4/settingsdialog.py:158 ../../kde4/settingsdialog.py:283 -#: ../../gnome/settingsdialog.glade:323 ../../gnome/settingsdialog.glade:583 -#: ../../gnome/settingsdialog.glade:874 +#: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" -msgstr "Hostitel:" +msgstr "Stroj:" -#: ../../kde4/settingsdialog.py:163 ../../gnome/settingsdialog.glade:350 -#: ../../gnome/settingsdialog.glade:610 +#: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "Port:" -#: ../../kde4/settingsdialog.py:168 ../../kde4/settingsdialog.py:288 -#: ../../gnome/settingsdialog.glade:377 ../../gnome/settingsdialog.glade:637 -#: ../../gnome/settingsdialog.glade:902 +#: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "Uživatel:" -#: ../../kde4/settingsdialog.py:173 ../../gnome/settingsdialog.glade:416 +#: ../../qt4/settingsdialog.py:180 msgid "Path:" -msgstr "Cesta:" +msgstr "Umístění:" -#: ../../kde4/settingsdialog.py:178 ../../gnome/settingsdialog.glade:459 +#: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "Šifra:" -#: ../../kde4/settingsdialog.py:184 +#: ../../qt4/settingsdialog.py:192 msgid "Private Key:" -msgstr "Soukromý klíč:" +msgstr "Soukromá část klíče:" + +#: ../../qt4/settingsdialog.py:201 +msgid "Key File" +msgstr "Soubor s klíčem" -#: ../../kde4/settingsdialog.py:228 ../../kde4/settingsdialog.py:237 -#: ../../kde4/settingsdialog.py:243 ../../gnome/settingsdialog.glade:703 -#: ../../gnome/settingsdialog.glade:743 +#: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 +#: ../../qt4/settingsdialog.py:229 msgid "Password" -msgstr "Heslo" +msgstr "Heslo pro" -#: ../../kde4/settingsdialog.py:249 ../../gnome/settingsdialog.glade:775 +#: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "Uložit heslo do klíčenky" -#: ../../kde4/settingsdialog.py:252 ../../gnome/settingsdialog.glade:792 +#: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" -msgstr "Cache heslo pro Cron (bezpečnost: root můžete přečíst heslo)" +msgstr "" +"Uložit heslo pro potřeby plánovače Cron (slabina v zabezpečení: správce " +"systému si heslo může přečíst)" -#: ../../kde4/settingsdialog.py:264 ../../gnome/settingsdialog.glade:968 +#: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "Pokročilé" -#: ../../kde4/settingsdialog.py:276 ../../gnome/settingsdialog.glade:848 -msgid "Auto Host / User / Profile Id" -msgstr "Auto Hostitel / Uživatel / Profilové Id" +#: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 +msgid "Full snapshot path: " +msgstr "Úplný popis umístění zachyceného stavu: " -#: ../../kde4/settingsdialog.py:301 +#: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "Plán" -#: ../../kde4/settingsdialog.py:311 ../../gnome/settingsdialog.glade:1092 +#: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "Den:" -#: ../../kde4/settingsdialog.py:322 ../../gnome/settingsdialog.glade:1079 +#: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "Pracovní den" -#: ../../kde4/settingsdialog.py:333 ../../gnome/settingsdialog.glade:1066 +#: ../../qt4/settingsdialog.py:319 msgid "Hour:" -msgstr "Hodin:" +msgstr "Hodina:" -#: ../../kde4/settingsdialog.py:344 ../../gnome/settingsdialog.glade:1053 +#: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "Hodiny:" -#: ../../kde4/settingsdialog.py:353 ../../gnome/settingsdialog.glade:1014 +#: ../../qt4/settingsdialog.py:339 msgid "" -"Run Back In Time periodically with anacron. This is useful if the computer " -"is not running regular." +"Run Back In Time repeatedly. This is useful if the computer is not running " +"regular." msgstr "" -"Spustit Back In Time pravidelně s anacronem. To je užitečné v případě, že " -"počítač není spouštěn pravidelně." +"Spouštět aplikaci Back In Time opakovaně. Užitečné v případě, že počítač " +"není zapínán pravidelně." -#: ../../kde4/settingsdialog.py:357 ../../gnome/settingsdialog.glade:1040 -msgid "Frequency in days:" -msgstr "Frekvence ve dnech" +#: ../../qt4/settingsdialog.py:344 +msgid "Every:" +msgstr "Každý:" -#: ../../kde4/settingsdialog.py:368 ../../gnome/settingsdialog.glade:1026 +#: ../../qt4/settingsdialog.py:362 msgid "" "Run Back In Time as soon as the drive is connected (only once every X " "days).\n" "You will be prompted for your sudo password." msgstr "" -"Spusťte Back In Time jakmile se disk připojí ( jen jednou každých X dnů).\n" -"Budete vyzváni k zadání hesla sudo." +"Spouštět aplikaci Back In Time jakmile je disk připojen (jen jednou za " +"každých X dnů).\n" +"Budete vyzváni k zadání hesla k účtu s právy správy systému (pro sudo)." -#: ../../kde4/settingsdialog.py:379 ../../gnome/settingsdialog.glade:1310 +#: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Zahrnout" -#: ../../kde4/settingsdialog.py:403 ../../kde4/settingsdialog.py:445 -#: ../../gnome/settingsdialog.glade:1411 +#: ../../qt4/settingsdialog.py:381 +msgid "Include files and folders" +msgstr "Zahrnout soubory a složky" + +#: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "Přidat soubor" -#: ../../kde4/settingsdialog.py:408 ../../kde4/settingsdialog.py:450 -#: ../../gnome/settingsdialog.glade:1427 +#: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Přidat složku" -#: ../../kde4/settingsdialog.py:418 ../../gnome/settingsdialog.glade:1474 +#: ../../qt4/settingsdialog.py:414 msgid "Exclude" -msgstr "Vyloučit" +msgstr "Vynechat" -#: ../../kde4/settingsdialog.py:421 ../../gnome/settingsdialog.glade:1328 +#: ../../qt4/settingsdialog.py:417 msgid "" "Warning: Wildcards ('foo*', '[fF]oo', 'fo?') will be ignored with " "mode 'SSH encrypted'.\n" "Only separate asterisk are allowed ('foo/*', 'foo/**/bar')" msgstr "" -"Warning: Divoké karty ('foo*', '[fF]oo', 'fo?') budou ignorovány v " -"režimu 'SSH zašifrováno'.\n" -"Pouze oddělené hvězdičkou jsou povoleny ('foo/*', 'foo/**/bar')" +"Varování: Zástupná vyjádření („foo*“, „[fF]oo“ a „fo?“) budou v " +"režimu „SSH zašifrováno“ přehlížena.\n" +"V tomto případě je povoleno pouze oddělování hvězdičkami („foo/*“ a " +"„foo/**/bar“)" + +#: ../../qt4/settingsdialog.py:425 +msgid "Exclude patterns, files or folders" +msgstr "Vynechat zástupně vyjádřené, soubory či složky" -#: ../../kde4/settingsdialog.py:430 +#: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" -msgstr "Důrazně doporučené:" +msgstr "Důrazně doporučeno:" + +#: ../../qt4/settingsdialog.py:463 +msgid "Add default" +msgstr "Přidat výchozí" + +#: ../../qt4/settingsdialog.py:474 +msgid "Exclude files bigger than: " +msgstr "Vynechat soubory větší než: " + +#: ../../qt4/settingsdialog.py:475 +#, python-format +msgid "" +"Exclude files bigger than value in %(prefix)s.\n" +"With 'Full rsync mode' disabled this will only affect new files\n" +"because for rsync this is a transfer option, not an exclude option.\n" +"So big files that has been backed up before will remain in snapshots\n" +"even if they had changed." +msgstr "" +"Vynechat soubory, které jsou větší, než zadaná hodnota v %(prefix)s.\n" +"Pokud je Plný rsync režim zakázán, bude se toto týkat pouze nových\n" +"souborů, protože pro nástroj rsync je toto volba přenosu, nikoli vynechání.\n" +"Takže, velké soubory, které byly zazálohovány dříve, v zachycených stavech\n" +"již zůstanou, i když byly změněny." -#: ../../kde4/settingsdialog.py:460 ../../gnome/settingsdialog.glade:1905 +#: ../../qt4/settingsdialog.py:493 msgid "Auto-remove" -msgstr "Automaticky odstranit" +msgstr "Automatické odstranění" -#: ../../kde4/settingsdialog.py:464 ../../gnome/settingsdialog.glade:1608 +#: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "Starší než:" -#: ../../kde4/settingsdialog.py:478 ../../gnome/settingsdialog.glade:1624 +#: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" -msgstr "Pokud je volné místo menší než:" +msgstr "Pokud zbývá volného místa méně než:" -#: ../../kde4/settingsdialog.py:490 ../../gnome/settingsdialog.glade:1642 +#: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" -msgstr "Pokud jsou volné inody menší než:" +msgstr "" +"Pokud z počtu souborů a složek, které lze na soubor. systému vytvořit " +"(inode), zbývá méně než:" + +#: ../../qt4/settingsdialog.py:551 +msgid "Run in background on remote Host." +msgstr "Na protistraně spusit na pozadí." -#: ../../kde4/settingsdialog.py:514 ../../gnome/settingsdialog.glade:1697 +#: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" -msgstr "Ponechat všechny snímky za posledních" +msgstr "Ponechat všechny zachycené stavy za minulých" -#: ../../kde4/settingsdialog.py:517 ../../kde4/settingsdialog.py:522 -#: ../../gnome/settingsdialog.glade:1705 ../../gnome/settingsdialog.glade:1729 +#: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "dnů" -#: ../../kde4/settingsdialog.py:519 ../../gnome/settingsdialog.glade:1717 +#: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" -msgstr "Ponechat jeden snímek za den za posledních" +msgstr "Ponechat jeden zachycený stav z dne za minulých" -#: ../../kde4/settingsdialog.py:524 ../../gnome/settingsdialog.glade:1743 +#: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" -msgstr "Ponechat jeden snímek za týden za posledních" +msgstr "Ponechat jeden zachycený stav z týdne za minulých" -#: ../../kde4/settingsdialog.py:527 +#: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "týdnů" -#: ../../kde4/settingsdialog.py:529 ../../gnome/settingsdialog.glade:1769 +#: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" -msgstr "Ponechat jeden snímek za měsíc za posledních" +msgstr "Ponechat jeden zachycený stav z měsíce za minulých" -#: ../../kde4/settingsdialog.py:532 ../../gnome/settingsdialog.glade:1781 +#: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "měsíců" -#: ../../kde4/settingsdialog.py:534 ../../gnome/settingsdialog.glade:1795 +#: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" -msgstr "Ponechat jeden snímek za rok za všechny léta" +msgstr "Ponechat jeden zachycený stav z roku za všechna léta" -#: ../../kde4/settingsdialog.py:537 ../../gnome/settingsdialog.glade:1496 +#: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" -msgstr "Neodstraňovat pojmenované snímky" +msgstr "Neodstraňovat ty zachycené stavy, které uživatel nějak nazval" -#: ../../kde4/settingsdialog.py:546 ../../gnome/settingsdialog.glade:2104 +#: ../../qt4/settingsdialog.py:597 msgid "Options" -msgstr "Možnosti" +msgstr "Předvolby" -#: ../../kde4/settingsdialog.py:549 ../../gnome/settingsdialog.glade:1920 +#: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" -msgstr "Povolit oznamování" +msgstr "Zapnout oznamování" -#: ../../kde4/settingsdialog.py:552 ../../gnome/settingsdialog.glade:1937 +#: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" -msgstr "Vypnout snímky při napájení baterií" +msgstr "Vypnout pořizování zachycených stavů při provozu na akumulátor" -#: ../../kde4/settingsdialog.py:555 +#: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" -msgstr "Stav napájení není poskytován systémem" +msgstr "Údaje o stavu napájení nejsou dispozici" -#: ../../kde4/settingsdialog.py:558 ../../gnome/settingsdialog.glade:1955 -msgid "Backup files on restore" -msgstr "Záložní soubory k obnovení" +#: ../../qt4/settingsdialog.py:611 +msgid "Run only one snapshot at a time" +msgstr "Pořizovat pouze jeden zachycený stav naráz" + +#: ../../qt4/settingsdialog.py:612 +msgid "" +"Other snapshots will be blocked until the current snapshot is done.\n" +"This is a global option. So it will effect all profiles for this user.\n" +"But you need to activate this for all other users, too." +msgstr "" +"Pořizování ostatních zachycených stavů bude blokováno do dokončení toho " +"stávajícího.\n" +"Toto je celková předvolba. Takže se týká všech profilů tohoto uživatele.\n" +"Ale zapíná se pro každého uživatele zvlášť." -#: ../../kde4/settingsdialog.py:561 ../../gnome/settingsdialog.glade:1972 +#: ../../qt4/settingsdialog.py:617 +msgid "Backup replaced files on restore" +msgstr "Zazálohovat soubory, které by byly při procesu obnovování nahrazeny" + +#: ../../qt4/settingsdialog.py:618 +#, python-format +msgid "" +"Newer versions of files will be renamed with trailing '%(suffix)s' before " +"restoring.\n" +"If you don't need them anymore you can remove them with '%(cmd)s'" +msgstr "" +"Novější verze souborů budou před zahájením obnovy přejmenovány přidáním " +"předpony %(suffix)s.\n" +"Až je už nebudete potřebovat, můžete je odstranit pomocí příkazu %(cmd)s" + +#: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" -msgstr "Pokračovat při chybě (zachovat nekompletní snímky)" +msgstr "" +"Pokračovat i v případě výskytu chyb (zachovat neúplné zachycené stavy)" -#: ../../kde4/settingsdialog.py:564 ../../gnome/settingsdialog.glade:1989 +#: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" -msgstr "Použít kontrolní součet ke zjištění změn" +msgstr "Změny zjišťovat pomocí kontrolního součtu (přesnější)" -#: ../../kde4/settingsdialog.py:567 ../../gnome/settingsdialog.glade:2006 +#: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "Úplný režim rsync. Může být rychlejší, ale:" -#: ../../kde4/settingsdialog.py:568 ../../gnome/settingsdialog.glade:2032 +#: ../../qt4/settingsdialog.py:634 msgid "" -"- snapshots are no read-only\n" -"- destination file-system must support all linux attributes (dates, rights, " +"- snapshots are not read-only\n" +"- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" -"- snímky nejsou pouze pro čtení\n" -"- cílový souborový systém musí podporovat všechny vlastnosti linux (data, " -"oprávnění, uživatele, skupiny ...)" +"- zachycené stavy nejsou pouze pro čtení\n" +"- je třeba, aby cílový souborový systém podporoval všechny linuxové atributy " +"(datumy, přístupová práva, uživatele, skupinu…)" + +#: ../../qt4/settingsdialog.py:641 +msgid "Take a new snapshot regardless of there were changes or not." +msgstr "Pořídit zachycený stav i v případě, že nedošlo k žádným změnám." -#: ../../kde4/settingsdialog.py:575 ../../gnome/settingsdialog.glade:2045 +#: ../../qt4/settingsdialog.py:644 msgid "Check for changes (don't take a new snapshot if nothing changed)" -msgstr "Kontrolovat změny (nevytvářet nové snímky, pokud se nic nezměnilo)" +msgstr "" +"Zjišťovat změny (nevytvářet nový zachycený stav, pokud se nic nezměnilo)" -#: ../../kde4/settingsdialog.py:582 +#: ../../qt4/settingsdialog.py:651 msgid "Log Level:" -msgstr "Úroveň protokolování:" +msgstr "Podrobnost zaznamenávání událostí (log):" -#: ../../kde4/settingsdialog.py:597 ../../gnome/settingsdialog.glade:2366 -msgid "Expert Options" -msgstr "Pokročilé možnosti" +#: ../../qt4/settingsdialog.py:656 +msgid "None" +msgstr "Žádné" -#: ../../kde4/settingsdialog.py:600 +#: ../../qt4/settingsdialog.py:658 +msgid "Changes & Errors" +msgstr "Změny a chyby" + +#: ../../qt4/settingsdialog.py:674 msgid "Change these options only if you really know what you are doing !" -msgstr "Tyto možnosti změňte v případě, že opravdu víte co děláte!" +msgstr "Tyto předvolby měňte pouze v případě, že opravdu víte co děláte!" + +#: ../../qt4/settingsdialog.py:678 +msgid "Run 'nice':" +msgstr "Spustit s nižší prioritou (nice):" + +#: ../../qt4/settingsdialog.py:684 ../../qt4/settingsdialog.py:696 +msgid "as cron job" +msgstr "jako naplánovaná úloha (cron)" -#: ../../kde4/settingsdialog.py:608 ../../gnome/settingsdialog.glade:2133 -msgid "Run 'nice' as cron job (default: enabled)" -msgstr "Spustit 'nice' jako úlohu cron-u (standardně povoleno)" +#: ../../qt4/settingsdialog.py:687 ../../qt4/settingsdialog.py:702 +#: ../../qt4/settingsdialog.py:716 +msgid "on remote host" +msgstr "na vzdáleném stroji" -#: ../../kde4/settingsdialog.py:611 ../../gnome/settingsdialog.glade:2150 -msgid "Run 'ionice' as cron job (default: enabled)" -msgstr "Spustit 'ionice' jako úlohu cron-u (standardně povoleno)" +#: ../../qt4/settingsdialog.py:690 +msgid "Run 'ionice':" +msgstr "Spustit s nižší prioritou na vst./výst. (ionice):" -#: ../../kde4/settingsdialog.py:614 ../../gnome/settingsdialog.glade:2167 -msgid "Run 'ionice' when taking a manual snapshot (default: disabled)" -msgstr "Spustit 'ionice' při ručním vytváření snímku (výchozí: zakázáno)" +#: ../../qt4/settingsdialog.py:699 +msgid "when taking a manual snapshot" +msgstr "při ručně spuštěném pořízení zachyceného stavu" -#: ../../kde4/settingsdialog.py:617 ../../gnome/settingsdialog.glade:2184 -msgid "Run 'nice' on remote host (default: disabled)" -msgstr "Spustit 'nice' u vzdáleného hostitele (výchozí: vypnuto)" +#: ../../qt4/settingsdialog.py:706 +msgid "Run 'rsync' with 'nocache':" +msgstr "Spustit nástroj rsync s parametrem nocache:" -#: ../../kde4/settingsdialog.py:620 ../../gnome/settingsdialog.glade:2201 -msgid "Run 'ionice' on remote host (default: disabled)" -msgstr "Spustit 'ionice' u vzdáleného hostitele (výchozí: vypnuto)" +#: ../../qt4/settingsdialog.py:712 +msgid "on local machine" +msgstr "na místním stroji" -#: ../../kde4/settingsdialog.py:626 ../../gnome/settingsdialog.glade:2224 +#: ../../qt4/settingsdialog.py:719 +msgid "Redirect stdout to /dev/null in cronjobs." +msgstr "" +"U naplánovaných úloh (cron) zahazovat výstup (stdout) (přesměrováním do " +"/dev/null)." + +#: ../../qt4/settingsdialog.py:725 +msgid "Redirect stderr to /dev/null in cronjobs." +msgstr "" +"U naplánovaných úloh (cron) zahazovat chybový výstup (stderr) (přesměrováním " +"do /dev/null)." + +#: ../../qt4/settingsdialog.py:734 msgid "Limit rsync bandwidth usage: " -msgstr "Omezit přenosy dat rsyncu: " +msgstr "Omezit rychlost přenosu dat nástrojem rsync na: " -#: ../../kde4/settingsdialog.py:629 ../../gnome/settingsdialog.glade:2259 +#: ../../qt4/settingsdialog.py:737 msgid " KB/sec" -msgstr " KB/sec" +msgstr " KB/s" -#: ../../kde4/settingsdialog.py:634 ../../gnome/settingsdialog.glade:2280 +#: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" -msgstr "Zachovat ACL" +msgstr "Zachovat ACL seznamy" -#: ../../kde4/settingsdialog.py:637 ../../gnome/settingsdialog.glade:2297 +#: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "Zachovat rozšířené atributy (xattr)" -#: ../../kde4/settingsdialog.py:640 ../../gnome/settingsdialog.glade:2314 +#: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute links)" -msgstr "Kopírovat nejisté odkazy (pracuje pouze s absolutními odkazy)" +msgstr "Kopírovat nejisté odkazy (funguje pouze s absolutními odkazy)" -#: ../../kde4/settingsdialog.py:643 ../../gnome/settingsdialog.glade:2331 -msgid "Copy links (dereference symbolic links)" -msgstr "Kopírovat odkazy (znefunkční symbolické odkazy)" +#: ../../qt4/settingsdialog.py:834 +msgid "Paste additional options to rsync" +msgstr "Zadejte další parametry pro nástroj rsync" -#: ../../kde4/snapshotsdialog.py:46 ../../kde4/snapshotsdialog.py:173 -#: ../../gnome/snapshotsdialog.glade:385 -msgid "Diff Options" -msgstr "Možnosti Diff" +#: ../../qt4/settingsdialog.py:837 +msgid "" +"Options must be quoted e.g. --exclude-from=\"/path/to/my exclude file\"." +msgstr "" +"Je třeba, aby předvolby byly obklopeny uvozovkami, např. --exclude-" +"from=\"/umisteni/vynechany_soubor\"." -#: ../../kde4/snapshotsdialog.py:56 ../../gnome/snapshotsdialog.glade:314 -msgid "Command:" -msgstr "Příkaz:" +#: ../../qt4/settingsdialog.py:847 +msgid "Add prefix to SSH commands" +msgstr "Přidat předponu k SSH příkazům" -#: ../../kde4/snapshotsdialog.py:60 ../../gnome/snapshotsdialog.glade:322 -msgid "Parameters:" -msgstr "Parametry:" +#: ../../qt4/settingsdialog.py:850 +#, python-format +msgid "" +"Prefix to run before every command on remote host.\n" +"Variables need to be escaped with \\$FOO.\n" +"This doesn't touch rsync. So to add a prefix\n" +"for rsync use \"%(cb_rsync_options)s\" with\n" +"%(rsync_options_value)s\n" +"\n" +"%(default)s: %(def_value)s" +msgstr "" +"Co spustit před provedením každého z příkazů na protistraně.\n" +"Proměnné je třeba předeslat \\$PROMENÁ.\n" +"Toto se netýká rsync. Proto pro přidání pro\n" +"rsync použijte \"%(cb_rsync_options)s\" s\n" +"%(rsync_options_value)s\n" +"\n" +"%(default)s: %(def_value)s" -#: ../../kde4/snapshotsdialog.py:64 ../../gnome/snapshotsdialog.glade:334 -msgid "Use %1 and %2 for path parameters" -msgstr "Použijte %1 a %2 pro parametry cesty" +#: ../../qt4/settingsdialog.py:858 ../../qt4/settingsdialog.py:1691 +msgid "default" +msgstr "výchozí" -#: ../../kde4/snapshotsdialog.py:123 ../../gnome/snapshotsdialog.glade:184 -#: ../../gnome/snapshotsdialog.glade:186 -msgid "Delete" -msgstr "Vymazat" +#: ../../qt4/settingsdialog.py:875 +msgid "Restore Config" +msgstr "Obnovit nastavení" -#: ../../kde4/snapshotsdialog.py:128 ../../gnome/snapshotsdialog.glade:199 -#: ../../gnome/snapshotsdialog.glade:201 -msgid "Select All" -msgstr "Vybrat vše" +#: ../../qt4/settingsdialog.py:891 +msgid "" +"Full system backup can only create a snapshot to be restored to the same " +"physical disk(s) with the same disk partitioning as from the source; " +"restoring to new physical disks or the same disks with different " +"partitioning will yield a potentially broken and unusable system.\n" +"\n" +"Full system backup will override some settings that may have been " +"customized. Continue?" +msgstr "" -#: ../../kde4/snapshotsdialog.py:132 ../../gnome/snapshotsdialog.glade:88 -msgid "List only different snapshots" -msgstr "Seznam pouze rozdílných snímků" +#: ../../qt4/settingsdialog.py:922 +msgid "New profile" +msgstr "Nový profil" -#: ../../kde4/snapshotsdialog.py:139 ../../gnome/snapshotsdialog.glade:110 -msgid "List only equal snapshots to: " -msgstr "Seznam pouze stejných snímků na: " +#: ../../qt4/settingsdialog.py:938 +msgid "Rename profile" +msgstr "Přejmenovat profil" -#: ../../kde4/snapshotsdialog.py:149 ../../gnome/snapshotsdialog.glade:146 -msgid "Deep check (more accurate, but slow)" -msgstr "Hloubková kontrola (přesnější, ale pomalejší)" +#: ../../qt4/settingsdialog.py:952 +#, python-format +msgid "Are you sure you want to delete the profile \"%s\" ?" +msgstr "Opravdu chcete smazat profil %s?" -#: ../../kde4/snapshotsdialog.py:174 -msgid "Go To" -msgstr "Přejít na" +#: ../../qt4/settingsdialog.py:1191 +msgid "" +"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " +"*/3 for periodic backups every 3 hours" +msgstr "" +"Vlastní nastavení časů může být jen čárkou oddělovaný seznam hodin " +"(například 8,12,18,23) nebo např. */3 pro pravidelné zálohy každé 3 hodiny" -#: ../../gnome/logviewdialog.glade:9 -msgid "Log View" -msgstr "Zobrazit protokol" - -#: ../../gnome/logviewdialog.glade:179 -msgid "scroll down automatic" -msgstr "posunout dolů automaticky" - -#: ../../gnome/mainwindow.glade:7 -msgid "Back In Time" -msgstr "Back In Time" - -#: ../../gnome/mainwindow.glade:45 -msgid "Backup Now" -msgstr "Zálohovat nyní" +#: ../../qt4/settingsdialog.py:1489 +msgid "Exclude pattern" +msgstr "Zástupné vyjádření vynechaného" -#: ../../gnome/mainwindow.glade:171 -msgid "Shutdown" -msgstr "Vypnout" +#: ../../qt4/settingsdialog.py:1502 +msgid "Exclude file" +msgstr "Vynechat soubor" -#: ../../gnome/mainwindow.glade:287 -msgid "Parent folder" -msgstr "Nadřazená složka" +#: ../../qt4/settingsdialog.py:1506 +msgid "Exclude folder" +msgstr "Vynechat složku" -#: ../../gnome/mainwindow.glade:327 -msgid "Hidden files" -msgstr "Skryté soubory" +#: ../../qt4/settingsdialog.py:1525 +msgid "Include file" +msgstr "Zahrnout soubor" -#: ../../gnome/mainwindow.glade:451 +#: ../../qt4/settingsdialog.py:1533 ../../qt4/settingsdialog.py:1553 +#, python-format msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +"\"%s\" is a symlink. The linked target will not be backed up until you " +"include it, too.\n" +"Would you like to include the symlinks target instead?" msgstr "" -"Tato složka neexistuje\n" -"v aktuálním snímku!" +"%s je symbolický odkaz. Odkazovaný cíl nebude zazálohován, pokud jeho " +"umístění výslovně nezahrnete.\n" +"Zahrnout tedy cíl symbolického odkazu namísto odkazu samotného?" -#: ../../gnome/settingsdialog.glade:287 -msgid "Where to save snapshots" -msgstr "Snímky ukládat do" +#: ../../qt4/settingsdialog.py:1545 +msgid "Include folder" +msgstr "Zahrnout složku" -#: ../../gnome/settingsdialog.glade:483 -msgid "Private key:" -msgstr "Soukromý klíč:" +#: ../../qt4/settingsdialog.py:1572 +msgid "Are you sure you want to change snapshots folder ?" +msgstr "Opravdu změnit složku se zachycenými stavy?" -#: ../../gnome/settingsdialog.glade:534 -msgid "Advanced SSH Settings" -msgstr "Pokročilé SSH nastavení" +#: ../../qt4/settingsdialog.py:1688 +msgid "enabled" +msgstr "zapnuto" -#: ../../gnome/settingsdialog.glade:552 -msgid "SSH Settings" -msgstr "SSH Settings" +#: ../../qt4/settingsdialog.py:1690 +msgid "disabled" +msgstr "vypnuto" -#: ../../gnome/settingsdialog.glade:815 -msgid "Password" -msgstr "Password" +#: ../../qt4/settingsdialog.py:1715 +msgid "Restore Settings" +msgstr "Obnovit nastavení" -#: ../../gnome/settingsdialog.glade:930 -msgid "Profile Id:" -msgstr "ID profilu:" +#: ../../qt4/settingsdialog.py:1732 +msgid " and add your user to group 'fuse'" +msgstr " a přidat svůj uživatelský účet do skupiny fuse" -#: ../../gnome/settingsdialog.glade:1115 +#: ../../qt4/settingsdialog.py:1736 +#, python-format msgid "" -"hours seperate by comma ( e.g. 8,12,18,23) or */3 for periodic backups every " -"3 hours (cron style)" +"Please navigate to the snapshot from which you want to restore %(appName)s's " +"configuration. The path may look like: \n" +"%(samplePath)s\n" +"\n" +"If your snapshots are on a remote drive or if they are encrypted you need to " +"manually mount them first. If you use Mode SSH you also may need to set up " +"public key login to the remote host%(addFuse)s.\n" +"Take a look at 'man backintime'." msgstr "" -"hodiny oddělené čárkou (například 8,12,18,23) nebo */3 pro pravidelné zálohy " -"každé 3 hodiny (cron styl)" +"Přejděte k zachycenému stavu, ze kterého chcete obnovit nastavení aplikace " +"%(appName)s. Umístění může vypadat nějak takto: \n" +"%(samplePath)s\n" +"\n" +"Pokud se zachycené stavy nacházejí na vzdáleném úložišti nebo jsou " +"šifrované, bude třeba toto umístění nejprve ručně připojit. Pokud používáte " +"SSH režim, je třeba též zajistit přihlašování veřejným klíčem ke vzdálenému " +"stroji%(addFuse)s.\n" +"Další pokyny naleznete v manuálové stránce aplikace (man backintime)." + +#: ../../qt4/settingsdialog.py:1794 ../../qt4/settingsdialog.py:1854 +msgid "No config found" +msgstr "Nebylo nalezeno žádné nastavení" -#: ../../gnome/settingsdialog.glade:1163 -msgid "Schedule" -msgstr "Plán" +#: ../../qt4/snapshotsdialog.py:49 ../../qt4/snapshotsdialog.py:173 +msgid "Diff Options" +msgstr "Předvolby nástroje diff" -#: ../../gnome/settingsdialog.glade:1363 -msgid "Highly recommended:" -msgstr "Důrazně doporučené:" +#: ../../qt4/snapshotsdialog.py:56 +msgid "Command:" +msgstr "Příkaz:" -#: ../../gnome/settingsdialog.glade:1377 -msgid "label" -msgstr "štítek" +#: ../../qt4/snapshotsdialog.py:60 +msgid "Parameters:" +msgstr "Parametry:" -#: ../../gnome/settingsdialog.glade:1755 -msgid "week(s)" -msgstr "týdnů" +#: ../../qt4/snapshotsdialog.py:64 +msgid "Use %1 and %2 for path parameters" +msgstr "Jako parametry umístění použijte %1 a %2" + +#: ../../qt4/snapshotsdialog.py:106 +msgid "List only different snapshots" +msgstr "Vypsat pouze rozdílné zachycené stavy" + +#: ../../qt4/snapshotsdialog.py:113 +msgid "List only equal snapshots to: " +msgstr "Vypsat pouze zachycené stavy, odpovídající: " + +#: ../../qt4/snapshotsdialog.py:123 +msgid "Deep check (more accurate, but slow)" +msgstr "Hloubková kontrola (přesnější, ale pomalejší)" -#: ../../gnome/settingsdialog.glade:2069 -msgid "Log level:" -msgstr "Úroveň protokolování:" - -#: ../../gnome/settingsdialog.glade:2121 -msgid "" -"Change these options only if you really know what you are doing !" -msgstr "Tato nastavení měňte pouze pokud víte co děláte!" - -#: ../../gnome/snapshotsdialog.glade:263 -msgid "Diff with" -msgstr "Diff s" - -#: ../../gnome/textinputdialog.glade:7 -msgid "Pattern" -msgstr "Vzor" - -#: ../../gnome/textinputdialog.glade:70 -msgid "Text" -msgstr "Text" +#: ../../qt4/snapshotsdialog.py:144 +msgid "Delete" +msgstr "Smazat" + +#: ../../qt4/snapshotsdialog.py:148 +msgid "Select All" +msgstr "Vybrat vše" + +#: ../../qt4/snapshotsdialog.py:161 +msgid "Diff" +msgstr "Rozdíl" + +#: ../../qt4/snapshotsdialog.py:172 +msgid "Go To" +msgstr "Přejít na" + +#: ../../qt4/snapshotsdialog.py:326 +msgid "You can't compare a snapshot to itself" +msgstr "Nelze porovnávat zachycený stav sám se sebou" + +#: ../../qt4/snapshotsdialog.py:333 +#, python-format +msgid "Command not found: %s" +msgstr "Příkaz nebyl nalezen: %s" + +#: ../../qt4/snapshotsdialog.py:354 +#, python-format +msgid "" +"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" +msgstr "" +"Opravdu chcete vymazat %(file)s ze zachyceného stavu %(snapshot_id)s?\n" + +#: ../../qt4/snapshotsdialog.py:357 +#, python-format +msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +msgstr "Opravdu chcete vymazat %(file)s z %(count)d zachycených stavů?\n" + +#: ../../qt4/snapshotsdialog.py:359 +msgid "WARNING: This can not be revoked!" +msgstr "VAROVÁNÍ: tuto operaci nelze vzít zpět!" + +#: ../../qt4/snapshotsdialog.py:374 +#, python-format +msgid "Exclude \"%s\" from future snapshots?" +msgstr "Vynechat %s z budoucích zachycených stavů?" diff -Nru backintime-1.0.36/common/po/da.po backintime-1.1.12/common/po/da.po --- backintime-1.0.36/common/po/da.po 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/po/da.po 2016-01-11 18:07:58.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2013-11-09 22:34+0100\n" +"POT-Creation-Date: 2015-12-19 00:47+0100\n" "PO-Revision-Date: 2014-01-17 02:05+0000\n" "Last-Translator: Martin Hansen \n" "Language-Team: Danish \n" @@ -15,198 +15,230 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2014-08-06 10:20+0000\n" -"X-Generator: Launchpad (build 17147)\n" +"X-Launchpad-Export-Date: 2016-01-11 17:52+0000\n" +"X-Generator: Launchpad (build 17881)\n" -#: ../../common/config.py:72 +#: ../../common/configfile.py:60 +#, python-format +msgid "Failed to save config: %s" +msgstr "" + +#: ../../common/configfile.py:78 +#, python-format +msgid "Failed to load config: %s" +msgstr "" + +#: ../../common/configfile.py:352 ../../common/configfile.py:414 +#, python-format +msgid "Profile \"%s\" already exists !" +msgstr "Profil \"%s\" findes allerede !" + +#: ../../common/configfile.py:383 +msgid "You can't remove the last profile !" +msgstr "Du kan ikke fjerne den sidste profil !" + +#: ../../common/config.py:76 msgid "Disabled" msgstr "Deaktiveret" -#: ../../common/config.py:73 +#: ../../common/config.py:77 msgid "At every boot/reboot" msgstr "Ved hver opstart/genstart" -#: ../../common/config.py:74 +#: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Hver 5 minutter" -#: ../../common/config.py:75 +#: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Hvert 10. minut" -#: ../../common/config.py:76 +#: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "Hvert 30. minut" -#: ../../common/config.py:77 +#: ../../common/config.py:81 msgid "Every hour" msgstr "Hver time" -#: ../../common/config.py:78 +#: ../../common/config.py:82 msgid "Every 2 hours" msgstr "Hver 2. time" -#: ../../common/config.py:79 +#: ../../common/config.py:83 msgid "Every 4 hours" msgstr "Hver 4. time" -#: ../../common/config.py:80 +#: ../../common/config.py:84 msgid "Every 6 hours" msgstr "Hver 6. time" -#: ../../common/config.py:81 +#: ../../common/config.py:85 msgid "Every 12 hours" msgstr "Hver 12. time" -#: ../../common/config.py:82 +#: ../../common/config.py:86 msgid "Custom Hours" msgstr "Angiv interval" -#: ../../common/config.py:83 +#: ../../common/config.py:87 msgid "Every Day" msgstr "Hver dag" -#: ../../common/config.py:84 -msgid "Daily (anacron)" -msgstr "Daglig (anacron)" +#: ../../common/config.py:88 +msgid "Repeatedly (anacron)" +msgstr "" -#: ../../common/config.py:85 +#: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "Når drev bliver tilsluttet (udev)" -#: ../../common/config.py:86 +#: ../../common/config.py:90 msgid "Every Week" msgstr "Hver uge" -#: ../../common/config.py:87 +#: ../../common/config.py:91 msgid "Every Month" msgstr "Hver måned" -#: ../../common/config.py:91 +#: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Dag(e)" -#: ../../common/config.py:92 +#: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Uge(r)" -#: ../../common/config.py:93 +#: ../../common/config.py:97 msgid "Year(s)" msgstr "År" -#: ../../common/config.py:100 +#: ../../common/config.py:101 +msgid "Hour(s)" +msgstr "" + +#: ../../common/config.py:104 +msgid "Month(s)" +msgstr "" + +#: ../../common/config.py:126 ../../qt4/settingsdialog.py:551 msgid " EXPERIMENTAL!" msgstr " EXPERIMENTAL!" -#: ../../common/config.py:103 +#: ../../common/config.py:129 msgid "Local" msgstr "Lokal" -#: ../../common/config.py:104 +#: ../../common/config.py:130 msgid "SSH" msgstr "SSH" -#: ../../common/config.py:104 ../../common/config.py:106 -#: ../../gnome/settingsdialog.py:475 ../../kde4/settingsdialog.py:1325 +#: ../../common/config.py:130 ../../common/config.py:132 +#: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "SSH privat nøgle" -#: ../../common/config.py:105 +#: ../../common/config.py:131 msgid "Local encrypted" msgstr "Lokal krypteret" -#: ../../common/config.py:105 ../../common/config.py:106 +#: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "Kryptering" -#: ../../common/config.py:106 +#: ../../common/config.py:132 msgid "SSH encrypted" msgstr "SSH krypteret" -#: ../../common/config.py:112 +#: ../../common/config.py:135 msgid "Default" msgstr "Standard" -#: ../../common/config.py:113 +#: ../../common/config.py:136 msgid "AES128-CTR" msgstr "AES128-CTR" -#: ../../common/config.py:114 +#: ../../common/config.py:137 msgid "AES192-CTR" msgstr "AES192-CTR" -#: ../../common/config.py:115 +#: ../../common/config.py:138 msgid "AES256-CTR" msgstr "AES256-CTR" -#: ../../common/config.py:116 +#: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "ARCFOUR256" -#: ../../common/config.py:117 +#: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "ARCFOUR128" -#: ../../common/config.py:118 +#: ../../common/config.py:141 msgid "AES128-CBC" msgstr "AES128-CBC" -#: ../../common/config.py:119 +#: ../../common/config.py:142 msgid "3DES-CBC" msgstr "3DES-CBC" -#: ../../common/config.py:120 +#: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "Blowfish-CBC" -#: ../../common/config.py:121 +#: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "Cast128-CBC" -#: ../../common/config.py:122 +#: ../../common/config.py:145 msgid "AES192-CBC" msgstr "AES192-CBC" -#: ../../common/config.py:123 +#: ../../common/config.py:146 msgid "AES256-CBC" msgstr "AES256-CBC" -#: ../../common/config.py:124 +#: ../../common/config.py:147 msgid "ARCFOUR" msgstr "ARCFOUR" -#: ../../common/config.py:129 +#: ../../common/config.py:153 msgid "Main profile" msgstr "hovedprofil" -#: ../../common/config.py:256 ../../common/config.py:275 -#: ../../common/config.py:286 ../../common/config.py:291 +#: ../../common/config.py:289 ../../common/config.py:296 +#: ../../common/config.py:307 ../../common/config.py:312 +#: ../../qt4/qt4systrayicon.py:61 #, python-format msgid "Profile: \"%s\"" msgstr "Profil: \"%s\"" -#: ../../common/config.py:256 +#: ../../common/config.py:289 msgid "Snapshots folder is not valid !" msgstr "Snapshots mappe er ikke gyldig !" -#: ../../common/config.py:275 +#: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "Du skal vælge mindst én mappe, der skal sikkerhedskopieres !" -#: ../../common/config.py:286 +#: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "Du kan ikke inkludere sikkerhedskopierings-mappen !" -#: ../../common/config.py:291 +#: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "Du kan ikke inkludere en sikkerhedskopierings-mappe !" -#: ../../common/config.py:361 +#: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s er ikke en mappe !" -#: ../../common/config.py:376 ../../common/config.py:389 +#: ../../common/config.py:380 +msgid "Host/User/Profile-ID must not be empty!" +msgstr "" + +#: ../../common/config.py:388 ../../common/config.py:420 #, python-format msgid "" "Can't write to: %s\n" @@ -215,7 +247,37 @@ "Kan ikke skrive til: %s\n" "Er du sikker på, du har skrive-rettigheder ?" -#: ../../common/config.py:1286 +#: ../../common/config.py:400 +#, python-format +msgid "" +"Destination filesystem for '%(path)s' is formatted with FAT which doesn't " +"support hard-links. Please use a native Linux filesystem." +msgstr "" + +#: ../../common/config.py:405 +#, python-format +msgid "" +"Destination filsystem for '%(path)s' is a SMB mounted share. Please make " +"sure the remote SMB server supports symlinks or activate '%(copyLinks)s' in " +"'%(expertOptions)s'." +msgstr "" + +#: ../../common/config.py:408 ../../qt4/settingsdialog.py:815 +msgid "Copy links (dereference symbolic links)" +msgstr "" + +#: ../../common/config.py:409 ../../qt4/settingsdialog.py:669 +msgid "Expert Options" +msgstr "Avancerede indstillinger" + +#: ../../common/config.py:411 +#, python-format +msgid "" +"Destination filesystem for '%(path)s is a sshfs mounted share. sshfs doesn't " +"support hard-links. Please use mode 'SSH' instead." +msgstr "" + +#: ../../common/config.py:1407 msgid "" "Can't find crontab.\n" "Are you sure cron is installed ?\n" @@ -225,52 +287,28 @@ "Er du sikker på, at cron er installeret ?\n" "Hvis ikke, skal du deaktivere alle automatiske sikkerhedskopieringer." -#: ../../common/config.py:1338 -#, python-format -msgid "Schedule udev doesn't work with mode %s" -msgstr "Skedulere udev virker ikke med indstilling %s" +#: ../../common/config.py:1411 +msgid "Failed to write new crontab." +msgstr "" -#: ../../common/config.py:1342 +#: ../../common/config.py:1505 #, python-format -msgid "Couldn't find UUID for \"%s\"" -msgstr "Fandt ikke UUID for \"%s\"" - -#: ../../common/config.py:1379 -msgid "Failed to remove udev rules" -msgstr "Lykkedes ikke at fjerne udev regler" - -#: ../../common/config.py:1385 -msgid "Failed to create udev rules" -msgstr "Lykkedes ikke at lave udev regler" - -#: ../../common/config.py:1420 msgid "" -"Can't find anacron.\n" -"Are you sure anacron is installed ?\n" -"If not you should disable daily anacron backups." +"Could not install Udev rule for profile %(profile_id)s. DBus Service " +"'%(dbus_interface)s' wasn't available" msgstr "" -"Fandt ikke anacron.\n" -"Er du sikker på anacron er installeret ?\n" -"Hvis ikke skal du deaktivere daglige anacron sikkerhedskopieringer." - -#: ../../common/config.py:1439 -msgid "Please provide your sudo password to install the udev rule." -msgstr "Angiv venligst dit sudo kodeord for at installere udev reglen." - -#: ../../common/config.py:1445 -msgid "Please provide your sudo password to remove unused udev rules." -msgstr "Angiv venligst dit sudo kodeord for at fjerne ubrugte udev regler." -#: ../../common/configfile.py:253 ../../common/configfile.py:315 +#: ../../common/config.py:1517 #, python-format -msgid "Profile \"%s\" already exists !" -msgstr "Profil \"%s\" findes allerede !" +msgid "Schedule udev doesn't work with mode %s" +msgstr "Skedulere udev virker ikke med indstilling %s" -#: ../../common/configfile.py:284 -msgid "You can't remove the last profile !" -msgstr "Du kan ikke fjerne den sidste profil !" +#: ../../common/config.py:1526 +#, python-format +msgid "Couldn't find UUID for \"%s\"" +msgstr "Fandt ikke UUID for \"%s\"" -#: ../../common/encfstools.py:95 +#: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" @@ -281,16 +319,16 @@ "\n" "%(error)s" -#: ../../common/encfstools.py:105 +#: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "Kan ikke tilslutte encfs %s" -#: ../../common/encfstools.py:149 +#: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "Konfig for krypteret mappe ikke fundet." -#: ../../common/encfstools.py:153 +#: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" @@ -298,24 +336,24 @@ "\n" "Lav en ny krypteret mappe?" -#: ../../common/encfstools.py:154 +#: ../../common/encfstools.py:171 msgid "Cancel" msgstr "Annullér" -#: ../../common/encfstools.py:157 +#: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "Bekræft venligst kodeord" -#: ../../common/encfstools.py:161 +#: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "Kodeord passer ikke" -#: ../../common/encfstools.py:166 +#: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" "encfs ikke fundet. Installer venligst f.eks. med 'apt-get install encfs'" -#: ../../common/encfstools.py:174 ../../common/sshtools.py:207 +#: ../../common/encfstools.py:196 ../../common/sshtools.py:262 #, python-format msgid "" "%(user)s is not member of group 'fuse'.\n" @@ -327,7 +365,7 @@ "ind igen.\n" "Se 'man backintime' for yderlig information." -#: ../../common/encfstools.py:189 +#: ../../common/encfstools.py:211 msgid "" "encfs version 1.7.2 and before has a bug with option --reverse. Please " "update encfs" @@ -335,13 +373,12 @@ "encfs version 1.7.2 og tidligere har en fejl ved brug af option --reverse. " "Opdatér venligst encfs" -#: ../../common/encfstools.py:453 ../../common/encfstools.py:480 -#: ../../common/snapshots.py:982 ../../common/snapshots.py:1288 -#: ../../kde4/app.py:82 ../../gnome/mainwindow.glade:43 +#: ../../common/encfstools.py:512 ../../common/snapshots.py:1131 +#: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "Tag et tilstands-billede" -#: ../../common/mount.py:195 +#: ../../common/mount.py:204 #, python-format msgid "" "Hash collision occurred in hash_id %s. Incrementing global value " @@ -350,30 +387,29 @@ "Hash kollision skete i hash_id %s. Forøg den globale værdi hash_collision og " "forsøg igen." -#: ../../common/mount.py:246 +#: ../../common/mount.py:259 #, python-format msgid "mountpoint %s not empty." msgstr "tilsluttelsespunkt %s ikke tomt." -#: ../../common/mount.py:286 +#: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "Lås af tilslutningsproces udløbet" -#: ../../common/password.py:425 +#: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "Profil '%(profile)s': Indtast kodeord for %(mode)s: " -#: ../../common/snapshots.py:171 ../../gnome/app.py:1127 -#: ../../kde4/app.py:1014 +#: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Nu" -#: ../../common/snapshots.py:182 ../../gnome/gnometools.py:37 +#: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "MED FEJL!" -#: ../../common/snapshots.py:282 +#: ../../common/snapshots.py:344 msgid "" "### This log has been decoded with automatic search pattern\n" "### If some paths are not decoded you can manually decode them with:\n" @@ -381,15 +417,20 @@ "### Denne log er blevet afkodet med automatisk søge mønster\n" "### Hvis nogle stier ikke er afkodet kan du manuelt afkode dem med:\n" -#: ../../common/snapshots.py:465 +#: ../../common/snapshots.py:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "MISLYKKEDES" -#: ../../common/snapshots.py:564 +#: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "Gendan tilladelser:" -#: ../../common/snapshots.py:739 +#: ../../common/snapshots.py:752 ../../qt4/app.py:377 ../../qt4/app.py:675 +#: ../../qt4/app.py:692 ../../qt4/qt4systrayicon.py:65 +msgid "Done" +msgstr "Færdig" + +#: ../../common/snapshots.py:860 msgid "" "Back In Time changed its backup format.\n" "\n" @@ -399,7 +440,7 @@ "\n" "Dine gamle sikkerhedskopier kan flyttes i henhold til dette nye format. O.K.?" -#: ../../common/snapshots.py:749 +#: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" @@ -413,7 +454,7 @@ "Det nye backup-format understøtter lagring af forskellige brugere og " "profiler på den samme location. Ønsker du samme location for begge profiler?" -#: ../../common/snapshots.py:752 +#: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" @@ -421,7 +462,7 @@ "Ingen profiler fundet. Er derfor nødsaget til først at generere profiler . " "Genstart venligst Back In Time" -#: ../../common/snapshots.py:803 +#: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" @@ -442,7 +483,7 @@ "Hvis ikke Back In Time vil genskabe tidligere indstillinger for denne " "profil, men kan så ikke fortsætte med at tage snapshots" -#: ../../common/snapshots.py:812 +#: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" @@ -457,7 +498,7 @@ "Du kan manuelt flytte dine snapshots, \n" "hvis du er færdig, genstart Back In Time for at fortsætte" -#: ../../common/snapshots.py:825 +#: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" @@ -467,7 +508,7 @@ "\n" "Back In Time vil fortsætte med at tage snapshots igen som skeduleret" -#: ../../common/snapshots.py:830 +#: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" @@ -488,11 +529,11 @@ "Hvis du ikke vil, du vil blive spurgt igen næste gang du starter Back In " "Time." -#: ../../common/snapshots.py:839 +#: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "Back In Time vil fortsætte med at tage snapshots igen som skeduleret" -#: ../../common/snapshots.py:841 +#: ../../common/snapshots.py:953 msgid "" "Back In Time still cannot continue taking new snapshots.\n" "Restart Back In Time to see the questions again" @@ -500,7 +541,11 @@ "Back In Time kan stadig ikke fortsætte med at tage nye snapshots.\n" "Genstart Back In Time for se spørgsmålene igen" -#: ../../common/snapshots.py:913 +#: ../../common/snapshots.py:972 +msgid "Deferring backup while on battery" +msgstr "" + +#: ../../common/snapshots.py:1035 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it." @@ -508,96 +553,101 @@ "Kan ikke finde tilstands-billede-mappen.\n" "Hvis den er på et flytbart drev indsæt venligst dette." -#: ../../common/snapshots.py:915 +#: ../../common/snapshots.py:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "Venter %s sekund." msgstr[1] "Venter %s sekunder." -#: ../../common/snapshots.py:941 +#: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "Kunne ikke tage tilstands-billede %s !!!" -#: ../../common/snapshots.py:950 +#: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "Afslutter" -#: ../../common/snapshots.py:1088 +#: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "Kan ikke oprette mappen: %s" -#: ../../common/snapshots.py:1107 +#: ../../common/snapshots.py:1217 msgid "..." msgstr "..." -#: ../../common/snapshots.py:1134 +#: ../../common/snapshots.py:1238 +#, python-format +msgid "Found leftover '%s' which can be continued." +msgstr "" + +#: ../../common/snapshots.py:1250 +#, python-format +msgid "Remove leftover '%s' folder from last run" +msgstr "" + +#: ../../common/snapshots.py:1263 #, python-format msgid "Can't remove folder: %s" msgstr "Kan ikke fjerne mappen: %s" -#: ../../common/snapshots.py:1219 +#: ../../common/snapshots.py:1340 #, python-format msgid "Compare with snapshot %s" msgstr "Sammenlign med tilstands-billede %s" -#: ../../common/snapshots.py:1248 +#: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "Opret hard-links" -#: ../../common/snapshots.py:1335 +#: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "Gem config fil ..." -#: ../../common/snapshots.py:1341 +#: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "Gem tilladelse ..." -#: ../../common/snapshots.py:1442 +#: ../../common/snapshots.py:1470 +msgid "Save permission over ssh failed. Retry normal method" +msgstr "" + +#: ../../common/snapshots.py:1521 #, python-format msgid "Can't rename %(new_path)s to %(path)s" msgstr "Kan ikke omdøbe %(new_path)s til %(path)s" -#: ../../common/snapshots.py:1562 -msgid "Remove old snapshots" -msgstr "Fjern gamle tilstands-billeder" - -#: ../../common/snapshots.py:1586 ../../kde4/settingsdialog.py:501 -#: ../../gnome/settingsdialog.glade:1660 +#: ../../common/snapshots.py:1695 ../../common/snapshots.py:1728 +#: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "Smart fjern" -#: ../../common/snapshots.py:1591 +#: ../../common/snapshots.py:1704 +msgid "Remove old snapshots" +msgstr "Fjern gamle tilstands-billeder" + +#: ../../common/snapshots.py:1733 msgid "Try to keep min free space" msgstr "Prøv at holde minimum fri plads" -#: ../../common/snapshots.py:1621 +#: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "Prøv at beholde minimum %d%% inoder fri" -#: ../../common/sshtools.py:106 +#: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "Kan ikke tilslutte %s" -#: ../../common/sshtools.py:113 +#: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "Kan ikke frakoble sshfs %s" -#: ../../common/sshtools.py:187 -#, python-format -msgid "" -"Failed to unlock SSH private key:\n" -"Error: %s" -msgstr "" -"Kunne ikke fjerne lås på SSH privat nøgle:\n" -"Error: %s" - -#: ../../common/sshtools.py:194 +#: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." @@ -605,12 +655,12 @@ "Kunne ikke fjerne låsen på ssh privat nøgle. Forkert kodeord elle kodeordet " "er ikke tilgængelig for cron." -#: ../../common/sshtools.py:199 +#: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" "sshfs ikke fundet. Installér venligst med f.eks. 'apt-get install sshfs'" -#: ../../common/sshtools.py:217 +#: ../../common/sshtools.py:278 #, python-format msgid "" "Password-less authentication for %(user)s@%(host)s failed. Look at 'man " @@ -619,52 +669,52 @@ "Kodeløs login for %(user)s@%(host)s fejlede. Se'man backintime' for yderlig " "informationer." -#: ../../common/sshtools.py:229 +#: ../../common/sshtools.py:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" -#: ../../common/sshtools.py:254 +#: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" -#: ../../common/sshtools.py:274 +#: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" -#: ../../common/sshtools.py:276 +#: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:278 +#: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:280 +#: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" -#: ../../common/sshtools.py:302 +#: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" -#: ../../common/sshtools.py:325 ../../common/sshtools.py:383 +#: ../../common/sshtools.py:423 ../../common/sshtools.py:553 #, python-format msgid "" "Remote host %(host)s doesn't support '%(command)s':\n" @@ -672,7 +722,7 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:387 +#: ../../common/sshtools.py:556 #, python-format msgid "" "Check commands on host %(host)s returned unknown error:\n" @@ -680,96 +730,149 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:400 +#: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "" -#: ../../gnome/app.py:185 ../../gnome/app.py:594 ../../gnome/app.py:608 -#: ../../kde4/app.py:299 ../../kde4/app.py:570 ../../kde4/app.py:587 -msgid "Done" -msgstr "Færdig" +#: ../../qt4/app.py:81 +msgid "Refresh snapshots list" +msgstr "" + +#: ../../qt4/app.py:85 ../../qt4/app.py:890 +msgid "Snapshot Name" +msgstr "Tilstands-billede-navn" + +#: ../../qt4/app.py:88 +msgid "Remove Snapshot" +msgstr "Fjern tilstands-billede" + +#: ../../qt4/app.py:91 +msgid "View Snapshot Log" +msgstr "" + +#: ../../qt4/app.py:94 +msgid "View Last Log" +msgstr "" + +#: ../../qt4/app.py:99 ../../qt4/settingsdialog.py:51 +msgid "Settings" +msgstr "Indstillinger" + +#: ../../qt4/app.py:104 +msgid "Shutdown" +msgstr "" + +#: ../../qt4/app.py:105 +msgid "Shutdown system after snapshot has finished." +msgstr "" -#: ../../gnome/app.py:189 ../../kde4/app.py:143 ../../kde4/app.py:159 -#: ../../gnome/mainwindow.glade:225 +#: ../../qt4/app.py:111 +msgid "Exit" +msgstr "Afslut" + +#: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 msgid "Help" msgstr "Hjælp" -#: ../../gnome/app.py:191 ../../kde4/app.py:146 -#: ../../gnome/mainwindow.glade:223 +#: ../../qt4/app.py:122 +msgid "Config File Help" +msgstr "" + +#: ../../qt4/app.py:125 msgid "Website" msgstr "Websted" -#: ../../gnome/app.py:192 ../../kde4/app.py:148 +#: ../../qt4/app.py:127 ../../qt4/app.py:982 +msgid "Changelog" +msgstr "" + +#: ../../qt4/app.py:129 msgid "FAQ" msgstr "" -#: ../../gnome/app.py:193 ../../kde4/app.py:150 +#: ../../qt4/app.py:131 msgid "Ask a question" msgstr "" -#: ../../gnome/app.py:194 ../../kde4/app.py:152 +#: ../../qt4/app.py:133 msgid "Report a bug" msgstr "Rapporter en fejl" -#: ../../gnome/app.py:196 ../../kde4/app.py:155 +#: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "Om" -#: ../../gnome/app.py:202 ../../gnome/app.py:887 -#: ../../gnome/restoredialog.py:84 ../../gnome/snapshotsdialog.py:83 -#: ../../gnome/snapshotsdialog.py:244 ../../kde4/app.py:206 -#: ../../kde4/app.py:216 ../../kde4/restoredialog.py:68 -#: ../../kde4/snapshotsdialog.py:111 ../../kde4/snapshotsdialog.py:117 -#: ../../gnome/mainwindow.glade:350 ../../gnome/mainwindow.glade:352 -#: ../../gnome/snapshotsdialog.glade:169 ../../gnome/snapshotsdialog.glade:171 +#: ../../qt4/app.py:163 +msgid "Up" +msgstr "Op" + +#: ../../qt4/app.py:174 ../../qt4/settingsdialog.py:1776 +msgid "Show hidden files" +msgstr "Vis skjulte filer" + +#: ../../qt4/app.py:184 ../../qt4/app.py:199 ../../qt4/app.py:233 +#: ../../qt4/restoredialog.py:62 ../../qt4/settingsdialog.py:1818 +#: ../../qt4/snapshotsdialog.py:134 ../../qt4/snapshotsdialog.py:139 msgid "Restore" msgstr "Gendan" -#: ../../gnome/app.py:203 ../../gnome/app.py:888 ../../gnome/gnometools.py:67 -#: ../../gnome/snapshotsdialog.py:84 ../../gnome/snapshotsdialog.py:245 -#: ../../kde4/app.py:208 ../../kde4/restoredialog.py:42 -#: ../../kde4/snapshotsdialog.py:113 +#: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 +#: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "" -#: ../../gnome/app.py:205 ../../gnome/app.py:896 ../../gnome/app.py:1146 -#: ../../kde4/app.py:1041 -#, python-format -msgid "Restore '%s'" +#: ../../qt4/app.py:194 +msgid "Restore and delete new files" msgstr "" -#: ../../gnome/app.py:207 ../../gnome/app.py:897 ../../gnome/app.py:1147 -#: ../../kde4/app.py:1042 +#: ../../qt4/app.py:201 #, python-format -msgid "Restore '%s' to ..." +msgid "" +"Restore selected file or folder.\n" +"If this button is grayed out this is most likely because \"%(now)s\" is " +"selected in left hand snapshots list." +msgstr "" + +#: ../../qt4/app.py:206 ../../qt4/logviewdialog.py:67 +#: ../../qt4/qt4tools.py:160 ../../qt4/snapshotsdialog.py:96 +msgid "Snapshots" +msgstr "Tilstamds-billeder" + +#: ../../qt4/app.py:213 +msgid "Snapshot" +msgstr "" + +#: ../../qt4/app.py:224 +msgid "View" msgstr "" -#: ../../gnome/app.py:226 ../../kde4/app.py:235 +#: ../../qt4/app.py:277 msgid "Shortcuts" msgstr "Genveje" -#: ../../gnome/app.py:249 -msgid "Name" -msgstr "Navn" - -#: ../../gnome/app.py:260 -msgid "Size" -msgstr "Størrelse" - -#: ../../gnome/app.py:267 -msgid "Date" -msgstr "Dato" - -#: ../../gnome/app.py:286 ../../gnome/app.py:883 -#: ../../gnome/snapshotsdialog.py:116 ../../kde4/app.py:171 -#: ../../kde4/app.py:221 ../../kde4/snapshotsdialog.py:91 -#: ../../gnome/mainwindow.glade:366 ../../gnome/mainwindow.glade:368 -#: ../../gnome/snapshotsdialog.glade:8 -msgid "Snapshots" -msgstr "Tilstamds-billeder" +#: ../../qt4/app.py:295 +msgid "" +"This folder doesn't exist\n" +"in the current selected snapshot!" +msgstr "" + +#: ../../qt4/app.py:359 +msgid "Add to Include" +msgstr "" -#: ../../gnome/app.py:348 ../../kde4/app.py:362 +#: ../../qt4/app.py:360 +msgid "Add to Exclude" +msgstr "" + +#: ../../qt4/app.py:416 +#, python-format +msgid "" +"%(appName)s is not configured. Would you like to restore a previous " +"configuration?" +msgstr "" + +#: ../../qt4/app.py:440 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it and then press OK" @@ -777,726 +880,791 @@ "Kan ikke finde tilstands-billede-mappen.\n" "Hvis den er på et flytbar drev, indsæt venligst drevet og tryk OK" -#: ../../gnome/app.py:611 ../../kde4/app.py:590 -msgid "Done, no backup needed" -msgstr "Færdig, ingen sikkerhedskopiering nødvendig" +#: ../../qt4/app.py:473 +msgid "" +"If you close this window Back In Time will not be able to shutdown your " +"system when the snapshot has finished.\n" +"Do you really want to close?" +msgstr "" -#: ../../gnome/app.py:619 ../../kde4/app.py:598 +#: ../../qt4/app.py:667 ../../qt4/app.py:703 msgid "Working:" msgstr "Arbejder:" -#: ../../gnome/app.py:623 ../../kde4/app.py:602 +#: ../../qt4/app.py:695 +msgid "Done, no backup needed" +msgstr "Færdig, ingen sikkerhedskopiering nødvendig" + +#: ../../qt4/app.py:707 msgid "Error:" msgstr "Fejl:" -#: ../../gnome/app.py:636 ../../kde4/app.py:649 +#: ../../qt4/app.py:726 ../../qt4/qt4systrayicon.py:153 +msgid "Sent:" +msgstr "" + +#: ../../qt4/app.py:727 ../../qt4/qt4systrayicon.py:154 +msgid "Speed:" +msgstr "" + +#: ../../qt4/app.py:728 ../../qt4/qt4systrayicon.py:155 +msgid "ETA:" +msgstr "" + +#: ../../qt4/app.py:777 msgid "Global" msgstr "Globalt" -#: ../../gnome/app.py:637 ../../kde4/app.py:650 +#: ../../qt4/app.py:778 msgid "Root" msgstr "Root" -#: ../../gnome/app.py:638 ../../kde4/app.py:651 +#: ../../qt4/app.py:779 msgid "Home" msgstr "Hjemmemappe" -#: ../../gnome/app.py:662 -msgid "Bookmarks" -msgstr "Bogmærker" - -#: ../../gnome/app.py:675 ../../kde4/app.py:662 +#: ../../qt4/app.py:794 msgid "Backup folders" msgstr "Sikkerhedskopi-mapper" -#: ../../gnome/app.py:701 ../../kde4/app.py:734 -msgid "Today" -msgstr "I dag" +#: ../../qt4/app.py:849 +msgid "This is NOT a snapshot but a live view of your local files" +msgstr "" -#: ../../gnome/app.py:705 ../../kde4/app.py:738 -msgid "Yesterday" -msgstr "I går" +#: ../../qt4/app.py:860 ../../qt4/app.py:1476 +#, python-format +msgid "Last check %s" +msgstr "" -#: ../../gnome/app.py:709 ../../kde4/app.py:742 -msgid "This week" -msgstr "Denne uge" +#: ../../qt4/app.py:928 +#, python-format +msgid "" +"Are you sure you want to remove the snapshot:\n" +"%s" +msgstr "" +"Er du sikker på du ønsker at fjerne tilstands-billedet:\n" +"%s" -#: ../../gnome/app.py:713 ../../kde4/app.py:746 -msgid "Last week" -msgstr "Sidste uge" +#: ../../qt4/app.py:1004 +#, python-format +msgid "" +"Backup local files before overwriting or\n" +"removing with trailing '%(suffix)s'." +msgstr "" -#: ../../gnome/app.py:764 ../../kde4/app.py:398 +#: ../../qt4/app.py:1010 msgid "" -"If you close this window Back In Time will not be able to shutdown your " -"system when the snapshot has finished.\n" -"Do you really want to close?" +"Are you sure you want to remove all newer files in your original folder?" msgstr "" -#: ../../gnome/app.py:881 ../../gnome/snapshotsdialog.py:238 -msgid "Open" -msgstr "Åbn" +#: ../../qt4/app.py:1014 +msgid "" +"WARNING: deleting files in filesystem root could break your whole system!!!" +msgstr "" -#: ../../gnome/app.py:1056 ../../kde4/app.py:90 ../../kde4/app.py:805 -#: ../../gnome/mainwindow.glade:73 ../../gnome/mainwindow.glade:75 -msgid "Snapshot Name" -msgstr "Tilstands-billede-navn" +#: ../../qt4/app.py:1016 +msgid "Files to be restored:" +msgstr "" -#: ../../gnome/app.py:1075 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +#: ../../qt4/app.py:1031 +msgid "Do you really want to restore this files(s):" msgstr "" -"Er du sikker på du ønsker at fjerne tilstands-billedet:\n" -"%s" -#: ../../gnome/app.py:1123 ../../kde4/app.py:1010 +#: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "Tilstands-billede: %s" -#: ../../gnome/app.py:1124 ../../kde4/app.py:1011 +#: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "Se tilstands-billedet lavet ved %s" -#: ../../gnome/app.py:1126 ../../kde4/app.py:1013 +#: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "Se nuværende disk-indhold" -#: ../../gnome/logviewdialog.py:106 ../../gnome/settingsdialog.py:414 -#: ../../kde4/logviewdialog.py:83 ../../kde4/settingsdialog.py:590 -msgid "All" +#: ../../qt4/app.py:1268 +#, python-format +msgid "Restore '%s'" msgstr "" -#: ../../gnome/logviewdialog.py:107 ../../gnome/settingsdialog.py:412 -#: ../../kde4/logviewdialog.py:84 ../../kde4/settingsdialog.py:588 -msgid "Errors" -msgstr "Fejl" - -#: ../../gnome/logviewdialog.py:112 ../../kde4/logviewdialog.py:89 -msgid "Changes" +#: ../../qt4/app.py:1269 +#, python-format +msgid "Restore '%s' to ..." msgstr "" -#: ../../gnome/logviewdialog.py:115 ../../kde4/logviewdialog.py:92 -msgid "Informations" +#: ../../qt4/app.py:1270 +#, python-format +msgid "Restore '%s' and delete new files" msgstr "" -#: ../../gnome/settingsdialog.py:235 ../../kde4/settingsdialog.py:387 -msgid "Include files and folders" +#: ../../qt4/app.py:1368 ../../qt4/app.py:1385 +msgid "Authors" msgstr "" -#: ../../gnome/settingsdialog.py:264 -msgid "Exclude patterns, files or folders" +#: ../../qt4/app.py:1369 ../../qt4/app.py:1388 +msgid "Translations" msgstr "" -#: ../../gnome/settingsdialog.py:411 ../../kde4/settingsdialog.py:587 -msgid "None" +#: ../../qt4/app.py:1370 ../../qt4/app.py:1391 +msgid "License" msgstr "" -#: ../../gnome/settingsdialog.py:413 ../../kde4/settingsdialog.py:589 -msgid "Changes & Errors" +#: ../../qt4/logviewdialog.py:49 +msgid "Last Log View" msgstr "" -#: ../../gnome/settingsdialog.py:458 -msgid "Snapshots folder" -msgstr "Tilstands-billeders mappe" - -#: ../../gnome/settingsdialog.py:466 ../../kde4/settingsdialog.py:1314 -msgid "Are you sure you want to change snapshots folder ?" -msgstr "Er du sikker på du ønsker at skifte tilstands-billede-mappe ?" - -#: ../../gnome/settingsdialog.py:901 ../../kde4/settingsdialog.py:914 -msgid "" -"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " -"*/3 for periodic backups every 3 hours" +#: ../../qt4/logviewdialog.py:51 +msgid "Snapshot Log View" msgstr "" -#: ../../gnome/settingsdialog.py:1141 ../../kde4/settingsdialog.py:653 -msgid "New profile" -msgstr "Ny profil" - -#: ../../gnome/settingsdialog.py:1155 ../../kde4/settingsdialog.py:669 -msgid "Rename profile" -msgstr "Omdøb profil" - -#: ../../gnome/settingsdialog.py:1167 ../../kde4/settingsdialog.py:683 -#, python-format -msgid "Are you sure you want to delete the profile \"%s\" ?" -msgstr "Er du sikker på at du vil slette profilen \"%s\" ?" - -#: ../../gnome/settingsdialog.py:1173 ../../kde4/settingsdialog.py:1292 -msgid "Include folder" -msgstr "Inkludér mapper" +#: ../../qt4/logviewdialog.py:59 ../../qt4/settingsdialog.py:59 +#: ../../qt4/settingsdialog.py:274 ../../qt4/settingsdialog.py:1899 +msgid "Profile:" +msgstr "Profil:" -#: ../../gnome/settingsdialog.py:1193 ../../kde4/settingsdialog.py:1278 -msgid "Include file" +#: ../../qt4/logviewdialog.py:81 +msgid "Filter:" msgstr "" -#: ../../gnome/settingsdialog.py:1235 ../../kde4/settingsdialog.py:1241 -msgid "Exclude pattern" -msgstr "Ekskludér mønster" - -#: ../../gnome/settingsdialog.py:1240 ../../kde4/settingsdialog.py:1251 -msgid "Exclude patterns can't contain ':' char !" -msgstr "Ekskluder-mønster kan ikke indeholde \":\"-tegn !" - -#: ../../gnome/settingsdialog.py:1246 ../../kde4/settingsdialog.py:1257 -msgid "Exclude file" -msgstr "Ekskludér fil" - -#: ../../gnome/settingsdialog.py:1257 ../../kde4/settingsdialog.py:1261 -msgid "Exclude folder" -msgstr "Ekskludér mappe" - -#: ../../gnome/snapshotsdialog.py:240 -msgid "Jump to" +#: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 +msgid "All" msgstr "" -#: ../../gnome/snapshotsdialog.py:248 ../../kde4/snapshotsdialog.py:164 -msgid "Diff" -msgstr "Diff" - -#: ../../gnome/snapshotsdialog.py:277 ../../kde4/snapshotsdialog.py:339 -msgid "You can't compare a snapshot to itself" -msgstr "Du kan ikke sammenligne et tilstands-billede med sig selv" - -#: ../../gnome/snapshotsdialog.py:284 ../../kde4/snapshotsdialog.py:346 -#, python-format -msgid "Command not found: %s" -msgstr "Kommando ikke fundet: %s" - -#: ../../gnome/snapshotsdialog.py:307 ../../kde4/snapshotsdialog.py:367 -#, python-format -msgid "" -"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" -msgstr "" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 +#: ../../qt4/settingsdialog.py:657 +msgid "Errors" +msgstr "Fejl" -#: ../../gnome/snapshotsdialog.py:310 ../../kde4/snapshotsdialog.py:370 -#, python-format -msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 +msgid "Changes" msgstr "" -#: ../../gnome/snapshotsdialog.py:312 ../../kde4/snapshotsdialog.py:372 -msgid "WARNING: This can not be revoked!" +#: ../../qt4/logviewdialog.py:92 +msgid "Informations" msgstr "" -#: ../../gnome/snapshotsdialog.py:317 ../../kde4/snapshotsdialog.py:377 -#, python-format -msgid "Exclude \"%s\" from future snapshots?" +#: ../../qt4/logviewdialog.py:101 +msgid "[E] Error, [I] Information, [C] Change" msgstr "" -#: ../../kde4/app.py:86 ../../gnome/mainwindow.glade:58 -#: ../../gnome/mainwindow.glade:60 -msgid "Refresh snapshots list" +#: ../../qt4/logviewdialog.py:104 +msgid "decode paths" msgstr "" -#: ../../kde4/app.py:94 ../../gnome/mainwindow.glade:88 -#: ../../gnome/mainwindow.glade:90 -msgid "Remove Snapshot" -msgstr "Fjern tilstands-billede" - -#: ../../kde4/app.py:98 ../../gnome/mainwindow.glade:105 -msgid "View Snapshot Log" +#: ../../qt4/messagebox.py:56 +msgid "Error" msgstr "" -#: ../../kde4/app.py:102 ../../gnome/mainwindow.glade:121 -msgid "View Last Log" +#: ../../qt4/messagebox.py:62 ../../qt4/messagebox.py:68 +msgid "Question" msgstr "" -#: ../../kde4/app.py:108 ../../kde4/settingsdialog.py:69 -#: ../../gnome/mainwindow.glade:144 ../../gnome/mainwindow.glade:146 -#: ../../gnome/settingsdialog.glade:7 -msgid "Settings" -msgstr "Indstillinger" - -#: ../../kde4/app.py:124 ../../gnome/mainwindow.glade:169 -msgid "Shutdown system after snapshot has finished." +#: ../../qt4/qt4systrayicon.py:69 +msgid "Start BackInTime" msgstr "" -#: ../../kde4/app.py:131 ../../gnome/mainwindow.glade:184 -#: ../../gnome/mainwindow.glade:186 -msgid "Exit" -msgstr "Afslut" - -#: ../../kde4/app.py:186 ../../gnome/mainwindow.glade:289 -msgid "Up" -msgstr "Op" +#: ../../qt4/qt4systrayicon.py:124 +msgid "Working..." +msgstr "Arbejder..." -#: ../../kde4/app.py:199 ../../gnome/mainwindow.glade:325 -msgid "Show hidden files" -msgstr "Vis skjulte filer" +#: ../../qt4/qt4tools.py:178 +msgid "Today" +msgstr "I dag" -#: ../../kde4/app.py:244 -msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" -msgstr "" +#: ../../qt4/qt4tools.py:183 +msgid "Yesterday" +msgstr "I går" -#: ../../kde4/app.py:839 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" -msgstr "" -"Er du sikker på du ønsker at fjerne tilstands-billedet:\n" -"%s" +#: ../../qt4/qt4tools.py:188 +msgid "This week" +msgstr "Denne uge" -#: ../../kde4/app.py:1140 ../../kde4/kde4systrayicon.py:117 -msgid "Working..." -msgstr "Arbejder..." +#: ../../qt4/qt4tools.py:193 +msgid "Last week" +msgstr "Sidste uge" -#: ../../kde4/logviewdialog.py:55 -msgid "Error Log View" +#: ../../qt4/restoredialog.py:75 +msgid "Show full Log" msgstr "" -#: ../../kde4/logviewdialog.py:65 ../../kde4/settingsdialog.py:79 -#: ../../kde4/settingsdialog.py:293 ../../gnome/logviewdialog.glade:73 -#: ../../gnome/settingsdialog.glade:72 -msgid "Profile:" -msgstr "Profil:" +#: ../../qt4/settingsdialog.py:68 +msgid "Edit" +msgstr "Redigér" -#: ../../kde4/logviewdialog.py:77 ../../gnome/logviewdialog.glade:110 -msgid "Filter:" +#: ../../qt4/settingsdialog.py:73 +msgid "Modify for Full System Backup" msgstr "" -#: ../../kde4/logviewdialog.py:100 ../../gnome/logviewdialog.glade:169 -msgid "[E] Error, [I] Information, [C] Change" +#: ../../qt4/settingsdialog.py:77 ../../qt4/settingsdialog.py:451 +msgid "Add" msgstr "" -#: ../../kde4/logviewdialog.py:103 ../../gnome/logviewdialog.glade:195 -msgid "decode paths" +#: ../../qt4/settingsdialog.py:81 ../../qt4/settingsdialog.py:408 +#: ../../qt4/settingsdialog.py:467 +msgid "Remove" msgstr "" -#: ../../kde4/settingsdialog.py:88 -msgid "Edit" -msgstr "Redigér" - -#: ../../kde4/settingsdialog.py:106 ../../gnome/settingsdialog.glade:1207 +#: ../../qt4/settingsdialog.py:96 msgid "General" msgstr "Generelt" -#: ../../kde4/settingsdialog.py:114 ../../gnome/settingsdialog.glade:199 +#: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "" -#: ../../kde4/settingsdialog.py:127 ../../kde4/settingsdialog.py:1311 +#: ../../qt4/settingsdialog.py:119 +#, python-format +msgid "" +"Warning: %(app)s uses EncFS for encryption. A recent security audit " +"revealed several possible attack vectors for this. Please take a look at 'A " +"NOTE ON SECURITY' in 'man backintime'." +msgstr "" + +#: ../../qt4/settingsdialog.py:129 ../../qt4/settingsdialog.py:1568 msgid "Where to save snapshots" msgstr "Hvor skal tilstands-billeder gemmes" -#: ../../kde4/settingsdialog.py:146 +#: ../../qt4/settingsdialog.py:145 +msgid "Folder" +msgstr "" + +#: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" -#: ../../kde4/settingsdialog.py:158 ../../kde4/settingsdialog.py:283 -#: ../../gnome/settingsdialog.glade:323 ../../gnome/settingsdialog.glade:583 -#: ../../gnome/settingsdialog.glade:874 +#: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "" -#: ../../kde4/settingsdialog.py:163 ../../gnome/settingsdialog.glade:350 -#: ../../gnome/settingsdialog.glade:610 +#: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "" -#: ../../kde4/settingsdialog.py:168 ../../kde4/settingsdialog.py:288 -#: ../../gnome/settingsdialog.glade:377 ../../gnome/settingsdialog.glade:637 -#: ../../gnome/settingsdialog.glade:902 +#: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "" -#: ../../kde4/settingsdialog.py:173 ../../gnome/settingsdialog.glade:416 +#: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" -#: ../../kde4/settingsdialog.py:178 ../../gnome/settingsdialog.glade:459 +#: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" -#: ../../kde4/settingsdialog.py:184 +#: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "" -#: ../../kde4/settingsdialog.py:228 ../../kde4/settingsdialog.py:237 -#: ../../kde4/settingsdialog.py:243 ../../gnome/settingsdialog.glade:703 -#: ../../gnome/settingsdialog.glade:743 +#: ../../qt4/settingsdialog.py:201 +msgid "Key File" +msgstr "" + +#: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 +#: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "" -#: ../../kde4/settingsdialog.py:249 ../../gnome/settingsdialog.glade:775 +#: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" -#: ../../kde4/settingsdialog.py:252 ../../gnome/settingsdialog.glade:792 +#: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" -#: ../../kde4/settingsdialog.py:264 ../../gnome/settingsdialog.glade:968 +#: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "" -#: ../../kde4/settingsdialog.py:276 ../../gnome/settingsdialog.glade:848 -msgid "Auto Host / User / Profile Id" +#: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 +msgid "Full snapshot path: " msgstr "" -#: ../../kde4/settingsdialog.py:301 +#: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "Planlæg" -#: ../../kde4/settingsdialog.py:311 ../../gnome/settingsdialog.glade:1092 +#: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "" -#: ../../kde4/settingsdialog.py:322 ../../gnome/settingsdialog.glade:1079 +#: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "" -#: ../../kde4/settingsdialog.py:333 ../../gnome/settingsdialog.glade:1066 +#: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "" -#: ../../kde4/settingsdialog.py:344 ../../gnome/settingsdialog.glade:1053 +#: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "" -#: ../../kde4/settingsdialog.py:353 ../../gnome/settingsdialog.glade:1014 +#: ../../qt4/settingsdialog.py:339 msgid "" -"Run Back In Time periodically with anacron. This is useful if the computer " -"is not running regular." +"Run Back In Time repeatedly. This is useful if the computer is not running " +"regular." msgstr "" -#: ../../kde4/settingsdialog.py:357 ../../gnome/settingsdialog.glade:1040 -msgid "Frequency in days:" +#: ../../qt4/settingsdialog.py:344 +msgid "Every:" msgstr "" -#: ../../kde4/settingsdialog.py:368 ../../gnome/settingsdialog.glade:1026 +#: ../../qt4/settingsdialog.py:362 msgid "" "Run Back In Time as soon as the drive is connected (only once every X " "days).\n" "You will be prompted for your sudo password." msgstr "" -#: ../../kde4/settingsdialog.py:379 ../../gnome/settingsdialog.glade:1310 +#: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Inkludér" -#: ../../kde4/settingsdialog.py:403 ../../kde4/settingsdialog.py:445 -#: ../../gnome/settingsdialog.glade:1411 +#: ../../qt4/settingsdialog.py:381 +msgid "Include files and folders" +msgstr "" + +#: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "Tilføj fil" -#: ../../kde4/settingsdialog.py:408 ../../kde4/settingsdialog.py:450 -#: ../../gnome/settingsdialog.glade:1427 +#: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Tilføj mappe" -#: ../../kde4/settingsdialog.py:418 ../../gnome/settingsdialog.glade:1474 +#: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Ekskludér" -#: ../../kde4/settingsdialog.py:421 ../../gnome/settingsdialog.glade:1328 +#: ../../qt4/settingsdialog.py:417 msgid "" "Warning: Wildcards ('foo*', '[fF]oo', 'fo?') will be ignored with " "mode 'SSH encrypted'.\n" "Only separate asterisk are allowed ('foo/*', 'foo/**/bar')" msgstr "" -#: ../../kde4/settingsdialog.py:430 +#: ../../qt4/settingsdialog.py:425 +msgid "Exclude patterns, files or folders" +msgstr "" + +#: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "" -#: ../../kde4/settingsdialog.py:460 ../../gnome/settingsdialog.glade:1905 +#: ../../qt4/settingsdialog.py:463 +msgid "Add default" +msgstr "" + +#: ../../qt4/settingsdialog.py:474 +msgid "Exclude files bigger than: " +msgstr "" + +#: ../../qt4/settingsdialog.py:475 +#, python-format +msgid "" +"Exclude files bigger than value in %(prefix)s.\n" +"With 'Full rsync mode' disabled this will only affect new files\n" +"because for rsync this is a transfer option, not an exclude option.\n" +"So big files that has been backed up before will remain in snapshots\n" +"even if they had changed." +msgstr "" + +#: ../../qt4/settingsdialog.py:493 msgid "Auto-remove" msgstr "Auto-fjern" -#: ../../kde4/settingsdialog.py:464 ../../gnome/settingsdialog.glade:1608 +#: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "Ældre end:" -#: ../../kde4/settingsdialog.py:478 ../../gnome/settingsdialog.glade:1624 +#: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "Hvis fri plads er mindre end:" -#: ../../kde4/settingsdialog.py:490 ../../gnome/settingsdialog.glade:1642 +#: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" -#: ../../kde4/settingsdialog.py:514 ../../gnome/settingsdialog.glade:1697 +#: ../../qt4/settingsdialog.py:551 +msgid "Run in background on remote Host." +msgstr "" + +#: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "" -#: ../../kde4/settingsdialog.py:517 ../../kde4/settingsdialog.py:522 -#: ../../gnome/settingsdialog.glade:1705 ../../gnome/settingsdialog.glade:1729 +#: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "" -#: ../../kde4/settingsdialog.py:519 ../../gnome/settingsdialog.glade:1717 +#: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "" -#: ../../kde4/settingsdialog.py:524 ../../gnome/settingsdialog.glade:1743 +#: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "" -#: ../../kde4/settingsdialog.py:527 +#: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "" -#: ../../kde4/settingsdialog.py:529 ../../gnome/settingsdialog.glade:1769 +#: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "" -#: ../../kde4/settingsdialog.py:532 ../../gnome/settingsdialog.glade:1781 +#: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "" -#: ../../kde4/settingsdialog.py:534 ../../gnome/settingsdialog.glade:1795 +#: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "" -#: ../../kde4/settingsdialog.py:537 ../../gnome/settingsdialog.glade:1496 +#: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "Fjern ikke navngivne tilstands-billeder" -#: ../../kde4/settingsdialog.py:546 ../../gnome/settingsdialog.glade:2104 +#: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Indstillinger" -#: ../../kde4/settingsdialog.py:549 ../../gnome/settingsdialog.glade:1920 +#: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Aktivér bekendtgørelser" -#: ../../kde4/settingsdialog.py:552 ../../gnome/settingsdialog.glade:1937 +#: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "De-aktivér tilstands-billeder ved batteri-drift" -#: ../../kde4/settingsdialog.py:555 +#: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" msgstr "Strømstatus ikke tilgængelig fra system" -#: ../../kde4/settingsdialog.py:558 ../../gnome/settingsdialog.glade:1955 -msgid "Backup files on restore" +#: ../../qt4/settingsdialog.py:611 +msgid "Run only one snapshot at a time" msgstr "" -#: ../../kde4/settingsdialog.py:561 ../../gnome/settingsdialog.glade:1972 +#: ../../qt4/settingsdialog.py:612 +msgid "" +"Other snapshots will be blocked until the current snapshot is done.\n" +"This is a global option. So it will effect all profiles for this user.\n" +"But you need to activate this for all other users, too." +msgstr "" + +#: ../../qt4/settingsdialog.py:617 +msgid "Backup replaced files on restore" +msgstr "" + +#: ../../qt4/settingsdialog.py:618 +#, python-format +msgid "" +"Newer versions of files will be renamed with trailing '%(suffix)s' before " +"restoring.\n" +"If you don't need them anymore you can remove them with '%(cmd)s'" +msgstr "" + +#: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "" -#: ../../kde4/settingsdialog.py:564 ../../gnome/settingsdialog.glade:1989 +#: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "" -#: ../../kde4/settingsdialog.py:567 ../../gnome/settingsdialog.glade:2006 +#: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "" -#: ../../kde4/settingsdialog.py:568 ../../gnome/settingsdialog.glade:2032 +#: ../../qt4/settingsdialog.py:634 msgid "" -"- snapshots are no read-only\n" -"- destination file-system must support all linux attributes (dates, rights, " +"- snapshots are not read-only\n" +"- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" -#: ../../kde4/settingsdialog.py:575 ../../gnome/settingsdialog.glade:2045 +#: ../../qt4/settingsdialog.py:641 +msgid "Take a new snapshot regardless of there were changes or not." +msgstr "" + +#: ../../qt4/settingsdialog.py:644 msgid "Check for changes (don't take a new snapshot if nothing changed)" msgstr "" -#: ../../kde4/settingsdialog.py:582 +#: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "" -#: ../../kde4/settingsdialog.py:597 ../../gnome/settingsdialog.glade:2366 -msgid "Expert Options" -msgstr "Avancerede indstillinger" +#: ../../qt4/settingsdialog.py:656 +msgid "None" +msgstr "" + +#: ../../qt4/settingsdialog.py:658 +msgid "Changes & Errors" +msgstr "" -#: ../../kde4/settingsdialog.py:600 +#: ../../qt4/settingsdialog.py:674 msgid "Change these options only if you really know what you are doing !" msgstr "" -#: ../../kde4/settingsdialog.py:608 ../../gnome/settingsdialog.glade:2133 -msgid "Run 'nice' as cron job (default: enabled)" -msgstr "Kør 'nice' som cron-job (standard: aktiveret)" +#: ../../qt4/settingsdialog.py:678 +msgid "Run 'nice':" +msgstr "" + +#: ../../qt4/settingsdialog.py:684 ../../qt4/settingsdialog.py:696 +msgid "as cron job" +msgstr "" + +#: ../../qt4/settingsdialog.py:687 ../../qt4/settingsdialog.py:702 +#: ../../qt4/settingsdialog.py:716 +msgid "on remote host" +msgstr "" + +#: ../../qt4/settingsdialog.py:690 +msgid "Run 'ionice':" +msgstr "" + +#: ../../qt4/settingsdialog.py:699 +msgid "when taking a manual snapshot" +msgstr "" -#: ../../kde4/settingsdialog.py:611 ../../gnome/settingsdialog.glade:2150 -msgid "Run 'ionice' as cron job (default: enabled)" -msgstr "Kør 'ionice' som et cron-job (standard:aktiveret)" +#: ../../qt4/settingsdialog.py:706 +msgid "Run 'rsync' with 'nocache':" +msgstr "" -#: ../../kde4/settingsdialog.py:614 ../../gnome/settingsdialog.glade:2167 -msgid "Run 'ionice' when taking a manual snapshot (default: disabled)" +#: ../../qt4/settingsdialog.py:712 +msgid "on local machine" msgstr "" -#: ../../kde4/settingsdialog.py:617 ../../gnome/settingsdialog.glade:2184 -msgid "Run 'nice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:719 +msgid "Redirect stdout to /dev/null in cronjobs." msgstr "" -#: ../../kde4/settingsdialog.py:620 ../../gnome/settingsdialog.glade:2201 -msgid "Run 'ionice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:725 +msgid "Redirect stderr to /dev/null in cronjobs." msgstr "" -#: ../../kde4/settingsdialog.py:626 ../../gnome/settingsdialog.glade:2224 +#: ../../qt4/settingsdialog.py:734 msgid "Limit rsync bandwidth usage: " msgstr "" -#: ../../kde4/settingsdialog.py:629 ../../gnome/settingsdialog.glade:2259 +#: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" -#: ../../kde4/settingsdialog.py:634 ../../gnome/settingsdialog.glade:2280 +#: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "" -#: ../../kde4/settingsdialog.py:637 ../../gnome/settingsdialog.glade:2297 +#: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "" -#: ../../kde4/settingsdialog.py:640 ../../gnome/settingsdialog.glade:2314 +#: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute links)" msgstr "" -#: ../../kde4/settingsdialog.py:643 ../../gnome/settingsdialog.glade:2331 -msgid "Copy links (dereference symbolic links)" +#: ../../qt4/settingsdialog.py:834 +msgid "Paste additional options to rsync" msgstr "" -#: ../../kde4/snapshotsdialog.py:46 ../../kde4/snapshotsdialog.py:173 -#: ../../gnome/snapshotsdialog.glade:385 -msgid "Diff Options" -msgstr "Diff-indstillinger" - -#: ../../kde4/snapshotsdialog.py:56 ../../gnome/snapshotsdialog.glade:314 -msgid "Command:" -msgstr "Kommando:" - -#: ../../kde4/snapshotsdialog.py:60 ../../gnome/snapshotsdialog.glade:322 -msgid "Parameters:" -msgstr "Parametre:" - -#: ../../kde4/snapshotsdialog.py:64 ../../gnome/snapshotsdialog.glade:334 -msgid "Use %1 and %2 for path parameters" -msgstr "Brug %1 og %2 som sti-parametre" - -#: ../../kde4/snapshotsdialog.py:123 ../../gnome/snapshotsdialog.glade:184 -#: ../../gnome/snapshotsdialog.glade:186 -msgid "Delete" +#: ../../qt4/settingsdialog.py:837 +msgid "" +"Options must be quoted e.g. --exclude-from=\"/path/to/my exclude file\"." msgstr "" -#: ../../kde4/snapshotsdialog.py:128 ../../gnome/snapshotsdialog.glade:199 -#: ../../gnome/snapshotsdialog.glade:201 -msgid "Select All" +#: ../../qt4/settingsdialog.py:847 +msgid "Add prefix to SSH commands" msgstr "" -#: ../../kde4/snapshotsdialog.py:132 ../../gnome/snapshotsdialog.glade:88 -msgid "List only different snapshots" +#: ../../qt4/settingsdialog.py:850 +#, python-format +msgid "" +"Prefix to run before every command on remote host.\n" +"Variables need to be escaped with \\$FOO.\n" +"This doesn't touch rsync. So to add a prefix\n" +"for rsync use \"%(cb_rsync_options)s\" with\n" +"%(rsync_options_value)s\n" +"\n" +"%(default)s: %(def_value)s" msgstr "" -#: ../../kde4/snapshotsdialog.py:139 ../../gnome/snapshotsdialog.glade:110 -msgid "List only equal snapshots to: " +#: ../../qt4/settingsdialog.py:858 ../../qt4/settingsdialog.py:1691 +msgid "default" msgstr "" -#: ../../kde4/snapshotsdialog.py:149 ../../gnome/snapshotsdialog.glade:146 -msgid "Deep check (more accurate, but slow)" +#: ../../qt4/settingsdialog.py:875 +msgid "Restore Config" msgstr "" -#: ../../kde4/snapshotsdialog.py:174 -msgid "Go To" -msgstr "Gå til" - -#: ../../gnome/logviewdialog.glade:9 -msgid "Log View" +#: ../../qt4/settingsdialog.py:891 +msgid "" +"Full system backup can only create a snapshot to be restored to the same " +"physical disk(s) with the same disk partitioning as from the source; " +"restoring to new physical disks or the same disks with different " +"partitioning will yield a potentially broken and unusable system.\n" +"\n" +"Full system backup will override some settings that may have been " +"customized. Continue?" msgstr "" -#: ../../gnome/logviewdialog.glade:179 -msgid "scroll down automatic" -msgstr "" +#: ../../qt4/settingsdialog.py:922 +msgid "New profile" +msgstr "Ny profil" -#: ../../gnome/mainwindow.glade:7 -msgid "Back In Time" -msgstr "Tilbage i tiden" +#: ../../qt4/settingsdialog.py:938 +msgid "Rename profile" +msgstr "Omdøb profil" -#: ../../gnome/mainwindow.glade:45 -msgid "Backup Now" -msgstr "Sikkerhedskopiér nu" +#: ../../qt4/settingsdialog.py:952 +#, python-format +msgid "Are you sure you want to delete the profile \"%s\" ?" +msgstr "Er du sikker på at du vil slette profilen \"%s\" ?" -#: ../../gnome/mainwindow.glade:171 -msgid "Shutdown" +#: ../../qt4/settingsdialog.py:1191 +msgid "" +"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " +"*/3 for periodic backups every 3 hours" msgstr "" -#: ../../gnome/mainwindow.glade:287 -msgid "Parent folder" -msgstr "Forældre-mappe" +#: ../../qt4/settingsdialog.py:1489 +msgid "Exclude pattern" +msgstr "Ekskludér mønster" + +#: ../../qt4/settingsdialog.py:1502 +msgid "Exclude file" +msgstr "Ekskludér fil" + +#: ../../qt4/settingsdialog.py:1506 +msgid "Exclude folder" +msgstr "Ekskludér mappe" -#: ../../gnome/mainwindow.glade:327 -msgid "Hidden files" -msgstr "Skjulte filer" +#: ../../qt4/settingsdialog.py:1525 +msgid "Include file" +msgstr "" -#: ../../gnome/mainwindow.glade:451 +#: ../../qt4/settingsdialog.py:1533 ../../qt4/settingsdialog.py:1553 +#, python-format msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +"\"%s\" is a symlink. The linked target will not be backed up until you " +"include it, too.\n" +"Would you like to include the symlinks target instead?" msgstr "" -#: ../../gnome/settingsdialog.glade:287 -msgid "Where to save snapshots" -msgstr "Hvor skal tilstands-billedet gemmes" +#: ../../qt4/settingsdialog.py:1545 +msgid "Include folder" +msgstr "Inkludér mapper" -#: ../../gnome/settingsdialog.glade:483 -msgid "Private key:" -msgstr "" +#: ../../qt4/settingsdialog.py:1572 +msgid "Are you sure you want to change snapshots folder ?" +msgstr "Er du sikker på du ønsker at skifte tilstands-billede-mappe ?" -#: ../../gnome/settingsdialog.glade:534 -msgid "Advanced SSH Settings" +#: ../../qt4/settingsdialog.py:1688 +msgid "enabled" msgstr "" -#: ../../gnome/settingsdialog.glade:552 -msgid "SSH Settings" +#: ../../qt4/settingsdialog.py:1690 +msgid "disabled" msgstr "" -#: ../../gnome/settingsdialog.glade:815 -msgid "Password" +#: ../../qt4/settingsdialog.py:1715 +msgid "Restore Settings" msgstr "" -#: ../../gnome/settingsdialog.glade:930 -msgid "Profile Id:" +#: ../../qt4/settingsdialog.py:1732 +msgid " and add your user to group 'fuse'" msgstr "" -#: ../../gnome/settingsdialog.glade:1115 +#: ../../qt4/settingsdialog.py:1736 +#, python-format msgid "" -"hours seperate by comma ( e.g. 8,12,18,23) or */3 for periodic backups every " -"3 hours (cron style)" +"Please navigate to the snapshot from which you want to restore %(appName)s's " +"configuration. The path may look like: \n" +"%(samplePath)s\n" +"\n" +"If your snapshots are on a remote drive or if they are encrypted you need to " +"manually mount them first. If you use Mode SSH you also may need to set up " +"public key login to the remote host%(addFuse)s.\n" +"Take a look at 'man backintime'." msgstr "" -#: ../../gnome/settingsdialog.glade:1163 -msgid "Schedule" -msgstr "Planlæg" +#: ../../qt4/settingsdialog.py:1794 ../../qt4/settingsdialog.py:1854 +msgid "No config found" +msgstr "" + +#: ../../qt4/snapshotsdialog.py:49 ../../qt4/snapshotsdialog.py:173 +msgid "Diff Options" +msgstr "Diff-indstillinger" + +#: ../../qt4/snapshotsdialog.py:56 +msgid "Command:" +msgstr "Kommando:" + +#: ../../qt4/snapshotsdialog.py:60 +msgid "Parameters:" +msgstr "Parametre:" + +#: ../../qt4/snapshotsdialog.py:64 +msgid "Use %1 and %2 for path parameters" +msgstr "Brug %1 og %2 som sti-parametre" + +#: ../../qt4/snapshotsdialog.py:106 +msgid "List only different snapshots" +msgstr "" -#: ../../gnome/settingsdialog.glade:1363 -msgid "Highly recommended:" +#: ../../qt4/snapshotsdialog.py:113 +msgid "List only equal snapshots to: " msgstr "" -#: ../../gnome/settingsdialog.glade:1377 -msgid "label" +#: ../../qt4/snapshotsdialog.py:123 +msgid "Deep check (more accurate, but slow)" msgstr "" -#: ../../gnome/settingsdialog.glade:1755 -msgid "week(s)" +#: ../../qt4/snapshotsdialog.py:144 +msgid "Delete" msgstr "" -#: ../../gnome/settingsdialog.glade:2069 -msgid "Log level:" +#: ../../qt4/snapshotsdialog.py:148 +msgid "Select All" msgstr "" -#: ../../gnome/settingsdialog.glade:2121 +#: ../../qt4/snapshotsdialog.py:161 +msgid "Diff" +msgstr "Diff" + +#: ../../qt4/snapshotsdialog.py:172 +msgid "Go To" +msgstr "Gå til" + +#: ../../qt4/snapshotsdialog.py:326 +msgid "You can't compare a snapshot to itself" +msgstr "Du kan ikke sammenligne et tilstands-billede med sig selv" + +#: ../../qt4/snapshotsdialog.py:333 +#, python-format +msgid "Command not found: %s" +msgstr "Kommando ikke fundet: %s" + +#: ../../qt4/snapshotsdialog.py:354 +#, python-format msgid "" -"Change these options only if you really know what you are doing !" +"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" msgstr "" -#: ../../gnome/snapshotsdialog.glade:263 -msgid "Diff with" -msgstr "Diff med" +#: ../../qt4/snapshotsdialog.py:357 +#, python-format +msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +msgstr "" -#: ../../gnome/textinputdialog.glade:7 -msgid "Pattern" -msgstr "Mønster" +#: ../../qt4/snapshotsdialog.py:359 +msgid "WARNING: This can not be revoked!" +msgstr "" -#: ../../gnome/textinputdialog.glade:70 -msgid "Text" +#: ../../qt4/snapshotsdialog.py:374 +#, python-format +msgid "Exclude \"%s\" from future snapshots?" msgstr "" diff -Nru backintime-1.0.36/common/po/de.po backintime-1.1.12/common/po/de.po --- backintime-1.0.36/common/po/de.po 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/po/de.po 2016-01-11 18:07:58.000000000 +0000 @@ -6,293 +6,339 @@ msgstr "" "Project-Id-Version: Back In Time 0.9.5\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-11-09 22:34+0100\n" -"PO-Revision-Date: 2014-05-27 17:01+0000\n" +"POT-Creation-Date: 2015-12-19 00:47+0100\n" +"PO-Revision-Date: 2015-12-22 14:04+0000\n" "Last-Translator: Tobias Bannert \n" "Language-Team: German/Germany \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2014-08-06 10:19+0000\n" -"X-Generator: Launchpad (build 17147)\n" +"X-Launchpad-Export-Date: 2016-01-11 17:52+0000\n" +"X-Generator: Launchpad (build 17881)\n" -#: ../../common/configfile.py:253 ../../common/configfile.py:315 +#: ../../common/configfile.py:352 ../../common/configfile.py:414 #, python-format msgid "Profile \"%s\" already exists !" -msgstr "Profil \"%s\" existiert bereits !" +msgstr "Profil »%s« besteht bereits!" -#: ../../common/config.py:72 +#: ../../common/configfile.py:60 +#, python-format +msgid "Failed to save config: %s" +msgstr "Speichern der Konfiguration ist fehlgeschlagen: %s" + +#: ../../common/configfile.py:78 +#, python-format +msgid "Failed to load config: %s" +msgstr "Laden der Konfiguration ist fehlgeschlagen: %s" + +#: ../../common/configfile.py:383 +msgid "You can't remove the last profile !" +msgstr "Das letzte Profil kann nicht entfernt werden!" + +#: ../../common/config.py:76 msgid "Disabled" msgstr "Deaktiviert" -#: ../../common/config.py:73 +#: ../../common/config.py:77 msgid "At every boot/reboot" msgstr "Bei jedem Start/Neustart" -#: ../../common/config.py:74 +#: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Alle 5 Minuten" -#: ../../common/config.py:75 +#: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Alle 10 Minuten" -#: ../../common/config.py:76 +#: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "Alle 30 Minuten" -#: ../../common/config.py:77 +#: ../../common/config.py:81 msgid "Every hour" msgstr "Jede Stunde" -#: ../../common/config.py:78 +#: ../../common/config.py:82 msgid "Every 2 hours" msgstr "Alle 2 Stunden" -#: ../../common/config.py:79 +#: ../../common/config.py:83 msgid "Every 4 hours" msgstr "Alle 4 Stunden" -#: ../../common/config.py:80 +#: ../../common/config.py:84 msgid "Every 6 hours" msgstr "Alle 6 Stunden" -#: ../../common/config.py:81 +#: ../../common/config.py:85 msgid "Every 12 hours" msgstr "Alle 12 Stunden" -#: ../../common/config.py:82 +#: ../../common/config.py:86 msgid "Custom Hours" msgstr "Benutzerdefinierte Stunden" -#: ../../common/config.py:83 +#: ../../common/config.py:87 msgid "Every Day" msgstr "Jeden Tag" -#: ../../common/config.py:84 -msgid "Daily (anacron)" -msgstr "Täglich (anacron)" +#: ../../common/config.py:88 +msgid "Repeatedly (anacron)" +msgstr "Wiederholend (anacron)" -#: ../../common/config.py:85 +#: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "Sobald die Festplatte angeschlossen ist (udev)" -#: ../../common/config.py:86 +#: ../../common/config.py:90 msgid "Every Week" msgstr "Jede Woche" -#: ../../common/config.py:87 +#: ../../common/config.py:91 msgid "Every Month" msgstr "Jeden Monat" -#: ../../common/config.py:91 +#: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Tag(e)" -#: ../../common/config.py:92 +#: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Woche(n)" -#: ../../common/config.py:93 +#: ../../common/config.py:97 msgid "Year(s)" msgstr "Jahr(e)" -#: ../../common/config.py:100 +#: ../../common/config.py:101 +msgid "Hour(s)" +msgstr "Stunde(n)" + +#: ../../common/config.py:104 +msgid "Month(s)" +msgstr "Monat(e)" + +#: ../../common/config.py:126 ../../qt4/settingsdialog.py:551 msgid " EXPERIMENTAL!" -msgstr " EXPERIMENTEL!" +msgstr " EXPERIMENTELL!" -#: ../../common/config.py:103 +#: ../../common/config.py:129 msgid "Local" msgstr "Lokal" -#: ../../common/config.py:104 +#: ../../common/config.py:130 msgid "SSH" msgstr "SSH" -#: ../../common/config.py:104 ../../common/config.py:106 -#: ../../gnome/settingsdialog.py:475 ../../kde4/settingsdialog.py:1325 +#: ../../common/config.py:130 ../../common/config.py:132 +#: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "Privater SSH-Schlüssel" -#: ../../common/config.py:105 +#: ../../common/config.py:131 msgid "Local encrypted" msgstr "Lokal verschlüsselt" -#: ../../common/config.py:105 ../../common/config.py:106 +#: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "Verschlüsselung" -#: ../../common/config.py:106 +#: ../../common/config.py:132 msgid "SSH encrypted" msgstr "SSH verschlüsselt" -#: ../../common/config.py:112 +#: ../../common/config.py:135 msgid "Default" msgstr "Standard" -#: ../../common/config.py:113 +#: ../../common/config.py:136 msgid "AES128-CTR" msgstr "AES128-CTR" -#: ../../common/config.py:114 +#: ../../common/config.py:137 msgid "AES192-CTR" msgstr "AES192-CTR" -#: ../../common/config.py:115 +#: ../../common/config.py:138 msgid "AES256-CTR" msgstr "AES256-CTR" -#: ../../common/config.py:116 +#: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "ARCFOUR256" -#: ../../common/config.py:117 +#: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "ARCFOUR128" -#: ../../common/config.py:118 +#: ../../common/config.py:141 msgid "AES128-CBC" msgstr "AES128-CBC" -#: ../../common/config.py:119 +#: ../../common/config.py:142 msgid "3DES-CBC" msgstr "3DES-CBC" -#: ../../common/config.py:120 +#: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "Blowfish-CBC" -#: ../../common/config.py:121 +#: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "Cast128-CBC" -#: ../../common/config.py:122 +#: ../../common/config.py:145 msgid "AES192-CBC" msgstr "AES192-CBC" -#: ../../common/config.py:123 +#: ../../common/config.py:146 msgid "AES256-CBC" msgstr "AES256-CBC" -#: ../../common/config.py:124 +#: ../../common/config.py:147 msgid "ARCFOUR" msgstr "ARCFOUR" -#: ../../common/config.py:129 +#: ../../common/config.py:153 msgid "Main profile" msgstr "Hauptprofil" -#: ../../common/config.py:256 ../../common/config.py:275 -#: ../../common/config.py:286 ../../common/config.py:291 +#: ../../common/config.py:289 ../../common/config.py:296 +#: ../../common/config.py:307 ../../common/config.py:312 +#: ../../qt4/qt4systrayicon.py:61 #, python-format msgid "Profile: \"%s\"" -msgstr "Profil: \"%s\"" +msgstr "Profil: »%s«" -#: ../../common/config.py:256 +#: ../../common/config.py:289 msgid "Snapshots folder is not valid !" -msgstr "Snapshot-Ordner ist ungültig!" +msgstr "Schnappschussordner ist ungültig!" -#: ../../common/config.py:275 +#: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "Wenigstens einen Ordner zum Sichern auswählen!" -#: ../../common/config.py:286 +#: ../../common/config.py:307 msgid "You can't include backup folder !" -msgstr "Backup-Ordner kann nicht hinzugefügt werden!" +msgstr "Sicherungsordner kann nicht hinzugefügt werden!" -#: ../../common/config.py:291 +#: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" -msgstr "Unterordner des Backup-Ordners kann nicht hinzugefügt werden!" +msgstr "Sicherungsunterordner kann nicht hinzugefügt werden!" -#: ../../common/config.py:361 +#: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s ist kein Ordner!" -#: ../../common/config.py:376 ../../common/config.py:389 +#: ../../common/config.py:380 +msgid "Host/User/Profile-ID must not be empty!" +msgstr "Rechner/Benutzer/Profil darf nicht leer sein!" + +#: ../../common/config.py:388 ../../common/config.py:420 #, python-format msgid "" "Can't write to: %s\n" "Are you sure you have write access ?" msgstr "" -"Kann nach %s nicht schreiben\n" -"Ist Schreibzugriff möglich?" +"Nach %s kann nicht geschrieben werden.\n" +"Sind Sie sicher, dass Sie Schreibzugriff haben?" -#: ../../common/config.py:1286 +#: ../../common/config.py:400 +#, python-format msgid "" -"Can't find crontab.\n" -"Are you sure cron is installed ?\n" -"If not you should disable all automatic backups." +"Destination filesystem for '%(path)s' is formatted with FAT which doesn't " +"support hard-links. Please use a native Linux filesystem." msgstr "" -"Crontab wurde nicht gefunden!\n" -"Sind Sie sicher, dass cron installiert ist?\n" -"Wenn nicht, sollten Sie alle automatischen Backups deaktivieren!" - -#: ../../common/config.py:1338 -#, python-format -msgid "Schedule udev doesn't work with mode %s" -msgstr "Der udev Zeitplan funktioniert nicht mit dem Modus %s" +"Das Zieldateisystem für »%(path)s« ist mit FAT formatiert, welches harte " +"Verknüpfungen nicht unterstützt. Bitte benutzen Sie ein echtes Linux-" +"Dateisystem." -#: ../../common/config.py:1342 +#: ../../common/config.py:405 #, python-format -msgid "Couldn't find UUID for \"%s\"" -msgstr "Konnte UUID für \"%s\" nicht finden." +msgid "" +"Destination filsystem for '%(path)s' is a SMB mounted share. Please make " +"sure the remote SMB server supports symlinks or activate '%(copyLinks)s' in " +"'%(expertOptions)s'." +msgstr "" +"Das Zieldateisystem für »%(path)s« ist eine eingehängte SMB-Freigabe. Bitte " +"stellen Sie sicher, dass der entfernte SMB-Server symbolische Verknüpfungen " +"unterstützt oder aktivieren Sie »%(copyLinks)s« in »%(expertOptions)s«." -#: ../../common/config.py:1379 -msgid "Failed to remove udev rules" -msgstr "Löschen der udev Regeln fehlgeschlagen." +#: ../../common/config.py:408 ../../qt4/settingsdialog.py:815 +msgid "Copy links (dereference symbolic links)" +msgstr "Verknüpfungen kopieren (symbolische Verknüpfungen zurückverfolgen)" -#: ../../common/config.py:1385 -msgid "Failed to create udev rules" -msgstr "Hinzufügen der udev Regeln fehlgeschlagen." +#: ../../common/config.py:409 ../../qt4/settingsdialog.py:669 +msgid "Expert Options" +msgstr "Einstellungen für Experten" -#: ../../common/config.py:1420 +#: ../../common/config.py:411 +#, python-format msgid "" -"Can't find anacron.\n" -"Are you sure anacron is installed ?\n" -"If not you should disable daily anacron backups." +"Destination filesystem for '%(path)s is a sshfs mounted share. sshfs doesn't " +"support hard-links. Please use mode 'SSH' instead." msgstr "" -"Anacron wurde nicht gefunden!\n" -"Sind Sie sicher, dass anacron installiert ist?\n" -"Wenn nicht, sollten Sie alle täglichen anacron Backups deaktivieren!" +"Das Zieldateisystem für »%(path)s« ist eine eingehängte sshfs-Freigabe. " +"sshfs unterstützt keine harten Verknüpfungen. Bitte benutzen Sie stattdessen " +"den SSH-Modus." -#: ../../common/config.py:1439 -msgid "Please provide your sudo password to install the udev rule." +#: ../../common/config.py:1407 +msgid "" +"Can't find crontab.\n" +"Are you sure cron is installed ?\n" +"If not you should disable all automatic backups." msgstr "" -"Bitte geben Sie Ihr Sudo-Passwort an um die Udev-Regel zu installieren." +"Crontab wurde nicht gefunden!\n" +"Sind Sie sicher, dass cron installiert ist?\n" +"Wenn nicht, sollten Sie alle automatischen Sicherungen deaktivieren!" -#: ../../common/config.py:1445 -msgid "Please provide your sudo password to remove unused udev rules." +#: ../../common/config.py:1411 +msgid "Failed to write new crontab." +msgstr "Schreiben eines neuen crontab ist fehlgeschlagen." + +#: ../../common/config.py:1505 +#, python-format +msgid "" +"Could not install Udev rule for profile %(profile_id)s. DBus Service " +"'%(dbus_interface)s' wasn't available" msgstr "" -"Bitte geben Sie Ihr Sudo-Passwort an, um überflüssige Udev-Regeln zu " -"entfernen." +"udev-Regel für Profil %(profile_id)s konnte nicht erstellt werden. DBus-" +"Dienst »%(dbus_interface)s« war nicht verfügbar." -#: ../../common/configfile.py:284 -msgid "You can't remove the last profile !" -msgstr "Das letzte Profil kann nicht entfernt werden!" +#: ../../common/config.py:1517 +#, python-format +msgid "Schedule udev doesn't work with mode %s" +msgstr "udev-Zeitplan funktioniert nicht mit Modus %s" -#: ../../common/encfstools.py:95 +#: ../../common/config.py:1526 +#, python-format +msgid "Couldn't find UUID for \"%s\"" +msgstr "UUID für »%s« konnte nicht gefunden werden" + +#: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" "\n" "%(error)s" msgstr "" -"'%(command)s' kann nicht eingebunden werden:\n" +"»%(command)s« kann nicht eingehängt werden:\n" "\n" "%(error)s" -#: ../../common/encfstools.py:105 +#: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "encfs %s kann nicht ausgehängt werden" -#: ../../common/encfstools.py:149 +#: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "Einstellungen für den verschlüsselten Ordner nicht gefunden." -#: ../../common/encfstools.py:153 +#: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" @@ -300,110 +346,113 @@ "\n" "Soll ein neuer verschlüsselter Ordner erstellt werden?" -#: ../../common/encfstools.py:154 +#: ../../common/encfstools.py:171 msgid "Cancel" msgstr "Abbruch" -#: ../../common/encfstools.py:157 +#: ../../common/encfstools.py:174 msgid "Please confirm password" -msgstr "Bitte Passwort bestätigen" +msgstr "Bitte Passwort bestätigen." -#: ../../common/encfstools.py:161 +#: ../../common/encfstools.py:178 msgid "Password doesn't match" -msgstr "Passwort stimmt nicht überein" +msgstr "Passwort stimmt nicht überein." -#: ../../common/encfstools.py:166 +#: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" -"encfs wurde nicht gefunden. Bitte installiere es z.B. mit 'apt-get install " -"encfs'" +"encfs wurde nicht gefunden. Bitte z.B. mit »apt-get install encfs« " +"installieren." -#: ../../common/encfstools.py:174 ../../common/sshtools.py:207 +#: ../../common/encfstools.py:196 ../../common/sshtools.py:262 #, python-format msgid "" "%(user)s is not member of group 'fuse'.\n" " Run 'sudo adduser %(user)s fuse'. To apply changes logout and login again.\n" "Look at 'man backintime' for further instructions." msgstr "" -"%(user)s ist kein Mitglied der Gruppe 'fuse'.\n" -"Führe bitte 'sudo adduser %(user)s fuse' aus. Um die Änderungen anzuwenden " -"muss sich einmal aus- und wieder eingeloggt werden.\n" -"Weitere Informationen unter 'man backintime'." +"%(user)s ist kein Mitglied der Gruppe »fuse«.\n" +"Bitte »sudo adduser %(user)s fuse« ausführen. Zum Anwenden der Änderungen " +"bitte einmal ab- und wieder anmelden.\n" +"Weitere Informationen unter »man backintime«." -#: ../../common/encfstools.py:189 +#: ../../common/encfstools.py:211 msgid "" "encfs version 1.7.2 and before has a bug with option --reverse. Please " "update encfs" msgstr "" -"encfs Version 1.7.2 und davor haben einen Fehler mit der Option --reverse. " -"Bitte aktualisiere encfs" +"encfs-Version 1.7.2 und davor haben einen Fehler mit der Option --reverse. " +"Bitte encfs aktualisieren." -#: ../../common/encfstools.py:453 ../../common/encfstools.py:480 -#: ../../common/snapshots.py:982 ../../common/snapshots.py:1288 -#: ../../kde4/app.py:82 ../../gnome/mainwindow.glade:43 +#: ../../common/encfstools.py:512 ../../common/snapshots.py:1131 +#: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" -msgstr "Snapshot erstellen" +msgstr "Schnappschuss erstellen" -#: ../../common/mount.py:195 +#: ../../common/mount.py:204 #, python-format msgid "" "Hash collision occurred in hash_id %s. Incrementing global value " "hash_collision and try again." msgstr "" -"Prüfsummen Kollision in hash_id %s. Der globale Wert für hash_collision wird " +"Prüfsummenkollision in hash_id %s. Der globale Wert für hash_collision wird " "heraufgesetzt und erneut versucht." -#: ../../common/mount.py:246 +#: ../../common/mount.py:259 #, python-format msgid "mountpoint %s not empty." msgstr "Einhängepunkt %s ist nicht leer." -#: ../../common/mount.py:286 +#: ../../common/mount.py:296 msgid "Mountprocess lock timeout" -msgstr "Zeitüberschreitung beim einhängen." +msgstr "Zeitüberschreitung beim Einhängen." -#: ../../common/password.py:425 +#: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " -msgstr "Profil '%(profile)s': Passwort für %(mode)s eingeben: " +msgstr "Profil »%(profile)s«: Bitte Passwort für %(mode)s eingeben: " -#: ../../common/snapshots.py:171 ../../gnome/app.py:1127 -#: ../../kde4/app.py:1014 +#: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Jetzt" -#: ../../common/snapshots.py:182 ../../gnome/gnometools.py:37 +#: ../../common/snapshots.py:196 msgid "WITH ERRORS !" -msgstr "MIT FEHLERN !" +msgstr "MIT FEHLERN!" -#: ../../common/snapshots.py:282 +#: ../../common/snapshots.py:344 msgid "" "### This log has been decoded with automatic search pattern\n" "### If some paths are not decoded you can manually decode them with:\n" msgstr "" -"### Dieser Log wurde entschlüsselt mit automatischen Suchmustern.\n" -"### Wenn einige Dateinamen nicht entschlüsselt wurden können sie manuell " +"### Dieses Protokoll wurde mit automatischen Suchmustern entschlüsselt.\n" +"### Wenn einige Dateinamen nicht entschlüsselt wurden, können sie manuell " "entschlüsselt werden mit:\n" -#: ../../common/snapshots.py:465 +#: ../../common/snapshots.py:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "GESCHEITERT" -#: ../../common/snapshots.py:564 +#: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "Berechtigungen wiederherstellen:" -#: ../../common/snapshots.py:739 +#: ../../common/snapshots.py:752 ../../qt4/app.py:377 ../../qt4/app.py:675 +#: ../../qt4/app.py:692 ../../qt4/qt4systrayicon.py:65 +msgid "Done" +msgstr "Fertig" + +#: ../../common/snapshots.py:860 msgid "" "Back In Time changed its backup format.\n" "\n" "Your old snapshots can be moved according to this new format. OK?" msgstr "" -"Back In Time hat sein Backup-Format geändert\n" +"»Back In Time« hat sein Sicherungsformat geändert.\n" "\n" -"Ihre alten Snapshots können ins neue Format überführt werden. Ok?" +"Ihre alten Schnappschüsse können in das neue Format überführt werden. OK?" -#: ../../common/snapshots.py:749 +#: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" @@ -415,21 +464,22 @@ msgstr "" "%s Profile gefunden. \n" "\n" -"Das neue Backup-Format unterstützt das Speichern verschiedener Benutzer und " -"Profile am gleichen Ort. Wünschen Sie den gleichen Ort für beide Profile? \n" +"Das neue Sicherungsformat unterstützt das Speichern verschiedener Benutzer " +"und Profile am gleichen Ort. Wünschen Sie den gleichen Ort für beide " +"Profile? \n" "\n" "(Das Programm ist weiterhin in der Lage, zwischen beiden Profilen zu " "unterscheiden)" -#: ../../common/snapshots.py:752 +#: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" msgstr "" "Kein Profil gefunden. Aktualisierung auf Profile notwendig. Dazu bitte Back " -"In Time neu starten" +"In Time neu starten." -#: ../../common/snapshots.py:803 +#: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" @@ -442,15 +492,16 @@ "cannot continue taking snapshots" msgstr "" "%(snapshots_left)s\n" -"des Profils %(profile_id)s wurden nicht an den neuen Speicherort verschoben\n" +"des Profils %(profile_id)s wurden nicht an den neuen Speicherort " +"verschoben.\n" "Möchten Sie fortfahren?\n" -"(Back In Time kann mit den Snapshots fortfahren, jedoch werden die " -"verbliebenen Snapshots nicht automatisch entfernt)\n" +"(»Back In Time« kann mit dem Erstellen von Schnappschüssen fortfahren, " +"jedoch werden die restlichen Schnappschüsse nicht automatisch entfernt.)\n" "\n" -"Andernfalls stellt Back In Time den vorigen Zustand dieses Profils wieder " -"her, kann aber keine Snapshots mehr anlegen." +"Andernfalls stellt »Back In Time« den vorherigen Zustand dieses Profils " +"wieder her, kann aber keine Schnappschüsse mehr anlegen." -#: ../../common/snapshots.py:812 +#: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" @@ -459,13 +510,13 @@ "You can manually move the snapshots, \n" "if you are done restart Back In Time to proceed" msgstr "" -"Voriger Zustand des Profils %s wurde wiederhergestellt.\n" -"Back in Time kann mit dem Erstellen von Snapshots nicht fortfahren.\n" +"Vorheriger Zustand des Profils %s wurde wiederhergestellt.\n" +"»Back In Time« kann mit dem Erstellen von Schnappschüssen nicht fortfahren.\n" "\n" -"Sie können die Snapshots manuell verschieben, \n" -"wenn Sie fertig sind, starten Sie Back In Time neu." +"Sie können die Schnappschüsse manuell verschieben.\n" +"Wenn Sie fertig sind, bitte »Back In Time« neustarten." -#: ../../common/snapshots.py:825 +#: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" @@ -473,9 +524,9 @@ msgstr "" "Aktualisierung erfolgreich!\n" "\n" -"Back In Time wird weiterhin Snapshots, wie eingeplant, erstellen." +"»Back In Time« wird weiterhin, wie geplant, Schnappschüsse erstellen." -#: ../../common/snapshots.py:830 +#: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" @@ -486,148 +537,162 @@ "\n" "If you do not, you will be asked again next time you start Back In Time." msgstr "" -"Sind Sie sicher, dass Sie Ihre alten Snapshots nicht verschieben möchten?\n" +"Sind Sie sicher, dass Sie Ihre alten Schnappschüsse nicht verschieben " +"möchten?\n" "\n" "\n" -"Falls ja, werden diese Fragen künftig nicht mehr angezeigt, Back In Time " -"fährt mit den Snapshots fort, aber smart-remove kann Ihre alten Snapshots " -"nicht mehr berücksichtigen.\n" +"Falls ja, werden diese Fragen künftig nicht mehr angezeigt, »Back In Time« " +"fährt mit dem Erstellen von Schnappschüssen fort, aber smart-remove kann " +"Ihre alten Schnappschüsse nicht mehr berücksichtigen.\n" "\n" -"Falls nicht, werden Sie beim nächsten Start von Back in Time erneut gefragt" +"Falls nicht, werden Sie beim nächsten Start von »Back in Time« erneut " +"gefragt." -#: ../../common/snapshots.py:839 +#: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" -msgstr "Back In Time fährt wieder fort wie geplant Snapshots zu erzeugen" +msgstr "" +"»Back In Time« fährt wieder fort, wie geplant, Schnappschüsse zu erstellen." -#: ../../common/snapshots.py:841 +#: ../../common/snapshots.py:953 msgid "" "Back In Time still cannot continue taking new snapshots.\n" "Restart Back In Time to see the questions again" msgstr "" -"Back In Time kann immer noch keine neuen Snapshots anfertigen.\n" -"Starten Sie Back In Time neu um die Fragen erneut zu sehen" +"»Back In Time« kann immer noch keine neuen Schnappschüsse erstellen.\n" +"Starten Sie »Back In Time« neu, um die Fragen erneut zu sehen." + +#: ../../common/snapshots.py:972 +msgid "Deferring backup while on battery" +msgstr "Sicherungen verschieben, solange der Rechner im Akkubetrieb ist." -#: ../../common/snapshots.py:913 +#: ../../common/snapshots.py:1035 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it." msgstr "" -"Snapshot-Ordner wurde nicht gefunden.\n" -"Falls nötig, bitte Wechsellaufwerk verbinden!" +"Schnappschussordner konnte nicht gefunden werden.\n" +"Wenn es ein Wechsellaufwerk ist, bitte verbinden!" -#: ../../common/snapshots.py:915 +#: ../../common/snapshots.py:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." -msgstr[0] "Warte %s Sekunde." -msgstr[1] "Warte %s Sekunden." +msgstr[0] "%s Sekunde wird gewartet." +msgstr[1] "%s Sekunden wird gewartet." -#: ../../common/snapshots.py:941 +#: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" -msgstr "Konnte Snapshot %s nicht erstellen !!!" +msgstr "Schnappschuss %s konnte nicht erstellt werden!" -#: ../../common/snapshots.py:950 +#: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "Finalisierung läuft" -#: ../../common/snapshots.py:1088 +#: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" -msgstr "Kann Ordner %s nicht anlegen." +msgstr "Ordner %s kann nicht erstellt werden." -#: ../../common/snapshots.py:1107 +#: ../../common/snapshots.py:1217 msgid "..." msgstr "…" -#: ../../common/snapshots.py:1134 +#: ../../common/snapshots.py:1238 +#, python-format +msgid "Found leftover '%s' which can be continued." +msgstr "Überbleibsel »%s« gefunden, welche fortgesetzt werden können." + +#: ../../common/snapshots.py:1250 +#, python-format +msgid "Remove leftover '%s' folder from last run" +msgstr "Übrig gebliebenen Ordner »%s« vom letzten Vorgang entfernen" + +#: ../../common/snapshots.py:1263 #, python-format msgid "Can't remove folder: %s" -msgstr "Kann Ordner %s nicht löschen." +msgstr "Ordner %s kann nicht entfernt werden." -#: ../../common/snapshots.py:1219 +#: ../../common/snapshots.py:1340 #, python-format msgid "Compare with snapshot %s" -msgstr "Vergleiche mit Snapshot %s" +msgstr "Mit Schnappschuss %s vergleichen" -#: ../../common/snapshots.py:1248 +#: ../../common/snapshots.py:1360 msgid "Create hard-links" -msgstr "Erstelle Hardlinks" +msgstr "Harte Verknüpfungen erstellen" -#: ../../common/snapshots.py:1335 +#: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "Einstellungen speichern …" -#: ../../common/snapshots.py:1341 +#: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "Zugriffsrechte speichern …" -#: ../../common/snapshots.py:1442 +#: ../../common/snapshots.py:1470 +msgid "Save permission over ssh failed. Retry normal method" +msgstr "" +"Speichern der Zugriffsrechte über ssh ist fehlgeschlagen. Erneuter Versuch " +"mit normaler Methode." + +#: ../../common/snapshots.py:1521 #, python-format msgid "Can't rename %(new_path)s to %(path)s" -msgstr "Umbenennen von %(new_path)s in %(path)s fehlgeschlagen" - -#: ../../common/snapshots.py:1562 -msgid "Remove old snapshots" -msgstr "Alte Schnappschüsse entfernen" +msgstr "Umbenennen von %(new_path)s in %(path)s fehlgeschlagen." -#: ../../common/snapshots.py:1586 ../../kde4/settingsdialog.py:501 -#: ../../gnome/settingsdialog.glade:1660 +#: ../../common/snapshots.py:1695 ../../common/snapshots.py:1728 +#: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "intelligentes Löschen" -#: ../../common/snapshots.py:1591 +#: ../../common/snapshots.py:1704 +msgid "Remove old snapshots" +msgstr "Alte Schnappschüsse entfernen" + +#: ../../common/snapshots.py:1733 msgid "Try to keep min free space" -msgstr "Versuche das Minimum an freien Speicher frei zu halten" +msgstr "Das Minimum an freiem Speicher frei halten." -#: ../../common/snapshots.py:1621 +#: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" -msgstr "Versuche mindestens %d%% freie inodes zu behalten." +msgstr "Versuchen mindestens %d%% freie Inodes zu behalten." -#: ../../common/sshtools.py:106 +#: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" -msgstr "Kann %s nicht einbinden" +msgstr "%s kann nicht eingebunden werden" -#: ../../common/sshtools.py:113 +#: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" -msgstr "Kann sshfs %s nicht entfernen" - -#: ../../common/sshtools.py:187 -#, python-format -msgid "" -"Failed to unlock SSH private key:\n" -"Error: %s" -msgstr "" -"Kann privaten SSH-Schlüssel nicht entsperren:\n" -"Fehler: %s" +msgstr "sshfs-%s kann nicht ausgehängt werden" -#: ../../common/sshtools.py:194 +#: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" -"Entsperren des privaten SSH Schlüssels fehlgeschlagen. Falsches Passwort " -"oder das Passwort war nicht verfügbar für cron." +"Privater SSH-Schlüssel konnte nicht entsperrt werden. Passwort falsch oder " +"für cron nicht verfügbar." -#: ../../common/sshtools.py:199 +#: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" -"sshfs wurde nicht gefunden. Bitte installiere es, zum Beispiel durch 'apt-" -"get install sshfs'." +"sshfs wurde nicht gefunden. Bitte installieren, z.B. durch »apt-get install " +"sshfs«." -#: ../../common/sshtools.py:217 +#: ../../common/sshtools.py:278 #, python-format msgid "" "Password-less authentication for %(user)s@%(host)s failed. Look at 'man " "backintime' for further instructions." msgstr "" -"Passwort-lose Anmeldung von %(user)s@%(host)s fehlgeschlagen. Weitere " -"Informationen unter 'man backintime'." +"Passwortlose Anmeldung von %(user)s@%(host)s fehlgeschlagen. Weitere " +"Informationen unter »man backintime«." -#: ../../common/sshtools.py:229 +#: ../../common/sshtools.py:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" @@ -636,12 +701,12 @@ "Verschlüsselungsverfahren %(cipher)s fehlgeschlagen für %(host)s:\n" "%(err)s" -#: ../../common/sshtools.py:254 +#: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "%s nicht in ssh_known_hosts gefunden." -#: ../../common/sshtools.py:274 +#: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" @@ -650,7 +715,7 @@ "Der Pfad existiert auf dem entfernten Rechner, ist aber kein Verzeichnis:\n" "%s" -#: ../../common/sshtools.py:276 +#: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" @@ -659,7 +724,7 @@ "Der Pfad auf dem entfernten Rechner ist nicht beschreibbar:\n" "%s" -#: ../../common/sshtools.py:278 +#: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" @@ -668,7 +733,7 @@ "Der Pfad auf dem entfernten Rechner ist nicht ausführbar:\n" "%s" -#: ../../common/sshtools.py:280 +#: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" @@ -677,885 +742,1055 @@ "Erstellen des Pfades auf dem entfernten Rechner fehlgeschlagen:\n" "%s" -#: ../../common/sshtools.py:302 +#: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" "Ping %s fehlgeschlagen. Rechner ist ausgeschaltet oder hat eine falsche " "Adresse." -#: ../../common/sshtools.py:325 ../../common/sshtools.py:383 +#: ../../common/sshtools.py:423 ../../common/sshtools.py:553 #, python-format msgid "" "Remote host %(host)s doesn't support '%(command)s':\n" "%(err)s\n" "Look at 'man backintime' for further instructions" msgstr "" -"Entfernter Rechner %(host)s unterstützt '%(command)s' nicht:\n" +"Entfernter Rechner %(host)s unterstützt »%(command)s« nicht:\n" "%(err)s\n" -"Weitere Informationen unter 'man backintime'." +"Weitere Informationen unter »man backintime«." -#: ../../common/sshtools.py:387 +#: ../../common/sshtools.py:556 #, python-format msgid "" "Check commands on host %(host)s returned unknown error:\n" "%(err)s\n" "Look at 'man backintime' for further instructions" msgstr "" -"Überprüfen der Befehle auf dem Rechner %(host)s ist mit unbekanntem Fehler " -"fehlgeschlagen:\n" +"Überprüfen der Befehle auf dem Rechner %(host)s gab unbekanntem Fehler " +"zurück:\n" "%(err)s\n" -"Weitere Informationen unter 'man backintime'." +"Weitere Informationen unter »man backintime«." -#: ../../common/sshtools.py:400 +#: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" -msgstr "Der entfernte Rechner %s unterstützt keine Hardlinks" +msgstr "Der entfernte Rechner %s unterstützt keine harten Verknüpfungen" -#: ../../gnome/app.py:185 ../../gnome/app.py:594 ../../gnome/app.py:608 -#: ../../kde4/app.py:299 ../../kde4/app.py:570 ../../kde4/app.py:587 -msgid "Done" -msgstr "Fertig" +#: ../../qt4/app.py:81 +msgid "Refresh snapshots list" +msgstr "Schnappschussliste auffrischen" + +#: ../../qt4/app.py:85 ../../qt4/app.py:890 +msgid "Snapshot Name" +msgstr "Schnappschussname" + +#: ../../qt4/app.py:88 +msgid "Remove Snapshot" +msgstr "Schnappschuss entfernen" + +#: ../../qt4/app.py:91 +msgid "View Snapshot Log" +msgstr "Schnappschussprotokoll ansehen" + +#: ../../qt4/app.py:94 +msgid "View Last Log" +msgstr "Letztes Protokoll ansehen" -#: ../../gnome/app.py:189 ../../kde4/app.py:143 ../../kde4/app.py:159 -#: ../../gnome/mainwindow.glade:225 +#: ../../qt4/app.py:99 ../../qt4/settingsdialog.py:51 +msgid "Settings" +msgstr "Einstellungen" + +#: ../../qt4/app.py:104 +msgid "Shutdown" +msgstr "Herunterfahren" + +#: ../../qt4/app.py:105 +msgid "Shutdown system after snapshot has finished." +msgstr "Rechner herunterfahren, nachdem der Schnappschuss erstellt wurde." + +#: ../../qt4/app.py:111 +msgid "Exit" +msgstr "Beenden" + +#: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 msgid "Help" msgstr "Hilfe" -#: ../../gnome/app.py:191 ../../kde4/app.py:146 -#: ../../gnome/mainwindow.glade:223 +#: ../../qt4/app.py:122 +msgid "Config File Help" +msgstr "Konfigurationsdateihilfe" + +#: ../../qt4/app.py:125 msgid "Website" -msgstr "Webseite" +msgstr "Internetseite" + +#: ../../qt4/app.py:127 ../../qt4/app.py:982 +msgid "Changelog" +msgstr "Änderungsprotokoll" -#: ../../gnome/app.py:192 ../../kde4/app.py:148 +#: ../../qt4/app.py:129 msgid "FAQ" msgstr "Häufige Fragen (FAQ)" -#: ../../gnome/app.py:193 ../../kde4/app.py:150 +#: ../../qt4/app.py:131 msgid "Ask a question" msgstr "Frage stellen" -#: ../../gnome/app.py:194 ../../kde4/app.py:152 +#: ../../qt4/app.py:133 msgid "Report a bug" msgstr "Fehlerbericht einsenden" -#: ../../gnome/app.py:196 ../../kde4/app.py:155 +#: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "Über" -#: ../../gnome/app.py:202 ../../gnome/app.py:887 -#: ../../gnome/restoredialog.py:84 ../../gnome/snapshotsdialog.py:83 -#: ../../gnome/snapshotsdialog.py:244 ../../kde4/app.py:206 -#: ../../kde4/app.py:216 ../../kde4/restoredialog.py:68 -#: ../../kde4/snapshotsdialog.py:111 ../../kde4/snapshotsdialog.py:117 -#: ../../gnome/mainwindow.glade:350 ../../gnome/mainwindow.glade:352 -#: ../../gnome/snapshotsdialog.glade:169 ../../gnome/snapshotsdialog.glade:171 +#: ../../qt4/app.py:163 +msgid "Up" +msgstr "Hoch" + +#: ../../qt4/app.py:174 ../../qt4/settingsdialog.py:1776 +msgid "Show hidden files" +msgstr "Versteckte Dateien anzeigen" + +#: ../../qt4/app.py:184 ../../qt4/app.py:199 ../../qt4/app.py:233 +#: ../../qt4/restoredialog.py:62 ../../qt4/settingsdialog.py:1818 +#: ../../qt4/snapshotsdialog.py:134 ../../qt4/snapshotsdialog.py:139 msgid "Restore" msgstr "Wiederherstellen" -#: ../../gnome/app.py:203 ../../gnome/app.py:888 ../../gnome/gnometools.py:67 -#: ../../gnome/snapshotsdialog.py:84 ../../gnome/snapshotsdialog.py:245 -#: ../../kde4/app.py:208 ../../kde4/restoredialog.py:42 -#: ../../kde4/snapshotsdialog.py:113 +#: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 +#: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "Wiederherstellen zu …" -#: ../../gnome/app.py:205 ../../gnome/app.py:896 ../../gnome/app.py:1146 -#: ../../kde4/app.py:1041 -#, python-format -msgid "Restore '%s'" -msgstr "»%s« wiederherstellen" +#: ../../qt4/app.py:194 +msgid "Restore and delete new files" +msgstr "Wiederherstellen und neuere Dateien löschen" -#: ../../gnome/app.py:207 ../../gnome/app.py:897 ../../gnome/app.py:1147 -#: ../../kde4/app.py:1042 +#: ../../qt4/app.py:201 #, python-format -msgid "Restore '%s' to ..." -msgstr "»%s« wiederherstellen zu …" +msgid "" +"Restore selected file or folder.\n" +"If this button is grayed out this is most likely because \"%(now)s\" is " +"selected in left hand snapshots list." +msgstr "" +"Stellt die ausgewählte Datei oder den Ordner wieder her.\n" +"Wenn dieser Knopf deaktiviert ist, liegt das vermutlich daran, dass " +"»%(now)s« in der linken Schnappschussliste aktiviert ist." + +#: ../../qt4/app.py:206 ../../qt4/logviewdialog.py:67 +#: ../../qt4/qt4tools.py:160 ../../qt4/snapshotsdialog.py:96 +msgid "Snapshots" +msgstr "Schnappschuss" + +#: ../../qt4/app.py:213 +msgid "Snapshot" +msgstr "Schnappschuss" -#: ../../gnome/app.py:226 ../../kde4/app.py:235 +#: ../../qt4/app.py:224 +msgid "View" +msgstr "Ansicht" + +#: ../../qt4/app.py:277 msgid "Shortcuts" msgstr "Verknüpfungen" -#: ../../gnome/app.py:249 -msgid "Name" -msgstr "Name" - -#: ../../gnome/app.py:260 -msgid "Size" -msgstr "Größe" - -#: ../../gnome/app.py:267 -msgid "Date" -msgstr "Datum" - -#: ../../gnome/app.py:286 ../../gnome/app.py:883 -#: ../../gnome/snapshotsdialog.py:116 ../../kde4/app.py:171 -#: ../../kde4/app.py:221 ../../kde4/snapshotsdialog.py:91 -#: ../../gnome/mainwindow.glade:366 ../../gnome/mainwindow.glade:368 -#: ../../gnome/snapshotsdialog.glade:8 -msgid "Snapshots" -msgstr "Snapshots" +#: ../../qt4/app.py:295 +msgid "" +"This folder doesn't exist\n" +"in the current selected snapshot!" +msgstr "" +"Dieser Ordner ist im aktuell ausgewählten\n" +"Schnappschuss nicht vorhanden!" + +#: ../../qt4/app.py:359 +msgid "Add to Include" +msgstr "Einbeziehen" -#: ../../gnome/app.py:348 ../../kde4/app.py:362 +#: ../../qt4/app.py:360 +msgid "Add to Exclude" +msgstr "Ausschließen" + +#: ../../qt4/app.py:416 +#, python-format +msgid "" +"%(appName)s is not configured. Would you like to restore a previous " +"configuration?" +msgstr "" +"%(appName)s ist noch nicht konfiguriert. Möchten Sie vorherige Einstellungen " +"wiederherstellen?" + +#: ../../qt4/app.py:440 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it and then press OK" msgstr "" -"Snapshot-Ordner wurde nicht gefunden.\n" -"Falls nötig, bitte Wechsellaufwerk verbinden und OK drücken" +"Schnappschussordner wurde nicht gefunden.\n" +"Wenn es ein Wechsellaufwerk ist, bitte verbinden und dann OK drücken." -#: ../../gnome/app.py:611 ../../kde4/app.py:590 -msgid "Done, no backup needed" -msgstr "Fertig, kein Backup notwendig" +#: ../../qt4/app.py:473 +msgid "" +"If you close this window Back In Time will not be able to shutdown your " +"system when the snapshot has finished.\n" +"Do you really want to close?" +msgstr "" +"Wenn Sie das Fenster schließen, kann »Back In Time« den Rechner nicht " +"herunterfahren, sobald die Sicherung beendet ist.\n" +"Wirklich schließen?" -#: ../../gnome/app.py:619 ../../kde4/app.py:598 +#: ../../qt4/app.py:667 ../../qt4/app.py:703 msgid "Working:" msgstr "In Bearbeitung:" -#: ../../gnome/app.py:623 ../../kde4/app.py:602 +#: ../../qt4/app.py:695 +msgid "Done, no backup needed" +msgstr "Fertig, keine Sicherung notwendig." + +#: ../../qt4/app.py:707 msgid "Error:" msgstr "Fehler:" -#: ../../gnome/app.py:636 ../../kde4/app.py:649 +#: ../../qt4/app.py:726 ../../qt4/qt4systrayicon.py:153 +msgid "Sent:" +msgstr "Gesendet:" + +#: ../../qt4/app.py:727 ../../qt4/qt4systrayicon.py:154 +msgid "Speed:" +msgstr "Geschwindigkeit:" + +#: ../../qt4/app.py:728 ../../qt4/qt4systrayicon.py:155 +msgid "ETA:" +msgstr "Verbleibend:" + +#: ../../qt4/app.py:777 msgid "Global" msgstr "Global" -#: ../../gnome/app.py:637 ../../kde4/app.py:650 +#: ../../qt4/app.py:778 msgid "Root" msgstr "Wurzelverzeichnis" -#: ../../gnome/app.py:638 ../../kde4/app.py:651 +#: ../../qt4/app.py:779 msgid "Home" msgstr "Persönlicher Ordner" -#: ../../gnome/app.py:662 -msgid "Bookmarks" -msgstr "Lesezeichen" - -#: ../../gnome/app.py:675 ../../kde4/app.py:662 +#: ../../qt4/app.py:794 msgid "Backup folders" -msgstr "Backup-Ordner" +msgstr "Sicherungsordner" -#: ../../gnome/app.py:701 ../../kde4/app.py:734 -msgid "Today" -msgstr "Heute" - -#: ../../gnome/app.py:705 ../../kde4/app.py:738 -msgid "Yesterday" -msgstr "Gestern" - -#: ../../gnome/app.py:709 ../../kde4/app.py:742 -msgid "This week" -msgstr "Diese Woche" - -#: ../../gnome/app.py:713 ../../kde4/app.py:746 -msgid "Last week" -msgstr "Letzte Woche" - -#: ../../gnome/app.py:764 ../../kde4/app.py:398 -msgid "" -"If you close this window Back In Time will not be able to shutdown your " -"system when the snapshot has finished.\n" -"Do you really want to close?" +#: ../../qt4/app.py:849 +msgid "This is NOT a snapshot but a live view of your local files" msgstr "" -"Wenn Sie das Fenster schließen, kann Back In Time den Rechner nicht " -"herunterfahren, sobald das Backup beendet ist.\n" -"Wirklich schließen?" - -#: ../../gnome/app.py:881 ../../gnome/snapshotsdialog.py:238 -msgid "Open" -msgstr "Öffnen" +"Das hier ist KEIN Schnappschuss, aber eine aktuellen Ansicht Ihrer lokalen " +"Daten." -#: ../../gnome/app.py:1056 ../../kde4/app.py:90 ../../kde4/app.py:805 -#: ../../gnome/mainwindow.glade:73 ../../gnome/mainwindow.glade:75 -msgid "Snapshot Name" -msgstr "Snapshot Name" +#: ../../qt4/app.py:860 ../../qt4/app.py:1476 +#, python-format +msgid "Last check %s" +msgstr "Letzte Überprüfung %s" -#: ../../gnome/app.py:1075 +#: ../../qt4/app.py:928 #, python-format msgid "" "Are you sure you want to remove the snapshot:\n" -"%s" +"%s" msgstr "" -"Sind Sie sicher, dass Sie den Snapshot löschen wollen:\n" -"%s?" - -#: ../../gnome/app.py:1123 ../../kde4/app.py:1010 -#, python-format -msgid "Snapshot: %s" -msgstr "Snapshot: %s" +"Sind Sie sicher, dass Sie den Schnappschuss löschen wollen:\n" +"%s" -#: ../../gnome/app.py:1124 ../../kde4/app.py:1011 +#: ../../qt4/app.py:1004 #, python-format -msgid "View the snapshot made at %s" -msgstr "Zeige den Snapshot von %s" - -#: ../../gnome/app.py:1126 ../../kde4/app.py:1013 -msgid "View the current disk content" -msgstr "Zeige den aktuellen Festplatteninhalt" - -#: ../../gnome/logviewdialog.py:106 ../../gnome/settingsdialog.py:414 -#: ../../kde4/logviewdialog.py:83 ../../kde4/settingsdialog.py:590 -msgid "All" -msgstr "Alle(s)" - -#: ../../gnome/logviewdialog.py:107 ../../gnome/settingsdialog.py:412 -#: ../../kde4/logviewdialog.py:84 ../../kde4/settingsdialog.py:588 -msgid "Errors" -msgstr "Fehler" - -#: ../../gnome/logviewdialog.py:112 ../../kde4/logviewdialog.py:89 -msgid "Changes" -msgstr "Änderungen" - -#: ../../gnome/logviewdialog.py:115 ../../kde4/logviewdialog.py:92 -msgid "Informations" -msgstr "Informationen" - -#: ../../gnome/settingsdialog.py:235 ../../kde4/settingsdialog.py:387 -msgid "Include files and folders" -msgstr "Dateien und Verzeichnisse mit einbeziehen" - -#: ../../gnome/settingsdialog.py:264 -msgid "Exclude patterns, files or folders" -msgstr "Ausschlussmuster, Dateien oder Ordner" - -#: ../../gnome/settingsdialog.py:411 ../../kde4/settingsdialog.py:587 -msgid "None" -msgstr "Kein(e)" - -#: ../../gnome/settingsdialog.py:413 ../../kde4/settingsdialog.py:589 -msgid "Changes & Errors" -msgstr "Änderungen & Fehler" - -#: ../../gnome/settingsdialog.py:458 -msgid "Snapshots folder" -msgstr "Snapshot Ordner" +msgid "" +"Backup local files before overwriting or\n" +"removing with trailing '%(suffix)s'." +msgstr "" +"Lokale Dateien vor dem Überschreiben oder entfernen\n" +"sichern mit angehängtem »%(suffix)s«." -#: ../../gnome/settingsdialog.py:466 ../../kde4/settingsdialog.py:1314 -msgid "Are you sure you want to change snapshots folder ?" -msgstr "Sind Sie sicher, dass Sie den Snapshot-Ordner ändern wollen?" +#: ../../qt4/app.py:1010 +msgid "" +"Are you sure you want to remove all newer files in your original folder?" +msgstr "" +"Sind Sie sicher, dass Sie alle neueren Dateien in dem Ursprungsordner " +"löschen möchten?" -#: ../../gnome/settingsdialog.py:901 ../../kde4/settingsdialog.py:914 +#: ../../qt4/app.py:1014 msgid "" -"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " -"*/3 for periodic backups every 3 hours" +"WARNING: deleting files in filesystem root could break your whole system!!!" msgstr "" -"Benutzerdefinierte Stunden muss eine Liste von Stunden per Komma getrennt " -"(z.B. 8,12,18,23) oder */3 für wiederholte Backups alle 3 Stunden sein" +"ACHTUNG: das Löschen von Dateien im Wurzelverzeichnis kann das komplette " +"System zerstören!!!" -#: ../../gnome/settingsdialog.py:1141 ../../kde4/settingsdialog.py:653 -msgid "New profile" -msgstr "Neues Profil" +#: ../../qt4/app.py:1016 +msgid "Files to be restored:" +msgstr "Wiederherzustellende Dateien:" -#: ../../gnome/settingsdialog.py:1155 ../../kde4/settingsdialog.py:669 -msgid "Rename profile" -msgstr "Profil umbenennen" +#: ../../qt4/app.py:1031 +msgid "Do you really want to restore this files(s):" +msgstr "Möchten Sie wirklich diese Datei(en) wiederherstellen:" -#: ../../gnome/settingsdialog.py:1167 ../../kde4/settingsdialog.py:683 +#: ../../qt4/app.py:1226 #, python-format -msgid "Are you sure you want to delete the profile \"%s\" ?" -msgstr "Wollen sie wirklich das Profil \"%s\" löschen ?" - -#: ../../gnome/settingsdialog.py:1173 ../../kde4/settingsdialog.py:1292 -msgid "Include folder" -msgstr "Ordner einbeziehen" - -#: ../../gnome/settingsdialog.py:1193 ../../kde4/settingsdialog.py:1278 -msgid "Include file" -msgstr "Datei einbeziehen" - -#: ../../gnome/settingsdialog.py:1235 ../../kde4/settingsdialog.py:1241 -msgid "Exclude pattern" -msgstr "Ausschlussmuster" - -#: ../../gnome/settingsdialog.py:1240 ../../kde4/settingsdialog.py:1251 -msgid "Exclude patterns can't contain ':' char !" -msgstr "Ausschlußmuster kann nicht \":\" enthalten!" - -#: ../../gnome/settingsdialog.py:1246 ../../kde4/settingsdialog.py:1257 -msgid "Exclude file" -msgstr "Datei ausschließen" - -#: ../../gnome/settingsdialog.py:1257 ../../kde4/settingsdialog.py:1261 -msgid "Exclude folder" -msgstr "Ordner ausschließen" - -#: ../../gnome/snapshotsdialog.py:240 -msgid "Jump to" -msgstr "Gehe zu" +msgid "Snapshot: %s" +msgstr "Schnappschuss: %s" -#: ../../gnome/snapshotsdialog.py:248 ../../kde4/snapshotsdialog.py:164 -msgid "Diff" -msgstr "Unterschiede" +#: ../../qt4/app.py:1227 +#, python-format +msgid "View the snapshot made at %s" +msgstr "Den Schnappschuss vom %s anzeigen" -#: ../../gnome/snapshotsdialog.py:277 ../../kde4/snapshotsdialog.py:339 -msgid "You can't compare a snapshot to itself" -msgstr "Sie können keinen Snapshot mit sich selbst vergleichen" +#: ../../qt4/app.py:1229 +msgid "View the current disk content" +msgstr "Den aktuellen Festplatteninhalt anzeigen" -#: ../../gnome/snapshotsdialog.py:284 ../../kde4/snapshotsdialog.py:346 +#: ../../qt4/app.py:1268 #, python-format -msgid "Command not found: %s" -msgstr "Befehl nicht gefunden: %s" +msgid "Restore '%s'" +msgstr "»%s« wiederherstellen" -#: ../../gnome/snapshotsdialog.py:307 ../../kde4/snapshotsdialog.py:367 +#: ../../qt4/app.py:1269 #, python-format -msgid "" -"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" -msgstr "" -"Soll \"%(file)s\" wirklich in dem Snapshot \"%(snapshot_id)s\" gelöscht " -"werden?\n" +msgid "Restore '%s' to ..." +msgstr "»%s« wiederherstellen zu …" -#: ../../gnome/snapshotsdialog.py:310 ../../kde4/snapshotsdialog.py:370 +#: ../../qt4/app.py:1270 #, python-format -msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" -msgstr "Soll \"%(file)s\" wirklich in %(count)d Snapshots gelöscht werden?\n" +msgid "Restore '%s' and delete new files" +msgstr "»%s« wieder herstellen und neuere Dateien löschen" -#: ../../gnome/snapshotsdialog.py:312 ../../kde4/snapshotsdialog.py:372 -msgid "WARNING: This can not be revoked!" -msgstr "WARNUNG: Das kann nicht rückgängig gemacht werden!" +#: ../../qt4/app.py:1368 ../../qt4/app.py:1385 +msgid "Authors" +msgstr "Entwickler" -#: ../../gnome/snapshotsdialog.py:317 ../../kde4/snapshotsdialog.py:377 -#, python-format -msgid "Exclude \"%s\" from future snapshots?" -msgstr "\"%s\" von zukünftigen Snapshots ausschließen?" +#: ../../qt4/app.py:1369 ../../qt4/app.py:1388 +msgid "Translations" +msgstr "Übersetzungen" -#: ../../kde4/app.py:86 ../../gnome/mainwindow.glade:58 -#: ../../gnome/mainwindow.glade:60 -msgid "Refresh snapshots list" -msgstr "Snapshot-Liste aktualisieren" +#: ../../qt4/app.py:1370 ../../qt4/app.py:1391 +msgid "License" +msgstr "Lizenz" -#: ../../kde4/app.py:94 ../../gnome/mainwindow.glade:88 -#: ../../gnome/mainwindow.glade:90 -msgid "Remove Snapshot" -msgstr "Entferne Snapshot" +#: ../../qt4/logviewdialog.py:49 +msgid "Last Log View" +msgstr "Letzte Protokollansicht" -#: ../../kde4/app.py:98 ../../gnome/mainwindow.glade:105 -msgid "View Snapshot Log" -msgstr "Snapshot-Log betrachten" +#: ../../qt4/logviewdialog.py:51 +msgid "Snapshot Log View" +msgstr "Schnappschussprotokollansicht" -#: ../../kde4/app.py:102 ../../gnome/mainwindow.glade:121 -msgid "View Last Log" -msgstr "Letzte Log-Einträge ansehen" +#: ../../qt4/logviewdialog.py:59 ../../qt4/settingsdialog.py:59 +#: ../../qt4/settingsdialog.py:274 ../../qt4/settingsdialog.py:1899 +msgid "Profile:" +msgstr "Profil:" -#: ../../kde4/app.py:108 ../../kde4/settingsdialog.py:69 -#: ../../gnome/mainwindow.glade:144 ../../gnome/mainwindow.glade:146 -#: ../../gnome/settingsdialog.glade:7 -msgid "Settings" -msgstr "Einstellungen" +#: ../../qt4/logviewdialog.py:81 +msgid "Filter:" +msgstr "Filter:" -#: ../../kde4/app.py:124 ../../gnome/mainwindow.glade:169 -msgid "Shutdown system after snapshot has finished." -msgstr "Rechner herunterfahren nachdem das Backup beendet ist." +#: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 +msgid "All" +msgstr "Alle(s)" -#: ../../kde4/app.py:131 ../../gnome/mainwindow.glade:184 -#: ../../gnome/mainwindow.glade:186 -msgid "Exit" -msgstr "Beenden" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 +#: ../../qt4/settingsdialog.py:657 +msgid "Errors" +msgstr "Fehler" -#: ../../kde4/app.py:186 ../../gnome/mainwindow.glade:289 -msgid "Up" -msgstr "Hoch" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 +msgid "Changes" +msgstr "Änderungen" -#: ../../kde4/app.py:199 ../../gnome/mainwindow.glade:325 -msgid "Show hidden files" -msgstr "Zeige verborgene Dateien" +#: ../../qt4/logviewdialog.py:92 +msgid "Informations" +msgstr "Informationen" -#: ../../kde4/app.py:244 -msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +#: ../../qt4/logviewdialog.py:101 +msgid "[E] Error, [I] Information, [C] Change" msgstr "" -"Dieser Ordner existiert nicht\n" -"im aktuellen Schnappschuss!" +"[E] Fehler (error), [I] Information (information), [C] Änderung (change)" -#: ../../kde4/app.py:839 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" -msgstr "" -"Sind Sie sicher, dass Sie den Snapshot löschen wollen:\n" -"%s" +#: ../../qt4/logviewdialog.py:104 +msgid "decode paths" +msgstr "Pfade entschlüsseln" + +#: ../../qt4/messagebox.py:56 +msgid "Error" +msgstr "Fehler" + +#: ../../qt4/messagebox.py:62 ../../qt4/messagebox.py:68 +msgid "Question" +msgstr "Frage" + +#: ../../qt4/qt4systrayicon.py:69 +msgid "Start BackInTime" +msgstr "BackInTime starten" -#: ../../kde4/app.py:1140 ../../kde4/kde4systrayicon.py:117 +#: ../../qt4/qt4systrayicon.py:124 msgid "Working..." msgstr "Wird bearbeitet …" -#: ../../kde4/logviewdialog.py:55 -msgid "Error Log View" -msgstr "Fehlerlog ansehen" - -#: ../../kde4/logviewdialog.py:65 ../../kde4/settingsdialog.py:79 -#: ../../kde4/settingsdialog.py:293 ../../gnome/logviewdialog.glade:73 -#: ../../gnome/settingsdialog.glade:72 -msgid "Profile:" -msgstr "Profil:" +#: ../../qt4/qt4tools.py:178 +msgid "Today" +msgstr "Heute" -#: ../../kde4/logviewdialog.py:77 ../../gnome/logviewdialog.glade:110 -msgid "Filter:" -msgstr "Filter:" +#: ../../qt4/qt4tools.py:183 +msgid "Yesterday" +msgstr "Gestern" -#: ../../kde4/logviewdialog.py:100 ../../gnome/logviewdialog.glade:169 -msgid "[E] Error, [I] Information, [C] Change" -msgstr "" -"[E] Fehler (error), [I] Information (information), [C] Änderung (change)" +#: ../../qt4/qt4tools.py:188 +msgid "This week" +msgstr "Diese Woche" -#: ../../kde4/logviewdialog.py:103 ../../gnome/logviewdialog.glade:195 -msgid "decode paths" -msgstr "Dateinamen entschlüsseln" +#: ../../qt4/qt4tools.py:193 +msgid "Last week" +msgstr "Letzte Woche" + +#: ../../qt4/restoredialog.py:75 +msgid "Show full Log" +msgstr "Komplettes Protokoll anzeigen" -#: ../../kde4/settingsdialog.py:88 +#: ../../qt4/settingsdialog.py:68 msgid "Edit" msgstr "Bearbeiten" -#: ../../kde4/settingsdialog.py:106 ../../gnome/settingsdialog.glade:1207 +#: ../../qt4/settingsdialog.py:73 +msgid "Modify for Full System Backup" +msgstr "Für vollständige Systemsicherung verändern" + +#: ../../qt4/settingsdialog.py:77 ../../qt4/settingsdialog.py:451 +msgid "Add" +msgstr "Hinzufügen" + +#: ../../qt4/settingsdialog.py:81 ../../qt4/settingsdialog.py:408 +#: ../../qt4/settingsdialog.py:467 +msgid "Remove" +msgstr "Entfernen" + +#: ../../qt4/settingsdialog.py:96 msgid "General" msgstr "Allgemein" -#: ../../kde4/settingsdialog.py:114 ../../gnome/settingsdialog.glade:199 +#: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "Modus:" -#: ../../kde4/settingsdialog.py:127 ../../kde4/settingsdialog.py:1311 +#: ../../qt4/settingsdialog.py:119 +#, python-format +msgid "" +"Warning: %(app)s uses EncFS for encryption. A recent security audit " +"revealed several possible attack vectors for this. Please take a look at 'A " +"NOTE ON SECURITY' in 'man backintime'." +msgstr "" +"ACHTUNG: %(app)s nutzt EncFS zur Verschlüsselung. Eine " +"Sicherheitsüberprüfung hat kürzlich mehrere mögliche Angriffsmethoden " +"aufgedeckt. Weitere Informationen im Kapitel »A NOTE ON SECURITY« unter »man " +"backintime«." + +#: ../../qt4/settingsdialog.py:129 ../../qt4/settingsdialog.py:1568 msgid "Where to save snapshots" msgstr "Speicherort für Schnappschüsse" -#: ../../kde4/settingsdialog.py:146 +#: ../../qt4/settingsdialog.py:145 +msgid "Folder" +msgstr "Ordner" + +#: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" -msgstr "SSH Einstellungen" +msgstr "SSH-Einstellungen" -#: ../../kde4/settingsdialog.py:158 ../../kde4/settingsdialog.py:283 -#: ../../gnome/settingsdialog.glade:323 ../../gnome/settingsdialog.glade:583 -#: ../../gnome/settingsdialog.glade:874 +#: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" -msgstr "Host:" +msgstr "Rechner:" -#: ../../kde4/settingsdialog.py:163 ../../gnome/settingsdialog.glade:350 -#: ../../gnome/settingsdialog.glade:610 +#: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "Port:" -#: ../../kde4/settingsdialog.py:168 ../../kde4/settingsdialog.py:288 -#: ../../gnome/settingsdialog.glade:377 ../../gnome/settingsdialog.glade:637 -#: ../../gnome/settingsdialog.glade:902 +#: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "Benutzer:" -#: ../../kde4/settingsdialog.py:173 ../../gnome/settingsdialog.glade:416 +#: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "Pfad:" -#: ../../kde4/settingsdialog.py:178 ../../gnome/settingsdialog.glade:459 +#: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "Verschlüsselung:" -#: ../../kde4/settingsdialog.py:184 +#: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "Privater Schlüssel:" -#: ../../kde4/settingsdialog.py:228 ../../kde4/settingsdialog.py:237 -#: ../../kde4/settingsdialog.py:243 ../../gnome/settingsdialog.glade:703 -#: ../../gnome/settingsdialog.glade:743 +#: ../../qt4/settingsdialog.py:201 +msgid "Key File" +msgstr "Schlüsseldatei" + +#: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 +#: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "Passwort" -#: ../../kde4/settingsdialog.py:249 ../../gnome/settingsdialog.glade:775 +#: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" -msgstr "Speichere Passwort im Schlüsselbund" +msgstr "Passwort im Schlüsselbund speicheren" -#: ../../kde4/settingsdialog.py:252 ../../gnome/settingsdialog.glade:792 +#: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" "Passwort für Cron zwischenspeichern (Sicherheitsproblem: root kann das " "Passwort lesen)" -#: ../../kde4/settingsdialog.py:264 ../../gnome/settingsdialog.glade:968 +#: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "Erweitert" -#: ../../kde4/settingsdialog.py:276 ../../gnome/settingsdialog.glade:848 -msgid "Auto Host / User / Profile Id" -msgstr "Automatisch Host / Benutzer / Profil Id" +#: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 +msgid "Full snapshot path: " +msgstr "Vollständiger Schnappschusspfad: " -#: ../../kde4/settingsdialog.py:301 +#: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "Zeitplan" -#: ../../kde4/settingsdialog.py:311 ../../gnome/settingsdialog.glade:1092 +#: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "Tag:" -#: ../../kde4/settingsdialog.py:322 ../../gnome/settingsdialog.glade:1079 +#: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "Wochentag:" -#: ../../kde4/settingsdialog.py:333 ../../gnome/settingsdialog.glade:1066 +#: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "Stunde:" -#: ../../kde4/settingsdialog.py:344 ../../gnome/settingsdialog.glade:1053 +#: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "Stunden:" -#: ../../kde4/settingsdialog.py:353 ../../gnome/settingsdialog.glade:1014 +#: ../../qt4/settingsdialog.py:339 msgid "" -"Run Back In Time periodically with anacron. This is useful if the computer " -"is not running regular." +"Run Back In Time repeatedly. This is useful if the computer is not running " +"regular." msgstr "" -"Starte Back In Time regelmäßig mit anacron. Das ist nützlich wenn der " -"Computer nicht ständig an ist." +"»Back In Time« wiederholt starten. Das ist nützlich, wenn der Rechner nicht " +"immer an ist." -#: ../../kde4/settingsdialog.py:357 ../../gnome/settingsdialog.glade:1040 -msgid "Frequency in days:" -msgstr "Frequenz in Tagen:" +#: ../../qt4/settingsdialog.py:344 +msgid "Every:" +msgstr "Jede:" -#: ../../kde4/settingsdialog.py:368 ../../gnome/settingsdialog.glade:1026 +#: ../../qt4/settingsdialog.py:362 msgid "" "Run Back In Time as soon as the drive is connected (only once every X " "days).\n" "You will be prompted for your sudo password." msgstr "" -"Starte Back In Time sobald die Festplatte angeschlossen wurde (nur einmal " -"alle X Tage).\n" -"Sie werden nach Ihrem sudo Passwort gefragt werden." +"»Back In Time« starten, sobald die Festplatte angeschlossen wurde (nur " +"einmal alle X Tage).\n" +"Sie werden nach Ihrem sudo-Passwort gefragt werden." -#: ../../kde4/settingsdialog.py:379 ../../gnome/settingsdialog.glade:1310 +#: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Einbeziehen" -#: ../../kde4/settingsdialog.py:403 ../../kde4/settingsdialog.py:445 -#: ../../gnome/settingsdialog.glade:1411 +#: ../../qt4/settingsdialog.py:381 +msgid "Include files and folders" +msgstr "Dateien und Ordner einbeziehen" + +#: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "Datei hinzufügen" -#: ../../kde4/settingsdialog.py:408 ../../kde4/settingsdialog.py:450 -#: ../../gnome/settingsdialog.glade:1427 +#: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Ordner hinzufügen" -#: ../../kde4/settingsdialog.py:418 ../../gnome/settingsdialog.glade:1474 +#: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Ausschließen" -#: ../../kde4/settingsdialog.py:421 ../../gnome/settingsdialog.glade:1328 +#: ../../qt4/settingsdialog.py:417 msgid "" "Warning: Wildcards ('foo*', '[fF]oo', 'fo?') will be ignored with " "mode 'SSH encrypted'.\n" "Only separate asterisk are allowed ('foo/*', 'foo/**/bar')" msgstr "" -"Warnung: Platzhalter ('foo*', '[fF]oo', 'fo?') werden ignoriert im " -"Modus 'SSH verschlüsselt'.\n" -"Nur einzeln stehende Sternchen sind erlaubt ('foo/*', 'foo/**/bar')" +"ACHTUNG: Platzhalter (»foo*«, »[fF]oo«, »fo?«) werden im Modus »SSH " +"verschlüsselt« ignoriert.\n" +"Nur einzeln stehende Sternchen sind erlaubt (»foo/*«, »foo/**/bar«)" + +#: ../../qt4/settingsdialog.py:425 +msgid "Exclude patterns, files or folders" +msgstr "Ausschlussmuster, Dateien oder Ordner" -#: ../../kde4/settingsdialog.py:430 +#: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "Dringend empfohlen:" -#: ../../kde4/settingsdialog.py:460 ../../gnome/settingsdialog.glade:1905 +#: ../../qt4/settingsdialog.py:463 +msgid "Add default" +msgstr "Voreinstellungen hinzufügen" + +#: ../../qt4/settingsdialog.py:474 +msgid "Exclude files bigger than: " +msgstr "Dateien ausschließen, die größer sind als: " + +#: ../../qt4/settingsdialog.py:475 +#, python-format +msgid "" +"Exclude files bigger than value in %(prefix)s.\n" +"With 'Full rsync mode' disabled this will only affect new files\n" +"because for rsync this is a transfer option, not an exclude option.\n" +"So big files that has been backed up before will remain in snapshots\n" +"even if they had changed." +msgstr "" +"Schließt Dateien aus, die größer als der Wert in %(prefix)s sind.\n" +"Wenn »Voller rsync-Modus« deaktiviert ist, wird das nur neue Dateien " +"betreffen,\n" +"weil das für rsync eine Transfervorgang ist, keine Ausschlussoption.\n" +"Das heißt, dass größere Dateien, die bereits zuvor gesichert wurden,\n" +"auch in neuen Schnappschüssen gesichert werden, selbst wenn sie verändert " +"wurden." + +#: ../../qt4/settingsdialog.py:493 msgid "Auto-remove" msgstr "Automatisch entfernen" -#: ../../kde4/settingsdialog.py:464 ../../gnome/settingsdialog.glade:1608 +#: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "Älter als:" -#: ../../kde4/settingsdialog.py:478 ../../gnome/settingsdialog.glade:1624 +#: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "Falls freier Speicher kleiner als:" -#: ../../kde4/settingsdialog.py:490 ../../gnome/settingsdialog.glade:1642 +#: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" -msgstr "Falls frei inodes kleiner als:" +msgstr "Falls freie Inodes kleiner sind als:" -#: ../../kde4/settingsdialog.py:514 ../../gnome/settingsdialog.glade:1697 +#: ../../qt4/settingsdialog.py:551 +msgid "Run in background on remote Host." +msgstr "Auf entferntem Rechner im Hintergrund ausführen." + +#: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" -msgstr "Behalte alle snapshots der letzten" +msgstr "Alle Schnappschüsse behalten, der letzten" -#: ../../kde4/settingsdialog.py:517 ../../kde4/settingsdialog.py:522 -#: ../../gnome/settingsdialog.glade:1705 ../../gnome/settingsdialog.glade:1729 +#: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "Tag(e)" -#: ../../kde4/settingsdialog.py:519 ../../gnome/settingsdialog.glade:1717 +#: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" -msgstr "Behalte einen snapshots pro Tag während der letzten" +msgstr "Einen Schnappschuss pro Tag behalten, der letzten" -#: ../../kde4/settingsdialog.py:524 ../../gnome/settingsdialog.glade:1743 +#: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" -msgstr "Behalte einen snapshots pro Woche während der letzten" +msgstr "Einen Schnappschuss pro Woche behalten, der letzten" -#: ../../kde4/settingsdialog.py:527 +#: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "Woche(n)" -#: ../../kde4/settingsdialog.py:529 ../../gnome/settingsdialog.glade:1769 +#: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" -msgstr "Behalte einen snapshots pro Monat während der letzten" +msgstr "Einen Schnappschuss pro Monat behalten, der letzten" -#: ../../kde4/settingsdialog.py:532 ../../gnome/settingsdialog.glade:1781 +#: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "Monat(e)" -#: ../../kde4/settingsdialog.py:534 ../../gnome/settingsdialog.glade:1795 +#: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" -msgstr "Behalte für jedes Jahr einen snapshot." +msgstr "Einen Schnappschuss pro Jahr behalten, für alle Jahre" -#: ../../kde4/settingsdialog.py:537 ../../gnome/settingsdialog.glade:1496 +#: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" -msgstr "Entferne benannte Snapshots nicht" +msgstr "Benannte Schnappschüsse nicht entfernen" -#: ../../kde4/settingsdialog.py:546 ../../gnome/settingsdialog.glade:2104 +#: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Optionen" -#: ../../kde4/settingsdialog.py:549 ../../gnome/settingsdialog.glade:1920 +#: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Benachrichtigungen aktivieren" -#: ../../kde4/settingsdialog.py:552 ../../gnome/settingsdialog.glade:1937 +#: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" -msgstr "Snapshots im Batteriebetrieb deaktivieren" +msgstr "Schnappschüsse im Akkubetrieb deaktivieren" -#: ../../kde4/settingsdialog.py:555 +#: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" -msgstr "Energiestatus des Systems nicht verfügbar" +msgstr "Energiestatus des Systems nicht verfügbar." + +#: ../../qt4/settingsdialog.py:611 +msgid "Run only one snapshot at a time" +msgstr "Nur einen Schnappschuss zur selben Zeit ausführen" -#: ../../kde4/settingsdialog.py:558 ../../gnome/settingsdialog.glade:1955 -msgid "Backup files on restore" -msgstr "Dateien beim Wiederherstellen sichern" +#: ../../qt4/settingsdialog.py:612 +msgid "" +"Other snapshots will be blocked until the current snapshot is done.\n" +"This is a global option. So it will effect all profiles for this user.\n" +"But you need to activate this for all other users, too." +msgstr "" +"Andere Schnappschüsse werden blockiert, bis der aktuelle Schnappschuss " +"fertiggestellt ist.\n" +"Das ist eine globale Option, die alle Profile dieses Benutzers betreffen " +"wird.\n" +"Die Option muss aber auch für alle anderen Benutzer aktiviert werden." + +#: ../../qt4/settingsdialog.py:617 +msgid "Backup replaced files on restore" +msgstr "Beim Wiederherstellen Dateien ersetzen" + +#: ../../qt4/settingsdialog.py:618 +#, python-format +msgid "" +"Newer versions of files will be renamed with trailing '%(suffix)s' before " +"restoring.\n" +"If you don't need them anymore you can remove them with '%(cmd)s'" +msgstr "" +"Neuere Dateiversionen werden mit einem angehängten »%(suffix)s« vor dem " +"Wiederherstellen umbenannt.\n" +"Wenn sie nicht mehr benötigt werden, können Sie sie mit »%(cmd)s« entfernen." -#: ../../kde4/settingsdialog.py:561 ../../gnome/settingsdialog.glade:1972 +#: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" -msgstr "Bei Fehlern fortfahren (unvollständige Snapshots behalten)" +msgstr "Bei Fehlern fortfahren (unvollständige Schnappschüsse behalten)" -#: ../../kde4/settingsdialog.py:564 ../../gnome/settingsdialog.glade:1989 +#: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" -msgstr "Benutze die Prüfsumme um Änderungen zu entdecken" +msgstr "Prüfsumme benutzen, um Änderungen zu erkennen" -#: ../../kde4/settingsdialog.py:567 ../../gnome/settingsdialog.glade:2006 +#: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" -msgstr "Voller rsync modus. Könnte schneller sein, aber:" +msgstr "Voller rsync-Modus. Könnte schneller sein, aber:" -#: ../../kde4/settingsdialog.py:568 ../../gnome/settingsdialog.glade:2032 +#: ../../qt4/settingsdialog.py:634 msgid "" -"- snapshots are no read-only\n" -"- destination file-system must support all linux attributes (dates, rights, " +"- snapshots are not read-only\n" +"- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" -"-snapshots sind nicht nur-lesen\n" -"-Zieldateisystem muss alle Linux Attribute unterstützen (Datum, Rechte, " -"Benutzer, Gruppe ...)" +"- Schnappschüsse können überschrieben werden.\n" +"- Zieldateisystem muss alle Linux-Attribute unterstützen (Datum, Rechte, " +"Benutzer, Gruppe, …)." + +#: ../../qt4/settingsdialog.py:641 +msgid "Take a new snapshot regardless of there were changes or not." +msgstr "Neuen Schnappschuss unabhängig von Änderungen erstellen." -#: ../../kde4/settingsdialog.py:575 ../../gnome/settingsdialog.glade:2045 +#: ../../qt4/settingsdialog.py:644 msgid "Check for changes (don't take a new snapshot if nothing changed)" msgstr "" -"Prüfe auf Änderungen (kein neuer snapshot falls sich nichts geändert hat)" +"Auf Änderungen prüfen (keinen neuen Schnappschuss erstellen, wenn sich " +"nichts geändert hat)." -#: ../../kde4/settingsdialog.py:582 +#: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "Protokollierungsstufe:" -#: ../../kde4/settingsdialog.py:597 ../../gnome/settingsdialog.glade:2366 -msgid "Expert Options" -msgstr "Einstellungen für Experten" +#: ../../qt4/settingsdialog.py:656 +msgid "None" +msgstr "Kein(e)" + +#: ../../qt4/settingsdialog.py:658 +msgid "Changes & Errors" +msgstr "Änderungen & Fehler" -#: ../../kde4/settingsdialog.py:600 +#: ../../qt4/settingsdialog.py:674 msgid "Change these options only if you really know what you are doing !" msgstr "Ändern Sie diese Optionen nur, wenn Sie sich wirklich sicher sind!" -#: ../../kde4/settingsdialog.py:608 ../../gnome/settingsdialog.glade:2133 -msgid "Run 'nice' as cron job (default: enabled)" -msgstr "Starte 'nice' als Cronjob (Standard: aktiviert)" - -#: ../../kde4/settingsdialog.py:611 ../../gnome/settingsdialog.glade:2150 -msgid "Run 'ionice' as cron job (default: enabled)" -msgstr "Starte 'ionice' als Cronjob (Standard: aktiviert)" - -#: ../../kde4/settingsdialog.py:614 ../../gnome/settingsdialog.glade:2167 -msgid "Run 'ionice' when taking a manual snapshot (default: disabled)" -msgstr "Starte 'ionice' für manuelle Snapshots (Standard: deaktiviert)" - -#: ../../kde4/settingsdialog.py:617 ../../gnome/settingsdialog.glade:2184 -msgid "Run 'nice' on remote host (default: disabled)" -msgstr "Starte 'nice' auf Remote Host (Standard: deaktiviert)" - -#: ../../kde4/settingsdialog.py:620 ../../gnome/settingsdialog.glade:2201 -msgid "Run 'ionice' on remote host (default: disabled)" -msgstr "Starte 'ionice' auf Remote Host (Standard: deaktiviert)" +#: ../../qt4/settingsdialog.py:678 +msgid "Run 'nice':" +msgstr "»nice« starten:" + +#: ../../qt4/settingsdialog.py:684 ../../qt4/settingsdialog.py:696 +msgid "as cron job" +msgstr "als cron-job" + +#: ../../qt4/settingsdialog.py:687 ../../qt4/settingsdialog.py:702 +#: ../../qt4/settingsdialog.py:716 +msgid "on remote host" +msgstr "auf entfernten Rechnern" + +#: ../../qt4/settingsdialog.py:690 +msgid "Run 'ionice':" +msgstr "»ionice« starten:" + +#: ../../qt4/settingsdialog.py:699 +msgid "when taking a manual snapshot" +msgstr "wenn ein manueller Schnappschuss erstellt wird" + +#: ../../qt4/settingsdialog.py:706 +msgid "Run 'rsync' with 'nocache':" +msgstr "»rsync« mit »nocache« starten:" + +#: ../../qt4/settingsdialog.py:712 +msgid "on local machine" +msgstr "auf dem lokalen Rechner" + +#: ../../qt4/settingsdialog.py:719 +msgid "Redirect stdout to /dev/null in cronjobs." +msgstr "stdout in cronjobs nach /dev/null umleiten." + +#: ../../qt4/settingsdialog.py:725 +msgid "Redirect stderr to /dev/null in cronjobs." +msgstr "stderr in cronjobs nach /dev/null umleiten." -#: ../../kde4/settingsdialog.py:626 ../../gnome/settingsdialog.glade:2224 +#: ../../qt4/settingsdialog.py:734 msgid "Limit rsync bandwidth usage: " -msgstr "Rsync Bandbreite drosseln: " +msgstr "rsync-Bandbreite drosseln: " -#: ../../kde4/settingsdialog.py:629 ../../gnome/settingsdialog.glade:2259 +#: ../../qt4/settingsdialog.py:737 msgid " KB/sec" -msgstr " KB/sek" +msgstr " kB/s" -#: ../../kde4/settingsdialog.py:634 ../../gnome/settingsdialog.glade:2280 +#: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "ACLs bewahren" -#: ../../kde4/settingsdialog.py:637 ../../gnome/settingsdialog.glade:2297 +#: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "Erweiterte Attribute (xattr) bewahren" -#: ../../kde4/settingsdialog.py:640 ../../gnome/settingsdialog.glade:2314 +#: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute links)" msgstr "" "Unsichere Verknüpfungen kopieren (funktioniert nur mit absoluten " "Verknüpfungen)" -#: ../../kde4/settingsdialog.py:643 ../../gnome/settingsdialog.glade:2331 -msgid "Copy links (dereference symbolic links)" -msgstr "Verknüpfungen kopieren (dereferenziert symbolische Verknüpfungen)" +#: ../../qt4/settingsdialog.py:834 +msgid "Paste additional options to rsync" +msgstr "Weitere Optionen zu rsync hinzufügen" -#: ../../kde4/snapshotsdialog.py:46 ../../kde4/snapshotsdialog.py:173 -#: ../../gnome/snapshotsdialog.glade:385 -msgid "Diff Options" -msgstr "Vergleichsoptionen" +#: ../../qt4/settingsdialog.py:837 +msgid "" +"Options must be quoted e.g. --exclude-from=\"/path/to/my exclude file\"." +msgstr "" +"Optionen müssen mit schließendem Anführungszeichen angegeben werden z.B.: --" +"exclude-from=\"/pfad/zu/meiner_ausschlussdatei\"." -#: ../../kde4/snapshotsdialog.py:56 ../../gnome/snapshotsdialog.glade:314 -msgid "Command:" -msgstr "Befehl:" +#: ../../qt4/settingsdialog.py:847 +msgid "Add prefix to SSH commands" +msgstr "Präfix zum SSH-Befehl hinzufügen" -#: ../../kde4/snapshotsdialog.py:60 ../../gnome/snapshotsdialog.glade:322 -msgid "Parameters:" -msgstr "Parameter:" +#: ../../qt4/settingsdialog.py:850 +#, python-format +msgid "" +"Prefix to run before every command on remote host.\n" +"Variables need to be escaped with \\$FOO.\n" +"This doesn't touch rsync. So to add a prefix\n" +"for rsync use \"%(cb_rsync_options)s\" with\n" +"%(rsync_options_value)s\n" +"\n" +"%(default)s: %(def_value)s" +msgstr "" +"Präfix das vor allen Befehlen auf dem entfernten\n" +"Rechner gestartet werden soll.\n" +"Variablen müssen mit \\$FOO gesichert werden.\n" +"Das betrifft nicht rsync. Um ein Präfix zu rsync\n" +"hinzuzufügen, kann »%(cb_rsync_options)s« mit\n" +"»%(rsync_options_value)s« genutzt werden\n" +"\n" +"%(default)s: %(def_value)s" -#: ../../kde4/snapshotsdialog.py:64 ../../gnome/snapshotsdialog.glade:334 -msgid "Use %1 and %2 for path parameters" -msgstr "Nutze %1 und %2 als Pfad-Parameter" +#: ../../qt4/settingsdialog.py:858 ../../qt4/settingsdialog.py:1691 +msgid "default" +msgstr "Standard" -#: ../../kde4/snapshotsdialog.py:123 ../../gnome/snapshotsdialog.glade:184 -#: ../../gnome/snapshotsdialog.glade:186 -msgid "Delete" -msgstr "Löschen" +#: ../../qt4/settingsdialog.py:875 +msgid "Restore Config" +msgstr "Konfiguration wiederherstellen" -#: ../../kde4/snapshotsdialog.py:128 ../../gnome/snapshotsdialog.glade:199 -#: ../../gnome/snapshotsdialog.glade:201 -msgid "Select All" -msgstr "Alles auswählen" +#: ../../qt4/settingsdialog.py:891 +msgid "" +"Full system backup can only create a snapshot to be restored to the same " +"physical disk(s) with the same disk partitioning as from the source; " +"restoring to new physical disks or the same disks with different " +"partitioning will yield a potentially broken and unusable system.\n" +"\n" +"Full system backup will override some settings that may have been " +"customized. Continue?" +msgstr "" -#: ../../kde4/snapshotsdialog.py:132 ../../gnome/snapshotsdialog.glade:88 -msgid "List only different snapshots" -msgstr "Nur verschiedene Snapshots auflisten" +#: ../../qt4/settingsdialog.py:922 +msgid "New profile" +msgstr "Neues Profil" -#: ../../kde4/snapshotsdialog.py:139 ../../gnome/snapshotsdialog.glade:110 -msgid "List only equal snapshots to: " -msgstr "Nur gleiche Snapshots auflisten zu: " +#: ../../qt4/settingsdialog.py:938 +msgid "Rename profile" +msgstr "Profil umbenennen" -#: ../../kde4/snapshotsdialog.py:149 ../../gnome/snapshotsdialog.glade:146 -msgid "Deep check (more accurate, but slow)" -msgstr "Gründliche Prüfung (genauer aber langsamer)" +#: ../../qt4/settingsdialog.py:952 +#, python-format +msgid "Are you sure you want to delete the profile \"%s\" ?" +msgstr "Sind Sie sicher, dass Sie das Profil »%s« löschen wollen?" -#: ../../kde4/snapshotsdialog.py:174 -msgid "Go To" -msgstr "Gehe zu" +#: ../../qt4/settingsdialog.py:1191 +msgid "" +"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " +"*/3 for periodic backups every 3 hours" +msgstr "" +"Benutzerdefinierte Stunden, bitte als Kommata getrennte Stundenliste " +"schreiben (z.B. 8,12,18,23) oder */3 für wiederholte Sicherungen alle 3 " +"Stunden." + +#: ../../qt4/settingsdialog.py:1489 +msgid "Exclude pattern" +msgstr "Ausschlussmuster" -#: ../../gnome/logviewdialog.glade:9 -msgid "Log View" -msgstr "Protokollansicht" +#: ../../qt4/settingsdialog.py:1502 +msgid "Exclude file" +msgstr "Datei ausschließen" -#: ../../gnome/logviewdialog.glade:179 -msgid "scroll down automatic" -msgstr "Automatischer Bildlauf" +#: ../../qt4/settingsdialog.py:1506 +msgid "Exclude folder" +msgstr "Ordner ausschließen" -#: ../../gnome/mainwindow.glade:7 -msgid "Back In Time" -msgstr "Back In Time" +#: ../../qt4/settingsdialog.py:1525 +msgid "Include file" +msgstr "Datei einbeziehen" -#: ../../gnome/mainwindow.glade:45 -msgid "Backup Now" -msgstr "Jetzt sichern" +#: ../../qt4/settingsdialog.py:1533 ../../qt4/settingsdialog.py:1553 +#, python-format +msgid "" +"\"%s\" is a symlink. The linked target will not be backed up until you " +"include it, too.\n" +"Would you like to include the symlinks target instead?" +msgstr "" +"»%s« ist eine symbolische Verknüpfung. Das verknüpfte Ziel wird nicht mit " +"gesichert, wenn Sie es nicht auch hinzufügen.\n" +"Möchten Sie das Ziel der Verknüpfung stattdessen hinzufügen?" -#: ../../gnome/mainwindow.glade:171 -msgid "Shutdown" -msgstr "Herunterfahren" +#: ../../qt4/settingsdialog.py:1545 +msgid "Include folder" +msgstr "Ordner einbeziehen" -#: ../../gnome/mainwindow.glade:287 -msgid "Parent folder" -msgstr "Übergeordnetes Verzeichnis" +#: ../../qt4/settingsdialog.py:1572 +msgid "Are you sure you want to change snapshots folder ?" +msgstr "Sind Sie sicher, dass Sie den Schnappschussordner ändern wollen?" -#: ../../gnome/mainwindow.glade:327 -msgid "Hidden files" -msgstr "Versteckte Dateien" +#: ../../qt4/settingsdialog.py:1688 +msgid "enabled" +msgstr "Aktiviert" -#: ../../gnome/mainwindow.glade:451 -msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" -msgstr "" -"Dieser Ordner existiert nicht\n" -"im aktuellen Snapshot!" +#: ../../qt4/settingsdialog.py:1690 +msgid "disabled" +msgstr "Deaktiviert" -#: ../../gnome/settingsdialog.glade:287 -msgid "Where to save snapshots" -msgstr "Speicherort für Snapshots" +#: ../../qt4/settingsdialog.py:1715 +msgid "Restore Settings" +msgstr "Einstellungen wiederherstellen" + +#: ../../qt4/settingsdialog.py:1732 +msgid " and add your user to group 'fuse'" +msgstr " und Ihren Benutzer zur Gruppe »fuse« hinzufügen" + +#: ../../qt4/settingsdialog.py:1736 +#, python-format +msgid "" +"Please navigate to the snapshot from which you want to restore %(appName)s's " +"configuration. The path may look like: \n" +"%(samplePath)s\n" +"\n" +"If your snapshots are on a remote drive or if they are encrypted you need to " +"manually mount them first. If you use Mode SSH you also may need to set up " +"public key login to the remote host%(addFuse)s.\n" +"Take a look at 'man backintime'." +msgstr "" +"Bitte ein Schnappschuss auswählen, von dem Sie die Einstellungen von " +"%(appName)s wiederherstellen möchten.\n" +"Der Pfad kann aussehen wie folgender: \n" +"%(samplePath)s\n" +"\n" +"Wenn sich der Schnappschuss auf einer externen Festplatte befindet, oder " +"verschlüsselt ist, muss er vorher manuell eingehängt werden. Wenn Sie den " +"SSH-Modus verwenden, müssen Sie außerdem die öffentliche Schlüsselanmeldung " +"zum entfernten Rechner einrichten%(addFuse)s.\n" +"Weitere Informationen unter »man backintime«." + +#: ../../qt4/settingsdialog.py:1794 ../../qt4/settingsdialog.py:1854 +msgid "No config found" +msgstr "Keine Einstellungen gefunden." -#: ../../gnome/settingsdialog.glade:483 -msgid "Private key:" -msgstr "Privater Schlüssel:" +#: ../../qt4/snapshotsdialog.py:49 ../../qt4/snapshotsdialog.py:173 +msgid "Diff Options" +msgstr "Vergleichsoptionen" -#: ../../gnome/settingsdialog.glade:534 -msgid "Advanced SSH Settings" -msgstr "Erweiterte SSH Einstellungen" +#: ../../qt4/snapshotsdialog.py:56 +msgid "Command:" +msgstr "Befehl:" -#: ../../gnome/settingsdialog.glade:552 -msgid "SSH Settings" -msgstr "SSH Einstellungen" +#: ../../qt4/snapshotsdialog.py:60 +msgid "Parameters:" +msgstr "Parameter:" -#: ../../gnome/settingsdialog.glade:815 -msgid "Password" -msgstr "Passwort" +#: ../../qt4/snapshotsdialog.py:64 +msgid "Use %1 and %2 for path parameters" +msgstr "%1 und %2 als Pfadparameter verwenden" -#: ../../gnome/settingsdialog.glade:930 -msgid "Profile Id:" -msgstr "Profil Id:" +#: ../../qt4/snapshotsdialog.py:106 +msgid "List only different snapshots" +msgstr "Nur verschiedene Schnappschüsse auflisten." -#: ../../gnome/settingsdialog.glade:1115 -msgid "" -"hours seperate by comma ( e.g. 8,12,18,23) or */3 for periodic backups every " -"3 hours (cron style)" -msgstr "" -"Stunden mit Komma getrennt (z.B. 8,12,18,23) oder */3 für wiederholte " -"Backups alle 3 Stunden (cron Style)" +#: ../../qt4/snapshotsdialog.py:113 +msgid "List only equal snapshots to: " +msgstr "Nur gleiche Schnappschüsse auflisten zu: " -#: ../../gnome/settingsdialog.glade:1163 -msgid "Schedule" -msgstr "Zeitplan" +#: ../../qt4/snapshotsdialog.py:123 +msgid "Deep check (more accurate, but slow)" +msgstr "Gründliche Prüfung (genauer, aber langsamer)" -#: ../../gnome/settingsdialog.glade:1363 -msgid "Highly recommended:" -msgstr "Dringend empfohlen:" +#: ../../qt4/snapshotsdialog.py:144 +msgid "Delete" +msgstr "Löschen" + +#: ../../qt4/snapshotsdialog.py:148 +msgid "Select All" +msgstr "Alles auswählen" -#: ../../gnome/settingsdialog.glade:1377 -msgid "label" -msgstr "Bezeichnung" +#: ../../qt4/snapshotsdialog.py:161 +msgid "Diff" +msgstr "Unterschiede" -#: ../../gnome/settingsdialog.glade:1755 -msgid "week(s)" -msgstr "Woche(n)" +#: ../../qt4/snapshotsdialog.py:172 +msgid "Go To" +msgstr "Gehen zu" -#: ../../gnome/settingsdialog.glade:2069 -msgid "Log level:" -msgstr "Protokollierungsstufe:" +#: ../../qt4/snapshotsdialog.py:326 +msgid "You can't compare a snapshot to itself" +msgstr "Sie können einen Schnappschuss nicht mit sich selbst vergleichen." -#: ../../gnome/settingsdialog.glade:2121 +#: ../../qt4/snapshotsdialog.py:333 +#, python-format +msgid "Command not found: %s" +msgstr "Befehl nicht gefunden: %s" + +#: ../../qt4/snapshotsdialog.py:354 +#, python-format msgid "" -"Change these options only if you really know what you are doing !" +"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" msgstr "" -"Ändern Sie diese Einstellungen nur wenn Sie wirklich wissen, was Sie " -"tun!" +"Soll »%(file)s« wirklich in dem Schnappschuss »%(snapshot_id)s« gelöscht " +"werden?\n" -#: ../../gnome/snapshotsdialog.glade:263 -msgid "Diff with" -msgstr "Vergleiche mit" +#: ../../qt4/snapshotsdialog.py:357 +#, python-format +msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +msgstr "" +"Soll »%(file)s« wirklich in %(count)d Schnappschüssen gelöscht werden?\n" -#: ../../gnome/textinputdialog.glade:7 -msgid "Pattern" -msgstr "Muster" +#: ../../qt4/snapshotsdialog.py:359 +msgid "WARNING: This can not be revoked!" +msgstr "ACHTUNG: Das kann nicht rückgängig gemacht werden!" -#: ../../gnome/textinputdialog.glade:70 -msgid "Text" -msgstr "Text" +#: ../../qt4/snapshotsdialog.py:374 +#, python-format +msgid "Exclude \"%s\" from future snapshots?" +msgstr "»%s« von zukünftigen Schnappschüssen ausschließen?" diff -Nru backintime-1.0.36/common/po/el.po backintime-1.1.12/common/po/el.po --- backintime-1.0.36/common/po/el.po 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/po/el.po 2016-01-11 18:07:58.000000000 +0000 @@ -7,206 +7,238 @@ msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2013-11-09 22:34+0100\n" -"PO-Revision-Date: 2010-11-05 13:56+0000\n" -"Last-Translator: StratosJL \n" +"POT-Creation-Date: 2015-12-19 00:47+0100\n" +"PO-Revision-Date: 2014-11-19 19:14+0000\n" +"Last-Translator: Nikos Gr \n" "Language-Team: Greek \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2014-08-06 10:20+0000\n" -"X-Generator: Launchpad (build 17147)\n" +"X-Launchpad-Export-Date: 2016-01-11 17:52+0000\n" +"X-Generator: Launchpad (build 17881)\n" -#: ../../common/config.py:72 +#: ../../common/configfile.py:60 +#, python-format +msgid "Failed to save config: %s" +msgstr "" + +#: ../../common/configfile.py:78 +#, python-format +msgid "Failed to load config: %s" +msgstr "" + +#: ../../common/configfile.py:352 ../../common/configfile.py:414 +#, python-format +msgid "Profile \"%s\" already exists !" +msgstr "Το προφίλ \"%s\" υπάρχει ήδη !" + +#: ../../common/configfile.py:383 +msgid "You can't remove the last profile !" +msgstr "Αδύνατη η αφαίρεση του τελευταίου προφίλ !" + +#: ../../common/config.py:76 msgid "Disabled" msgstr "Απενεργοποιημένο" -#: ../../common/config.py:73 +#: ../../common/config.py:77 msgid "At every boot/reboot" msgstr "Σε κάθε εκκίνηση/επανεκκίνηση" -#: ../../common/config.py:74 +#: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Κάθε 5 λεπτά" -#: ../../common/config.py:75 +#: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Κάθε 10 λεπτά" -#: ../../common/config.py:76 +#: ../../common/config.py:80 msgid "Every 30 minutes" -msgstr "" +msgstr "Κάθε 30 λεπτά" -#: ../../common/config.py:77 +#: ../../common/config.py:81 msgid "Every hour" -msgstr "" +msgstr "Κάθε ώρα" -#: ../../common/config.py:78 +#: ../../common/config.py:82 msgid "Every 2 hours" -msgstr "" +msgstr "Κάθε 2 ώρες" -#: ../../common/config.py:79 +#: ../../common/config.py:83 msgid "Every 4 hours" -msgstr "" +msgstr "Κάθε 4 ώρες" -#: ../../common/config.py:80 +#: ../../common/config.py:84 msgid "Every 6 hours" -msgstr "" +msgstr "Κάθε 6 ώρες" -#: ../../common/config.py:81 +#: ../../common/config.py:85 msgid "Every 12 hours" -msgstr "" +msgstr "Κάθε 12 ώρες" -#: ../../common/config.py:82 +#: ../../common/config.py:86 msgid "Custom Hours" msgstr "" -#: ../../common/config.py:83 +#: ../../common/config.py:87 msgid "Every Day" msgstr "Καθημερινά" -#: ../../common/config.py:84 -msgid "Daily (anacron)" +#: ../../common/config.py:88 +msgid "Repeatedly (anacron)" msgstr "" -#: ../../common/config.py:85 +#: ../../common/config.py:89 msgid "When drive get connected (udev)" -msgstr "" +msgstr "Όταν συνδέεται δίσκος" -#: ../../common/config.py:86 +#: ../../common/config.py:90 msgid "Every Week" msgstr "Κάθε εβδομάδα" -#: ../../common/config.py:87 +#: ../../common/config.py:91 msgid "Every Month" msgstr "Κάθε μήνα" -#: ../../common/config.py:91 +#: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Ημέρα(ες)" -#: ../../common/config.py:92 +#: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Εβδομάδα(ες)" -#: ../../common/config.py:93 +#: ../../common/config.py:97 msgid "Year(s)" msgstr "Έτος(η)" -#: ../../common/config.py:100 +#: ../../common/config.py:101 +msgid "Hour(s)" +msgstr "" + +#: ../../common/config.py:104 +msgid "Month(s)" +msgstr "" + +#: ../../common/config.py:126 ../../qt4/settingsdialog.py:551 msgid " EXPERIMENTAL!" msgstr "" -#: ../../common/config.py:103 +#: ../../common/config.py:129 msgid "Local" -msgstr "" +msgstr "Τοπικό" -#: ../../common/config.py:104 +#: ../../common/config.py:130 msgid "SSH" -msgstr "" +msgstr "SSH" -#: ../../common/config.py:104 ../../common/config.py:106 -#: ../../gnome/settingsdialog.py:475 ../../kde4/settingsdialog.py:1325 +#: ../../common/config.py:130 ../../common/config.py:132 +#: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "" -#: ../../common/config.py:105 +#: ../../common/config.py:131 msgid "Local encrypted" -msgstr "" +msgstr "Τοπικό κρυπτογραφημένο" -#: ../../common/config.py:105 ../../common/config.py:106 +#: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" -msgstr "" +msgstr "Κρυπτογράφηση" -#: ../../common/config.py:106 +#: ../../common/config.py:132 msgid "SSH encrypted" -msgstr "" +msgstr "SSH κρυπτογραφημένο" -#: ../../common/config.py:112 +#: ../../common/config.py:135 msgid "Default" -msgstr "" +msgstr "Προεπιλογή" -#: ../../common/config.py:113 +#: ../../common/config.py:136 msgid "AES128-CTR" -msgstr "" +msgstr "AES128-CTR" -#: ../../common/config.py:114 +#: ../../common/config.py:137 msgid "AES192-CTR" -msgstr "" +msgstr "AES192-CTR" -#: ../../common/config.py:115 +#: ../../common/config.py:138 msgid "AES256-CTR" -msgstr "" +msgstr "AES256-CTR" -#: ../../common/config.py:116 +#: ../../common/config.py:139 msgid "ARCFOUR256" -msgstr "" +msgstr "ARCFOUR256" -#: ../../common/config.py:117 +#: ../../common/config.py:140 msgid "ARCFOUR128" -msgstr "" +msgstr "ARCFOUR128" -#: ../../common/config.py:118 +#: ../../common/config.py:141 msgid "AES128-CBC" -msgstr "" +msgstr "AES128-CBC" -#: ../../common/config.py:119 +#: ../../common/config.py:142 msgid "3DES-CBC" -msgstr "" +msgstr "3DES-CBC" -#: ../../common/config.py:120 +#: ../../common/config.py:143 msgid "Blowfish-CBC" -msgstr "" +msgstr "Blowfish-CBC" -#: ../../common/config.py:121 +#: ../../common/config.py:144 msgid "Cast128-CBC" -msgstr "" +msgstr "Cast128-CBC" -#: ../../common/config.py:122 +#: ../../common/config.py:145 msgid "AES192-CBC" -msgstr "" +msgstr "AES192-CBC" -#: ../../common/config.py:123 +#: ../../common/config.py:146 msgid "AES256-CBC" -msgstr "" +msgstr "AES256-CBC" -#: ../../common/config.py:124 +#: ../../common/config.py:147 msgid "ARCFOUR" -msgstr "" +msgstr "ARCFOUR" -#: ../../common/config.py:129 +#: ../../common/config.py:153 msgid "Main profile" msgstr "Κύριο Προφίλ" -#: ../../common/config.py:256 ../../common/config.py:275 -#: ../../common/config.py:286 ../../common/config.py:291 +#: ../../common/config.py:289 ../../common/config.py:296 +#: ../../common/config.py:307 ../../common/config.py:312 +#: ../../qt4/qt4systrayicon.py:61 #, python-format msgid "Profile: \"%s\"" msgstr "Προφίλ: \"%s\"" -#: ../../common/config.py:256 +#: ../../common/config.py:289 msgid "Snapshots folder is not valid !" msgstr "Ο φάκελος στιγμιοτύπων δεν είναι έγκυρος !" -#: ../../common/config.py:275 +#: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "Πρέπει να διαλέξετε τουλάχιστον ένα φάκελο για backup!" -#: ../../common/config.py:286 +#: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "Δεν μπορείτε να συμπεριλάβετε φάκελο backup !" -#: ../../common/config.py:291 +#: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "Δεν μπορείτε να συμπεριλάβετε υποφάκελο backup !" -#: ../../common/config.py:361 +#: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "Το %s δεν είναι φάκελος !" -#: ../../common/config.py:376 ../../common/config.py:389 +#: ../../common/config.py:380 +msgid "Host/User/Profile-ID must not be empty!" +msgstr "" + +#: ../../common/config.py:388 ../../common/config.py:420 #, python-format msgid "" "Can't write to: %s\n" @@ -215,59 +247,68 @@ "Αδύνατη η εγγραφή στο: %s\n" "Είστε σίγουροι ότι έχετε δικαίωμα εγγραφής;" -#: ../../common/config.py:1286 +#: ../../common/config.py:400 +#, python-format msgid "" -"Can't find crontab.\n" -"Are you sure cron is installed ?\n" -"If not you should disable all automatic backups." +"Destination filesystem for '%(path)s' is formatted with FAT which doesn't " +"support hard-links. Please use a native Linux filesystem." msgstr "" -"Δε βρέθηκε crontab.\n" -"Είστε σίγουροι ότι το cron είναι εγκατεστημένο ;\n" -"Αν όχι, θα πρέπει να απενεργοποιήσετε όλα τα αυτοματοποιημένα back up." -#: ../../common/config.py:1338 +#: ../../common/config.py:405 #, python-format -msgid "Schedule udev doesn't work with mode %s" +msgid "" +"Destination filsystem for '%(path)s' is a SMB mounted share. Please make " +"sure the remote SMB server supports symlinks or activate '%(copyLinks)s' in " +"'%(expertOptions)s'." msgstr "" -#: ../../common/config.py:1342 -#, python-format -msgid "Couldn't find UUID for \"%s\"" +#: ../../common/config.py:408 ../../qt4/settingsdialog.py:815 +msgid "Copy links (dereference symbolic links)" msgstr "" -#: ../../common/config.py:1379 -msgid "Failed to remove udev rules" +#: ../../common/config.py:409 ../../qt4/settingsdialog.py:669 +msgid "Expert Options" msgstr "" -#: ../../common/config.py:1385 -msgid "Failed to create udev rules" +#: ../../common/config.py:411 +#, python-format +msgid "" +"Destination filesystem for '%(path)s is a sshfs mounted share. sshfs doesn't " +"support hard-links. Please use mode 'SSH' instead." msgstr "" -#: ../../common/config.py:1420 +#: ../../common/config.py:1407 msgid "" -"Can't find anacron.\n" -"Are you sure anacron is installed ?\n" -"If not you should disable daily anacron backups." +"Can't find crontab.\n" +"Are you sure cron is installed ?\n" +"If not you should disable all automatic backups." msgstr "" +"Δε βρέθηκε crontab.\n" +"Είστε σίγουροι ότι το cron είναι εγκατεστημένο ;\n" +"Αν όχι, θα πρέπει να απενεργοποιήσετε όλα τα αυτοματοποιημένα back up." -#: ../../common/config.py:1439 -msgid "Please provide your sudo password to install the udev rule." +#: ../../common/config.py:1411 +msgid "Failed to write new crontab." msgstr "" -#: ../../common/config.py:1445 -msgid "Please provide your sudo password to remove unused udev rules." +#: ../../common/config.py:1505 +#, python-format +msgid "" +"Could not install Udev rule for profile %(profile_id)s. DBus Service " +"'%(dbus_interface)s' wasn't available" msgstr "" -#: ../../common/configfile.py:253 ../../common/configfile.py:315 +#: ../../common/config.py:1517 #, python-format -msgid "Profile \"%s\" already exists !" -msgstr "Το προφίλ \"%s\" υπάρχει ήδη !" +msgid "Schedule udev doesn't work with mode %s" +msgstr "" -#: ../../common/configfile.py:284 -msgid "You can't remove the last profile !" -msgstr "Αδύνατη η αφαίρεση του τελευταίου προφίλ !" +#: ../../common/config.py:1526 +#, python-format +msgid "Couldn't find UUID for \"%s\"" +msgstr "Δεν βρέθηκε UUID για \"%s\"" -#: ../../common/encfstools.py:95 +#: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" @@ -275,38 +316,40 @@ "%(error)s" msgstr "" -#: ../../common/encfstools.py:105 +#: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "" -#: ../../common/encfstools.py:149 +#: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "" -#: ../../common/encfstools.py:153 +#: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" +"\n" +"Δημιουργία νέου κρυπτογραφημένου φακέλου;" -#: ../../common/encfstools.py:154 +#: ../../common/encfstools.py:171 msgid "Cancel" -msgstr "" +msgstr "Ακύρωση" -#: ../../common/encfstools.py:157 +#: ../../common/encfstools.py:174 msgid "Please confirm password" -msgstr "" +msgstr "Παρακαλώ επιβεβαιώστε τον κωδικό" -#: ../../common/encfstools.py:161 +#: ../../common/encfstools.py:178 msgid "Password doesn't match" -msgstr "" +msgstr "Ο κωδικός δεν ταιριάζει" -#: ../../common/encfstools.py:166 +#: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" -#: ../../common/encfstools.py:174 ../../common/sshtools.py:207 +#: ../../common/encfstools.py:196 ../../common/sshtools.py:262 #, python-format msgid "" "%(user)s is not member of group 'fuse'.\n" @@ -314,63 +357,66 @@ "Look at 'man backintime' for further instructions." msgstr "" -#: ../../common/encfstools.py:189 +#: ../../common/encfstools.py:211 msgid "" "encfs version 1.7.2 and before has a bug with option --reverse. Please " "update encfs" msgstr "" -#: ../../common/encfstools.py:453 ../../common/encfstools.py:480 -#: ../../common/snapshots.py:982 ../../common/snapshots.py:1288 -#: ../../kde4/app.py:82 ../../gnome/mainwindow.glade:43 +#: ../../common/encfstools.py:512 ../../common/snapshots.py:1131 +#: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "Λήψη στιγμιοτύπου" -#: ../../common/mount.py:195 +#: ../../common/mount.py:204 #, python-format msgid "" "Hash collision occurred in hash_id %s. Incrementing global value " "hash_collision and try again." msgstr "" -#: ../../common/mount.py:246 +#: ../../common/mount.py:259 #, python-format msgid "mountpoint %s not empty." msgstr "" -#: ../../common/mount.py:286 +#: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" -#: ../../common/password.py:425 +#: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" -#: ../../common/snapshots.py:171 ../../gnome/app.py:1127 -#: ../../kde4/app.py:1014 +#: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Τώρα" -#: ../../common/snapshots.py:182 ../../gnome/gnometools.py:37 +#: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "ΜΕ ΛΑΘΗ !" -#: ../../common/snapshots.py:282 +#: ../../common/snapshots.py:344 msgid "" "### This log has been decoded with automatic search pattern\n" "### If some paths are not decoded you can manually decode them with:\n" msgstr "" -#: ../../common/snapshots.py:465 +#: ../../common/snapshots.py:562 ../../common/snapshots.py:750 msgid "FAILED" -msgstr "" +msgstr "ΑΠΟΤΥΧΙΑ" -#: ../../common/snapshots.py:564 +#: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "" -#: ../../common/snapshots.py:739 +#: ../../common/snapshots.py:752 ../../qt4/app.py:377 ../../qt4/app.py:675 +#: ../../qt4/app.py:692 ../../qt4/qt4systrayicon.py:65 +msgid "Done" +msgstr "" + +#: ../../common/snapshots.py:860 msgid "" "Back In Time changed its backup format.\n" "\n" @@ -381,7 +427,7 @@ "Τα παλιά σας στιγμιότυπα μπορούν να μετακινηθούν σύμφωνα με το νέο " "μορφότυπο. ΟΚ;" -#: ../../common/snapshots.py:749 +#: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" @@ -399,7 +445,7 @@ "\n" "(Το πρόγραμμα θα μπορεί να κάνει τη διαφοροποίηση μεταξύ των δύο)" -#: ../../common/snapshots.py:752 +#: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" @@ -407,7 +453,7 @@ "Δε βρέθηκαν προφίλ. Θα πρέπει να ανανεώσετε τα προφίλ πρώτα και μετά να " "επανεκκινήσετε το Back in Time." -#: ../../common/snapshots.py:803 +#: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" @@ -420,7 +466,7 @@ "cannot continue taking snapshots" msgstr "" -#: ../../common/snapshots.py:812 +#: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" @@ -435,7 +481,7 @@ "Μπορείτε να μετακινήσετε χειροκίνητα τα στιγμιότυπα, \n" "εάν είστε έτοιμοι επανεκκινήστε στο Back in Time για αν συνεχίσετε" -#: ../../common/snapshots.py:825 +#: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" @@ -446,7 +492,7 @@ "Το Back In Time θα ξαναρχίσει να λαμβάνει στιγμιότυπα σύμφωνα με τον " "προγραμματισμό." -#: ../../common/snapshots.py:830 +#: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" @@ -467,13 +513,13 @@ "Εάν επιθυμείτε τη μετακίνηση, θα ερωτηθείτε ξανά την επόμενη φορά που θα " "εκκινήσετε το Back In Time." -#: ../../common/snapshots.py:839 +#: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "" "Το Back In Time θα ξαναρχίσει να λαμβάνει στιγμιότυπα σύμφωνα με τον " "προγραμματισμό" -#: ../../common/snapshots.py:841 +#: ../../common/snapshots.py:953 msgid "" "Back In Time still cannot continue taking new snapshots.\n" "Restart Back In Time to see the questions again" @@ -481,7 +527,11 @@ "Το Back In Time δεν μπορεί να λαμβάνει νέα στιγμιότυπα. \n" "Επανεκκινήστε το Back In Time για να δείτε ξανά την ερώτηση" -#: ../../common/snapshots.py:913 +#: ../../common/snapshots.py:972 +msgid "Deferring backup while on battery" +msgstr "" + +#: ../../common/snapshots.py:1035 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it." @@ -489,156 +539,163 @@ "Δε βρέθηκε ο φάκελος στιγμιοτύπων.\n" "Εάν βρίσκεται σε αφαιρούμενη συσκευή, παρακαλώ συνδέστε την." -#: ../../common/snapshots.py:915 +#: ../../common/snapshots.py:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "Αναμονή %s δευτερόλεπτο." msgstr[1] "Αναμονή %s δευτερόλεπτα." -#: ../../common/snapshots.py:941 +#: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "Αποτυχία λήψης στιγμιοτύπου %s !!!" -#: ../../common/snapshots.py:950 +#: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "Οριστικοποίηση" -#: ../../common/snapshots.py:1088 +#: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "Αδύνατη η δημιουργία του φακέλου: %s" -#: ../../common/snapshots.py:1107 +#: ../../common/snapshots.py:1217 msgid "..." msgstr "..." -#: ../../common/snapshots.py:1134 +#: ../../common/snapshots.py:1238 +#, python-format +msgid "Found leftover '%s' which can be continued." +msgstr "" + +#: ../../common/snapshots.py:1250 +#, python-format +msgid "Remove leftover '%s' folder from last run" +msgstr "" + +#: ../../common/snapshots.py:1263 #, python-format msgid "Can't remove folder: %s" msgstr "" -#: ../../common/snapshots.py:1219 +#: ../../common/snapshots.py:1340 #, python-format msgid "Compare with snapshot %s" msgstr "" -#: ../../common/snapshots.py:1248 +#: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "" -#: ../../common/snapshots.py:1335 +#: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "" -#: ../../common/snapshots.py:1341 +#: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "" -#: ../../common/snapshots.py:1442 +#: ../../common/snapshots.py:1470 +msgid "Save permission over ssh failed. Retry normal method" +msgstr "" + +#: ../../common/snapshots.py:1521 #, python-format msgid "Can't rename %(new_path)s to %(path)s" msgstr "" -#: ../../common/snapshots.py:1562 -msgid "Remove old snapshots" +#: ../../common/snapshots.py:1695 ../../common/snapshots.py:1728 +#: ../../qt4/settingsdialog.py:542 +msgid "Smart remove" msgstr "" -#: ../../common/snapshots.py:1586 ../../kde4/settingsdialog.py:501 -#: ../../gnome/settingsdialog.glade:1660 -msgid "Smart remove" +#: ../../common/snapshots.py:1704 +msgid "Remove old snapshots" msgstr "" -#: ../../common/snapshots.py:1591 +#: ../../common/snapshots.py:1733 msgid "Try to keep min free space" msgstr "" -#: ../../common/snapshots.py:1621 +#: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" -#: ../../common/sshtools.py:106 +#: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "" -#: ../../common/sshtools.py:113 +#: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "" -#: ../../common/sshtools.py:187 -#, python-format -msgid "" -"Failed to unlock SSH private key:\n" -"Error: %s" -msgstr "" - -#: ../../common/sshtools.py:194 +#: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" -#: ../../common/sshtools.py:199 +#: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" -#: ../../common/sshtools.py:217 +#: ../../common/sshtools.py:278 #, python-format msgid "" "Password-less authentication for %(user)s@%(host)s failed. Look at 'man " "backintime' for further instructions." msgstr "" -#: ../../common/sshtools.py:229 +#: ../../common/sshtools.py:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" -#: ../../common/sshtools.py:254 +#: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" -#: ../../common/sshtools.py:274 +#: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" -#: ../../common/sshtools.py:276 +#: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:278 +#: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:280 +#: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" -#: ../../common/sshtools.py:302 +#: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" -#: ../../common/sshtools.py:325 ../../common/sshtools.py:383 +#: ../../common/sshtools.py:423 ../../common/sshtools.py:553 #, python-format msgid "" "Remote host %(host)s doesn't support '%(command)s':\n" @@ -646,7 +703,7 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:387 +#: ../../common/sshtools.py:556 #, python-format msgid "" "Check commands on host %(host)s returned unknown error:\n" @@ -654,817 +711,937 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:400 +#: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "" -#: ../../gnome/app.py:185 ../../gnome/app.py:594 ../../gnome/app.py:608 -#: ../../kde4/app.py:299 ../../kde4/app.py:570 ../../kde4/app.py:587 -msgid "Done" +#: ../../qt4/app.py:81 +msgid "Refresh snapshots list" msgstr "" -#: ../../gnome/app.py:189 ../../kde4/app.py:143 ../../kde4/app.py:159 -#: ../../gnome/mainwindow.glade:225 -msgid "Help" +#: ../../qt4/app.py:85 ../../qt4/app.py:890 +msgid "Snapshot Name" msgstr "" -#: ../../gnome/app.py:191 ../../kde4/app.py:146 -#: ../../gnome/mainwindow.glade:223 -msgid "Website" +#: ../../qt4/app.py:88 +msgid "Remove Snapshot" msgstr "" -#: ../../gnome/app.py:192 ../../kde4/app.py:148 -msgid "FAQ" +#: ../../qt4/app.py:91 +msgid "View Snapshot Log" msgstr "" -#: ../../gnome/app.py:193 ../../kde4/app.py:150 -msgid "Ask a question" +#: ../../qt4/app.py:94 +msgid "View Last Log" msgstr "" -#: ../../gnome/app.py:194 ../../kde4/app.py:152 -msgid "Report a bug" +#: ../../qt4/app.py:99 ../../qt4/settingsdialog.py:51 +msgid "Settings" msgstr "" -#: ../../gnome/app.py:196 ../../kde4/app.py:155 -msgid "About" +#: ../../qt4/app.py:104 +msgid "Shutdown" msgstr "" -#: ../../gnome/app.py:202 ../../gnome/app.py:887 -#: ../../gnome/restoredialog.py:84 ../../gnome/snapshotsdialog.py:83 -#: ../../gnome/snapshotsdialog.py:244 ../../kde4/app.py:206 -#: ../../kde4/app.py:216 ../../kde4/restoredialog.py:68 -#: ../../kde4/snapshotsdialog.py:111 ../../kde4/snapshotsdialog.py:117 -#: ../../gnome/mainwindow.glade:350 ../../gnome/mainwindow.glade:352 -#: ../../gnome/snapshotsdialog.glade:169 ../../gnome/snapshotsdialog.glade:171 -msgid "Restore" +#: ../../qt4/app.py:105 +msgid "Shutdown system after snapshot has finished." msgstr "" -#: ../../gnome/app.py:203 ../../gnome/app.py:888 ../../gnome/gnometools.py:67 -#: ../../gnome/snapshotsdialog.py:84 ../../gnome/snapshotsdialog.py:245 -#: ../../kde4/app.py:208 ../../kde4/restoredialog.py:42 -#: ../../kde4/snapshotsdialog.py:113 -msgid "Restore to ..." +#: ../../qt4/app.py:111 +msgid "Exit" msgstr "" -#: ../../gnome/app.py:205 ../../gnome/app.py:896 ../../gnome/app.py:1146 -#: ../../kde4/app.py:1041 -#, python-format -msgid "Restore '%s'" +#: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 +msgid "Help" msgstr "" -#: ../../gnome/app.py:207 ../../gnome/app.py:897 ../../gnome/app.py:1147 -#: ../../kde4/app.py:1042 -#, python-format -msgid "Restore '%s' to ..." +#: ../../qt4/app.py:122 +msgid "Config File Help" msgstr "" -#: ../../gnome/app.py:226 ../../kde4/app.py:235 -msgid "Shortcuts" +#: ../../qt4/app.py:125 +msgid "Website" msgstr "" -#: ../../gnome/app.py:249 -msgid "Name" +#: ../../qt4/app.py:127 ../../qt4/app.py:982 +msgid "Changelog" msgstr "" -#: ../../gnome/app.py:260 -msgid "Size" +#: ../../qt4/app.py:129 +msgid "FAQ" msgstr "" -#: ../../gnome/app.py:267 -msgid "Date" +#: ../../qt4/app.py:131 +msgid "Ask a question" msgstr "" -#: ../../gnome/app.py:286 ../../gnome/app.py:883 -#: ../../gnome/snapshotsdialog.py:116 ../../kde4/app.py:171 -#: ../../kde4/app.py:221 ../../kde4/snapshotsdialog.py:91 -#: ../../gnome/mainwindow.glade:366 ../../gnome/mainwindow.glade:368 -#: ../../gnome/snapshotsdialog.glade:8 -msgid "Snapshots" +#: ../../qt4/app.py:133 +msgid "Report a bug" msgstr "" -#: ../../gnome/app.py:348 ../../kde4/app.py:362 -msgid "" -"Can't find snapshots folder.\n" -"If it is on a removable drive please plug it and then press OK" +#: ../../qt4/app.py:136 ../../qt4/app.py:1344 +msgid "About" msgstr "" -#: ../../gnome/app.py:611 ../../kde4/app.py:590 -msgid "Done, no backup needed" +#: ../../qt4/app.py:163 +msgid "Up" msgstr "" -#: ../../gnome/app.py:619 ../../kde4/app.py:598 -msgid "Working:" +#: ../../qt4/app.py:174 ../../qt4/settingsdialog.py:1776 +msgid "Show hidden files" msgstr "" -#: ../../gnome/app.py:623 ../../kde4/app.py:602 -msgid "Error:" +#: ../../qt4/app.py:184 ../../qt4/app.py:199 ../../qt4/app.py:233 +#: ../../qt4/restoredialog.py:62 ../../qt4/settingsdialog.py:1818 +#: ../../qt4/snapshotsdialog.py:134 ../../qt4/snapshotsdialog.py:139 +msgid "Restore" msgstr "" -#: ../../gnome/app.py:636 ../../kde4/app.py:649 -msgid "Global" +#: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 +#: ../../qt4/snapshotsdialog.py:136 +msgid "Restore to ..." msgstr "" -#: ../../gnome/app.py:637 ../../kde4/app.py:650 -msgid "Root" +#: ../../qt4/app.py:194 +msgid "Restore and delete new files" msgstr "" -#: ../../gnome/app.py:638 ../../kde4/app.py:651 -msgid "Home" +#: ../../qt4/app.py:201 +#, python-format +msgid "" +"Restore selected file or folder.\n" +"If this button is grayed out this is most likely because \"%(now)s\" is " +"selected in left hand snapshots list." msgstr "" -#: ../../gnome/app.py:662 -msgid "Bookmarks" +#: ../../qt4/app.py:206 ../../qt4/logviewdialog.py:67 +#: ../../qt4/qt4tools.py:160 ../../qt4/snapshotsdialog.py:96 +msgid "Snapshots" msgstr "" -#: ../../gnome/app.py:675 ../../kde4/app.py:662 -msgid "Backup folders" +#: ../../qt4/app.py:213 +msgid "Snapshot" msgstr "" -#: ../../gnome/app.py:701 ../../kde4/app.py:734 -msgid "Today" +#: ../../qt4/app.py:224 +msgid "View" msgstr "" -#: ../../gnome/app.py:705 ../../kde4/app.py:738 -msgid "Yesterday" +#: ../../qt4/app.py:277 +msgid "Shortcuts" msgstr "" -#: ../../gnome/app.py:709 ../../kde4/app.py:742 -msgid "This week" +#: ../../qt4/app.py:295 +msgid "" +"This folder doesn't exist\n" +"in the current selected snapshot!" msgstr "" -#: ../../gnome/app.py:713 ../../kde4/app.py:746 -msgid "Last week" +#: ../../qt4/app.py:359 +msgid "Add to Include" msgstr "" -#: ../../gnome/app.py:764 ../../kde4/app.py:398 -msgid "" -"If you close this window Back In Time will not be able to shutdown your " -"system when the snapshot has finished.\n" -"Do you really want to close?" +#: ../../qt4/app.py:360 +msgid "Add to Exclude" msgstr "" -#: ../../gnome/app.py:881 ../../gnome/snapshotsdialog.py:238 -msgid "Open" +#: ../../qt4/app.py:416 +#, python-format +msgid "" +"%(appName)s is not configured. Would you like to restore a previous " +"configuration?" msgstr "" -#: ../../gnome/app.py:1056 ../../kde4/app.py:90 ../../kde4/app.py:805 -#: ../../gnome/mainwindow.glade:73 ../../gnome/mainwindow.glade:75 -msgid "Snapshot Name" +#: ../../qt4/app.py:440 +msgid "" +"Can't find snapshots folder.\n" +"If it is on a removable drive please plug it and then press OK" msgstr "" -#: ../../gnome/app.py:1075 -#, python-format +#: ../../qt4/app.py:473 msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +"If you close this window Back In Time will not be able to shutdown your " +"system when the snapshot has finished.\n" +"Do you really want to close?" msgstr "" -#: ../../gnome/app.py:1123 ../../kde4/app.py:1010 -#, python-format -msgid "Snapshot: %s" +#: ../../qt4/app.py:667 ../../qt4/app.py:703 +msgid "Working:" msgstr "" -#: ../../gnome/app.py:1124 ../../kde4/app.py:1011 -#, python-format -msgid "View the snapshot made at %s" +#: ../../qt4/app.py:695 +msgid "Done, no backup needed" msgstr "" -#: ../../gnome/app.py:1126 ../../kde4/app.py:1013 -msgid "View the current disk content" +#: ../../qt4/app.py:707 +msgid "Error:" msgstr "" -#: ../../gnome/logviewdialog.py:106 ../../gnome/settingsdialog.py:414 -#: ../../kde4/logviewdialog.py:83 ../../kde4/settingsdialog.py:590 -msgid "All" +#: ../../qt4/app.py:726 ../../qt4/qt4systrayicon.py:153 +msgid "Sent:" msgstr "" -#: ../../gnome/logviewdialog.py:107 ../../gnome/settingsdialog.py:412 -#: ../../kde4/logviewdialog.py:84 ../../kde4/settingsdialog.py:588 -msgid "Errors" +#: ../../qt4/app.py:727 ../../qt4/qt4systrayicon.py:154 +msgid "Speed:" msgstr "" -#: ../../gnome/logviewdialog.py:112 ../../kde4/logviewdialog.py:89 -msgid "Changes" +#: ../../qt4/app.py:728 ../../qt4/qt4systrayicon.py:155 +msgid "ETA:" msgstr "" -#: ../../gnome/logviewdialog.py:115 ../../kde4/logviewdialog.py:92 -msgid "Informations" +#: ../../qt4/app.py:777 +msgid "Global" msgstr "" -#: ../../gnome/settingsdialog.py:235 ../../kde4/settingsdialog.py:387 -msgid "Include files and folders" +#: ../../qt4/app.py:778 +msgid "Root" msgstr "" -#: ../../gnome/settingsdialog.py:264 -msgid "Exclude patterns, files or folders" +#: ../../qt4/app.py:779 +msgid "Home" msgstr "" -#: ../../gnome/settingsdialog.py:411 ../../kde4/settingsdialog.py:587 -msgid "None" +#: ../../qt4/app.py:794 +msgid "Backup folders" msgstr "" -#: ../../gnome/settingsdialog.py:413 ../../kde4/settingsdialog.py:589 -msgid "Changes & Errors" +#: ../../qt4/app.py:849 +msgid "This is NOT a snapshot but a live view of your local files" msgstr "" -#: ../../gnome/settingsdialog.py:458 -msgid "Snapshots folder" +#: ../../qt4/app.py:860 ../../qt4/app.py:1476 +#, python-format +msgid "Last check %s" msgstr "" -#: ../../gnome/settingsdialog.py:466 ../../kde4/settingsdialog.py:1314 -msgid "Are you sure you want to change snapshots folder ?" +#: ../../qt4/app.py:928 +#, python-format +msgid "" +"Are you sure you want to remove the snapshot:\n" +"%s" msgstr "" -#: ../../gnome/settingsdialog.py:901 ../../kde4/settingsdialog.py:914 +#: ../../qt4/app.py:1004 +#, python-format msgid "" -"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " -"*/3 for periodic backups every 3 hours" +"Backup local files before overwriting or\n" +"removing with trailing '%(suffix)s'." msgstr "" -#: ../../gnome/settingsdialog.py:1141 ../../kde4/settingsdialog.py:653 -msgid "New profile" +#: ../../qt4/app.py:1010 +msgid "" +"Are you sure you want to remove all newer files in your original folder?" msgstr "" -#: ../../gnome/settingsdialog.py:1155 ../../kde4/settingsdialog.py:669 -msgid "Rename profile" +#: ../../qt4/app.py:1014 +msgid "" +"WARNING: deleting files in filesystem root could break your whole system!!!" msgstr "" -#: ../../gnome/settingsdialog.py:1167 ../../kde4/settingsdialog.py:683 -#, python-format -msgid "Are you sure you want to delete the profile \"%s\" ?" +#: ../../qt4/app.py:1016 +msgid "Files to be restored:" msgstr "" -#: ../../gnome/settingsdialog.py:1173 ../../kde4/settingsdialog.py:1292 -msgid "Include folder" +#: ../../qt4/app.py:1031 +msgid "Do you really want to restore this files(s):" msgstr "" -#: ../../gnome/settingsdialog.py:1193 ../../kde4/settingsdialog.py:1278 -msgid "Include file" +#: ../../qt4/app.py:1226 +#, python-format +msgid "Snapshot: %s" msgstr "" -#: ../../gnome/settingsdialog.py:1235 ../../kde4/settingsdialog.py:1241 -msgid "Exclude pattern" +#: ../../qt4/app.py:1227 +#, python-format +msgid "View the snapshot made at %s" msgstr "" -#: ../../gnome/settingsdialog.py:1240 ../../kde4/settingsdialog.py:1251 -msgid "Exclude patterns can't contain ':' char !" +#: ../../qt4/app.py:1229 +msgid "View the current disk content" msgstr "" -#: ../../gnome/settingsdialog.py:1246 ../../kde4/settingsdialog.py:1257 -msgid "Exclude file" +#: ../../qt4/app.py:1268 +#, python-format +msgid "Restore '%s'" msgstr "" -#: ../../gnome/settingsdialog.py:1257 ../../kde4/settingsdialog.py:1261 -msgid "Exclude folder" +#: ../../qt4/app.py:1269 +#, python-format +msgid "Restore '%s' to ..." msgstr "" -#: ../../gnome/snapshotsdialog.py:240 -msgid "Jump to" +#: ../../qt4/app.py:1270 +#, python-format +msgid "Restore '%s' and delete new files" msgstr "" -#: ../../gnome/snapshotsdialog.py:248 ../../kde4/snapshotsdialog.py:164 -msgid "Diff" +#: ../../qt4/app.py:1368 ../../qt4/app.py:1385 +msgid "Authors" msgstr "" -#: ../../gnome/snapshotsdialog.py:277 ../../kde4/snapshotsdialog.py:339 -msgid "You can't compare a snapshot to itself" +#: ../../qt4/app.py:1369 ../../qt4/app.py:1388 +msgid "Translations" msgstr "" -#: ../../gnome/snapshotsdialog.py:284 ../../kde4/snapshotsdialog.py:346 -#, python-format -msgid "Command not found: %s" +#: ../../qt4/app.py:1370 ../../qt4/app.py:1391 +msgid "License" msgstr "" -#: ../../gnome/snapshotsdialog.py:307 ../../kde4/snapshotsdialog.py:367 -#, python-format -msgid "" -"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" +#: ../../qt4/logviewdialog.py:49 +msgid "Last Log View" msgstr "" -#: ../../gnome/snapshotsdialog.py:310 ../../kde4/snapshotsdialog.py:370 -#, python-format -msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +#: ../../qt4/logviewdialog.py:51 +msgid "Snapshot Log View" msgstr "" -#: ../../gnome/snapshotsdialog.py:312 ../../kde4/snapshotsdialog.py:372 -msgid "WARNING: This can not be revoked!" +#: ../../qt4/logviewdialog.py:59 ../../qt4/settingsdialog.py:59 +#: ../../qt4/settingsdialog.py:274 ../../qt4/settingsdialog.py:1899 +msgid "Profile:" msgstr "" -#: ../../gnome/snapshotsdialog.py:317 ../../kde4/snapshotsdialog.py:377 -#, python-format -msgid "Exclude \"%s\" from future snapshots?" +#: ../../qt4/logviewdialog.py:81 +msgid "Filter:" msgstr "" -#: ../../kde4/app.py:86 ../../gnome/mainwindow.glade:58 -#: ../../gnome/mainwindow.glade:60 -msgid "Refresh snapshots list" +#: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 +msgid "All" msgstr "" -#: ../../kde4/app.py:94 ../../gnome/mainwindow.glade:88 -#: ../../gnome/mainwindow.glade:90 -msgid "Remove Snapshot" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 +#: ../../qt4/settingsdialog.py:657 +msgid "Errors" msgstr "" -#: ../../kde4/app.py:98 ../../gnome/mainwindow.glade:105 -msgid "View Snapshot Log" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 +msgid "Changes" msgstr "" -#: ../../kde4/app.py:102 ../../gnome/mainwindow.glade:121 -msgid "View Last Log" +#: ../../qt4/logviewdialog.py:92 +msgid "Informations" msgstr "" -#: ../../kde4/app.py:108 ../../kde4/settingsdialog.py:69 -#: ../../gnome/mainwindow.glade:144 ../../gnome/mainwindow.glade:146 -#: ../../gnome/settingsdialog.glade:7 -msgid "Settings" +#: ../../qt4/logviewdialog.py:101 +msgid "[E] Error, [I] Information, [C] Change" msgstr "" -#: ../../kde4/app.py:124 ../../gnome/mainwindow.glade:169 -msgid "Shutdown system after snapshot has finished." +#: ../../qt4/logviewdialog.py:104 +msgid "decode paths" msgstr "" -#: ../../kde4/app.py:131 ../../gnome/mainwindow.glade:184 -#: ../../gnome/mainwindow.glade:186 -msgid "Exit" +#: ../../qt4/messagebox.py:56 +msgid "Error" msgstr "" -#: ../../kde4/app.py:186 ../../gnome/mainwindow.glade:289 -msgid "Up" +#: ../../qt4/messagebox.py:62 ../../qt4/messagebox.py:68 +msgid "Question" msgstr "" -#: ../../kde4/app.py:199 ../../gnome/mainwindow.glade:325 -msgid "Show hidden files" +#: ../../qt4/qt4systrayicon.py:69 +msgid "Start BackInTime" msgstr "" -#: ../../kde4/app.py:244 -msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +#: ../../qt4/qt4systrayicon.py:124 +msgid "Working..." msgstr "" -#: ../../kde4/app.py:839 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +#: ../../qt4/qt4tools.py:178 +msgid "Today" msgstr "" -#: ../../kde4/app.py:1140 ../../kde4/kde4systrayicon.py:117 -msgid "Working..." +#: ../../qt4/qt4tools.py:183 +msgid "Yesterday" msgstr "" -#: ../../kde4/logviewdialog.py:55 -msgid "Error Log View" +#: ../../qt4/qt4tools.py:188 +msgid "This week" msgstr "" -#: ../../kde4/logviewdialog.py:65 ../../kde4/settingsdialog.py:79 -#: ../../kde4/settingsdialog.py:293 ../../gnome/logviewdialog.glade:73 -#: ../../gnome/settingsdialog.glade:72 -msgid "Profile:" +#: ../../qt4/qt4tools.py:193 +msgid "Last week" msgstr "" -#: ../../kde4/logviewdialog.py:77 ../../gnome/logviewdialog.glade:110 -msgid "Filter:" +#: ../../qt4/restoredialog.py:75 +msgid "Show full Log" msgstr "" -#: ../../kde4/logviewdialog.py:100 ../../gnome/logviewdialog.glade:169 -msgid "[E] Error, [I] Information, [C] Change" +#: ../../qt4/settingsdialog.py:68 +msgid "Edit" msgstr "" -#: ../../kde4/logviewdialog.py:103 ../../gnome/logviewdialog.glade:195 -msgid "decode paths" +#: ../../qt4/settingsdialog.py:73 +msgid "Modify for Full System Backup" msgstr "" -#: ../../kde4/settingsdialog.py:88 -msgid "Edit" +#: ../../qt4/settingsdialog.py:77 ../../qt4/settingsdialog.py:451 +msgid "Add" +msgstr "" + +#: ../../qt4/settingsdialog.py:81 ../../qt4/settingsdialog.py:408 +#: ../../qt4/settingsdialog.py:467 +msgid "Remove" msgstr "" -#: ../../kde4/settingsdialog.py:106 ../../gnome/settingsdialog.glade:1207 +#: ../../qt4/settingsdialog.py:96 msgid "General" msgstr "" -#: ../../kde4/settingsdialog.py:114 ../../gnome/settingsdialog.glade:199 +#: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "" -#: ../../kde4/settingsdialog.py:127 ../../kde4/settingsdialog.py:1311 +#: ../../qt4/settingsdialog.py:119 +#, python-format +msgid "" +"Warning: %(app)s uses EncFS for encryption. A recent security audit " +"revealed several possible attack vectors for this. Please take a look at 'A " +"NOTE ON SECURITY' in 'man backintime'." +msgstr "" + +#: ../../qt4/settingsdialog.py:129 ../../qt4/settingsdialog.py:1568 msgid "Where to save snapshots" msgstr "" -#: ../../kde4/settingsdialog.py:146 +#: ../../qt4/settingsdialog.py:145 +msgid "Folder" +msgstr "" + +#: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" -#: ../../kde4/settingsdialog.py:158 ../../kde4/settingsdialog.py:283 -#: ../../gnome/settingsdialog.glade:323 ../../gnome/settingsdialog.glade:583 -#: ../../gnome/settingsdialog.glade:874 +#: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "" -#: ../../kde4/settingsdialog.py:163 ../../gnome/settingsdialog.glade:350 -#: ../../gnome/settingsdialog.glade:610 +#: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "" -#: ../../kde4/settingsdialog.py:168 ../../kde4/settingsdialog.py:288 -#: ../../gnome/settingsdialog.glade:377 ../../gnome/settingsdialog.glade:637 -#: ../../gnome/settingsdialog.glade:902 +#: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "" -#: ../../kde4/settingsdialog.py:173 ../../gnome/settingsdialog.glade:416 +#: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" -#: ../../kde4/settingsdialog.py:178 ../../gnome/settingsdialog.glade:459 +#: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" -#: ../../kde4/settingsdialog.py:184 +#: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "" -#: ../../kde4/settingsdialog.py:228 ../../kde4/settingsdialog.py:237 -#: ../../kde4/settingsdialog.py:243 ../../gnome/settingsdialog.glade:703 -#: ../../gnome/settingsdialog.glade:743 +#: ../../qt4/settingsdialog.py:201 +msgid "Key File" +msgstr "" + +#: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 +#: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "" -#: ../../kde4/settingsdialog.py:249 ../../gnome/settingsdialog.glade:775 +#: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" -#: ../../kde4/settingsdialog.py:252 ../../gnome/settingsdialog.glade:792 +#: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" -#: ../../kde4/settingsdialog.py:264 ../../gnome/settingsdialog.glade:968 +#: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "" -#: ../../kde4/settingsdialog.py:276 ../../gnome/settingsdialog.glade:848 -msgid "Auto Host / User / Profile Id" +#: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 +msgid "Full snapshot path: " msgstr "" -#: ../../kde4/settingsdialog.py:301 +#: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "" -#: ../../kde4/settingsdialog.py:311 ../../gnome/settingsdialog.glade:1092 +#: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "" -#: ../../kde4/settingsdialog.py:322 ../../gnome/settingsdialog.glade:1079 +#: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "" -#: ../../kde4/settingsdialog.py:333 ../../gnome/settingsdialog.glade:1066 +#: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "" -#: ../../kde4/settingsdialog.py:344 ../../gnome/settingsdialog.glade:1053 +#: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "" -#: ../../kde4/settingsdialog.py:353 ../../gnome/settingsdialog.glade:1014 +#: ../../qt4/settingsdialog.py:339 msgid "" -"Run Back In Time periodically with anacron. This is useful if the computer " -"is not running regular." +"Run Back In Time repeatedly. This is useful if the computer is not running " +"regular." msgstr "" -#: ../../kde4/settingsdialog.py:357 ../../gnome/settingsdialog.glade:1040 -msgid "Frequency in days:" +#: ../../qt4/settingsdialog.py:344 +msgid "Every:" msgstr "" -#: ../../kde4/settingsdialog.py:368 ../../gnome/settingsdialog.glade:1026 +#: ../../qt4/settingsdialog.py:362 msgid "" "Run Back In Time as soon as the drive is connected (only once every X " "days).\n" "You will be prompted for your sudo password." msgstr "" -#: ../../kde4/settingsdialog.py:379 ../../gnome/settingsdialog.glade:1310 +#: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "" -#: ../../kde4/settingsdialog.py:403 ../../kde4/settingsdialog.py:445 -#: ../../gnome/settingsdialog.glade:1411 +#: ../../qt4/settingsdialog.py:381 +msgid "Include files and folders" +msgstr "" + +#: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "" -#: ../../kde4/settingsdialog.py:408 ../../kde4/settingsdialog.py:450 -#: ../../gnome/settingsdialog.glade:1427 +#: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "" -#: ../../kde4/settingsdialog.py:418 ../../gnome/settingsdialog.glade:1474 +#: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "" -#: ../../kde4/settingsdialog.py:421 ../../gnome/settingsdialog.glade:1328 +#: ../../qt4/settingsdialog.py:417 msgid "" "Warning: Wildcards ('foo*', '[fF]oo', 'fo?') will be ignored with " "mode 'SSH encrypted'.\n" "Only separate asterisk are allowed ('foo/*', 'foo/**/bar')" msgstr "" -#: ../../kde4/settingsdialog.py:430 +#: ../../qt4/settingsdialog.py:425 +msgid "Exclude patterns, files or folders" +msgstr "" + +#: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "" -#: ../../kde4/settingsdialog.py:460 ../../gnome/settingsdialog.glade:1905 +#: ../../qt4/settingsdialog.py:463 +msgid "Add default" +msgstr "" + +#: ../../qt4/settingsdialog.py:474 +msgid "Exclude files bigger than: " +msgstr "" + +#: ../../qt4/settingsdialog.py:475 +#, python-format +msgid "" +"Exclude files bigger than value in %(prefix)s.\n" +"With 'Full rsync mode' disabled this will only affect new files\n" +"because for rsync this is a transfer option, not an exclude option.\n" +"So big files that has been backed up before will remain in snapshots\n" +"even if they had changed." +msgstr "" + +#: ../../qt4/settingsdialog.py:493 msgid "Auto-remove" msgstr "" -#: ../../kde4/settingsdialog.py:464 ../../gnome/settingsdialog.glade:1608 +#: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "" -#: ../../kde4/settingsdialog.py:478 ../../gnome/settingsdialog.glade:1624 +#: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "" -#: ../../kde4/settingsdialog.py:490 ../../gnome/settingsdialog.glade:1642 +#: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" -#: ../../kde4/settingsdialog.py:514 ../../gnome/settingsdialog.glade:1697 +#: ../../qt4/settingsdialog.py:551 +msgid "Run in background on remote Host." +msgstr "" + +#: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "" -#: ../../kde4/settingsdialog.py:517 ../../kde4/settingsdialog.py:522 -#: ../../gnome/settingsdialog.glade:1705 ../../gnome/settingsdialog.glade:1729 +#: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "" -#: ../../kde4/settingsdialog.py:519 ../../gnome/settingsdialog.glade:1717 +#: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "" -#: ../../kde4/settingsdialog.py:524 ../../gnome/settingsdialog.glade:1743 +#: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "" -#: ../../kde4/settingsdialog.py:527 +#: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "" -#: ../../kde4/settingsdialog.py:529 ../../gnome/settingsdialog.glade:1769 +#: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "" -#: ../../kde4/settingsdialog.py:532 ../../gnome/settingsdialog.glade:1781 +#: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "" -#: ../../kde4/settingsdialog.py:534 ../../gnome/settingsdialog.glade:1795 +#: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "" -#: ../../kde4/settingsdialog.py:537 ../../gnome/settingsdialog.glade:1496 +#: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "" -#: ../../kde4/settingsdialog.py:546 ../../gnome/settingsdialog.glade:2104 +#: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "" -#: ../../kde4/settingsdialog.py:549 ../../gnome/settingsdialog.glade:1920 +#: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "" -#: ../../kde4/settingsdialog.py:552 ../../gnome/settingsdialog.glade:1937 +#: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "" -#: ../../kde4/settingsdialog.py:555 +#: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" msgstr "" -#: ../../kde4/settingsdialog.py:558 ../../gnome/settingsdialog.glade:1955 -msgid "Backup files on restore" +#: ../../qt4/settingsdialog.py:611 +msgid "Run only one snapshot at a time" msgstr "" -#: ../../kde4/settingsdialog.py:561 ../../gnome/settingsdialog.glade:1972 +#: ../../qt4/settingsdialog.py:612 +msgid "" +"Other snapshots will be blocked until the current snapshot is done.\n" +"This is a global option. So it will effect all profiles for this user.\n" +"But you need to activate this for all other users, too." +msgstr "" + +#: ../../qt4/settingsdialog.py:617 +msgid "Backup replaced files on restore" +msgstr "" + +#: ../../qt4/settingsdialog.py:618 +#, python-format +msgid "" +"Newer versions of files will be renamed with trailing '%(suffix)s' before " +"restoring.\n" +"If you don't need them anymore you can remove them with '%(cmd)s'" +msgstr "" + +#: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "" -#: ../../kde4/settingsdialog.py:564 ../../gnome/settingsdialog.glade:1989 +#: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "" -#: ../../kde4/settingsdialog.py:567 ../../gnome/settingsdialog.glade:2006 +#: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "" -#: ../../kde4/settingsdialog.py:568 ../../gnome/settingsdialog.glade:2032 +#: ../../qt4/settingsdialog.py:634 msgid "" -"- snapshots are no read-only\n" -"- destination file-system must support all linux attributes (dates, rights, " +"- snapshots are not read-only\n" +"- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" -#: ../../kde4/settingsdialog.py:575 ../../gnome/settingsdialog.glade:2045 +#: ../../qt4/settingsdialog.py:641 +msgid "Take a new snapshot regardless of there were changes or not." +msgstr "" + +#: ../../qt4/settingsdialog.py:644 msgid "Check for changes (don't take a new snapshot if nothing changed)" msgstr "" -#: ../../kde4/settingsdialog.py:582 +#: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "" -#: ../../kde4/settingsdialog.py:597 ../../gnome/settingsdialog.glade:2366 -msgid "Expert Options" +#: ../../qt4/settingsdialog.py:656 +msgid "None" msgstr "" -#: ../../kde4/settingsdialog.py:600 +#: ../../qt4/settingsdialog.py:658 +msgid "Changes & Errors" +msgstr "" + +#: ../../qt4/settingsdialog.py:674 msgid "Change these options only if you really know what you are doing !" msgstr "" -#: ../../kde4/settingsdialog.py:608 ../../gnome/settingsdialog.glade:2133 -msgid "Run 'nice' as cron job (default: enabled)" +#: ../../qt4/settingsdialog.py:678 +msgid "Run 'nice':" +msgstr "" + +#: ../../qt4/settingsdialog.py:684 ../../qt4/settingsdialog.py:696 +msgid "as cron job" +msgstr "" + +#: ../../qt4/settingsdialog.py:687 ../../qt4/settingsdialog.py:702 +#: ../../qt4/settingsdialog.py:716 +msgid "on remote host" +msgstr "" + +#: ../../qt4/settingsdialog.py:690 +msgid "Run 'ionice':" msgstr "" -#: ../../kde4/settingsdialog.py:611 ../../gnome/settingsdialog.glade:2150 -msgid "Run 'ionice' as cron job (default: enabled)" +#: ../../qt4/settingsdialog.py:699 +msgid "when taking a manual snapshot" msgstr "" -#: ../../kde4/settingsdialog.py:614 ../../gnome/settingsdialog.glade:2167 -msgid "Run 'ionice' when taking a manual snapshot (default: disabled)" +#: ../../qt4/settingsdialog.py:706 +msgid "Run 'rsync' with 'nocache':" msgstr "" -#: ../../kde4/settingsdialog.py:617 ../../gnome/settingsdialog.glade:2184 -msgid "Run 'nice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:712 +msgid "on local machine" msgstr "" -#: ../../kde4/settingsdialog.py:620 ../../gnome/settingsdialog.glade:2201 -msgid "Run 'ionice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:719 +msgid "Redirect stdout to /dev/null in cronjobs." msgstr "" -#: ../../kde4/settingsdialog.py:626 ../../gnome/settingsdialog.glade:2224 +#: ../../qt4/settingsdialog.py:725 +msgid "Redirect stderr to /dev/null in cronjobs." +msgstr "" + +#: ../../qt4/settingsdialog.py:734 msgid "Limit rsync bandwidth usage: " msgstr "" -#: ../../kde4/settingsdialog.py:629 ../../gnome/settingsdialog.glade:2259 +#: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" -#: ../../kde4/settingsdialog.py:634 ../../gnome/settingsdialog.glade:2280 +#: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "" -#: ../../kde4/settingsdialog.py:637 ../../gnome/settingsdialog.glade:2297 +#: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "" -#: ../../kde4/settingsdialog.py:640 ../../gnome/settingsdialog.glade:2314 +#: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute links)" msgstr "" -#: ../../kde4/settingsdialog.py:643 ../../gnome/settingsdialog.glade:2331 -msgid "Copy links (dereference symbolic links)" +#: ../../qt4/settingsdialog.py:834 +msgid "Paste additional options to rsync" msgstr "" -#: ../../kde4/snapshotsdialog.py:46 ../../kde4/snapshotsdialog.py:173 -#: ../../gnome/snapshotsdialog.glade:385 -msgid "Diff Options" +#: ../../qt4/settingsdialog.py:837 +msgid "" +"Options must be quoted e.g. --exclude-from=\"/path/to/my exclude file\"." msgstr "" -#: ../../kde4/snapshotsdialog.py:56 ../../gnome/snapshotsdialog.glade:314 -msgid "Command:" +#: ../../qt4/settingsdialog.py:847 +msgid "Add prefix to SSH commands" msgstr "" -#: ../../kde4/snapshotsdialog.py:60 ../../gnome/snapshotsdialog.glade:322 -msgid "Parameters:" +#: ../../qt4/settingsdialog.py:850 +#, python-format +msgid "" +"Prefix to run before every command on remote host.\n" +"Variables need to be escaped with \\$FOO.\n" +"This doesn't touch rsync. So to add a prefix\n" +"for rsync use \"%(cb_rsync_options)s\" with\n" +"%(rsync_options_value)s\n" +"\n" +"%(default)s: %(def_value)s" msgstr "" -#: ../../kde4/snapshotsdialog.py:64 ../../gnome/snapshotsdialog.glade:334 -msgid "Use %1 and %2 for path parameters" +#: ../../qt4/settingsdialog.py:858 ../../qt4/settingsdialog.py:1691 +msgid "default" msgstr "" -#: ../../kde4/snapshotsdialog.py:123 ../../gnome/snapshotsdialog.glade:184 -#: ../../gnome/snapshotsdialog.glade:186 -msgid "Delete" +#: ../../qt4/settingsdialog.py:875 +msgid "Restore Config" msgstr "" -#: ../../kde4/snapshotsdialog.py:128 ../../gnome/snapshotsdialog.glade:199 -#: ../../gnome/snapshotsdialog.glade:201 -msgid "Select All" +#: ../../qt4/settingsdialog.py:891 +msgid "" +"Full system backup can only create a snapshot to be restored to the same " +"physical disk(s) with the same disk partitioning as from the source; " +"restoring to new physical disks or the same disks with different " +"partitioning will yield a potentially broken and unusable system.\n" +"\n" +"Full system backup will override some settings that may have been " +"customized. Continue?" msgstr "" -#: ../../kde4/snapshotsdialog.py:132 ../../gnome/snapshotsdialog.glade:88 -msgid "List only different snapshots" +#: ../../qt4/settingsdialog.py:922 +msgid "New profile" msgstr "" -#: ../../kde4/snapshotsdialog.py:139 ../../gnome/snapshotsdialog.glade:110 -msgid "List only equal snapshots to: " +#: ../../qt4/settingsdialog.py:938 +msgid "Rename profile" msgstr "" -#: ../../kde4/snapshotsdialog.py:149 ../../gnome/snapshotsdialog.glade:146 -msgid "Deep check (more accurate, but slow)" +#: ../../qt4/settingsdialog.py:952 +#, python-format +msgid "Are you sure you want to delete the profile \"%s\" ?" msgstr "" -#: ../../kde4/snapshotsdialog.py:174 -msgid "Go To" +#: ../../qt4/settingsdialog.py:1191 +msgid "" +"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " +"*/3 for periodic backups every 3 hours" msgstr "" -#: ../../gnome/logviewdialog.glade:9 -msgid "Log View" +#: ../../qt4/settingsdialog.py:1489 +msgid "Exclude pattern" msgstr "" -#: ../../gnome/logviewdialog.glade:179 -msgid "scroll down automatic" +#: ../../qt4/settingsdialog.py:1502 +msgid "Exclude file" msgstr "" -#: ../../gnome/mainwindow.glade:7 -msgid "Back In Time" +#: ../../qt4/settingsdialog.py:1506 +msgid "Exclude folder" msgstr "" -#: ../../gnome/mainwindow.glade:45 -msgid "Backup Now" +#: ../../qt4/settingsdialog.py:1525 +msgid "Include file" msgstr "" -#: ../../gnome/mainwindow.glade:171 -msgid "Shutdown" +#: ../../qt4/settingsdialog.py:1533 ../../qt4/settingsdialog.py:1553 +#, python-format +msgid "" +"\"%s\" is a symlink. The linked target will not be backed up until you " +"include it, too.\n" +"Would you like to include the symlinks target instead?" +msgstr "" + +#: ../../qt4/settingsdialog.py:1545 +msgid "Include folder" +msgstr "" + +#: ../../qt4/settingsdialog.py:1572 +msgid "Are you sure you want to change snapshots folder ?" msgstr "" -#: ../../gnome/mainwindow.glade:287 -msgid "Parent folder" +#: ../../qt4/settingsdialog.py:1688 +msgid "enabled" msgstr "" -#: ../../gnome/mainwindow.glade:327 -msgid "Hidden files" +#: ../../qt4/settingsdialog.py:1690 +msgid "disabled" msgstr "" -#: ../../gnome/mainwindow.glade:451 +#: ../../qt4/settingsdialog.py:1715 +msgid "Restore Settings" +msgstr "" + +#: ../../qt4/settingsdialog.py:1732 +msgid " and add your user to group 'fuse'" +msgstr "" + +#: ../../qt4/settingsdialog.py:1736 +#, python-format msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +"Please navigate to the snapshot from which you want to restore %(appName)s's " +"configuration. The path may look like: \n" +"%(samplePath)s\n" +"\n" +"If your snapshots are on a remote drive or if they are encrypted you need to " +"manually mount them first. If you use Mode SSH you also may need to set up " +"public key login to the remote host%(addFuse)s.\n" +"Take a look at 'man backintime'." msgstr "" -#: ../../gnome/settingsdialog.glade:287 -msgid "Where to save snapshots" +#: ../../qt4/settingsdialog.py:1794 ../../qt4/settingsdialog.py:1854 +msgid "No config found" msgstr "" -#: ../../gnome/settingsdialog.glade:483 -msgid "Private key:" +#: ../../qt4/snapshotsdialog.py:49 ../../qt4/snapshotsdialog.py:173 +msgid "Diff Options" msgstr "" -#: ../../gnome/settingsdialog.glade:534 -msgid "Advanced SSH Settings" +#: ../../qt4/snapshotsdialog.py:56 +msgid "Command:" msgstr "" -#: ../../gnome/settingsdialog.glade:552 -msgid "SSH Settings" +#: ../../qt4/snapshotsdialog.py:60 +msgid "Parameters:" msgstr "" -#: ../../gnome/settingsdialog.glade:815 -msgid "Password" +#: ../../qt4/snapshotsdialog.py:64 +msgid "Use %1 and %2 for path parameters" msgstr "" -#: ../../gnome/settingsdialog.glade:930 -msgid "Profile Id:" +#: ../../qt4/snapshotsdialog.py:106 +msgid "List only different snapshots" msgstr "" -#: ../../gnome/settingsdialog.glade:1115 -msgid "" -"hours seperate by comma ( e.g. 8,12,18,23) or */3 for periodic backups every " -"3 hours (cron style)" +#: ../../qt4/snapshotsdialog.py:113 +msgid "List only equal snapshots to: " +msgstr "" + +#: ../../qt4/snapshotsdialog.py:123 +msgid "Deep check (more accurate, but slow)" +msgstr "" + +#: ../../qt4/snapshotsdialog.py:144 +msgid "Delete" msgstr "" -#: ../../gnome/settingsdialog.glade:1163 -msgid "Schedule" +#: ../../qt4/snapshotsdialog.py:148 +msgid "Select All" msgstr "" -#: ../../gnome/settingsdialog.glade:1363 -msgid "Highly recommended:" +#: ../../qt4/snapshotsdialog.py:161 +msgid "Diff" msgstr "" -#: ../../gnome/settingsdialog.glade:1377 -msgid "label" +#: ../../qt4/snapshotsdialog.py:172 +msgid "Go To" msgstr "" -#: ../../gnome/settingsdialog.glade:1755 -msgid "week(s)" +#: ../../qt4/snapshotsdialog.py:326 +msgid "You can't compare a snapshot to itself" msgstr "" -#: ../../gnome/settingsdialog.glade:2069 -msgid "Log level:" +#: ../../qt4/snapshotsdialog.py:333 +#, python-format +msgid "Command not found: %s" msgstr "" -#: ../../gnome/settingsdialog.glade:2121 +#: ../../qt4/snapshotsdialog.py:354 +#, python-format msgid "" -"Change these options only if you really know what you are doing !" +"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" msgstr "" -#: ../../gnome/snapshotsdialog.glade:263 -msgid "Diff with" +#: ../../qt4/snapshotsdialog.py:357 +#, python-format +msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" msgstr "" -#: ../../gnome/textinputdialog.glade:7 -msgid "Pattern" +#: ../../qt4/snapshotsdialog.py:359 +msgid "WARNING: This can not be revoked!" msgstr "" -#: ../../gnome/textinputdialog.glade:70 -msgid "Text" +#: ../../qt4/snapshotsdialog.py:374 +#, python-format +msgid "Exclude \"%s\" from future snapshots?" msgstr "" diff -Nru backintime-1.0.36/common/po/en_CA.po backintime-1.1.12/common/po/en_CA.po --- backintime-1.0.36/common/po/en_CA.po 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/po/en_CA.po 2016-01-11 18:07:58.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2013-11-09 22:34+0100\n" +"POT-Creation-Date: 2015-12-19 00:47+0100\n" "PO-Revision-Date: 2010-02-09 04:57+0000\n" "Last-Translator: Itai Molenaar \n" "Language-Team: English (Canada) \n" @@ -15,198 +15,230 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2014-08-06 10:20+0000\n" -"X-Generator: Launchpad (build 17147)\n" +"X-Launchpad-Export-Date: 2016-01-11 17:52+0000\n" +"X-Generator: Launchpad (build 17881)\n" -#: ../../common/config.py:72 +#: ../../common/configfile.py:60 +#, python-format +msgid "Failed to save config: %s" +msgstr "" + +#: ../../common/configfile.py:78 +#, python-format +msgid "Failed to load config: %s" +msgstr "" + +#: ../../common/configfile.py:352 ../../common/configfile.py:414 +#, python-format +msgid "Profile \"%s\" already exists !" +msgstr "Profile \"%s\" already exists!" + +#: ../../common/configfile.py:383 +msgid "You can't remove the last profile !" +msgstr "You can't remove the last profile!" + +#: ../../common/config.py:76 msgid "Disabled" msgstr "Disabled" -#: ../../common/config.py:73 +#: ../../common/config.py:77 msgid "At every boot/reboot" msgstr "" -#: ../../common/config.py:74 +#: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Every 5 minutes" -#: ../../common/config.py:75 +#: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Every 10 minutes" -#: ../../common/config.py:76 +#: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "" -#: ../../common/config.py:77 +#: ../../common/config.py:81 msgid "Every hour" msgstr "" -#: ../../common/config.py:78 +#: ../../common/config.py:82 msgid "Every 2 hours" msgstr "" -#: ../../common/config.py:79 +#: ../../common/config.py:83 msgid "Every 4 hours" msgstr "" -#: ../../common/config.py:80 +#: ../../common/config.py:84 msgid "Every 6 hours" msgstr "" -#: ../../common/config.py:81 +#: ../../common/config.py:85 msgid "Every 12 hours" msgstr "" -#: ../../common/config.py:82 +#: ../../common/config.py:86 msgid "Custom Hours" msgstr "" -#: ../../common/config.py:83 +#: ../../common/config.py:87 msgid "Every Day" msgstr "Every Day" -#: ../../common/config.py:84 -msgid "Daily (anacron)" +#: ../../common/config.py:88 +msgid "Repeatedly (anacron)" msgstr "" -#: ../../common/config.py:85 +#: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "" -#: ../../common/config.py:86 +#: ../../common/config.py:90 msgid "Every Week" msgstr "Every Week" -#: ../../common/config.py:87 +#: ../../common/config.py:91 msgid "Every Month" msgstr "Every Month" -#: ../../common/config.py:91 +#: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Day(s)" -#: ../../common/config.py:92 +#: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Week(s)" -#: ../../common/config.py:93 +#: ../../common/config.py:97 msgid "Year(s)" msgstr "Year(s)" -#: ../../common/config.py:100 +#: ../../common/config.py:101 +msgid "Hour(s)" +msgstr "" + +#: ../../common/config.py:104 +msgid "Month(s)" +msgstr "" + +#: ../../common/config.py:126 ../../qt4/settingsdialog.py:551 msgid " EXPERIMENTAL!" msgstr "" -#: ../../common/config.py:103 +#: ../../common/config.py:129 msgid "Local" msgstr "" -#: ../../common/config.py:104 +#: ../../common/config.py:130 msgid "SSH" msgstr "" -#: ../../common/config.py:104 ../../common/config.py:106 -#: ../../gnome/settingsdialog.py:475 ../../kde4/settingsdialog.py:1325 +#: ../../common/config.py:130 ../../common/config.py:132 +#: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "" -#: ../../common/config.py:105 +#: ../../common/config.py:131 msgid "Local encrypted" msgstr "" -#: ../../common/config.py:105 ../../common/config.py:106 +#: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "" -#: ../../common/config.py:106 +#: ../../common/config.py:132 msgid "SSH encrypted" msgstr "" -#: ../../common/config.py:112 +#: ../../common/config.py:135 msgid "Default" msgstr "" -#: ../../common/config.py:113 +#: ../../common/config.py:136 msgid "AES128-CTR" msgstr "" -#: ../../common/config.py:114 +#: ../../common/config.py:137 msgid "AES192-CTR" msgstr "" -#: ../../common/config.py:115 +#: ../../common/config.py:138 msgid "AES256-CTR" msgstr "" -#: ../../common/config.py:116 +#: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "" -#: ../../common/config.py:117 +#: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "" -#: ../../common/config.py:118 +#: ../../common/config.py:141 msgid "AES128-CBC" msgstr "" -#: ../../common/config.py:119 +#: ../../common/config.py:142 msgid "3DES-CBC" msgstr "" -#: ../../common/config.py:120 +#: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "" -#: ../../common/config.py:121 +#: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "" -#: ../../common/config.py:122 +#: ../../common/config.py:145 msgid "AES192-CBC" msgstr "" -#: ../../common/config.py:123 +#: ../../common/config.py:146 msgid "AES256-CBC" msgstr "" -#: ../../common/config.py:124 +#: ../../common/config.py:147 msgid "ARCFOUR" msgstr "" -#: ../../common/config.py:129 +#: ../../common/config.py:153 msgid "Main profile" msgstr "Main profile" -#: ../../common/config.py:256 ../../common/config.py:275 -#: ../../common/config.py:286 ../../common/config.py:291 +#: ../../common/config.py:289 ../../common/config.py:296 +#: ../../common/config.py:307 ../../common/config.py:312 +#: ../../qt4/qt4systrayicon.py:61 #, python-format msgid "Profile: \"%s\"" msgstr "Profile: \"%s\"" -#: ../../common/config.py:256 +#: ../../common/config.py:289 msgid "Snapshots folder is not valid !" msgstr "Snapshots folder is not valid!" -#: ../../common/config.py:275 +#: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "You must select at least one folder to backup!" -#: ../../common/config.py:286 +#: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "You can't include backup folder!" -#: ../../common/config.py:291 +#: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "You can't include a backup sub-folder!" -#: ../../common/config.py:361 +#: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s is not a folder!" -#: ../../common/config.py:376 ../../common/config.py:389 +#: ../../common/config.py:380 +msgid "Host/User/Profile-ID must not be empty!" +msgstr "" + +#: ../../common/config.py:388 ../../common/config.py:420 #, python-format msgid "" "Can't write to: %s\n" @@ -215,59 +247,68 @@ "Can't write to: %s\n" "Are you sure you have write access?" -#: ../../common/config.py:1286 +#: ../../common/config.py:400 +#, python-format msgid "" -"Can't find crontab.\n" -"Are you sure cron is installed ?\n" -"If not you should disable all automatic backups." +"Destination filesystem for '%(path)s' is formatted with FAT which doesn't " +"support hard-links. Please use a native Linux filesystem." msgstr "" -"Can't find crontab.\n" -"Are you sure cron is installed ?\n" -"If not you should disable all automatic backups." -#: ../../common/config.py:1338 +#: ../../common/config.py:405 #, python-format -msgid "Schedule udev doesn't work with mode %s" +msgid "" +"Destination filsystem for '%(path)s' is a SMB mounted share. Please make " +"sure the remote SMB server supports symlinks or activate '%(copyLinks)s' in " +"'%(expertOptions)s'." msgstr "" -#: ../../common/config.py:1342 -#, python-format -msgid "Couldn't find UUID for \"%s\"" +#: ../../common/config.py:408 ../../qt4/settingsdialog.py:815 +msgid "Copy links (dereference symbolic links)" msgstr "" -#: ../../common/config.py:1379 -msgid "Failed to remove udev rules" -msgstr "" +#: ../../common/config.py:409 ../../qt4/settingsdialog.py:669 +msgid "Expert Options" +msgstr "Expert Options" -#: ../../common/config.py:1385 -msgid "Failed to create udev rules" +#: ../../common/config.py:411 +#, python-format +msgid "" +"Destination filesystem for '%(path)s is a sshfs mounted share. sshfs doesn't " +"support hard-links. Please use mode 'SSH' instead." msgstr "" -#: ../../common/config.py:1420 +#: ../../common/config.py:1407 msgid "" -"Can't find anacron.\n" -"Are you sure anacron is installed ?\n" -"If not you should disable daily anacron backups." +"Can't find crontab.\n" +"Are you sure cron is installed ?\n" +"If not you should disable all automatic backups." msgstr "" +"Can't find crontab.\n" +"Are you sure cron is installed ?\n" +"If not you should disable all automatic backups." -#: ../../common/config.py:1439 -msgid "Please provide your sudo password to install the udev rule." +#: ../../common/config.py:1411 +msgid "Failed to write new crontab." msgstr "" -#: ../../common/config.py:1445 -msgid "Please provide your sudo password to remove unused udev rules." +#: ../../common/config.py:1505 +#, python-format +msgid "" +"Could not install Udev rule for profile %(profile_id)s. DBus Service " +"'%(dbus_interface)s' wasn't available" msgstr "" -#: ../../common/configfile.py:253 ../../common/configfile.py:315 +#: ../../common/config.py:1517 #, python-format -msgid "Profile \"%s\" already exists !" -msgstr "Profile \"%s\" already exists!" +msgid "Schedule udev doesn't work with mode %s" +msgstr "" -#: ../../common/configfile.py:284 -msgid "You can't remove the last profile !" -msgstr "You can't remove the last profile!" +#: ../../common/config.py:1526 +#, python-format +msgid "Couldn't find UUID for \"%s\"" +msgstr "" -#: ../../common/encfstools.py:95 +#: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" @@ -275,38 +316,38 @@ "%(error)s" msgstr "" -#: ../../common/encfstools.py:105 +#: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "" -#: ../../common/encfstools.py:149 +#: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "" -#: ../../common/encfstools.py:153 +#: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" -#: ../../common/encfstools.py:154 +#: ../../common/encfstools.py:171 msgid "Cancel" msgstr "" -#: ../../common/encfstools.py:157 +#: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "" -#: ../../common/encfstools.py:161 +#: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "" -#: ../../common/encfstools.py:166 +#: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" -#: ../../common/encfstools.py:174 ../../common/sshtools.py:207 +#: ../../common/encfstools.py:196 ../../common/sshtools.py:262 #, python-format msgid "" "%(user)s is not member of group 'fuse'.\n" @@ -314,70 +355,73 @@ "Look at 'man backintime' for further instructions." msgstr "" -#: ../../common/encfstools.py:189 +#: ../../common/encfstools.py:211 msgid "" "encfs version 1.7.2 and before has a bug with option --reverse. Please " "update encfs" msgstr "" -#: ../../common/encfstools.py:453 ../../common/encfstools.py:480 -#: ../../common/snapshots.py:982 ../../common/snapshots.py:1288 -#: ../../kde4/app.py:82 ../../gnome/mainwindow.glade:43 +#: ../../common/encfstools.py:512 ../../common/snapshots.py:1131 +#: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "Take snapshot" -#: ../../common/mount.py:195 +#: ../../common/mount.py:204 #, python-format msgid "" "Hash collision occurred in hash_id %s. Incrementing global value " "hash_collision and try again." msgstr "" -#: ../../common/mount.py:246 +#: ../../common/mount.py:259 #, python-format msgid "mountpoint %s not empty." msgstr "" -#: ../../common/mount.py:286 +#: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" -#: ../../common/password.py:425 +#: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" -#: ../../common/snapshots.py:171 ../../gnome/app.py:1127 -#: ../../kde4/app.py:1014 +#: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Now" -#: ../../common/snapshots.py:182 ../../gnome/gnometools.py:37 +#: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "" -#: ../../common/snapshots.py:282 +#: ../../common/snapshots.py:344 msgid "" "### This log has been decoded with automatic search pattern\n" "### If some paths are not decoded you can manually decode them with:\n" msgstr "" -#: ../../common/snapshots.py:465 +#: ../../common/snapshots.py:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "" -#: ../../common/snapshots.py:564 +#: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "" -#: ../../common/snapshots.py:739 +#: ../../common/snapshots.py:752 ../../qt4/app.py:377 ../../qt4/app.py:675 +#: ../../qt4/app.py:692 ../../qt4/qt4systrayicon.py:65 +msgid "Done" +msgstr "Done" + +#: ../../common/snapshots.py:860 msgid "" "Back In Time changed its backup format.\n" "\n" "Your old snapshots can be moved according to this new format. OK?" msgstr "" -#: ../../common/snapshots.py:749 +#: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" @@ -394,13 +438,13 @@ "\n" "(The program will still be able to discriminate between them)" -#: ../../common/snapshots.py:752 +#: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" msgstr "" -#: ../../common/snapshots.py:803 +#: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" @@ -413,7 +457,7 @@ "cannot continue taking snapshots" msgstr "" -#: ../../common/snapshots.py:812 +#: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" @@ -423,14 +467,14 @@ "if you are done restart Back In Time to proceed" msgstr "" -#: ../../common/snapshots.py:825 +#: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" msgstr "" -#: ../../common/snapshots.py:830 +#: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" @@ -442,17 +486,21 @@ "If you do not, you will be asked again next time you start Back In Time." msgstr "" -#: ../../common/snapshots.py:839 +#: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "" -#: ../../common/snapshots.py:841 +#: ../../common/snapshots.py:953 msgid "" "Back In Time still cannot continue taking new snapshots.\n" "Restart Back In Time to see the questions again" msgstr "" -#: ../../common/snapshots.py:913 +#: ../../common/snapshots.py:972 +msgid "Deferring backup while on battery" +msgstr "" + +#: ../../common/snapshots.py:1035 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it." @@ -460,156 +508,163 @@ "Can't find snapshots folder.\n" "If it is on a removable drive, please plug it in." -#: ../../common/snapshots.py:915 +#: ../../common/snapshots.py:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "Waiting %s second." msgstr[1] "Waiting %s seconds." -#: ../../common/snapshots.py:941 +#: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "" -#: ../../common/snapshots.py:950 +#: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "Finalizing" -#: ../../common/snapshots.py:1088 +#: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "Can't create folder: %s" -#: ../../common/snapshots.py:1107 +#: ../../common/snapshots.py:1217 msgid "..." msgstr "..." -#: ../../common/snapshots.py:1134 +#: ../../common/snapshots.py:1238 +#, python-format +msgid "Found leftover '%s' which can be continued." +msgstr "" + +#: ../../common/snapshots.py:1250 +#, python-format +msgid "Remove leftover '%s' folder from last run" +msgstr "" + +#: ../../common/snapshots.py:1263 #, python-format msgid "Can't remove folder: %s" msgstr "Can't remove folder: %s" -#: ../../common/snapshots.py:1219 +#: ../../common/snapshots.py:1340 #, python-format msgid "Compare with snapshot %s" msgstr "Compare with snapshot %s" -#: ../../common/snapshots.py:1248 +#: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "Create hard-links" -#: ../../common/snapshots.py:1335 +#: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "Save config file ..." -#: ../../common/snapshots.py:1341 +#: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "Save permission..." -#: ../../common/snapshots.py:1442 +#: ../../common/snapshots.py:1470 +msgid "Save permission over ssh failed. Retry normal method" +msgstr "" + +#: ../../common/snapshots.py:1521 #, python-format msgid "Can't rename %(new_path)s to %(path)s" msgstr "" -#: ../../common/snapshots.py:1562 -msgid "Remove old snapshots" -msgstr "Remove old snapshots" - -#: ../../common/snapshots.py:1586 ../../kde4/settingsdialog.py:501 -#: ../../gnome/settingsdialog.glade:1660 +#: ../../common/snapshots.py:1695 ../../common/snapshots.py:1728 +#: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "Smart remove" -#: ../../common/snapshots.py:1591 +#: ../../common/snapshots.py:1704 +msgid "Remove old snapshots" +msgstr "Remove old snapshots" + +#: ../../common/snapshots.py:1733 msgid "Try to keep min free space" msgstr "Try to keep min free space" -#: ../../common/snapshots.py:1621 +#: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" -#: ../../common/sshtools.py:106 +#: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "" -#: ../../common/sshtools.py:113 +#: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "" -#: ../../common/sshtools.py:187 -#, python-format -msgid "" -"Failed to unlock SSH private key:\n" -"Error: %s" -msgstr "" - -#: ../../common/sshtools.py:194 +#: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" -#: ../../common/sshtools.py:199 +#: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" -#: ../../common/sshtools.py:217 +#: ../../common/sshtools.py:278 #, python-format msgid "" "Password-less authentication for %(user)s@%(host)s failed. Look at 'man " "backintime' for further instructions." msgstr "" -#: ../../common/sshtools.py:229 +#: ../../common/sshtools.py:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" -#: ../../common/sshtools.py:254 +#: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" -#: ../../common/sshtools.py:274 +#: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" -#: ../../common/sshtools.py:276 +#: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:278 +#: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:280 +#: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" -#: ../../common/sshtools.py:302 +#: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" -#: ../../common/sshtools.py:325 ../../common/sshtools.py:383 +#: ../../common/sshtools.py:423 ../../common/sshtools.py:553 #, python-format msgid "" "Remote host %(host)s doesn't support '%(command)s':\n" @@ -617,7 +672,7 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:387 +#: ../../common/sshtools.py:556 #, python-format msgid "" "Check commands on host %(host)s returned unknown error:\n" @@ -625,96 +680,149 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:400 +#: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "" -#: ../../gnome/app.py:185 ../../gnome/app.py:594 ../../gnome/app.py:608 -#: ../../kde4/app.py:299 ../../kde4/app.py:570 ../../kde4/app.py:587 -msgid "Done" -msgstr "Done" +#: ../../qt4/app.py:81 +msgid "Refresh snapshots list" +msgstr "" + +#: ../../qt4/app.py:85 ../../qt4/app.py:890 +msgid "Snapshot Name" +msgstr "Snapshot Name" + +#: ../../qt4/app.py:88 +msgid "Remove Snapshot" +msgstr "Remove Snapshot" + +#: ../../qt4/app.py:91 +msgid "View Snapshot Log" +msgstr "" + +#: ../../qt4/app.py:94 +msgid "View Last Log" +msgstr "" + +#: ../../qt4/app.py:99 ../../qt4/settingsdialog.py:51 +msgid "Settings" +msgstr "Settings" + +#: ../../qt4/app.py:104 +msgid "Shutdown" +msgstr "" + +#: ../../qt4/app.py:105 +msgid "Shutdown system after snapshot has finished." +msgstr "" + +#: ../../qt4/app.py:111 +msgid "Exit" +msgstr "Exit" -#: ../../gnome/app.py:189 ../../kde4/app.py:143 ../../kde4/app.py:159 -#: ../../gnome/mainwindow.glade:225 +#: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 msgid "Help" msgstr "Help" -#: ../../gnome/app.py:191 ../../kde4/app.py:146 -#: ../../gnome/mainwindow.glade:223 +#: ../../qt4/app.py:122 +msgid "Config File Help" +msgstr "" + +#: ../../qt4/app.py:125 msgid "Website" msgstr "Website" -#: ../../gnome/app.py:192 ../../kde4/app.py:148 +#: ../../qt4/app.py:127 ../../qt4/app.py:982 +msgid "Changelog" +msgstr "" + +#: ../../qt4/app.py:129 msgid "FAQ" msgstr "" -#: ../../gnome/app.py:193 ../../kde4/app.py:150 +#: ../../qt4/app.py:131 msgid "Ask a question" msgstr "" -#: ../../gnome/app.py:194 ../../kde4/app.py:152 +#: ../../qt4/app.py:133 msgid "Report a bug" msgstr "" -#: ../../gnome/app.py:196 ../../kde4/app.py:155 +#: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "About" -#: ../../gnome/app.py:202 ../../gnome/app.py:887 -#: ../../gnome/restoredialog.py:84 ../../gnome/snapshotsdialog.py:83 -#: ../../gnome/snapshotsdialog.py:244 ../../kde4/app.py:206 -#: ../../kde4/app.py:216 ../../kde4/restoredialog.py:68 -#: ../../kde4/snapshotsdialog.py:111 ../../kde4/snapshotsdialog.py:117 -#: ../../gnome/mainwindow.glade:350 ../../gnome/mainwindow.glade:352 -#: ../../gnome/snapshotsdialog.glade:169 ../../gnome/snapshotsdialog.glade:171 +#: ../../qt4/app.py:163 +msgid "Up" +msgstr "Up" + +#: ../../qt4/app.py:174 ../../qt4/settingsdialog.py:1776 +msgid "Show hidden files" +msgstr "Show hidden files" + +#: ../../qt4/app.py:184 ../../qt4/app.py:199 ../../qt4/app.py:233 +#: ../../qt4/restoredialog.py:62 ../../qt4/settingsdialog.py:1818 +#: ../../qt4/snapshotsdialog.py:134 ../../qt4/snapshotsdialog.py:139 msgid "Restore" msgstr "Restore" -#: ../../gnome/app.py:203 ../../gnome/app.py:888 ../../gnome/gnometools.py:67 -#: ../../gnome/snapshotsdialog.py:84 ../../gnome/snapshotsdialog.py:245 -#: ../../kde4/app.py:208 ../../kde4/restoredialog.py:42 -#: ../../kde4/snapshotsdialog.py:113 +#: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 +#: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "" -#: ../../gnome/app.py:205 ../../gnome/app.py:896 ../../gnome/app.py:1146 -#: ../../kde4/app.py:1041 -#, python-format -msgid "Restore '%s'" +#: ../../qt4/app.py:194 +msgid "Restore and delete new files" msgstr "" -#: ../../gnome/app.py:207 ../../gnome/app.py:897 ../../gnome/app.py:1147 -#: ../../kde4/app.py:1042 +#: ../../qt4/app.py:201 #, python-format -msgid "Restore '%s' to ..." +msgid "" +"Restore selected file or folder.\n" +"If this button is grayed out this is most likely because \"%(now)s\" is " +"selected in left hand snapshots list." +msgstr "" + +#: ../../qt4/app.py:206 ../../qt4/logviewdialog.py:67 +#: ../../qt4/qt4tools.py:160 ../../qt4/snapshotsdialog.py:96 +msgid "Snapshots" +msgstr "Snapshots" + +#: ../../qt4/app.py:213 +msgid "Snapshot" msgstr "" -#: ../../gnome/app.py:226 ../../kde4/app.py:235 +#: ../../qt4/app.py:224 +msgid "View" +msgstr "" + +#: ../../qt4/app.py:277 msgid "Shortcuts" msgstr "Shortcuts" -#: ../../gnome/app.py:249 -msgid "Name" -msgstr "Name" - -#: ../../gnome/app.py:260 -msgid "Size" -msgstr "Size" - -#: ../../gnome/app.py:267 -msgid "Date" -msgstr "Date" - -#: ../../gnome/app.py:286 ../../gnome/app.py:883 -#: ../../gnome/snapshotsdialog.py:116 ../../kde4/app.py:171 -#: ../../kde4/app.py:221 ../../kde4/snapshotsdialog.py:91 -#: ../../gnome/mainwindow.glade:366 ../../gnome/mainwindow.glade:368 -#: ../../gnome/snapshotsdialog.glade:8 -msgid "Snapshots" -msgstr "Snapshots" +#: ../../qt4/app.py:295 +msgid "" +"This folder doesn't exist\n" +"in the current selected snapshot!" +msgstr "" + +#: ../../qt4/app.py:359 +msgid "Add to Include" +msgstr "" + +#: ../../qt4/app.py:360 +msgid "Add to Exclude" +msgstr "" -#: ../../gnome/app.py:348 ../../kde4/app.py:362 +#: ../../qt4/app.py:416 +#, python-format +msgid "" +"%(appName)s is not configured. Would you like to restore a previous " +"configuration?" +msgstr "" + +#: ../../qt4/app.py:440 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it and then press OK" @@ -722,726 +830,791 @@ "Can't find snapshots folder.\n" "If it is on a removable drive, please plug it in and then press OK" -#: ../../gnome/app.py:611 ../../kde4/app.py:590 -msgid "Done, no backup needed" -msgstr "Done, no backup needed" +#: ../../qt4/app.py:473 +msgid "" +"If you close this window Back In Time will not be able to shutdown your " +"system when the snapshot has finished.\n" +"Do you really want to close?" +msgstr "" -#: ../../gnome/app.py:619 ../../kde4/app.py:598 +#: ../../qt4/app.py:667 ../../qt4/app.py:703 msgid "Working:" msgstr "Working:" -#: ../../gnome/app.py:623 ../../kde4/app.py:602 +#: ../../qt4/app.py:695 +msgid "Done, no backup needed" +msgstr "Done, no backup needed" + +#: ../../qt4/app.py:707 msgid "Error:" msgstr "" -#: ../../gnome/app.py:636 ../../kde4/app.py:649 +#: ../../qt4/app.py:726 ../../qt4/qt4systrayicon.py:153 +msgid "Sent:" +msgstr "" + +#: ../../qt4/app.py:727 ../../qt4/qt4systrayicon.py:154 +msgid "Speed:" +msgstr "" + +#: ../../qt4/app.py:728 ../../qt4/qt4systrayicon.py:155 +msgid "ETA:" +msgstr "" + +#: ../../qt4/app.py:777 msgid "Global" msgstr "Global" -#: ../../gnome/app.py:637 ../../kde4/app.py:650 +#: ../../qt4/app.py:778 msgid "Root" msgstr "Root" -#: ../../gnome/app.py:638 ../../kde4/app.py:651 +#: ../../qt4/app.py:779 msgid "Home" msgstr "Home" -#: ../../gnome/app.py:662 -msgid "Bookmarks" -msgstr "Bookmarks" - -#: ../../gnome/app.py:675 ../../kde4/app.py:662 +#: ../../qt4/app.py:794 msgid "Backup folders" msgstr "Backup folders" -#: ../../gnome/app.py:701 ../../kde4/app.py:734 -msgid "Today" -msgstr "Today" +#: ../../qt4/app.py:849 +msgid "This is NOT a snapshot but a live view of your local files" +msgstr "" -#: ../../gnome/app.py:705 ../../kde4/app.py:738 -msgid "Yesterday" -msgstr "Yesterday" +#: ../../qt4/app.py:860 ../../qt4/app.py:1476 +#, python-format +msgid "Last check %s" +msgstr "" -#: ../../gnome/app.py:709 ../../kde4/app.py:742 -msgid "This week" -msgstr "This week" +#: ../../qt4/app.py:928 +#, python-format +msgid "" +"Are you sure you want to remove the snapshot:\n" +"%s" +msgstr "" +"Are you sure you want to remove the snapshot\n" +"\"%s\"?" -#: ../../gnome/app.py:713 ../../kde4/app.py:746 -msgid "Last week" -msgstr "Last week" +#: ../../qt4/app.py:1004 +#, python-format +msgid "" +"Backup local files before overwriting or\n" +"removing with trailing '%(suffix)s'." +msgstr "" -#: ../../gnome/app.py:764 ../../kde4/app.py:398 +#: ../../qt4/app.py:1010 msgid "" -"If you close this window Back In Time will not be able to shutdown your " -"system when the snapshot has finished.\n" -"Do you really want to close?" +"Are you sure you want to remove all newer files in your original folder?" msgstr "" -#: ../../gnome/app.py:881 ../../gnome/snapshotsdialog.py:238 -msgid "Open" -msgstr "Open" +#: ../../qt4/app.py:1014 +msgid "" +"WARNING: deleting files in filesystem root could break your whole system!!!" +msgstr "" -#: ../../gnome/app.py:1056 ../../kde4/app.py:90 ../../kde4/app.py:805 -#: ../../gnome/mainwindow.glade:73 ../../gnome/mainwindow.glade:75 -msgid "Snapshot Name" -msgstr "Snapshot Name" +#: ../../qt4/app.py:1016 +msgid "Files to be restored:" +msgstr "" -#: ../../gnome/app.py:1075 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +#: ../../qt4/app.py:1031 +msgid "Do you really want to restore this files(s):" msgstr "" -"Are you sure you want to remove this snapshot?\n" -"%s?" -#: ../../gnome/app.py:1123 ../../kde4/app.py:1010 +#: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "Snapshot: %s" -#: ../../gnome/app.py:1124 ../../kde4/app.py:1011 +#: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "View the snapshot made at %s" -#: ../../gnome/app.py:1126 ../../kde4/app.py:1013 +#: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "View the current disk content" -#: ../../gnome/logviewdialog.py:106 ../../gnome/settingsdialog.py:414 -#: ../../kde4/logviewdialog.py:83 ../../kde4/settingsdialog.py:590 -msgid "All" -msgstr "" - -#: ../../gnome/logviewdialog.py:107 ../../gnome/settingsdialog.py:412 -#: ../../kde4/logviewdialog.py:84 ../../kde4/settingsdialog.py:588 -msgid "Errors" +#: ../../qt4/app.py:1268 +#, python-format +msgid "Restore '%s'" msgstr "" -#: ../../gnome/logviewdialog.py:112 ../../kde4/logviewdialog.py:89 -msgid "Changes" +#: ../../qt4/app.py:1269 +#, python-format +msgid "Restore '%s' to ..." msgstr "" -#: ../../gnome/logviewdialog.py:115 ../../kde4/logviewdialog.py:92 -msgid "Informations" +#: ../../qt4/app.py:1270 +#, python-format +msgid "Restore '%s' and delete new files" msgstr "" -#: ../../gnome/settingsdialog.py:235 ../../kde4/settingsdialog.py:387 -msgid "Include files and folders" +#: ../../qt4/app.py:1368 ../../qt4/app.py:1385 +msgid "Authors" msgstr "" -#: ../../gnome/settingsdialog.py:264 -msgid "Exclude patterns, files or folders" +#: ../../qt4/app.py:1369 ../../qt4/app.py:1388 +msgid "Translations" msgstr "" -#: ../../gnome/settingsdialog.py:411 ../../kde4/settingsdialog.py:587 -msgid "None" +#: ../../qt4/app.py:1370 ../../qt4/app.py:1391 +msgid "License" msgstr "" -#: ../../gnome/settingsdialog.py:413 ../../kde4/settingsdialog.py:589 -msgid "Changes & Errors" +#: ../../qt4/logviewdialog.py:49 +msgid "Last Log View" msgstr "" -#: ../../gnome/settingsdialog.py:458 -msgid "Snapshots folder" -msgstr "Snapshots folder" - -#: ../../gnome/settingsdialog.py:466 ../../kde4/settingsdialog.py:1314 -msgid "Are you sure you want to change snapshots folder ?" -msgstr "Are you sure you want to change snapshots folder?" - -#: ../../gnome/settingsdialog.py:901 ../../kde4/settingsdialog.py:914 -msgid "" -"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " -"*/3 for periodic backups every 3 hours" +#: ../../qt4/logviewdialog.py:51 +msgid "Snapshot Log View" msgstr "" -#: ../../gnome/settingsdialog.py:1141 ../../kde4/settingsdialog.py:653 -msgid "New profile" -msgstr "New profile" - -#: ../../gnome/settingsdialog.py:1155 ../../kde4/settingsdialog.py:669 -msgid "Rename profile" -msgstr "Rename profile" - -#: ../../gnome/settingsdialog.py:1167 ../../kde4/settingsdialog.py:683 -#, python-format -msgid "Are you sure you want to delete the profile \"%s\" ?" -msgstr "Are you sure you want to delete the profile \"%s\"?" - -#: ../../gnome/settingsdialog.py:1173 ../../kde4/settingsdialog.py:1292 -msgid "Include folder" -msgstr "Include folder" +#: ../../qt4/logviewdialog.py:59 ../../qt4/settingsdialog.py:59 +#: ../../qt4/settingsdialog.py:274 ../../qt4/settingsdialog.py:1899 +msgid "Profile:" +msgstr "Profile:" -#: ../../gnome/settingsdialog.py:1193 ../../kde4/settingsdialog.py:1278 -msgid "Include file" +#: ../../qt4/logviewdialog.py:81 +msgid "Filter:" msgstr "" -#: ../../gnome/settingsdialog.py:1235 ../../kde4/settingsdialog.py:1241 -msgid "Exclude pattern" -msgstr "Exclude pattern" - -#: ../../gnome/settingsdialog.py:1240 ../../kde4/settingsdialog.py:1251 -msgid "Exclude patterns can't contain ':' char !" -msgstr "Exclude patterns can't contain ':' char!" - -#: ../../gnome/settingsdialog.py:1246 ../../kde4/settingsdialog.py:1257 -msgid "Exclude file" -msgstr "Exclude file" - -#: ../../gnome/settingsdialog.py:1257 ../../kde4/settingsdialog.py:1261 -msgid "Exclude folder" -msgstr "Exclude folder" - -#: ../../gnome/snapshotsdialog.py:240 -msgid "Jump to" +#: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 +msgid "All" msgstr "" -#: ../../gnome/snapshotsdialog.py:248 ../../kde4/snapshotsdialog.py:164 -msgid "Diff" -msgstr "Diff" - -#: ../../gnome/snapshotsdialog.py:277 ../../kde4/snapshotsdialog.py:339 -msgid "You can't compare a snapshot to itself" -msgstr "You can't compare a snapshot to itself" - -#: ../../gnome/snapshotsdialog.py:284 ../../kde4/snapshotsdialog.py:346 -#, python-format -msgid "Command not found: %s" -msgstr "Command not found: %s" - -#: ../../gnome/snapshotsdialog.py:307 ../../kde4/snapshotsdialog.py:367 -#, python-format -msgid "" -"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 +#: ../../qt4/settingsdialog.py:657 +msgid "Errors" msgstr "" -#: ../../gnome/snapshotsdialog.py:310 ../../kde4/snapshotsdialog.py:370 -#, python-format -msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 +msgid "Changes" msgstr "" -#: ../../gnome/snapshotsdialog.py:312 ../../kde4/snapshotsdialog.py:372 -msgid "WARNING: This can not be revoked!" +#: ../../qt4/logviewdialog.py:92 +msgid "Informations" msgstr "" -#: ../../gnome/snapshotsdialog.py:317 ../../kde4/snapshotsdialog.py:377 -#, python-format -msgid "Exclude \"%s\" from future snapshots?" +#: ../../qt4/logviewdialog.py:101 +msgid "[E] Error, [I] Information, [C] Change" msgstr "" -#: ../../kde4/app.py:86 ../../gnome/mainwindow.glade:58 -#: ../../gnome/mainwindow.glade:60 -msgid "Refresh snapshots list" +#: ../../qt4/logviewdialog.py:104 +msgid "decode paths" msgstr "" -#: ../../kde4/app.py:94 ../../gnome/mainwindow.glade:88 -#: ../../gnome/mainwindow.glade:90 -msgid "Remove Snapshot" -msgstr "Remove Snapshot" - -#: ../../kde4/app.py:98 ../../gnome/mainwindow.glade:105 -msgid "View Snapshot Log" +#: ../../qt4/messagebox.py:56 +msgid "Error" msgstr "" -#: ../../kde4/app.py:102 ../../gnome/mainwindow.glade:121 -msgid "View Last Log" +#: ../../qt4/messagebox.py:62 ../../qt4/messagebox.py:68 +msgid "Question" msgstr "" -#: ../../kde4/app.py:108 ../../kde4/settingsdialog.py:69 -#: ../../gnome/mainwindow.glade:144 ../../gnome/mainwindow.glade:146 -#: ../../gnome/settingsdialog.glade:7 -msgid "Settings" -msgstr "Settings" - -#: ../../kde4/app.py:124 ../../gnome/mainwindow.glade:169 -msgid "Shutdown system after snapshot has finished." +#: ../../qt4/qt4systrayicon.py:69 +msgid "Start BackInTime" msgstr "" -#: ../../kde4/app.py:131 ../../gnome/mainwindow.glade:184 -#: ../../gnome/mainwindow.glade:186 -msgid "Exit" -msgstr "Exit" - -#: ../../kde4/app.py:186 ../../gnome/mainwindow.glade:289 -msgid "Up" -msgstr "Up" +#: ../../qt4/qt4systrayicon.py:124 +msgid "Working..." +msgstr "Working..." -#: ../../kde4/app.py:199 ../../gnome/mainwindow.glade:325 -msgid "Show hidden files" -msgstr "Show hidden files" +#: ../../qt4/qt4tools.py:178 +msgid "Today" +msgstr "Today" -#: ../../kde4/app.py:244 -msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" -msgstr "" +#: ../../qt4/qt4tools.py:183 +msgid "Yesterday" +msgstr "Yesterday" -#: ../../kde4/app.py:839 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" -msgstr "" -"Are you sure you want to remove the snapshot\n" -"\"%s\"?" +#: ../../qt4/qt4tools.py:188 +msgid "This week" +msgstr "This week" -#: ../../kde4/app.py:1140 ../../kde4/kde4systrayicon.py:117 -msgid "Working..." -msgstr "Working..." +#: ../../qt4/qt4tools.py:193 +msgid "Last week" +msgstr "Last week" -#: ../../kde4/logviewdialog.py:55 -msgid "Error Log View" +#: ../../qt4/restoredialog.py:75 +msgid "Show full Log" msgstr "" -#: ../../kde4/logviewdialog.py:65 ../../kde4/settingsdialog.py:79 -#: ../../kde4/settingsdialog.py:293 ../../gnome/logviewdialog.glade:73 -#: ../../gnome/settingsdialog.glade:72 -msgid "Profile:" -msgstr "Profile:" +#: ../../qt4/settingsdialog.py:68 +msgid "Edit" +msgstr "Edit" -#: ../../kde4/logviewdialog.py:77 ../../gnome/logviewdialog.glade:110 -msgid "Filter:" +#: ../../qt4/settingsdialog.py:73 +msgid "Modify for Full System Backup" msgstr "" -#: ../../kde4/logviewdialog.py:100 ../../gnome/logviewdialog.glade:169 -msgid "[E] Error, [I] Information, [C] Change" +#: ../../qt4/settingsdialog.py:77 ../../qt4/settingsdialog.py:451 +msgid "Add" msgstr "" -#: ../../kde4/logviewdialog.py:103 ../../gnome/logviewdialog.glade:195 -msgid "decode paths" +#: ../../qt4/settingsdialog.py:81 ../../qt4/settingsdialog.py:408 +#: ../../qt4/settingsdialog.py:467 +msgid "Remove" msgstr "" -#: ../../kde4/settingsdialog.py:88 -msgid "Edit" -msgstr "Edit" - -#: ../../kde4/settingsdialog.py:106 ../../gnome/settingsdialog.glade:1207 +#: ../../qt4/settingsdialog.py:96 msgid "General" msgstr "General" -#: ../../kde4/settingsdialog.py:114 ../../gnome/settingsdialog.glade:199 +#: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "" -#: ../../kde4/settingsdialog.py:127 ../../kde4/settingsdialog.py:1311 +#: ../../qt4/settingsdialog.py:119 +#, python-format +msgid "" +"Warning: %(app)s uses EncFS for encryption. A recent security audit " +"revealed several possible attack vectors for this. Please take a look at 'A " +"NOTE ON SECURITY' in 'man backintime'." +msgstr "" + +#: ../../qt4/settingsdialog.py:129 ../../qt4/settingsdialog.py:1568 msgid "Where to save snapshots" msgstr "Where to save snapshots" -#: ../../kde4/settingsdialog.py:146 +#: ../../qt4/settingsdialog.py:145 +msgid "Folder" +msgstr "" + +#: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" -#: ../../kde4/settingsdialog.py:158 ../../kde4/settingsdialog.py:283 -#: ../../gnome/settingsdialog.glade:323 ../../gnome/settingsdialog.glade:583 -#: ../../gnome/settingsdialog.glade:874 +#: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "" -#: ../../kde4/settingsdialog.py:163 ../../gnome/settingsdialog.glade:350 -#: ../../gnome/settingsdialog.glade:610 +#: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "" -#: ../../kde4/settingsdialog.py:168 ../../kde4/settingsdialog.py:288 -#: ../../gnome/settingsdialog.glade:377 ../../gnome/settingsdialog.glade:637 -#: ../../gnome/settingsdialog.glade:902 +#: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "" -#: ../../kde4/settingsdialog.py:173 ../../gnome/settingsdialog.glade:416 +#: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" -#: ../../kde4/settingsdialog.py:178 ../../gnome/settingsdialog.glade:459 +#: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" -#: ../../kde4/settingsdialog.py:184 +#: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "" -#: ../../kde4/settingsdialog.py:228 ../../kde4/settingsdialog.py:237 -#: ../../kde4/settingsdialog.py:243 ../../gnome/settingsdialog.glade:703 -#: ../../gnome/settingsdialog.glade:743 +#: ../../qt4/settingsdialog.py:201 +msgid "Key File" +msgstr "" + +#: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 +#: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "" -#: ../../kde4/settingsdialog.py:249 ../../gnome/settingsdialog.glade:775 +#: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" -#: ../../kde4/settingsdialog.py:252 ../../gnome/settingsdialog.glade:792 +#: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" -#: ../../kde4/settingsdialog.py:264 ../../gnome/settingsdialog.glade:968 +#: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "" -#: ../../kde4/settingsdialog.py:276 ../../gnome/settingsdialog.glade:848 -msgid "Auto Host / User / Profile Id" +#: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 +msgid "Full snapshot path: " msgstr "" -#: ../../kde4/settingsdialog.py:301 +#: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "Schedule" -#: ../../kde4/settingsdialog.py:311 ../../gnome/settingsdialog.glade:1092 +#: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "" -#: ../../kde4/settingsdialog.py:322 ../../gnome/settingsdialog.glade:1079 +#: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "" -#: ../../kde4/settingsdialog.py:333 ../../gnome/settingsdialog.glade:1066 +#: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "" -#: ../../kde4/settingsdialog.py:344 ../../gnome/settingsdialog.glade:1053 +#: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "" -#: ../../kde4/settingsdialog.py:353 ../../gnome/settingsdialog.glade:1014 +#: ../../qt4/settingsdialog.py:339 msgid "" -"Run Back In Time periodically with anacron. This is useful if the computer " -"is not running regular." +"Run Back In Time repeatedly. This is useful if the computer is not running " +"regular." msgstr "" -#: ../../kde4/settingsdialog.py:357 ../../gnome/settingsdialog.glade:1040 -msgid "Frequency in days:" +#: ../../qt4/settingsdialog.py:344 +msgid "Every:" msgstr "" -#: ../../kde4/settingsdialog.py:368 ../../gnome/settingsdialog.glade:1026 +#: ../../qt4/settingsdialog.py:362 msgid "" "Run Back In Time as soon as the drive is connected (only once every X " "days).\n" "You will be prompted for your sudo password." msgstr "" -#: ../../kde4/settingsdialog.py:379 ../../gnome/settingsdialog.glade:1310 +#: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Include" -#: ../../kde4/settingsdialog.py:403 ../../kde4/settingsdialog.py:445 -#: ../../gnome/settingsdialog.glade:1411 +#: ../../qt4/settingsdialog.py:381 +msgid "Include files and folders" +msgstr "" + +#: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "Add file" -#: ../../kde4/settingsdialog.py:408 ../../kde4/settingsdialog.py:450 -#: ../../gnome/settingsdialog.glade:1427 +#: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Add folder" -#: ../../kde4/settingsdialog.py:418 ../../gnome/settingsdialog.glade:1474 +#: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Exclude" -#: ../../kde4/settingsdialog.py:421 ../../gnome/settingsdialog.glade:1328 +#: ../../qt4/settingsdialog.py:417 msgid "" "Warning: Wildcards ('foo*', '[fF]oo', 'fo?') will be ignored with " "mode 'SSH encrypted'.\n" "Only separate asterisk are allowed ('foo/*', 'foo/**/bar')" msgstr "" -#: ../../kde4/settingsdialog.py:430 +#: ../../qt4/settingsdialog.py:425 +msgid "Exclude patterns, files or folders" +msgstr "" + +#: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "" -#: ../../kde4/settingsdialog.py:460 ../../gnome/settingsdialog.glade:1905 +#: ../../qt4/settingsdialog.py:463 +msgid "Add default" +msgstr "" + +#: ../../qt4/settingsdialog.py:474 +msgid "Exclude files bigger than: " +msgstr "" + +#: ../../qt4/settingsdialog.py:475 +#, python-format +msgid "" +"Exclude files bigger than value in %(prefix)s.\n" +"With 'Full rsync mode' disabled this will only affect new files\n" +"because for rsync this is a transfer option, not an exclude option.\n" +"So big files that has been backed up before will remain in snapshots\n" +"even if they had changed." +msgstr "" + +#: ../../qt4/settingsdialog.py:493 msgid "Auto-remove" msgstr "Auto-remove" -#: ../../kde4/settingsdialog.py:464 ../../gnome/settingsdialog.glade:1608 +#: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "Older than:" -#: ../../kde4/settingsdialog.py:478 ../../gnome/settingsdialog.glade:1624 +#: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "If free space is less than:" -#: ../../kde4/settingsdialog.py:490 ../../gnome/settingsdialog.glade:1642 +#: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" -#: ../../kde4/settingsdialog.py:514 ../../gnome/settingsdialog.glade:1697 +#: ../../qt4/settingsdialog.py:551 +msgid "Run in background on remote Host." +msgstr "" + +#: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "" -#: ../../kde4/settingsdialog.py:517 ../../kde4/settingsdialog.py:522 -#: ../../gnome/settingsdialog.glade:1705 ../../gnome/settingsdialog.glade:1729 +#: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "" -#: ../../kde4/settingsdialog.py:519 ../../gnome/settingsdialog.glade:1717 +#: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "" -#: ../../kde4/settingsdialog.py:524 ../../gnome/settingsdialog.glade:1743 +#: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "" -#: ../../kde4/settingsdialog.py:527 +#: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "" -#: ../../kde4/settingsdialog.py:529 ../../gnome/settingsdialog.glade:1769 +#: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "" -#: ../../kde4/settingsdialog.py:532 ../../gnome/settingsdialog.glade:1781 +#: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "" -#: ../../kde4/settingsdialog.py:534 ../../gnome/settingsdialog.glade:1795 +#: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "" -#: ../../kde4/settingsdialog.py:537 ../../gnome/settingsdialog.glade:1496 +#: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "Don't remove named snapshots" -#: ../../kde4/settingsdialog.py:546 ../../gnome/settingsdialog.glade:2104 +#: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Options" -#: ../../kde4/settingsdialog.py:549 ../../gnome/settingsdialog.glade:1920 +#: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Enable notifications" -#: ../../kde4/settingsdialog.py:552 ../../gnome/settingsdialog.glade:1937 +#: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "Disable snapshots when on battery" -#: ../../kde4/settingsdialog.py:555 +#: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" msgstr "Power status not available from system" -#: ../../kde4/settingsdialog.py:558 ../../gnome/settingsdialog.glade:1955 -msgid "Backup files on restore" -msgstr "Backup files on restore" +#: ../../qt4/settingsdialog.py:611 +msgid "Run only one snapshot at a time" +msgstr "" + +#: ../../qt4/settingsdialog.py:612 +msgid "" +"Other snapshots will be blocked until the current snapshot is done.\n" +"This is a global option. So it will effect all profiles for this user.\n" +"But you need to activate this for all other users, too." +msgstr "" + +#: ../../qt4/settingsdialog.py:617 +msgid "Backup replaced files on restore" +msgstr "" + +#: ../../qt4/settingsdialog.py:618 +#, python-format +msgid "" +"Newer versions of files will be renamed with trailing '%(suffix)s' before " +"restoring.\n" +"If you don't need them anymore you can remove them with '%(cmd)s'" +msgstr "" -#: ../../kde4/settingsdialog.py:561 ../../gnome/settingsdialog.glade:1972 +#: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "" -#: ../../kde4/settingsdialog.py:564 ../../gnome/settingsdialog.glade:1989 +#: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "" -#: ../../kde4/settingsdialog.py:567 ../../gnome/settingsdialog.glade:2006 +#: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "" -#: ../../kde4/settingsdialog.py:568 ../../gnome/settingsdialog.glade:2032 +#: ../../qt4/settingsdialog.py:634 msgid "" -"- snapshots are no read-only\n" -"- destination file-system must support all linux attributes (dates, rights, " +"- snapshots are not read-only\n" +"- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" -#: ../../kde4/settingsdialog.py:575 ../../gnome/settingsdialog.glade:2045 +#: ../../qt4/settingsdialog.py:641 +msgid "Take a new snapshot regardless of there were changes or not." +msgstr "" + +#: ../../qt4/settingsdialog.py:644 msgid "Check for changes (don't take a new snapshot if nothing changed)" msgstr "" -#: ../../kde4/settingsdialog.py:582 +#: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "" -#: ../../kde4/settingsdialog.py:597 ../../gnome/settingsdialog.glade:2366 -msgid "Expert Options" -msgstr "Expert Options" +#: ../../qt4/settingsdialog.py:656 +msgid "None" +msgstr "" -#: ../../kde4/settingsdialog.py:600 +#: ../../qt4/settingsdialog.py:658 +msgid "Changes & Errors" +msgstr "" + +#: ../../qt4/settingsdialog.py:674 msgid "Change these options only if you really know what you are doing !" msgstr "" -#: ../../kde4/settingsdialog.py:608 ../../gnome/settingsdialog.glade:2133 -msgid "Run 'nice' as cron job (default: enabled)" -msgstr "Run 'nice' as cron job (default: enabled)" +#: ../../qt4/settingsdialog.py:678 +msgid "Run 'nice':" +msgstr "" -#: ../../kde4/settingsdialog.py:611 ../../gnome/settingsdialog.glade:2150 -msgid "Run 'ionice' as cron job (default: enabled)" -msgstr "Run 'ionice' as cron job (default: enabled)" +#: ../../qt4/settingsdialog.py:684 ../../qt4/settingsdialog.py:696 +msgid "as cron job" +msgstr "" + +#: ../../qt4/settingsdialog.py:687 ../../qt4/settingsdialog.py:702 +#: ../../qt4/settingsdialog.py:716 +msgid "on remote host" +msgstr "" + +#: ../../qt4/settingsdialog.py:690 +msgid "Run 'ionice':" +msgstr "" + +#: ../../qt4/settingsdialog.py:699 +msgid "when taking a manual snapshot" +msgstr "" -#: ../../kde4/settingsdialog.py:614 ../../gnome/settingsdialog.glade:2167 -msgid "Run 'ionice' when taking a manual snapshot (default: disabled)" +#: ../../qt4/settingsdialog.py:706 +msgid "Run 'rsync' with 'nocache':" msgstr "" -#: ../../kde4/settingsdialog.py:617 ../../gnome/settingsdialog.glade:2184 -msgid "Run 'nice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:712 +msgid "on local machine" msgstr "" -#: ../../kde4/settingsdialog.py:620 ../../gnome/settingsdialog.glade:2201 -msgid "Run 'ionice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:719 +msgid "Redirect stdout to /dev/null in cronjobs." msgstr "" -#: ../../kde4/settingsdialog.py:626 ../../gnome/settingsdialog.glade:2224 +#: ../../qt4/settingsdialog.py:725 +msgid "Redirect stderr to /dev/null in cronjobs." +msgstr "" + +#: ../../qt4/settingsdialog.py:734 msgid "Limit rsync bandwidth usage: " msgstr "" -#: ../../kde4/settingsdialog.py:629 ../../gnome/settingsdialog.glade:2259 +#: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" -#: ../../kde4/settingsdialog.py:634 ../../gnome/settingsdialog.glade:2280 +#: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "" -#: ../../kde4/settingsdialog.py:637 ../../gnome/settingsdialog.glade:2297 +#: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "" -#: ../../kde4/settingsdialog.py:640 ../../gnome/settingsdialog.glade:2314 +#: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute links)" msgstr "" -#: ../../kde4/settingsdialog.py:643 ../../gnome/settingsdialog.glade:2331 -msgid "Copy links (dereference symbolic links)" +#: ../../qt4/settingsdialog.py:834 +msgid "Paste additional options to rsync" msgstr "" -#: ../../kde4/snapshotsdialog.py:46 ../../kde4/snapshotsdialog.py:173 -#: ../../gnome/snapshotsdialog.glade:385 -msgid "Diff Options" -msgstr "Diff Options" - -#: ../../kde4/snapshotsdialog.py:56 ../../gnome/snapshotsdialog.glade:314 -msgid "Command:" -msgstr "Command:" - -#: ../../kde4/snapshotsdialog.py:60 ../../gnome/snapshotsdialog.glade:322 -msgid "Parameters:" -msgstr "Parameters:" - -#: ../../kde4/snapshotsdialog.py:64 ../../gnome/snapshotsdialog.glade:334 -msgid "Use %1 and %2 for path parameters" -msgstr "Use %1 and %2 for path parameters" - -#: ../../kde4/snapshotsdialog.py:123 ../../gnome/snapshotsdialog.glade:184 -#: ../../gnome/snapshotsdialog.glade:186 -msgid "Delete" +#: ../../qt4/settingsdialog.py:837 +msgid "" +"Options must be quoted e.g. --exclude-from=\"/path/to/my exclude file\"." msgstr "" -#: ../../kde4/snapshotsdialog.py:128 ../../gnome/snapshotsdialog.glade:199 -#: ../../gnome/snapshotsdialog.glade:201 -msgid "Select All" +#: ../../qt4/settingsdialog.py:847 +msgid "Add prefix to SSH commands" msgstr "" -#: ../../kde4/snapshotsdialog.py:132 ../../gnome/snapshotsdialog.glade:88 -msgid "List only different snapshots" +#: ../../qt4/settingsdialog.py:850 +#, python-format +msgid "" +"Prefix to run before every command on remote host.\n" +"Variables need to be escaped with \\$FOO.\n" +"This doesn't touch rsync. So to add a prefix\n" +"for rsync use \"%(cb_rsync_options)s\" with\n" +"%(rsync_options_value)s\n" +"\n" +"%(default)s: %(def_value)s" msgstr "" -#: ../../kde4/snapshotsdialog.py:139 ../../gnome/snapshotsdialog.glade:110 -msgid "List only equal snapshots to: " +#: ../../qt4/settingsdialog.py:858 ../../qt4/settingsdialog.py:1691 +msgid "default" msgstr "" -#: ../../kde4/snapshotsdialog.py:149 ../../gnome/snapshotsdialog.glade:146 -msgid "Deep check (more accurate, but slow)" +#: ../../qt4/settingsdialog.py:875 +msgid "Restore Config" msgstr "" -#: ../../kde4/snapshotsdialog.py:174 -msgid "Go To" -msgstr "Go To" - -#: ../../gnome/logviewdialog.glade:9 -msgid "Log View" +#: ../../qt4/settingsdialog.py:891 +msgid "" +"Full system backup can only create a snapshot to be restored to the same " +"physical disk(s) with the same disk partitioning as from the source; " +"restoring to new physical disks or the same disks with different " +"partitioning will yield a potentially broken and unusable system.\n" +"\n" +"Full system backup will override some settings that may have been " +"customized. Continue?" msgstr "" -#: ../../gnome/logviewdialog.glade:179 -msgid "scroll down automatic" -msgstr "" +#: ../../qt4/settingsdialog.py:922 +msgid "New profile" +msgstr "New profile" -#: ../../gnome/mainwindow.glade:7 -msgid "Back In Time" -msgstr "Back In Time" +#: ../../qt4/settingsdialog.py:938 +msgid "Rename profile" +msgstr "Rename profile" -#: ../../gnome/mainwindow.glade:45 -msgid "Backup Now" -msgstr "Backup Now" +#: ../../qt4/settingsdialog.py:952 +#, python-format +msgid "Are you sure you want to delete the profile \"%s\" ?" +msgstr "Are you sure you want to delete the profile \"%s\"?" -#: ../../gnome/mainwindow.glade:171 -msgid "Shutdown" +#: ../../qt4/settingsdialog.py:1191 +msgid "" +"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " +"*/3 for periodic backups every 3 hours" msgstr "" -#: ../../gnome/mainwindow.glade:287 -msgid "Parent folder" -msgstr "Parent folder" +#: ../../qt4/settingsdialog.py:1489 +msgid "Exclude pattern" +msgstr "Exclude pattern" + +#: ../../qt4/settingsdialog.py:1502 +msgid "Exclude file" +msgstr "Exclude file" + +#: ../../qt4/settingsdialog.py:1506 +msgid "Exclude folder" +msgstr "Exclude folder" -#: ../../gnome/mainwindow.glade:327 -msgid "Hidden files" -msgstr "Hidden files" +#: ../../qt4/settingsdialog.py:1525 +msgid "Include file" +msgstr "" -#: ../../gnome/mainwindow.glade:451 +#: ../../qt4/settingsdialog.py:1533 ../../qt4/settingsdialog.py:1553 +#, python-format msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +"\"%s\" is a symlink. The linked target will not be backed up until you " +"include it, too.\n" +"Would you like to include the symlinks target instead?" msgstr "" -#: ../../gnome/settingsdialog.glade:287 -msgid "Where to save snapshots" -msgstr "Where to save snapshots" +#: ../../qt4/settingsdialog.py:1545 +msgid "Include folder" +msgstr "Include folder" -#: ../../gnome/settingsdialog.glade:483 -msgid "Private key:" -msgstr "" +#: ../../qt4/settingsdialog.py:1572 +msgid "Are you sure you want to change snapshots folder ?" +msgstr "Are you sure you want to change snapshots folder?" -#: ../../gnome/settingsdialog.glade:534 -msgid "Advanced SSH Settings" +#: ../../qt4/settingsdialog.py:1688 +msgid "enabled" msgstr "" -#: ../../gnome/settingsdialog.glade:552 -msgid "SSH Settings" +#: ../../qt4/settingsdialog.py:1690 +msgid "disabled" msgstr "" -#: ../../gnome/settingsdialog.glade:815 -msgid "Password" +#: ../../qt4/settingsdialog.py:1715 +msgid "Restore Settings" msgstr "" -#: ../../gnome/settingsdialog.glade:930 -msgid "Profile Id:" +#: ../../qt4/settingsdialog.py:1732 +msgid " and add your user to group 'fuse'" msgstr "" -#: ../../gnome/settingsdialog.glade:1115 +#: ../../qt4/settingsdialog.py:1736 +#, python-format msgid "" -"hours seperate by comma ( e.g. 8,12,18,23) or */3 for periodic backups every " -"3 hours (cron style)" +"Please navigate to the snapshot from which you want to restore %(appName)s's " +"configuration. The path may look like: \n" +"%(samplePath)s\n" +"\n" +"If your snapshots are on a remote drive or if they are encrypted you need to " +"manually mount them first. If you use Mode SSH you also may need to set up " +"public key login to the remote host%(addFuse)s.\n" +"Take a look at 'man backintime'." msgstr "" -#: ../../gnome/settingsdialog.glade:1163 -msgid "Schedule" -msgstr "Schedule" +#: ../../qt4/settingsdialog.py:1794 ../../qt4/settingsdialog.py:1854 +msgid "No config found" +msgstr "" + +#: ../../qt4/snapshotsdialog.py:49 ../../qt4/snapshotsdialog.py:173 +msgid "Diff Options" +msgstr "Diff Options" + +#: ../../qt4/snapshotsdialog.py:56 +msgid "Command:" +msgstr "Command:" + +#: ../../qt4/snapshotsdialog.py:60 +msgid "Parameters:" +msgstr "Parameters:" + +#: ../../qt4/snapshotsdialog.py:64 +msgid "Use %1 and %2 for path parameters" +msgstr "Use %1 and %2 for path parameters" + +#: ../../qt4/snapshotsdialog.py:106 +msgid "List only different snapshots" +msgstr "" -#: ../../gnome/settingsdialog.glade:1363 -msgid "Highly recommended:" +#: ../../qt4/snapshotsdialog.py:113 +msgid "List only equal snapshots to: " msgstr "" -#: ../../gnome/settingsdialog.glade:1377 -msgid "label" +#: ../../qt4/snapshotsdialog.py:123 +msgid "Deep check (more accurate, but slow)" msgstr "" -#: ../../gnome/settingsdialog.glade:1755 -msgid "week(s)" +#: ../../qt4/snapshotsdialog.py:144 +msgid "Delete" msgstr "" -#: ../../gnome/settingsdialog.glade:2069 -msgid "Log level:" +#: ../../qt4/snapshotsdialog.py:148 +msgid "Select All" msgstr "" -#: ../../gnome/settingsdialog.glade:2121 +#: ../../qt4/snapshotsdialog.py:161 +msgid "Diff" +msgstr "Diff" + +#: ../../qt4/snapshotsdialog.py:172 +msgid "Go To" +msgstr "Go To" + +#: ../../qt4/snapshotsdialog.py:326 +msgid "You can't compare a snapshot to itself" +msgstr "You can't compare a snapshot to itself" + +#: ../../qt4/snapshotsdialog.py:333 +#, python-format +msgid "Command not found: %s" +msgstr "Command not found: %s" + +#: ../../qt4/snapshotsdialog.py:354 +#, python-format msgid "" -"Change these options only if you really know what you are doing !" +"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" msgstr "" -#: ../../gnome/snapshotsdialog.glade:263 -msgid "Diff with" -msgstr "Diff with" +#: ../../qt4/snapshotsdialog.py:357 +#, python-format +msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +msgstr "" -#: ../../gnome/textinputdialog.glade:7 -msgid "Pattern" -msgstr "Pattern" +#: ../../qt4/snapshotsdialog.py:359 +msgid "WARNING: This can not be revoked!" +msgstr "" -#: ../../gnome/textinputdialog.glade:70 -msgid "Text" +#: ../../qt4/snapshotsdialog.py:374 +#, python-format +msgid "Exclude \"%s\" from future snapshots?" msgstr "" diff -Nru backintime-1.0.36/common/po/en_GB.po backintime-1.1.12/common/po/en_GB.po --- backintime-1.0.36/common/po/en_GB.po 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/po/en_GB.po 2016-01-11 18:07:58.000000000 +0000 @@ -7,206 +7,238 @@ msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2013-11-09 22:34+0100\n" -"PO-Revision-Date: 2014-07-16 17:08+0000\n" -"Last-Translator: Andi Chandler \n" +"POT-Creation-Date: 2015-12-19 00:47+0100\n" +"PO-Revision-Date: 2015-09-09 21:51+0000\n" +"Last-Translator: Back In Time Team \n" "Language-Team: English (United Kingdom) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2014-08-06 10:19+0000\n" -"X-Generator: Launchpad (build 17147)\n" +"X-Launchpad-Export-Date: 2016-01-11 17:52+0000\n" +"X-Generator: Launchpad (build 17881)\n" -#: ../../common/config.py:72 +#: ../../common/configfile.py:60 +#, python-format +msgid "Failed to save config: %s" +msgstr "" + +#: ../../common/configfile.py:78 +#, python-format +msgid "Failed to load config: %s" +msgstr "" + +#: ../../common/configfile.py:352 ../../common/configfile.py:414 +#, python-format +msgid "Profile \"%s\" already exists !" +msgstr "Profile \"%s\" already exists!" + +#: ../../common/configfile.py:383 +msgid "You can't remove the last profile !" +msgstr "You can't remove the last profile!" + +#: ../../common/config.py:76 msgid "Disabled" msgstr "Disabled" -#: ../../common/config.py:73 +#: ../../common/config.py:77 msgid "At every boot/reboot" msgstr "At every boot/reboot" -#: ../../common/config.py:74 +#: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Every 5 minutes" -#: ../../common/config.py:75 +#: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Every 10 minutes" -#: ../../common/config.py:76 +#: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "Every 30 minutes" -#: ../../common/config.py:77 +#: ../../common/config.py:81 msgid "Every hour" msgstr "Every hour" -#: ../../common/config.py:78 +#: ../../common/config.py:82 msgid "Every 2 hours" msgstr "Every 2 hours" -#: ../../common/config.py:79 +#: ../../common/config.py:83 msgid "Every 4 hours" msgstr "Every 4 hours" -#: ../../common/config.py:80 +#: ../../common/config.py:84 msgid "Every 6 hours" msgstr "Every 6 hours" -#: ../../common/config.py:81 +#: ../../common/config.py:85 msgid "Every 12 hours" msgstr "Every 12 hours" -#: ../../common/config.py:82 +#: ../../common/config.py:86 msgid "Custom Hours" msgstr "Custom Hours" -#: ../../common/config.py:83 +#: ../../common/config.py:87 msgid "Every Day" msgstr "Every Day" -#: ../../common/config.py:84 -msgid "Daily (anacron)" -msgstr "Daily (anacron)" +#: ../../common/config.py:88 +msgid "Repeatedly (anacron)" +msgstr "" -#: ../../common/config.py:85 +#: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "When drive get connected (udev)" -#: ../../common/config.py:86 +#: ../../common/config.py:90 msgid "Every Week" msgstr "Every Week" -#: ../../common/config.py:87 +#: ../../common/config.py:91 msgid "Every Month" msgstr "Every Month" -#: ../../common/config.py:91 +#: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Day(s)" -#: ../../common/config.py:92 +#: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Week(s)" -#: ../../common/config.py:93 +#: ../../common/config.py:97 msgid "Year(s)" msgstr "Year(s)" -#: ../../common/config.py:100 +#: ../../common/config.py:101 +msgid "Hour(s)" +msgstr "" + +#: ../../common/config.py:104 +msgid "Month(s)" +msgstr "" + +#: ../../common/config.py:126 ../../qt4/settingsdialog.py:551 msgid " EXPERIMENTAL!" msgstr " EXPERIMENTAL!" -#: ../../common/config.py:103 +#: ../../common/config.py:129 msgid "Local" msgstr "Local" -#: ../../common/config.py:104 +#: ../../common/config.py:130 msgid "SSH" msgstr "SSH" -#: ../../common/config.py:104 ../../common/config.py:106 -#: ../../gnome/settingsdialog.py:475 ../../kde4/settingsdialog.py:1325 +#: ../../common/config.py:130 ../../common/config.py:132 +#: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "SSH private key" -#: ../../common/config.py:105 +#: ../../common/config.py:131 msgid "Local encrypted" msgstr "Local encrypted" -#: ../../common/config.py:105 ../../common/config.py:106 +#: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "Encryption" -#: ../../common/config.py:106 +#: ../../common/config.py:132 msgid "SSH encrypted" msgstr "SSH encrypted" -#: ../../common/config.py:112 +#: ../../common/config.py:135 msgid "Default" msgstr "Default" -#: ../../common/config.py:113 +#: ../../common/config.py:136 msgid "AES128-CTR" msgstr "AES128-CTR" -#: ../../common/config.py:114 +#: ../../common/config.py:137 msgid "AES192-CTR" msgstr "AES192-CTR" -#: ../../common/config.py:115 +#: ../../common/config.py:138 msgid "AES256-CTR" msgstr "AES256-CTR" -#: ../../common/config.py:116 +#: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "ARCFOUR256" -#: ../../common/config.py:117 +#: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "ARCFOUR128" -#: ../../common/config.py:118 +#: ../../common/config.py:141 msgid "AES128-CBC" msgstr "AES128-CBC" -#: ../../common/config.py:119 +#: ../../common/config.py:142 msgid "3DES-CBC" msgstr "3DES-CBC" -#: ../../common/config.py:120 +#: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "Blowfish-CBC" -#: ../../common/config.py:121 +#: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "Cast128-CBC" -#: ../../common/config.py:122 +#: ../../common/config.py:145 msgid "AES192-CBC" msgstr "AES192-CBC" -#: ../../common/config.py:123 +#: ../../common/config.py:146 msgid "AES256-CBC" msgstr "AES256-CBC" -#: ../../common/config.py:124 +#: ../../common/config.py:147 msgid "ARCFOUR" msgstr "ARCFOUR" -#: ../../common/config.py:129 +#: ../../common/config.py:153 msgid "Main profile" msgstr "Main profile" -#: ../../common/config.py:256 ../../common/config.py:275 -#: ../../common/config.py:286 ../../common/config.py:291 +#: ../../common/config.py:289 ../../common/config.py:296 +#: ../../common/config.py:307 ../../common/config.py:312 +#: ../../qt4/qt4systrayicon.py:61 #, python-format msgid "Profile: \"%s\"" msgstr "Profile: \"%s\"" -#: ../../common/config.py:256 +#: ../../common/config.py:289 msgid "Snapshots folder is not valid !" msgstr "Snapshots folder is not valid!" -#: ../../common/config.py:275 +#: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "You must select at least one folder to backup!" -#: ../../common/config.py:286 +#: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "You can't include the backup folder!" -#: ../../common/config.py:291 +#: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "You can't include a backup sub-folder!" -#: ../../common/config.py:361 +#: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s is not a folder!" -#: ../../common/config.py:376 ../../common/config.py:389 +#: ../../common/config.py:380 +msgid "Host/User/Profile-ID must not be empty!" +msgstr "" + +#: ../../common/config.py:388 ../../common/config.py:420 #, python-format msgid "" "Can't write to: %s\n" @@ -215,7 +247,37 @@ "Can't write to: %s\n" "Are you sure you have write access?" -#: ../../common/config.py:1286 +#: ../../common/config.py:400 +#, python-format +msgid "" +"Destination filesystem for '%(path)s' is formatted with FAT which doesn't " +"support hard-links. Please use a native Linux filesystem." +msgstr "" + +#: ../../common/config.py:405 +#, python-format +msgid "" +"Destination filsystem for '%(path)s' is a SMB mounted share. Please make " +"sure the remote SMB server supports symlinks or activate '%(copyLinks)s' in " +"'%(expertOptions)s'." +msgstr "" + +#: ../../common/config.py:408 ../../qt4/settingsdialog.py:815 +msgid "Copy links (dereference symbolic links)" +msgstr "Copy links (dereference symbolic links)" + +#: ../../common/config.py:409 ../../qt4/settingsdialog.py:669 +msgid "Expert Options" +msgstr "Expert Options" + +#: ../../common/config.py:411 +#, python-format +msgid "" +"Destination filesystem for '%(path)s is a sshfs mounted share. sshfs doesn't " +"support hard-links. Please use mode 'SSH' instead." +msgstr "" + +#: ../../common/config.py:1407 msgid "" "Can't find crontab.\n" "Are you sure cron is installed ?\n" @@ -225,52 +287,28 @@ "Are you sure cron is installed?\n" "If not, you should disable all automatic backups." -#: ../../common/config.py:1338 -#, python-format -msgid "Schedule udev doesn't work with mode %s" -msgstr "Schedule udev doesn't work with mode %s" +#: ../../common/config.py:1411 +msgid "Failed to write new crontab." +msgstr "" -#: ../../common/config.py:1342 +#: ../../common/config.py:1505 #, python-format -msgid "Couldn't find UUID for \"%s\"" -msgstr "Couldn't find UUID for \"%s\"" - -#: ../../common/config.py:1379 -msgid "Failed to remove udev rules" -msgstr "Failed to remove udev rules" - -#: ../../common/config.py:1385 -msgid "Failed to create udev rules" -msgstr "Failed to create udev rules" - -#: ../../common/config.py:1420 msgid "" -"Can't find anacron.\n" -"Are you sure anacron is installed ?\n" -"If not you should disable daily anacron backups." +"Could not install Udev rule for profile %(profile_id)s. DBus Service " +"'%(dbus_interface)s' wasn't available" msgstr "" -"Can't find anacron.\n" -"Are you sure anacron is installed ?\n" -"If not you should disable daily anacron backups." - -#: ../../common/config.py:1439 -msgid "Please provide your sudo password to install the udev rule." -msgstr "Please provide your sudo password to install the udev rule." -#: ../../common/config.py:1445 -msgid "Please provide your sudo password to remove unused udev rules." -msgstr "Please provide your sudo password to remove unused udev rules." - -#: ../../common/configfile.py:253 ../../common/configfile.py:315 +#: ../../common/config.py:1517 #, python-format -msgid "Profile \"%s\" already exists !" -msgstr "Profile \"%s\" already exists!" +msgid "Schedule udev doesn't work with mode %s" +msgstr "Schedule udev doesn't work with mode %s" -#: ../../common/configfile.py:284 -msgid "You can't remove the last profile !" -msgstr "You can't remove the last profile!" +#: ../../common/config.py:1526 +#, python-format +msgid "Couldn't find UUID for \"%s\"" +msgstr "Couldn't find UUID for \"%s\"" -#: ../../common/encfstools.py:95 +#: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" @@ -281,16 +319,16 @@ "\n" "%(error)s" -#: ../../common/encfstools.py:105 +#: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "Can't unmount encfs %s" -#: ../../common/encfstools.py:149 +#: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "Config for encrypted folder not found." -#: ../../common/encfstools.py:153 +#: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" @@ -298,23 +336,23 @@ "\n" "Create a new encrypted folder?" -#: ../../common/encfstools.py:154 +#: ../../common/encfstools.py:171 msgid "Cancel" msgstr "Cancel" -#: ../../common/encfstools.py:157 +#: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "Please confirm password" -#: ../../common/encfstools.py:161 +#: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "Password doesn't match" -#: ../../common/encfstools.py:166 +#: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "encfs not found. Please install e.g. 'apt-get install encfs'" -#: ../../common/encfstools.py:174 ../../common/sshtools.py:207 +#: ../../common/encfstools.py:196 ../../common/sshtools.py:262 #, python-format msgid "" "%(user)s is not member of group 'fuse'.\n" @@ -325,7 +363,7 @@ " Run 'sudo adduser %(user)s fuse'. To apply changes logout and login again.\n" "Look at 'man backintime' for further instructions." -#: ../../common/encfstools.py:189 +#: ../../common/encfstools.py:211 msgid "" "encfs version 1.7.2 and before has a bug with option --reverse. Please " "update encfs" @@ -333,13 +371,12 @@ "encfs version 1.7.2 and before has a bug with option --reverse. Please " "update encfs" -#: ../../common/encfstools.py:453 ../../common/encfstools.py:480 -#: ../../common/snapshots.py:982 ../../common/snapshots.py:1288 -#: ../../kde4/app.py:82 ../../gnome/mainwindow.glade:43 +#: ../../common/encfstools.py:512 ../../common/snapshots.py:1131 +#: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "Take snapshot" -#: ../../common/mount.py:195 +#: ../../common/mount.py:204 #, python-format msgid "" "Hash collision occurred in hash_id %s. Incrementing global value " @@ -348,30 +385,29 @@ "Hash collision occurred in hash_id %s. Incrementing global value " "hash_collision and try again." -#: ../../common/mount.py:246 +#: ../../common/mount.py:259 #, python-format msgid "mountpoint %s not empty." msgstr "mountpoint %s not empty." -#: ../../common/mount.py:286 +#: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "Mountprocess lock timeout" -#: ../../common/password.py:425 +#: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "Profile '%(profile)s': Enter password for %(mode)s: " -#: ../../common/snapshots.py:171 ../../gnome/app.py:1127 -#: ../../kde4/app.py:1014 +#: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Now" -#: ../../common/snapshots.py:182 ../../gnome/gnometools.py:37 +#: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "WITH ERRORS !" -#: ../../common/snapshots.py:282 +#: ../../common/snapshots.py:344 msgid "" "### This log has been decoded with automatic search pattern\n" "### If some paths are not decoded you can manually decode them with:\n" @@ -379,15 +415,20 @@ "### This log has been decoded with automatic search pattern\n" "### If some paths are not decoded you can manually decode them with:\n" -#: ../../common/snapshots.py:465 +#: ../../common/snapshots.py:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "FAILED" -#: ../../common/snapshots.py:564 +#: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "Restore permissions:" -#: ../../common/snapshots.py:739 +#: ../../common/snapshots.py:752 ../../qt4/app.py:377 ../../qt4/app.py:675 +#: ../../qt4/app.py:692 ../../qt4/qt4systrayicon.py:65 +msgid "Done" +msgstr "Done" + +#: ../../common/snapshots.py:860 msgid "" "Back In Time changed its backup format.\n" "\n" @@ -397,7 +438,7 @@ "\n" "Your old snapshots can be moved according to this new format. OK?" -#: ../../common/snapshots.py:749 +#: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" @@ -414,7 +455,7 @@ "\n" "(The program will still be able to discriminate between them)" -#: ../../common/snapshots.py:752 +#: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" @@ -422,7 +463,7 @@ "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" -#: ../../common/snapshots.py:803 +#: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" @@ -443,7 +484,7 @@ "If not Back In Time will restore former settings for this profile, however " "cannot continue taking snapshots" -#: ../../common/snapshots.py:812 +#: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" @@ -458,7 +499,7 @@ "You can manually move the snapshots, \n" "if you are done restart Back In Time to proceed" -#: ../../common/snapshots.py:825 +#: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" @@ -468,7 +509,7 @@ "\n" "Back In Time will continue taking snapshots again as scheduled" -#: ../../common/snapshots.py:830 +#: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" @@ -488,11 +529,11 @@ "\n" "If you do not, you will be asked again next time you start Back In Time." -#: ../../common/snapshots.py:839 +#: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "Back In Time will continue taking snapshots again as scheduled" -#: ../../common/snapshots.py:841 +#: ../../common/snapshots.py:953 msgid "" "Back In Time still cannot continue taking new snapshots.\n" "Restart Back In Time to see the questions again" @@ -500,7 +541,11 @@ "Back In Time still cannot continue taking new snapshots.\n" "Restart Back In Time to see the questions again" -#: ../../common/snapshots.py:913 +#: ../../common/snapshots.py:972 +msgid "Deferring backup while on battery" +msgstr "" + +#: ../../common/snapshots.py:1035 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it." @@ -508,96 +553,101 @@ "Can't find snapshots folder.\n" "If it is on a removable drive, please plug it in." -#: ../../common/snapshots.py:915 +#: ../../common/snapshots.py:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "Waiting %s second." msgstr[1] "Waiting %s seconds." -#: ../../common/snapshots.py:941 +#: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "Failed to take snapshot %s !!!" -#: ../../common/snapshots.py:950 +#: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "Finalising" -#: ../../common/snapshots.py:1088 +#: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "Can't create folder: %s" -#: ../../common/snapshots.py:1107 +#: ../../common/snapshots.py:1217 msgid "..." msgstr "..." -#: ../../common/snapshots.py:1134 +#: ../../common/snapshots.py:1238 +#, python-format +msgid "Found leftover '%s' which can be continued." +msgstr "" + +#: ../../common/snapshots.py:1250 +#, python-format +msgid "Remove leftover '%s' folder from last run" +msgstr "" + +#: ../../common/snapshots.py:1263 #, python-format msgid "Can't remove folder: %s" msgstr "Can't remove folder: %s" -#: ../../common/snapshots.py:1219 +#: ../../common/snapshots.py:1340 #, python-format msgid "Compare with snapshot %s" msgstr "Compare with snapshot %s" -#: ../../common/snapshots.py:1248 +#: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "Create hard-links" -#: ../../common/snapshots.py:1335 +#: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "Save config file..." -#: ../../common/snapshots.py:1341 +#: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "Save permission..." -#: ../../common/snapshots.py:1442 +#: ../../common/snapshots.py:1470 +msgid "Save permission over ssh failed. Retry normal method" +msgstr "" + +#: ../../common/snapshots.py:1521 #, python-format msgid "Can't rename %(new_path)s to %(path)s" msgstr "Can't rename %(new_path)s to %(path)s" -#: ../../common/snapshots.py:1562 -msgid "Remove old snapshots" -msgstr "Remove old snapshots" - -#: ../../common/snapshots.py:1586 ../../kde4/settingsdialog.py:501 -#: ../../gnome/settingsdialog.glade:1660 +#: ../../common/snapshots.py:1695 ../../common/snapshots.py:1728 +#: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "Smart remove" -#: ../../common/snapshots.py:1591 +#: ../../common/snapshots.py:1704 +msgid "Remove old snapshots" +msgstr "Remove old snapshots" + +#: ../../common/snapshots.py:1733 msgid "Try to keep min free space" msgstr "Try to keep min free space" -#: ../../common/snapshots.py:1621 +#: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "Try to keep min %d%% free inodes" -#: ../../common/sshtools.py:106 +#: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "Can't mount %s" -#: ../../common/sshtools.py:113 +#: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "Can't unmount sshfs %s" -#: ../../common/sshtools.py:187 -#, python-format -msgid "" -"Failed to unlock SSH private key:\n" -"Error: %s" -msgstr "" -"Failed to unlock SSH private key:\n" -"Error: %s" - -#: ../../common/sshtools.py:194 +#: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." @@ -605,11 +655,11 @@ "Could not unlock ssh private key. Wrong password or password not available " "for cron." -#: ../../common/sshtools.py:199 +#: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "sshfs not found. Please install e.g. 'apt-get install sshfs'" -#: ../../common/sshtools.py:217 +#: ../../common/sshtools.py:278 #, python-format msgid "" "Password-less authentication for %(user)s@%(host)s failed. Look at 'man " @@ -618,7 +668,7 @@ "Password-less authentication for %(user)s@%(host)s failed. Look at 'man " "backintime' for further instructions." -#: ../../common/sshtools.py:229 +#: ../../common/sshtools.py:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" @@ -627,12 +677,12 @@ "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" -#: ../../common/sshtools.py:254 +#: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "%s not found in ssh_known_hosts." -#: ../../common/sshtools.py:274 +#: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" @@ -641,7 +691,7 @@ "Remote path exists but is not a directory:\n" " %s" -#: ../../common/sshtools.py:276 +#: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" @@ -650,7 +700,7 @@ "Remote path is not writeable:\n" " %s" -#: ../../common/sshtools.py:278 +#: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" @@ -659,7 +709,7 @@ "Remote path is not executable:\n" " %s" -#: ../../common/sshtools.py:280 +#: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" @@ -668,12 +718,12 @@ "Couldn't create remote path:\n" " %s" -#: ../../common/sshtools.py:302 +#: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "Ping %s failed. Host is down or wrong address." -#: ../../common/sshtools.py:325 ../../common/sshtools.py:383 +#: ../../common/sshtools.py:423 ../../common/sshtools.py:553 #, python-format msgid "" "Remote host %(host)s doesn't support '%(command)s':\n" @@ -684,7 +734,7 @@ "%(err)s\n" "Look at 'man backintime' for further instructions" -#: ../../common/sshtools.py:387 +#: ../../common/sshtools.py:556 #, python-format msgid "" "Check commands on host %(host)s returned unknown error:\n" @@ -695,96 +745,149 @@ "%(err)s\n" "Look at 'man backintime' for further instructions" -#: ../../common/sshtools.py:400 +#: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "Remote host %s doesn't support hardlinks" -#: ../../gnome/app.py:185 ../../gnome/app.py:594 ../../gnome/app.py:608 -#: ../../kde4/app.py:299 ../../kde4/app.py:570 ../../kde4/app.py:587 -msgid "Done" -msgstr "Done" +#: ../../qt4/app.py:81 +msgid "Refresh snapshots list" +msgstr "Refresh snapshots list" + +#: ../../qt4/app.py:85 ../../qt4/app.py:890 +msgid "Snapshot Name" +msgstr "Snapshot Name" + +#: ../../qt4/app.py:88 +msgid "Remove Snapshot" +msgstr "Remove Snapshot" + +#: ../../qt4/app.py:91 +msgid "View Snapshot Log" +msgstr "View Snapshot Log" + +#: ../../qt4/app.py:94 +msgid "View Last Log" +msgstr "View Last Log" + +#: ../../qt4/app.py:99 ../../qt4/settingsdialog.py:51 +msgid "Settings" +msgstr "Settings" + +#: ../../qt4/app.py:104 +msgid "Shutdown" +msgstr "Shutdown" + +#: ../../qt4/app.py:105 +msgid "Shutdown system after snapshot has finished." +msgstr "Shutdown system after snapshot has finished." + +#: ../../qt4/app.py:111 +msgid "Exit" +msgstr "Exit" -#: ../../gnome/app.py:189 ../../kde4/app.py:143 ../../kde4/app.py:159 -#: ../../gnome/mainwindow.glade:225 +#: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 msgid "Help" msgstr "Help" -#: ../../gnome/app.py:191 ../../kde4/app.py:146 -#: ../../gnome/mainwindow.glade:223 +#: ../../qt4/app.py:122 +msgid "Config File Help" +msgstr "" + +#: ../../qt4/app.py:125 msgid "Website" msgstr "Website" -#: ../../gnome/app.py:192 ../../kde4/app.py:148 +#: ../../qt4/app.py:127 ../../qt4/app.py:982 +msgid "Changelog" +msgstr "" + +#: ../../qt4/app.py:129 msgid "FAQ" msgstr "FAQ" -#: ../../gnome/app.py:193 ../../kde4/app.py:150 +#: ../../qt4/app.py:131 msgid "Ask a question" msgstr "Ask a question" -#: ../../gnome/app.py:194 ../../kde4/app.py:152 +#: ../../qt4/app.py:133 msgid "Report a bug" msgstr "Report a bug" -#: ../../gnome/app.py:196 ../../kde4/app.py:155 +#: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "About" -#: ../../gnome/app.py:202 ../../gnome/app.py:887 -#: ../../gnome/restoredialog.py:84 ../../gnome/snapshotsdialog.py:83 -#: ../../gnome/snapshotsdialog.py:244 ../../kde4/app.py:206 -#: ../../kde4/app.py:216 ../../kde4/restoredialog.py:68 -#: ../../kde4/snapshotsdialog.py:111 ../../kde4/snapshotsdialog.py:117 -#: ../../gnome/mainwindow.glade:350 ../../gnome/mainwindow.glade:352 -#: ../../gnome/snapshotsdialog.glade:169 ../../gnome/snapshotsdialog.glade:171 +#: ../../qt4/app.py:163 +msgid "Up" +msgstr "Up" + +#: ../../qt4/app.py:174 ../../qt4/settingsdialog.py:1776 +msgid "Show hidden files" +msgstr "Show hidden files" + +#: ../../qt4/app.py:184 ../../qt4/app.py:199 ../../qt4/app.py:233 +#: ../../qt4/restoredialog.py:62 ../../qt4/settingsdialog.py:1818 +#: ../../qt4/snapshotsdialog.py:134 ../../qt4/snapshotsdialog.py:139 msgid "Restore" msgstr "Restore" -#: ../../gnome/app.py:203 ../../gnome/app.py:888 ../../gnome/gnometools.py:67 -#: ../../gnome/snapshotsdialog.py:84 ../../gnome/snapshotsdialog.py:245 -#: ../../kde4/app.py:208 ../../kde4/restoredialog.py:42 -#: ../../kde4/snapshotsdialog.py:113 +#: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 +#: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "Restore to..." -#: ../../gnome/app.py:205 ../../gnome/app.py:896 ../../gnome/app.py:1146 -#: ../../kde4/app.py:1041 -#, python-format -msgid "Restore '%s'" -msgstr "Restore '%s'" +#: ../../qt4/app.py:194 +msgid "Restore and delete new files" +msgstr "" -#: ../../gnome/app.py:207 ../../gnome/app.py:897 ../../gnome/app.py:1147 -#: ../../kde4/app.py:1042 +#: ../../qt4/app.py:201 #, python-format -msgid "Restore '%s' to ..." -msgstr "Restore '%s' to..." +msgid "" +"Restore selected file or folder.\n" +"If this button is grayed out this is most likely because \"%(now)s\" is " +"selected in left hand snapshots list." +msgstr "" + +#: ../../qt4/app.py:206 ../../qt4/logviewdialog.py:67 +#: ../../qt4/qt4tools.py:160 ../../qt4/snapshotsdialog.py:96 +msgid "Snapshots" +msgstr "Snapshots" + +#: ../../qt4/app.py:213 +msgid "Snapshot" +msgstr "" -#: ../../gnome/app.py:226 ../../kde4/app.py:235 +#: ../../qt4/app.py:224 +msgid "View" +msgstr "" + +#: ../../qt4/app.py:277 msgid "Shortcuts" msgstr "Shortcuts" -#: ../../gnome/app.py:249 -msgid "Name" -msgstr "Name" - -#: ../../gnome/app.py:260 -msgid "Size" -msgstr "Size" - -#: ../../gnome/app.py:267 -msgid "Date" -msgstr "Date" - -#: ../../gnome/app.py:286 ../../gnome/app.py:883 -#: ../../gnome/snapshotsdialog.py:116 ../../kde4/app.py:171 -#: ../../kde4/app.py:221 ../../kde4/snapshotsdialog.py:91 -#: ../../gnome/mainwindow.glade:366 ../../gnome/mainwindow.glade:368 -#: ../../gnome/snapshotsdialog.glade:8 -msgid "Snapshots" -msgstr "Snapshots" +#: ../../qt4/app.py:295 +msgid "" +"This folder doesn't exist\n" +"in the current selected snapshot!" +msgstr "" + +#: ../../qt4/app.py:359 +msgid "Add to Include" +msgstr "" + +#: ../../qt4/app.py:360 +msgid "Add to Exclude" +msgstr "" + +#: ../../qt4/app.py:416 +#, python-format +msgid "" +"%(appName)s is not configured. Would you like to restore a previous " +"configuration?" +msgstr "" -#: ../../gnome/app.py:348 ../../kde4/app.py:362 +#: ../../qt4/app.py:440 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it and then press OK" @@ -792,409 +895,343 @@ "Can't find snapshots folder.\n" "If it is on a removable drive, please plug it in and then press OK." -#: ../../gnome/app.py:611 ../../kde4/app.py:590 -msgid "Done, no backup needed" -msgstr "Done, no backup needed" +#: ../../qt4/app.py:473 +msgid "" +"If you close this window Back In Time will not be able to shutdown your " +"system when the snapshot has finished.\n" +"Do you really want to close?" +msgstr "" +"If you close this window Back In Time will not be able to shutdown your " +"system when the snapshot has finished.\n" +"Do you really want to close?" -#: ../../gnome/app.py:619 ../../kde4/app.py:598 +#: ../../qt4/app.py:667 ../../qt4/app.py:703 msgid "Working:" msgstr "Working:" -#: ../../gnome/app.py:623 ../../kde4/app.py:602 +#: ../../qt4/app.py:695 +msgid "Done, no backup needed" +msgstr "Done, no backup needed" + +#: ../../qt4/app.py:707 msgid "Error:" msgstr "Error:" -#: ../../gnome/app.py:636 ../../kde4/app.py:649 +#: ../../qt4/app.py:726 ../../qt4/qt4systrayicon.py:153 +msgid "Sent:" +msgstr "" + +#: ../../qt4/app.py:727 ../../qt4/qt4systrayicon.py:154 +msgid "Speed:" +msgstr "" + +#: ../../qt4/app.py:728 ../../qt4/qt4systrayicon.py:155 +msgid "ETA:" +msgstr "" + +#: ../../qt4/app.py:777 msgid "Global" msgstr "Global" -#: ../../gnome/app.py:637 ../../kde4/app.py:650 +#: ../../qt4/app.py:778 msgid "Root" msgstr "Root" -#: ../../gnome/app.py:638 ../../kde4/app.py:651 +#: ../../qt4/app.py:779 msgid "Home" msgstr "Home" -#: ../../gnome/app.py:662 -msgid "Bookmarks" -msgstr "Bookmarks" - -#: ../../gnome/app.py:675 ../../kde4/app.py:662 +#: ../../qt4/app.py:794 msgid "Backup folders" msgstr "Backup folders" -#: ../../gnome/app.py:701 ../../kde4/app.py:734 -msgid "Today" -msgstr "Today" +#: ../../qt4/app.py:849 +msgid "This is NOT a snapshot but a live view of your local files" +msgstr "" -#: ../../gnome/app.py:705 ../../kde4/app.py:738 -msgid "Yesterday" -msgstr "Yesterday" +#: ../../qt4/app.py:860 ../../qt4/app.py:1476 +#, python-format +msgid "Last check %s" +msgstr "" -#: ../../gnome/app.py:709 ../../kde4/app.py:742 -msgid "This week" -msgstr "This week" +#: ../../qt4/app.py:928 +#, python-format +msgid "" +"Are you sure you want to remove the snapshot:\n" +"%s" +msgstr "" +"Are you sure you want to remove the snapshot:\n" +"%s?" -#: ../../gnome/app.py:713 ../../kde4/app.py:746 -msgid "Last week" -msgstr "Last week" +#: ../../qt4/app.py:1004 +#, python-format +msgid "" +"Backup local files before overwriting or\n" +"removing with trailing '%(suffix)s'." +msgstr "" -#: ../../gnome/app.py:764 ../../kde4/app.py:398 +#: ../../qt4/app.py:1010 msgid "" -"If you close this window Back In Time will not be able to shutdown your " -"system when the snapshot has finished.\n" -"Do you really want to close?" +"Are you sure you want to remove all newer files in your original folder?" msgstr "" -"If you close this window Back In Time will not be able to shutdown your " -"system when the snapshot has finished.\n" -"Do you really want to close?" -#: ../../gnome/app.py:881 ../../gnome/snapshotsdialog.py:238 -msgid "Open" -msgstr "Open" +#: ../../qt4/app.py:1014 +msgid "" +"WARNING: deleting files in filesystem root could break your whole system!!!" +msgstr "" -#: ../../gnome/app.py:1056 ../../kde4/app.py:90 ../../kde4/app.py:805 -#: ../../gnome/mainwindow.glade:73 ../../gnome/mainwindow.glade:75 -msgid "Snapshot Name" -msgstr "Snapshot Name" +#: ../../qt4/app.py:1016 +msgid "Files to be restored:" +msgstr "" -#: ../../gnome/app.py:1075 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +#: ../../qt4/app.py:1031 +msgid "Do you really want to restore this files(s):" msgstr "" -"Are you sure you want to remove the snapshot:\n" -"%s?" -#: ../../gnome/app.py:1123 ../../kde4/app.py:1010 +#: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "Snapshot: %s" -#: ../../gnome/app.py:1124 ../../kde4/app.py:1011 +#: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "View the snapshot made at %s" -#: ../../gnome/app.py:1126 ../../kde4/app.py:1013 +#: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "View the current disk content" -#: ../../gnome/logviewdialog.py:106 ../../gnome/settingsdialog.py:414 -#: ../../kde4/logviewdialog.py:83 ../../kde4/settingsdialog.py:590 -msgid "All" -msgstr "All" +#: ../../qt4/app.py:1268 +#, python-format +msgid "Restore '%s'" +msgstr "Restore '%s'" -#: ../../gnome/logviewdialog.py:107 ../../gnome/settingsdialog.py:412 -#: ../../kde4/logviewdialog.py:84 ../../kde4/settingsdialog.py:588 -msgid "Errors" -msgstr "Errors" +#: ../../qt4/app.py:1269 +#, python-format +msgid "Restore '%s' to ..." +msgstr "Restore '%s' to..." -#: ../../gnome/logviewdialog.py:112 ../../kde4/logviewdialog.py:89 -msgid "Changes" -msgstr "Changes" +#: ../../qt4/app.py:1270 +#, python-format +msgid "Restore '%s' and delete new files" +msgstr "" -#: ../../gnome/logviewdialog.py:115 ../../kde4/logviewdialog.py:92 -msgid "Informations" -msgstr "Information" +#: ../../qt4/app.py:1368 ../../qt4/app.py:1385 +msgid "Authors" +msgstr "" -#: ../../gnome/settingsdialog.py:235 ../../kde4/settingsdialog.py:387 -msgid "Include files and folders" -msgstr "Include files and folders" - -#: ../../gnome/settingsdialog.py:264 -msgid "Exclude patterns, files or folders" -msgstr "Exclude patterns, files or folders" - -#: ../../gnome/settingsdialog.py:411 ../../kde4/settingsdialog.py:587 -msgid "None" -msgstr "None" - -#: ../../gnome/settingsdialog.py:413 ../../kde4/settingsdialog.py:589 -msgid "Changes & Errors" -msgstr "Changes & Errors" - -#: ../../gnome/settingsdialog.py:458 -msgid "Snapshots folder" -msgstr "Snapshots folder" - -#: ../../gnome/settingsdialog.py:466 ../../kde4/settingsdialog.py:1314 -msgid "Are you sure you want to change snapshots folder ?" -msgstr "Are you sure you want to change snapshots folder?" - -#: ../../gnome/settingsdialog.py:901 ../../kde4/settingsdialog.py:914 -msgid "" -"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " -"*/3 for periodic backups every 3 hours" +#: ../../qt4/app.py:1369 ../../qt4/app.py:1388 +msgid "Translations" msgstr "" -"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " -"*/3 for periodic backups every 3 hours" - -#: ../../gnome/settingsdialog.py:1141 ../../kde4/settingsdialog.py:653 -msgid "New profile" -msgstr "New profile" - -#: ../../gnome/settingsdialog.py:1155 ../../kde4/settingsdialog.py:669 -msgid "Rename profile" -msgstr "Rename profile" - -#: ../../gnome/settingsdialog.py:1167 ../../kde4/settingsdialog.py:683 -#, python-format -msgid "Are you sure you want to delete the profile \"%s\" ?" -msgstr "Are you sure you want to delete the profile \"%s\"?" - -#: ../../gnome/settingsdialog.py:1173 ../../kde4/settingsdialog.py:1292 -msgid "Include folder" -msgstr "Include folder" - -#: ../../gnome/settingsdialog.py:1193 ../../kde4/settingsdialog.py:1278 -msgid "Include file" -msgstr "Include file" - -#: ../../gnome/settingsdialog.py:1235 ../../kde4/settingsdialog.py:1241 -msgid "Exclude pattern" -msgstr "Exclude pattern" - -#: ../../gnome/settingsdialog.py:1240 ../../kde4/settingsdialog.py:1251 -msgid "Exclude patterns can't contain ':' char !" -msgstr "Exclude patterns can't contain ':' character!" -#: ../../gnome/settingsdialog.py:1246 ../../kde4/settingsdialog.py:1257 -msgid "Exclude file" -msgstr "Exclude file" - -#: ../../gnome/settingsdialog.py:1257 ../../kde4/settingsdialog.py:1261 -msgid "Exclude folder" -msgstr "Exclude folder" - -#: ../../gnome/snapshotsdialog.py:240 -msgid "Jump to" -msgstr "Jump to" - -#: ../../gnome/snapshotsdialog.py:248 ../../kde4/snapshotsdialog.py:164 -msgid "Diff" -msgstr "Diff" - -#: ../../gnome/snapshotsdialog.py:277 ../../kde4/snapshotsdialog.py:339 -msgid "You can't compare a snapshot to itself" -msgstr "You can't compare a snapshot to itself" - -#: ../../gnome/snapshotsdialog.py:284 ../../kde4/snapshotsdialog.py:346 -#, python-format -msgid "Command not found: %s" -msgstr "Command not found: %s" - -#: ../../gnome/snapshotsdialog.py:307 ../../kde4/snapshotsdialog.py:367 -#, python-format -msgid "" -"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" +#: ../../qt4/app.py:1370 ../../qt4/app.py:1391 +msgid "License" msgstr "" -"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" - -#: ../../gnome/snapshotsdialog.py:310 ../../kde4/snapshotsdialog.py:370 -#, python-format -msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" -msgstr "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" -#: ../../gnome/snapshotsdialog.py:312 ../../kde4/snapshotsdialog.py:372 -msgid "WARNING: This can not be revoked!" -msgstr "WARNING: This can not be revoked!" +#: ../../qt4/logviewdialog.py:49 +msgid "Last Log View" +msgstr "" -#: ../../gnome/snapshotsdialog.py:317 ../../kde4/snapshotsdialog.py:377 -#, python-format -msgid "Exclude \"%s\" from future snapshots?" -msgstr "Exclude \"%s\" from future snapshots?" +#: ../../qt4/logviewdialog.py:51 +msgid "Snapshot Log View" +msgstr "" -#: ../../kde4/app.py:86 ../../gnome/mainwindow.glade:58 -#: ../../gnome/mainwindow.glade:60 -msgid "Refresh snapshots list" -msgstr "Refresh snapshots list" +#: ../../qt4/logviewdialog.py:59 ../../qt4/settingsdialog.py:59 +#: ../../qt4/settingsdialog.py:274 ../../qt4/settingsdialog.py:1899 +msgid "Profile:" +msgstr "Profile:" -#: ../../kde4/app.py:94 ../../gnome/mainwindow.glade:88 -#: ../../gnome/mainwindow.glade:90 -msgid "Remove Snapshot" -msgstr "Remove Snapshot" +#: ../../qt4/logviewdialog.py:81 +msgid "Filter:" +msgstr "Filter:" -#: ../../kde4/app.py:98 ../../gnome/mainwindow.glade:105 -msgid "View Snapshot Log" -msgstr "View Snapshot Log" +#: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 +msgid "All" +msgstr "All" -#: ../../kde4/app.py:102 ../../gnome/mainwindow.glade:121 -msgid "View Last Log" -msgstr "View Last Log" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 +#: ../../qt4/settingsdialog.py:657 +msgid "Errors" +msgstr "Errors" -#: ../../kde4/app.py:108 ../../kde4/settingsdialog.py:69 -#: ../../gnome/mainwindow.glade:144 ../../gnome/mainwindow.glade:146 -#: ../../gnome/settingsdialog.glade:7 -msgid "Settings" -msgstr "Settings" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 +msgid "Changes" +msgstr "Changes" -#: ../../kde4/app.py:124 ../../gnome/mainwindow.glade:169 -msgid "Shutdown system after snapshot has finished." -msgstr "Shutdown system after snapshot has finished." +#: ../../qt4/logviewdialog.py:92 +msgid "Informations" +msgstr "Information" -#: ../../kde4/app.py:131 ../../gnome/mainwindow.glade:184 -#: ../../gnome/mainwindow.glade:186 -msgid "Exit" -msgstr "Exit" +#: ../../qt4/logviewdialog.py:101 +msgid "[E] Error, [I] Information, [C] Change" +msgstr "[E] Error, [I] Information, [C] Change" -#: ../../kde4/app.py:186 ../../gnome/mainwindow.glade:289 -msgid "Up" -msgstr "Up" +#: ../../qt4/logviewdialog.py:104 +msgid "decode paths" +msgstr "decode paths" -#: ../../kde4/app.py:199 ../../gnome/mainwindow.glade:325 -msgid "Show hidden files" -msgstr "Show hidden files" +#: ../../qt4/messagebox.py:56 +msgid "Error" +msgstr "" -#: ../../kde4/app.py:244 -msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +#: ../../qt4/messagebox.py:62 ../../qt4/messagebox.py:68 +msgid "Question" msgstr "" -"This folder doesn't exist\n" -"in the current snapshot !" -#: ../../kde4/app.py:839 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +#: ../../qt4/qt4systrayicon.py:69 +msgid "Start BackInTime" msgstr "" -"Are you sure you want to remove the snapshot:\n" -"%s?" -#: ../../kde4/app.py:1140 ../../kde4/kde4systrayicon.py:117 +#: ../../qt4/qt4systrayicon.py:124 msgid "Working..." msgstr "Working…" -#: ../../kde4/logviewdialog.py:55 -msgid "Error Log View" -msgstr "Error Log View" - -#: ../../kde4/logviewdialog.py:65 ../../kde4/settingsdialog.py:79 -#: ../../kde4/settingsdialog.py:293 ../../gnome/logviewdialog.glade:73 -#: ../../gnome/settingsdialog.glade:72 -msgid "Profile:" -msgstr "Profile:" +#: ../../qt4/qt4tools.py:178 +msgid "Today" +msgstr "Today" -#: ../../kde4/logviewdialog.py:77 ../../gnome/logviewdialog.glade:110 -msgid "Filter:" -msgstr "Filter:" +#: ../../qt4/qt4tools.py:183 +msgid "Yesterday" +msgstr "Yesterday" -#: ../../kde4/logviewdialog.py:100 ../../gnome/logviewdialog.glade:169 -msgid "[E] Error, [I] Information, [C] Change" -msgstr "[E] Error, [I] Information, [C] Change" +#: ../../qt4/qt4tools.py:188 +msgid "This week" +msgstr "This week" -#: ../../kde4/logviewdialog.py:103 ../../gnome/logviewdialog.glade:195 -msgid "decode paths" -msgstr "decode paths" +#: ../../qt4/qt4tools.py:193 +msgid "Last week" +msgstr "Last week" + +#: ../../qt4/restoredialog.py:75 +msgid "Show full Log" +msgstr "" -#: ../../kde4/settingsdialog.py:88 +#: ../../qt4/settingsdialog.py:68 msgid "Edit" msgstr "Edit" -#: ../../kde4/settingsdialog.py:106 ../../gnome/settingsdialog.glade:1207 +#: ../../qt4/settingsdialog.py:73 +msgid "Modify for Full System Backup" +msgstr "" + +#: ../../qt4/settingsdialog.py:77 ../../qt4/settingsdialog.py:451 +msgid "Add" +msgstr "" + +#: ../../qt4/settingsdialog.py:81 ../../qt4/settingsdialog.py:408 +#: ../../qt4/settingsdialog.py:467 +msgid "Remove" +msgstr "" + +#: ../../qt4/settingsdialog.py:96 msgid "General" msgstr "General" -#: ../../kde4/settingsdialog.py:114 ../../gnome/settingsdialog.glade:199 +#: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "Mode:" -#: ../../kde4/settingsdialog.py:127 ../../kde4/settingsdialog.py:1311 +#: ../../qt4/settingsdialog.py:119 +#, python-format +msgid "" +"Warning: %(app)s uses EncFS for encryption. A recent security audit " +"revealed several possible attack vectors for this. Please take a look at 'A " +"NOTE ON SECURITY' in 'man backintime'." +msgstr "" + +#: ../../qt4/settingsdialog.py:129 ../../qt4/settingsdialog.py:1568 msgid "Where to save snapshots" msgstr "Where to save snapshots" -#: ../../kde4/settingsdialog.py:146 +#: ../../qt4/settingsdialog.py:145 +msgid "Folder" +msgstr "" + +#: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "SSH Settings" -#: ../../kde4/settingsdialog.py:158 ../../kde4/settingsdialog.py:283 -#: ../../gnome/settingsdialog.glade:323 ../../gnome/settingsdialog.glade:583 -#: ../../gnome/settingsdialog.glade:874 +#: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "Host:" -#: ../../kde4/settingsdialog.py:163 ../../gnome/settingsdialog.glade:350 -#: ../../gnome/settingsdialog.glade:610 +#: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "Port:" -#: ../../kde4/settingsdialog.py:168 ../../kde4/settingsdialog.py:288 -#: ../../gnome/settingsdialog.glade:377 ../../gnome/settingsdialog.glade:637 -#: ../../gnome/settingsdialog.glade:902 +#: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "User:" -#: ../../kde4/settingsdialog.py:173 ../../gnome/settingsdialog.glade:416 +#: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "Path:" -#: ../../kde4/settingsdialog.py:178 ../../gnome/settingsdialog.glade:459 +#: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "Cipher:" -#: ../../kde4/settingsdialog.py:184 +#: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "Private Key:" -#: ../../kde4/settingsdialog.py:228 ../../kde4/settingsdialog.py:237 -#: ../../kde4/settingsdialog.py:243 ../../gnome/settingsdialog.glade:703 -#: ../../gnome/settingsdialog.glade:743 +#: ../../qt4/settingsdialog.py:201 +msgid "Key File" +msgstr "" + +#: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 +#: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "Password" -#: ../../kde4/settingsdialog.py:249 ../../gnome/settingsdialog.glade:775 +#: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "Save Password to Keyring" -#: ../../kde4/settingsdialog.py:252 ../../gnome/settingsdialog.glade:792 +#: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "Cache Password for Cron (Security issue: root can read password)" -#: ../../kde4/settingsdialog.py:264 ../../gnome/settingsdialog.glade:968 +#: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "Advanced" -#: ../../kde4/settingsdialog.py:276 ../../gnome/settingsdialog.glade:848 -msgid "Auto Host / User / Profile Id" -msgstr "Auto Host / User / Profile Id" +#: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 +msgid "Full snapshot path: " +msgstr "" -#: ../../kde4/settingsdialog.py:301 +#: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "Schedule" -#: ../../kde4/settingsdialog.py:311 ../../gnome/settingsdialog.glade:1092 +#: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "Day:" -#: ../../kde4/settingsdialog.py:322 ../../gnome/settingsdialog.glade:1079 +#: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "Weekday:" -#: ../../kde4/settingsdialog.py:333 ../../gnome/settingsdialog.glade:1066 +#: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "Hour:" -#: ../../kde4/settingsdialog.py:344 ../../gnome/settingsdialog.glade:1053 +#: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "Hours:" -#: ../../kde4/settingsdialog.py:353 ../../gnome/settingsdialog.glade:1014 +#: ../../qt4/settingsdialog.py:339 msgid "" -"Run Back In Time periodically with anacron. This is useful if the computer " -"is not running regular." +"Run Back In Time repeatedly. This is useful if the computer is not running " +"regular." msgstr "" -"Run Back In Time periodically with anacron. This is useful if the computer " -"is not running regular." -#: ../../kde4/settingsdialog.py:357 ../../gnome/settingsdialog.glade:1040 -msgid "Frequency in days:" -msgstr "Frequency in days:" +#: ../../qt4/settingsdialog.py:344 +msgid "Every:" +msgstr "" -#: ../../kde4/settingsdialog.py:368 ../../gnome/settingsdialog.glade:1026 +#: ../../qt4/settingsdialog.py:362 msgid "" "Run Back In Time as soon as the drive is connected (only once every X " "days).\n" @@ -1204,25 +1241,27 @@ "days).\n" "You will be prompted for your sudo password." -#: ../../kde4/settingsdialog.py:379 ../../gnome/settingsdialog.glade:1310 +#: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Include" -#: ../../kde4/settingsdialog.py:403 ../../kde4/settingsdialog.py:445 -#: ../../gnome/settingsdialog.glade:1411 +#: ../../qt4/settingsdialog.py:381 +msgid "Include files and folders" +msgstr "Include files and folders" + +#: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "Add file" -#: ../../kde4/settingsdialog.py:408 ../../kde4/settingsdialog.py:450 -#: ../../gnome/settingsdialog.glade:1427 +#: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Add folder" -#: ../../kde4/settingsdialog.py:418 ../../gnome/settingsdialog.glade:1474 +#: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Exclude" -#: ../../kde4/settingsdialog.py:421 ../../gnome/settingsdialog.glade:1328 +#: ../../qt4/settingsdialog.py:417 msgid "" "Warning: Wildcards ('foo*', '[fF]oo', 'fo?') will be ignored with " "mode 'SSH encrypted'.\n" @@ -1232,310 +1271,427 @@ "mode 'SSH encrypted'.\n" "Only separate asterisk are allowed ('foo/*', 'foo/**/bar')" -#: ../../kde4/settingsdialog.py:430 +#: ../../qt4/settingsdialog.py:425 +msgid "Exclude patterns, files or folders" +msgstr "Exclude patterns, files or folders" + +#: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "Highly recommended:" -#: ../../kde4/settingsdialog.py:460 ../../gnome/settingsdialog.glade:1905 +#: ../../qt4/settingsdialog.py:463 +msgid "Add default" +msgstr "" + +#: ../../qt4/settingsdialog.py:474 +msgid "Exclude files bigger than: " +msgstr "" + +#: ../../qt4/settingsdialog.py:475 +#, python-format +msgid "" +"Exclude files bigger than value in %(prefix)s.\n" +"With 'Full rsync mode' disabled this will only affect new files\n" +"because for rsync this is a transfer option, not an exclude option.\n" +"So big files that has been backed up before will remain in snapshots\n" +"even if they had changed." +msgstr "" + +#: ../../qt4/settingsdialog.py:493 msgid "Auto-remove" msgstr "Auto-remove" -#: ../../kde4/settingsdialog.py:464 ../../gnome/settingsdialog.glade:1608 +#: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "Older than:" -#: ../../kde4/settingsdialog.py:478 ../../gnome/settingsdialog.glade:1624 +#: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "If free space is less than:" -#: ../../kde4/settingsdialog.py:490 ../../gnome/settingsdialog.glade:1642 +#: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "If free inodes is less than:" -#: ../../kde4/settingsdialog.py:514 ../../gnome/settingsdialog.glade:1697 +#: ../../qt4/settingsdialog.py:551 +msgid "Run in background on remote Host." +msgstr "" + +#: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "Keep all snapshots for the last" -#: ../../kde4/settingsdialog.py:517 ../../kde4/settingsdialog.py:522 -#: ../../gnome/settingsdialog.glade:1705 ../../gnome/settingsdialog.glade:1729 +#: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "day(s)" -#: ../../kde4/settingsdialog.py:519 ../../gnome/settingsdialog.glade:1717 +#: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "Keep one snapshot per day for the last" -#: ../../kde4/settingsdialog.py:524 ../../gnome/settingsdialog.glade:1743 +#: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "Keep one snapshot per week for the last" -#: ../../kde4/settingsdialog.py:527 +#: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "weeks(s)" -#: ../../kde4/settingsdialog.py:529 ../../gnome/settingsdialog.glade:1769 +#: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "Keep one snapshot per month for the last" -#: ../../kde4/settingsdialog.py:532 ../../gnome/settingsdialog.glade:1781 +#: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "month(s)" -#: ../../kde4/settingsdialog.py:534 ../../gnome/settingsdialog.glade:1795 +#: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "Keep one snapshot per year for all years" -#: ../../kde4/settingsdialog.py:537 ../../gnome/settingsdialog.glade:1496 +#: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "Don't remove named snapshots" -#: ../../kde4/settingsdialog.py:546 ../../gnome/settingsdialog.glade:2104 +#: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Options" -#: ../../kde4/settingsdialog.py:549 ../../gnome/settingsdialog.glade:1920 +#: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Enable notifications" -#: ../../kde4/settingsdialog.py:552 ../../gnome/settingsdialog.glade:1937 +#: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "Disable snapshots when on battery" -#: ../../kde4/settingsdialog.py:555 +#: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" msgstr "Power status not available from system" -#: ../../kde4/settingsdialog.py:558 ../../gnome/settingsdialog.glade:1955 -msgid "Backup files on restore" -msgstr "Backup files on restore" +#: ../../qt4/settingsdialog.py:611 +msgid "Run only one snapshot at a time" +msgstr "" + +#: ../../qt4/settingsdialog.py:612 +msgid "" +"Other snapshots will be blocked until the current snapshot is done.\n" +"This is a global option. So it will effect all profiles for this user.\n" +"But you need to activate this for all other users, too." +msgstr "" + +#: ../../qt4/settingsdialog.py:617 +msgid "Backup replaced files on restore" +msgstr "" -#: ../../kde4/settingsdialog.py:561 ../../gnome/settingsdialog.glade:1972 +#: ../../qt4/settingsdialog.py:618 +#, python-format +msgid "" +"Newer versions of files will be renamed with trailing '%(suffix)s' before " +"restoring.\n" +"If you don't need them anymore you can remove them with '%(cmd)s'" +msgstr "" + +#: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "Continue on errors (keep incomplete snapshots)" -#: ../../kde4/settingsdialog.py:564 ../../gnome/settingsdialog.glade:1989 +#: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "Use checksum to detect changes" -#: ../../kde4/settingsdialog.py:567 ../../gnome/settingsdialog.glade:2006 +#: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "Full rsync mode. May be faster but:" -#: ../../kde4/settingsdialog.py:568 ../../gnome/settingsdialog.glade:2032 +#: ../../qt4/settingsdialog.py:634 msgid "" -"- snapshots are no read-only\n" -"- destination file-system must support all linux attributes (dates, rights, " -"user, group ...)" -msgstr "" "- snapshots are not read-only\n" -"- destination file-system must support all linux attributes (dates, rights, " +"- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" +msgstr "" -#: ../../kde4/settingsdialog.py:575 ../../gnome/settingsdialog.glade:2045 +#: ../../qt4/settingsdialog.py:641 +msgid "Take a new snapshot regardless of there were changes or not." +msgstr "" + +#: ../../qt4/settingsdialog.py:644 msgid "Check for changes (don't take a new snapshot if nothing changed)" msgstr "Check for changes (don't take a new snapshot if nothing changed)" -#: ../../kde4/settingsdialog.py:582 +#: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "Log Level:" -#: ../../kde4/settingsdialog.py:597 ../../gnome/settingsdialog.glade:2366 -msgid "Expert Options" -msgstr "Expert Options" +#: ../../qt4/settingsdialog.py:656 +msgid "None" +msgstr "None" + +#: ../../qt4/settingsdialog.py:658 +msgid "Changes & Errors" +msgstr "Changes & Errors" -#: ../../kde4/settingsdialog.py:600 +#: ../../qt4/settingsdialog.py:674 msgid "Change these options only if you really know what you are doing !" msgstr "Change these options only if you really know what you are doing!" -#: ../../kde4/settingsdialog.py:608 ../../gnome/settingsdialog.glade:2133 -msgid "Run 'nice' as cron job (default: enabled)" -msgstr "Run 'nice' as cron job (default: enabled)" - -#: ../../kde4/settingsdialog.py:611 ../../gnome/settingsdialog.glade:2150 -msgid "Run 'ionice' as cron job (default: enabled)" -msgstr "Run 'ionice' as cron job (default: enabled)" - -#: ../../kde4/settingsdialog.py:614 ../../gnome/settingsdialog.glade:2167 -msgid "Run 'ionice' when taking a manual snapshot (default: disabled)" -msgstr "Run 'ionice' when taking a manual snapshot (default: disabled)" - -#: ../../kde4/settingsdialog.py:617 ../../gnome/settingsdialog.glade:2184 -msgid "Run 'nice' on remote host (default: disabled)" -msgstr "Run 'nice' on remote host (default: disabled)" - -#: ../../kde4/settingsdialog.py:620 ../../gnome/settingsdialog.glade:2201 -msgid "Run 'ionice' on remote host (default: disabled)" -msgstr "Run 'ionice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:678 +msgid "Run 'nice':" +msgstr "" + +#: ../../qt4/settingsdialog.py:684 ../../qt4/settingsdialog.py:696 +msgid "as cron job" +msgstr "" + +#: ../../qt4/settingsdialog.py:687 ../../qt4/settingsdialog.py:702 +#: ../../qt4/settingsdialog.py:716 +msgid "on remote host" +msgstr "" + +#: ../../qt4/settingsdialog.py:690 +msgid "Run 'ionice':" +msgstr "" + +#: ../../qt4/settingsdialog.py:699 +msgid "when taking a manual snapshot" +msgstr "" -#: ../../kde4/settingsdialog.py:626 ../../gnome/settingsdialog.glade:2224 +#: ../../qt4/settingsdialog.py:706 +msgid "Run 'rsync' with 'nocache':" +msgstr "" + +#: ../../qt4/settingsdialog.py:712 +msgid "on local machine" +msgstr "" + +#: ../../qt4/settingsdialog.py:719 +msgid "Redirect stdout to /dev/null in cronjobs." +msgstr "" + +#: ../../qt4/settingsdialog.py:725 +msgid "Redirect stderr to /dev/null in cronjobs." +msgstr "" + +#: ../../qt4/settingsdialog.py:734 msgid "Limit rsync bandwidth usage: " msgstr "Limit rsync bandwidth usage: " -#: ../../kde4/settingsdialog.py:629 ../../gnome/settingsdialog.glade:2259 +#: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr " KB/sec" -#: ../../kde4/settingsdialog.py:634 ../../gnome/settingsdialog.glade:2280 +#: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "Preserve ACL" -#: ../../kde4/settingsdialog.py:637 ../../gnome/settingsdialog.glade:2297 +#: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "Preserve extended attributes (xattr)" -#: ../../kde4/settingsdialog.py:640 ../../gnome/settingsdialog.glade:2314 +#: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute links)" msgstr "Copy unsafe links (works only with absolute links)" -#: ../../kde4/settingsdialog.py:643 ../../gnome/settingsdialog.glade:2331 -msgid "Copy links (dereference symbolic links)" -msgstr "Copy links (dereference symbolic links)" +#: ../../qt4/settingsdialog.py:834 +msgid "Paste additional options to rsync" +msgstr "" -#: ../../kde4/snapshotsdialog.py:46 ../../kde4/snapshotsdialog.py:173 -#: ../../gnome/snapshotsdialog.glade:385 -msgid "Diff Options" -msgstr "Diff Options" +#: ../../qt4/settingsdialog.py:837 +msgid "" +"Options must be quoted e.g. --exclude-from=\"/path/to/my exclude file\"." +msgstr "" -#: ../../kde4/snapshotsdialog.py:56 ../../gnome/snapshotsdialog.glade:314 -msgid "Command:" -msgstr "Command:" +#: ../../qt4/settingsdialog.py:847 +msgid "Add prefix to SSH commands" +msgstr "" -#: ../../kde4/snapshotsdialog.py:60 ../../gnome/snapshotsdialog.glade:322 -msgid "Parameters:" -msgstr "Parameters:" +#: ../../qt4/settingsdialog.py:850 +#, python-format +msgid "" +"Prefix to run before every command on remote host.\n" +"Variables need to be escaped with \\$FOO.\n" +"This doesn't touch rsync. So to add a prefix\n" +"for rsync use \"%(cb_rsync_options)s\" with\n" +"%(rsync_options_value)s\n" +"\n" +"%(default)s: %(def_value)s" +msgstr "" -#: ../../kde4/snapshotsdialog.py:64 ../../gnome/snapshotsdialog.glade:334 -msgid "Use %1 and %2 for path parameters" -msgstr "Use %1 and %2 for path parameters" +#: ../../qt4/settingsdialog.py:858 ../../qt4/settingsdialog.py:1691 +msgid "default" +msgstr "" -#: ../../kde4/snapshotsdialog.py:123 ../../gnome/snapshotsdialog.glade:184 -#: ../../gnome/snapshotsdialog.glade:186 -msgid "Delete" -msgstr "Delete" +#: ../../qt4/settingsdialog.py:875 +msgid "Restore Config" +msgstr "" -#: ../../kde4/snapshotsdialog.py:128 ../../gnome/snapshotsdialog.glade:199 -#: ../../gnome/snapshotsdialog.glade:201 -msgid "Select All" -msgstr "Select All" +#: ../../qt4/settingsdialog.py:891 +msgid "" +"Full system backup can only create a snapshot to be restored to the same " +"physical disk(s) with the same disk partitioning as from the source; " +"restoring to new physical disks or the same disks with different " +"partitioning will yield a potentially broken and unusable system.\n" +"\n" +"Full system backup will override some settings that may have been " +"customized. Continue?" +msgstr "" -#: ../../kde4/snapshotsdialog.py:132 ../../gnome/snapshotsdialog.glade:88 -msgid "List only different snapshots" -msgstr "List only different snapshots" +#: ../../qt4/settingsdialog.py:922 +msgid "New profile" +msgstr "New profile" -#: ../../kde4/snapshotsdialog.py:139 ../../gnome/snapshotsdialog.glade:110 -msgid "List only equal snapshots to: " -msgstr "List only equal snapshots to: " +#: ../../qt4/settingsdialog.py:938 +msgid "Rename profile" +msgstr "Rename profile" -#: ../../kde4/snapshotsdialog.py:149 ../../gnome/snapshotsdialog.glade:146 -msgid "Deep check (more accurate, but slow)" -msgstr "Deep check (more accurate, but slow)" +#: ../../qt4/settingsdialog.py:952 +#, python-format +msgid "Are you sure you want to delete the profile \"%s\" ?" +msgstr "Are you sure you want to delete the profile \"%s\"?" -#: ../../kde4/snapshotsdialog.py:174 -msgid "Go To" -msgstr "Go To" +#: ../../qt4/settingsdialog.py:1191 +msgid "" +"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " +"*/3 for periodic backups every 3 hours" +msgstr "" +"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " +"*/3 for periodic backups every 3 hours" -#: ../../gnome/logviewdialog.glade:9 -msgid "Log View" -msgstr "Log View" - -#: ../../gnome/logviewdialog.glade:179 -msgid "scroll down automatic" -msgstr "scroll down automatic" - -#: ../../gnome/mainwindow.glade:7 -msgid "Back In Time" -msgstr "Back In Time" - -#: ../../gnome/mainwindow.glade:45 -msgid "Backup Now" -msgstr "Backup Now" +#: ../../qt4/settingsdialog.py:1489 +msgid "Exclude pattern" +msgstr "Exclude pattern" -#: ../../gnome/mainwindow.glade:171 -msgid "Shutdown" -msgstr "Shutdown" +#: ../../qt4/settingsdialog.py:1502 +msgid "Exclude file" +msgstr "Exclude file" -#: ../../gnome/mainwindow.glade:287 -msgid "Parent folder" -msgstr "Parent folder" +#: ../../qt4/settingsdialog.py:1506 +msgid "Exclude folder" +msgstr "Exclude folder" -#: ../../gnome/mainwindow.glade:327 -msgid "Hidden files" -msgstr "Hidden files" +#: ../../qt4/settingsdialog.py:1525 +msgid "Include file" +msgstr "Include file" -#: ../../gnome/mainwindow.glade:451 +#: ../../qt4/settingsdialog.py:1533 ../../qt4/settingsdialog.py:1553 +#, python-format msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +"\"%s\" is a symlink. The linked target will not be backed up until you " +"include it, too.\n" +"Would you like to include the symlinks target instead?" msgstr "" -"This folder doesn't exist\n" -"in the current snapshot!" -#: ../../gnome/settingsdialog.glade:287 -msgid "Where to save snapshots" -msgstr "Where to save snapshots" +#: ../../qt4/settingsdialog.py:1545 +msgid "Include folder" +msgstr "Include folder" -#: ../../gnome/settingsdialog.glade:483 -msgid "Private key:" -msgstr "Private key:" +#: ../../qt4/settingsdialog.py:1572 +msgid "Are you sure you want to change snapshots folder ?" +msgstr "Are you sure you want to change snapshots folder?" -#: ../../gnome/settingsdialog.glade:534 -msgid "Advanced SSH Settings" -msgstr "Advanced SSH Settings" +#: ../../qt4/settingsdialog.py:1688 +msgid "enabled" +msgstr "" -#: ../../gnome/settingsdialog.glade:552 -msgid "SSH Settings" -msgstr "SSH Settings" +#: ../../qt4/settingsdialog.py:1690 +msgid "disabled" +msgstr "" -#: ../../gnome/settingsdialog.glade:815 -msgid "Password" -msgstr "Password" +#: ../../qt4/settingsdialog.py:1715 +msgid "Restore Settings" +msgstr "" -#: ../../gnome/settingsdialog.glade:930 -msgid "Profile Id:" -msgstr "Profile ID:" +#: ../../qt4/settingsdialog.py:1732 +msgid " and add your user to group 'fuse'" +msgstr "" -#: ../../gnome/settingsdialog.glade:1115 +#: ../../qt4/settingsdialog.py:1736 +#, python-format msgid "" -"hours seperate by comma ( e.g. 8,12,18,23) or */3 for periodic backups every " -"3 hours (cron style)" +"Please navigate to the snapshot from which you want to restore %(appName)s's " +"configuration. The path may look like: \n" +"%(samplePath)s\n" +"\n" +"If your snapshots are on a remote drive or if they are encrypted you need to " +"manually mount them first. If you use Mode SSH you also may need to set up " +"public key login to the remote host%(addFuse)s.\n" +"Take a look at 'man backintime'." msgstr "" -"hours seperate by comma ( e.g. 8,12,18,23) or */3 for periodic backups every " -"3 hours (cron style)" -#: ../../gnome/settingsdialog.glade:1163 -msgid "Schedule" -msgstr "Schedule" +#: ../../qt4/settingsdialog.py:1794 ../../qt4/settingsdialog.py:1854 +msgid "No config found" +msgstr "" + +#: ../../qt4/snapshotsdialog.py:49 ../../qt4/snapshotsdialog.py:173 +msgid "Diff Options" +msgstr "Diff Options" + +#: ../../qt4/snapshotsdialog.py:56 +msgid "Command:" +msgstr "Command:" + +#: ../../qt4/snapshotsdialog.py:60 +msgid "Parameters:" +msgstr "Parameters:" + +#: ../../qt4/snapshotsdialog.py:64 +msgid "Use %1 and %2 for path parameters" +msgstr "Use %1 and %2 for path parameters" + +#: ../../qt4/snapshotsdialog.py:106 +msgid "List only different snapshots" +msgstr "List only different snapshots" + +#: ../../qt4/snapshotsdialog.py:113 +msgid "List only equal snapshots to: " +msgstr "List only equal snapshots to: " + +#: ../../qt4/snapshotsdialog.py:123 +msgid "Deep check (more accurate, but slow)" +msgstr "Deep check (more accurate, but slow)" + +#: ../../qt4/snapshotsdialog.py:144 +msgid "Delete" +msgstr "Delete" + +#: ../../qt4/snapshotsdialog.py:148 +msgid "Select All" +msgstr "Select All" -#: ../../gnome/settingsdialog.glade:1363 -msgid "Highly recommended:" -msgstr "Highly recommended:" +#: ../../qt4/snapshotsdialog.py:161 +msgid "Diff" +msgstr "Diff" -#: ../../gnome/settingsdialog.glade:1377 -msgid "label" -msgstr "label" +#: ../../qt4/snapshotsdialog.py:172 +msgid "Go To" +msgstr "Go To" -#: ../../gnome/settingsdialog.glade:1755 -msgid "week(s)" -msgstr "week(s)" +#: ../../qt4/snapshotsdialog.py:326 +msgid "You can't compare a snapshot to itself" +msgstr "You can't compare a snapshot to itself" -#: ../../gnome/settingsdialog.glade:2069 -msgid "Log level:" -msgstr "Log level:" +#: ../../qt4/snapshotsdialog.py:333 +#, python-format +msgid "Command not found: %s" +msgstr "Command not found: %s" -#: ../../gnome/settingsdialog.glade:2121 +#: ../../qt4/snapshotsdialog.py:354 +#, python-format msgid "" -"Change these options only if you really know what you are doing !" +"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" msgstr "" -"Change these options only if you really know what you are doing!" +"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" -#: ../../gnome/snapshotsdialog.glade:263 -msgid "Diff with" -msgstr "Diff with" +#: ../../qt4/snapshotsdialog.py:357 +#, python-format +msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +msgstr "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" -#: ../../gnome/textinputdialog.glade:7 -msgid "Pattern" -msgstr "Pattern" +#: ../../qt4/snapshotsdialog.py:359 +msgid "WARNING: This can not be revoked!" +msgstr "WARNING: This can not be revoked!" -#: ../../gnome/textinputdialog.glade:70 -msgid "Text" -msgstr "Text" +#: ../../qt4/snapshotsdialog.py:374 +#, python-format +msgid "Exclude \"%s\" from future snapshots?" +msgstr "Exclude \"%s\" from future snapshots?" diff -Nru backintime-1.0.36/common/po/eo.po backintime-1.1.12/common/po/eo.po --- backintime-1.0.36/common/po/eo.po 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/po/eo.po 2016-01-11 18:07:58.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2013-11-09 22:34+0100\n" +"POT-Creation-Date: 2015-12-19 00:47+0100\n" "PO-Revision-Date: 2012-04-14 10:04+0000\n" "Last-Translator: Michael Moroni \n" "Language-Team: Esperanto \n" @@ -15,254 +15,295 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2014-08-06 10:20+0000\n" -"X-Generator: Launchpad (build 17147)\n" +"X-Launchpad-Export-Date: 2016-01-11 17:52+0000\n" +"X-Generator: Launchpad (build 17881)\n" -#: ../../common/config.py:72 +#: ../../common/configfile.py:60 +#, python-format +msgid "Failed to save config: %s" +msgstr "" + +#: ../../common/configfile.py:78 +#, python-format +msgid "Failed to load config: %s" +msgstr "" + +#: ../../common/configfile.py:352 ../../common/configfile.py:414 +#, python-format +msgid "Profile \"%s\" already exists !" +msgstr "Profilo \"%s\" jam ekzistas!" + +#: ../../common/configfile.py:383 +msgid "You can't remove the last profile !" +msgstr "Vi ne povas forigi la lastan profilon!" + +#: ../../common/config.py:76 msgid "Disabled" msgstr "Malŝaltita" -#: ../../common/config.py:73 +#: ../../common/config.py:77 msgid "At every boot/reboot" msgstr "Je ĉiu startigo/restartigo" -#: ../../common/config.py:74 +#: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Je ĉiuj 5 minutoj" -#: ../../common/config.py:75 +#: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Je ĉiuj 10 minutoj" -#: ../../common/config.py:76 +#: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "" -#: ../../common/config.py:77 +#: ../../common/config.py:81 msgid "Every hour" msgstr "" -#: ../../common/config.py:78 +#: ../../common/config.py:82 msgid "Every 2 hours" msgstr "" -#: ../../common/config.py:79 +#: ../../common/config.py:83 msgid "Every 4 hours" msgstr "" -#: ../../common/config.py:80 +#: ../../common/config.py:84 msgid "Every 6 hours" msgstr "" -#: ../../common/config.py:81 +#: ../../common/config.py:85 msgid "Every 12 hours" msgstr "" -#: ../../common/config.py:82 +#: ../../common/config.py:86 msgid "Custom Hours" msgstr "" -#: ../../common/config.py:83 +#: ../../common/config.py:87 msgid "Every Day" msgstr "Ĉiutage" -#: ../../common/config.py:84 -msgid "Daily (anacron)" +#: ../../common/config.py:88 +msgid "Repeatedly (anacron)" msgstr "" -#: ../../common/config.py:85 +#: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "" -#: ../../common/config.py:86 +#: ../../common/config.py:90 msgid "Every Week" msgstr "Ĉiusemajne" -#: ../../common/config.py:87 +#: ../../common/config.py:91 msgid "Every Month" msgstr "Ĉiumonate" -#: ../../common/config.py:91 +#: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Tago(j)" -#: ../../common/config.py:92 +#: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Semajno(j)" -#: ../../common/config.py:93 +#: ../../common/config.py:97 msgid "Year(s)" msgstr "Jaro(j)" -#: ../../common/config.py:100 +#: ../../common/config.py:101 +msgid "Hour(s)" +msgstr "" + +#: ../../common/config.py:104 +msgid "Month(s)" +msgstr "" + +#: ../../common/config.py:126 ../../qt4/settingsdialog.py:551 msgid " EXPERIMENTAL!" msgstr "" -#: ../../common/config.py:103 +#: ../../common/config.py:129 msgid "Local" msgstr "" -#: ../../common/config.py:104 +#: ../../common/config.py:130 msgid "SSH" msgstr "" -#: ../../common/config.py:104 ../../common/config.py:106 -#: ../../gnome/settingsdialog.py:475 ../../kde4/settingsdialog.py:1325 +#: ../../common/config.py:130 ../../common/config.py:132 +#: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "" -#: ../../common/config.py:105 +#: ../../common/config.py:131 msgid "Local encrypted" msgstr "" -#: ../../common/config.py:105 ../../common/config.py:106 +#: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "" -#: ../../common/config.py:106 +#: ../../common/config.py:132 msgid "SSH encrypted" msgstr "" -#: ../../common/config.py:112 +#: ../../common/config.py:135 msgid "Default" msgstr "" -#: ../../common/config.py:113 +#: ../../common/config.py:136 msgid "AES128-CTR" msgstr "" -#: ../../common/config.py:114 +#: ../../common/config.py:137 msgid "AES192-CTR" msgstr "" -#: ../../common/config.py:115 +#: ../../common/config.py:138 msgid "AES256-CTR" msgstr "" -#: ../../common/config.py:116 +#: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "" -#: ../../common/config.py:117 +#: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "" -#: ../../common/config.py:118 +#: ../../common/config.py:141 msgid "AES128-CBC" msgstr "" -#: ../../common/config.py:119 +#: ../../common/config.py:142 msgid "3DES-CBC" msgstr "" -#: ../../common/config.py:120 +#: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "" -#: ../../common/config.py:121 +#: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "" -#: ../../common/config.py:122 +#: ../../common/config.py:145 msgid "AES192-CBC" msgstr "" -#: ../../common/config.py:123 +#: ../../common/config.py:146 msgid "AES256-CBC" msgstr "" -#: ../../common/config.py:124 +#: ../../common/config.py:147 msgid "ARCFOUR" msgstr "" -#: ../../common/config.py:129 +#: ../../common/config.py:153 msgid "Main profile" msgstr "Ĉefa profilo" -#: ../../common/config.py:256 ../../common/config.py:275 -#: ../../common/config.py:286 ../../common/config.py:291 +#: ../../common/config.py:289 ../../common/config.py:296 +#: ../../common/config.py:307 ../../common/config.py:312 +#: ../../qt4/qt4systrayicon.py:61 #, python-format msgid "Profile: \"%s\"" msgstr "Profilo: \"%s\"" -#: ../../common/config.py:256 +#: ../../common/config.py:289 msgid "Snapshots folder is not valid !" msgstr "" -#: ../../common/config.py:275 +#: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "Vi devas almenaŭ elekti unu dosieron por sekurkopio!" -#: ../../common/config.py:286 +#: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "Vi ne povas inkluzivi sekurkopian dosieron!" -#: ../../common/config.py:291 +#: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "" -#: ../../common/config.py:361 +#: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s ne estas dosierujo!" -#: ../../common/config.py:376 ../../common/config.py:389 +#: ../../common/config.py:380 +msgid "Host/User/Profile-ID must not be empty!" +msgstr "" + +#: ../../common/config.py:388 ../../common/config.py:420 #, python-format msgid "" "Can't write to: %s\n" "Are you sure you have write access ?" msgstr "" -#: ../../common/config.py:1286 +#: ../../common/config.py:400 +#, python-format msgid "" -"Can't find crontab.\n" -"Are you sure cron is installed ?\n" -"If not you should disable all automatic backups." +"Destination filesystem for '%(path)s' is formatted with FAT which doesn't " +"support hard-links. Please use a native Linux filesystem." msgstr "" -#: ../../common/config.py:1338 +#: ../../common/config.py:405 #, python-format -msgid "Schedule udev doesn't work with mode %s" +msgid "" +"Destination filsystem for '%(path)s' is a SMB mounted share. Please make " +"sure the remote SMB server supports symlinks or activate '%(copyLinks)s' in " +"'%(expertOptions)s'." msgstr "" -#: ../../common/config.py:1342 -#, python-format -msgid "Couldn't find UUID for \"%s\"" +#: ../../common/config.py:408 ../../qt4/settingsdialog.py:815 +msgid "Copy links (dereference symbolic links)" msgstr "" -#: ../../common/config.py:1379 -msgid "Failed to remove udev rules" +#: ../../common/config.py:409 ../../qt4/settingsdialog.py:669 +msgid "Expert Options" msgstr "" -#: ../../common/config.py:1385 -msgid "Failed to create udev rules" +#: ../../common/config.py:411 +#, python-format +msgid "" +"Destination filesystem for '%(path)s is a sshfs mounted share. sshfs doesn't " +"support hard-links. Please use mode 'SSH' instead." msgstr "" -#: ../../common/config.py:1420 +#: ../../common/config.py:1407 msgid "" -"Can't find anacron.\n" -"Are you sure anacron is installed ?\n" -"If not you should disable daily anacron backups." +"Can't find crontab.\n" +"Are you sure cron is installed ?\n" +"If not you should disable all automatic backups." msgstr "" -#: ../../common/config.py:1439 -msgid "Please provide your sudo password to install the udev rule." +#: ../../common/config.py:1411 +msgid "Failed to write new crontab." msgstr "" -#: ../../common/config.py:1445 -msgid "Please provide your sudo password to remove unused udev rules." +#: ../../common/config.py:1505 +#, python-format +msgid "" +"Could not install Udev rule for profile %(profile_id)s. DBus Service " +"'%(dbus_interface)s' wasn't available" msgstr "" -#: ../../common/configfile.py:253 ../../common/configfile.py:315 +#: ../../common/config.py:1517 #, python-format -msgid "Profile \"%s\" already exists !" -msgstr "Profilo \"%s\" jam ekzistas!" +msgid "Schedule udev doesn't work with mode %s" +msgstr "" -#: ../../common/configfile.py:284 -msgid "You can't remove the last profile !" -msgstr "Vi ne povas forigi la lastan profilon!" +#: ../../common/config.py:1526 +#, python-format +msgid "Couldn't find UUID for \"%s\"" +msgstr "" -#: ../../common/encfstools.py:95 +#: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" @@ -270,38 +311,38 @@ "%(error)s" msgstr "" -#: ../../common/encfstools.py:105 +#: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "" -#: ../../common/encfstools.py:149 +#: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "" -#: ../../common/encfstools.py:153 +#: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" -#: ../../common/encfstools.py:154 +#: ../../common/encfstools.py:171 msgid "Cancel" msgstr "" -#: ../../common/encfstools.py:157 +#: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "" -#: ../../common/encfstools.py:161 +#: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "" -#: ../../common/encfstools.py:166 +#: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" -#: ../../common/encfstools.py:174 ../../common/sshtools.py:207 +#: ../../common/encfstools.py:196 ../../common/sshtools.py:262 #, python-format msgid "" "%(user)s is not member of group 'fuse'.\n" @@ -309,70 +350,73 @@ "Look at 'man backintime' for further instructions." msgstr "" -#: ../../common/encfstools.py:189 +#: ../../common/encfstools.py:211 msgid "" "encfs version 1.7.2 and before has a bug with option --reverse. Please " "update encfs" msgstr "" -#: ../../common/encfstools.py:453 ../../common/encfstools.py:480 -#: ../../common/snapshots.py:982 ../../common/snapshots.py:1288 -#: ../../kde4/app.py:82 ../../gnome/mainwindow.glade:43 +#: ../../common/encfstools.py:512 ../../common/snapshots.py:1131 +#: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "" -#: ../../common/mount.py:195 +#: ../../common/mount.py:204 #, python-format msgid "" "Hash collision occurred in hash_id %s. Incrementing global value " "hash_collision and try again." msgstr "" -#: ../../common/mount.py:246 +#: ../../common/mount.py:259 #, python-format msgid "mountpoint %s not empty." msgstr "" -#: ../../common/mount.py:286 +#: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" -#: ../../common/password.py:425 +#: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" -#: ../../common/snapshots.py:171 ../../gnome/app.py:1127 -#: ../../kde4/app.py:1014 +#: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Nun" -#: ../../common/snapshots.py:182 ../../gnome/gnometools.py:37 +#: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "" -#: ../../common/snapshots.py:282 +#: ../../common/snapshots.py:344 msgid "" "### This log has been decoded with automatic search pattern\n" "### If some paths are not decoded you can manually decode them with:\n" msgstr "" -#: ../../common/snapshots.py:465 +#: ../../common/snapshots.py:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "" -#: ../../common/snapshots.py:564 +#: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "" -#: ../../common/snapshots.py:739 +#: ../../common/snapshots.py:752 ../../qt4/app.py:377 ../../qt4/app.py:675 +#: ../../qt4/app.py:692 ../../qt4/qt4systrayicon.py:65 +msgid "Done" +msgstr "Farite" + +#: ../../common/snapshots.py:860 msgid "" "Back In Time changed its backup format.\n" "\n" "Your old snapshots can be moved according to this new format. OK?" msgstr "" -#: ../../common/snapshots.py:749 +#: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" @@ -383,13 +427,13 @@ "(The program will still be able to discriminate between them)" msgstr "" -#: ../../common/snapshots.py:752 +#: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" msgstr "" -#: ../../common/snapshots.py:803 +#: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" @@ -402,7 +446,7 @@ "cannot continue taking snapshots" msgstr "" -#: ../../common/snapshots.py:812 +#: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" @@ -412,14 +456,14 @@ "if you are done restart Back In Time to proceed" msgstr "" -#: ../../common/snapshots.py:825 +#: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" msgstr "" -#: ../../common/snapshots.py:830 +#: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" @@ -431,172 +475,183 @@ "If you do not, you will be asked again next time you start Back In Time." msgstr "" -#: ../../common/snapshots.py:839 +#: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "" -#: ../../common/snapshots.py:841 +#: ../../common/snapshots.py:953 msgid "" "Back In Time still cannot continue taking new snapshots.\n" "Restart Back In Time to see the questions again" msgstr "" -#: ../../common/snapshots.py:913 +#: ../../common/snapshots.py:972 +msgid "Deferring backup while on battery" +msgstr "" + +#: ../../common/snapshots.py:1035 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it." msgstr "" -#: ../../common/snapshots.py:915 +#: ../../common/snapshots.py:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "" msgstr[1] "" -#: ../../common/snapshots.py:941 +#: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "" -#: ../../common/snapshots.py:950 +#: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "" -#: ../../common/snapshots.py:1088 +#: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "" -#: ../../common/snapshots.py:1107 +#: ../../common/snapshots.py:1217 msgid "..." msgstr "" -#: ../../common/snapshots.py:1134 +#: ../../common/snapshots.py:1238 +#, python-format +msgid "Found leftover '%s' which can be continued." +msgstr "" + +#: ../../common/snapshots.py:1250 +#, python-format +msgid "Remove leftover '%s' folder from last run" +msgstr "" + +#: ../../common/snapshots.py:1263 #, python-format msgid "Can't remove folder: %s" msgstr "Ne povas forigi dosieron: %s" -#: ../../common/snapshots.py:1219 +#: ../../common/snapshots.py:1340 #, python-format msgid "Compare with snapshot %s" msgstr "" -#: ../../common/snapshots.py:1248 +#: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "" -#: ../../common/snapshots.py:1335 +#: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "" -#: ../../common/snapshots.py:1341 +#: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "" -#: ../../common/snapshots.py:1442 +#: ../../common/snapshots.py:1470 +msgid "Save permission over ssh failed. Retry normal method" +msgstr "" + +#: ../../common/snapshots.py:1521 #, python-format msgid "Can't rename %(new_path)s to %(path)s" msgstr "" -#: ../../common/snapshots.py:1562 -msgid "Remove old snapshots" +#: ../../common/snapshots.py:1695 ../../common/snapshots.py:1728 +#: ../../qt4/settingsdialog.py:542 +msgid "Smart remove" msgstr "" -#: ../../common/snapshots.py:1586 ../../kde4/settingsdialog.py:501 -#: ../../gnome/settingsdialog.glade:1660 -msgid "Smart remove" +#: ../../common/snapshots.py:1704 +msgid "Remove old snapshots" msgstr "" -#: ../../common/snapshots.py:1591 +#: ../../common/snapshots.py:1733 msgid "Try to keep min free space" msgstr "" -#: ../../common/snapshots.py:1621 +#: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" -#: ../../common/sshtools.py:106 +#: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "" -#: ../../common/sshtools.py:113 +#: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "" -#: ../../common/sshtools.py:187 -#, python-format -msgid "" -"Failed to unlock SSH private key:\n" -"Error: %s" -msgstr "" - -#: ../../common/sshtools.py:194 +#: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" -#: ../../common/sshtools.py:199 +#: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" -#: ../../common/sshtools.py:217 +#: ../../common/sshtools.py:278 #, python-format msgid "" "Password-less authentication for %(user)s@%(host)s failed. Look at 'man " "backintime' for further instructions." msgstr "" -#: ../../common/sshtools.py:229 +#: ../../common/sshtools.py:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" -#: ../../common/sshtools.py:254 +#: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" -#: ../../common/sshtools.py:274 +#: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" -#: ../../common/sshtools.py:276 +#: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:278 +#: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:280 +#: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" -#: ../../common/sshtools.py:302 +#: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" -#: ../../common/sshtools.py:325 ../../common/sshtools.py:383 +#: ../../common/sshtools.py:423 ../../common/sshtools.py:553 #, python-format msgid "" "Remote host %(host)s doesn't support '%(command)s':\n" @@ -604,7 +659,7 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:387 +#: ../../common/sshtools.py:556 #, python-format msgid "" "Check commands on host %(host)s returned unknown error:\n" @@ -612,817 +667,937 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:400 +#: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "" -#: ../../gnome/app.py:185 ../../gnome/app.py:594 ../../gnome/app.py:608 -#: ../../kde4/app.py:299 ../../kde4/app.py:570 ../../kde4/app.py:587 -msgid "Done" -msgstr "Farite" +#: ../../qt4/app.py:81 +msgid "Refresh snapshots list" +msgstr "" + +#: ../../qt4/app.py:85 ../../qt4/app.py:890 +msgid "Snapshot Name" +msgstr "" + +#: ../../qt4/app.py:88 +msgid "Remove Snapshot" +msgstr "" -#: ../../gnome/app.py:189 ../../kde4/app.py:143 ../../kde4/app.py:159 -#: ../../gnome/mainwindow.glade:225 +#: ../../qt4/app.py:91 +msgid "View Snapshot Log" +msgstr "" + +#: ../../qt4/app.py:94 +msgid "View Last Log" +msgstr "" + +#: ../../qt4/app.py:99 ../../qt4/settingsdialog.py:51 +msgid "Settings" +msgstr "Agordoj" + +#: ../../qt4/app.py:104 +msgid "Shutdown" +msgstr "" + +#: ../../qt4/app.py:105 +msgid "Shutdown system after snapshot has finished." +msgstr "" + +#: ../../qt4/app.py:111 +msgid "Exit" +msgstr "Eliri" + +#: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 msgid "Help" msgstr "Helpo" -#: ../../gnome/app.py:191 ../../kde4/app.py:146 -#: ../../gnome/mainwindow.glade:223 +#: ../../qt4/app.py:122 +msgid "Config File Help" +msgstr "" + +#: ../../qt4/app.py:125 msgid "Website" msgstr "Retejo" -#: ../../gnome/app.py:192 ../../kde4/app.py:148 +#: ../../qt4/app.py:127 ../../qt4/app.py:982 +msgid "Changelog" +msgstr "" + +#: ../../qt4/app.py:129 msgid "FAQ" msgstr "" -#: ../../gnome/app.py:193 ../../kde4/app.py:150 +#: ../../qt4/app.py:131 msgid "Ask a question" msgstr "" -#: ../../gnome/app.py:194 ../../kde4/app.py:152 +#: ../../qt4/app.py:133 msgid "Report a bug" msgstr "" -#: ../../gnome/app.py:196 ../../kde4/app.py:155 +#: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "Pri" -#: ../../gnome/app.py:202 ../../gnome/app.py:887 -#: ../../gnome/restoredialog.py:84 ../../gnome/snapshotsdialog.py:83 -#: ../../gnome/snapshotsdialog.py:244 ../../kde4/app.py:206 -#: ../../kde4/app.py:216 ../../kde4/restoredialog.py:68 -#: ../../kde4/snapshotsdialog.py:111 ../../kde4/snapshotsdialog.py:117 -#: ../../gnome/mainwindow.glade:350 ../../gnome/mainwindow.glade:352 -#: ../../gnome/snapshotsdialog.glade:169 ../../gnome/snapshotsdialog.glade:171 +#: ../../qt4/app.py:163 +msgid "Up" +msgstr "Supren" + +#: ../../qt4/app.py:174 ../../qt4/settingsdialog.py:1776 +msgid "Show hidden files" +msgstr "Montri kaŝitajn dosierojn" + +#: ../../qt4/app.py:184 ../../qt4/app.py:199 ../../qt4/app.py:233 +#: ../../qt4/restoredialog.py:62 ../../qt4/settingsdialog.py:1818 +#: ../../qt4/snapshotsdialog.py:134 ../../qt4/snapshotsdialog.py:139 msgid "Restore" msgstr "Restaŭri" -#: ../../gnome/app.py:203 ../../gnome/app.py:888 ../../gnome/gnometools.py:67 -#: ../../gnome/snapshotsdialog.py:84 ../../gnome/snapshotsdialog.py:245 -#: ../../kde4/app.py:208 ../../kde4/restoredialog.py:42 -#: ../../kde4/snapshotsdialog.py:113 +#: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 +#: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "" -#: ../../gnome/app.py:205 ../../gnome/app.py:896 ../../gnome/app.py:1146 -#: ../../kde4/app.py:1041 -#, python-format -msgid "Restore '%s'" +#: ../../qt4/app.py:194 +msgid "Restore and delete new files" msgstr "" -#: ../../gnome/app.py:207 ../../gnome/app.py:897 ../../gnome/app.py:1147 -#: ../../kde4/app.py:1042 +#: ../../qt4/app.py:201 #, python-format -msgid "Restore '%s' to ..." +msgid "" +"Restore selected file or folder.\n" +"If this button is grayed out this is most likely because \"%(now)s\" is " +"selected in left hand snapshots list." msgstr "" -#: ../../gnome/app.py:226 ../../kde4/app.py:235 -msgid "Shortcuts" -msgstr "Klavkombinoj" - -#: ../../gnome/app.py:249 -msgid "Name" -msgstr "Nomo" - -#: ../../gnome/app.py:260 -msgid "Size" -msgstr "Grandeco" - -#: ../../gnome/app.py:267 -msgid "Date" -msgstr "Dato" - -#: ../../gnome/app.py:286 ../../gnome/app.py:883 -#: ../../gnome/snapshotsdialog.py:116 ../../kde4/app.py:171 -#: ../../kde4/app.py:221 ../../kde4/snapshotsdialog.py:91 -#: ../../gnome/mainwindow.glade:366 ../../gnome/mainwindow.glade:368 -#: ../../gnome/snapshotsdialog.glade:8 +#: ../../qt4/app.py:206 ../../qt4/logviewdialog.py:67 +#: ../../qt4/qt4tools.py:160 ../../qt4/snapshotsdialog.py:96 msgid "Snapshots" msgstr "" -#: ../../gnome/app.py:348 ../../kde4/app.py:362 -msgid "" -"Can't find snapshots folder.\n" -"If it is on a removable drive please plug it and then press OK" +#: ../../qt4/app.py:213 +msgid "Snapshot" msgstr "" -#: ../../gnome/app.py:611 ../../kde4/app.py:590 -msgid "Done, no backup needed" -msgstr "" - -#: ../../gnome/app.py:619 ../../kde4/app.py:598 -msgid "Working:" +#: ../../qt4/app.py:224 +msgid "View" msgstr "" -#: ../../gnome/app.py:623 ../../kde4/app.py:602 -msgid "Error:" -msgstr "Eraro:" +#: ../../qt4/app.py:277 +msgid "Shortcuts" +msgstr "Klavkombinoj" -#: ../../gnome/app.py:636 ../../kde4/app.py:649 -msgid "Global" +#: ../../qt4/app.py:295 +msgid "" +"This folder doesn't exist\n" +"in the current selected snapshot!" msgstr "" -#: ../../gnome/app.py:637 ../../kde4/app.py:650 -msgid "Root" +#: ../../qt4/app.py:359 +msgid "Add to Include" msgstr "" -#: ../../gnome/app.py:638 ../../kde4/app.py:651 -msgid "Home" -msgstr "Hejmo" - -#: ../../gnome/app.py:662 -msgid "Bookmarks" -msgstr "Legosignoj" - -#: ../../gnome/app.py:675 ../../kde4/app.py:662 -msgid "Backup folders" +#: ../../qt4/app.py:360 +msgid "Add to Exclude" msgstr "" -#: ../../gnome/app.py:701 ../../kde4/app.py:734 -msgid "Today" -msgstr "Hodiaŭ" - -#: ../../gnome/app.py:705 ../../kde4/app.py:738 -msgid "Yesterday" -msgstr "Hieraŭ" - -#: ../../gnome/app.py:709 ../../kde4/app.py:742 -msgid "This week" -msgstr "Nuna semajno" +#: ../../qt4/app.py:416 +#, python-format +msgid "" +"%(appName)s is not configured. Would you like to restore a previous " +"configuration?" +msgstr "" -#: ../../gnome/app.py:713 ../../kde4/app.py:746 -msgid "Last week" -msgstr "Lasta semajno" +#: ../../qt4/app.py:440 +msgid "" +"Can't find snapshots folder.\n" +"If it is on a removable drive please plug it and then press OK" +msgstr "" -#: ../../gnome/app.py:764 ../../kde4/app.py:398 +#: ../../qt4/app.py:473 msgid "" "If you close this window Back In Time will not be able to shutdown your " "system when the snapshot has finished.\n" "Do you really want to close?" msgstr "" -#: ../../gnome/app.py:881 ../../gnome/snapshotsdialog.py:238 -msgid "Open" -msgstr "Malfermi" - -#: ../../gnome/app.py:1056 ../../kde4/app.py:90 ../../kde4/app.py:805 -#: ../../gnome/mainwindow.glade:73 ../../gnome/mainwindow.glade:75 -msgid "Snapshot Name" +#: ../../qt4/app.py:667 ../../qt4/app.py:703 +msgid "Working:" msgstr "" -#: ../../gnome/app.py:1075 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +#: ../../qt4/app.py:695 +msgid "Done, no backup needed" msgstr "" -#: ../../gnome/app.py:1123 ../../kde4/app.py:1010 -#, python-format -msgid "Snapshot: %s" -msgstr "" +#: ../../qt4/app.py:707 +msgid "Error:" +msgstr "Eraro:" -#: ../../gnome/app.py:1124 ../../kde4/app.py:1011 -#, python-format -msgid "View the snapshot made at %s" +#: ../../qt4/app.py:726 ../../qt4/qt4systrayicon.py:153 +msgid "Sent:" msgstr "" -#: ../../gnome/app.py:1126 ../../kde4/app.py:1013 -msgid "View the current disk content" +#: ../../qt4/app.py:727 ../../qt4/qt4systrayicon.py:154 +msgid "Speed:" msgstr "" -#: ../../gnome/logviewdialog.py:106 ../../gnome/settingsdialog.py:414 -#: ../../kde4/logviewdialog.py:83 ../../kde4/settingsdialog.py:590 -msgid "All" +#: ../../qt4/app.py:728 ../../qt4/qt4systrayicon.py:155 +msgid "ETA:" msgstr "" -#: ../../gnome/logviewdialog.py:107 ../../gnome/settingsdialog.py:412 -#: ../../kde4/logviewdialog.py:84 ../../kde4/settingsdialog.py:588 -msgid "Errors" -msgstr "Eraroj" - -#: ../../gnome/logviewdialog.py:112 ../../kde4/logviewdialog.py:89 -msgid "Changes" -msgstr "Ŝanĝoj" - -#: ../../gnome/logviewdialog.py:115 ../../kde4/logviewdialog.py:92 -msgid "Informations" -msgstr "informoj" - -#: ../../gnome/settingsdialog.py:235 ../../kde4/settingsdialog.py:387 -msgid "Include files and folders" +#: ../../qt4/app.py:777 +msgid "Global" msgstr "" -#: ../../gnome/settingsdialog.py:264 -msgid "Exclude patterns, files or folders" +#: ../../qt4/app.py:778 +msgid "Root" msgstr "" -#: ../../gnome/settingsdialog.py:411 ../../kde4/settingsdialog.py:587 -msgid "None" -msgstr "Neniu" +#: ../../qt4/app.py:779 +msgid "Home" +msgstr "Hejmo" -#: ../../gnome/settingsdialog.py:413 ../../kde4/settingsdialog.py:589 -msgid "Changes & Errors" +#: ../../qt4/app.py:794 +msgid "Backup folders" msgstr "" -#: ../../gnome/settingsdialog.py:458 -msgid "Snapshots folder" +#: ../../qt4/app.py:849 +msgid "This is NOT a snapshot but a live view of your local files" msgstr "" -#: ../../gnome/settingsdialog.py:466 ../../kde4/settingsdialog.py:1314 -msgid "Are you sure you want to change snapshots folder ?" +#: ../../qt4/app.py:860 ../../qt4/app.py:1476 +#, python-format +msgid "Last check %s" msgstr "" -#: ../../gnome/settingsdialog.py:901 ../../kde4/settingsdialog.py:914 +#: ../../qt4/app.py:928 +#, python-format msgid "" -"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " -"*/3 for periodic backups every 3 hours" -msgstr "" - -#: ../../gnome/settingsdialog.py:1141 ../../kde4/settingsdialog.py:653 -msgid "New profile" -msgstr "" - -#: ../../gnome/settingsdialog.py:1155 ../../kde4/settingsdialog.py:669 -msgid "Rename profile" +"Are you sure you want to remove the snapshot:\n" +"%s" msgstr "" -#: ../../gnome/settingsdialog.py:1167 ../../kde4/settingsdialog.py:683 +#: ../../qt4/app.py:1004 #, python-format -msgid "Are you sure you want to delete the profile \"%s\" ?" -msgstr "" - -#: ../../gnome/settingsdialog.py:1173 ../../kde4/settingsdialog.py:1292 -msgid "Include folder" -msgstr "" - -#: ../../gnome/settingsdialog.py:1193 ../../kde4/settingsdialog.py:1278 -msgid "Include file" +msgid "" +"Backup local files before overwriting or\n" +"removing with trailing '%(suffix)s'." msgstr "" -#: ../../gnome/settingsdialog.py:1235 ../../kde4/settingsdialog.py:1241 -msgid "Exclude pattern" +#: ../../qt4/app.py:1010 +msgid "" +"Are you sure you want to remove all newer files in your original folder?" msgstr "" -#: ../../gnome/settingsdialog.py:1240 ../../kde4/settingsdialog.py:1251 -msgid "Exclude patterns can't contain ':' char !" +#: ../../qt4/app.py:1014 +msgid "" +"WARNING: deleting files in filesystem root could break your whole system!!!" msgstr "" -#: ../../gnome/settingsdialog.py:1246 ../../kde4/settingsdialog.py:1257 -msgid "Exclude file" +#: ../../qt4/app.py:1016 +msgid "Files to be restored:" msgstr "" -#: ../../gnome/settingsdialog.py:1257 ../../kde4/settingsdialog.py:1261 -msgid "Exclude folder" +#: ../../qt4/app.py:1031 +msgid "Do you really want to restore this files(s):" msgstr "" -#: ../../gnome/snapshotsdialog.py:240 -msgid "Jump to" +#: ../../qt4/app.py:1226 +#, python-format +msgid "Snapshot: %s" msgstr "" -#: ../../gnome/snapshotsdialog.py:248 ../../kde4/snapshotsdialog.py:164 -msgid "Diff" +#: ../../qt4/app.py:1227 +#, python-format +msgid "View the snapshot made at %s" msgstr "" -#: ../../gnome/snapshotsdialog.py:277 ../../kde4/snapshotsdialog.py:339 -msgid "You can't compare a snapshot to itself" +#: ../../qt4/app.py:1229 +msgid "View the current disk content" msgstr "" -#: ../../gnome/snapshotsdialog.py:284 ../../kde4/snapshotsdialog.py:346 +#: ../../qt4/app.py:1268 #, python-format -msgid "Command not found: %s" +msgid "Restore '%s'" msgstr "" -#: ../../gnome/snapshotsdialog.py:307 ../../kde4/snapshotsdialog.py:367 +#: ../../qt4/app.py:1269 #, python-format -msgid "" -"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" +msgid "Restore '%s' to ..." msgstr "" -#: ../../gnome/snapshotsdialog.py:310 ../../kde4/snapshotsdialog.py:370 +#: ../../qt4/app.py:1270 #, python-format -msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +msgid "Restore '%s' and delete new files" msgstr "" -#: ../../gnome/snapshotsdialog.py:312 ../../kde4/snapshotsdialog.py:372 -msgid "WARNING: This can not be revoked!" +#: ../../qt4/app.py:1368 ../../qt4/app.py:1385 +msgid "Authors" msgstr "" -#: ../../gnome/snapshotsdialog.py:317 ../../kde4/snapshotsdialog.py:377 -#, python-format -msgid "Exclude \"%s\" from future snapshots?" +#: ../../qt4/app.py:1369 ../../qt4/app.py:1388 +msgid "Translations" msgstr "" -#: ../../kde4/app.py:86 ../../gnome/mainwindow.glade:58 -#: ../../gnome/mainwindow.glade:60 -msgid "Refresh snapshots list" +#: ../../qt4/app.py:1370 ../../qt4/app.py:1391 +msgid "License" msgstr "" -#: ../../kde4/app.py:94 ../../gnome/mainwindow.glade:88 -#: ../../gnome/mainwindow.glade:90 -msgid "Remove Snapshot" +#: ../../qt4/logviewdialog.py:49 +msgid "Last Log View" msgstr "" -#: ../../kde4/app.py:98 ../../gnome/mainwindow.glade:105 -msgid "View Snapshot Log" +#: ../../qt4/logviewdialog.py:51 +msgid "Snapshot Log View" msgstr "" -#: ../../kde4/app.py:102 ../../gnome/mainwindow.glade:121 -msgid "View Last Log" -msgstr "" +#: ../../qt4/logviewdialog.py:59 ../../qt4/settingsdialog.py:59 +#: ../../qt4/settingsdialog.py:274 ../../qt4/settingsdialog.py:1899 +msgid "Profile:" +msgstr "Profilo:" -#: ../../kde4/app.py:108 ../../kde4/settingsdialog.py:69 -#: ../../gnome/mainwindow.glade:144 ../../gnome/mainwindow.glade:146 -#: ../../gnome/settingsdialog.glade:7 -msgid "Settings" -msgstr "Agordoj" +#: ../../qt4/logviewdialog.py:81 +msgid "Filter:" +msgstr "Filtrilo:" -#: ../../kde4/app.py:124 ../../gnome/mainwindow.glade:169 -msgid "Shutdown system after snapshot has finished." +#: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 +msgid "All" msgstr "" -#: ../../kde4/app.py:131 ../../gnome/mainwindow.glade:184 -#: ../../gnome/mainwindow.glade:186 -msgid "Exit" -msgstr "Eliri" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 +#: ../../qt4/settingsdialog.py:657 +msgid "Errors" +msgstr "Eraroj" -#: ../../kde4/app.py:186 ../../gnome/mainwindow.glade:289 -msgid "Up" -msgstr "Supren" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 +msgid "Changes" +msgstr "Ŝanĝoj" -#: ../../kde4/app.py:199 ../../gnome/mainwindow.glade:325 -msgid "Show hidden files" -msgstr "Montri kaŝitajn dosierojn" +#: ../../qt4/logviewdialog.py:92 +msgid "Informations" +msgstr "informoj" -#: ../../kde4/app.py:244 -msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +#: ../../qt4/logviewdialog.py:101 +msgid "[E] Error, [I] Information, [C] Change" msgstr "" -#: ../../kde4/app.py:839 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +#: ../../qt4/logviewdialog.py:104 +msgid "decode paths" msgstr "" -#: ../../kde4/app.py:1140 ../../kde4/kde4systrayicon.py:117 +#: ../../qt4/messagebox.py:56 +msgid "Error" +msgstr "" + +#: ../../qt4/messagebox.py:62 ../../qt4/messagebox.py:68 +msgid "Question" +msgstr "" + +#: ../../qt4/qt4systrayicon.py:69 +msgid "Start BackInTime" +msgstr "" + +#: ../../qt4/qt4systrayicon.py:124 msgid "Working..." msgstr "Laborante..." -#: ../../kde4/logviewdialog.py:55 -msgid "Error Log View" -msgstr "" +#: ../../qt4/qt4tools.py:178 +msgid "Today" +msgstr "Hodiaŭ" -#: ../../kde4/logviewdialog.py:65 ../../kde4/settingsdialog.py:79 -#: ../../kde4/settingsdialog.py:293 ../../gnome/logviewdialog.glade:73 -#: ../../gnome/settingsdialog.glade:72 -msgid "Profile:" -msgstr "Profilo:" +#: ../../qt4/qt4tools.py:183 +msgid "Yesterday" +msgstr "Hieraŭ" -#: ../../kde4/logviewdialog.py:77 ../../gnome/logviewdialog.glade:110 -msgid "Filter:" -msgstr "Filtrilo:" +#: ../../qt4/qt4tools.py:188 +msgid "This week" +msgstr "Nuna semajno" -#: ../../kde4/logviewdialog.py:100 ../../gnome/logviewdialog.glade:169 -msgid "[E] Error, [I] Information, [C] Change" -msgstr "" +#: ../../qt4/qt4tools.py:193 +msgid "Last week" +msgstr "Lasta semajno" -#: ../../kde4/logviewdialog.py:103 ../../gnome/logviewdialog.glade:195 -msgid "decode paths" +#: ../../qt4/restoredialog.py:75 +msgid "Show full Log" msgstr "" -#: ../../kde4/settingsdialog.py:88 +#: ../../qt4/settingsdialog.py:68 msgid "Edit" msgstr "Redakti" -#: ../../kde4/settingsdialog.py:106 ../../gnome/settingsdialog.glade:1207 +#: ../../qt4/settingsdialog.py:73 +msgid "Modify for Full System Backup" +msgstr "" + +#: ../../qt4/settingsdialog.py:77 ../../qt4/settingsdialog.py:451 +msgid "Add" +msgstr "" + +#: ../../qt4/settingsdialog.py:81 ../../qt4/settingsdialog.py:408 +#: ../../qt4/settingsdialog.py:467 +msgid "Remove" +msgstr "" + +#: ../../qt4/settingsdialog.py:96 msgid "General" msgstr "Ĝenerale" -#: ../../kde4/settingsdialog.py:114 ../../gnome/settingsdialog.glade:199 +#: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "" -#: ../../kde4/settingsdialog.py:127 ../../kde4/settingsdialog.py:1311 +#: ../../qt4/settingsdialog.py:119 +#, python-format +msgid "" +"Warning: %(app)s uses EncFS for encryption. A recent security audit " +"revealed several possible attack vectors for this. Please take a look at 'A " +"NOTE ON SECURITY' in 'man backintime'." +msgstr "" + +#: ../../qt4/settingsdialog.py:129 ../../qt4/settingsdialog.py:1568 msgid "Where to save snapshots" msgstr "" -#: ../../kde4/settingsdialog.py:146 +#: ../../qt4/settingsdialog.py:145 +msgid "Folder" +msgstr "" + +#: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" -#: ../../kde4/settingsdialog.py:158 ../../kde4/settingsdialog.py:283 -#: ../../gnome/settingsdialog.glade:323 ../../gnome/settingsdialog.glade:583 -#: ../../gnome/settingsdialog.glade:874 +#: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "" -#: ../../kde4/settingsdialog.py:163 ../../gnome/settingsdialog.glade:350 -#: ../../gnome/settingsdialog.glade:610 +#: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "" -#: ../../kde4/settingsdialog.py:168 ../../kde4/settingsdialog.py:288 -#: ../../gnome/settingsdialog.glade:377 ../../gnome/settingsdialog.glade:637 -#: ../../gnome/settingsdialog.glade:902 +#: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "Uzanto:" -#: ../../kde4/settingsdialog.py:173 ../../gnome/settingsdialog.glade:416 +#: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" -#: ../../kde4/settingsdialog.py:178 ../../gnome/settingsdialog.glade:459 +#: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" -#: ../../kde4/settingsdialog.py:184 +#: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "" -#: ../../kde4/settingsdialog.py:228 ../../kde4/settingsdialog.py:237 -#: ../../kde4/settingsdialog.py:243 ../../gnome/settingsdialog.glade:703 -#: ../../gnome/settingsdialog.glade:743 +#: ../../qt4/settingsdialog.py:201 +msgid "Key File" +msgstr "" + +#: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 +#: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "" -#: ../../kde4/settingsdialog.py:249 ../../gnome/settingsdialog.glade:775 +#: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" -#: ../../kde4/settingsdialog.py:252 ../../gnome/settingsdialog.glade:792 +#: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" -#: ../../kde4/settingsdialog.py:264 ../../gnome/settingsdialog.glade:968 +#: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "" -#: ../../kde4/settingsdialog.py:276 ../../gnome/settingsdialog.glade:848 -msgid "Auto Host / User / Profile Id" +#: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 +msgid "Full snapshot path: " msgstr "" -#: ../../kde4/settingsdialog.py:301 +#: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "" -#: ../../kde4/settingsdialog.py:311 ../../gnome/settingsdialog.glade:1092 +#: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "" -#: ../../kde4/settingsdialog.py:322 ../../gnome/settingsdialog.glade:1079 +#: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "" -#: ../../kde4/settingsdialog.py:333 ../../gnome/settingsdialog.glade:1066 +#: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "Horo:" -#: ../../kde4/settingsdialog.py:344 ../../gnome/settingsdialog.glade:1053 +#: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "" -#: ../../kde4/settingsdialog.py:353 ../../gnome/settingsdialog.glade:1014 +#: ../../qt4/settingsdialog.py:339 msgid "" -"Run Back In Time periodically with anacron. This is useful if the computer " -"is not running regular." +"Run Back In Time repeatedly. This is useful if the computer is not running " +"regular." msgstr "" -#: ../../kde4/settingsdialog.py:357 ../../gnome/settingsdialog.glade:1040 -msgid "Frequency in days:" +#: ../../qt4/settingsdialog.py:344 +msgid "Every:" msgstr "" -#: ../../kde4/settingsdialog.py:368 ../../gnome/settingsdialog.glade:1026 +#: ../../qt4/settingsdialog.py:362 msgid "" "Run Back In Time as soon as the drive is connected (only once every X " "days).\n" "You will be prompted for your sudo password." msgstr "" -#: ../../kde4/settingsdialog.py:379 ../../gnome/settingsdialog.glade:1310 +#: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Inkluzivi" -#: ../../kde4/settingsdialog.py:403 ../../kde4/settingsdialog.py:445 -#: ../../gnome/settingsdialog.glade:1411 +#: ../../qt4/settingsdialog.py:381 +msgid "Include files and folders" +msgstr "" + +#: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "Aldoni dosieron" -#: ../../kde4/settingsdialog.py:408 ../../kde4/settingsdialog.py:450 -#: ../../gnome/settingsdialog.glade:1427 +#: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Aldoni dosierujon" -#: ../../kde4/settingsdialog.py:418 ../../gnome/settingsdialog.glade:1474 +#: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Ekskluzivi" -#: ../../kde4/settingsdialog.py:421 ../../gnome/settingsdialog.glade:1328 +#: ../../qt4/settingsdialog.py:417 msgid "" "Warning: Wildcards ('foo*', '[fF]oo', 'fo?') will be ignored with " "mode 'SSH encrypted'.\n" "Only separate asterisk are allowed ('foo/*', 'foo/**/bar')" msgstr "" -#: ../../kde4/settingsdialog.py:430 +#: ../../qt4/settingsdialog.py:425 +msgid "Exclude patterns, files or folders" +msgstr "" + +#: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "" -#: ../../kde4/settingsdialog.py:460 ../../gnome/settingsdialog.glade:1905 +#: ../../qt4/settingsdialog.py:463 +msgid "Add default" +msgstr "" + +#: ../../qt4/settingsdialog.py:474 +msgid "Exclude files bigger than: " +msgstr "" + +#: ../../qt4/settingsdialog.py:475 +#, python-format +msgid "" +"Exclude files bigger than value in %(prefix)s.\n" +"With 'Full rsync mode' disabled this will only affect new files\n" +"because for rsync this is a transfer option, not an exclude option.\n" +"So big files that has been backed up before will remain in snapshots\n" +"even if they had changed." +msgstr "" + +#: ../../qt4/settingsdialog.py:493 msgid "Auto-remove" msgstr "" -#: ../../kde4/settingsdialog.py:464 ../../gnome/settingsdialog.glade:1608 +#: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "" -#: ../../kde4/settingsdialog.py:478 ../../gnome/settingsdialog.glade:1624 +#: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "" -#: ../../kde4/settingsdialog.py:490 ../../gnome/settingsdialog.glade:1642 +#: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" -#: ../../kde4/settingsdialog.py:514 ../../gnome/settingsdialog.glade:1697 +#: ../../qt4/settingsdialog.py:551 +msgid "Run in background on remote Host." +msgstr "" + +#: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "" -#: ../../kde4/settingsdialog.py:517 ../../kde4/settingsdialog.py:522 -#: ../../gnome/settingsdialog.glade:1705 ../../gnome/settingsdialog.glade:1729 +#: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "" -#: ../../kde4/settingsdialog.py:519 ../../gnome/settingsdialog.glade:1717 +#: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "" -#: ../../kde4/settingsdialog.py:524 ../../gnome/settingsdialog.glade:1743 +#: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "" -#: ../../kde4/settingsdialog.py:527 +#: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "" -#: ../../kde4/settingsdialog.py:529 ../../gnome/settingsdialog.glade:1769 +#: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "" -#: ../../kde4/settingsdialog.py:532 ../../gnome/settingsdialog.glade:1781 +#: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "" -#: ../../kde4/settingsdialog.py:534 ../../gnome/settingsdialog.glade:1795 +#: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "" -#: ../../kde4/settingsdialog.py:537 ../../gnome/settingsdialog.glade:1496 +#: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "" -#: ../../kde4/settingsdialog.py:546 ../../gnome/settingsdialog.glade:2104 +#: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Agordoj" -#: ../../kde4/settingsdialog.py:549 ../../gnome/settingsdialog.glade:1920 +#: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Aktivigi sciigojn" -#: ../../kde4/settingsdialog.py:552 ../../gnome/settingsdialog.glade:1937 +#: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "" -#: ../../kde4/settingsdialog.py:555 +#: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" msgstr "" -#: ../../kde4/settingsdialog.py:558 ../../gnome/settingsdialog.glade:1955 -msgid "Backup files on restore" +#: ../../qt4/settingsdialog.py:611 +msgid "Run only one snapshot at a time" +msgstr "" + +#: ../../qt4/settingsdialog.py:612 +msgid "" +"Other snapshots will be blocked until the current snapshot is done.\n" +"This is a global option. So it will effect all profiles for this user.\n" +"But you need to activate this for all other users, too." +msgstr "" + +#: ../../qt4/settingsdialog.py:617 +msgid "Backup replaced files on restore" msgstr "" -#: ../../kde4/settingsdialog.py:561 ../../gnome/settingsdialog.glade:1972 +#: ../../qt4/settingsdialog.py:618 +#, python-format +msgid "" +"Newer versions of files will be renamed with trailing '%(suffix)s' before " +"restoring.\n" +"If you don't need them anymore you can remove them with '%(cmd)s'" +msgstr "" + +#: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "" -#: ../../kde4/settingsdialog.py:564 ../../gnome/settingsdialog.glade:1989 +#: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "" -#: ../../kde4/settingsdialog.py:567 ../../gnome/settingsdialog.glade:2006 +#: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "" -#: ../../kde4/settingsdialog.py:568 ../../gnome/settingsdialog.glade:2032 +#: ../../qt4/settingsdialog.py:634 msgid "" -"- snapshots are no read-only\n" -"- destination file-system must support all linux attributes (dates, rights, " +"- snapshots are not read-only\n" +"- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" -#: ../../kde4/settingsdialog.py:575 ../../gnome/settingsdialog.glade:2045 +#: ../../qt4/settingsdialog.py:641 +msgid "Take a new snapshot regardless of there were changes or not." +msgstr "" + +#: ../../qt4/settingsdialog.py:644 msgid "Check for changes (don't take a new snapshot if nothing changed)" msgstr "" -#: ../../kde4/settingsdialog.py:582 +#: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "" -#: ../../kde4/settingsdialog.py:597 ../../gnome/settingsdialog.glade:2366 -msgid "Expert Options" +#: ../../qt4/settingsdialog.py:656 +msgid "None" +msgstr "Neniu" + +#: ../../qt4/settingsdialog.py:658 +msgid "Changes & Errors" msgstr "" -#: ../../kde4/settingsdialog.py:600 +#: ../../qt4/settingsdialog.py:674 msgid "Change these options only if you really know what you are doing !" msgstr "" -#: ../../kde4/settingsdialog.py:608 ../../gnome/settingsdialog.glade:2133 -msgid "Run 'nice' as cron job (default: enabled)" +#: ../../qt4/settingsdialog.py:678 +msgid "Run 'nice':" +msgstr "" + +#: ../../qt4/settingsdialog.py:684 ../../qt4/settingsdialog.py:696 +msgid "as cron job" msgstr "" -#: ../../kde4/settingsdialog.py:611 ../../gnome/settingsdialog.glade:2150 -msgid "Run 'ionice' as cron job (default: enabled)" +#: ../../qt4/settingsdialog.py:687 ../../qt4/settingsdialog.py:702 +#: ../../qt4/settingsdialog.py:716 +msgid "on remote host" msgstr "" -#: ../../kde4/settingsdialog.py:614 ../../gnome/settingsdialog.glade:2167 -msgid "Run 'ionice' when taking a manual snapshot (default: disabled)" +#: ../../qt4/settingsdialog.py:690 +msgid "Run 'ionice':" msgstr "" -#: ../../kde4/settingsdialog.py:617 ../../gnome/settingsdialog.glade:2184 -msgid "Run 'nice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:699 +msgid "when taking a manual snapshot" msgstr "" -#: ../../kde4/settingsdialog.py:620 ../../gnome/settingsdialog.glade:2201 -msgid "Run 'ionice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:706 +msgid "Run 'rsync' with 'nocache':" msgstr "" -#: ../../kde4/settingsdialog.py:626 ../../gnome/settingsdialog.glade:2224 +#: ../../qt4/settingsdialog.py:712 +msgid "on local machine" +msgstr "" + +#: ../../qt4/settingsdialog.py:719 +msgid "Redirect stdout to /dev/null in cronjobs." +msgstr "" + +#: ../../qt4/settingsdialog.py:725 +msgid "Redirect stderr to /dev/null in cronjobs." +msgstr "" + +#: ../../qt4/settingsdialog.py:734 msgid "Limit rsync bandwidth usage: " msgstr "" -#: ../../kde4/settingsdialog.py:629 ../../gnome/settingsdialog.glade:2259 +#: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" -#: ../../kde4/settingsdialog.py:634 ../../gnome/settingsdialog.glade:2280 +#: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "" -#: ../../kde4/settingsdialog.py:637 ../../gnome/settingsdialog.glade:2297 +#: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "" -#: ../../kde4/settingsdialog.py:640 ../../gnome/settingsdialog.glade:2314 +#: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute links)" msgstr "" -#: ../../kde4/settingsdialog.py:643 ../../gnome/settingsdialog.glade:2331 -msgid "Copy links (dereference symbolic links)" +#: ../../qt4/settingsdialog.py:834 +msgid "Paste additional options to rsync" msgstr "" -#: ../../kde4/snapshotsdialog.py:46 ../../kde4/snapshotsdialog.py:173 -#: ../../gnome/snapshotsdialog.glade:385 -msgid "Diff Options" +#: ../../qt4/settingsdialog.py:837 +msgid "" +"Options must be quoted e.g. --exclude-from=\"/path/to/my exclude file\"." msgstr "" -#: ../../kde4/snapshotsdialog.py:56 ../../gnome/snapshotsdialog.glade:314 -msgid "Command:" -msgstr "Komando:" +#: ../../qt4/settingsdialog.py:847 +msgid "Add prefix to SSH commands" +msgstr "" -#: ../../kde4/snapshotsdialog.py:60 ../../gnome/snapshotsdialog.glade:322 -msgid "Parameters:" -msgstr "Parametroj:" +#: ../../qt4/settingsdialog.py:850 +#, python-format +msgid "" +"Prefix to run before every command on remote host.\n" +"Variables need to be escaped with \\$FOO.\n" +"This doesn't touch rsync. So to add a prefix\n" +"for rsync use \"%(cb_rsync_options)s\" with\n" +"%(rsync_options_value)s\n" +"\n" +"%(default)s: %(def_value)s" +msgstr "" -#: ../../kde4/snapshotsdialog.py:64 ../../gnome/snapshotsdialog.glade:334 -msgid "Use %1 and %2 for path parameters" +#: ../../qt4/settingsdialog.py:858 ../../qt4/settingsdialog.py:1691 +msgid "default" msgstr "" -#: ../../kde4/snapshotsdialog.py:123 ../../gnome/snapshotsdialog.glade:184 -#: ../../gnome/snapshotsdialog.glade:186 -msgid "Delete" +#: ../../qt4/settingsdialog.py:875 +msgid "Restore Config" msgstr "" -#: ../../kde4/snapshotsdialog.py:128 ../../gnome/snapshotsdialog.glade:199 -#: ../../gnome/snapshotsdialog.glade:201 -msgid "Select All" +#: ../../qt4/settingsdialog.py:891 +msgid "" +"Full system backup can only create a snapshot to be restored to the same " +"physical disk(s) with the same disk partitioning as from the source; " +"restoring to new physical disks or the same disks with different " +"partitioning will yield a potentially broken and unusable system.\n" +"\n" +"Full system backup will override some settings that may have been " +"customized. Continue?" msgstr "" -#: ../../kde4/snapshotsdialog.py:132 ../../gnome/snapshotsdialog.glade:88 -msgid "List only different snapshots" +#: ../../qt4/settingsdialog.py:922 +msgid "New profile" msgstr "" -#: ../../kde4/snapshotsdialog.py:139 ../../gnome/snapshotsdialog.glade:110 -msgid "List only equal snapshots to: " +#: ../../qt4/settingsdialog.py:938 +msgid "Rename profile" msgstr "" -#: ../../kde4/snapshotsdialog.py:149 ../../gnome/snapshotsdialog.glade:146 -msgid "Deep check (more accurate, but slow)" +#: ../../qt4/settingsdialog.py:952 +#, python-format +msgid "Are you sure you want to delete the profile \"%s\" ?" msgstr "" -#: ../../kde4/snapshotsdialog.py:174 -msgid "Go To" -msgstr "Iri al" +#: ../../qt4/settingsdialog.py:1191 +msgid "" +"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " +"*/3 for periodic backups every 3 hours" +msgstr "" -#: ../../gnome/logviewdialog.glade:9 -msgid "Log View" +#: ../../qt4/settingsdialog.py:1489 +msgid "Exclude pattern" msgstr "" -#: ../../gnome/logviewdialog.glade:179 -msgid "scroll down automatic" +#: ../../qt4/settingsdialog.py:1502 +msgid "Exclude file" msgstr "" -#: ../../gnome/mainwindow.glade:7 -msgid "Back In Time" +#: ../../qt4/settingsdialog.py:1506 +msgid "Exclude folder" msgstr "" -#: ../../gnome/mainwindow.glade:45 -msgid "Backup Now" +#: ../../qt4/settingsdialog.py:1525 +msgid "Include file" msgstr "" -#: ../../gnome/mainwindow.glade:171 -msgid "Shutdown" +#: ../../qt4/settingsdialog.py:1533 ../../qt4/settingsdialog.py:1553 +#, python-format +msgid "" +"\"%s\" is a symlink. The linked target will not be backed up until you " +"include it, too.\n" +"Would you like to include the symlinks target instead?" +msgstr "" + +#: ../../qt4/settingsdialog.py:1545 +msgid "Include folder" +msgstr "" + +#: ../../qt4/settingsdialog.py:1572 +msgid "Are you sure you want to change snapshots folder ?" msgstr "" -#: ../../gnome/mainwindow.glade:287 -msgid "Parent folder" +#: ../../qt4/settingsdialog.py:1688 +msgid "enabled" msgstr "" -#: ../../gnome/mainwindow.glade:327 -msgid "Hidden files" +#: ../../qt4/settingsdialog.py:1690 +msgid "disabled" msgstr "" -#: ../../gnome/mainwindow.glade:451 +#: ../../qt4/settingsdialog.py:1715 +msgid "Restore Settings" +msgstr "" + +#: ../../qt4/settingsdialog.py:1732 +msgid " and add your user to group 'fuse'" +msgstr "" + +#: ../../qt4/settingsdialog.py:1736 +#, python-format msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +"Please navigate to the snapshot from which you want to restore %(appName)s's " +"configuration. The path may look like: \n" +"%(samplePath)s\n" +"\n" +"If your snapshots are on a remote drive or if they are encrypted you need to " +"manually mount them first. If you use Mode SSH you also may need to set up " +"public key login to the remote host%(addFuse)s.\n" +"Take a look at 'man backintime'." msgstr "" -#: ../../gnome/settingsdialog.glade:287 -msgid "Where to save snapshots" +#: ../../qt4/settingsdialog.py:1794 ../../qt4/settingsdialog.py:1854 +msgid "No config found" msgstr "" -#: ../../gnome/settingsdialog.glade:483 -msgid "Private key:" +#: ../../qt4/snapshotsdialog.py:49 ../../qt4/snapshotsdialog.py:173 +msgid "Diff Options" msgstr "" -#: ../../gnome/settingsdialog.glade:534 -msgid "Advanced SSH Settings" +#: ../../qt4/snapshotsdialog.py:56 +msgid "Command:" +msgstr "Komando:" + +#: ../../qt4/snapshotsdialog.py:60 +msgid "Parameters:" +msgstr "Parametroj:" + +#: ../../qt4/snapshotsdialog.py:64 +msgid "Use %1 and %2 for path parameters" msgstr "" -#: ../../gnome/settingsdialog.glade:552 -msgid "SSH Settings" +#: ../../qt4/snapshotsdialog.py:106 +msgid "List only different snapshots" msgstr "" -#: ../../gnome/settingsdialog.glade:815 -msgid "Password" +#: ../../qt4/snapshotsdialog.py:113 +msgid "List only equal snapshots to: " msgstr "" -#: ../../gnome/settingsdialog.glade:930 -msgid "Profile Id:" +#: ../../qt4/snapshotsdialog.py:123 +msgid "Deep check (more accurate, but slow)" msgstr "" -#: ../../gnome/settingsdialog.glade:1115 -msgid "" -"hours seperate by comma ( e.g. 8,12,18,23) or */3 for periodic backups every " -"3 hours (cron style)" +#: ../../qt4/snapshotsdialog.py:144 +msgid "Delete" msgstr "" -#: ../../gnome/settingsdialog.glade:1163 -msgid "Schedule" +#: ../../qt4/snapshotsdialog.py:148 +msgid "Select All" msgstr "" -#: ../../gnome/settingsdialog.glade:1363 -msgid "Highly recommended:" +#: ../../qt4/snapshotsdialog.py:161 +msgid "Diff" msgstr "" -#: ../../gnome/settingsdialog.glade:1377 -msgid "label" -msgstr "etikedo" +#: ../../qt4/snapshotsdialog.py:172 +msgid "Go To" +msgstr "Iri al" -#: ../../gnome/settingsdialog.glade:1755 -msgid "week(s)" +#: ../../qt4/snapshotsdialog.py:326 +msgid "You can't compare a snapshot to itself" msgstr "" -#: ../../gnome/settingsdialog.glade:2069 -msgid "Log level:" +#: ../../qt4/snapshotsdialog.py:333 +#, python-format +msgid "Command not found: %s" msgstr "" -#: ../../gnome/settingsdialog.glade:2121 +#: ../../qt4/snapshotsdialog.py:354 +#, python-format msgid "" -"Change these options only if you really know what you are doing !" +"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" msgstr "" -#: ../../gnome/snapshotsdialog.glade:263 -msgid "Diff with" +#: ../../qt4/snapshotsdialog.py:357 +#, python-format +msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" msgstr "" -#: ../../gnome/textinputdialog.glade:7 -msgid "Pattern" -msgstr "Modelo" +#: ../../qt4/snapshotsdialog.py:359 +msgid "WARNING: This can not be revoked!" +msgstr "" -#: ../../gnome/textinputdialog.glade:70 -msgid "Text" +#: ../../qt4/snapshotsdialog.py:374 +#, python-format +msgid "Exclude \"%s\" from future snapshots?" msgstr "" diff -Nru backintime-1.0.36/common/po/es.po backintime-1.1.12/common/po/es.po --- backintime-1.0.36/common/po/es.po 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/po/es.po 2016-01-11 18:07:58.000000000 +0000 @@ -7,26 +7,26 @@ msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-11-09 22:34+0100\n" -"PO-Revision-Date: 2014-07-09 04:00+0000\n" -"Last-Translator: Jristz \n" +"POT-Creation-Date: 2015-12-19 00:47+0100\n" +"PO-Revision-Date: 2015-09-09 21:50+0000\n" +"Last-Translator: Back In Time Team \n" "Language-Team: Spanish/Spain \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2014-08-06 10:19+0000\n" -"X-Generator: Launchpad (build 17147)\n" +"X-Launchpad-Export-Date: 2016-01-11 17:52+0000\n" +"X-Generator: Launchpad (build 17881)\n" -#: ../../common/config.py:91 +#: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Día(s)" -#: ../../common/config.py:93 +#: ../../common/config.py:97 msgid "Year(s)" msgstr "Año(s)" -#: ../../common/config.py:1286 +#: ../../common/config.py:1407 msgid "" "Can't find crontab.\n" "Are you sure cron is installed ?\n" @@ -36,87 +36,67 @@ "¿Está seguro de que cron está instalado?\n" "Si no, debe desactivar todas las copias automáticas." -#: ../../common/encfstools.py:453 ../../common/encfstools.py:480 -#: ../../common/snapshots.py:982 ../../common/snapshots.py:1288 -#: ../../kde4/app.py:82 ../../gnome/mainwindow.glade:43 +#: ../../common/encfstools.py:512 ../../common/snapshots.py:1131 +#: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "Tomar instantánea" -#: ../../common/snapshots.py:950 +#: ../../common/snapshots.py:752 ../../qt4/app.py:377 ../../qt4/app.py:675 +#: ../../qt4/app.py:692 ../../qt4/qt4systrayicon.py:65 +msgid "Done" +msgstr "Finalizado" + +#: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "Terminando" -#: ../../common/snapshots.py:1219 +#: ../../common/snapshots.py:1340 #, python-format msgid "Compare with snapshot %s" msgstr "Comparar con la instantánea %s" -#: ../../common/snapshots.py:1248 +#: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "Crear enlaces simbólicos fuertes" -#: ../../common/snapshots.py:1562 -msgid "Remove old snapshots" -msgstr "Eliminar instantáneas antiguas" - -#: ../../common/snapshots.py:1586 ../../kde4/settingsdialog.py:501 -#: ../../gnome/settingsdialog.glade:1660 +#: ../../common/snapshots.py:1695 ../../common/snapshots.py:1728 +#: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "Borrado inteligente" -#: ../../common/snapshots.py:1591 +#: ../../common/snapshots.py:1704 +msgid "Remove old snapshots" +msgstr "Eliminar instantáneas antiguas" + +#: ../../common/snapshots.py:1733 msgid "Try to keep min free space" msgstr "Intentar mantener el espacio libre mínimo" -#: ../../gnome/app.py:185 ../../gnome/app.py:594 ../../gnome/app.py:608 -#: ../../kde4/app.py:299 ../../kde4/app.py:570 ../../kde4/app.py:587 -msgid "Done" -msgstr "Finalizado" +#: ../../qt4/app.py:85 ../../qt4/app.py:890 +msgid "Snapshot Name" +msgstr "Nombre de la instantánea" + +#: ../../qt4/app.py:88 +msgid "Remove Snapshot" +msgstr "Eliminar instantánea" + +#: ../../qt4/app.py:174 ../../qt4/settingsdialog.py:1776 +msgid "Show hidden files" +msgstr "Mostrar archivos ocultos" -#: ../../gnome/app.py:226 ../../kde4/app.py:235 +#: ../../qt4/app.py:277 msgid "Shortcuts" msgstr "Accesos directos" -#: ../../gnome/app.py:611 ../../kde4/app.py:590 +#: ../../qt4/app.py:695 msgid "Done, no backup needed" msgstr "Hecho, no se necesita una copia de respaldo" -#: ../../gnome/app.py:637 ../../kde4/app.py:650 +#: ../../qt4/app.py:778 msgid "Root" msgstr "Administrador" -#: ../../gnome/app.py:1056 ../../kde4/app.py:90 ../../kde4/app.py:805 -#: ../../gnome/mainwindow.glade:73 ../../gnome/mainwindow.glade:75 -msgid "Snapshot Name" -msgstr "Nombre de la instantánea" - -#: ../../gnome/app.py:1075 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" -msgstr "" -"Está seguro de que desea eliminar la instantánea:\n" -"%s" - -#: ../../gnome/settingsdialog.py:1246 ../../kde4/settingsdialog.py:1257 -msgid "Exclude file" -msgstr "Excluir archivo" - -#: ../../gnome/snapshotsdialog.py:248 ../../kde4/snapshotsdialog.py:164 -msgid "Diff" -msgstr "Diferencias" - -#: ../../kde4/app.py:94 ../../gnome/mainwindow.glade:88 -#: ../../gnome/mainwindow.glade:90 -msgid "Remove Snapshot" -msgstr "Eliminar instantánea" - -#: ../../kde4/app.py:199 ../../gnome/mainwindow.glade:325 -msgid "Show hidden files" -msgstr "Mostrar archivos ocultos" - -#: ../../kde4/app.py:839 +#: ../../qt4/app.py:928 #, python-format msgid "" "Are you sure you want to remove the snapshot:\n" @@ -125,234 +105,255 @@ "¿Está seguro de que desea eliminar la instantánea:\n" "%s?" -#: ../../kde4/settingsdialog.py:127 ../../kde4/settingsdialog.py:1311 +#: ../../qt4/settingsdialog.py:129 ../../qt4/settingsdialog.py:1568 msgid "Where to save snapshots" msgstr "Dónde guardar las instantáneas:" -#: ../../kde4/settingsdialog.py:403 ../../kde4/settingsdialog.py:445 -#: ../../gnome/settingsdialog.glade:1411 +#: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "Añadir archivo" -#: ../../kde4/settingsdialog.py:408 ../../kde4/settingsdialog.py:450 -#: ../../gnome/settingsdialog.glade:1427 +#: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Añadir carpeta" -#: ../../kde4/settingsdialog.py:537 ../../gnome/settingsdialog.glade:1496 +#: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "No eliminar las instantáneas con nombre" -#: ../../kde4/settingsdialog.py:549 ../../gnome/settingsdialog.glade:1920 +#: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Activar notificaciones" -#: ../../kde4/snapshotsdialog.py:46 ../../kde4/snapshotsdialog.py:173 -#: ../../gnome/snapshotsdialog.glade:385 +#: ../../qt4/settingsdialog.py:1502 +msgid "Exclude file" +msgstr "Excluir archivo" + +#: ../../qt4/snapshotsdialog.py:49 ../../qt4/snapshotsdialog.py:173 msgid "Diff Options" msgstr "Opciones al mostrar diferencias (Diff)" -#: ../../kde4/snapshotsdialog.py:64 ../../gnome/snapshotsdialog.glade:334 +#: ../../qt4/snapshotsdialog.py:64 msgid "Use %1 and %2 for path parameters" msgstr "Usar %1 y %2 para los parámetros de ruta" -#: ../../gnome/mainwindow.glade:45 -msgid "Backup Now" -msgstr "Hacer copia de respaldo ahora" - -#: ../../gnome/mainwindow.glade:327 -msgid "Hidden files" -msgstr "Archivos ocultos" - -#: ../../gnome/settingsdialog.glade:287 -msgid "Where to save snapshots" -msgstr "Dónde guardar las instantáneas" - -#: ../../gnome/snapshotsdialog.glade:263 -msgid "Diff with" -msgstr "Mostrar diferencias con" +#: ../../qt4/snapshotsdialog.py:161 +msgid "Diff" +msgstr "Diferencias" + +#: ../../common/configfile.py:60 +#, python-format +msgid "Failed to save config: %s" +msgstr "" -#: ../../common/config.py:72 +#: ../../common/configfile.py:78 +#, python-format +msgid "Failed to load config: %s" +msgstr "" + +#: ../../common/configfile.py:352 ../../common/configfile.py:414 +#, python-format +msgid "Profile \"%s\" already exists !" +msgstr "El perfil «%s» ya existe." + +#: ../../common/configfile.py:383 +msgid "You can't remove the last profile !" +msgstr "No puede quitar el último perfil." + +#: ../../common/config.py:76 msgid "Disabled" msgstr "Desactivado" -#: ../../common/config.py:73 +#: ../../common/config.py:77 msgid "At every boot/reboot" msgstr "En cada arranque/reinicio" -#: ../../common/config.py:74 +#: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Cada cinco minutos" -#: ../../common/config.py:75 +#: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Cada diez minutos" -#: ../../common/config.py:76 +#: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "Cada 30 minutos" -#: ../../common/config.py:77 +#: ../../common/config.py:81 msgid "Every hour" msgstr "Cada hora" -#: ../../common/config.py:78 +#: ../../common/config.py:82 msgid "Every 2 hours" msgstr "Cada 2 horas" -#: ../../common/config.py:79 +#: ../../common/config.py:83 msgid "Every 4 hours" msgstr "Cada 4 horas" -#: ../../common/config.py:80 +#: ../../common/config.py:84 msgid "Every 6 hours" msgstr "Cada 6 horas" -#: ../../common/config.py:81 +#: ../../common/config.py:85 msgid "Every 12 hours" msgstr "Cada 12 horas" -#: ../../common/config.py:82 +#: ../../common/config.py:86 msgid "Custom Hours" msgstr "Horas personalizadas" -#: ../../common/config.py:83 +#: ../../common/config.py:87 msgid "Every Day" msgstr "Cada día" -#: ../../common/config.py:84 -msgid "Daily (anacron)" -msgstr "Diariamente (anacron)" +#: ../../common/config.py:88 +msgid "Repeatedly (anacron)" +msgstr "" -#: ../../common/config.py:85 +#: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "Cuando la unidad sea conectada (udev)" -#: ../../common/config.py:86 +#: ../../common/config.py:90 msgid "Every Week" msgstr "Cada semana" -#: ../../common/config.py:87 +#: ../../common/config.py:91 msgid "Every Month" msgstr "Cada mes" -#: ../../common/config.py:92 +#: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Semana(s)" -#: ../../common/config.py:100 +#: ../../common/config.py:101 +msgid "Hour(s)" +msgstr "Hora(s)" + +#: ../../common/config.py:104 +msgid "Month(s)" +msgstr "Mes(es)" + +#: ../../common/config.py:126 ../../qt4/settingsdialog.py:551 msgid " EXPERIMENTAL!" msgstr " ¡EXPERIMENTAL!" -#: ../../common/config.py:103 +#: ../../common/config.py:129 msgid "Local" msgstr "Local" -#: ../../common/config.py:104 +#: ../../common/config.py:130 msgid "SSH" msgstr "SSH" -#: ../../common/config.py:104 ../../common/config.py:106 -#: ../../gnome/settingsdialog.py:475 ../../kde4/settingsdialog.py:1325 +#: ../../common/config.py:130 ../../common/config.py:132 +#: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "Llave privada SSH" -#: ../../common/config.py:105 +#: ../../common/config.py:131 msgid "Local encrypted" msgstr "Cifrado local" -#: ../../common/config.py:105 ../../common/config.py:106 +#: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "Encriptación" -#: ../../common/config.py:106 +#: ../../common/config.py:132 msgid "SSH encrypted" msgstr "Encriptado SSH" -#: ../../common/config.py:112 +#: ../../common/config.py:135 msgid "Default" msgstr "Por defecto" -#: ../../common/config.py:113 +#: ../../common/config.py:136 msgid "AES128-CTR" msgstr "AES128-CTR" -#: ../../common/config.py:114 +#: ../../common/config.py:137 msgid "AES192-CTR" msgstr "AES192-CTR" -#: ../../common/config.py:115 +#: ../../common/config.py:138 msgid "AES256-CTR" msgstr "AES256-CTR" -#: ../../common/config.py:116 +#: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "ARCFOUR256" -#: ../../common/config.py:117 +#: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "ARCFOUR128" -#: ../../common/config.py:118 +#: ../../common/config.py:141 msgid "AES128-CBC" msgstr "AES128-CBC" -#: ../../common/config.py:119 +#: ../../common/config.py:142 msgid "3DES-CBC" msgstr "3DES-CBC" -#: ../../common/config.py:120 +#: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "Blowfish-CBC" -#: ../../common/config.py:121 +#: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "Cast128-CBC" -#: ../../common/config.py:122 +#: ../../common/config.py:145 msgid "AES192-CBC" msgstr "AES192-CBC" -#: ../../common/config.py:123 +#: ../../common/config.py:146 msgid "AES256-CBC" msgstr "AES256-CBC" -#: ../../common/config.py:124 +#: ../../common/config.py:147 msgid "ARCFOUR" msgstr "ARCFOUR" -#: ../../common/config.py:129 +#: ../../common/config.py:153 msgid "Main profile" msgstr "Perfil principal" -#: ../../common/config.py:256 ../../common/config.py:275 -#: ../../common/config.py:286 ../../common/config.py:291 +#: ../../common/config.py:289 ../../common/config.py:296 +#: ../../common/config.py:307 ../../common/config.py:312 +#: ../../qt4/qt4systrayicon.py:61 #, python-format msgid "Profile: \"%s\"" msgstr "Perfil: «%s»" -#: ../../common/config.py:256 +#: ../../common/config.py:289 msgid "Snapshots folder is not valid !" msgstr "La carpeta de instantáneas no es válida." -#: ../../common/config.py:275 +#: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "Debe seleccionar al menos una carpeta para copiar." -#: ../../common/config.py:286 +#: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "No puede incluir una carpeta de copias de seguridad." -#: ../../common/config.py:291 +#: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "No puede incluir una subcarpeta de copias de seguridad." -#: ../../common/config.py:361 +#: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s no es una carpeta." -#: ../../common/config.py:376 ../../common/config.py:389 +#: ../../common/config.py:380 +msgid "Host/User/Profile-ID must not be empty!" +msgstr "" + +#: ../../common/config.py:388 ../../common/config.py:420 #, python-format msgid "" "Can't write to: %s\n" @@ -361,49 +362,58 @@ "No se puede escribir en: %s\n" "¿Está seguro de que tiene permiso de escritura?" -#: ../../common/config.py:1338 +#: ../../common/config.py:400 #, python-format -msgid "Schedule udev doesn't work with mode %s" +msgid "" +"Destination filesystem for '%(path)s' is formatted with FAT which doesn't " +"support hard-links. Please use a native Linux filesystem." msgstr "" -#: ../../common/config.py:1342 +#: ../../common/config.py:405 #, python-format -msgid "Couldn't find UUID for \"%s\"" -msgstr "No se pudo encontrar UUID para «%s»" - -#: ../../common/config.py:1379 -msgid "Failed to remove udev rules" +msgid "" +"Destination filsystem for '%(path)s' is a SMB mounted share. Please make " +"sure the remote SMB server supports symlinks or activate '%(copyLinks)s' in " +"'%(expertOptions)s'." msgstr "" -#: ../../common/config.py:1385 -msgid "Failed to create udev rules" -msgstr "" +#: ../../common/config.py:408 ../../qt4/settingsdialog.py:815 +msgid "Copy links (dereference symbolic links)" +msgstr "Copiar vínculos (desarbitrar vínculos simbólicos)" + +#: ../../common/config.py:409 ../../qt4/settingsdialog.py:669 +msgid "Expert Options" +msgstr "Opciones avanzadas" -#: ../../common/config.py:1420 +#: ../../common/config.py:411 +#, python-format msgid "" -"Can't find anacron.\n" -"Are you sure anacron is installed ?\n" -"If not you should disable daily anacron backups." +"Destination filesystem for '%(path)s is a sshfs mounted share. sshfs doesn't " +"support hard-links. Please use mode 'SSH' instead." msgstr "" -#: ../../common/config.py:1439 -msgid "Please provide your sudo password to install the udev rule." +#: ../../common/config.py:1411 +msgid "Failed to write new crontab." msgstr "" -#: ../../common/config.py:1445 -msgid "Please provide your sudo password to remove unused udev rules." +#: ../../common/config.py:1505 +#, python-format +msgid "" +"Could not install Udev rule for profile %(profile_id)s. DBus Service " +"'%(dbus_interface)s' wasn't available" msgstr "" -#: ../../common/configfile.py:253 ../../common/configfile.py:315 +#: ../../common/config.py:1517 #, python-format -msgid "Profile \"%s\" already exists !" -msgstr "El perfil «%s» ya existe." +msgid "Schedule udev doesn't work with mode %s" +msgstr "" -#: ../../common/configfile.py:284 -msgid "You can't remove the last profile !" -msgstr "No puede quitar el último perfil." +#: ../../common/config.py:1526 +#, python-format +msgid "Couldn't find UUID for \"%s\"" +msgstr "No se pudo encontrar UUID para «%s»" -#: ../../common/encfstools.py:95 +#: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" @@ -411,38 +421,38 @@ "%(error)s" msgstr "" -#: ../../common/encfstools.py:105 +#: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "" -#: ../../common/encfstools.py:149 +#: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "" -#: ../../common/encfstools.py:153 +#: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" -#: ../../common/encfstools.py:154 +#: ../../common/encfstools.py:171 msgid "Cancel" msgstr "" -#: ../../common/encfstools.py:157 +#: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "" -#: ../../common/encfstools.py:161 +#: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "" -#: ../../common/encfstools.py:166 +#: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" -#: ../../common/encfstools.py:174 ../../common/sshtools.py:207 +#: ../../common/encfstools.py:196 ../../common/sshtools.py:262 #, python-format msgid "" "%(user)s is not member of group 'fuse'.\n" @@ -450,57 +460,56 @@ "Look at 'man backintime' for further instructions." msgstr "" -#: ../../common/encfstools.py:189 +#: ../../common/encfstools.py:211 msgid "" "encfs version 1.7.2 and before has a bug with option --reverse. Please " "update encfs" msgstr "" -#: ../../common/mount.py:195 +#: ../../common/mount.py:204 #, python-format msgid "" "Hash collision occurred in hash_id %s. Incrementing global value " "hash_collision and try again." msgstr "" -#: ../../common/mount.py:246 +#: ../../common/mount.py:259 #, python-format msgid "mountpoint %s not empty." msgstr "" -#: ../../common/mount.py:286 +#: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" -#: ../../common/password.py:425 +#: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" -#: ../../common/snapshots.py:171 ../../gnome/app.py:1127 -#: ../../kde4/app.py:1014 +#: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Ahora" -#: ../../common/snapshots.py:182 ../../gnome/gnometools.py:37 +#: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "¡CON ERRORES!" -#: ../../common/snapshots.py:282 +#: ../../common/snapshots.py:344 msgid "" "### This log has been decoded with automatic search pattern\n" "### If some paths are not decoded you can manually decode them with:\n" msgstr "" -#: ../../common/snapshots.py:465 +#: ../../common/snapshots.py:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "Falló" -#: ../../common/snapshots.py:564 +#: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "Recuperar permisos" -#: ../../common/snapshots.py:739 +#: ../../common/snapshots.py:860 msgid "" "Back In Time changed its backup format.\n" "\n" @@ -511,7 +520,7 @@ "Sus antiguas instantáneas se pueden convertir al nuevo formato. ¿Está de " "acuerdo?" -#: ../../common/snapshots.py:749 +#: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" @@ -529,7 +538,7 @@ "\n" "(El programa aún podrá discriminar entre ellos)" -#: ../../common/snapshots.py:752 +#: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" @@ -537,7 +546,7 @@ "No se han encontrado perfiles. Tendrá que actualizar los perfiles primero. " "Por favor, reinicie Back In Time" -#: ../../common/snapshots.py:803 +#: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" @@ -550,7 +559,7 @@ "cannot continue taking snapshots" msgstr "" -#: ../../common/snapshots.py:812 +#: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" @@ -564,7 +573,7 @@ "Puede manualmente mover las instantáneas,\n" "si lo ha hecho reinicie Back In Time para continuar" -#: ../../common/snapshots.py:825 +#: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" @@ -575,7 +584,7 @@ "Back In Time continuará de nuevo tomando instantáneas como se hayan " "programado" -#: ../../common/snapshots.py:830 +#: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" @@ -595,12 +604,12 @@ "\n" "Si no está seguro, se le preguntará la próxima vez que inicie Back In Time." -#: ../../common/snapshots.py:839 +#: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "" "Back In Time continuará tomando instantáneas otra vez como está programado" -#: ../../common/snapshots.py:841 +#: ../../common/snapshots.py:953 msgid "" "Back In Time still cannot continue taking new snapshots.\n" "Restart Back In Time to see the questions again" @@ -608,7 +617,11 @@ "Back In Time aún no puede continuar tomando nuevas instántaneas.\n" "Reinicie Back In Time para ver de nuevo las preguntas" -#: ../../common/snapshots.py:913 +#: ../../common/snapshots.py:972 +msgid "Deferring backup while on battery" +msgstr "" + +#: ../../common/snapshots.py:1035 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it." @@ -616,130 +629,137 @@ "No se pudo encontrar la carpeta de instantáneas.\n" "Si está en una unidad extraíble, por favor, conéctela." -#: ../../common/snapshots.py:915 +#: ../../common/snapshots.py:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "Esperando %s segundo." msgstr[1] "Esperando %s segundos." -#: ../../common/snapshots.py:941 +#: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "Fallo al crear la instantánea %s" -#: ../../common/snapshots.py:1088 +#: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "No se puede crear carpeta: %s" -#: ../../common/snapshots.py:1107 +#: ../../common/snapshots.py:1217 msgid "..." msgstr "..." -#: ../../common/snapshots.py:1134 +#: ../../common/snapshots.py:1238 +#, python-format +msgid "Found leftover '%s' which can be continued." +msgstr "" + +#: ../../common/snapshots.py:1250 +#, python-format +msgid "Remove leftover '%s' folder from last run" +msgstr "" + +#: ../../common/snapshots.py:1263 #, python-format msgid "Can't remove folder: %s" msgstr "No se puede eliminar la carpeta: %s" -#: ../../common/snapshots.py:1335 +#: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "Guardando el archivo de configuración..." -#: ../../common/snapshots.py:1341 +#: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "Salvando permisos..." -#: ../../common/snapshots.py:1442 +#: ../../common/snapshots.py:1470 +msgid "Save permission over ssh failed. Retry normal method" +msgstr "" + +#: ../../common/snapshots.py:1521 #, python-format msgid "Can't rename %(new_path)s to %(path)s" msgstr "" -#: ../../common/snapshots.py:1621 +#: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" -#: ../../common/sshtools.py:106 +#: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "" -#: ../../common/sshtools.py:113 +#: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "" -#: ../../common/sshtools.py:187 -#, python-format -msgid "" -"Failed to unlock SSH private key:\n" -"Error: %s" -msgstr "" - -#: ../../common/sshtools.py:194 +#: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" -#: ../../common/sshtools.py:199 +#: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" -#: ../../common/sshtools.py:217 +#: ../../common/sshtools.py:278 #, python-format msgid "" "Password-less authentication for %(user)s@%(host)s failed. Look at 'man " "backintime' for further instructions." msgstr "" -#: ../../common/sshtools.py:229 +#: ../../common/sshtools.py:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" -#: ../../common/sshtools.py:254 +#: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" -#: ../../common/sshtools.py:274 +#: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" -#: ../../common/sshtools.py:276 +#: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:278 +#: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:280 +#: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" -#: ../../common/sshtools.py:302 +#: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" -#: ../../common/sshtools.py:325 ../../common/sshtools.py:383 +#: ../../common/sshtools.py:423 ../../common/sshtools.py:553 #, python-format msgid "" "Remote host %(host)s doesn't support '%(command)s':\n" @@ -747,7 +767,7 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:387 +#: ../../common/sshtools.py:556 #, python-format msgid "" "Check commands on host %(host)s returned unknown error:\n" @@ -755,87 +775,133 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:400 +#: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "" -#: ../../gnome/app.py:189 ../../kde4/app.py:143 ../../kde4/app.py:159 -#: ../../gnome/mainwindow.glade:225 +#: ../../qt4/app.py:81 +msgid "Refresh snapshots list" +msgstr "Actualizar la lista de instantáneas" + +#: ../../qt4/app.py:91 +msgid "View Snapshot Log" +msgstr "Ver registro de instantáneas" + +#: ../../qt4/app.py:94 +msgid "View Last Log" +msgstr "Ver último registro" + +#: ../../qt4/app.py:99 ../../qt4/settingsdialog.py:51 +msgid "Settings" +msgstr "Preferencias" + +#: ../../qt4/app.py:104 +msgid "Shutdown" +msgstr "" + +#: ../../qt4/app.py:105 +msgid "Shutdown system after snapshot has finished." +msgstr "" + +#: ../../qt4/app.py:111 +msgid "Exit" +msgstr "Salir" + +#: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 msgid "Help" msgstr "Ayuda" -#: ../../gnome/app.py:191 ../../kde4/app.py:146 -#: ../../gnome/mainwindow.glade:223 +#: ../../qt4/app.py:122 +msgid "Config File Help" +msgstr "" + +#: ../../qt4/app.py:125 msgid "Website" msgstr "Sitio web" -#: ../../gnome/app.py:192 ../../kde4/app.py:148 +#: ../../qt4/app.py:127 ../../qt4/app.py:982 +msgid "Changelog" +msgstr "" + +#: ../../qt4/app.py:129 msgid "FAQ" msgstr "" -#: ../../gnome/app.py:193 ../../kde4/app.py:150 +#: ../../qt4/app.py:131 msgid "Ask a question" msgstr "" -#: ../../gnome/app.py:194 ../../kde4/app.py:152 +#: ../../qt4/app.py:133 msgid "Report a bug" msgstr "" -#: ../../gnome/app.py:196 ../../kde4/app.py:155 +#: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "Acerca de" -#: ../../gnome/app.py:202 ../../gnome/app.py:887 -#: ../../gnome/restoredialog.py:84 ../../gnome/snapshotsdialog.py:83 -#: ../../gnome/snapshotsdialog.py:244 ../../kde4/app.py:206 -#: ../../kde4/app.py:216 ../../kde4/restoredialog.py:68 -#: ../../kde4/snapshotsdialog.py:111 ../../kde4/snapshotsdialog.py:117 -#: ../../gnome/mainwindow.glade:350 ../../gnome/mainwindow.glade:352 -#: ../../gnome/snapshotsdialog.glade:169 ../../gnome/snapshotsdialog.glade:171 +#: ../../qt4/app.py:163 +msgid "Up" +msgstr "Arriba" + +#: ../../qt4/app.py:184 ../../qt4/app.py:199 ../../qt4/app.py:233 +#: ../../qt4/restoredialog.py:62 ../../qt4/settingsdialog.py:1818 +#: ../../qt4/snapshotsdialog.py:134 ../../qt4/snapshotsdialog.py:139 msgid "Restore" msgstr "Restaurar" -#: ../../gnome/app.py:203 ../../gnome/app.py:888 ../../gnome/gnometools.py:67 -#: ../../gnome/snapshotsdialog.py:84 ../../gnome/snapshotsdialog.py:245 -#: ../../kde4/app.py:208 ../../kde4/restoredialog.py:42 -#: ../../kde4/snapshotsdialog.py:113 +#: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 +#: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "Recuperar en ..." -#: ../../gnome/app.py:205 ../../gnome/app.py:896 ../../gnome/app.py:1146 -#: ../../kde4/app.py:1041 -#, python-format -msgid "Restore '%s'" -msgstr "Recuperar '%s'" +#: ../../qt4/app.py:194 +msgid "Restore and delete new files" +msgstr "" -#: ../../gnome/app.py:207 ../../gnome/app.py:897 ../../gnome/app.py:1147 -#: ../../kde4/app.py:1042 +#: ../../qt4/app.py:201 #, python-format -msgid "Restore '%s' to ..." -msgstr "Recuperar '%s' en" +msgid "" +"Restore selected file or folder.\n" +"If this button is grayed out this is most likely because \"%(now)s\" is " +"selected in left hand snapshots list." +msgstr "" -#: ../../gnome/app.py:249 -msgid "Name" -msgstr "Nombre" - -#: ../../gnome/app.py:260 -msgid "Size" -msgstr "Tamaño" - -#: ../../gnome/app.py:267 -msgid "Date" -msgstr "Fecha" - -#: ../../gnome/app.py:286 ../../gnome/app.py:883 -#: ../../gnome/snapshotsdialog.py:116 ../../kde4/app.py:171 -#: ../../kde4/app.py:221 ../../kde4/snapshotsdialog.py:91 -#: ../../gnome/mainwindow.glade:366 ../../gnome/mainwindow.glade:368 -#: ../../gnome/snapshotsdialog.glade:8 +#: ../../qt4/app.py:206 ../../qt4/logviewdialog.py:67 +#: ../../qt4/qt4tools.py:160 ../../qt4/snapshotsdialog.py:96 msgid "Snapshots" msgstr "Instantáneas" -#: ../../gnome/app.py:348 ../../kde4/app.py:362 +#: ../../qt4/app.py:213 +msgid "Snapshot" +msgstr "" + +#: ../../qt4/app.py:224 +msgid "View" +msgstr "" + +#: ../../qt4/app.py:295 +msgid "" +"This folder doesn't exist\n" +"in the current selected snapshot!" +msgstr "" + +#: ../../qt4/app.py:359 +msgid "Add to Include" +msgstr "" + +#: ../../qt4/app.py:360 +msgid "Add to Exclude" +msgstr "" + +#: ../../qt4/app.py:416 +#, python-format +msgid "" +"%(appName)s is not configured. Would you like to restore a previous " +"configuration?" +msgstr "" + +#: ../../qt4/app.py:440 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it and then press OK" @@ -843,641 +909,741 @@ "No se pudo encontrar la carpeta de instantáneas.\n" "Si se encuentra en un dispositivo extraíble, por favor, conéctelo y pulse OK" -#: ../../gnome/app.py:619 ../../kde4/app.py:598 +#: ../../qt4/app.py:473 +msgid "" +"If you close this window Back In Time will not be able to shutdown your " +"system when the snapshot has finished.\n" +"Do you really want to close?" +msgstr "" + +#: ../../qt4/app.py:667 ../../qt4/app.py:703 msgid "Working:" msgstr "Trabajando:" -#: ../../gnome/app.py:623 ../../kde4/app.py:602 +#: ../../qt4/app.py:707 msgid "Error:" msgstr "Error:" -#: ../../gnome/app.py:636 ../../kde4/app.py:649 +#: ../../qt4/app.py:726 ../../qt4/qt4systrayicon.py:153 +msgid "Sent:" +msgstr "" + +#: ../../qt4/app.py:727 ../../qt4/qt4systrayicon.py:154 +msgid "Speed:" +msgstr "" + +#: ../../qt4/app.py:728 ../../qt4/qt4systrayicon.py:155 +msgid "ETA:" +msgstr "" + +#: ../../qt4/app.py:777 msgid "Global" msgstr "Global" -#: ../../gnome/app.py:638 ../../kde4/app.py:651 +#: ../../qt4/app.py:779 msgid "Home" msgstr "Carpeta Personal" -#: ../../gnome/app.py:662 -msgid "Bookmarks" -msgstr "Marcadores" - -#: ../../gnome/app.py:675 ../../kde4/app.py:662 +#: ../../qt4/app.py:794 msgid "Backup folders" msgstr "Carpeta de copias de seguridad" -#: ../../gnome/app.py:701 ../../kde4/app.py:734 -msgid "Today" -msgstr "Hoy" +#: ../../qt4/app.py:849 +msgid "This is NOT a snapshot but a live view of your local files" +msgstr "" -#: ../../gnome/app.py:705 ../../kde4/app.py:738 -msgid "Yesterday" -msgstr "Ayer" +#: ../../qt4/app.py:860 ../../qt4/app.py:1476 +#, python-format +msgid "Last check %s" +msgstr "" -#: ../../gnome/app.py:709 ../../kde4/app.py:742 -msgid "This week" -msgstr "Esta semana" +#: ../../qt4/app.py:1004 +#, python-format +msgid "" +"Backup local files before overwriting or\n" +"removing with trailing '%(suffix)s'." +msgstr "" -#: ../../gnome/app.py:713 ../../kde4/app.py:746 -msgid "Last week" -msgstr "Última semana" +#: ../../qt4/app.py:1010 +msgid "" +"Are you sure you want to remove all newer files in your original folder?" +msgstr "" -#: ../../gnome/app.py:764 ../../kde4/app.py:398 +#: ../../qt4/app.py:1014 msgid "" -"If you close this window Back In Time will not be able to shutdown your " -"system when the snapshot has finished.\n" -"Do you really want to close?" +"WARNING: deleting files in filesystem root could break your whole system!!!" +msgstr "" + +#: ../../qt4/app.py:1016 +msgid "Files to be restored:" msgstr "" -#: ../../gnome/app.py:881 ../../gnome/snapshotsdialog.py:238 -msgid "Open" -msgstr "Abrir" +#: ../../qt4/app.py:1031 +msgid "Do you really want to restore this files(s):" +msgstr "" -#: ../../gnome/app.py:1123 ../../kde4/app.py:1010 +#: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "Instantánea: %s" -#: ../../gnome/app.py:1124 ../../kde4/app.py:1011 +#: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "Ver la instantánea hecha el %s" -#: ../../gnome/app.py:1126 ../../kde4/app.py:1013 +#: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "Ver el contenido actual del disco" -#: ../../gnome/logviewdialog.py:106 ../../gnome/settingsdialog.py:414 -#: ../../kde4/logviewdialog.py:83 ../../kde4/settingsdialog.py:590 -msgid "All" -msgstr "Todo" - -#: ../../gnome/logviewdialog.py:107 ../../gnome/settingsdialog.py:412 -#: ../../kde4/logviewdialog.py:84 ../../kde4/settingsdialog.py:588 -msgid "Errors" -msgstr "Errores" - -#: ../../gnome/logviewdialog.py:112 ../../kde4/logviewdialog.py:89 -msgid "Changes" -msgstr "Cambios" - -#: ../../gnome/logviewdialog.py:115 ../../kde4/logviewdialog.py:92 -msgid "Informations" -msgstr "Informaciones" - -#: ../../gnome/settingsdialog.py:235 ../../kde4/settingsdialog.py:387 -msgid "Include files and folders" -msgstr "Incluir archivos y carpetas" - -#: ../../gnome/settingsdialog.py:264 -msgid "Exclude patterns, files or folders" -msgstr "Excluir patrones, archivos o carpetas" - -#: ../../gnome/settingsdialog.py:411 ../../kde4/settingsdialog.py:587 -msgid "None" -msgstr "Ninguno" - -#: ../../gnome/settingsdialog.py:413 ../../kde4/settingsdialog.py:589 -msgid "Changes & Errors" -msgstr "Cambios & Errores" +#: ../../qt4/app.py:1268 +#, python-format +msgid "Restore '%s'" +msgstr "Recuperar '%s'" -#: ../../gnome/settingsdialog.py:458 -msgid "Snapshots folder" -msgstr "Carpeta de instantáneas" +#: ../../qt4/app.py:1269 +#, python-format +msgid "Restore '%s' to ..." +msgstr "Recuperar '%s' en" -#: ../../gnome/settingsdialog.py:466 ../../kde4/settingsdialog.py:1314 -msgid "Are you sure you want to change snapshots folder ?" -msgstr "¿Está seguro de que desea cambiar la carpeta de instantáneas?" +#: ../../qt4/app.py:1270 +#, python-format +msgid "Restore '%s' and delete new files" +msgstr "" -#: ../../gnome/settingsdialog.py:901 ../../kde4/settingsdialog.py:914 -msgid "" -"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " -"*/3 for periodic backups every 3 hours" +#: ../../qt4/app.py:1368 ../../qt4/app.py:1385 +msgid "Authors" msgstr "" -#: ../../gnome/settingsdialog.py:1141 ../../kde4/settingsdialog.py:653 -msgid "New profile" -msgstr "Nuevo perfil" +#: ../../qt4/app.py:1369 ../../qt4/app.py:1388 +msgid "Translations" +msgstr "" -#: ../../gnome/settingsdialog.py:1155 ../../kde4/settingsdialog.py:669 -msgid "Rename profile" -msgstr "Renombrar perfil" +#: ../../qt4/app.py:1370 ../../qt4/app.py:1391 +msgid "License" +msgstr "" -#: ../../gnome/settingsdialog.py:1167 ../../kde4/settingsdialog.py:683 -#, python-format -msgid "Are you sure you want to delete the profile \"%s\" ?" -msgstr "¿Está seguro de que quiere eliminar el perfil \"%s\" ?" +#: ../../qt4/logviewdialog.py:49 +msgid "Last Log View" +msgstr "" -#: ../../gnome/settingsdialog.py:1173 ../../kde4/settingsdialog.py:1292 -msgid "Include folder" -msgstr "Incluir carpeta" +#: ../../qt4/logviewdialog.py:51 +msgid "Snapshot Log View" +msgstr "" -#: ../../gnome/settingsdialog.py:1193 ../../kde4/settingsdialog.py:1278 -msgid "Include file" -msgstr "Incluir archivo" +#: ../../qt4/logviewdialog.py:59 ../../qt4/settingsdialog.py:59 +#: ../../qt4/settingsdialog.py:274 ../../qt4/settingsdialog.py:1899 +msgid "Profile:" +msgstr "Perfil:" -#: ../../gnome/settingsdialog.py:1235 ../../kde4/settingsdialog.py:1241 -msgid "Exclude pattern" -msgstr "Excluir patrón" +#: ../../qt4/logviewdialog.py:81 +msgid "Filter:" +msgstr "Filtro:" -#: ../../gnome/settingsdialog.py:1240 ../../kde4/settingsdialog.py:1251 -msgid "Exclude patterns can't contain ':' char !" -msgstr "¡Los patrones a excluir no pueden contener el carácter ':'!" +#: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 +msgid "All" +msgstr "Todo" -#: ../../gnome/settingsdialog.py:1257 ../../kde4/settingsdialog.py:1261 -msgid "Exclude folder" -msgstr "Excluir carpeta" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 +#: ../../qt4/settingsdialog.py:657 +msgid "Errors" +msgstr "Errores" -#: ../../gnome/snapshotsdialog.py:240 -msgid "Jump to" -msgstr "Ir a" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 +msgid "Changes" +msgstr "Cambios" -#: ../../gnome/snapshotsdialog.py:277 ../../kde4/snapshotsdialog.py:339 -msgid "You can't compare a snapshot to itself" -msgstr "No es posible comparar una instantánea consigo misma" +#: ../../qt4/logviewdialog.py:92 +msgid "Informations" +msgstr "Informaciones" -#: ../../gnome/snapshotsdialog.py:284 ../../kde4/snapshotsdialog.py:346 -#, python-format -msgid "Command not found: %s" -msgstr "Orden no encontrada: %s" +#: ../../qt4/logviewdialog.py:101 +msgid "[E] Error, [I] Information, [C] Change" +msgstr "[E] Error, [I] Información, [C] Cambiar" -#: ../../gnome/snapshotsdialog.py:307 ../../kde4/snapshotsdialog.py:367 -#, python-format -msgid "" -"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" +#: ../../qt4/logviewdialog.py:104 +msgid "decode paths" msgstr "" -#: ../../gnome/snapshotsdialog.py:310 ../../kde4/snapshotsdialog.py:370 -#, python-format -msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +#: ../../qt4/messagebox.py:56 +msgid "Error" msgstr "" -#: ../../gnome/snapshotsdialog.py:312 ../../kde4/snapshotsdialog.py:372 -msgid "WARNING: This can not be revoked!" +#: ../../qt4/messagebox.py:62 ../../qt4/messagebox.py:68 +msgid "Question" msgstr "" -#: ../../gnome/snapshotsdialog.py:317 ../../kde4/snapshotsdialog.py:377 -#, python-format -msgid "Exclude \"%s\" from future snapshots?" +#: ../../qt4/qt4systrayicon.py:69 +msgid "Start BackInTime" msgstr "" -#: ../../kde4/app.py:86 ../../gnome/mainwindow.glade:58 -#: ../../gnome/mainwindow.glade:60 -msgid "Refresh snapshots list" -msgstr "Actualizar la lista de instantáneas" - -#: ../../kde4/app.py:98 ../../gnome/mainwindow.glade:105 -msgid "View Snapshot Log" -msgstr "Ver registro de instantáneas" - -#: ../../kde4/app.py:102 ../../gnome/mainwindow.glade:121 -msgid "View Last Log" -msgstr "Ver último registro" +#: ../../qt4/qt4systrayicon.py:124 +msgid "Working..." +msgstr "Trabajando..." -#: ../../kde4/app.py:108 ../../kde4/settingsdialog.py:69 -#: ../../gnome/mainwindow.glade:144 ../../gnome/mainwindow.glade:146 -#: ../../gnome/settingsdialog.glade:7 -msgid "Settings" -msgstr "Preferencias" +#: ../../qt4/qt4tools.py:178 +msgid "Today" +msgstr "Hoy" -#: ../../kde4/app.py:124 ../../gnome/mainwindow.glade:169 -msgid "Shutdown system after snapshot has finished." -msgstr "" +#: ../../qt4/qt4tools.py:183 +msgid "Yesterday" +msgstr "Ayer" -#: ../../kde4/app.py:131 ../../gnome/mainwindow.glade:184 -#: ../../gnome/mainwindow.glade:186 -msgid "Exit" -msgstr "Salir" +#: ../../qt4/qt4tools.py:188 +msgid "This week" +msgstr "Esta semana" -#: ../../kde4/app.py:186 ../../gnome/mainwindow.glade:289 -msgid "Up" -msgstr "Arriba" +#: ../../qt4/qt4tools.py:193 +msgid "Last week" +msgstr "Última semana" -#: ../../kde4/app.py:244 -msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +#: ../../qt4/restoredialog.py:75 +msgid "Show full Log" msgstr "" -"¡Este directorio no existe\n" -"en la instantánea actual!" -#: ../../kde4/app.py:1140 ../../kde4/kde4systrayicon.py:117 -msgid "Working..." -msgstr "Trabajando..." - -#: ../../kde4/logviewdialog.py:55 -msgid "Error Log View" -msgstr "Vista del registro de errores" - -#: ../../kde4/logviewdialog.py:65 ../../kde4/settingsdialog.py:79 -#: ../../kde4/settingsdialog.py:293 ../../gnome/logviewdialog.glade:73 -#: ../../gnome/settingsdialog.glade:72 -msgid "Profile:" -msgstr "Perfil:" - -#: ../../kde4/logviewdialog.py:77 ../../gnome/logviewdialog.glade:110 -msgid "Filter:" -msgstr "Filtro:" +#: ../../qt4/settingsdialog.py:68 +msgid "Edit" +msgstr "Editar" -#: ../../kde4/logviewdialog.py:100 ../../gnome/logviewdialog.glade:169 -msgid "[E] Error, [I] Information, [C] Change" -msgstr "[E] Error, [I] Información, [C] Cambiar" +#: ../../qt4/settingsdialog.py:73 +msgid "Modify for Full System Backup" +msgstr "" -#: ../../kde4/logviewdialog.py:103 ../../gnome/logviewdialog.glade:195 -msgid "decode paths" +#: ../../qt4/settingsdialog.py:77 ../../qt4/settingsdialog.py:451 +msgid "Add" msgstr "" -#: ../../kde4/settingsdialog.py:88 -msgid "Edit" -msgstr "Editar" +#: ../../qt4/settingsdialog.py:81 ../../qt4/settingsdialog.py:408 +#: ../../qt4/settingsdialog.py:467 +msgid "Remove" +msgstr "" -#: ../../kde4/settingsdialog.py:106 ../../gnome/settingsdialog.glade:1207 +#: ../../qt4/settingsdialog.py:96 msgid "General" msgstr "General" -#: ../../kde4/settingsdialog.py:114 ../../gnome/settingsdialog.glade:199 +#: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "" -#: ../../kde4/settingsdialog.py:146 +#: ../../qt4/settingsdialog.py:119 +#, python-format +msgid "" +"Warning: %(app)s uses EncFS for encryption. A recent security audit " +"revealed several possible attack vectors for this. Please take a look at 'A " +"NOTE ON SECURITY' in 'man backintime'." +msgstr "" + +#: ../../qt4/settingsdialog.py:145 +msgid "Folder" +msgstr "" + +#: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" -#: ../../kde4/settingsdialog.py:158 ../../kde4/settingsdialog.py:283 -#: ../../gnome/settingsdialog.glade:323 ../../gnome/settingsdialog.glade:583 -#: ../../gnome/settingsdialog.glade:874 +#: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "Host:" -#: ../../kde4/settingsdialog.py:163 ../../gnome/settingsdialog.glade:350 -#: ../../gnome/settingsdialog.glade:610 +#: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "" -#: ../../kde4/settingsdialog.py:168 ../../kde4/settingsdialog.py:288 -#: ../../gnome/settingsdialog.glade:377 ../../gnome/settingsdialog.glade:637 -#: ../../gnome/settingsdialog.glade:902 +#: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "Usuario:" -#: ../../kde4/settingsdialog.py:173 ../../gnome/settingsdialog.glade:416 +#: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" -#: ../../kde4/settingsdialog.py:178 ../../gnome/settingsdialog.glade:459 +#: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" -#: ../../kde4/settingsdialog.py:184 +#: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "" -#: ../../kde4/settingsdialog.py:228 ../../kde4/settingsdialog.py:237 -#: ../../kde4/settingsdialog.py:243 ../../gnome/settingsdialog.glade:703 -#: ../../gnome/settingsdialog.glade:743 +#: ../../qt4/settingsdialog.py:201 +msgid "Key File" +msgstr "" + +#: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 +#: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "" -#: ../../kde4/settingsdialog.py:249 ../../gnome/settingsdialog.glade:775 +#: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" -#: ../../kde4/settingsdialog.py:252 ../../gnome/settingsdialog.glade:792 +#: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" -#: ../../kde4/settingsdialog.py:264 ../../gnome/settingsdialog.glade:968 +#: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "Avanzado" -#: ../../kde4/settingsdialog.py:276 ../../gnome/settingsdialog.glade:848 -msgid "Auto Host / User / Profile Id" -msgstr "Auto Host / Usuario / Perfil ID" +#: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 +msgid "Full snapshot path: " +msgstr "" -#: ../../kde4/settingsdialog.py:301 +#: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "Tareas programadas" -#: ../../kde4/settingsdialog.py:311 ../../gnome/settingsdialog.glade:1092 +#: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "Día:" -#: ../../kde4/settingsdialog.py:322 ../../gnome/settingsdialog.glade:1079 +#: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "Día de la semana" -#: ../../kde4/settingsdialog.py:333 ../../gnome/settingsdialog.glade:1066 +#: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "Hora:" -#: ../../kde4/settingsdialog.py:344 ../../gnome/settingsdialog.glade:1053 +#: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "" -#: ../../kde4/settingsdialog.py:353 ../../gnome/settingsdialog.glade:1014 +#: ../../qt4/settingsdialog.py:339 msgid "" -"Run Back In Time periodically with anacron. This is useful if the computer " -"is not running regular." +"Run Back In Time repeatedly. This is useful if the computer is not running " +"regular." msgstr "" -#: ../../kde4/settingsdialog.py:357 ../../gnome/settingsdialog.glade:1040 -msgid "Frequency in days:" +#: ../../qt4/settingsdialog.py:344 +msgid "Every:" msgstr "" -#: ../../kde4/settingsdialog.py:368 ../../gnome/settingsdialog.glade:1026 +#: ../../qt4/settingsdialog.py:362 msgid "" "Run Back In Time as soon as the drive is connected (only once every X " "days).\n" "You will be prompted for your sudo password." msgstr "" -#: ../../kde4/settingsdialog.py:379 ../../gnome/settingsdialog.glade:1310 +#: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Incluir" -#: ../../kde4/settingsdialog.py:418 ../../gnome/settingsdialog.glade:1474 +#: ../../qt4/settingsdialog.py:381 +msgid "Include files and folders" +msgstr "Incluir archivos y carpetas" + +#: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Excluir" -#: ../../kde4/settingsdialog.py:421 ../../gnome/settingsdialog.glade:1328 +#: ../../qt4/settingsdialog.py:417 msgid "" "Warning: Wildcards ('foo*', '[fF]oo', 'fo?') will be ignored with " "mode 'SSH encrypted'.\n" "Only separate asterisk are allowed ('foo/*', 'foo/**/bar')" msgstr "" -#: ../../kde4/settingsdialog.py:430 +#: ../../qt4/settingsdialog.py:425 +msgid "Exclude patterns, files or folders" +msgstr "Excluir patrones, archivos o carpetas" + +#: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "Se recomienda:" -#: ../../kde4/settingsdialog.py:460 ../../gnome/settingsdialog.glade:1905 +#: ../../qt4/settingsdialog.py:463 +msgid "Add default" +msgstr "" + +#: ../../qt4/settingsdialog.py:474 +msgid "Exclude files bigger than: " +msgstr "" + +#: ../../qt4/settingsdialog.py:475 +#, python-format +msgid "" +"Exclude files bigger than value in %(prefix)s.\n" +"With 'Full rsync mode' disabled this will only affect new files\n" +"because for rsync this is a transfer option, not an exclude option.\n" +"So big files that has been backed up before will remain in snapshots\n" +"even if they had changed." +msgstr "" + +#: ../../qt4/settingsdialog.py:493 msgid "Auto-remove" msgstr "Auto eliminar" -#: ../../kde4/settingsdialog.py:464 ../../gnome/settingsdialog.glade:1608 +#: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "Anterior a:" -#: ../../kde4/settingsdialog.py:478 ../../gnome/settingsdialog.glade:1624 +#: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "Si el espacio libre es menor que:" -#: ../../kde4/settingsdialog.py:490 ../../gnome/settingsdialog.glade:1642 +#: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" -#: ../../kde4/settingsdialog.py:514 ../../gnome/settingsdialog.glade:1697 +#: ../../qt4/settingsdialog.py:551 +msgid "Run in background on remote Host." +msgstr "" + +#: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "Mantener todas las instantáneas hasta la última" -#: ../../kde4/settingsdialog.py:517 ../../kde4/settingsdialog.py:522 -#: ../../gnome/settingsdialog.glade:1705 ../../gnome/settingsdialog.glade:1729 +#: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "día(s)" -#: ../../kde4/settingsdialog.py:519 ../../gnome/settingsdialog.glade:1717 +#: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "" -#: ../../kde4/settingsdialog.py:524 ../../gnome/settingsdialog.glade:1743 +#: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "" -#: ../../kde4/settingsdialog.py:527 +#: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "semana(s)" -#: ../../kde4/settingsdialog.py:529 ../../gnome/settingsdialog.glade:1769 +#: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "" -#: ../../kde4/settingsdialog.py:532 ../../gnome/settingsdialog.glade:1781 +#: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "mes(es)" -#: ../../kde4/settingsdialog.py:534 ../../gnome/settingsdialog.glade:1795 +#: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "Mantener una instantánea por año para todos los años" -#: ../../kde4/settingsdialog.py:546 ../../gnome/settingsdialog.glade:2104 +#: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Opciones" -#: ../../kde4/settingsdialog.py:552 ../../gnome/settingsdialog.glade:1937 +#: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "Desactivar instantáneas cuando se esté con batería" -#: ../../kde4/settingsdialog.py:555 +#: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" msgstr "El estado de la energía no está disponible en el sistema" -#: ../../kde4/settingsdialog.py:558 ../../gnome/settingsdialog.glade:1955 -msgid "Backup files on restore" -msgstr "Archivos de respaldo en restauración" +#: ../../qt4/settingsdialog.py:611 +msgid "Run only one snapshot at a time" +msgstr "" + +#: ../../qt4/settingsdialog.py:612 +msgid "" +"Other snapshots will be blocked until the current snapshot is done.\n" +"This is a global option. So it will effect all profiles for this user.\n" +"But you need to activate this for all other users, too." +msgstr "" + +#: ../../qt4/settingsdialog.py:617 +msgid "Backup replaced files on restore" +msgstr "" + +#: ../../qt4/settingsdialog.py:618 +#, python-format +msgid "" +"Newer versions of files will be renamed with trailing '%(suffix)s' before " +"restoring.\n" +"If you don't need them anymore you can remove them with '%(cmd)s'" +msgstr "" -#: ../../kde4/settingsdialog.py:561 ../../gnome/settingsdialog.glade:1972 +#: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "Continuar si hay errores (mantener imágenes incompletas)" -#: ../../kde4/settingsdialog.py:564 ../../gnome/settingsdialog.glade:1989 +#: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "Utilizar la suma de verificación (checksum) para detectar cambios" -#: ../../kde4/settingsdialog.py:567 ../../gnome/settingsdialog.glade:2006 +#: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "Modo rsync completo. Puede ser más rápido pero:" -#: ../../kde4/settingsdialog.py:568 ../../gnome/settingsdialog.glade:2032 +#: ../../qt4/settingsdialog.py:634 msgid "" -"- snapshots are no read-only\n" -"- destination file-system must support all linux attributes (dates, rights, " +"- snapshots are not read-only\n" +"- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" "-instantáneas no son de solo lectura\n" "-El sistema de ficheros destino debe soportar todos los atributos de Linux " "(fechas, permisos, usuario,grupo...)" -#: ../../kde4/settingsdialog.py:575 ../../gnome/settingsdialog.glade:2045 +#: ../../qt4/settingsdialog.py:641 +msgid "Take a new snapshot regardless of there were changes or not." +msgstr "" + +#: ../../qt4/settingsdialog.py:644 msgid "Check for changes (don't take a new snapshot if nothing changed)" msgstr "chequear cambios (no tomar instantánea si nada ha cambiado)" -#: ../../kde4/settingsdialog.py:582 +#: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "Detalle del log" -#: ../../kde4/settingsdialog.py:597 ../../gnome/settingsdialog.glade:2366 -msgid "Expert Options" -msgstr "Opciones avanzadas" +#: ../../qt4/settingsdialog.py:656 +msgid "None" +msgstr "Ninguno" + +#: ../../qt4/settingsdialog.py:658 +msgid "Changes & Errors" +msgstr "Cambios & Errores" -#: ../../kde4/settingsdialog.py:600 +#: ../../qt4/settingsdialog.py:674 msgid "Change these options only if you really know what you are doing !" msgstr "¡Cambie estas opciones sólo si realmente sabe lo que está haciendo!" -#: ../../kde4/settingsdialog.py:608 ../../gnome/settingsdialog.glade:2133 -msgid "Run 'nice' as cron job (default: enabled)" -msgstr "Ejecutar 'nice' como tarea de cron (por defecto: activado)" +#: ../../qt4/settingsdialog.py:678 +msgid "Run 'nice':" +msgstr "" + +#: ../../qt4/settingsdialog.py:684 ../../qt4/settingsdialog.py:696 +msgid "as cron job" +msgstr "" + +#: ../../qt4/settingsdialog.py:687 ../../qt4/settingsdialog.py:702 +#: ../../qt4/settingsdialog.py:716 +msgid "on remote host" +msgstr "" + +#: ../../qt4/settingsdialog.py:690 +msgid "Run 'ionice':" +msgstr "" + +#: ../../qt4/settingsdialog.py:699 +msgid "when taking a manual snapshot" +msgstr "" -#: ../../kde4/settingsdialog.py:611 ../../gnome/settingsdialog.glade:2150 -msgid "Run 'ionice' as cron job (default: enabled)" -msgstr "Ejecutar 'ionice' como trabajo de cron (por defecto: habilitado)" +#: ../../qt4/settingsdialog.py:706 +msgid "Run 'rsync' with 'nocache':" +msgstr "" -#: ../../kde4/settingsdialog.py:614 ../../gnome/settingsdialog.glade:2167 -msgid "Run 'ionice' when taking a manual snapshot (default: disabled)" +#: ../../qt4/settingsdialog.py:712 +msgid "on local machine" msgstr "" -"Ejecutar 'ionice' cuando se tome una instantánea de forma manual (por " -"defecto:desactivado)" -#: ../../kde4/settingsdialog.py:617 ../../gnome/settingsdialog.glade:2184 -msgid "Run 'nice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:719 +msgid "Redirect stdout to /dev/null in cronjobs." msgstr "" -#: ../../kde4/settingsdialog.py:620 ../../gnome/settingsdialog.glade:2201 -msgid "Run 'ionice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:725 +msgid "Redirect stderr to /dev/null in cronjobs." msgstr "" -#: ../../kde4/settingsdialog.py:626 ../../gnome/settingsdialog.glade:2224 +#: ../../qt4/settingsdialog.py:734 msgid "Limit rsync bandwidth usage: " msgstr "" -#: ../../kde4/settingsdialog.py:629 ../../gnome/settingsdialog.glade:2259 +#: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" -#: ../../kde4/settingsdialog.py:634 ../../gnome/settingsdialog.glade:2280 +#: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "Preservar ACL" -#: ../../kde4/settingsdialog.py:637 ../../gnome/settingsdialog.glade:2297 +#: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "Preservar atributos extendidos (xattr)" -#: ../../kde4/settingsdialog.py:640 ../../gnome/settingsdialog.glade:2314 +#: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute links)" msgstr "Copiar vínculos incompletos (funciona solo con vínculos absolutos)" -#: ../../kde4/settingsdialog.py:643 ../../gnome/settingsdialog.glade:2331 -msgid "Copy links (dereference symbolic links)" -msgstr "Copiar vínculos (desarbitrar vínculos simbólicos)" +#: ../../qt4/settingsdialog.py:834 +msgid "Paste additional options to rsync" +msgstr "" -#: ../../kde4/snapshotsdialog.py:56 ../../gnome/snapshotsdialog.glade:314 -msgid "Command:" -msgstr "Orden:" +#: ../../qt4/settingsdialog.py:837 +msgid "" +"Options must be quoted e.g. --exclude-from=\"/path/to/my exclude file\"." +msgstr "" -#: ../../kde4/snapshotsdialog.py:60 ../../gnome/snapshotsdialog.glade:322 -msgid "Parameters:" -msgstr "Parámetros:" +#: ../../qt4/settingsdialog.py:847 +msgid "Add prefix to SSH commands" +msgstr "" -#: ../../kde4/snapshotsdialog.py:123 ../../gnome/snapshotsdialog.glade:184 -#: ../../gnome/snapshotsdialog.glade:186 -msgid "Delete" +#: ../../qt4/settingsdialog.py:850 +#, python-format +msgid "" +"Prefix to run before every command on remote host.\n" +"Variables need to be escaped with \\$FOO.\n" +"This doesn't touch rsync. So to add a prefix\n" +"for rsync use \"%(cb_rsync_options)s\" with\n" +"%(rsync_options_value)s\n" +"\n" +"%(default)s: %(def_value)s" msgstr "" -#: ../../kde4/snapshotsdialog.py:128 ../../gnome/snapshotsdialog.glade:199 -#: ../../gnome/snapshotsdialog.glade:201 -msgid "Select All" +#: ../../qt4/settingsdialog.py:858 ../../qt4/settingsdialog.py:1691 +msgid "default" msgstr "" -#: ../../kde4/snapshotsdialog.py:132 ../../gnome/snapshotsdialog.glade:88 -msgid "List only different snapshots" -msgstr "Listar sólo instantáneas diferentes" +#: ../../qt4/settingsdialog.py:875 +msgid "Restore Config" +msgstr "" -#: ../../kde4/snapshotsdialog.py:139 ../../gnome/snapshotsdialog.glade:110 -msgid "List only equal snapshots to: " +#: ../../qt4/settingsdialog.py:891 +msgid "" +"Full system backup can only create a snapshot to be restored to the same " +"physical disk(s) with the same disk partitioning as from the source; " +"restoring to new physical disks or the same disks with different " +"partitioning will yield a potentially broken and unusable system.\n" +"\n" +"Full system backup will override some settings that may have been " +"customized. Continue?" msgstr "" -#: ../../kde4/snapshotsdialog.py:149 ../../gnome/snapshotsdialog.glade:146 -msgid "Deep check (more accurate, but slow)" -msgstr "Comprobación rigurosa (más precisa, pero lenta)" +#: ../../qt4/settingsdialog.py:922 +msgid "New profile" +msgstr "Nuevo perfil" -#: ../../kde4/snapshotsdialog.py:174 -msgid "Go To" -msgstr "Ir a" +#: ../../qt4/settingsdialog.py:938 +msgid "Rename profile" +msgstr "Renombrar perfil" -#: ../../gnome/logviewdialog.glade:9 -msgid "Log View" -msgstr "Visor de registros" +#: ../../qt4/settingsdialog.py:952 +#, python-format +msgid "Are you sure you want to delete the profile \"%s\" ?" +msgstr "¿Está seguro de que quiere eliminar el perfil \"%s\" ?" -#: ../../gnome/logviewdialog.glade:179 -msgid "scroll down automatic" +#: ../../qt4/settingsdialog.py:1191 +msgid "" +"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " +"*/3 for periodic backups every 3 hours" msgstr "" -#: ../../gnome/mainwindow.glade:7 -msgid "Back In Time" -msgstr "Back In Time" +#: ../../qt4/settingsdialog.py:1489 +msgid "Exclude pattern" +msgstr "Excluir patrón" -#: ../../gnome/mainwindow.glade:171 -msgid "Shutdown" -msgstr "" +#: ../../qt4/settingsdialog.py:1506 +msgid "Exclude folder" +msgstr "Excluir carpeta" -#: ../../gnome/mainwindow.glade:287 -msgid "Parent folder" -msgstr "Carpeta padre" +#: ../../qt4/settingsdialog.py:1525 +msgid "Include file" +msgstr "Incluir archivo" -#: ../../gnome/mainwindow.glade:451 +#: ../../qt4/settingsdialog.py:1533 ../../qt4/settingsdialog.py:1553 +#, python-format msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +"\"%s\" is a symlink. The linked target will not be backed up until you " +"include it, too.\n" +"Would you like to include the symlinks target instead?" msgstr "" -"¡Este directorio no existe\n" -"en la instantánea actual!" -#: ../../gnome/settingsdialog.glade:483 -msgid "Private key:" -msgstr "" +#: ../../qt4/settingsdialog.py:1545 +msgid "Include folder" +msgstr "Incluir carpeta" + +#: ../../qt4/settingsdialog.py:1572 +msgid "Are you sure you want to change snapshots folder ?" +msgstr "¿Está seguro de que desea cambiar la carpeta de instantáneas?" -#: ../../gnome/settingsdialog.glade:534 -msgid "Advanced SSH Settings" +#: ../../qt4/settingsdialog.py:1688 +msgid "enabled" msgstr "" -#: ../../gnome/settingsdialog.glade:552 -msgid "SSH Settings" +#: ../../qt4/settingsdialog.py:1690 +msgid "disabled" msgstr "" -#: ../../gnome/settingsdialog.glade:815 -msgid "Password" +#: ../../qt4/settingsdialog.py:1715 +msgid "Restore Settings" msgstr "" -#: ../../gnome/settingsdialog.glade:930 -msgid "Profile Id:" -msgstr "ID del Perfil:" +#: ../../qt4/settingsdialog.py:1732 +msgid " and add your user to group 'fuse'" +msgstr "" -#: ../../gnome/settingsdialog.glade:1115 +#: ../../qt4/settingsdialog.py:1736 +#, python-format msgid "" -"hours seperate by comma ( e.g. 8,12,18,23) or */3 for periodic backups every " -"3 hours (cron style)" +"Please navigate to the snapshot from which you want to restore %(appName)s's " +"configuration. The path may look like: \n" +"%(samplePath)s\n" +"\n" +"If your snapshots are on a remote drive or if they are encrypted you need to " +"manually mount them first. If you use Mode SSH you also may need to set up " +"public key login to the remote host%(addFuse)s.\n" +"Take a look at 'man backintime'." msgstr "" -#: ../../gnome/settingsdialog.glade:1163 -msgid "Schedule" -msgstr "Agenda programada" +#: ../../qt4/settingsdialog.py:1794 ../../qt4/settingsdialog.py:1854 +msgid "No config found" +msgstr "" -#: ../../gnome/settingsdialog.glade:1363 -msgid "Highly recommended:" -msgstr "Se recomienda:" +#: ../../qt4/snapshotsdialog.py:56 +msgid "Command:" +msgstr "Orden:" -#: ../../gnome/settingsdialog.glade:1377 -msgid "label" -msgstr "etiqueta" +#: ../../qt4/snapshotsdialog.py:60 +msgid "Parameters:" +msgstr "Parámetros:" -#: ../../gnome/settingsdialog.glade:1755 -msgid "week(s)" -msgstr "semana(s)" +#: ../../qt4/snapshotsdialog.py:106 +msgid "List only different snapshots" +msgstr "Listar sólo instantáneas diferentes" -#: ../../gnome/settingsdialog.glade:2069 -msgid "Log level:" -msgstr "Detalle de registro" +#: ../../qt4/snapshotsdialog.py:113 +msgid "List only equal snapshots to: " +msgstr "" + +#: ../../qt4/snapshotsdialog.py:123 +msgid "Deep check (more accurate, but slow)" +msgstr "Comprobación rigurosa (más precisa, pero lenta)" + +#: ../../qt4/snapshotsdialog.py:144 +msgid "Delete" +msgstr "" -#: ../../gnome/settingsdialog.glade:2121 +#: ../../qt4/snapshotsdialog.py:148 +msgid "Select All" +msgstr "" + +#: ../../qt4/snapshotsdialog.py:172 +msgid "Go To" +msgstr "Ir a" + +#: ../../qt4/snapshotsdialog.py:326 +msgid "You can't compare a snapshot to itself" +msgstr "No es posible comparar una instantánea consigo misma" + +#: ../../qt4/snapshotsdialog.py:333 +#, python-format +msgid "Command not found: %s" +msgstr "Orden no encontrada: %s" + +#: ../../qt4/snapshotsdialog.py:354 +#, python-format msgid "" -"Change these options only if you really know what you are doing !" +"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" msgstr "" -"¡Cambie estas opciones sólo si realmente sabe lo que está haciendo!" -#: ../../gnome/textinputdialog.glade:7 -msgid "Pattern" -msgstr "Patrón" +#: ../../qt4/snapshotsdialog.py:357 +#, python-format +msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +msgstr "" -#: ../../gnome/textinputdialog.glade:70 -msgid "Text" +#: ../../qt4/snapshotsdialog.py:359 +msgid "WARNING: This can not be revoked!" +msgstr "" + +#: ../../qt4/snapshotsdialog.py:374 +#, python-format +msgid "Exclude \"%s\" from future snapshots?" msgstr "" diff -Nru backintime-1.0.36/common/po/et.po backintime-1.1.12/common/po/et.po --- backintime-1.0.36/common/po/et.po 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/po/et.po 2016-01-11 18:07:58.000000000 +0000 @@ -7,206 +7,238 @@ msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2013-11-09 22:34+0100\n" -"PO-Revision-Date: 2012-06-21 10:25+0000\n" +"POT-Creation-Date: 2015-12-19 00:47+0100\n" +"PO-Revision-Date: 2015-09-09 21:51+0000\n" "Last-Translator: Tauno Erik \n" "Language-Team: Estonian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2014-08-06 10:20+0000\n" -"X-Generator: Launchpad (build 17147)\n" +"X-Launchpad-Export-Date: 2016-01-11 17:52+0000\n" +"X-Generator: Launchpad (build 17881)\n" -#: ../../common/config.py:72 +#: ../../common/configfile.py:60 +#, python-format +msgid "Failed to save config: %s" +msgstr "" + +#: ../../common/configfile.py:78 +#, python-format +msgid "Failed to load config: %s" +msgstr "" + +#: ../../common/configfile.py:352 ../../common/configfile.py:414 +#, python-format +msgid "Profile \"%s\" already exists !" +msgstr "Profiil \"%s\" on juba olemas!" + +#: ../../common/configfile.py:383 +msgid "You can't remove the last profile !" +msgstr "Sa ei saa eemaldada viimast profiili!" + +#: ../../common/config.py:76 msgid "Disabled" msgstr "Välja lülitatud" -#: ../../common/config.py:73 +#: ../../common/config.py:77 msgid "At every boot/reboot" msgstr "Igal käivitamisel/taaskäivitamisel" -#: ../../common/config.py:74 +#: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Iga 5 minuti tagant" -#: ../../common/config.py:75 +#: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Iga 10 minuti tagant" -#: ../../common/config.py:76 +#: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "" -#: ../../common/config.py:77 +#: ../../common/config.py:81 msgid "Every hour" msgstr "" -#: ../../common/config.py:78 +#: ../../common/config.py:82 msgid "Every 2 hours" msgstr "" -#: ../../common/config.py:79 +#: ../../common/config.py:83 msgid "Every 4 hours" msgstr "" -#: ../../common/config.py:80 +#: ../../common/config.py:84 msgid "Every 6 hours" msgstr "" -#: ../../common/config.py:81 +#: ../../common/config.py:85 msgid "Every 12 hours" msgstr "" -#: ../../common/config.py:82 +#: ../../common/config.py:86 msgid "Custom Hours" msgstr "" -#: ../../common/config.py:83 +#: ../../common/config.py:87 msgid "Every Day" msgstr "Iga päev" -#: ../../common/config.py:84 -msgid "Daily (anacron)" +#: ../../common/config.py:88 +msgid "Repeatedly (anacron)" msgstr "" -#: ../../common/config.py:85 +#: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "" -#: ../../common/config.py:86 +#: ../../common/config.py:90 msgid "Every Week" msgstr "Iga nädal" -#: ../../common/config.py:87 +#: ../../common/config.py:91 msgid "Every Month" msgstr "Iga kuu" -#: ../../common/config.py:91 +#: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Päev(a)" -#: ../../common/config.py:92 +#: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Nädal(at)" -#: ../../common/config.py:93 +#: ../../common/config.py:97 msgid "Year(s)" msgstr "Aasta(t)" -#: ../../common/config.py:100 +#: ../../common/config.py:101 +msgid "Hour(s)" +msgstr "" + +#: ../../common/config.py:104 +msgid "Month(s)" +msgstr "" + +#: ../../common/config.py:126 ../../qt4/settingsdialog.py:551 msgid " EXPERIMENTAL!" msgstr "" -#: ../../common/config.py:103 +#: ../../common/config.py:129 msgid "Local" msgstr "" -#: ../../common/config.py:104 +#: ../../common/config.py:130 msgid "SSH" msgstr "" -#: ../../common/config.py:104 ../../common/config.py:106 -#: ../../gnome/settingsdialog.py:475 ../../kde4/settingsdialog.py:1325 +#: ../../common/config.py:130 ../../common/config.py:132 +#: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "" -#: ../../common/config.py:105 +#: ../../common/config.py:131 msgid "Local encrypted" msgstr "" -#: ../../common/config.py:105 ../../common/config.py:106 +#: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "" -#: ../../common/config.py:106 +#: ../../common/config.py:132 msgid "SSH encrypted" msgstr "" -#: ../../common/config.py:112 +#: ../../common/config.py:135 msgid "Default" msgstr "" -#: ../../common/config.py:113 +#: ../../common/config.py:136 msgid "AES128-CTR" msgstr "" -#: ../../common/config.py:114 +#: ../../common/config.py:137 msgid "AES192-CTR" msgstr "" -#: ../../common/config.py:115 +#: ../../common/config.py:138 msgid "AES256-CTR" msgstr "" -#: ../../common/config.py:116 +#: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "" -#: ../../common/config.py:117 +#: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "" -#: ../../common/config.py:118 +#: ../../common/config.py:141 msgid "AES128-CBC" msgstr "" -#: ../../common/config.py:119 +#: ../../common/config.py:142 msgid "3DES-CBC" msgstr "" -#: ../../common/config.py:120 +#: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "" -#: ../../common/config.py:121 +#: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "" -#: ../../common/config.py:122 +#: ../../common/config.py:145 msgid "AES192-CBC" msgstr "" -#: ../../common/config.py:123 +#: ../../common/config.py:146 msgid "AES256-CBC" msgstr "" -#: ../../common/config.py:124 +#: ../../common/config.py:147 msgid "ARCFOUR" msgstr "" -#: ../../common/config.py:129 +#: ../../common/config.py:153 msgid "Main profile" msgstr "Peamine profiil" -#: ../../common/config.py:256 ../../common/config.py:275 -#: ../../common/config.py:286 ../../common/config.py:291 +#: ../../common/config.py:289 ../../common/config.py:296 +#: ../../common/config.py:307 ../../common/config.py:312 +#: ../../qt4/qt4systrayicon.py:61 #, python-format msgid "Profile: \"%s\"" msgstr "Profiil: \"%s\"" -#: ../../common/config.py:256 +#: ../../common/config.py:289 msgid "Snapshots folder is not valid !" msgstr "Tõmmise kataloog ei ole kehtiv!" -#: ../../common/config.py:275 +#: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "Sa pead valima vähemalt ühe kataloogi tagavarakoopia tegemiseks!" -#: ../../common/config.py:286 +#: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "Sa ei saa kaasata tagavarakoopia kataloogi ennast!" -#: ../../common/config.py:291 +#: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "Sa ei saa kaasata tagavarakoopia kataloogis olevaid katalooge!" -#: ../../common/config.py:361 +#: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s ei ole kataloog!" -#: ../../common/config.py:376 ../../common/config.py:389 +#: ../../common/config.py:380 +msgid "Host/User/Profile-ID must not be empty!" +msgstr "" + +#: ../../common/config.py:388 ../../common/config.py:420 #, python-format msgid "" "Can't write to: %s\n" @@ -215,56 +247,65 @@ "Ei saa kirjutada: %s\n" "Oled kindel, et sul kirjutamis õigused?" -#: ../../common/config.py:1286 +#: ../../common/config.py:400 +#, python-format msgid "" -"Can't find crontab.\n" -"Are you sure cron is installed ?\n" -"If not you should disable all automatic backups." +"Destination filesystem for '%(path)s' is formatted with FAT which doesn't " +"support hard-links. Please use a native Linux filesystem." msgstr "" -#: ../../common/config.py:1338 +#: ../../common/config.py:405 #, python-format -msgid "Schedule udev doesn't work with mode %s" +msgid "" +"Destination filsystem for '%(path)s' is a SMB mounted share. Please make " +"sure the remote SMB server supports symlinks or activate '%(copyLinks)s' in " +"'%(expertOptions)s'." msgstr "" -#: ../../common/config.py:1342 -#, python-format -msgid "Couldn't find UUID for \"%s\"" +#: ../../common/config.py:408 ../../qt4/settingsdialog.py:815 +msgid "Copy links (dereference symbolic links)" msgstr "" -#: ../../common/config.py:1379 -msgid "Failed to remove udev rules" +#: ../../common/config.py:409 ../../qt4/settingsdialog.py:669 +msgid "Expert Options" msgstr "" -#: ../../common/config.py:1385 -msgid "Failed to create udev rules" +#: ../../common/config.py:411 +#, python-format +msgid "" +"Destination filesystem for '%(path)s is a sshfs mounted share. sshfs doesn't " +"support hard-links. Please use mode 'SSH' instead." msgstr "" -#: ../../common/config.py:1420 +#: ../../common/config.py:1407 msgid "" -"Can't find anacron.\n" -"Are you sure anacron is installed ?\n" -"If not you should disable daily anacron backups." +"Can't find crontab.\n" +"Are you sure cron is installed ?\n" +"If not you should disable all automatic backups." msgstr "" -#: ../../common/config.py:1439 -msgid "Please provide your sudo password to install the udev rule." +#: ../../common/config.py:1411 +msgid "Failed to write new crontab." msgstr "" -#: ../../common/config.py:1445 -msgid "Please provide your sudo password to remove unused udev rules." +#: ../../common/config.py:1505 +#, python-format +msgid "" +"Could not install Udev rule for profile %(profile_id)s. DBus Service " +"'%(dbus_interface)s' wasn't available" msgstr "" -#: ../../common/configfile.py:253 ../../common/configfile.py:315 +#: ../../common/config.py:1517 #, python-format -msgid "Profile \"%s\" already exists !" -msgstr "Profiil \"%s\" on juba olemas!" +msgid "Schedule udev doesn't work with mode %s" +msgstr "" -#: ../../common/configfile.py:284 -msgid "You can't remove the last profile !" -msgstr "Sa ei saa eemaldada viimast profiili!" +#: ../../common/config.py:1526 +#, python-format +msgid "Couldn't find UUID for \"%s\"" +msgstr "" -#: ../../common/encfstools.py:95 +#: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" @@ -272,38 +313,38 @@ "%(error)s" msgstr "" -#: ../../common/encfstools.py:105 +#: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "" -#: ../../common/encfstools.py:149 +#: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "" -#: ../../common/encfstools.py:153 +#: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" -#: ../../common/encfstools.py:154 +#: ../../common/encfstools.py:171 msgid "Cancel" msgstr "" -#: ../../common/encfstools.py:157 +#: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "" -#: ../../common/encfstools.py:161 +#: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "" -#: ../../common/encfstools.py:166 +#: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" -#: ../../common/encfstools.py:174 ../../common/sshtools.py:207 +#: ../../common/encfstools.py:196 ../../common/sshtools.py:262 #, python-format msgid "" "%(user)s is not member of group 'fuse'.\n" @@ -311,70 +352,73 @@ "Look at 'man backintime' for further instructions." msgstr "" -#: ../../common/encfstools.py:189 +#: ../../common/encfstools.py:211 msgid "" "encfs version 1.7.2 and before has a bug with option --reverse. Please " "update encfs" msgstr "" -#: ../../common/encfstools.py:453 ../../common/encfstools.py:480 -#: ../../common/snapshots.py:982 ../../common/snapshots.py:1288 -#: ../../kde4/app.py:82 ../../gnome/mainwindow.glade:43 +#: ../../common/encfstools.py:512 ../../common/snapshots.py:1131 +#: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "Võta tõmmis" -#: ../../common/mount.py:195 +#: ../../common/mount.py:204 #, python-format msgid "" "Hash collision occurred in hash_id %s. Incrementing global value " "hash_collision and try again." msgstr "" -#: ../../common/mount.py:246 +#: ../../common/mount.py:259 #, python-format msgid "mountpoint %s not empty." msgstr "" -#: ../../common/mount.py:286 +#: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" -#: ../../common/password.py:425 +#: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" -#: ../../common/snapshots.py:171 ../../gnome/app.py:1127 -#: ../../kde4/app.py:1014 +#: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Nüüd" -#: ../../common/snapshots.py:182 ../../gnome/gnometools.py:37 +#: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "VIGATEGA!" -#: ../../common/snapshots.py:282 +#: ../../common/snapshots.py:344 msgid "" "### This log has been decoded with automatic search pattern\n" "### If some paths are not decoded you can manually decode them with:\n" msgstr "" -#: ../../common/snapshots.py:465 +#: ../../common/snapshots.py:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "EBAÕNNESTUS" -#: ../../common/snapshots.py:564 +#: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "Taastamise õigused:" -#: ../../common/snapshots.py:739 +#: ../../common/snapshots.py:752 ../../qt4/app.py:377 ../../qt4/app.py:675 +#: ../../qt4/app.py:692 ../../qt4/qt4systrayicon.py:65 +msgid "Done" +msgstr "Valmis" + +#: ../../common/snapshots.py:860 msgid "" "Back In Time changed its backup format.\n" "\n" "Your old snapshots can be moved according to this new format. OK?" msgstr "" -#: ../../common/snapshots.py:749 +#: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" @@ -385,13 +429,13 @@ "(The program will still be able to discriminate between them)" msgstr "" -#: ../../common/snapshots.py:752 +#: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" msgstr "" -#: ../../common/snapshots.py:803 +#: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" @@ -404,7 +448,7 @@ "cannot continue taking snapshots" msgstr "" -#: ../../common/snapshots.py:812 +#: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" @@ -414,14 +458,14 @@ "if you are done restart Back In Time to proceed" msgstr "" -#: ../../common/snapshots.py:825 +#: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" msgstr "" -#: ../../common/snapshots.py:830 +#: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" @@ -433,17 +477,21 @@ "If you do not, you will be asked again next time you start Back In Time." msgstr "" -#: ../../common/snapshots.py:839 +#: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "" -#: ../../common/snapshots.py:841 +#: ../../common/snapshots.py:953 msgid "" "Back In Time still cannot continue taking new snapshots.\n" "Restart Back In Time to see the questions again" msgstr "" -#: ../../common/snapshots.py:913 +#: ../../common/snapshots.py:972 +msgid "Deferring backup while on battery" +msgstr "" + +#: ../../common/snapshots.py:1035 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it." @@ -451,156 +499,163 @@ "Ei leia tagavarakoopia kataloogi.\n" "Kui see on eemaldatav seade palun ühenda see." -#: ../../common/snapshots.py:915 +#: ../../common/snapshots.py:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "" msgstr[1] "" -#: ../../common/snapshots.py:941 +#: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "" -#: ../../common/snapshots.py:950 +#: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "Lõpetan" -#: ../../common/snapshots.py:1088 +#: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "Ei saa luua kataloogi: %s" -#: ../../common/snapshots.py:1107 +#: ../../common/snapshots.py:1217 msgid "..." msgstr "..." -#: ../../common/snapshots.py:1134 +#: ../../common/snapshots.py:1238 +#, python-format +msgid "Found leftover '%s' which can be continued." +msgstr "" + +#: ../../common/snapshots.py:1250 +#, python-format +msgid "Remove leftover '%s' folder from last run" +msgstr "" + +#: ../../common/snapshots.py:1263 #, python-format msgid "Can't remove folder: %s" msgstr "Ei saa eemaldada kataloogi: %s" -#: ../../common/snapshots.py:1219 +#: ../../common/snapshots.py:1340 #, python-format msgid "Compare with snapshot %s" msgstr "Võrdle tõmmisega %s" -#: ../../common/snapshots.py:1248 +#: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "Tee kõvad lingid" -#: ../../common/snapshots.py:1335 +#: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "Salvesta seade fail ..." -#: ../../common/snapshots.py:1341 +#: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "Salvesta õigused ..." -#: ../../common/snapshots.py:1442 +#: ../../common/snapshots.py:1470 +msgid "Save permission over ssh failed. Retry normal method" +msgstr "" + +#: ../../common/snapshots.py:1521 #, python-format msgid "Can't rename %(new_path)s to %(path)s" msgstr "" -#: ../../common/snapshots.py:1562 -msgid "Remove old snapshots" -msgstr "Eemalda vanad tõmmised" - -#: ../../common/snapshots.py:1586 ../../kde4/settingsdialog.py:501 -#: ../../gnome/settingsdialog.glade:1660 +#: ../../common/snapshots.py:1695 ../../common/snapshots.py:1728 +#: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "Tark eemaldamine" -#: ../../common/snapshots.py:1591 +#: ../../common/snapshots.py:1704 +msgid "Remove old snapshots" +msgstr "Eemalda vanad tõmmised" + +#: ../../common/snapshots.py:1733 msgid "Try to keep min free space" msgstr "" -#: ../../common/snapshots.py:1621 +#: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" -#: ../../common/sshtools.py:106 +#: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "" -#: ../../common/sshtools.py:113 +#: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "" -#: ../../common/sshtools.py:187 -#, python-format -msgid "" -"Failed to unlock SSH private key:\n" -"Error: %s" -msgstr "" - -#: ../../common/sshtools.py:194 +#: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" -#: ../../common/sshtools.py:199 +#: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" -#: ../../common/sshtools.py:217 +#: ../../common/sshtools.py:278 #, python-format msgid "" "Password-less authentication for %(user)s@%(host)s failed. Look at 'man " "backintime' for further instructions." msgstr "" -#: ../../common/sshtools.py:229 +#: ../../common/sshtools.py:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" -#: ../../common/sshtools.py:254 +#: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" -#: ../../common/sshtools.py:274 +#: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" -#: ../../common/sshtools.py:276 +#: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:278 +#: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:280 +#: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" -#: ../../common/sshtools.py:302 +#: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" -#: ../../common/sshtools.py:325 ../../common/sshtools.py:383 +#: ../../common/sshtools.py:423 ../../common/sshtools.py:553 #, python-format msgid "" "Remote host %(host)s doesn't support '%(command)s':\n" @@ -608,7 +663,7 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:387 +#: ../../common/sshtools.py:556 #, python-format msgid "" "Check commands on host %(host)s returned unknown error:\n" @@ -616,96 +671,149 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:400 +#: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "" -#: ../../gnome/app.py:185 ../../gnome/app.py:594 ../../gnome/app.py:608 -#: ../../kde4/app.py:299 ../../kde4/app.py:570 ../../kde4/app.py:587 -msgid "Done" -msgstr "Valmis" +#: ../../qt4/app.py:81 +msgid "Refresh snapshots list" +msgstr "Uuenda tõmmiste nimekirja" + +#: ../../qt4/app.py:85 ../../qt4/app.py:890 +msgid "Snapshot Name" +msgstr "Tõmmise Nimi" + +#: ../../qt4/app.py:88 +msgid "Remove Snapshot" +msgstr "Eemalda Tõmmis" + +#: ../../qt4/app.py:91 +msgid "View Snapshot Log" +msgstr "Vaata Tõmmise Logi" + +#: ../../qt4/app.py:94 +msgid "View Last Log" +msgstr "Vaata Viimast Logi" + +#: ../../qt4/app.py:99 ../../qt4/settingsdialog.py:51 +msgid "Settings" +msgstr "Seaded" -#: ../../gnome/app.py:189 ../../kde4/app.py:143 ../../kde4/app.py:159 -#: ../../gnome/mainwindow.glade:225 +#: ../../qt4/app.py:104 +msgid "Shutdown" +msgstr "" + +#: ../../qt4/app.py:105 +msgid "Shutdown system after snapshot has finished." +msgstr "" + +#: ../../qt4/app.py:111 +msgid "Exit" +msgstr "Välju" + +#: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 msgid "Help" msgstr "Abi" -#: ../../gnome/app.py:191 ../../kde4/app.py:146 -#: ../../gnome/mainwindow.glade:223 +#: ../../qt4/app.py:122 +msgid "Config File Help" +msgstr "" + +#: ../../qt4/app.py:125 msgid "Website" msgstr "Veebileht" -#: ../../gnome/app.py:192 ../../kde4/app.py:148 +#: ../../qt4/app.py:127 ../../qt4/app.py:982 +msgid "Changelog" +msgstr "" + +#: ../../qt4/app.py:129 msgid "FAQ" msgstr "" -#: ../../gnome/app.py:193 ../../kde4/app.py:150 +#: ../../qt4/app.py:131 msgid "Ask a question" msgstr "" -#: ../../gnome/app.py:194 ../../kde4/app.py:152 +#: ../../qt4/app.py:133 msgid "Report a bug" msgstr "" -#: ../../gnome/app.py:196 ../../kde4/app.py:155 +#: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "Programmist" -#: ../../gnome/app.py:202 ../../gnome/app.py:887 -#: ../../gnome/restoredialog.py:84 ../../gnome/snapshotsdialog.py:83 -#: ../../gnome/snapshotsdialog.py:244 ../../kde4/app.py:206 -#: ../../kde4/app.py:216 ../../kde4/restoredialog.py:68 -#: ../../kde4/snapshotsdialog.py:111 ../../kde4/snapshotsdialog.py:117 -#: ../../gnome/mainwindow.glade:350 ../../gnome/mainwindow.glade:352 -#: ../../gnome/snapshotsdialog.glade:169 ../../gnome/snapshotsdialog.glade:171 +#: ../../qt4/app.py:163 +msgid "Up" +msgstr "Üles" + +#: ../../qt4/app.py:174 ../../qt4/settingsdialog.py:1776 +msgid "Show hidden files" +msgstr "Näita peidetud faile" + +#: ../../qt4/app.py:184 ../../qt4/app.py:199 ../../qt4/app.py:233 +#: ../../qt4/restoredialog.py:62 ../../qt4/settingsdialog.py:1818 +#: ../../qt4/snapshotsdialog.py:134 ../../qt4/snapshotsdialog.py:139 msgid "Restore" msgstr "Taasta" -#: ../../gnome/app.py:203 ../../gnome/app.py:888 ../../gnome/gnometools.py:67 -#: ../../gnome/snapshotsdialog.py:84 ../../gnome/snapshotsdialog.py:245 -#: ../../kde4/app.py:208 ../../kde4/restoredialog.py:42 -#: ../../kde4/snapshotsdialog.py:113 +#: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 +#: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "Taasata ..." -#: ../../gnome/app.py:205 ../../gnome/app.py:896 ../../gnome/app.py:1146 -#: ../../kde4/app.py:1041 -#, python-format -msgid "Restore '%s'" +#: ../../qt4/app.py:194 +msgid "Restore and delete new files" msgstr "" -#: ../../gnome/app.py:207 ../../gnome/app.py:897 ../../gnome/app.py:1147 -#: ../../kde4/app.py:1042 +#: ../../qt4/app.py:201 #, python-format -msgid "Restore '%s' to ..." +msgid "" +"Restore selected file or folder.\n" +"If this button is grayed out this is most likely because \"%(now)s\" is " +"selected in left hand snapshots list." msgstr "" -#: ../../gnome/app.py:226 ../../kde4/app.py:235 +#: ../../qt4/app.py:206 ../../qt4/logviewdialog.py:67 +#: ../../qt4/qt4tools.py:160 ../../qt4/snapshotsdialog.py:96 +msgid "Snapshots" +msgstr "Tõmmis" + +#: ../../qt4/app.py:213 +msgid "Snapshot" +msgstr "" + +#: ../../qt4/app.py:224 +msgid "View" +msgstr "" + +#: ../../qt4/app.py:277 msgid "Shortcuts" msgstr "Otseteed" -#: ../../gnome/app.py:249 -msgid "Name" -msgstr "Nimi" - -#: ../../gnome/app.py:260 -msgid "Size" -msgstr "Maht" - -#: ../../gnome/app.py:267 -msgid "Date" -msgstr "Kuupäev" - -#: ../../gnome/app.py:286 ../../gnome/app.py:883 -#: ../../gnome/snapshotsdialog.py:116 ../../kde4/app.py:171 -#: ../../kde4/app.py:221 ../../kde4/snapshotsdialog.py:91 -#: ../../gnome/mainwindow.glade:366 ../../gnome/mainwindow.glade:368 -#: ../../gnome/snapshotsdialog.glade:8 -msgid "Snapshots" -msgstr "Tõmmis" +#: ../../qt4/app.py:295 +msgid "" +"This folder doesn't exist\n" +"in the current selected snapshot!" +msgstr "" + +#: ../../qt4/app.py:359 +msgid "Add to Include" +msgstr "" + +#: ../../qt4/app.py:360 +msgid "Add to Exclude" +msgstr "" -#: ../../gnome/app.py:348 ../../kde4/app.py:362 +#: ../../qt4/app.py:416 +#, python-format +msgid "" +"%(appName)s is not configured. Would you like to restore a previous " +"configuration?" +msgstr "" + +#: ../../qt4/app.py:440 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it and then press OK" @@ -713,727 +821,791 @@ "Ei leia tõmmiste kataloogi.\n" "Kui see on eemaldataval seadmel palun ühenda see ja vajuta OK" -#: ../../gnome/app.py:611 ../../kde4/app.py:590 -msgid "Done, no backup needed" +#: ../../qt4/app.py:473 +msgid "" +"If you close this window Back In Time will not be able to shutdown your " +"system when the snapshot has finished.\n" +"Do you really want to close?" msgstr "" -#: ../../gnome/app.py:619 ../../kde4/app.py:598 +#: ../../qt4/app.py:667 ../../qt4/app.py:703 msgid "Working:" msgstr "Töötan:" -#: ../../gnome/app.py:623 ../../kde4/app.py:602 +#: ../../qt4/app.py:695 +msgid "Done, no backup needed" +msgstr "" + +#: ../../qt4/app.py:707 msgid "Error:" msgstr "Veateade:" -#: ../../gnome/app.py:636 ../../kde4/app.py:649 +#: ../../qt4/app.py:726 ../../qt4/qt4systrayicon.py:153 +msgid "Sent:" +msgstr "" + +#: ../../qt4/app.py:727 ../../qt4/qt4systrayicon.py:154 +msgid "Speed:" +msgstr "" + +#: ../../qt4/app.py:728 ../../qt4/qt4systrayicon.py:155 +msgid "ETA:" +msgstr "" + +#: ../../qt4/app.py:777 msgid "Global" msgstr "Üleüldine" -#: ../../gnome/app.py:637 ../../kde4/app.py:650 +#: ../../qt4/app.py:778 msgid "Root" msgstr "" -#: ../../gnome/app.py:638 ../../kde4/app.py:651 +#: ../../qt4/app.py:779 msgid "Home" msgstr "Kodukataloog" -#: ../../gnome/app.py:662 -msgid "Bookmarks" -msgstr "Järjehoidjad" - -#: ../../gnome/app.py:675 ../../kde4/app.py:662 +#: ../../qt4/app.py:794 msgid "Backup folders" msgstr "Tagavarakoopia kataloogid" -#: ../../gnome/app.py:701 ../../kde4/app.py:734 -msgid "Today" -msgstr "Täna" +#: ../../qt4/app.py:849 +msgid "This is NOT a snapshot but a live view of your local files" +msgstr "" -#: ../../gnome/app.py:705 ../../kde4/app.py:738 -msgid "Yesterday" -msgstr "Eile" +#: ../../qt4/app.py:860 ../../qt4/app.py:1476 +#, python-format +msgid "Last check %s" +msgstr "" -#: ../../gnome/app.py:709 ../../kde4/app.py:742 -msgid "This week" -msgstr "See nädal" +#: ../../qt4/app.py:928 +#, python-format +msgid "" +"Are you sure you want to remove the snapshot:\n" +"%s" +msgstr "" +"Oled kindel, et tahad eemalada tõmmist:\n" +"%s" -#: ../../gnome/app.py:713 ../../kde4/app.py:746 -msgid "Last week" -msgstr "Eelmine nädal" +#: ../../qt4/app.py:1004 +#, python-format +msgid "" +"Backup local files before overwriting or\n" +"removing with trailing '%(suffix)s'." +msgstr "" -#: ../../gnome/app.py:764 ../../kde4/app.py:398 +#: ../../qt4/app.py:1010 msgid "" -"If you close this window Back In Time will not be able to shutdown your " -"system when the snapshot has finished.\n" -"Do you really want to close?" +"Are you sure you want to remove all newer files in your original folder?" msgstr "" -#: ../../gnome/app.py:881 ../../gnome/snapshotsdialog.py:238 -msgid "Open" -msgstr "Ava" +#: ../../qt4/app.py:1014 +msgid "" +"WARNING: deleting files in filesystem root could break your whole system!!!" +msgstr "" -#: ../../gnome/app.py:1056 ../../kde4/app.py:90 ../../kde4/app.py:805 -#: ../../gnome/mainwindow.glade:73 ../../gnome/mainwindow.glade:75 -msgid "Snapshot Name" -msgstr "Tõmmise Nimi" +#: ../../qt4/app.py:1016 +msgid "Files to be restored:" +msgstr "" -#: ../../gnome/app.py:1075 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +#: ../../qt4/app.py:1031 +msgid "Do you really want to restore this files(s):" msgstr "" -"Oled kindel, et tahad eemaldada tõmmist:\n" -"%s" -#: ../../gnome/app.py:1123 ../../kde4/app.py:1010 +#: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "Tõmmis: %s" -#: ../../gnome/app.py:1124 ../../kde4/app.py:1011 +#: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "Vaata tõmmist, mis on tehtud %s" -#: ../../gnome/app.py:1126 ../../kde4/app.py:1013 +#: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "Vaata praeguse ketta sisu" -#: ../../gnome/logviewdialog.py:106 ../../gnome/settingsdialog.py:414 -#: ../../kde4/logviewdialog.py:83 ../../kde4/settingsdialog.py:590 -msgid "All" -msgstr "Kõik" - -#: ../../gnome/logviewdialog.py:107 ../../gnome/settingsdialog.py:412 -#: ../../kde4/logviewdialog.py:84 ../../kde4/settingsdialog.py:588 -msgid "Errors" -msgstr "Veateated" - -#: ../../gnome/logviewdialog.py:112 ../../kde4/logviewdialog.py:89 -msgid "Changes" -msgstr "Muutused" - -#: ../../gnome/logviewdialog.py:115 ../../kde4/logviewdialog.py:92 -msgid "Informations" -msgstr "Teave" - -#: ../../gnome/settingsdialog.py:235 ../../kde4/settingsdialog.py:387 -msgid "Include files and folders" -msgstr "Kaasa failid ja kataloogid" - -#: ../../gnome/settingsdialog.py:264 -msgid "Exclude patterns, files or folders" -msgstr "Jäta välja mustrid, failid või kataloogid" - -#: ../../gnome/settingsdialog.py:411 ../../kde4/settingsdialog.py:587 -msgid "None" -msgstr "Pole" - -#: ../../gnome/settingsdialog.py:413 ../../kde4/settingsdialog.py:589 -msgid "Changes & Errors" -msgstr "Muudatused & Veateated" - -#: ../../gnome/settingsdialog.py:458 -msgid "Snapshots folder" -msgstr "Tõmmiste kataloog" - -#: ../../gnome/settingsdialog.py:466 ../../kde4/settingsdialog.py:1314 -msgid "Are you sure you want to change snapshots folder ?" -msgstr "Oled kindel, et tahad muuta tõmmiste kataloogi?" - -#: ../../gnome/settingsdialog.py:901 ../../kde4/settingsdialog.py:914 -msgid "" -"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " -"*/3 for periodic backups every 3 hours" +#: ../../qt4/app.py:1268 +#, python-format +msgid "Restore '%s'" msgstr "" -#: ../../gnome/settingsdialog.py:1141 ../../kde4/settingsdialog.py:653 -msgid "New profile" -msgstr "Uus profiil" - -#: ../../gnome/settingsdialog.py:1155 ../../kde4/settingsdialog.py:669 -msgid "Rename profile" -msgstr "Muuda profiili nime" - -#: ../../gnome/settingsdialog.py:1167 ../../kde4/settingsdialog.py:683 +#: ../../qt4/app.py:1269 #, python-format -msgid "Are you sure you want to delete the profile \"%s\" ?" -msgstr "Oled kindel, et tahad kustuda profiili \"%s\"?" - -#: ../../gnome/settingsdialog.py:1173 ../../kde4/settingsdialog.py:1292 -msgid "Include folder" -msgstr "Kaasa katloog" - -#: ../../gnome/settingsdialog.py:1193 ../../kde4/settingsdialog.py:1278 -msgid "Include file" -msgstr "Kaasa fail" - -#: ../../gnome/settingsdialog.py:1235 ../../kde4/settingsdialog.py:1241 -msgid "Exclude pattern" +msgid "Restore '%s' to ..." msgstr "" -#: ../../gnome/settingsdialog.py:1240 ../../kde4/settingsdialog.py:1251 -msgid "Exclude patterns can't contain ':' char !" +#: ../../qt4/app.py:1270 +#, python-format +msgid "Restore '%s' and delete new files" msgstr "" -#: ../../gnome/settingsdialog.py:1246 ../../kde4/settingsdialog.py:1257 -msgid "Exclude file" -msgstr "Jäta välja fail" - -#: ../../gnome/settingsdialog.py:1257 ../../kde4/settingsdialog.py:1261 -msgid "Exclude folder" -msgstr "Jäta välja kataloog" - -#: ../../gnome/snapshotsdialog.py:240 -msgid "Jump to" -msgstr "Liigu" - -#: ../../gnome/snapshotsdialog.py:248 ../../kde4/snapshotsdialog.py:164 -msgid "Diff" -msgstr "Erinevus" - -#: ../../gnome/snapshotsdialog.py:277 ../../kde4/snapshotsdialog.py:339 -msgid "You can't compare a snapshot to itself" -msgstr "Sa ei saa võrrelda tõmmist iseendaga" - -#: ../../gnome/snapshotsdialog.py:284 ../../kde4/snapshotsdialog.py:346 -#, python-format -msgid "Command not found: %s" -msgstr "Käsku ei leitud: %s" +#: ../../qt4/app.py:1368 ../../qt4/app.py:1385 +msgid "Authors" +msgstr "" -#: ../../gnome/snapshotsdialog.py:307 ../../kde4/snapshotsdialog.py:367 -#, python-format -msgid "" -"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" +#: ../../qt4/app.py:1369 ../../qt4/app.py:1388 +msgid "Translations" msgstr "" -#: ../../gnome/snapshotsdialog.py:310 ../../kde4/snapshotsdialog.py:370 -#, python-format -msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +#: ../../qt4/app.py:1370 ../../qt4/app.py:1391 +msgid "License" msgstr "" -#: ../../gnome/snapshotsdialog.py:312 ../../kde4/snapshotsdialog.py:372 -msgid "WARNING: This can not be revoked!" +#: ../../qt4/logviewdialog.py:49 +msgid "Last Log View" msgstr "" -#: ../../gnome/snapshotsdialog.py:317 ../../kde4/snapshotsdialog.py:377 -#, python-format -msgid "Exclude \"%s\" from future snapshots?" +#: ../../qt4/logviewdialog.py:51 +msgid "Snapshot Log View" msgstr "" -#: ../../kde4/app.py:86 ../../gnome/mainwindow.glade:58 -#: ../../gnome/mainwindow.glade:60 -msgid "Refresh snapshots list" -msgstr "Uuenda tõmmiste nimekirja" +#: ../../qt4/logviewdialog.py:59 ../../qt4/settingsdialog.py:59 +#: ../../qt4/settingsdialog.py:274 ../../qt4/settingsdialog.py:1899 +msgid "Profile:" +msgstr "Profiil:" -#: ../../kde4/app.py:94 ../../gnome/mainwindow.glade:88 -#: ../../gnome/mainwindow.glade:90 -msgid "Remove Snapshot" -msgstr "Eemalda Tõmmis" +#: ../../qt4/logviewdialog.py:81 +msgid "Filter:" +msgstr "Filter:" -#: ../../kde4/app.py:98 ../../gnome/mainwindow.glade:105 -msgid "View Snapshot Log" -msgstr "Vaata Tõmmise Logi" +#: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 +msgid "All" +msgstr "Kõik" -#: ../../kde4/app.py:102 ../../gnome/mainwindow.glade:121 -msgid "View Last Log" -msgstr "Vaata Viimast Logi" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 +#: ../../qt4/settingsdialog.py:657 +msgid "Errors" +msgstr "Veateated" -#: ../../kde4/app.py:108 ../../kde4/settingsdialog.py:69 -#: ../../gnome/mainwindow.glade:144 ../../gnome/mainwindow.glade:146 -#: ../../gnome/settingsdialog.glade:7 -msgid "Settings" -msgstr "Seaded" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 +msgid "Changes" +msgstr "Muutused" -#: ../../kde4/app.py:124 ../../gnome/mainwindow.glade:169 -msgid "Shutdown system after snapshot has finished." -msgstr "" +#: ../../qt4/logviewdialog.py:92 +msgid "Informations" +msgstr "Teave" -#: ../../kde4/app.py:131 ../../gnome/mainwindow.glade:184 -#: ../../gnome/mainwindow.glade:186 -msgid "Exit" -msgstr "Välju" +#: ../../qt4/logviewdialog.py:101 +msgid "[E] Error, [I] Information, [C] Change" +msgstr "" -#: ../../kde4/app.py:186 ../../gnome/mainwindow.glade:289 -msgid "Up" -msgstr "Üles" +#: ../../qt4/logviewdialog.py:104 +msgid "decode paths" +msgstr "" -#: ../../kde4/app.py:199 ../../gnome/mainwindow.glade:325 -msgid "Show hidden files" -msgstr "Näita peidetud faile" +#: ../../qt4/messagebox.py:56 +msgid "Error" +msgstr "" -#: ../../kde4/app.py:244 -msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +#: ../../qt4/messagebox.py:62 ../../qt4/messagebox.py:68 +msgid "Question" msgstr "" -#: ../../kde4/app.py:839 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +#: ../../qt4/qt4systrayicon.py:69 +msgid "Start BackInTime" msgstr "" -"Oled kindel, et tahad eemalada tõmmist:\n" -"%s" -#: ../../kde4/app.py:1140 ../../kde4/kde4systrayicon.py:117 +#: ../../qt4/qt4systrayicon.py:124 msgid "Working..." msgstr "Töötan..." -#: ../../kde4/logviewdialog.py:55 -msgid "Error Log View" -msgstr "Vigade logi vaatamine" - -#: ../../kde4/logviewdialog.py:65 ../../kde4/settingsdialog.py:79 -#: ../../kde4/settingsdialog.py:293 ../../gnome/logviewdialog.glade:73 -#: ../../gnome/settingsdialog.glade:72 -msgid "Profile:" -msgstr "Profiil:" +#: ../../qt4/qt4tools.py:178 +msgid "Today" +msgstr "Täna" -#: ../../kde4/logviewdialog.py:77 ../../gnome/logviewdialog.glade:110 -msgid "Filter:" -msgstr "Filter:" +#: ../../qt4/qt4tools.py:183 +msgid "Yesterday" +msgstr "Eile" -#: ../../kde4/logviewdialog.py:100 ../../gnome/logviewdialog.glade:169 -msgid "[E] Error, [I] Information, [C] Change" -msgstr "" +#: ../../qt4/qt4tools.py:188 +msgid "This week" +msgstr "See nädal" -#: ../../kde4/logviewdialog.py:103 ../../gnome/logviewdialog.glade:195 -msgid "decode paths" +#: ../../qt4/qt4tools.py:193 +msgid "Last week" +msgstr "Eelmine nädal" + +#: ../../qt4/restoredialog.py:75 +msgid "Show full Log" msgstr "" -#: ../../kde4/settingsdialog.py:88 +#: ../../qt4/settingsdialog.py:68 msgid "Edit" msgstr "Muutmine" -#: ../../kde4/settingsdialog.py:106 ../../gnome/settingsdialog.glade:1207 +#: ../../qt4/settingsdialog.py:73 +msgid "Modify for Full System Backup" +msgstr "" + +#: ../../qt4/settingsdialog.py:77 ../../qt4/settingsdialog.py:451 +msgid "Add" +msgstr "" + +#: ../../qt4/settingsdialog.py:81 ../../qt4/settingsdialog.py:408 +#: ../../qt4/settingsdialog.py:467 +msgid "Remove" +msgstr "" + +#: ../../qt4/settingsdialog.py:96 msgid "General" msgstr "Üldine" -#: ../../kde4/settingsdialog.py:114 ../../gnome/settingsdialog.glade:199 +#: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "" -#: ../../kde4/settingsdialog.py:127 ../../kde4/settingsdialog.py:1311 +#: ../../qt4/settingsdialog.py:119 +#, python-format +msgid "" +"Warning: %(app)s uses EncFS for encryption. A recent security audit " +"revealed several possible attack vectors for this. Please take a look at 'A " +"NOTE ON SECURITY' in 'man backintime'." +msgstr "" + +#: ../../qt4/settingsdialog.py:129 ../../qt4/settingsdialog.py:1568 msgid "Where to save snapshots" msgstr "Kuhu salvestada tõmmis" -#: ../../kde4/settingsdialog.py:146 +#: ../../qt4/settingsdialog.py:145 +msgid "Folder" +msgstr "" + +#: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" -#: ../../kde4/settingsdialog.py:158 ../../kde4/settingsdialog.py:283 -#: ../../gnome/settingsdialog.glade:323 ../../gnome/settingsdialog.glade:583 -#: ../../gnome/settingsdialog.glade:874 +#: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "Server:" -#: ../../kde4/settingsdialog.py:163 ../../gnome/settingsdialog.glade:350 -#: ../../gnome/settingsdialog.glade:610 +#: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "" -#: ../../kde4/settingsdialog.py:168 ../../kde4/settingsdialog.py:288 -#: ../../gnome/settingsdialog.glade:377 ../../gnome/settingsdialog.glade:637 -#: ../../gnome/settingsdialog.glade:902 +#: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "Kasutaja:" -#: ../../kde4/settingsdialog.py:173 ../../gnome/settingsdialog.glade:416 +#: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" -#: ../../kde4/settingsdialog.py:178 ../../gnome/settingsdialog.glade:459 +#: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" -#: ../../kde4/settingsdialog.py:184 +#: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "" -#: ../../kde4/settingsdialog.py:228 ../../kde4/settingsdialog.py:237 -#: ../../kde4/settingsdialog.py:243 ../../gnome/settingsdialog.glade:703 -#: ../../gnome/settingsdialog.glade:743 +#: ../../qt4/settingsdialog.py:201 +msgid "Key File" +msgstr "" + +#: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 +#: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "" -#: ../../kde4/settingsdialog.py:249 ../../gnome/settingsdialog.glade:775 +#: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" -#: ../../kde4/settingsdialog.py:252 ../../gnome/settingsdialog.glade:792 +#: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" -#: ../../kde4/settingsdialog.py:264 ../../gnome/settingsdialog.glade:968 +#: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "Põhjalikum" -#: ../../kde4/settingsdialog.py:276 ../../gnome/settingsdialog.glade:848 -msgid "Auto Host / User / Profile Id" +#: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 +msgid "Full snapshot path: " msgstr "" -#: ../../kde4/settingsdialog.py:301 +#: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "" -#: ../../kde4/settingsdialog.py:311 ../../gnome/settingsdialog.glade:1092 +#: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "Päev:" -#: ../../kde4/settingsdialog.py:322 ../../gnome/settingsdialog.glade:1079 +#: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "Nädalapäev:" -#: ../../kde4/settingsdialog.py:333 ../../gnome/settingsdialog.glade:1066 +#: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "Tund:" -#: ../../kde4/settingsdialog.py:344 ../../gnome/settingsdialog.glade:1053 +#: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "" -#: ../../kde4/settingsdialog.py:353 ../../gnome/settingsdialog.glade:1014 +#: ../../qt4/settingsdialog.py:339 msgid "" -"Run Back In Time periodically with anacron. This is useful if the computer " -"is not running regular." +"Run Back In Time repeatedly. This is useful if the computer is not running " +"regular." msgstr "" -#: ../../kde4/settingsdialog.py:357 ../../gnome/settingsdialog.glade:1040 -msgid "Frequency in days:" +#: ../../qt4/settingsdialog.py:344 +msgid "Every:" msgstr "" -#: ../../kde4/settingsdialog.py:368 ../../gnome/settingsdialog.glade:1026 +#: ../../qt4/settingsdialog.py:362 msgid "" "Run Back In Time as soon as the drive is connected (only once every X " "days).\n" "You will be prompted for your sudo password." msgstr "" -#: ../../kde4/settingsdialog.py:379 ../../gnome/settingsdialog.glade:1310 +#: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Kaasa" -#: ../../kde4/settingsdialog.py:403 ../../kde4/settingsdialog.py:445 -#: ../../gnome/settingsdialog.glade:1411 +#: ../../qt4/settingsdialog.py:381 +msgid "Include files and folders" +msgstr "Kaasa failid ja kataloogid" + +#: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "Lisa fail" -#: ../../kde4/settingsdialog.py:408 ../../kde4/settingsdialog.py:450 -#: ../../gnome/settingsdialog.glade:1427 +#: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Lisa kaust" -#: ../../kde4/settingsdialog.py:418 ../../gnome/settingsdialog.glade:1474 +#: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Jäta välja" -#: ../../kde4/settingsdialog.py:421 ../../gnome/settingsdialog.glade:1328 +#: ../../qt4/settingsdialog.py:417 msgid "" "Warning: Wildcards ('foo*', '[fF]oo', 'fo?') will be ignored with " "mode 'SSH encrypted'.\n" "Only separate asterisk are allowed ('foo/*', 'foo/**/bar')" msgstr "" -#: ../../kde4/settingsdialog.py:430 +#: ../../qt4/settingsdialog.py:425 +msgid "Exclude patterns, files or folders" +msgstr "Jäta välja mustrid, failid või kataloogid" + +#: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "Rangelt soovitatud:" -#: ../../kde4/settingsdialog.py:460 ../../gnome/settingsdialog.glade:1905 +#: ../../qt4/settingsdialog.py:463 +msgid "Add default" +msgstr "" + +#: ../../qt4/settingsdialog.py:474 +msgid "Exclude files bigger than: " +msgstr "" + +#: ../../qt4/settingsdialog.py:475 +#, python-format +msgid "" +"Exclude files bigger than value in %(prefix)s.\n" +"With 'Full rsync mode' disabled this will only affect new files\n" +"because for rsync this is a transfer option, not an exclude option.\n" +"So big files that has been backed up before will remain in snapshots\n" +"even if they had changed." +msgstr "" + +#: ../../qt4/settingsdialog.py:493 msgid "Auto-remove" msgstr "Automaatselt eemalda" -#: ../../kde4/settingsdialog.py:464 ../../gnome/settingsdialog.glade:1608 +#: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "Vanem kui:" -#: ../../kde4/settingsdialog.py:478 ../../gnome/settingsdialog.glade:1624 +#: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "Kui vabaruumi on vähem kui:" -#: ../../kde4/settingsdialog.py:490 ../../gnome/settingsdialog.glade:1642 +#: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" -#: ../../kde4/settingsdialog.py:514 ../../gnome/settingsdialog.glade:1697 +#: ../../qt4/settingsdialog.py:551 +msgid "Run in background on remote Host." +msgstr "" + +#: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "" -#: ../../kde4/settingsdialog.py:517 ../../kde4/settingsdialog.py:522 -#: ../../gnome/settingsdialog.glade:1705 ../../gnome/settingsdialog.glade:1729 +#: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "päev(ad)" -#: ../../kde4/settingsdialog.py:519 ../../gnome/settingsdialog.glade:1717 +#: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "" -#: ../../kde4/settingsdialog.py:524 ../../gnome/settingsdialog.glade:1743 +#: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "" -#: ../../kde4/settingsdialog.py:527 +#: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "nädal(ad)" -#: ../../kde4/settingsdialog.py:529 ../../gnome/settingsdialog.glade:1769 +#: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "" -#: ../../kde4/settingsdialog.py:532 ../../gnome/settingsdialog.glade:1781 +#: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "kuu(d)" -#: ../../kde4/settingsdialog.py:534 ../../gnome/settingsdialog.glade:1795 +#: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "" -#: ../../kde4/settingsdialog.py:537 ../../gnome/settingsdialog.glade:1496 +#: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "" -#: ../../kde4/settingsdialog.py:546 ../../gnome/settingsdialog.glade:2104 +#: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Valikud" -#: ../../kde4/settingsdialog.py:549 ../../gnome/settingsdialog.glade:1920 +#: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Luba teated" -#: ../../kde4/settingsdialog.py:552 ../../gnome/settingsdialog.glade:1937 +#: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "" -#: ../../kde4/settingsdialog.py:555 +#: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" msgstr "" -#: ../../kde4/settingsdialog.py:558 ../../gnome/settingsdialog.glade:1955 -msgid "Backup files on restore" +#: ../../qt4/settingsdialog.py:611 +msgid "Run only one snapshot at a time" +msgstr "" + +#: ../../qt4/settingsdialog.py:612 +msgid "" +"Other snapshots will be blocked until the current snapshot is done.\n" +"This is a global option. So it will effect all profiles for this user.\n" +"But you need to activate this for all other users, too." +msgstr "" + +#: ../../qt4/settingsdialog.py:617 +msgid "Backup replaced files on restore" msgstr "" -#: ../../kde4/settingsdialog.py:561 ../../gnome/settingsdialog.glade:1972 +#: ../../qt4/settingsdialog.py:618 +#, python-format +msgid "" +"Newer versions of files will be renamed with trailing '%(suffix)s' before " +"restoring.\n" +"If you don't need them anymore you can remove them with '%(cmd)s'" +msgstr "" + +#: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "" -#: ../../kde4/settingsdialog.py:564 ../../gnome/settingsdialog.glade:1989 +#: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "" -#: ../../kde4/settingsdialog.py:567 ../../gnome/settingsdialog.glade:2006 +#: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "" -#: ../../kde4/settingsdialog.py:568 ../../gnome/settingsdialog.glade:2032 +#: ../../qt4/settingsdialog.py:634 msgid "" -"- snapshots are no read-only\n" -"- destination file-system must support all linux attributes (dates, rights, " +"- snapshots are not read-only\n" +"- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" -#: ../../kde4/settingsdialog.py:575 ../../gnome/settingsdialog.glade:2045 +#: ../../qt4/settingsdialog.py:641 +msgid "Take a new snapshot regardless of there were changes or not." +msgstr "" + +#: ../../qt4/settingsdialog.py:644 msgid "Check for changes (don't take a new snapshot if nothing changed)" msgstr "" -#: ../../kde4/settingsdialog.py:582 +#: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "Logitase:" -#: ../../kde4/settingsdialog.py:597 ../../gnome/settingsdialog.glade:2366 -msgid "Expert Options" -msgstr "" +#: ../../qt4/settingsdialog.py:656 +msgid "None" +msgstr "Pole" -#: ../../kde4/settingsdialog.py:600 +#: ../../qt4/settingsdialog.py:658 +msgid "Changes & Errors" +msgstr "Muudatused & Veateated" + +#: ../../qt4/settingsdialog.py:674 msgid "Change these options only if you really know what you are doing !" msgstr "" -#: ../../kde4/settingsdialog.py:608 ../../gnome/settingsdialog.glade:2133 -msgid "Run 'nice' as cron job (default: enabled)" +#: ../../qt4/settingsdialog.py:678 +msgid "Run 'nice':" +msgstr "" + +#: ../../qt4/settingsdialog.py:684 ../../qt4/settingsdialog.py:696 +msgid "as cron job" +msgstr "" + +#: ../../qt4/settingsdialog.py:687 ../../qt4/settingsdialog.py:702 +#: ../../qt4/settingsdialog.py:716 +msgid "on remote host" msgstr "" -#: ../../kde4/settingsdialog.py:611 ../../gnome/settingsdialog.glade:2150 -msgid "Run 'ionice' as cron job (default: enabled)" +#: ../../qt4/settingsdialog.py:690 +msgid "Run 'ionice':" msgstr "" -#: ../../kde4/settingsdialog.py:614 ../../gnome/settingsdialog.glade:2167 -msgid "Run 'ionice' when taking a manual snapshot (default: disabled)" +#: ../../qt4/settingsdialog.py:699 +msgid "when taking a manual snapshot" msgstr "" -#: ../../kde4/settingsdialog.py:617 ../../gnome/settingsdialog.glade:2184 -msgid "Run 'nice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:706 +msgid "Run 'rsync' with 'nocache':" msgstr "" -#: ../../kde4/settingsdialog.py:620 ../../gnome/settingsdialog.glade:2201 -msgid "Run 'ionice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:712 +msgid "on local machine" msgstr "" -#: ../../kde4/settingsdialog.py:626 ../../gnome/settingsdialog.glade:2224 +#: ../../qt4/settingsdialog.py:719 +msgid "Redirect stdout to /dev/null in cronjobs." +msgstr "" + +#: ../../qt4/settingsdialog.py:725 +msgid "Redirect stderr to /dev/null in cronjobs." +msgstr "" + +#: ../../qt4/settingsdialog.py:734 msgid "Limit rsync bandwidth usage: " msgstr "" -#: ../../kde4/settingsdialog.py:629 ../../gnome/settingsdialog.glade:2259 +#: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" -#: ../../kde4/settingsdialog.py:634 ../../gnome/settingsdialog.glade:2280 +#: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "" -#: ../../kde4/settingsdialog.py:637 ../../gnome/settingsdialog.glade:2297 +#: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "" -#: ../../kde4/settingsdialog.py:640 ../../gnome/settingsdialog.glade:2314 +#: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute links)" msgstr "" -#: ../../kde4/settingsdialog.py:643 ../../gnome/settingsdialog.glade:2331 -msgid "Copy links (dereference symbolic links)" +#: ../../qt4/settingsdialog.py:834 +msgid "Paste additional options to rsync" msgstr "" -#: ../../kde4/snapshotsdialog.py:46 ../../kde4/snapshotsdialog.py:173 -#: ../../gnome/snapshotsdialog.glade:385 -msgid "Diff Options" +#: ../../qt4/settingsdialog.py:837 +msgid "" +"Options must be quoted e.g. --exclude-from=\"/path/to/my exclude file\"." msgstr "" -#: ../../kde4/snapshotsdialog.py:56 ../../gnome/snapshotsdialog.glade:314 -msgid "Command:" -msgstr "Käsk:" - -#: ../../kde4/snapshotsdialog.py:60 ../../gnome/snapshotsdialog.glade:322 -msgid "Parameters:" -msgstr "Parameetrid:" +#: ../../qt4/settingsdialog.py:847 +msgid "Add prefix to SSH commands" +msgstr "" -#: ../../kde4/snapshotsdialog.py:64 ../../gnome/snapshotsdialog.glade:334 -msgid "Use %1 and %2 for path parameters" +#: ../../qt4/settingsdialog.py:850 +#, python-format +msgid "" +"Prefix to run before every command on remote host.\n" +"Variables need to be escaped with \\$FOO.\n" +"This doesn't touch rsync. So to add a prefix\n" +"for rsync use \"%(cb_rsync_options)s\" with\n" +"%(rsync_options_value)s\n" +"\n" +"%(default)s: %(def_value)s" msgstr "" -#: ../../kde4/snapshotsdialog.py:123 ../../gnome/snapshotsdialog.glade:184 -#: ../../gnome/snapshotsdialog.glade:186 -msgid "Delete" +#: ../../qt4/settingsdialog.py:858 ../../qt4/settingsdialog.py:1691 +msgid "default" msgstr "" -#: ../../kde4/snapshotsdialog.py:128 ../../gnome/snapshotsdialog.glade:199 -#: ../../gnome/snapshotsdialog.glade:201 -msgid "Select All" +#: ../../qt4/settingsdialog.py:875 +msgid "Restore Config" msgstr "" -#: ../../kde4/snapshotsdialog.py:132 ../../gnome/snapshotsdialog.glade:88 -msgid "List only different snapshots" +#: ../../qt4/settingsdialog.py:891 +msgid "" +"Full system backup can only create a snapshot to be restored to the same " +"physical disk(s) with the same disk partitioning as from the source; " +"restoring to new physical disks or the same disks with different " +"partitioning will yield a potentially broken and unusable system.\n" +"\n" +"Full system backup will override some settings that may have been " +"customized. Continue?" msgstr "" -#: ../../kde4/snapshotsdialog.py:139 ../../gnome/snapshotsdialog.glade:110 -msgid "List only equal snapshots to: " +#: ../../qt4/settingsdialog.py:922 +msgid "New profile" +msgstr "Uus profiil" + +#: ../../qt4/settingsdialog.py:938 +msgid "Rename profile" +msgstr "Muuda profiili nime" + +#: ../../qt4/settingsdialog.py:952 +#, python-format +msgid "Are you sure you want to delete the profile \"%s\" ?" +msgstr "Oled kindel, et tahad kustuda profiili \"%s\"?" + +#: ../../qt4/settingsdialog.py:1191 +msgid "" +"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " +"*/3 for periodic backups every 3 hours" msgstr "" -#: ../../kde4/snapshotsdialog.py:149 ../../gnome/snapshotsdialog.glade:146 -msgid "Deep check (more accurate, but slow)" +#: ../../qt4/settingsdialog.py:1489 +msgid "Exclude pattern" msgstr "" -#: ../../kde4/snapshotsdialog.py:174 -msgid "Go To" -msgstr "Mine" +#: ../../qt4/settingsdialog.py:1502 +msgid "Exclude file" +msgstr "Jäta välja fail" -#: ../../gnome/logviewdialog.glade:9 -msgid "Log View" -msgstr "" +#: ../../qt4/settingsdialog.py:1506 +msgid "Exclude folder" +msgstr "Jäta välja kataloog" -#: ../../gnome/logviewdialog.glade:179 -msgid "scroll down automatic" +#: ../../qt4/settingsdialog.py:1525 +msgid "Include file" +msgstr "Kaasa fail" + +#: ../../qt4/settingsdialog.py:1533 ../../qt4/settingsdialog.py:1553 +#, python-format +msgid "" +"\"%s\" is a symlink. The linked target will not be backed up until you " +"include it, too.\n" +"Would you like to include the symlinks target instead?" msgstr "" -#: ../../gnome/mainwindow.glade:7 -msgid "Back In Time" -msgstr "Ajas Tagasi" +#: ../../qt4/settingsdialog.py:1545 +msgid "Include folder" +msgstr "Kaasa katloog" + +#: ../../qt4/settingsdialog.py:1572 +msgid "Are you sure you want to change snapshots folder ?" +msgstr "Oled kindel, et tahad muuta tõmmiste kataloogi?" -#: ../../gnome/mainwindow.glade:45 -msgid "Backup Now" +#: ../../qt4/settingsdialog.py:1688 +msgid "enabled" msgstr "" -#: ../../gnome/mainwindow.glade:171 -msgid "Shutdown" +#: ../../qt4/settingsdialog.py:1690 +msgid "disabled" msgstr "" -#: ../../gnome/mainwindow.glade:287 -msgid "Parent folder" -msgstr "Ülemine kaust" +#: ../../qt4/settingsdialog.py:1715 +msgid "Restore Settings" +msgstr "" -#: ../../gnome/mainwindow.glade:327 -msgid "Hidden files" -msgstr "Peidetud failid" +#: ../../qt4/settingsdialog.py:1732 +msgid " and add your user to group 'fuse'" +msgstr "" -#: ../../gnome/mainwindow.glade:451 +#: ../../qt4/settingsdialog.py:1736 +#, python-format msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +"Please navigate to the snapshot from which you want to restore %(appName)s's " +"configuration. The path may look like: \n" +"%(samplePath)s\n" +"\n" +"If your snapshots are on a remote drive or if they are encrypted you need to " +"manually mount them first. If you use Mode SSH you also may need to set up " +"public key login to the remote host%(addFuse)s.\n" +"Take a look at 'man backintime'." msgstr "" -#: ../../gnome/settingsdialog.glade:287 -msgid "Where to save snapshots" +#: ../../qt4/settingsdialog.py:1794 ../../qt4/settingsdialog.py:1854 +msgid "No config found" msgstr "" -#: ../../gnome/settingsdialog.glade:483 -msgid "Private key:" +#: ../../qt4/snapshotsdialog.py:49 ../../qt4/snapshotsdialog.py:173 +msgid "Diff Options" msgstr "" -#: ../../gnome/settingsdialog.glade:534 -msgid "Advanced SSH Settings" -msgstr "" +#: ../../qt4/snapshotsdialog.py:56 +msgid "Command:" +msgstr "Käsk:" + +#: ../../qt4/snapshotsdialog.py:60 +msgid "Parameters:" +msgstr "Parameetrid:" -#: ../../gnome/settingsdialog.glade:552 -msgid "SSH Settings" +#: ../../qt4/snapshotsdialog.py:64 +msgid "Use %1 and %2 for path parameters" msgstr "" -#: ../../gnome/settingsdialog.glade:815 -msgid "Password" +#: ../../qt4/snapshotsdialog.py:106 +msgid "List only different snapshots" msgstr "" -#: ../../gnome/settingsdialog.glade:930 -msgid "Profile Id:" +#: ../../qt4/snapshotsdialog.py:113 +msgid "List only equal snapshots to: " msgstr "" -#: ../../gnome/settingsdialog.glade:1115 -msgid "" -"hours seperate by comma ( e.g. 8,12,18,23) or */3 for periodic backups every " -"3 hours (cron style)" +#: ../../qt4/snapshotsdialog.py:123 +msgid "Deep check (more accurate, but slow)" msgstr "" -#: ../../gnome/settingsdialog.glade:1163 -msgid "Schedule" +#: ../../qt4/snapshotsdialog.py:144 +msgid "Delete" msgstr "" -#: ../../gnome/settingsdialog.glade:1363 -msgid "Highly recommended:" +#: ../../qt4/snapshotsdialog.py:148 +msgid "Select All" msgstr "" -#: ../../gnome/settingsdialog.glade:1377 -msgid "label" -msgstr "silt" +#: ../../qt4/snapshotsdialog.py:161 +msgid "Diff" +msgstr "Erinevus" -#: ../../gnome/settingsdialog.glade:1755 -msgid "week(s)" -msgstr "nädal(ad)" +#: ../../qt4/snapshotsdialog.py:172 +msgid "Go To" +msgstr "Mine" + +#: ../../qt4/snapshotsdialog.py:326 +msgid "You can't compare a snapshot to itself" +msgstr "Sa ei saa võrrelda tõmmist iseendaga" -#: ../../gnome/settingsdialog.glade:2069 -msgid "Log level:" -msgstr "Logimise tase:" +#: ../../qt4/snapshotsdialog.py:333 +#, python-format +msgid "Command not found: %s" +msgstr "Käsku ei leitud: %s" -#: ../../gnome/settingsdialog.glade:2121 +#: ../../qt4/snapshotsdialog.py:354 +#, python-format msgid "" -"Change these options only if you really know what you are doing !" +"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" msgstr "" -"Muuda neid seadeid ainult siis, kui sa tõesti tead mida sa teed!" -#: ../../gnome/snapshotsdialog.glade:263 -msgid "Diff with" +#: ../../qt4/snapshotsdialog.py:357 +#, python-format +msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" msgstr "" -#: ../../gnome/textinputdialog.glade:7 -msgid "Pattern" +#: ../../qt4/snapshotsdialog.py:359 +msgid "WARNING: This can not be revoked!" msgstr "" -#: ../../gnome/textinputdialog.glade:70 -msgid "Text" +#: ../../qt4/snapshotsdialog.py:374 +#, python-format +msgid "Exclude \"%s\" from future snapshots?" msgstr "" diff -Nru backintime-1.0.36/common/po/eu.po backintime-1.1.12/common/po/eu.po --- backintime-1.0.36/common/po/eu.po 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/po/eu.po 2016-01-11 18:07:58.000000000 +0000 @@ -7,206 +7,238 @@ msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2013-11-09 22:34+0100\n" -"PO-Revision-Date: 2014-01-21 17:43+0000\n" -"Last-Translator: alexgabi \n" +"POT-Creation-Date: 2015-12-19 00:47+0100\n" +"PO-Revision-Date: 2015-11-19 23:23+0000\n" +"Last-Translator: Germar \n" "Language-Team: Basque \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2014-08-06 10:20+0000\n" -"X-Generator: Launchpad (build 17147)\n" +"X-Launchpad-Export-Date: 2016-01-11 17:52+0000\n" +"X-Generator: Launchpad (build 17881)\n" -#: ../../common/config.py:72 +#: ../../common/configfile.py:60 +#, python-format +msgid "Failed to save config: %s" +msgstr "" + +#: ../../common/configfile.py:78 +#, python-format +msgid "Failed to load config: %s" +msgstr "" + +#: ../../common/configfile.py:352 ../../common/configfile.py:414 +#, python-format +msgid "Profile \"%s\" already exists !" +msgstr "\"%s\" profila badago lehendik ere!" + +#: ../../common/configfile.py:383 +msgid "You can't remove the last profile !" +msgstr "Ezin duzu ezabatu azken profila!" + +#: ../../common/config.py:76 msgid "Disabled" msgstr "Ezgaituta" -#: ../../common/config.py:73 +#: ../../common/config.py:77 msgid "At every boot/reboot" msgstr "Abiatze/berrabiaratze guztietan" -#: ../../common/config.py:74 +#: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "5 minuturo" -#: ../../common/config.py:75 +#: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "10 minuturo" -#: ../../common/config.py:76 +#: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "30 minuturo" -#: ../../common/config.py:77 +#: ../../common/config.py:81 msgid "Every hour" msgstr "Orduro" -#: ../../common/config.py:78 +#: ../../common/config.py:82 msgid "Every 2 hours" msgstr "2 ordutan behin" -#: ../../common/config.py:79 +#: ../../common/config.py:83 msgid "Every 4 hours" msgstr "4 ordutan behin" -#: ../../common/config.py:80 +#: ../../common/config.py:84 msgid "Every 6 hours" msgstr "6 ordutan behin" -#: ../../common/config.py:81 +#: ../../common/config.py:85 msgid "Every 12 hours" msgstr "12 ordutan behin" -#: ../../common/config.py:82 +#: ../../common/config.py:86 msgid "Custom Hours" msgstr "ordu pertsonalizatuetan" -#: ../../common/config.py:83 +#: ../../common/config.py:87 msgid "Every Day" msgstr "Egunero" -#: ../../common/config.py:84 -msgid "Daily (anacron)" -msgstr "Egunero (anacron)" +#: ../../common/config.py:88 +msgid "Repeatedly (anacron)" +msgstr "Behin eta berriz (anacron)" -#: ../../common/config.py:85 +#: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "Unitatea konektatzean (udev)" -#: ../../common/config.py:86 +#: ../../common/config.py:90 msgid "Every Week" msgstr "Astero" -#: ../../common/config.py:87 +#: ../../common/config.py:91 msgid "Every Month" msgstr "Hilero" -#: ../../common/config.py:91 +#: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Egun(ak)" -#: ../../common/config.py:92 +#: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "aste" -#: ../../common/config.py:93 +#: ../../common/config.py:97 msgid "Year(s)" msgstr "urtez" -#: ../../common/config.py:100 +#: ../../common/config.py:101 +msgid "Hour(s)" +msgstr "Ordu" + +#: ../../common/config.py:104 +msgid "Month(s)" +msgstr "Hilabete" + +#: ../../common/config.py:126 ../../qt4/settingsdialog.py:551 msgid " EXPERIMENTAL!" msgstr " ESPERIMENTALA!" -#: ../../common/config.py:103 +#: ../../common/config.py:129 msgid "Local" msgstr "Lokala" -#: ../../common/config.py:104 +#: ../../common/config.py:130 msgid "SSH" msgstr "SSH" -#: ../../common/config.py:104 ../../common/config.py:106 -#: ../../gnome/settingsdialog.py:475 ../../kde4/settingsdialog.py:1325 +#: ../../common/config.py:130 ../../common/config.py:132 +#: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "SSH gako pribatua" -#: ../../common/config.py:105 +#: ../../common/config.py:131 msgid "Local encrypted" msgstr "Lokala zifratua" -#: ../../common/config.py:105 ../../common/config.py:106 +#: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "Zifraketa" -#: ../../common/config.py:106 +#: ../../common/config.py:132 msgid "SSH encrypted" msgstr "SSH zifratua" -#: ../../common/config.py:112 +#: ../../common/config.py:135 msgid "Default" msgstr "Lehenetsia" -#: ../../common/config.py:113 +#: ../../common/config.py:136 msgid "AES128-CTR" msgstr "AES128-CTR" -#: ../../common/config.py:114 +#: ../../common/config.py:137 msgid "AES192-CTR" msgstr "AES192-CTR" -#: ../../common/config.py:115 +#: ../../common/config.py:138 msgid "AES256-CTR" msgstr "AES256-CTR" -#: ../../common/config.py:116 +#: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "ARCFOUR256" -#: ../../common/config.py:117 +#: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "ARCFOUR128" -#: ../../common/config.py:118 +#: ../../common/config.py:141 msgid "AES128-CBC" msgstr "AES128-CBC" -#: ../../common/config.py:119 +#: ../../common/config.py:142 msgid "3DES-CBC" msgstr "3DES-CBC" -#: ../../common/config.py:120 +#: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "Blowfish-CBC" -#: ../../common/config.py:121 +#: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "Cast128-CBC" -#: ../../common/config.py:122 +#: ../../common/config.py:145 msgid "AES192-CBC" msgstr "AES192-CBC" -#: ../../common/config.py:123 +#: ../../common/config.py:146 msgid "AES256-CBC" msgstr "AES256-CBC" -#: ../../common/config.py:124 +#: ../../common/config.py:147 msgid "ARCFOUR" msgstr "ARCFOUR" -#: ../../common/config.py:129 +#: ../../common/config.py:153 msgid "Main profile" msgstr "Profil nagusia" -#: ../../common/config.py:256 ../../common/config.py:275 -#: ../../common/config.py:286 ../../common/config.py:291 +#: ../../common/config.py:289 ../../common/config.py:296 +#: ../../common/config.py:307 ../../common/config.py:312 +#: ../../qt4/qt4systrayicon.py:61 #, python-format msgid "Profile: \"%s\"" msgstr "Profila: \"%s\"" -#: ../../common/config.py:256 +#: ../../common/config.py:289 msgid "Snapshots folder is not valid !" msgstr "Babeskopien karpeta ez da baliozkoa!" -#: ../../common/config.py:275 +#: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "Gutxienez karpeta bat hautatu behar duzu babeskopiarako !" -#: ../../common/config.py:286 +#: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "Ezin duzu babeskopiaren karpeta sartu babeskopian !" -#: ../../common/config.py:291 +#: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "Ezin duzu babekopiaren azpi-karpetak sartu babeskopian !" -#: ../../common/config.py:361 +#: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s ez da karpeta bat !" -#: ../../common/config.py:376 ../../common/config.py:389 +#: ../../common/config.py:380 +msgid "Host/User/Profile-ID must not be empty!" +msgstr "Ostalari/Erabiltzaile/Profila-ID ez da hutsik egon behar!" + +#: ../../common/config.py:388 ../../common/config.py:420 #, python-format msgid "" "Can't write to: %s\n" @@ -215,7 +247,45 @@ "Ezin da hor idatzi: %s\n" "Ziur zaude idazteko baimenik baduzula?" -#: ../../common/config.py:1286 +#: ../../common/config.py:400 +#, python-format +msgid "" +"Destination filesystem for '%(path)s' is formatted with FAT which doesn't " +"support hard-links. Please use a native Linux filesystem." +msgstr "" +"'%(path)s'-(r)en helburuko fitxategi-sistemaren formatua FAT da eta ez du " +"esteka gogorrik onartzen. Erabili Linux jatorriko fitxategi-sistema bat." + +#: ../../common/config.py:405 +#, python-format +msgid "" +"Destination filsystem for '%(path)s' is a SMB mounted share. Please make " +"sure the remote SMB server supports symlinks or activate '%(copyLinks)s' in " +"'%(expertOptions)s'." +msgstr "" +"'%(path)s'-(r)en helburuko fitxategi-sistema SMB-ez muntatutako partekatzea " +"da. Egiaztatu urruneko SMB zerbitzariak esteka sinbolikoak onartzen dituela " +"edo gaitu '%(copyLinks)s' '%(expertOptions)s'-en." + +#: ../../common/config.py:408 ../../qt4/settingsdialog.py:815 +msgid "Copy links (dereference symbolic links)" +msgstr "Kopiatu estekak (erreferentzia kendu esteka sinbolikoei)" + +#: ../../common/config.py:409 ../../qt4/settingsdialog.py:669 +msgid "Expert Options" +msgstr "Aukera aurreratuak" + +#: ../../common/config.py:411 +#, python-format +msgid "" +"Destination filesystem for '%(path)s is a sshfs mounted share. sshfs doesn't " +"support hard-links. Please use mode 'SSH' instead." +msgstr "" +"'%(path)s'-(r)en helburuko fitxategi-sistema sshfs-ez muntatutako " +"partekatzea da. sshfs-ek ez du esteka gogorrik onartzen. Erabili 'SSH' haren " +"ordez." + +#: ../../common/config.py:1407 msgid "" "Can't find crontab.\n" "Are you sure cron is installed ?\n" @@ -225,52 +295,30 @@ "Seguru zaude crontab instalatuta dagoela?\n" "Crontab ez baduzu babeskopia automatiko guztiak ezgaitu beharko zenuke." -#: ../../common/config.py:1338 -#, python-format -msgid "Schedule udev doesn't work with mode %s" -msgstr "Programatutako udev-a ez dabil %s moduarekin" +#: ../../common/config.py:1411 +msgid "Failed to write new crontab." +msgstr "Huts egin du crontab berria idazten." -#: ../../common/config.py:1342 +#: ../../common/config.py:1505 #, python-format -msgid "Couldn't find UUID for \"%s\"" -msgstr "Ezin da UUID aurkitu honentzat: \"%s\"" - -#: ../../common/config.py:1379 -msgid "Failed to remove udev rules" -msgstr "Huts egin du udev arauak ezabatzen" - -#: ../../common/config.py:1385 -msgid "Failed to create udev rules" -msgstr "Huts egin du udev arauak sortzen" - -#: ../../common/config.py:1420 msgid "" -"Can't find anacron.\n" -"Are you sure anacron is installed ?\n" -"If not you should disable daily anacron backups." +"Could not install Udev rule for profile %(profile_id)s. DBus Service " +"'%(dbus_interface)s' wasn't available" msgstr "" -"Ezin da aurkitu anacron.\n" -"Seguru zaude anacron instalatuta dagoela?\n" -"Ez baduzu ezgaitu beharko zenuke anacron bidezko eguneroko babeskopiak." +"Ezin izan da Udev araua instalatu %(profile_id)s profilarentzat. " +"'%(dbus_interface)s' DBus zerbitzua ez zegoen erabilgarri." -#: ../../common/config.py:1439 -msgid "Please provide your sudo password to install the udev rule." -msgstr "Idatzi zure sudo pasahitza udev araua intalatzeko." - -#: ../../common/config.py:1445 -msgid "Please provide your sudo password to remove unused udev rules." -msgstr "Idatzi zure sudo pasahitza erabili gabeko udev arauak ezabatzeko." - -#: ../../common/configfile.py:253 ../../common/configfile.py:315 +#: ../../common/config.py:1517 #, python-format -msgid "Profile \"%s\" already exists !" -msgstr "\"%s\" profila badago lehendik ere!" +msgid "Schedule udev doesn't work with mode %s" +msgstr "Programatutako udev-a ez dabil %s moduarekin" -#: ../../common/configfile.py:284 -msgid "You can't remove the last profile !" -msgstr "Ezin duzu ezabatu azken profila!" +#: ../../common/config.py:1526 +#, python-format +msgid "Couldn't find UUID for \"%s\"" +msgstr "Ezin da UUID aurkitu honentzat: \"%s\"" -#: ../../common/encfstools.py:95 +#: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" @@ -281,16 +329,16 @@ "\n" "%(error)s" -#: ../../common/encfstools.py:105 +#: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "Ezin da desmuntatu encfs %s" -#: ../../common/encfstools.py:149 +#: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "Ez dira aurkitu zifratutako karpetaren ezarpenak" -#: ../../common/encfstools.py:153 +#: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" @@ -298,25 +346,25 @@ "\n" "Sortu karpeta zifratu berri bat?" -#: ../../common/encfstools.py:154 +#: ../../common/encfstools.py:171 msgid "Cancel" msgstr "Utzi" -#: ../../common/encfstools.py:157 +#: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "Egiaztatu pasahitza mesedez" -#: ../../common/encfstools.py:161 +#: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "Pasahitzak ez datoz bat" -#: ../../common/encfstools.py:166 +#: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" "encfs ez da aurkitu. Instala ezazu mesedez horrela-edo 'apt-get install " "encfs'" -#: ../../common/encfstools.py:174 ../../common/sshtools.py:207 +#: ../../common/encfstools.py:196 ../../common/sshtools.py:262 #, python-format msgid "" "%(user)s is not member of group 'fuse'.\n" @@ -328,7 +376,7 @@ "eta sartu berriro.\n" "Begira ezazu 'man backintime' azalpen zabalagoa izateko." -#: ../../common/encfstools.py:189 +#: ../../common/encfstools.py:211 msgid "" "encfs version 1.7.2 and before has a bug with option --reverse. Please " "update encfs" @@ -336,13 +384,12 @@ "encfs-ren 1.7.2 bertsioak eta honen aurrekoek badute akats bat --reverse " "aukeran. Eguneratu encfs mesedez" -#: ../../common/encfstools.py:453 ../../common/encfstools.py:480 -#: ../../common/snapshots.py:982 ../../common/snapshots.py:1288 -#: ../../kde4/app.py:82 ../../gnome/mainwindow.glade:43 +#: ../../common/encfstools.py:512 ../../common/snapshots.py:1131 +#: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "Egin babeskopia" -#: ../../common/mount.py:195 +#: ../../common/mount.py:204 #, python-format msgid "" "Hash collision occurred in hash_id %s. Incrementing global value " @@ -351,30 +398,29 @@ "Hash talka gertatu da hemen: hash_id %s. Handitu hash_collision balioa eta " "saiatu berriz." -#: ../../common/mount.py:246 +#: ../../common/mount.py:259 #, python-format msgid "mountpoint %s not empty." msgstr "%s munstatze-puntua ez dago hutsik." -#: ../../common/mount.py:286 +#: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "Muntatze prozedura blokeatuta iraungitzean" -#: ../../common/password.py:425 +#: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "'%(profile)s' profila: Sartu pasahitza honentzat %(mode)s: " -#: ../../common/snapshots.py:171 ../../gnome/app.py:1127 -#: ../../kde4/app.py:1014 +#: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Orain" -#: ../../common/snapshots.py:182 ../../gnome/gnometools.py:37 +#: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "ERROREAK DAUDE!" -#: ../../common/snapshots.py:282 +#: ../../common/snapshots.py:344 msgid "" "### This log has been decoded with automatic search pattern\n" "### If some paths are not decoded you can manually decode them with:\n" @@ -384,15 +430,20 @@ "### Baldin eta bide-izenen bat ez badago dekodetua eskuz dekodetu dezakezu " "honekin\n" -#: ../../common/snapshots.py:465 +#: ../../common/snapshots.py:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "HUTS EGIN DU" -#: ../../common/snapshots.py:564 +#: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "Berrezarri baimenak" -#: ../../common/snapshots.py:739 +#: ../../common/snapshots.py:752 ../../qt4/app.py:377 ../../qt4/app.py:675 +#: ../../qt4/app.py:692 ../../qt4/qt4systrayicon.py:65 +msgid "Done" +msgstr "Eginda" + +#: ../../common/snapshots.py:860 msgid "" "Back In Time changed its backup format.\n" "\n" @@ -402,7 +453,7 @@ "\n" "Zure babeskopia zaharrak alda daitezke formatu berrira. Ados?" -#: ../../common/snapshots.py:749 +#: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" @@ -420,7 +471,7 @@ "\n" "(Programa oraindik gai izango da ezberdintzeko haien artean)" -#: ../../common/snapshots.py:752 +#: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" @@ -428,7 +479,7 @@ "Ez da profilik aurkitu. Lehenik eguneratu behar dituzu profilak, " "berrabiarazi Back In Time mesedez" -#: ../../common/snapshots.py:803 +#: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" @@ -449,7 +500,7 @@ "Bestela Back In Time-k profil honentzat aurreko ezarpenak berrezarriko dira, " "baina ezingo dira babeskopia berriak egin)" -#: ../../common/snapshots.py:812 +#: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" @@ -464,7 +515,7 @@ "Babeskopiak eskuz mugi ditzakezu, \n" "egiten baduzu berrabiarazi Back In Time" -#: ../../common/snapshots.py:825 +#: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" @@ -475,7 +526,7 @@ "Back In Time-k segituko du berriz ere babeskopiak egiten programatuta dagoen " "moduan" -#: ../../common/snapshots.py:830 +#: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" @@ -496,13 +547,13 @@ "Onartzen ez baduzu, Back In Time berriro abiatzean beste behin galdetuko " "dizu." -#: ../../common/snapshots.py:839 +#: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "" "Back In Time-k segituko du berriz ere babeskopiak egiten programatuta dagoen " "moduan" -#: ../../common/snapshots.py:841 +#: ../../common/snapshots.py:953 msgid "" "Back In Time still cannot continue taking new snapshots.\n" "Restart Back In Time to see the questions again" @@ -510,7 +561,11 @@ "Back In Time-k jada ezin du babeskopia berririk egin.\n" "Berrabiarazi Back In Time galdera berriz ikusteko." -#: ../../common/snapshots.py:913 +#: ../../common/snapshots.py:972 +msgid "Deferring backup while on battery" +msgstr "Atzeratu babeskopia bateriaz dabilen bitartean" + +#: ../../common/snapshots.py:1035 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it." @@ -518,96 +573,103 @@ "Ezin du aurkitu babeskopien karpeta.\n" "Karpeta unitate eramangarri batean badago konekta ezazu, mesedez." -#: ../../common/snapshots.py:915 +#: ../../common/snapshots.py:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "Itxaroten segundo %s" msgstr[1] "Itxaroten %s segundo" -#: ../../common/snapshots.py:941 +#: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "Huts egi du %s babeskopia egiten!!!" -#: ../../common/snapshots.py:950 +#: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "Amaitzen" -#: ../../common/snapshots.py:1088 +#: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "Ezin da %s karpeta sortu" -#: ../../common/snapshots.py:1107 +#: ../../common/snapshots.py:1217 msgid "..." msgstr "..." -#: ../../common/snapshots.py:1134 +#: ../../common/snapshots.py:1238 +#, python-format +msgid "Found leftover '%s' which can be continued." +msgstr "" + +#: ../../common/snapshots.py:1250 +#, python-format +msgid "Remove leftover '%s' folder from last run" +msgstr "" + +#: ../../common/snapshots.py:1263 #, python-format msgid "Can't remove folder: %s" msgstr "Ezin da %s karpeta ezabatu" -#: ../../common/snapshots.py:1219 +#: ../../common/snapshots.py:1340 #, python-format msgid "Compare with snapshot %s" msgstr "Alderatu %s babeskopiarekin" -#: ../../common/snapshots.py:1248 +#: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "Esteka gogorrak sortzen" -#: ../../common/snapshots.py:1335 +#: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "Gorde ezarpenen fitxategia" -#: ../../common/snapshots.py:1341 +#: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "Baimenak gordetzen ..." -#: ../../common/snapshots.py:1442 +#: ../../common/snapshots.py:1470 +msgid "Save permission over ssh failed. Retry normal method" +msgstr "" +"ssh gaineko baimenen gordetzeak huts egin du. Saiatu berriro metodo " +"arruntaren bidez." + +#: ../../common/snapshots.py:1521 #, python-format msgid "Can't rename %(new_path)s to %(path)s" msgstr "Ezin jarri %(new_path)s izena honi %(path)s" -#: ../../common/snapshots.py:1562 -msgid "Remove old snapshots" -msgstr "Ezabatu babeskopia zaharrak" - -#: ../../common/snapshots.py:1586 ../../kde4/settingsdialog.py:501 -#: ../../gnome/settingsdialog.glade:1660 +#: ../../common/snapshots.py:1695 ../../common/snapshots.py:1728 +#: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "Ezabatze automatikoa" -#: ../../common/snapshots.py:1591 +#: ../../common/snapshots.py:1704 +msgid "Remove old snapshots" +msgstr "Ezabatu babeskopia zaharrak" + +#: ../../common/snapshots.py:1733 msgid "Try to keep min free space" msgstr "Saiatu espazio minimoa mantentzen" -#: ../../common/snapshots.py:1621 +#: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "Saiatu gutxienez %d%% nodo libre mantentzen." -#: ../../common/sshtools.py:106 +#: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "Ezin da %s muntatu" -#: ../../common/sshtools.py:113 +#: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "Ezin da desmuntatu %s sshfs-a" -#: ../../common/sshtools.py:187 -#, python-format -msgid "" -"Failed to unlock SSH private key:\n" -"Error: %s" -msgstr "" -"Huts egin du SSH-ren gako pribatua desblokeatzen:\n" -"Errorea: %s" - -#: ../../common/sshtools.py:194 +#: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." @@ -615,13 +677,13 @@ "Ezin da SSH-ren gako pribatua desblokeatu. Okerreko pasahitza edo cron-" "entzat baliozkoa ez den pasahitza." -#: ../../common/sshtools.py:199 +#: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" "Ez da aurkitu sshfs . Mesedez instala ezazu, horrela-edo 'apt-get install " "sshfs'" -#: ../../common/sshtools.py:217 +#: ../../common/sshtools.py:278 #, python-format msgid "" "Password-less authentication for %(user)s@%(host)s failed. Look at 'man " @@ -630,7 +692,7 @@ "Huts egin du %(user)s@%(host)s-en pasahitzik gabeko autentifikazioa. " "Begiratu 'man backintime' azalpenak ikusteko." -#: ../../common/sshtools.py:229 +#: ../../common/sshtools.py:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" @@ -639,12 +701,12 @@ "Huts egin du cipher %(cipher)s ostalari honetan: %(host)s\n" "%(err)s" -#: ../../common/sshtools.py:254 +#: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "Ez da aurkitu %s ssh-known-host ostalarian." -#: ../../common/sshtools.py:274 +#: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" @@ -653,7 +715,7 @@ "Urrutiko bide-izena badago baina ez da direktorio bat:\n" " %s" -#: ../../common/sshtools.py:276 +#: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" @@ -662,7 +724,7 @@ "Urrutiko bide-izena ez dauka idazteko baimenik:\n" " %s" -#: ../../common/sshtools.py:278 +#: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" @@ -671,7 +733,7 @@ "Urrutiko bide-izena ez da exekutagarria:\n" " %s" -#: ../../common/sshtools.py:280 +#: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" @@ -680,12 +742,12 @@ "Ezin da sortu urrutiko bide-izena:\n" " %s" -#: ../../common/sshtools.py:302 +#: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "Huts egin du %s ping. Ostalaria erorita dago edo helbidea okerra da." -#: ../../common/sshtools.py:325 ../../common/sshtools.py:383 +#: ../../common/sshtools.py:423 ../../common/sshtools.py:553 #, python-format msgid "" "Remote host %(host)s doesn't support '%(command)s':\n" @@ -696,7 +758,7 @@ "%(err)s\n" "Begiratu 'man backintime' azalpenak ikusteko." -#: ../../common/sshtools.py:387 +#: ../../common/sshtools.py:556 #, python-format msgid "" "Check commands on host %(host)s returned unknown error:\n" @@ -707,96 +769,156 @@ " %(err)s\n" "Begiratu 'man backintime' azalpenak ikusteko." -#: ../../common/sshtools.py:400 +#: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "%s urrutiko ostalariak ez ditu esteka gogorrak onartzen" -#: ../../gnome/app.py:185 ../../gnome/app.py:594 ../../gnome/app.py:608 -#: ../../kde4/app.py:299 ../../kde4/app.py:570 ../../kde4/app.py:587 -msgid "Done" -msgstr "Eginda" +#: ../../qt4/app.py:81 +msgid "Refresh snapshots list" +msgstr "Freskatu babeskopien zerrenda" + +#: ../../qt4/app.py:85 ../../qt4/app.py:890 +msgid "Snapshot Name" +msgstr "babeskopiaren izena" + +#: ../../qt4/app.py:88 +msgid "Remove Snapshot" +msgstr "Ezabatu babeskopia" + +#: ../../qt4/app.py:91 +msgid "View Snapshot Log" +msgstr "Ikusi babeskopiaren erregistroa" + +#: ../../qt4/app.py:94 +msgid "View Last Log" +msgstr "Ikusi azken erregistroa" + +#: ../../qt4/app.py:99 ../../qt4/settingsdialog.py:51 +msgid "Settings" +msgstr "Ezarpenak" + +#: ../../qt4/app.py:104 +msgid "Shutdown" +msgstr "Itzali" + +#: ../../qt4/app.py:105 +msgid "Shutdown system after snapshot has finished." +msgstr "Itzali sistema babeskopia bukatu ondoren." -#: ../../gnome/app.py:189 ../../kde4/app.py:143 ../../kde4/app.py:159 -#: ../../gnome/mainwindow.glade:225 +#: ../../qt4/app.py:111 +msgid "Exit" +msgstr "Irten" + +#: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 msgid "Help" msgstr "Laguntza" -#: ../../gnome/app.py:191 ../../kde4/app.py:146 -#: ../../gnome/mainwindow.glade:223 +#: ../../qt4/app.py:122 +msgid "Config File Help" +msgstr "Config fitxategiaren laguntza" + +#: ../../qt4/app.py:125 msgid "Website" msgstr "Webgunea" -#: ../../gnome/app.py:192 ../../kde4/app.py:148 +#: ../../qt4/app.py:127 ../../qt4/app.py:982 +msgid "Changelog" +msgstr "Aldaketen egunkaria" + +#: ../../qt4/app.py:129 msgid "FAQ" msgstr "FAQ" -#: ../../gnome/app.py:193 ../../kde4/app.py:150 +#: ../../qt4/app.py:131 msgid "Ask a question" msgstr "Zerbait galdetu" -#: ../../gnome/app.py:194 ../../kde4/app.py:152 +#: ../../qt4/app.py:133 msgid "Report a bug" msgstr "Akats baten berri eman" -#: ../../gnome/app.py:196 ../../kde4/app.py:155 +#: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "Honi buruz" -#: ../../gnome/app.py:202 ../../gnome/app.py:887 -#: ../../gnome/restoredialog.py:84 ../../gnome/snapshotsdialog.py:83 -#: ../../gnome/snapshotsdialog.py:244 ../../kde4/app.py:206 -#: ../../kde4/app.py:216 ../../kde4/restoredialog.py:68 -#: ../../kde4/snapshotsdialog.py:111 ../../kde4/snapshotsdialog.py:117 -#: ../../gnome/mainwindow.glade:350 ../../gnome/mainwindow.glade:352 -#: ../../gnome/snapshotsdialog.glade:169 ../../gnome/snapshotsdialog.glade:171 +#: ../../qt4/app.py:163 +msgid "Up" +msgstr "Gora" + +#: ../../qt4/app.py:174 ../../qt4/settingsdialog.py:1776 +msgid "Show hidden files" +msgstr "Erakutsi ezkututko fitxategiak" + +#: ../../qt4/app.py:184 ../../qt4/app.py:199 ../../qt4/app.py:233 +#: ../../qt4/restoredialog.py:62 ../../qt4/settingsdialog.py:1818 +#: ../../qt4/snapshotsdialog.py:134 ../../qt4/snapshotsdialog.py:139 msgid "Restore" msgstr "Berreskuratu" -#: ../../gnome/app.py:203 ../../gnome/app.py:888 ../../gnome/gnometools.py:67 -#: ../../gnome/snapshotsdialog.py:84 ../../gnome/snapshotsdialog.py:245 -#: ../../kde4/app.py:208 ../../kde4/restoredialog.py:42 -#: ../../kde4/snapshotsdialog.py:113 +#: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 +#: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "Berreskuratu hona" -#: ../../gnome/app.py:205 ../../gnome/app.py:896 ../../gnome/app.py:1146 -#: ../../kde4/app.py:1041 -#, python-format -msgid "Restore '%s'" -msgstr "Berreskuratu '%s'" +#: ../../qt4/app.py:194 +msgid "Restore and delete new files" +msgstr "Leheneratu eta ezabatu fitxategi berriak" -#: ../../gnome/app.py:207 ../../gnome/app.py:897 ../../gnome/app.py:1147 -#: ../../kde4/app.py:1042 +#: ../../qt4/app.py:201 #, python-format -msgid "Restore '%s' to ..." -msgstr "Berreskuratu '%s' hona..." +msgid "" +"Restore selected file or folder.\n" +"If this button is grayed out this is most likely because \"%(now)s\" is " +"selected in left hand snapshots list." +msgstr "" +"Leheneratu hautatutako fitxategi edo karpetak.\n" +"Botoi hau grisa badago gehienetan da \"%(now)s\" hautatua dagoelako " +"ezkerreko irudien zerrendan." + +#: ../../qt4/app.py:206 ../../qt4/logviewdialog.py:67 +#: ../../qt4/qt4tools.py:160 ../../qt4/snapshotsdialog.py:96 +msgid "Snapshots" +msgstr "Babeskopiak" + +#: ../../qt4/app.py:213 +msgid "Snapshot" +msgstr "Irudia" + +#: ../../qt4/app.py:224 +msgid "View" +msgstr "Ikusi" -#: ../../gnome/app.py:226 ../../kde4/app.py:235 +#: ../../qt4/app.py:277 msgid "Shortcuts" msgstr "Lasterbideak" -#: ../../gnome/app.py:249 -msgid "Name" -msgstr "Izena" - -#: ../../gnome/app.py:260 -msgid "Size" -msgstr "Tamaina" - -#: ../../gnome/app.py:267 -msgid "Date" -msgstr "Data" - -#: ../../gnome/app.py:286 ../../gnome/app.py:883 -#: ../../gnome/snapshotsdialog.py:116 ../../kde4/app.py:171 -#: ../../kde4/app.py:221 ../../kde4/snapshotsdialog.py:91 -#: ../../gnome/mainwindow.glade:366 ../../gnome/mainwindow.glade:368 -#: ../../gnome/snapshotsdialog.glade:8 -msgid "Snapshots" -msgstr "Babeskopiak" +#: ../../qt4/app.py:295 +msgid "" +"This folder doesn't exist\n" +"in the current selected snapshot!" +msgstr "" +"Karpeta hau ez dago\n" +"une honetan hautatutako irudian!" + +#: ../../qt4/app.py:359 +msgid "Add to Include" +msgstr "Gehitu sartu beharrekoetan" + +#: ../../qt4/app.py:360 +msgid "Add to Exclude" +msgstr "Gehitu kanpoan utzi beharrekoetan" + +#: ../../qt4/app.py:416 +#, python-format +msgid "" +"%(appName)s is not configured. Would you like to restore a previous " +"configuration?" +msgstr "" +"%(appName)s ez dago konfiguratua. Nahi duzu leheneratu aurreko " +"konfiguraziora?" -#: ../../gnome/app.py:348 ../../kde4/app.py:362 +#: ../../qt4/app.py:440 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it and then press OK" @@ -804,414 +926,356 @@ "Ezin da aurkitu babeskopien karpeta.\n" "Unitate eramangarri batean badago konekta ezazu eta sakatu Ados" -#: ../../gnome/app.py:611 ../../kde4/app.py:590 -msgid "Done, no backup needed" -msgstr "Egina, ez da babeskopia egin behar." +#: ../../qt4/app.py:473 +msgid "" +"If you close this window Back In Time will not be able to shutdown your " +"system when the snapshot has finished.\n" +"Do you really want to close?" +msgstr "" +"Leiho hau ixten baduzu Back In Time-k ezin izango du zure sistema itzali " +"babeskopia bukatzean.\n" +"Seguru zaude itxi nahi duzula?" -#: ../../gnome/app.py:619 ../../kde4/app.py:598 +#: ../../qt4/app.py:667 ../../qt4/app.py:703 msgid "Working:" msgstr "Lanean:" -#: ../../gnome/app.py:623 ../../kde4/app.py:602 +#: ../../qt4/app.py:695 +msgid "Done, no backup needed" +msgstr "Egina, ez da babeskopia egin behar." + +#: ../../qt4/app.py:707 msgid "Error:" msgstr "Errorea:" -#: ../../gnome/app.py:636 ../../kde4/app.py:649 +#: ../../qt4/app.py:726 ../../qt4/qt4systrayicon.py:153 +msgid "Sent:" +msgstr "Bidalita:" + +#: ../../qt4/app.py:727 ../../qt4/qt4systrayicon.py:154 +msgid "Speed:" +msgstr "Abiadura:" + +#: ../../qt4/app.py:728 ../../qt4/qt4systrayicon.py:155 +msgid "ETA:" +msgstr "ETA:" + +#: ../../qt4/app.py:777 msgid "Global" msgstr "Orokorra" -#: ../../gnome/app.py:637 ../../kde4/app.py:650 +#: ../../qt4/app.py:778 msgid "Root" msgstr "Root" -#: ../../gnome/app.py:638 ../../kde4/app.py:651 +#: ../../qt4/app.py:779 msgid "Home" msgstr "Hasiera" -#: ../../gnome/app.py:662 -msgid "Bookmarks" -msgstr "Laster-markak" - -#: ../../gnome/app.py:675 ../../kde4/app.py:662 +#: ../../qt4/app.py:794 msgid "Backup folders" msgstr "Babeskopia-karpetak" -#: ../../gnome/app.py:701 ../../kde4/app.py:734 -msgid "Today" -msgstr "Gaur" - -#: ../../gnome/app.py:705 ../../kde4/app.py:738 -msgid "Yesterday" -msgstr "Atzo" - -#: ../../gnome/app.py:709 ../../kde4/app.py:742 -msgid "This week" -msgstr "Aste honetan" +#: ../../qt4/app.py:849 +msgid "This is NOT a snapshot but a live view of your local files" +msgstr "Hau EZ da irudi bat zure fitxategi lokalen ikuspegia baizik" -#: ../../gnome/app.py:713 ../../kde4/app.py:746 -msgid "Last week" -msgstr "Joan den astean" +#: ../../qt4/app.py:860 ../../qt4/app.py:1476 +#, python-format +msgid "Last check %s" +msgstr "Azken kontrola %s" -#: ../../gnome/app.py:764 ../../kde4/app.py:398 +#: ../../qt4/app.py:928 +#, python-format msgid "" -"If you close this window Back In Time will not be able to shutdown your " -"system when the snapshot has finished.\n" -"Do you really want to close?" +"Are you sure you want to remove the snapshot:\n" +"%s" msgstr "" -"Leiho hau ixten baduzu Back In Time-k ezin izango du zure sistema itzali " -"babeskopia bukatzean.\n" -"Seguru zaude itxi nahi duzula?" +"Seguru zaude babeskopia ezabatu nahi duzula?\n" +"%s" -#: ../../gnome/app.py:881 ../../gnome/snapshotsdialog.py:238 -msgid "Open" -msgstr "Ireki" +#: ../../qt4/app.py:1004 +#, python-format +msgid "" +"Backup local files before overwriting or\n" +"removing with trailing '%(suffix)s'." +msgstr "" +"Egin fitxategi lokalen babeskopia\n" +"bukaerako '%(suffix)s'-en bidez gainidatzi edo ezabatu aurretik." -#: ../../gnome/app.py:1056 ../../kde4/app.py:90 ../../kde4/app.py:805 -#: ../../gnome/mainwindow.glade:73 ../../gnome/mainwindow.glade:75 -msgid "Snapshot Name" -msgstr "babeskopiaren izena" +#: ../../qt4/app.py:1010 +msgid "" +"Are you sure you want to remove all newer files in your original folder?" +msgstr "" +"Seguru zaude ezabatu nahi duzula jatorrizko karpetatik berriagoak diren " +"fitxategi guztiak?" -#: ../../gnome/app.py:1075 -#, python-format +#: ../../qt4/app.py:1014 msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +"WARNING: deleting files in filesystem root could break your whole system!!!" msgstr "" -"Seguru zaude babeskopia ezabatu nahi duzula?\n" -"%s" +"KONTUZ: fitxategi-sistemaren erroko fitxategiak ezabatzeak sistema osoa " +"hondatu dezake!!!" -#: ../../gnome/app.py:1123 ../../kde4/app.py:1010 +#: ../../qt4/app.py:1016 +msgid "Files to be restored:" +msgstr "Berreskuratu behar diren fitxategiak:" + +#: ../../qt4/app.py:1031 +msgid "Do you really want to restore this files(s):" +msgstr "Ziur zaude fitxategi hori(ek) berreskuratu nahi duzula:" + +#: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "Babeskopia: %s" -#: ../../gnome/app.py:1124 ../../kde4/app.py:1011 +#: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "Ikusi %s -ean egindako babeskopia" -#: ../../gnome/app.py:1126 ../../kde4/app.py:1013 +#: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "Ikusi diskoaren edukia" -#: ../../gnome/logviewdialog.py:106 ../../gnome/settingsdialog.py:414 -#: ../../kde4/logviewdialog.py:83 ../../kde4/settingsdialog.py:590 +#: ../../qt4/app.py:1268 +#, python-format +msgid "Restore '%s'" +msgstr "Berreskuratu '%s'" + +#: ../../qt4/app.py:1269 +#, python-format +msgid "Restore '%s' to ..." +msgstr "Berreskuratu '%s' hona..." + +#: ../../qt4/app.py:1270 +#, python-format +msgid "Restore '%s' and delete new files" +msgstr "'%s' leheneratu eta ezabatu fitxategi berriak" + +#: ../../qt4/app.py:1368 ../../qt4/app.py:1385 +msgid "Authors" +msgstr "Egileak" + +#: ../../qt4/app.py:1369 ../../qt4/app.py:1388 +msgid "Translations" +msgstr "Itzulpenak" + +#: ../../qt4/app.py:1370 ../../qt4/app.py:1391 +msgid "License" +msgstr "Lizentzia" + +#: ../../qt4/logviewdialog.py:49 +msgid "Last Log View" +msgstr "Azken erregistroaren ikuspegia" + +#: ../../qt4/logviewdialog.py:51 +msgid "Snapshot Log View" +msgstr "Irudiaren erregistro ikuspegia" + +#: ../../qt4/logviewdialog.py:59 ../../qt4/settingsdialog.py:59 +#: ../../qt4/settingsdialog.py:274 ../../qt4/settingsdialog.py:1899 +msgid "Profile:" +msgstr "Profila:" + +#: ../../qt4/logviewdialog.py:81 +msgid "Filter:" +msgstr "Iragazi:" + +#: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 msgid "All" msgstr "Guztiak" -#: ../../gnome/logviewdialog.py:107 ../../gnome/settingsdialog.py:412 -#: ../../kde4/logviewdialog.py:84 ../../kde4/settingsdialog.py:588 +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 +#: ../../qt4/settingsdialog.py:657 msgid "Errors" msgstr "Akatsak" -#: ../../gnome/logviewdialog.py:112 ../../kde4/logviewdialog.py:89 +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 msgid "Changes" msgstr "Aldaketak" -#: ../../gnome/logviewdialog.py:115 ../../kde4/logviewdialog.py:92 +#: ../../qt4/logviewdialog.py:92 msgid "Informations" msgstr "Informazioa" -#: ../../gnome/settingsdialog.py:235 ../../kde4/settingsdialog.py:387 -msgid "Include files and folders" -msgstr "sartu fitxategiak eta karpetak" +#: ../../qt4/logviewdialog.py:101 +msgid "[E] Error, [I] Information, [C] Change" +msgstr "[E] Error, [I] Information, [C] Change" -#: ../../gnome/settingsdialog.py:264 -msgid "Exclude patterns, files or folders" -msgstr "Baztertu txantiloi, fitxategi edo karpeta hauek" +#: ../../qt4/logviewdialog.py:104 +msgid "decode paths" +msgstr "dekodetu bide-izenak" -#: ../../gnome/settingsdialog.py:411 ../../kde4/settingsdialog.py:587 -msgid "None" -msgstr "Ezer Ez" +#: ../../qt4/messagebox.py:56 +msgid "Error" +msgstr "Errorea" + +#: ../../qt4/messagebox.py:62 ../../qt4/messagebox.py:68 +msgid "Question" +msgstr "Galdera" + +#: ../../qt4/qt4systrayicon.py:69 +msgid "Start BackInTime" +msgstr "Hasi BackinTime" -#: ../../gnome/settingsdialog.py:413 ../../kde4/settingsdialog.py:589 -msgid "Changes & Errors" -msgstr "Aldaketa eta erroreak" +#: ../../qt4/qt4systrayicon.py:124 +msgid "Working..." +msgstr "Lanean..." -#: ../../gnome/settingsdialog.py:458 -msgid "Snapshots folder" -msgstr "babeskopien karpeta" +#: ../../qt4/qt4tools.py:178 +msgid "Today" +msgstr "Gaur" -#: ../../gnome/settingsdialog.py:466 ../../kde4/settingsdialog.py:1314 -msgid "Are you sure you want to change snapshots folder ?" -msgstr "Seguru zaude aldatu nahi duzula babeskopien karpeta?" - -#: ../../gnome/settingsdialog.py:901 ../../kde4/settingsdialog.py:914 -msgid "" -"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " -"*/3 for periodic backups every 3 hours" -msgstr "" -"Orduak pertsonalizatzeko komaz banatutako ordu-zerrenda erabili behar duzu " -"(hala nola 8,12,18,23) edo */3 hiru ordutan behingo babeskopia egiteko." - -#: ../../gnome/settingsdialog.py:1141 ../../kde4/settingsdialog.py:653 -msgid "New profile" -msgstr "Profil berria" - -#: ../../gnome/settingsdialog.py:1155 ../../kde4/settingsdialog.py:669 -msgid "Rename profile" -msgstr "Berrizendatu profila" - -#: ../../gnome/settingsdialog.py:1167 ../../kde4/settingsdialog.py:683 -#, python-format -msgid "Are you sure you want to delete the profile \"%s\" ?" -msgstr "Seguru zaude \"%s\" profila ezabatu nahi duzula?" - -#: ../../gnome/settingsdialog.py:1173 ../../kde4/settingsdialog.py:1292 -msgid "Include folder" -msgstr "Sartu karpeta" - -#: ../../gnome/settingsdialog.py:1193 ../../kde4/settingsdialog.py:1278 -msgid "Include file" -msgstr "Sartu fitxategia" - -#: ../../gnome/settingsdialog.py:1235 ../../kde4/settingsdialog.py:1241 -msgid "Exclude pattern" -msgstr "Baztertu txantiloia" - -#: ../../gnome/settingsdialog.py:1240 ../../kde4/settingsdialog.py:1251 -msgid "Exclude patterns can't contain ':' char !" -msgstr "Baztertu ':' karakterea duten ereduak" - -#: ../../gnome/settingsdialog.py:1246 ../../kde4/settingsdialog.py:1257 -msgid "Exclude file" -msgstr "Baztertu fitxategia" - -#: ../../gnome/settingsdialog.py:1257 ../../kde4/settingsdialog.py:1261 -msgid "Exclude folder" -msgstr "Baztertu karpeta" - -#: ../../gnome/snapshotsdialog.py:240 -msgid "Jump to" -msgstr "Jauzi hona" - -#: ../../gnome/snapshotsdialog.py:248 ../../kde4/snapshotsdialog.py:164 -msgid "Diff" -msgstr "Diff" - -#: ../../gnome/snapshotsdialog.py:277 ../../kde4/snapshotsdialog.py:339 -msgid "You can't compare a snapshot to itself" -msgstr "Ezin duzu alderatu babeskopia bat bere buruarekin" - -#: ../../gnome/snapshotsdialog.py:284 ../../kde4/snapshotsdialog.py:346 -#, python-format -msgid "Command not found: %s" -msgstr "Ez da komandoa aurkitu: %s" - -#: ../../gnome/snapshotsdialog.py:307 ../../kde4/snapshotsdialog.py:367 -#, python-format -msgid "" -"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" -msgstr "" -"Seguru zaude \"%(snapshot_id)s babeskopiako \"%(file)s\" fitxategia " -"ezabatu nahi duzula?\n" - -#: ../../gnome/snapshotsdialog.py:310 ../../kde4/snapshotsdialog.py:370 -#, python-format -msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" -msgstr "" -"Seguru zaude \"%(count)d babeskopiako \"%(file)s\" fitxategia ezabatu nahi " -"duzula?\n" - -#: ../../gnome/snapshotsdialog.py:312 ../../kde4/snapshotsdialog.py:372 -msgid "WARNING: This can not be revoked!" -msgstr "ARGI IBILI: Honek ez dauka atzera bueltarik!" - -#: ../../gnome/snapshotsdialog.py:317 ../../kde4/snapshotsdialog.py:377 -#, python-format -msgid "Exclude \"%s\" from future snapshots?" -msgstr "Baztertu \"%s\" hurrengo babeskopietan?" - -#: ../../kde4/app.py:86 ../../gnome/mainwindow.glade:58 -#: ../../gnome/mainwindow.glade:60 -msgid "Refresh snapshots list" -msgstr "Freskatu babeskopien zerrenda" - -#: ../../kde4/app.py:94 ../../gnome/mainwindow.glade:88 -#: ../../gnome/mainwindow.glade:90 -msgid "Remove Snapshot" -msgstr "Ezabatu babeskopia" - -#: ../../kde4/app.py:98 ../../gnome/mainwindow.glade:105 -msgid "View Snapshot Log" -msgstr "Ikusi babeskopiaren erregistroa" - -#: ../../kde4/app.py:102 ../../gnome/mainwindow.glade:121 -msgid "View Last Log" -msgstr "Ikusi azken erregistroa" - -#: ../../kde4/app.py:108 ../../kde4/settingsdialog.py:69 -#: ../../gnome/mainwindow.glade:144 ../../gnome/mainwindow.glade:146 -#: ../../gnome/settingsdialog.glade:7 -msgid "Settings" -msgstr "Ezarpenak" - -#: ../../kde4/app.py:124 ../../gnome/mainwindow.glade:169 -msgid "Shutdown system after snapshot has finished." -msgstr "Itzali sistema babeskopia bukatu ondoren." +#: ../../qt4/qt4tools.py:183 +msgid "Yesterday" +msgstr "Atzo" -#: ../../kde4/app.py:131 ../../gnome/mainwindow.glade:184 -#: ../../gnome/mainwindow.glade:186 -msgid "Exit" -msgstr "Irten" +#: ../../qt4/qt4tools.py:188 +msgid "This week" +msgstr "Aste honetan" -#: ../../kde4/app.py:186 ../../gnome/mainwindow.glade:289 -msgid "Up" -msgstr "Gora" +#: ../../qt4/qt4tools.py:193 +msgid "Last week" +msgstr "Joan den astean" -#: ../../kde4/app.py:199 ../../gnome/mainwindow.glade:325 -msgid "Show hidden files" -msgstr "Erakutsi ezkututko fitxategiak" +#: ../../qt4/restoredialog.py:75 +msgid "Show full Log" +msgstr "Erakutsi erregistro osoa" -#: ../../kde4/app.py:244 -msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" -msgstr "" -"Karpeta hori ez dago\n" -"uneko babeskopian!" +#: ../../qt4/settingsdialog.py:68 +msgid "Edit" +msgstr "Editatu" -#: ../../kde4/app.py:839 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +#: ../../qt4/settingsdialog.py:73 +msgid "Modify for Full System Backup" msgstr "" -"Seguru zaude babeskopia ezabatu nahi duzula?\n" -"%s" - -#: ../../kde4/app.py:1140 ../../kde4/kde4systrayicon.py:117 -msgid "Working..." -msgstr "Lanean..." - -#: ../../kde4/logviewdialog.py:55 -msgid "Error Log View" -msgstr "Errorea log erregistroa ikusten" - -#: ../../kde4/logviewdialog.py:65 ../../kde4/settingsdialog.py:79 -#: ../../kde4/settingsdialog.py:293 ../../gnome/logviewdialog.glade:73 -#: ../../gnome/settingsdialog.glade:72 -msgid "Profile:" -msgstr "Profila:" -#: ../../kde4/logviewdialog.py:77 ../../gnome/logviewdialog.glade:110 -msgid "Filter:" -msgstr "Iragazi:" - -#: ../../kde4/logviewdialog.py:100 ../../gnome/logviewdialog.glade:169 -msgid "[E] Error, [I] Information, [C] Change" -msgstr "[E] Error, [I] Information, [C] Change" - -#: ../../kde4/logviewdialog.py:103 ../../gnome/logviewdialog.glade:195 -msgid "decode paths" -msgstr "dekodetu bide-izenak" +#: ../../qt4/settingsdialog.py:77 ../../qt4/settingsdialog.py:451 +msgid "Add" +msgstr "Gehitu" -#: ../../kde4/settingsdialog.py:88 -msgid "Edit" -msgstr "Editatu" +#: ../../qt4/settingsdialog.py:81 ../../qt4/settingsdialog.py:408 +#: ../../qt4/settingsdialog.py:467 +msgid "Remove" +msgstr "Ezabatu" -#: ../../kde4/settingsdialog.py:106 ../../gnome/settingsdialog.glade:1207 +#: ../../qt4/settingsdialog.py:96 msgid "General" msgstr "Orokorra" -#: ../../kde4/settingsdialog.py:114 ../../gnome/settingsdialog.glade:199 +#: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "Modua:" -#: ../../kde4/settingsdialog.py:127 ../../kde4/settingsdialog.py:1311 +#: ../../qt4/settingsdialog.py:119 +#, python-format +msgid "" +"Warning: %(app)s uses EncFS for encryption. A recent security audit " +"revealed several possible attack vectors for this. Please take a look at 'A " +"NOTE ON SECURITY' in 'man backintime'." +msgstr "" +"Kontuz: %(app)s-k EncFS erabiltzen du kodetzeko. Berriki egindako " +"segurtasun auditoria batek hari egindako hainbat erasoen berri eman du. Eman " +"begirada bat Backintime-ren man-eko 'A NOTE ON SECURITY' oharrari." + +#: ../../qt4/settingsdialog.py:129 ../../qt4/settingsdialog.py:1568 msgid "Where to save snapshots" msgstr "Non gorde babeskopiak" -#: ../../kde4/settingsdialog.py:146 +#: ../../qt4/settingsdialog.py:145 +msgid "Folder" +msgstr "Karpeta" + +#: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "SSH ezarpenak" -#: ../../kde4/settingsdialog.py:158 ../../kde4/settingsdialog.py:283 -#: ../../gnome/settingsdialog.glade:323 ../../gnome/settingsdialog.glade:583 -#: ../../gnome/settingsdialog.glade:874 +#: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "Ostalaria" -#: ../../kde4/settingsdialog.py:163 ../../gnome/settingsdialog.glade:350 -#: ../../gnome/settingsdialog.glade:610 +#: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "Ataka:" -#: ../../kde4/settingsdialog.py:168 ../../kde4/settingsdialog.py:288 -#: ../../gnome/settingsdialog.glade:377 ../../gnome/settingsdialog.glade:637 -#: ../../gnome/settingsdialog.glade:902 +#: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "Erabiltzailea:" -#: ../../kde4/settingsdialog.py:173 ../../gnome/settingsdialog.glade:416 +#: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "Bide-izena:" -#: ../../kde4/settingsdialog.py:178 ../../gnome/settingsdialog.glade:459 +#: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "Zifratua:" -#: ../../kde4/settingsdialog.py:184 +#: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "Gako pribatua:" -#: ../../kde4/settingsdialog.py:228 ../../kde4/settingsdialog.py:237 -#: ../../kde4/settingsdialog.py:243 ../../gnome/settingsdialog.glade:703 -#: ../../gnome/settingsdialog.glade:743 +#: ../../qt4/settingsdialog.py:201 +msgid "Key File" +msgstr "Gako fitxategia" + +#: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 +#: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "Pasahitza" -#: ../../kde4/settingsdialog.py:249 ../../gnome/settingsdialog.glade:775 +#: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "Gorde pasahitza" -#: ../../kde4/settingsdialog.py:252 ../../gnome/settingsdialog.glade:792 +#: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" "Cron-entzako cache-pasahitza (Segurtasun akatsa: root-ek pasahitza irakur " "dezake)" -#: ../../kde4/settingsdialog.py:264 ../../gnome/settingsdialog.glade:968 +#: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "Aurreratua" -#: ../../kde4/settingsdialog.py:276 ../../gnome/settingsdialog.glade:848 -msgid "Auto Host / User / Profile Id" -msgstr "Ostalaria / Erabiltzailea / Profilaren Id automatikoa" +#: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 +msgid "Full snapshot path: " +msgstr "Irudiaren bide osoa: " -#: ../../kde4/settingsdialog.py:301 +#: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "Programaketa" -#: ../../kde4/settingsdialog.py:311 ../../gnome/settingsdialog.glade:1092 +#: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "Eguna:" -#: ../../kde4/settingsdialog.py:322 ../../gnome/settingsdialog.glade:1079 +#: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "Asteguna" -#: ../../kde4/settingsdialog.py:333 ../../gnome/settingsdialog.glade:1066 +#: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "Ordua:" -#: ../../kde4/settingsdialog.py:344 ../../gnome/settingsdialog.glade:1053 +#: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "Orduak:" -#: ../../kde4/settingsdialog.py:353 ../../gnome/settingsdialog.glade:1014 +#: ../../qt4/settingsdialog.py:339 msgid "" -"Run Back In Time periodically with anacron. This is useful if the computer " -"is not running regular." +"Run Back In Time repeatedly. This is useful if the computer is not running " +"regular." msgstr "" -"Exekutatu Back In Time periodikoki Anacron erabiliaz. Hau oso praktikoa da " -"ordenagailua ez badabil fin." +"Erabili Back In Time behin eta berriz. Egin bereziki ordenagailua ez badabil " +"ongi." -#: ../../kde4/settingsdialog.py:357 ../../gnome/settingsdialog.glade:1040 -msgid "Frequency in days:" -msgstr "Maiztasuna egunetan:" +#: ../../qt4/settingsdialog.py:344 +msgid "Every:" +msgstr "Guztiak:" -#: ../../kde4/settingsdialog.py:368 ../../gnome/settingsdialog.glade:1026 +#: ../../qt4/settingsdialog.py:362 msgid "" "Run Back In Time as soon as the drive is connected (only once every X " "days).\n" @@ -1221,25 +1285,27 @@ "bakarrik).\n" "Zure sudo pasahitza eskatuko zaizu" -#: ../../kde4/settingsdialog.py:379 ../../gnome/settingsdialog.glade:1310 +#: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Sartu" -#: ../../kde4/settingsdialog.py:403 ../../kde4/settingsdialog.py:445 -#: ../../gnome/settingsdialog.glade:1411 +#: ../../qt4/settingsdialog.py:381 +msgid "Include files and folders" +msgstr "sartu fitxategiak eta karpetak" + +#: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "Gehitu fitxategia" -#: ../../kde4/settingsdialog.py:408 ../../kde4/settingsdialog.py:450 -#: ../../gnome/settingsdialog.glade:1427 +#: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Gehitu karpeta" -#: ../../kde4/settingsdialog.py:418 ../../gnome/settingsdialog.glade:1474 +#: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Kanpoan utzi" -#: ../../kde4/settingsdialog.py:421 ../../gnome/settingsdialog.glade:1328 +#: ../../qt4/settingsdialog.py:417 msgid "" "Warning: Wildcards ('foo*', '[fF]oo', 'fo?') will be ignored with " "mode 'SSH encrypted'.\n" @@ -1249,313 +1315,470 @@ "ezagutuko 'SSH encrypted' moduan.\n" "Bakarrik erabil daitezke banatutako asteriskoak ('foo/*', 'foo/**/bar')" -#: ../../kde4/settingsdialog.py:430 +#: ../../qt4/settingsdialog.py:425 +msgid "Exclude patterns, files or folders" +msgstr "Baztertu txantiloi, fitxategi edo karpeta hauek" + +#: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "Oso gomendagarria" -#: ../../kde4/settingsdialog.py:460 ../../gnome/settingsdialog.glade:1905 +#: ../../qt4/settingsdialog.py:463 +msgid "Add default" +msgstr "Gehitu lehenetsia" + +#: ../../qt4/settingsdialog.py:474 +msgid "Exclude files bigger than: " +msgstr "Utzi kanpoan hau baino handiagoak diren fitxategiak: " + +#: ../../qt4/settingsdialog.py:475 +#, python-format +msgid "" +"Exclude files bigger than value in %(prefix)s.\n" +"With 'Full rsync mode' disabled this will only affect new files\n" +"because for rsync this is a transfer option, not an exclude option.\n" +"So big files that has been backed up before will remain in snapshots\n" +"even if they had changed." +msgstr "" +"Utzi kanpoan hau baino handiagoak diren fitxategiak %(prefix)s\n" +"'rsync osoko modua' desgaituta badago horrek fitxategi berriei soilik " +"eragingo die\n" +"zeren eta rsync-entzat hori transferentzia aukera bat da, ez baztertze " +"aukera bat.\n" +"Beraz babeskopia lehendik egina zituzten fitxategi handiak mantenduko dira " +"irudian\n" +"nahiz eta aldaketak jasan." + +#: ../../qt4/settingsdialog.py:493 msgid "Auto-remove" msgstr "Ezabaketa automatikoa" -#: ../../kde4/settingsdialog.py:464 ../../gnome/settingsdialog.glade:1608 +#: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "Hau baino zaharragoa:" -#: ../../kde4/settingsdialog.py:478 ../../gnome/settingsdialog.glade:1624 +#: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "Toki librea hau baino txikagoa bada:" -#: ../../kde4/settingsdialog.py:490 ../../gnome/settingsdialog.glade:1642 +#: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "Baldin eta nodo libreak hauek baino gutxiago badira:" -#: ../../kde4/settingsdialog.py:514 ../../gnome/settingsdialog.glade:1697 +#: ../../qt4/settingsdialog.py:551 +msgid "Run in background on remote Host." +msgstr "Exekutatu atzeko planoan urrutiko ostalarian." + +#: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "Mantendu babeskopia guztiak" -#: ../../kde4/settingsdialog.py:517 ../../kde4/settingsdialog.py:522 -#: ../../gnome/settingsdialog.glade:1705 ../../gnome/settingsdialog.glade:1729 +#: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "egunez" -#: ../../kde4/settingsdialog.py:519 ../../gnome/settingsdialog.glade:1717 +#: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "Mantendu eguneko babeskopia bana azkeneko" -#: ../../kde4/settingsdialog.py:524 ../../gnome/settingsdialog.glade:1743 +#: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "Mantendu asteko babeskopia bana azkeneko" -#: ../../kde4/settingsdialog.py:527 +#: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "astetarako" -#: ../../kde4/settingsdialog.py:529 ../../gnome/settingsdialog.glade:1769 +#: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "Mantendu hilabeteko babeskopia bana azkeneko" -#: ../../kde4/settingsdialog.py:532 ../../gnome/settingsdialog.glade:1781 +#: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "hilabetez" -#: ../../kde4/settingsdialog.py:534 ../../gnome/settingsdialog.glade:1795 +#: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "Mantendu urteko babeskopia bana urtero" -#: ../../kde4/settingsdialog.py:537 ../../gnome/settingsdialog.glade:1496 +#: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "Ez ezabatu izena duten babeskopiak" -#: ../../kde4/settingsdialog.py:546 ../../gnome/settingsdialog.glade:2104 +#: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Aukerak" -#: ../../kde4/settingsdialog.py:549 ../../gnome/settingsdialog.glade:1920 +#: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Gaitu notifikazioak" -#: ../../kde4/settingsdialog.py:552 ../../gnome/settingsdialog.glade:1937 +#: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "Ezgaitu babeskopiak egitea bateriaz funtzionatzean" -#: ../../kde4/settingsdialog.py:555 +#: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" msgstr "Energia egoera ez dago eskurtagarri sistemarentzat" -#: ../../kde4/settingsdialog.py:558 ../../gnome/settingsdialog.glade:1955 -msgid "Backup files on restore" -msgstr "Babeskopiaren fitxategiak berreskuratzean" +#: ../../qt4/settingsdialog.py:611 +msgid "Run only one snapshot at a time" +msgstr "Egin irudi bat aldiko." -#: ../../kde4/settingsdialog.py:561 ../../gnome/settingsdialog.glade:1972 +#: ../../qt4/settingsdialog.py:612 +msgid "" +"Other snapshots will be blocked until the current snapshot is done.\n" +"This is a global option. So it will effect all profiles for this user.\n" +"But you need to activate this for all other users, too." +msgstr "" +"Beste irudiak blokeatuko dira oraingo irudia egiten den bitartean.\n" +"Hau aukera globala da, beraz, erabiltzaile honen profil guztiei eragiten " +"die.\n" +"Baina beste erabiltzaileentzat aktibatu behar da ere." + +#: ../../qt4/settingsdialog.py:617 +msgid "Backup replaced files on restore" +msgstr "Egin berreskurapenean ordeztutako fitxategien babeskopia" + +#: ../../qt4/settingsdialog.py:618 +#, python-format +msgid "" +"Newer versions of files will be renamed with trailing '%(suffix)s' before " +"restoring.\n" +"If you don't need them anymore you can remove them with '%(cmd)s'" +msgstr "" +"Berriagoak diren fitxategiak berrizendatuko dira '%(suffix)s' kokapenarekin " +"leheneratu baino lehen.\n" +"Ez badituzu gehiago behar ezabatu ditzakezu '%(cmd)s'-rekin." + +#: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "Jarraitu erroreak egon arren (mantendu babeskopia osatu gabea)" -#: ../../kde4/settingsdialog.py:564 ../../gnome/settingsdialog.glade:1989 +#: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "Erabili kontrol-batura aldaketak detektatzeko" -#: ../../kde4/settingsdialog.py:567 ../../gnome/settingsdialog.glade:2006 +#: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "Rsync modu osoa. Azkarragoa izan daiteke baina:" -#: ../../kde4/settingsdialog.py:568 ../../gnome/settingsdialog.glade:2032 +#: ../../qt4/settingsdialog.py:634 msgid "" -"- snapshots are no read-only\n" -"- destination file-system must support all linux attributes (dates, rights, " +"- snapshots are not read-only\n" +"- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" -"- babeskopiak ez dira irakurtzeko-soilik \n" +"- babeskopiak ez dira irakurtzeko-soilik\n" "- helburuko fitxategi-sistema Linux atributu guztiak onartu behar ditu " "(datak, eskubideak, erabiltzaileak, taldeak...)" -#: ../../kde4/settingsdialog.py:575 ../../gnome/settingsdialog.glade:2045 +#: ../../qt4/settingsdialog.py:641 +msgid "Take a new snapshot regardless of there were changes or not." +msgstr "Egin irudi berri bat aldaketarik izan ote den kontuan izan gabe." + +#: ../../qt4/settingsdialog.py:644 msgid "Check for changes (don't take a new snapshot if nothing changed)" msgstr "" "Begiratu aldaketarik badagoen (ez egin babeskopia berririk ez bada ezer " "aldatu)" -#: ../../kde4/settingsdialog.py:582 +#: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "Log maila:" -#: ../../kde4/settingsdialog.py:597 ../../gnome/settingsdialog.glade:2366 -msgid "Expert Options" -msgstr "Aukera aurreratuak" +#: ../../qt4/settingsdialog.py:656 +msgid "None" +msgstr "Ezer Ez" -#: ../../kde4/settingsdialog.py:600 +#: ../../qt4/settingsdialog.py:658 +msgid "Changes & Errors" +msgstr "Aldaketa eta erroreak" + +#: ../../qt4/settingsdialog.py:674 msgid "Change these options only if you really know what you are doing !" msgstr "Aldatu aukera hauek bakarrik zertan ari zaren badakizu!" -#: ../../kde4/settingsdialog.py:608 ../../gnome/settingsdialog.glade:2133 -msgid "Run 'nice' as cron job (default: enabled)" -msgstr "Exekutatu 'nice' cron-ataza programatu moduan (lehenetsia: gaitua)" - -#: ../../kde4/settingsdialog.py:611 ../../gnome/settingsdialog.glade:2150 -msgid "Run 'ionice' as cron job (default: enabled)" -msgstr "" -"Exekutatu 'ionice' cron-ataza programatu moduan (lehenetsia: gaitua)" +#: ../../qt4/settingsdialog.py:678 +msgid "Run 'nice':" +msgstr "Exekutatu 'nice':" + +#: ../../qt4/settingsdialog.py:684 ../../qt4/settingsdialog.py:696 +msgid "as cron job" +msgstr "programatutako ataza bezala" + +#: ../../qt4/settingsdialog.py:687 ../../qt4/settingsdialog.py:702 +#: ../../qt4/settingsdialog.py:716 +msgid "on remote host" +msgstr "urrutiko ostalarian" + +#: ../../qt4/settingsdialog.py:690 +msgid "Run 'ionice':" +msgstr "Exekutatu 'ionice'" + +#: ../../qt4/settingsdialog.py:699 +msgid "when taking a manual snapshot" +msgstr "eskuzko irudia egitean" + +#: ../../qt4/settingsdialog.py:706 +msgid "Run 'rsync' with 'nocache':" +msgstr "Exekutatu 'rsync' 'nocache'-rekin" + +#: ../../qt4/settingsdialog.py:712 +msgid "on local machine" +msgstr "ordenagailuan bertan" + +#: ../../qt4/settingsdialog.py:719 +msgid "Redirect stdout to /dev/null in cronjobs." +msgstr "Birzuzendu stdout /dev/null-era cronjob-etan." + +#: ../../qt4/settingsdialog.py:725 +msgid "Redirect stderr to /dev/null in cronjobs." +msgstr "Birzuzendu stderr /dev/null-era cronjob-etan." -#: ../../kde4/settingsdialog.py:614 ../../gnome/settingsdialog.glade:2167 -msgid "Run 'ionice' when taking a manual snapshot (default: disabled)" -msgstr "" -"Exekutatu 'ionice' babeskopia eskuz egiten duzunean (lehenetsia: ezgaitua)" - -#: ../../kde4/settingsdialog.py:617 ../../gnome/settingsdialog.glade:2184 -msgid "Run 'nice' on remote host (default: disabled)" -msgstr "Exekutatu 'nice' urruneko ostalarian (lehenetsita: ezgaitua)" - -#: ../../kde4/settingsdialog.py:620 ../../gnome/settingsdialog.glade:2201 -msgid "Run 'ionice' on remote host (default: disabled)" -msgstr "Exekutatu 'ionice' urruneko ostalarian (lehenetsita: ezgaitua)" - -#: ../../kde4/settingsdialog.py:626 ../../gnome/settingsdialog.glade:2224 +#: ../../qt4/settingsdialog.py:734 msgid "Limit rsync bandwidth usage: " msgstr "Mugatu rsync-en banda-zabaleraren erabilera: " -#: ../../kde4/settingsdialog.py:629 ../../gnome/settingsdialog.glade:2259 +#: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr " KB/sec" -#: ../../kde4/settingsdialog.py:634 ../../gnome/settingsdialog.glade:2280 +#: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "Mantendu ACL" -#: ../../kde4/settingsdialog.py:637 ../../gnome/settingsdialog.glade:2297 +#: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "Mantendu atributu hedatuak (xattr)" -#: ../../kde4/settingsdialog.py:640 ../../gnome/settingsdialog.glade:2314 +#: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute links)" msgstr "Kopiatu esteka inseguruak (egin bakarrik esteka absolutuekin)" -#: ../../kde4/settingsdialog.py:643 ../../gnome/settingsdialog.glade:2331 -msgid "Copy links (dereference symbolic links)" -msgstr "Kopiatu estekak (erreferentzia kendu esteka sinbolikoei)" +#: ../../qt4/settingsdialog.py:834 +msgid "Paste additional options to rsync" +msgstr "Itsatsi aukera gehigarriak rsync-eri" -#: ../../kde4/snapshotsdialog.py:46 ../../kde4/snapshotsdialog.py:173 -#: ../../gnome/snapshotsdialog.glade:385 -msgid "Diff Options" -msgstr "Diff aukerak" +#: ../../qt4/settingsdialog.py:837 +msgid "" +"Options must be quoted e.g. --exclude-from=\"/path/to/my exclude file\"." +msgstr "" +"Aukerak kakotxen artean idatzi, esate baterako --exclude-from=\"/path/to/my " +"exclude file\"." -#: ../../kde4/snapshotsdialog.py:56 ../../gnome/snapshotsdialog.glade:314 -msgid "Command:" -msgstr "Komandoa:" +#: ../../qt4/settingsdialog.py:847 +msgid "Add prefix to SSH commands" +msgstr "Gehitu aurrizkia SSH komandoei" -#: ../../kde4/snapshotsdialog.py:60 ../../gnome/snapshotsdialog.glade:322 -msgid "Parameters:" -msgstr "Parametroak:" +#: ../../qt4/settingsdialog.py:850 +#, python-format +msgid "" +"Prefix to run before every command on remote host.\n" +"Variables need to be escaped with \\$FOO.\n" +"This doesn't touch rsync. So to add a prefix\n" +"for rsync use \"%(cb_rsync_options)s\" with\n" +"%(rsync_options_value)s\n" +"\n" +"%(default)s: %(def_value)s" +msgstr "" +"Urrutiko ostalarian exekutatu beharreko edozein komandoren aurrizkia.\n" +"Aldagaiek \\$FOO-ren bidez ihes egin behar dute.\n" +"Honek ez dio eragiten rsync-eri. Beraz, rsync-eri aurrizki bat\n" +"gehitzeko erabili \"%(cb_rsync_options)s\"\n" +"%(rsync_options_value)s-rekin\n" +"\n" +"%(default)s: %(def_value)s" -#: ../../kde4/snapshotsdialog.py:64 ../../gnome/snapshotsdialog.glade:334 -msgid "Use %1 and %2 for path parameters" -msgstr "Erabili %1 eta %2 bide-izenen parametroetarako" +#: ../../qt4/settingsdialog.py:858 ../../qt4/settingsdialog.py:1691 +msgid "default" +msgstr "lehenetsia" -#: ../../kde4/snapshotsdialog.py:123 ../../gnome/snapshotsdialog.glade:184 -#: ../../gnome/snapshotsdialog.glade:186 -msgid "Delete" -msgstr "Ezabatu" +#: ../../qt4/settingsdialog.py:875 +msgid "Restore Config" +msgstr "Leheneratu konfigurazioa" -#: ../../kde4/snapshotsdialog.py:128 ../../gnome/snapshotsdialog.glade:199 -#: ../../gnome/snapshotsdialog.glade:201 -msgid "Select All" -msgstr "Hautatu denak" +#: ../../qt4/settingsdialog.py:891 +msgid "" +"Full system backup can only create a snapshot to be restored to the same " +"physical disk(s) with the same disk partitioning as from the source; " +"restoring to new physical disks or the same disks with different " +"partitioning will yield a potentially broken and unusable system.\n" +"\n" +"Full system backup will override some settings that may have been " +"customized. Continue?" +msgstr "" -#: ../../kde4/snapshotsdialog.py:132 ../../gnome/snapshotsdialog.glade:88 -msgid "List only different snapshots" -msgstr "Zerrendatu bakarri ezberdinak diren babeskopiak" +#: ../../qt4/settingsdialog.py:922 +msgid "New profile" +msgstr "Profil berria" -#: ../../kde4/snapshotsdialog.py:139 ../../gnome/snapshotsdialog.glade:110 -msgid "List only equal snapshots to: " -msgstr "Zerrendatu bakarri berdinak diren babeskopiak hona: " +#: ../../qt4/settingsdialog.py:938 +msgid "Rename profile" +msgstr "Berrizendatu profila" -#: ../../kde4/snapshotsdialog.py:149 ../../gnome/snapshotsdialog.glade:146 -msgid "Deep check (more accurate, but slow)" -msgstr "Egiaztatze sakona (zehaztasun handiagoa, baina motela)" +#: ../../qt4/settingsdialog.py:952 +#, python-format +msgid "Are you sure you want to delete the profile \"%s\" ?" +msgstr "Seguru zaude \"%s\" profila ezabatu nahi duzula?" -#: ../../kde4/snapshotsdialog.py:174 -msgid "Go To" -msgstr "Joan hona:" +#: ../../qt4/settingsdialog.py:1191 +msgid "" +"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " +"*/3 for periodic backups every 3 hours" +msgstr "" +"Orduak pertsonalizatzeko komaz banatutako ordu-zerrenda erabili behar duzu " +"(hala nola 8,12,18,23) edo */3 hiru ordutan behingo babeskopia egiteko." -#: ../../gnome/logviewdialog.glade:9 -msgid "Log View" -msgstr "Log-a ikusi" - -#: ../../gnome/logviewdialog.glade:179 -msgid "scroll down automatic" -msgstr "Korritu behera automatikoki" - -#: ../../gnome/mainwindow.glade:7 -msgid "Back In Time" -msgstr "Back in Time" - -#: ../../gnome/mainwindow.glade:45 -msgid "Backup Now" -msgstr "Egin babeskopia orain" +#: ../../qt4/settingsdialog.py:1489 +msgid "Exclude pattern" +msgstr "Baztertu txantiloia" -#: ../../gnome/mainwindow.glade:171 -msgid "Shutdown" -msgstr "Itzali" +#: ../../qt4/settingsdialog.py:1502 +msgid "Exclude file" +msgstr "Baztertu fitxategia" -#: ../../gnome/mainwindow.glade:287 -msgid "Parent folder" -msgstr "Goragoko karpeta" +#: ../../qt4/settingsdialog.py:1506 +msgid "Exclude folder" +msgstr "Baztertu karpeta" -#: ../../gnome/mainwindow.glade:327 -msgid "Hidden files" -msgstr "Ezkutuko fitxategiak" +#: ../../qt4/settingsdialog.py:1525 +msgid "Include file" +msgstr "Sartu fitxategia" -#: ../../gnome/mainwindow.glade:451 +#: ../../qt4/settingsdialog.py:1533 ../../qt4/settingsdialog.py:1553 +#, python-format msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +"\"%s\" is a symlink. The linked target will not be backed up until you " +"include it, too.\n" +"Would you like to include the symlinks target instead?" msgstr "" -"Karpeta hau ez dago\n" -"uneko babeskopian!" +"\"%s\" esteka sinboliko bat da. Estekatutako objektuaren babeskopia ez da " +"egingo are eta bera ere gehitu arte.\n" +"Nahi duzu gehitu esteka sinbolikoen helburu-objektuak?" -#: ../../gnome/settingsdialog.glade:287 -msgid "Where to save snapshots" -msgstr "Non gorde babeskopiak" +#: ../../qt4/settingsdialog.py:1545 +msgid "Include folder" +msgstr "Sartu karpeta" -#: ../../gnome/settingsdialog.glade:483 -msgid "Private key:" -msgstr "Gako pribatua:" +#: ../../qt4/settingsdialog.py:1572 +msgid "Are you sure you want to change snapshots folder ?" +msgstr "Seguru zaude aldatu nahi duzula babeskopien karpeta?" -#: ../../gnome/settingsdialog.glade:534 -msgid "Advanced SSH Settings" -msgstr "SSH ezarpen aurreratuak" +#: ../../qt4/settingsdialog.py:1688 +msgid "enabled" +msgstr "gaituta" -#: ../../gnome/settingsdialog.glade:552 -msgid "SSH Settings" -msgstr "SSH ezarpenak" +#: ../../qt4/settingsdialog.py:1690 +msgid "disabled" +msgstr "ezgaituta" -#: ../../gnome/settingsdialog.glade:815 -msgid "Password" -msgstr "Pasahitza" +#: ../../qt4/settingsdialog.py:1715 +msgid "Restore Settings" +msgstr "Ezarpenak berreskuratu" -#: ../../gnome/settingsdialog.glade:930 -msgid "Profile Id:" -msgstr "Profilaren Id" +#: ../../qt4/settingsdialog.py:1732 +msgid " and add your user to group 'fuse'" +msgstr " eta gehitu zure erabiltzailea 'fuse' taldera" -#: ../../gnome/settingsdialog.glade:1115 +#: ../../qt4/settingsdialog.py:1736 +#, python-format msgid "" -"hours seperate by comma ( e.g. 8,12,18,23) or */3 for periodic backups every " -"3 hours (cron style)" +"Please navigate to the snapshot from which you want to restore %(appName)s's " +"configuration. The path may look like: \n" +"%(samplePath)s\n" +"\n" +"If your snapshots are on a remote drive or if they are encrypted you need to " +"manually mount them first. If you use Mode SSH you also may need to set up " +"public key login to the remote host%(addFuse)s.\n" +"Take a look at 'man backintime'." msgstr "" -"orduak komaz bananduta (hala nola 8,12,18,23) edo */3 egiteko babeskopia " -"periodikoak 3 orduro (cron estiloa)" +"Nabigatu berreskuratu nahi duzun %(appName)s-en ezarpenak dauden irudira. " +"Bideak honelako itxura izan behar luke:\n" +"%(samplePath)s\n" +"\n" +"Zure irudiak urrutiko unitate batean badaude edo kodetuta badaude aldez " +"aurretik eskuz muntatu behar dituzu. SSH modua erabiltzen baduzu giltza " +"publikoa ezarri beharko duzu urrutiko ostalarian%(addFuse)s sartzeko\n" +"Eman begirada bat 'man backtime' oharrei.." + +#: ../../qt4/settingsdialog.py:1794 ../../qt4/settingsdialog.py:1854 +msgid "No config found" +msgstr "Ez da ezarpenik topatu" + +#: ../../qt4/snapshotsdialog.py:49 ../../qt4/snapshotsdialog.py:173 +msgid "Diff Options" +msgstr "Diff aukerak" + +#: ../../qt4/snapshotsdialog.py:56 +msgid "Command:" +msgstr "Komandoa:" + +#: ../../qt4/snapshotsdialog.py:60 +msgid "Parameters:" +msgstr "Parametroak:" + +#: ../../qt4/snapshotsdialog.py:64 +msgid "Use %1 and %2 for path parameters" +msgstr "Erabili %1 eta %2 bide-izenen parametroetarako" + +#: ../../qt4/snapshotsdialog.py:106 +msgid "List only different snapshots" +msgstr "Zerrendatu bakarri ezberdinak diren babeskopiak" + +#: ../../qt4/snapshotsdialog.py:113 +msgid "List only equal snapshots to: " +msgstr "Zerrendatu bakarri berdinak diren babeskopiak hona: " -#: ../../gnome/settingsdialog.glade:1163 -msgid "Schedule" -msgstr "Programaketa" +#: ../../qt4/snapshotsdialog.py:123 +msgid "Deep check (more accurate, but slow)" +msgstr "Egiaztatze sakona (zehaztasun handiagoa, baina motela)" -#: ../../gnome/settingsdialog.glade:1363 -msgid "Highly recommended:" -msgstr "Oso gomendagarria:" +#: ../../qt4/snapshotsdialog.py:144 +msgid "Delete" +msgstr "Ezabatu" -#: ../../gnome/settingsdialog.glade:1377 -msgid "label" -msgstr "etiketa" +#: ../../qt4/snapshotsdialog.py:148 +msgid "Select All" +msgstr "Hautatu denak" -#: ../../gnome/settingsdialog.glade:1755 -msgid "week(s)" -msgstr "astez" +#: ../../qt4/snapshotsdialog.py:161 +msgid "Diff" +msgstr "Diff" + +#: ../../qt4/snapshotsdialog.py:172 +msgid "Go To" +msgstr "Joan hona:" -#: ../../gnome/settingsdialog.glade:2069 -msgid "Log level:" -msgstr "Egunkari-maila:" +#: ../../qt4/snapshotsdialog.py:326 +msgid "You can't compare a snapshot to itself" +msgstr "Ezin duzu alderatu babeskopia bat bere buruarekin" + +#: ../../qt4/snapshotsdialog.py:333 +#, python-format +msgid "Command not found: %s" +msgstr "Ez da komandoa aurkitu: %s" -#: ../../gnome/settingsdialog.glade:2121 +#: ../../qt4/snapshotsdialog.py:354 +#, python-format msgid "" -"Change these options only if you really know what you are doing !" -msgstr "Aldatu aukera hauek bakarrik badakizu zertan ari zaren!" +"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" +msgstr "" +"Seguru zaude \"%(snapshot_id)s babeskopiako \"%(file)s\" fitxategia " +"ezabatu nahi duzula?\n" -#: ../../gnome/snapshotsdialog.glade:263 -msgid "Diff with" -msgstr "Diff honekin" +#: ../../qt4/snapshotsdialog.py:357 +#, python-format +msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +msgstr "" +"Seguru zaude \"%(count)d babeskopiako \"%(file)s\" fitxategia ezabatu nahi " +"duzula?\n" -#: ../../gnome/textinputdialog.glade:7 -msgid "Pattern" -msgstr "Eredua" +#: ../../qt4/snapshotsdialog.py:359 +msgid "WARNING: This can not be revoked!" +msgstr "ARGI IBILI: Honek ez dauka atzera bueltarik!" -#: ../../gnome/textinputdialog.glade:70 -msgid "Text" -msgstr "Testua" +#: ../../qt4/snapshotsdialog.py:374 +#, python-format +msgid "Exclude \"%s\" from future snapshots?" +msgstr "Baztertu \"%s\" hurrengo babeskopietan?" diff -Nru backintime-1.0.36/common/po/fi.po backintime-1.1.12/common/po/fi.po --- backintime-1.0.36/common/po/fi.po 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/po/fi.po 2016-01-11 18:07:58.000000000 +0000 @@ -7,206 +7,238 @@ msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2013-11-09 22:34+0100\n" -"PO-Revision-Date: 2012-07-03 09:04+0000\n" -"Last-Translator: Torsti Schulz \n" +"POT-Creation-Date: 2015-12-19 00:47+0100\n" +"PO-Revision-Date: 2015-09-09 21:49+0000\n" +"Last-Translator: Back In Time Team \n" "Language-Team: Finnish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2014-08-06 10:20+0000\n" -"X-Generator: Launchpad (build 17147)\n" +"X-Launchpad-Export-Date: 2016-01-11 17:52+0000\n" +"X-Generator: Launchpad (build 17881)\n" -#: ../../common/config.py:72 +#: ../../common/configfile.py:60 +#, python-format +msgid "Failed to save config: %s" +msgstr "" + +#: ../../common/configfile.py:78 +#, python-format +msgid "Failed to load config: %s" +msgstr "" + +#: ../../common/configfile.py:352 ../../common/configfile.py:414 +#, python-format +msgid "Profile \"%s\" already exists !" +msgstr "Profiili \"%s\" on jo olemassa !" + +#: ../../common/configfile.py:383 +msgid "You can't remove the last profile !" +msgstr "Et voi poistaa viimeistä profiilia !" + +#: ../../common/config.py:76 msgid "Disabled" msgstr "Poissa käytöstä" -#: ../../common/config.py:73 +#: ../../common/config.py:77 msgid "At every boot/reboot" msgstr "Joka käynnistyksessä/uudelleenkäynnistyksessä" -#: ../../common/config.py:74 +#: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "5 minuutin välein" -#: ../../common/config.py:75 +#: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "10 minuutin välein" -#: ../../common/config.py:76 +#: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "" -#: ../../common/config.py:77 +#: ../../common/config.py:81 msgid "Every hour" msgstr "" -#: ../../common/config.py:78 +#: ../../common/config.py:82 msgid "Every 2 hours" msgstr "" -#: ../../common/config.py:79 +#: ../../common/config.py:83 msgid "Every 4 hours" msgstr "" -#: ../../common/config.py:80 +#: ../../common/config.py:84 msgid "Every 6 hours" msgstr "" -#: ../../common/config.py:81 +#: ../../common/config.py:85 msgid "Every 12 hours" msgstr "" -#: ../../common/config.py:82 +#: ../../common/config.py:86 msgid "Custom Hours" msgstr "" -#: ../../common/config.py:83 +#: ../../common/config.py:87 msgid "Every Day" msgstr "Joka päivä" -#: ../../common/config.py:84 -msgid "Daily (anacron)" +#: ../../common/config.py:88 +msgid "Repeatedly (anacron)" msgstr "" -#: ../../common/config.py:85 +#: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "" -#: ../../common/config.py:86 +#: ../../common/config.py:90 msgid "Every Week" msgstr "Joka viikko" -#: ../../common/config.py:87 +#: ../../common/config.py:91 msgid "Every Month" msgstr "Joka kuukausi" -#: ../../common/config.py:91 +#: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Päivä(ä)" -#: ../../common/config.py:92 +#: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Viikko(a)" -#: ../../common/config.py:93 +#: ../../common/config.py:97 msgid "Year(s)" msgstr "Vuosi(a)" -#: ../../common/config.py:100 +#: ../../common/config.py:101 +msgid "Hour(s)" +msgstr "" + +#: ../../common/config.py:104 +msgid "Month(s)" +msgstr "" + +#: ../../common/config.py:126 ../../qt4/settingsdialog.py:551 msgid " EXPERIMENTAL!" msgstr "" -#: ../../common/config.py:103 +#: ../../common/config.py:129 msgid "Local" msgstr "" -#: ../../common/config.py:104 +#: ../../common/config.py:130 msgid "SSH" msgstr "" -#: ../../common/config.py:104 ../../common/config.py:106 -#: ../../gnome/settingsdialog.py:475 ../../kde4/settingsdialog.py:1325 +#: ../../common/config.py:130 ../../common/config.py:132 +#: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "" -#: ../../common/config.py:105 +#: ../../common/config.py:131 msgid "Local encrypted" msgstr "" -#: ../../common/config.py:105 ../../common/config.py:106 +#: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "" -#: ../../common/config.py:106 +#: ../../common/config.py:132 msgid "SSH encrypted" msgstr "" -#: ../../common/config.py:112 +#: ../../common/config.py:135 msgid "Default" msgstr "" -#: ../../common/config.py:113 +#: ../../common/config.py:136 msgid "AES128-CTR" msgstr "" -#: ../../common/config.py:114 +#: ../../common/config.py:137 msgid "AES192-CTR" msgstr "" -#: ../../common/config.py:115 +#: ../../common/config.py:138 msgid "AES256-CTR" msgstr "" -#: ../../common/config.py:116 +#: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "" -#: ../../common/config.py:117 +#: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "" -#: ../../common/config.py:118 +#: ../../common/config.py:141 msgid "AES128-CBC" msgstr "" -#: ../../common/config.py:119 +#: ../../common/config.py:142 msgid "3DES-CBC" msgstr "" -#: ../../common/config.py:120 +#: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "" -#: ../../common/config.py:121 +#: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "" -#: ../../common/config.py:122 +#: ../../common/config.py:145 msgid "AES192-CBC" msgstr "" -#: ../../common/config.py:123 +#: ../../common/config.py:146 msgid "AES256-CBC" msgstr "" -#: ../../common/config.py:124 +#: ../../common/config.py:147 msgid "ARCFOUR" msgstr "" -#: ../../common/config.py:129 +#: ../../common/config.py:153 msgid "Main profile" msgstr "Pääprofiili" -#: ../../common/config.py:256 ../../common/config.py:275 -#: ../../common/config.py:286 ../../common/config.py:291 +#: ../../common/config.py:289 ../../common/config.py:296 +#: ../../common/config.py:307 ../../common/config.py:312 +#: ../../qt4/qt4systrayicon.py:61 #, python-format msgid "Profile: \"%s\"" msgstr "Profiili: \"%s\"" -#: ../../common/config.py:256 +#: ../../common/config.py:289 msgid "Snapshots folder is not valid !" msgstr "Otoskansio ei ole pätevä !" -#: ../../common/config.py:275 +#: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "Valitse ainakin yksi kansio varmuuskopioitavaksi!" -#: ../../common/config.py:286 +#: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "Varmuuskopiokansiota ei voi lisätä!" -#: ../../common/config.py:291 +#: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "Varmuuskopionkansion alikansiota ei voi lisätä!" -#: ../../common/config.py:361 +#: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s ei ole kansio!" -#: ../../common/config.py:376 ../../common/config.py:389 +#: ../../common/config.py:380 +msgid "Host/User/Profile-ID must not be empty!" +msgstr "" + +#: ../../common/config.py:388 ../../common/config.py:420 #, python-format msgid "" "Can't write to: %s\n" @@ -215,59 +247,68 @@ "Ei voi kirjoittaa: %s\n" "Oletko varma että sinulla on kirjoitusoikeudet?" -#: ../../common/config.py:1286 +#: ../../common/config.py:400 +#, python-format msgid "" -"Can't find crontab.\n" -"Are you sure cron is installed ?\n" -"If not you should disable all automatic backups." +"Destination filesystem for '%(path)s' is formatted with FAT which doesn't " +"support hard-links. Please use a native Linux filesystem." msgstr "" -"Crontab-ohjelmaa ei löydy.\n" -"Onko cron-ohjelmaa asennettu?\n" -"Jos ei ole, kaikki automaattiset varmuuskopiot kannattaa ottaa pois käytöstä" -#: ../../common/config.py:1338 +#: ../../common/config.py:405 #, python-format -msgid "Schedule udev doesn't work with mode %s" +msgid "" +"Destination filsystem for '%(path)s' is a SMB mounted share. Please make " +"sure the remote SMB server supports symlinks or activate '%(copyLinks)s' in " +"'%(expertOptions)s'." msgstr "" -#: ../../common/config.py:1342 -#, python-format -msgid "Couldn't find UUID for \"%s\"" -msgstr "" +#: ../../common/config.py:408 ../../qt4/settingsdialog.py:815 +msgid "Copy links (dereference symbolic links)" +msgstr "Kopioi linkit (ratkaise symboliset linkit)" -#: ../../common/config.py:1379 -msgid "Failed to remove udev rules" -msgstr "" +#: ../../common/config.py:409 ../../qt4/settingsdialog.py:669 +msgid "Expert Options" +msgstr "Lisäasetukset" -#: ../../common/config.py:1385 -msgid "Failed to create udev rules" +#: ../../common/config.py:411 +#, python-format +msgid "" +"Destination filesystem for '%(path)s is a sshfs mounted share. sshfs doesn't " +"support hard-links. Please use mode 'SSH' instead." msgstr "" -#: ../../common/config.py:1420 +#: ../../common/config.py:1407 msgid "" -"Can't find anacron.\n" -"Are you sure anacron is installed ?\n" -"If not you should disable daily anacron backups." +"Can't find crontab.\n" +"Are you sure cron is installed ?\n" +"If not you should disable all automatic backups." msgstr "" +"Crontab-ohjelmaa ei löydy.\n" +"Onko cron-ohjelmaa asennettu?\n" +"Jos ei ole, kaikki automaattiset varmuuskopiot kannattaa ottaa pois käytöstä" -#: ../../common/config.py:1439 -msgid "Please provide your sudo password to install the udev rule." +#: ../../common/config.py:1411 +msgid "Failed to write new crontab." msgstr "" -#: ../../common/config.py:1445 -msgid "Please provide your sudo password to remove unused udev rules." +#: ../../common/config.py:1505 +#, python-format +msgid "" +"Could not install Udev rule for profile %(profile_id)s. DBus Service " +"'%(dbus_interface)s' wasn't available" msgstr "" -#: ../../common/configfile.py:253 ../../common/configfile.py:315 +#: ../../common/config.py:1517 #, python-format -msgid "Profile \"%s\" already exists !" -msgstr "Profiili \"%s\" on jo olemassa !" +msgid "Schedule udev doesn't work with mode %s" +msgstr "" -#: ../../common/configfile.py:284 -msgid "You can't remove the last profile !" -msgstr "Et voi poistaa viimeistä profiilia !" +#: ../../common/config.py:1526 +#, python-format +msgid "Couldn't find UUID for \"%s\"" +msgstr "" -#: ../../common/encfstools.py:95 +#: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" @@ -275,38 +316,38 @@ "%(error)s" msgstr "" -#: ../../common/encfstools.py:105 +#: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "" -#: ../../common/encfstools.py:149 +#: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "" -#: ../../common/encfstools.py:153 +#: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" -#: ../../common/encfstools.py:154 +#: ../../common/encfstools.py:171 msgid "Cancel" msgstr "" -#: ../../common/encfstools.py:157 +#: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "" -#: ../../common/encfstools.py:161 +#: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "" -#: ../../common/encfstools.py:166 +#: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" -#: ../../common/encfstools.py:174 ../../common/sshtools.py:207 +#: ../../common/encfstools.py:196 ../../common/sshtools.py:262 #, python-format msgid "" "%(user)s is not member of group 'fuse'.\n" @@ -314,63 +355,66 @@ "Look at 'man backintime' for further instructions." msgstr "" -#: ../../common/encfstools.py:189 +#: ../../common/encfstools.py:211 msgid "" "encfs version 1.7.2 and before has a bug with option --reverse. Please " "update encfs" msgstr "" -#: ../../common/encfstools.py:453 ../../common/encfstools.py:480 -#: ../../common/snapshots.py:982 ../../common/snapshots.py:1288 -#: ../../kde4/app.py:82 ../../gnome/mainwindow.glade:43 +#: ../../common/encfstools.py:512 ../../common/snapshots.py:1131 +#: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "Ota otos" -#: ../../common/mount.py:195 +#: ../../common/mount.py:204 #, python-format msgid "" "Hash collision occurred in hash_id %s. Incrementing global value " "hash_collision and try again." msgstr "" -#: ../../common/mount.py:246 +#: ../../common/mount.py:259 #, python-format msgid "mountpoint %s not empty." msgstr "" -#: ../../common/mount.py:286 +#: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" -#: ../../common/password.py:425 +#: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" -#: ../../common/snapshots.py:171 ../../gnome/app.py:1127 -#: ../../kde4/app.py:1014 +#: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Nyt" -#: ../../common/snapshots.py:182 ../../gnome/gnometools.py:37 +#: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "VIRHEITÄ!" -#: ../../common/snapshots.py:282 +#: ../../common/snapshots.py:344 msgid "" "### This log has been decoded with automatic search pattern\n" "### If some paths are not decoded you can manually decode them with:\n" msgstr "" -#: ../../common/snapshots.py:465 +#: ../../common/snapshots.py:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "EPÄONNISTUI!" -#: ../../common/snapshots.py:564 +#: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "Palauta oikeudet:" -#: ../../common/snapshots.py:739 +#: ../../common/snapshots.py:752 ../../qt4/app.py:377 ../../qt4/app.py:675 +#: ../../qt4/app.py:692 ../../qt4/qt4systrayicon.py:65 +msgid "Done" +msgstr "Valmis" + +#: ../../common/snapshots.py:860 msgid "" "Back In Time changed its backup format.\n" "\n" @@ -380,7 +424,7 @@ "\n" "Vanhat otoksesi voidaan siirtää uudeen tiedostomuotoon. OK?" -#: ../../common/snapshots.py:749 +#: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" @@ -398,7 +442,7 @@ "\n" "(Ohjelma pystyy silti erottamaan molemmat profiilit)" -#: ../../common/snapshots.py:752 +#: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" @@ -406,7 +450,7 @@ "Profiileja ei löytynyt. Käynnistä Back In Time uudelleen profiilipäivityksiä " "varten" -#: ../../common/snapshots.py:803 +#: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" @@ -419,7 +463,7 @@ "cannot continue taking snapshots" msgstr "" -#: ../../common/snapshots.py:812 +#: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" @@ -434,7 +478,7 @@ "Voit siirtää manuaalisesti otokset, \n" "jos olet valmis jatkamaan, käynnistä Back In Time uudelleen" -#: ../../common/snapshots.py:825 +#: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" @@ -444,7 +488,7 @@ "\n" "Back In Time jatkaa otosten ottamista aikataulun mukaan" -#: ../../common/snapshots.py:830 +#: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" @@ -464,11 +508,11 @@ "Mikäli et ole varma, tämä kysytään seuraavan kerran Back In Timen " "käynnistyksen yhteydessä." -#: ../../common/snapshots.py:839 +#: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "Back In Time jatkaa otosten ottamista aikataulun mukaan" -#: ../../common/snapshots.py:841 +#: ../../common/snapshots.py:953 msgid "" "Back In Time still cannot continue taking new snapshots.\n" "Restart Back In Time to see the questions again" @@ -476,7 +520,11 @@ "Back In Time ei voi jatkaa uusien otosten ottamista.\n" "Käynnistä Back In Time uudelleen nähdäksesi kysymykset uudestaan" -#: ../../common/snapshots.py:913 +#: ../../common/snapshots.py:972 +msgid "Deferring backup while on battery" +msgstr "" + +#: ../../common/snapshots.py:1035 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it." @@ -484,156 +532,163 @@ "Otoskansiota ei löydy.\n" "Jos otoskansio sijaitsee ulkoisella asemalla, liitä asema tietokoneeseen." -#: ../../common/snapshots.py:915 +#: ../../common/snapshots.py:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "Odotetaan %s sekunti." msgstr[1] "Odotetaan %s sekuntia." -#: ../../common/snapshots.py:941 +#: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "Otoksen %s otto epäonnistui !!!" -#: ../../common/snapshots.py:950 +#: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "Viimeistellään" -#: ../../common/snapshots.py:1088 +#: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "Ei voinut luoda kansiota: %s" -#: ../../common/snapshots.py:1107 +#: ../../common/snapshots.py:1217 msgid "..." msgstr "..." -#: ../../common/snapshots.py:1134 +#: ../../common/snapshots.py:1238 +#, python-format +msgid "Found leftover '%s' which can be continued." +msgstr "" + +#: ../../common/snapshots.py:1250 +#, python-format +msgid "Remove leftover '%s' folder from last run" +msgstr "" + +#: ../../common/snapshots.py:1263 #, python-format msgid "Can't remove folder: %s" msgstr "Ei voida poistaa kansiota: %s" -#: ../../common/snapshots.py:1219 +#: ../../common/snapshots.py:1340 #, python-format msgid "Compare with snapshot %s" msgstr "Vertaa otokseen %s" -#: ../../common/snapshots.py:1248 +#: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "Luo hard link-tiedostot" -#: ../../common/snapshots.py:1335 +#: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "Tallenna asetustiedosto ..." -#: ../../common/snapshots.py:1341 +#: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "Tallenna käyttöoikeudet ..." -#: ../../common/snapshots.py:1442 +#: ../../common/snapshots.py:1470 +msgid "Save permission over ssh failed. Retry normal method" +msgstr "" + +#: ../../common/snapshots.py:1521 #, python-format msgid "Can't rename %(new_path)s to %(path)s" msgstr "" -#: ../../common/snapshots.py:1562 -msgid "Remove old snapshots" -msgstr "Poista vanhat otokset" - -#: ../../common/snapshots.py:1586 ../../kde4/settingsdialog.py:501 -#: ../../gnome/settingsdialog.glade:1660 +#: ../../common/snapshots.py:1695 ../../common/snapshots.py:1728 +#: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "Älykäs poisto" -#: ../../common/snapshots.py:1591 +#: ../../common/snapshots.py:1704 +msgid "Remove old snapshots" +msgstr "Poista vanhat otokset" + +#: ../../common/snapshots.py:1733 msgid "Try to keep min free space" msgstr "Pidä vähän vapaata tilaa" -#: ../../common/snapshots.py:1621 +#: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" -#: ../../common/sshtools.py:106 +#: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "" -#: ../../common/sshtools.py:113 +#: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "" -#: ../../common/sshtools.py:187 -#, python-format -msgid "" -"Failed to unlock SSH private key:\n" -"Error: %s" -msgstr "" - -#: ../../common/sshtools.py:194 +#: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" -#: ../../common/sshtools.py:199 +#: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" -#: ../../common/sshtools.py:217 +#: ../../common/sshtools.py:278 #, python-format msgid "" "Password-less authentication for %(user)s@%(host)s failed. Look at 'man " "backintime' for further instructions." msgstr "" -#: ../../common/sshtools.py:229 +#: ../../common/sshtools.py:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" -#: ../../common/sshtools.py:254 +#: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" -#: ../../common/sshtools.py:274 +#: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" -#: ../../common/sshtools.py:276 +#: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:278 +#: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:280 +#: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" -#: ../../common/sshtools.py:302 +#: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" -#: ../../common/sshtools.py:325 ../../common/sshtools.py:383 +#: ../../common/sshtools.py:423 ../../common/sshtools.py:553 #, python-format msgid "" "Remote host %(host)s doesn't support '%(command)s':\n" @@ -641,7 +696,7 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:387 +#: ../../common/sshtools.py:556 #, python-format msgid "" "Check commands on host %(host)s returned unknown error:\n" @@ -649,96 +704,149 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:400 +#: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "" -#: ../../gnome/app.py:185 ../../gnome/app.py:594 ../../gnome/app.py:608 -#: ../../kde4/app.py:299 ../../kde4/app.py:570 ../../kde4/app.py:587 -msgid "Done" -msgstr "Valmis" +#: ../../qt4/app.py:81 +msgid "Refresh snapshots list" +msgstr "Päivitä otoslista" + +#: ../../qt4/app.py:85 ../../qt4/app.py:890 +msgid "Snapshot Name" +msgstr "Otoksen nimi" + +#: ../../qt4/app.py:88 +msgid "Remove Snapshot" +msgstr "Poista otos" + +#: ../../qt4/app.py:91 +msgid "View Snapshot Log" +msgstr "Selaa otoslokia" + +#: ../../qt4/app.py:94 +msgid "View Last Log" +msgstr "Selaa viimeisintä lokia" + +#: ../../qt4/app.py:99 ../../qt4/settingsdialog.py:51 +msgid "Settings" +msgstr "Asetukset" + +#: ../../qt4/app.py:104 +msgid "Shutdown" +msgstr "" -#: ../../gnome/app.py:189 ../../kde4/app.py:143 ../../kde4/app.py:159 -#: ../../gnome/mainwindow.glade:225 +#: ../../qt4/app.py:105 +msgid "Shutdown system after snapshot has finished." +msgstr "" + +#: ../../qt4/app.py:111 +msgid "Exit" +msgstr "Lopeta" + +#: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 msgid "Help" msgstr "Ohje" -#: ../../gnome/app.py:191 ../../kde4/app.py:146 -#: ../../gnome/mainwindow.glade:223 +#: ../../qt4/app.py:122 +msgid "Config File Help" +msgstr "" + +#: ../../qt4/app.py:125 msgid "Website" msgstr "Verkkosivu" -#: ../../gnome/app.py:192 ../../kde4/app.py:148 +#: ../../qt4/app.py:127 ../../qt4/app.py:982 +msgid "Changelog" +msgstr "" + +#: ../../qt4/app.py:129 msgid "FAQ" msgstr "" -#: ../../gnome/app.py:193 ../../kde4/app.py:150 +#: ../../qt4/app.py:131 msgid "Ask a question" msgstr "" -#: ../../gnome/app.py:194 ../../kde4/app.py:152 +#: ../../qt4/app.py:133 msgid "Report a bug" msgstr "" -#: ../../gnome/app.py:196 ../../kde4/app.py:155 +#: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "Tietoja ohjelmasta" -#: ../../gnome/app.py:202 ../../gnome/app.py:887 -#: ../../gnome/restoredialog.py:84 ../../gnome/snapshotsdialog.py:83 -#: ../../gnome/snapshotsdialog.py:244 ../../kde4/app.py:206 -#: ../../kde4/app.py:216 ../../kde4/restoredialog.py:68 -#: ../../kde4/snapshotsdialog.py:111 ../../kde4/snapshotsdialog.py:117 -#: ../../gnome/mainwindow.glade:350 ../../gnome/mainwindow.glade:352 -#: ../../gnome/snapshotsdialog.glade:169 ../../gnome/snapshotsdialog.glade:171 +#: ../../qt4/app.py:163 +msgid "Up" +msgstr "Ylös" + +#: ../../qt4/app.py:174 ../../qt4/settingsdialog.py:1776 +msgid "Show hidden files" +msgstr "Näytä piilotiedostot" + +#: ../../qt4/app.py:184 ../../qt4/app.py:199 ../../qt4/app.py:233 +#: ../../qt4/restoredialog.py:62 ../../qt4/settingsdialog.py:1818 +#: ../../qt4/snapshotsdialog.py:134 ../../qt4/snapshotsdialog.py:139 msgid "Restore" msgstr "Palauta" -#: ../../gnome/app.py:203 ../../gnome/app.py:888 ../../gnome/gnometools.py:67 -#: ../../gnome/snapshotsdialog.py:84 ../../gnome/snapshotsdialog.py:245 -#: ../../kde4/app.py:208 ../../kde4/restoredialog.py:42 -#: ../../kde4/snapshotsdialog.py:113 +#: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 +#: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "Palauta kohteeseen ..." -#: ../../gnome/app.py:205 ../../gnome/app.py:896 ../../gnome/app.py:1146 -#: ../../kde4/app.py:1041 -#, python-format -msgid "Restore '%s'" -msgstr "Palauta '%s'" +#: ../../qt4/app.py:194 +msgid "Restore and delete new files" +msgstr "" -#: ../../gnome/app.py:207 ../../gnome/app.py:897 ../../gnome/app.py:1147 -#: ../../kde4/app.py:1042 +#: ../../qt4/app.py:201 #, python-format -msgid "Restore '%s' to ..." -msgstr "Palauta '%s' kohteeseen ..." +msgid "" +"Restore selected file or folder.\n" +"If this button is grayed out this is most likely because \"%(now)s\" is " +"selected in left hand snapshots list." +msgstr "" -#: ../../gnome/app.py:226 ../../kde4/app.py:235 +#: ../../qt4/app.py:206 ../../qt4/logviewdialog.py:67 +#: ../../qt4/qt4tools.py:160 ../../qt4/snapshotsdialog.py:96 +msgid "Snapshots" +msgstr "Otokset" + +#: ../../qt4/app.py:213 +msgid "Snapshot" +msgstr "" + +#: ../../qt4/app.py:224 +msgid "View" +msgstr "" + +#: ../../qt4/app.py:277 msgid "Shortcuts" msgstr "Sijainnit" -#: ../../gnome/app.py:249 -msgid "Name" -msgstr "Nimi" - -#: ../../gnome/app.py:260 -msgid "Size" -msgstr "Koko" - -#: ../../gnome/app.py:267 -msgid "Date" -msgstr "Päiväys" - -#: ../../gnome/app.py:286 ../../gnome/app.py:883 -#: ../../gnome/snapshotsdialog.py:116 ../../kde4/app.py:171 -#: ../../kde4/app.py:221 ../../kde4/snapshotsdialog.py:91 -#: ../../gnome/mainwindow.glade:366 ../../gnome/mainwindow.glade:368 -#: ../../gnome/snapshotsdialog.glade:8 -msgid "Snapshots" -msgstr "Otokset" +#: ../../qt4/app.py:295 +msgid "" +"This folder doesn't exist\n" +"in the current selected snapshot!" +msgstr "" + +#: ../../qt4/app.py:359 +msgid "Add to Include" +msgstr "" + +#: ../../qt4/app.py:360 +msgid "Add to Exclude" +msgstr "" -#: ../../gnome/app.py:348 ../../kde4/app.py:362 +#: ../../qt4/app.py:416 +#, python-format +msgid "" +"%(appName)s is not configured. Would you like to restore a previous " +"configuration?" +msgstr "" + +#: ../../qt4/app.py:440 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it and then press OK" @@ -746,737 +854,797 @@ "Otoskansiota ei löydy.\n" "Jos kansio on ulkoisella asemalla, kytke laite kiinni ja paina OK" -#: ../../gnome/app.py:611 ../../kde4/app.py:590 -msgid "Done, no backup needed" -msgstr "Valmis, varmuuskopiota ei tarvittu" +#: ../../qt4/app.py:473 +msgid "" +"If you close this window Back In Time will not be able to shutdown your " +"system when the snapshot has finished.\n" +"Do you really want to close?" +msgstr "" -#: ../../gnome/app.py:619 ../../kde4/app.py:598 +#: ../../qt4/app.py:667 ../../qt4/app.py:703 msgid "Working:" msgstr "Käsitellään:" -#: ../../gnome/app.py:623 ../../kde4/app.py:602 +#: ../../qt4/app.py:695 +msgid "Done, no backup needed" +msgstr "Valmis, varmuuskopiota ei tarvittu" + +#: ../../qt4/app.py:707 msgid "Error:" msgstr "Virhe:" -#: ../../gnome/app.py:636 ../../kde4/app.py:649 +#: ../../qt4/app.py:726 ../../qt4/qt4systrayicon.py:153 +msgid "Sent:" +msgstr "" + +#: ../../qt4/app.py:727 ../../qt4/qt4systrayicon.py:154 +msgid "Speed:" +msgstr "" + +#: ../../qt4/app.py:728 ../../qt4/qt4systrayicon.py:155 +msgid "ETA:" +msgstr "" + +#: ../../qt4/app.py:777 msgid "Global" msgstr "Yleiset" -#: ../../gnome/app.py:637 ../../kde4/app.py:650 +#: ../../qt4/app.py:778 msgid "Root" msgstr "Root" -#: ../../gnome/app.py:638 ../../kde4/app.py:651 +#: ../../qt4/app.py:779 msgid "Home" msgstr "Home" -#: ../../gnome/app.py:662 -msgid "Bookmarks" -msgstr "Kirjanmerkit" - -#: ../../gnome/app.py:675 ../../kde4/app.py:662 +#: ../../qt4/app.py:794 msgid "Backup folders" msgstr "Varmuuskopiokansiot" -#: ../../gnome/app.py:701 ../../kde4/app.py:734 -msgid "Today" -msgstr "Tänään" +#: ../../qt4/app.py:849 +msgid "This is NOT a snapshot but a live view of your local files" +msgstr "" -#: ../../gnome/app.py:705 ../../kde4/app.py:738 -msgid "Yesterday" -msgstr "Eilen" +#: ../../qt4/app.py:860 ../../qt4/app.py:1476 +#, python-format +msgid "Last check %s" +msgstr "" -#: ../../gnome/app.py:709 ../../kde4/app.py:742 -msgid "This week" -msgstr "Tällä viikolla" +#: ../../qt4/app.py:928 +#, python-format +msgid "" +"Are you sure you want to remove the snapshot:\n" +"%s" +msgstr "" +"Oletko varma että haluat poistaa otoksen:\n" +"%s" -#: ../../gnome/app.py:713 ../../kde4/app.py:746 -msgid "Last week" -msgstr "Viime viikolla" +#: ../../qt4/app.py:1004 +#, python-format +msgid "" +"Backup local files before overwriting or\n" +"removing with trailing '%(suffix)s'." +msgstr "" -#: ../../gnome/app.py:764 ../../kde4/app.py:398 +#: ../../qt4/app.py:1010 msgid "" -"If you close this window Back In Time will not be able to shutdown your " -"system when the snapshot has finished.\n" -"Do you really want to close?" +"Are you sure you want to remove all newer files in your original folder?" msgstr "" -#: ../../gnome/app.py:881 ../../gnome/snapshotsdialog.py:238 -msgid "Open" -msgstr "Avaa" +#: ../../qt4/app.py:1014 +msgid "" +"WARNING: deleting files in filesystem root could break your whole system!!!" +msgstr "" -#: ../../gnome/app.py:1056 ../../kde4/app.py:90 ../../kde4/app.py:805 -#: ../../gnome/mainwindow.glade:73 ../../gnome/mainwindow.glade:75 -msgid "Snapshot Name" -msgstr "Otoksen nimi" +#: ../../qt4/app.py:1016 +msgid "Files to be restored:" +msgstr "" -#: ../../gnome/app.py:1075 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +#: ../../qt4/app.py:1031 +msgid "Do you really want to restore this files(s):" msgstr "" -"Oletko varma että haluat poistaa otoksen:\n" -"%s" -#: ../../gnome/app.py:1123 ../../kde4/app.py:1010 +#: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "Otos: %s" -#: ../../gnome/app.py:1124 ../../kde4/app.py:1011 +#: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "Selaa otosta joka on tehty %s" -#: ../../gnome/app.py:1126 ../../kde4/app.py:1013 +#: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "Selaa nykyistä levyn sisältöä" -#: ../../gnome/logviewdialog.py:106 ../../gnome/settingsdialog.py:414 -#: ../../kde4/logviewdialog.py:83 ../../kde4/settingsdialog.py:590 -msgid "All" -msgstr "Kaikki" +#: ../../qt4/app.py:1268 +#, python-format +msgid "Restore '%s'" +msgstr "Palauta '%s'" -#: ../../gnome/logviewdialog.py:107 ../../gnome/settingsdialog.py:412 -#: ../../kde4/logviewdialog.py:84 ../../kde4/settingsdialog.py:588 -msgid "Errors" -msgstr "Virheet" +#: ../../qt4/app.py:1269 +#, python-format +msgid "Restore '%s' to ..." +msgstr "Palauta '%s' kohteeseen ..." -#: ../../gnome/logviewdialog.py:112 ../../kde4/logviewdialog.py:89 -msgid "Changes" -msgstr "Muutokset" +#: ../../qt4/app.py:1270 +#, python-format +msgid "Restore '%s' and delete new files" +msgstr "" -#: ../../gnome/logviewdialog.py:115 ../../kde4/logviewdialog.py:92 -msgid "Informations" -msgstr "Tiedot" +#: ../../qt4/app.py:1368 ../../qt4/app.py:1385 +msgid "Authors" +msgstr "" -#: ../../gnome/settingsdialog.py:235 ../../kde4/settingsdialog.py:387 -msgid "Include files and folders" -msgstr "Sisällytä tiedostot ja hakemistot" +#: ../../qt4/app.py:1369 ../../qt4/app.py:1388 +msgid "Translations" +msgstr "" -#: ../../gnome/settingsdialog.py:264 -msgid "Exclude patterns, files or folders" -msgstr "Poissulje hakuehdoilla, tiedoilla tai kansioilla" +#: ../../qt4/app.py:1370 ../../qt4/app.py:1391 +msgid "License" +msgstr "" -#: ../../gnome/settingsdialog.py:411 ../../kde4/settingsdialog.py:587 -msgid "None" -msgstr "Ei mitään" +#: ../../qt4/logviewdialog.py:49 +msgid "Last Log View" +msgstr "" -#: ../../gnome/settingsdialog.py:413 ../../kde4/settingsdialog.py:589 -msgid "Changes & Errors" -msgstr "Muutokset & virheet" - -#: ../../gnome/settingsdialog.py:458 -msgid "Snapshots folder" -msgstr "Otosten kansio" - -#: ../../gnome/settingsdialog.py:466 ../../kde4/settingsdialog.py:1314 -msgid "Are you sure you want to change snapshots folder ?" -msgstr "Oletko varma että haluat vaihtaa otosten kansiota?" - -#: ../../gnome/settingsdialog.py:901 ../../kde4/settingsdialog.py:914 -msgid "" -"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " -"*/3 for periodic backups every 3 hours" +#: ../../qt4/logviewdialog.py:51 +msgid "Snapshot Log View" msgstr "" -#: ../../gnome/settingsdialog.py:1141 ../../kde4/settingsdialog.py:653 -msgid "New profile" -msgstr "Uusi profiili" - -#: ../../gnome/settingsdialog.py:1155 ../../kde4/settingsdialog.py:669 -msgid "Rename profile" -msgstr "Uudelleennimeä profiili" - -#: ../../gnome/settingsdialog.py:1167 ../../kde4/settingsdialog.py:683 -#, python-format -msgid "Are you sure you want to delete the profile \"%s\" ?" -msgstr "Oletko varma että haluat poistaa profiilin \"%s\" ?" - -#: ../../gnome/settingsdialog.py:1173 ../../kde4/settingsdialog.py:1292 -msgid "Include folder" -msgstr "Sisällytä kansio" - -#: ../../gnome/settingsdialog.py:1193 ../../kde4/settingsdialog.py:1278 -msgid "Include file" -msgstr "Sisällytä tiedosto" - -#: ../../gnome/settingsdialog.py:1235 ../../kde4/settingsdialog.py:1241 -msgid "Exclude pattern" -msgstr "Poissulje hakulausekkeella" - -#: ../../gnome/settingsdialog.py:1240 ../../kde4/settingsdialog.py:1251 -msgid "Exclude patterns can't contain ':' char !" -msgstr "" -"Poissulkevat hakulausekkeet eivät saa sisältää ':'-kaksoispiste merkkiä !" +#: ../../qt4/logviewdialog.py:59 ../../qt4/settingsdialog.py:59 +#: ../../qt4/settingsdialog.py:274 ../../qt4/settingsdialog.py:1899 +msgid "Profile:" +msgstr "Profiili:" -#: ../../gnome/settingsdialog.py:1246 ../../kde4/settingsdialog.py:1257 -msgid "Exclude file" -msgstr "Poissulje tiedosto" +#: ../../qt4/logviewdialog.py:81 +msgid "Filter:" +msgstr "Suodatin:" -#: ../../gnome/settingsdialog.py:1257 ../../kde4/settingsdialog.py:1261 -msgid "Exclude folder" -msgstr "Poissulje kansio" +#: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 +msgid "All" +msgstr "Kaikki" -#: ../../gnome/snapshotsdialog.py:240 -msgid "Jump to" -msgstr "Hyppää" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 +#: ../../qt4/settingsdialog.py:657 +msgid "Errors" +msgstr "Virheet" -#: ../../gnome/snapshotsdialog.py:248 ../../kde4/snapshotsdialog.py:164 -msgid "Diff" -msgstr "Erot" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 +msgid "Changes" +msgstr "Muutokset" -#: ../../gnome/snapshotsdialog.py:277 ../../kde4/snapshotsdialog.py:339 -msgid "You can't compare a snapshot to itself" -msgstr "Otosta ei voi verrata itseensä" +#: ../../qt4/logviewdialog.py:92 +msgid "Informations" +msgstr "Tiedot" -#: ../../gnome/snapshotsdialog.py:284 ../../kde4/snapshotsdialog.py:346 -#, python-format -msgid "Command not found: %s" -msgstr "Komentoa ei löydy: %s" +#: ../../qt4/logviewdialog.py:101 +msgid "[E] Error, [I] Information, [C] Change" +msgstr "[E] Virhe, [I] Tietoa, [C] Muutokset" -#: ../../gnome/snapshotsdialog.py:307 ../../kde4/snapshotsdialog.py:367 -#, python-format -msgid "" -"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" +#: ../../qt4/logviewdialog.py:104 +msgid "decode paths" msgstr "" -#: ../../gnome/snapshotsdialog.py:310 ../../kde4/snapshotsdialog.py:370 -#, python-format -msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +#: ../../qt4/messagebox.py:56 +msgid "Error" msgstr "" -#: ../../gnome/snapshotsdialog.py:312 ../../kde4/snapshotsdialog.py:372 -msgid "WARNING: This can not be revoked!" +#: ../../qt4/messagebox.py:62 ../../qt4/messagebox.py:68 +msgid "Question" msgstr "" -#: ../../gnome/snapshotsdialog.py:317 ../../kde4/snapshotsdialog.py:377 -#, python-format -msgid "Exclude \"%s\" from future snapshots?" +#: ../../qt4/qt4systrayicon.py:69 +msgid "Start BackInTime" msgstr "" -#: ../../kde4/app.py:86 ../../gnome/mainwindow.glade:58 -#: ../../gnome/mainwindow.glade:60 -msgid "Refresh snapshots list" -msgstr "Päivitä otoslista" +#: ../../qt4/qt4systrayicon.py:124 +msgid "Working..." +msgstr "Työn alla..." -#: ../../kde4/app.py:94 ../../gnome/mainwindow.glade:88 -#: ../../gnome/mainwindow.glade:90 -msgid "Remove Snapshot" -msgstr "Poista otos" +#: ../../qt4/qt4tools.py:178 +msgid "Today" +msgstr "Tänään" -#: ../../kde4/app.py:98 ../../gnome/mainwindow.glade:105 -msgid "View Snapshot Log" -msgstr "Selaa otoslokia" +#: ../../qt4/qt4tools.py:183 +msgid "Yesterday" +msgstr "Eilen" -#: ../../kde4/app.py:102 ../../gnome/mainwindow.glade:121 -msgid "View Last Log" -msgstr "Selaa viimeisintä lokia" +#: ../../qt4/qt4tools.py:188 +msgid "This week" +msgstr "Tällä viikolla" -#: ../../kde4/app.py:108 ../../kde4/settingsdialog.py:69 -#: ../../gnome/mainwindow.glade:144 ../../gnome/mainwindow.glade:146 -#: ../../gnome/settingsdialog.glade:7 -msgid "Settings" -msgstr "Asetukset" +#: ../../qt4/qt4tools.py:193 +msgid "Last week" +msgstr "Viime viikolla" -#: ../../kde4/app.py:124 ../../gnome/mainwindow.glade:169 -msgid "Shutdown system after snapshot has finished." +#: ../../qt4/restoredialog.py:75 +msgid "Show full Log" msgstr "" -#: ../../kde4/app.py:131 ../../gnome/mainwindow.glade:184 -#: ../../gnome/mainwindow.glade:186 -msgid "Exit" -msgstr "Lopeta" - -#: ../../kde4/app.py:186 ../../gnome/mainwindow.glade:289 -msgid "Up" -msgstr "Ylös" - -#: ../../kde4/app.py:199 ../../gnome/mainwindow.glade:325 -msgid "Show hidden files" -msgstr "Näytä piilotiedostot" +#: ../../qt4/settingsdialog.py:68 +msgid "Edit" +msgstr "Muokkaa" -#: ../../kde4/app.py:244 -msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +#: ../../qt4/settingsdialog.py:73 +msgid "Modify for Full System Backup" msgstr "" -"Tätä kansiota ei ole olemassa\n" -"nykyisessä otoksessa !" -#: ../../kde4/app.py:839 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +#: ../../qt4/settingsdialog.py:77 ../../qt4/settingsdialog.py:451 +msgid "Add" msgstr "" -"Oletko varma että haluat poistaa otoksen:\n" -"%s" -#: ../../kde4/app.py:1140 ../../kde4/kde4systrayicon.py:117 -msgid "Working..." -msgstr "Työn alla..." - -#: ../../kde4/logviewdialog.py:55 -msgid "Error Log View" -msgstr "Virhelokinäkymä" - -#: ../../kde4/logviewdialog.py:65 ../../kde4/settingsdialog.py:79 -#: ../../kde4/settingsdialog.py:293 ../../gnome/logviewdialog.glade:73 -#: ../../gnome/settingsdialog.glade:72 -msgid "Profile:" -msgstr "Profiili:" - -#: ../../kde4/logviewdialog.py:77 ../../gnome/logviewdialog.glade:110 -msgid "Filter:" -msgstr "Suodatin:" - -#: ../../kde4/logviewdialog.py:100 ../../gnome/logviewdialog.glade:169 -msgid "[E] Error, [I] Information, [C] Change" -msgstr "[E] Virhe, [I] Tietoa, [C] Muutokset" - -#: ../../kde4/logviewdialog.py:103 ../../gnome/logviewdialog.glade:195 -msgid "decode paths" +#: ../../qt4/settingsdialog.py:81 ../../qt4/settingsdialog.py:408 +#: ../../qt4/settingsdialog.py:467 +msgid "Remove" msgstr "" -#: ../../kde4/settingsdialog.py:88 -msgid "Edit" -msgstr "Muokkaa" - -#: ../../kde4/settingsdialog.py:106 ../../gnome/settingsdialog.glade:1207 +#: ../../qt4/settingsdialog.py:96 msgid "General" msgstr "Yleiset" -#: ../../kde4/settingsdialog.py:114 ../../gnome/settingsdialog.glade:199 +#: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "" -#: ../../kde4/settingsdialog.py:127 ../../kde4/settingsdialog.py:1311 +#: ../../qt4/settingsdialog.py:119 +#, python-format +msgid "" +"Warning: %(app)s uses EncFS for encryption. A recent security audit " +"revealed several possible attack vectors for this. Please take a look at 'A " +"NOTE ON SECURITY' in 'man backintime'." +msgstr "" + +#: ../../qt4/settingsdialog.py:129 ../../qt4/settingsdialog.py:1568 msgid "Where to save snapshots" msgstr "Otosten tallennuspaikka" -#: ../../kde4/settingsdialog.py:146 +#: ../../qt4/settingsdialog.py:145 +msgid "Folder" +msgstr "" + +#: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" -#: ../../kde4/settingsdialog.py:158 ../../kde4/settingsdialog.py:283 -#: ../../gnome/settingsdialog.glade:323 ../../gnome/settingsdialog.glade:583 -#: ../../gnome/settingsdialog.glade:874 +#: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "Verkkonimi:" -#: ../../kde4/settingsdialog.py:163 ../../gnome/settingsdialog.glade:350 -#: ../../gnome/settingsdialog.glade:610 +#: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "" -#: ../../kde4/settingsdialog.py:168 ../../kde4/settingsdialog.py:288 -#: ../../gnome/settingsdialog.glade:377 ../../gnome/settingsdialog.glade:637 -#: ../../gnome/settingsdialog.glade:902 +#: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "Käyttäjä:" -#: ../../kde4/settingsdialog.py:173 ../../gnome/settingsdialog.glade:416 +#: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" -#: ../../kde4/settingsdialog.py:178 ../../gnome/settingsdialog.glade:459 +#: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" -#: ../../kde4/settingsdialog.py:184 +#: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "" -#: ../../kde4/settingsdialog.py:228 ../../kde4/settingsdialog.py:237 -#: ../../kde4/settingsdialog.py:243 ../../gnome/settingsdialog.glade:703 -#: ../../gnome/settingsdialog.glade:743 +#: ../../qt4/settingsdialog.py:201 +msgid "Key File" +msgstr "" + +#: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 +#: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "" -#: ../../kde4/settingsdialog.py:249 ../../gnome/settingsdialog.glade:775 +#: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" -#: ../../kde4/settingsdialog.py:252 ../../gnome/settingsdialog.glade:792 +#: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" -#: ../../kde4/settingsdialog.py:264 ../../gnome/settingsdialog.glade:968 +#: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "Lisäasetukset" -#: ../../kde4/settingsdialog.py:276 ../../gnome/settingsdialog.glade:848 -msgid "Auto Host / User / Profile Id" +#: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 +msgid "Full snapshot path: " msgstr "" -#: ../../kde4/settingsdialog.py:301 +#: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "Aikataulu" -#: ../../kde4/settingsdialog.py:311 ../../gnome/settingsdialog.glade:1092 +#: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "Päivä:" -#: ../../kde4/settingsdialog.py:322 ../../gnome/settingsdialog.glade:1079 +#: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "Viikonpäivä:" -#: ../../kde4/settingsdialog.py:333 ../../gnome/settingsdialog.glade:1066 +#: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "Tunti:" -#: ../../kde4/settingsdialog.py:344 ../../gnome/settingsdialog.glade:1053 +#: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "" -#: ../../kde4/settingsdialog.py:353 ../../gnome/settingsdialog.glade:1014 +#: ../../qt4/settingsdialog.py:339 msgid "" -"Run Back In Time periodically with anacron. This is useful if the computer " -"is not running regular." +"Run Back In Time repeatedly. This is useful if the computer is not running " +"regular." msgstr "" -#: ../../kde4/settingsdialog.py:357 ../../gnome/settingsdialog.glade:1040 -msgid "Frequency in days:" +#: ../../qt4/settingsdialog.py:344 +msgid "Every:" msgstr "" -#: ../../kde4/settingsdialog.py:368 ../../gnome/settingsdialog.glade:1026 +#: ../../qt4/settingsdialog.py:362 msgid "" "Run Back In Time as soon as the drive is connected (only once every X " "days).\n" "You will be prompted for your sudo password." msgstr "" -#: ../../kde4/settingsdialog.py:379 ../../gnome/settingsdialog.glade:1310 +#: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Sisällytä" -#: ../../kde4/settingsdialog.py:403 ../../kde4/settingsdialog.py:445 -#: ../../gnome/settingsdialog.glade:1411 +#: ../../qt4/settingsdialog.py:381 +msgid "Include files and folders" +msgstr "Sisällytä tiedostot ja hakemistot" + +#: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "Lisää tiedosto" -#: ../../kde4/settingsdialog.py:408 ../../kde4/settingsdialog.py:450 -#: ../../gnome/settingsdialog.glade:1427 +#: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Lisää kansio" -#: ../../kde4/settingsdialog.py:418 ../../gnome/settingsdialog.glade:1474 +#: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Poissulje" -#: ../../kde4/settingsdialog.py:421 ../../gnome/settingsdialog.glade:1328 +#: ../../qt4/settingsdialog.py:417 msgid "" "Warning: Wildcards ('foo*', '[fF]oo', 'fo?') will be ignored with " "mode 'SSH encrypted'.\n" "Only separate asterisk are allowed ('foo/*', 'foo/**/bar')" msgstr "" -#: ../../kde4/settingsdialog.py:430 +#: ../../qt4/settingsdialog.py:425 +msgid "Exclude patterns, files or folders" +msgstr "Poissulje hakuehdoilla, tiedoilla tai kansioilla" + +#: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "Erityisesti suositeltu:" -#: ../../kde4/settingsdialog.py:460 ../../gnome/settingsdialog.glade:1905 +#: ../../qt4/settingsdialog.py:463 +msgid "Add default" +msgstr "" + +#: ../../qt4/settingsdialog.py:474 +msgid "Exclude files bigger than: " +msgstr "" + +#: ../../qt4/settingsdialog.py:475 +#, python-format +msgid "" +"Exclude files bigger than value in %(prefix)s.\n" +"With 'Full rsync mode' disabled this will only affect new files\n" +"because for rsync this is a transfer option, not an exclude option.\n" +"So big files that has been backed up before will remain in snapshots\n" +"even if they had changed." +msgstr "" + +#: ../../qt4/settingsdialog.py:493 msgid "Auto-remove" msgstr "Automaattinen poisto" -#: ../../kde4/settingsdialog.py:464 ../../gnome/settingsdialog.glade:1608 +#: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "Vanhempia kun:" -#: ../../kde4/settingsdialog.py:478 ../../gnome/settingsdialog.glade:1624 +#: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "Vapaata tilaa vähemmän kun:" -#: ../../kde4/settingsdialog.py:490 ../../gnome/settingsdialog.glade:1642 +#: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" -#: ../../kde4/settingsdialog.py:514 ../../gnome/settingsdialog.glade:1697 +#: ../../qt4/settingsdialog.py:551 +msgid "Run in background on remote Host." +msgstr "" + +#: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "Säilytä kaikki otokset viimeiseltä" -#: ../../kde4/settingsdialog.py:517 ../../kde4/settingsdialog.py:522 -#: ../../gnome/settingsdialog.glade:1705 ../../gnome/settingsdialog.glade:1729 +#: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "päivältä" -#: ../../kde4/settingsdialog.py:519 ../../gnome/settingsdialog.glade:1717 +#: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "Säilytä yksi otos jokaiselta päivältä viimeiseltä" -#: ../../kde4/settingsdialog.py:524 ../../gnome/settingsdialog.glade:1743 +#: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "Säilytä yksi otos jokaiselta viikolta viimeiseltä" -#: ../../kde4/settingsdialog.py:527 +#: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "viikkolta" -#: ../../kde4/settingsdialog.py:529 ../../gnome/settingsdialog.glade:1769 +#: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "Säilytä yksi otos jokaiselta kuukaudelta viimeiseltä" -#: ../../kde4/settingsdialog.py:532 ../../gnome/settingsdialog.glade:1781 +#: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "kuukaudelta" -#: ../../kde4/settingsdialog.py:534 ../../gnome/settingsdialog.glade:1795 +#: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "Säilytä yksi otos jokaiselta vuodelta viimeiseltä" -#: ../../kde4/settingsdialog.py:537 ../../gnome/settingsdialog.glade:1496 +#: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "Älä poista nimettyjä otoksia" -#: ../../kde4/settingsdialog.py:546 ../../gnome/settingsdialog.glade:2104 +#: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Valinnat" -#: ../../kde4/settingsdialog.py:549 ../../gnome/settingsdialog.glade:1920 +#: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Näytä ilmoitukset" -#: ../../kde4/settingsdialog.py:552 ../../gnome/settingsdialog.glade:1937 +#: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "Älä ota otoksia kun kone käyttää akkua" -#: ../../kde4/settingsdialog.py:555 +#: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" msgstr "Virranhallinnan tilatiedot eivät ole käytettävissä" -#: ../../kde4/settingsdialog.py:558 ../../gnome/settingsdialog.glade:1955 -msgid "Backup files on restore" -msgstr "Ota varmuuskopio palautuksen yhteydessä" +#: ../../qt4/settingsdialog.py:611 +msgid "Run only one snapshot at a time" +msgstr "" + +#: ../../qt4/settingsdialog.py:612 +msgid "" +"Other snapshots will be blocked until the current snapshot is done.\n" +"This is a global option. So it will effect all profiles for this user.\n" +"But you need to activate this for all other users, too." +msgstr "" + +#: ../../qt4/settingsdialog.py:617 +msgid "Backup replaced files on restore" +msgstr "" + +#: ../../qt4/settingsdialog.py:618 +#, python-format +msgid "" +"Newer versions of files will be renamed with trailing '%(suffix)s' before " +"restoring.\n" +"If you don't need them anymore you can remove them with '%(cmd)s'" +msgstr "" -#: ../../kde4/settingsdialog.py:561 ../../gnome/settingsdialog.glade:1972 +#: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "Jatka virheistä huolimatta (pidä keskeneräiset otokset)" -#: ../../kde4/settingsdialog.py:564 ../../gnome/settingsdialog.glade:1989 +#: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "Käytä tarkistussummia muutosten havaitsemiseen" -#: ../../kde4/settingsdialog.py:567 ../../gnome/settingsdialog.glade:2006 +#: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "" -#: ../../kde4/settingsdialog.py:568 ../../gnome/settingsdialog.glade:2032 +#: ../../qt4/settingsdialog.py:634 msgid "" -"- snapshots are no read-only\n" -"- destination file-system must support all linux attributes (dates, rights, " +"- snapshots are not read-only\n" +"- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" "- otokset ovat vain luettavissa\n" "- kohdetiedostojärjestelmän on tuettava kaikkia Linuxin tiedosto-" "ominaisuuksia (päivämäärät, oikeudet, käyttäjä, ryhmä ...)" -#: ../../kde4/settingsdialog.py:575 ../../gnome/settingsdialog.glade:2045 +#: ../../qt4/settingsdialog.py:641 +msgid "Take a new snapshot regardless of there were changes or not." +msgstr "" + +#: ../../qt4/settingsdialog.py:644 msgid "Check for changes (don't take a new snapshot if nothing changed)" msgstr "" "Tarkista muutosten varalta (älä tee uutta otosta, jos mikään ei ole " "muuttunut)" -#: ../../kde4/settingsdialog.py:582 +#: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "Lokitaso:" -#: ../../kde4/settingsdialog.py:597 ../../gnome/settingsdialog.glade:2366 -msgid "Expert Options" -msgstr "Lisäasetukset" +#: ../../qt4/settingsdialog.py:656 +msgid "None" +msgstr "Ei mitään" + +#: ../../qt4/settingsdialog.py:658 +msgid "Changes & Errors" +msgstr "Muutokset & virheet" -#: ../../kde4/settingsdialog.py:600 +#: ../../qt4/settingsdialog.py:674 msgid "Change these options only if you really know what you are doing !" msgstr "Muuta näitä asetuksia vain jos tiedät mitä teet !" -#: ../../kde4/settingsdialog.py:608 ../../gnome/settingsdialog.glade:2133 -msgid "Run 'nice' as cron job (default: enabled)" -msgstr "Aja 'nice'-prioriteettiohjelma cron-ohjelman työnä (Oletuksena)" +#: ../../qt4/settingsdialog.py:678 +msgid "Run 'nice':" +msgstr "" + +#: ../../qt4/settingsdialog.py:684 ../../qt4/settingsdialog.py:696 +msgid "as cron job" +msgstr "" + +#: ../../qt4/settingsdialog.py:687 ../../qt4/settingsdialog.py:702 +#: ../../qt4/settingsdialog.py:716 +msgid "on remote host" +msgstr "" + +#: ../../qt4/settingsdialog.py:690 +msgid "Run 'ionice':" +msgstr "" + +#: ../../qt4/settingsdialog.py:699 +msgid "when taking a manual snapshot" +msgstr "" -#: ../../kde4/settingsdialog.py:611 ../../gnome/settingsdialog.glade:2150 -msgid "Run 'ionice' as cron job (default: enabled)" -msgstr "Aja 'ionice' cronilla (oletus: päällä)" +#: ../../qt4/settingsdialog.py:706 +msgid "Run 'rsync' with 'nocache':" +msgstr "" -#: ../../kde4/settingsdialog.py:614 ../../gnome/settingsdialog.glade:2167 -msgid "Run 'ionice' when taking a manual snapshot (default: disabled)" -msgstr "Aja 'ionice' tehtäessä manuaalinen otos (oletus: pois päältä)" +#: ../../qt4/settingsdialog.py:712 +msgid "on local machine" +msgstr "" -#: ../../kde4/settingsdialog.py:617 ../../gnome/settingsdialog.glade:2184 -msgid "Run 'nice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:719 +msgid "Redirect stdout to /dev/null in cronjobs." msgstr "" -#: ../../kde4/settingsdialog.py:620 ../../gnome/settingsdialog.glade:2201 -msgid "Run 'ionice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:725 +msgid "Redirect stderr to /dev/null in cronjobs." msgstr "" -#: ../../kde4/settingsdialog.py:626 ../../gnome/settingsdialog.glade:2224 +#: ../../qt4/settingsdialog.py:734 msgid "Limit rsync bandwidth usage: " msgstr "" -#: ../../kde4/settingsdialog.py:629 ../../gnome/settingsdialog.glade:2259 +#: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" -#: ../../kde4/settingsdialog.py:634 ../../gnome/settingsdialog.glade:2280 +#: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "Säilytä tiedostojärjestelmän pääsylistat (ACL)" -#: ../../kde4/settingsdialog.py:637 ../../gnome/settingsdialog.glade:2297 +#: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "Säilytä tiedostojen lisäominaisuudet (xattr)" -#: ../../kde4/settingsdialog.py:640 ../../gnome/settingsdialog.glade:2314 +#: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute links)" msgstr "" "Kopioi turvattomat linkit (toimii vain absoluuttisten linkkien kanssa)" -#: ../../kde4/settingsdialog.py:643 ../../gnome/settingsdialog.glade:2331 -msgid "Copy links (dereference symbolic links)" -msgstr "Kopioi linkit (ratkaise symboliset linkit)" - -#: ../../kde4/snapshotsdialog.py:46 ../../kde4/snapshotsdialog.py:173 -#: ../../gnome/snapshotsdialog.glade:385 -msgid "Diff Options" -msgstr "Diff-asetukset" - -#: ../../kde4/snapshotsdialog.py:56 ../../gnome/snapshotsdialog.glade:314 -msgid "Command:" -msgstr "Komento:" +#: ../../qt4/settingsdialog.py:834 +msgid "Paste additional options to rsync" +msgstr "" -#: ../../kde4/snapshotsdialog.py:60 ../../gnome/snapshotsdialog.glade:322 -msgid "Parameters:" -msgstr "Parametrit:" +#: ../../qt4/settingsdialog.py:837 +msgid "" +"Options must be quoted e.g. --exclude-from=\"/path/to/my exclude file\"." +msgstr "" -#: ../../kde4/snapshotsdialog.py:64 ../../gnome/snapshotsdialog.glade:334 -msgid "Use %1 and %2 for path parameters" -msgstr "Käytä %1 ja %2 polkuparametreinä" +#: ../../qt4/settingsdialog.py:847 +msgid "Add prefix to SSH commands" +msgstr "" -#: ../../kde4/snapshotsdialog.py:123 ../../gnome/snapshotsdialog.glade:184 -#: ../../gnome/snapshotsdialog.glade:186 -msgid "Delete" +#: ../../qt4/settingsdialog.py:850 +#, python-format +msgid "" +"Prefix to run before every command on remote host.\n" +"Variables need to be escaped with \\$FOO.\n" +"This doesn't touch rsync. So to add a prefix\n" +"for rsync use \"%(cb_rsync_options)s\" with\n" +"%(rsync_options_value)s\n" +"\n" +"%(default)s: %(def_value)s" msgstr "" -#: ../../kde4/snapshotsdialog.py:128 ../../gnome/snapshotsdialog.glade:199 -#: ../../gnome/snapshotsdialog.glade:201 -msgid "Select All" +#: ../../qt4/settingsdialog.py:858 ../../qt4/settingsdialog.py:1691 +msgid "default" msgstr "" -#: ../../kde4/snapshotsdialog.py:132 ../../gnome/snapshotsdialog.glade:88 -msgid "List only different snapshots" -msgstr "Listaa vain eri otokset" +#: ../../qt4/settingsdialog.py:875 +msgid "Restore Config" +msgstr "" -#: ../../kde4/snapshotsdialog.py:139 ../../gnome/snapshotsdialog.glade:110 -msgid "List only equal snapshots to: " +#: ../../qt4/settingsdialog.py:891 +msgid "" +"Full system backup can only create a snapshot to be restored to the same " +"physical disk(s) with the same disk partitioning as from the source; " +"restoring to new physical disks or the same disks with different " +"partitioning will yield a potentially broken and unusable system.\n" +"\n" +"Full system backup will override some settings that may have been " +"customized. Continue?" msgstr "" -#: ../../kde4/snapshotsdialog.py:149 ../../gnome/snapshotsdialog.glade:146 -msgid "Deep check (more accurate, but slow)" -msgstr "Syvätarkistus (tarkempi, mutta hitaampi)" +#: ../../qt4/settingsdialog.py:922 +msgid "New profile" +msgstr "Uusi profiili" -#: ../../kde4/snapshotsdialog.py:174 -msgid "Go To" -msgstr "Siirry" +#: ../../qt4/settingsdialog.py:938 +msgid "Rename profile" +msgstr "Uudelleennimeä profiili" -#: ../../gnome/logviewdialog.glade:9 -msgid "Log View" -msgstr "Lokinäkymä" +#: ../../qt4/settingsdialog.py:952 +#, python-format +msgid "Are you sure you want to delete the profile \"%s\" ?" +msgstr "Oletko varma että haluat poistaa profiilin \"%s\" ?" -#: ../../gnome/logviewdialog.glade:179 -msgid "scroll down automatic" +#: ../../qt4/settingsdialog.py:1191 +msgid "" +"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " +"*/3 for periodic backups every 3 hours" msgstr "" -#: ../../gnome/mainwindow.glade:7 -msgid "Back In Time" -msgstr "Back In Time" +#: ../../qt4/settingsdialog.py:1489 +msgid "Exclude pattern" +msgstr "Poissulje hakulausekkeella" -#: ../../gnome/mainwindow.glade:45 -msgid "Backup Now" -msgstr "Varmuuskopioi nyt" +#: ../../qt4/settingsdialog.py:1502 +msgid "Exclude file" +msgstr "Poissulje tiedosto" -#: ../../gnome/mainwindow.glade:171 -msgid "Shutdown" +#: ../../qt4/settingsdialog.py:1506 +msgid "Exclude folder" +msgstr "Poissulje kansio" + +#: ../../qt4/settingsdialog.py:1525 +msgid "Include file" +msgstr "Sisällytä tiedosto" + +#: ../../qt4/settingsdialog.py:1533 ../../qt4/settingsdialog.py:1553 +#, python-format +msgid "" +"\"%s\" is a symlink. The linked target will not be backed up until you " +"include it, too.\n" +"Would you like to include the symlinks target instead?" msgstr "" -#: ../../gnome/mainwindow.glade:287 -msgid "Parent folder" -msgstr "Yläkansio" +#: ../../qt4/settingsdialog.py:1545 +msgid "Include folder" +msgstr "Sisällytä kansio" -#: ../../gnome/mainwindow.glade:327 -msgid "Hidden files" -msgstr "Piilotetut tiedostot" +#: ../../qt4/settingsdialog.py:1572 +msgid "Are you sure you want to change snapshots folder ?" +msgstr "Oletko varma että haluat vaihtaa otosten kansiota?" -#: ../../gnome/mainwindow.glade:451 -msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +#: ../../qt4/settingsdialog.py:1688 +msgid "enabled" msgstr "" -"Tämä kansio ei ole olemassa\n" -"tässä otoksessa !" -#: ../../gnome/settingsdialog.glade:287 -msgid "Where to save snapshots" -msgstr "Mihin tallennetaan otokset" +#: ../../qt4/settingsdialog.py:1690 +msgid "disabled" +msgstr "" -#: ../../gnome/settingsdialog.glade:483 -msgid "Private key:" +#: ../../qt4/settingsdialog.py:1715 +msgid "Restore Settings" msgstr "" -#: ../../gnome/settingsdialog.glade:534 -msgid "Advanced SSH Settings" +#: ../../qt4/settingsdialog.py:1732 +msgid " and add your user to group 'fuse'" msgstr "" -#: ../../gnome/settingsdialog.glade:552 -msgid "SSH Settings" +#: ../../qt4/settingsdialog.py:1736 +#, python-format +msgid "" +"Please navigate to the snapshot from which you want to restore %(appName)s's " +"configuration. The path may look like: \n" +"%(samplePath)s\n" +"\n" +"If your snapshots are on a remote drive or if they are encrypted you need to " +"manually mount them first. If you use Mode SSH you also may need to set up " +"public key login to the remote host%(addFuse)s.\n" +"Take a look at 'man backintime'." msgstr "" -#: ../../gnome/settingsdialog.glade:815 -msgid "Password" +#: ../../qt4/settingsdialog.py:1794 ../../qt4/settingsdialog.py:1854 +msgid "No config found" msgstr "" -#: ../../gnome/settingsdialog.glade:930 -msgid "Profile Id:" -msgstr "Profiili ID:" +#: ../../qt4/snapshotsdialog.py:49 ../../qt4/snapshotsdialog.py:173 +msgid "Diff Options" +msgstr "Diff-asetukset" -#: ../../gnome/settingsdialog.glade:1115 -msgid "" -"hours seperate by comma ( e.g. 8,12,18,23) or */3 for periodic backups every " -"3 hours (cron style)" +#: ../../qt4/snapshotsdialog.py:56 +msgid "Command:" +msgstr "Komento:" + +#: ../../qt4/snapshotsdialog.py:60 +msgid "Parameters:" +msgstr "Parametrit:" + +#: ../../qt4/snapshotsdialog.py:64 +msgid "Use %1 and %2 for path parameters" +msgstr "Käytä %1 ja %2 polkuparametreinä" + +#: ../../qt4/snapshotsdialog.py:106 +msgid "List only different snapshots" +msgstr "Listaa vain eri otokset" + +#: ../../qt4/snapshotsdialog.py:113 +msgid "List only equal snapshots to: " msgstr "" -#: ../../gnome/settingsdialog.glade:1163 -msgid "Schedule" -msgstr "Aikataulu" +#: ../../qt4/snapshotsdialog.py:123 +msgid "Deep check (more accurate, but slow)" +msgstr "Syvätarkistus (tarkempi, mutta hitaampi)" + +#: ../../qt4/snapshotsdialog.py:144 +msgid "Delete" +msgstr "" -#: ../../gnome/settingsdialog.glade:1363 -msgid "Highly recommended:" -msgstr "Erityisesti suositeltu:" - -#: ../../gnome/settingsdialog.glade:1377 -msgid "label" -msgstr "nimike" - -#: ../../gnome/settingsdialog.glade:1755 -msgid "week(s)" -msgstr "viikolta" +#: ../../qt4/snapshotsdialog.py:148 +msgid "Select All" +msgstr "" -#: ../../gnome/settingsdialog.glade:2069 -msgid "Log level:" -msgstr "Lokitaso:" +#: ../../qt4/snapshotsdialog.py:161 +msgid "Diff" +msgstr "Erot" + +#: ../../qt4/snapshotsdialog.py:172 +msgid "Go To" +msgstr "Siirry" -#: ../../gnome/settingsdialog.glade:2121 +#: ../../qt4/snapshotsdialog.py:326 +msgid "You can't compare a snapshot to itself" +msgstr "Otosta ei voi verrata itseensä" + +#: ../../qt4/snapshotsdialog.py:333 +#, python-format +msgid "Command not found: %s" +msgstr "Komentoa ei löydy: %s" + +#: ../../qt4/snapshotsdialog.py:354 +#, python-format msgid "" -"Change these options only if you really know what you are doing !" -msgstr "Muuta näitä asetuksia vain silloin kun tiedät mitä teet !" +"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" +msgstr "" -#: ../../gnome/snapshotsdialog.glade:263 -msgid "Diff with" -msgstr "Vertaa" +#: ../../qt4/snapshotsdialog.py:357 +#, python-format +msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +msgstr "" -#: ../../gnome/textinputdialog.glade:7 -msgid "Pattern" -msgstr "Hakuehto" +#: ../../qt4/snapshotsdialog.py:359 +msgid "WARNING: This can not be revoked!" +msgstr "" -#: ../../gnome/textinputdialog.glade:70 -msgid "Text" +#: ../../qt4/snapshotsdialog.py:374 +#, python-format +msgid "Exclude \"%s\" from future snapshots?" msgstr "" diff -Nru backintime-1.0.36/common/po/fo.po backintime-1.1.12/common/po/fo.po --- backintime-1.0.36/common/po/fo.po 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/po/fo.po 2016-01-11 18:07:58.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2013-11-09 22:34+0100\n" +"POT-Creation-Date: 2015-12-19 00:47+0100\n" "PO-Revision-Date: 2012-01-10 15:23+0000\n" "Last-Translator: Gunleif Joensen \n" "Language-Team: Faroese \n" @@ -15,198 +15,230 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2014-08-06 10:20+0000\n" -"X-Generator: Launchpad (build 17147)\n" +"X-Launchpad-Export-Date: 2016-01-11 17:52+0000\n" +"X-Generator: Launchpad (build 17881)\n" -#: ../../common/config.py:72 +#: ../../common/configfile.py:60 +#, python-format +msgid "Failed to save config: %s" +msgstr "" + +#: ../../common/configfile.py:78 +#, python-format +msgid "Failed to load config: %s" +msgstr "" + +#: ../../common/configfile.py:352 ../../common/configfile.py:414 +#, python-format +msgid "Profile \"%s\" already exists !" +msgstr "Umhvarv \"%s\" finnst longu !" + +#: ../../common/configfile.py:383 +msgid "You can't remove the last profile !" +msgstr "Tú kannst ikki taka tað síðsta umhvarvið burtur !" + +#: ../../common/config.py:76 msgid "Disabled" msgstr "Ógilda" -#: ../../common/config.py:73 +#: ../../common/config.py:77 msgid "At every boot/reboot" msgstr "Við hvørjari byrjan/endurbyrjan" -#: ../../common/config.py:74 +#: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Hvønn 5 minutt" -#: ../../common/config.py:75 +#: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Hvønn 10 minutt" -#: ../../common/config.py:76 +#: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "" -#: ../../common/config.py:77 +#: ../../common/config.py:81 msgid "Every hour" msgstr "" -#: ../../common/config.py:78 +#: ../../common/config.py:82 msgid "Every 2 hours" msgstr "" -#: ../../common/config.py:79 +#: ../../common/config.py:83 msgid "Every 4 hours" msgstr "" -#: ../../common/config.py:80 +#: ../../common/config.py:84 msgid "Every 6 hours" msgstr "" -#: ../../common/config.py:81 +#: ../../common/config.py:85 msgid "Every 12 hours" msgstr "" -#: ../../common/config.py:82 +#: ../../common/config.py:86 msgid "Custom Hours" msgstr "" -#: ../../common/config.py:83 +#: ../../common/config.py:87 msgid "Every Day" msgstr "Hvønn dag" -#: ../../common/config.py:84 -msgid "Daily (anacron)" +#: ../../common/config.py:88 +msgid "Repeatedly (anacron)" msgstr "" -#: ../../common/config.py:85 +#: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "" -#: ../../common/config.py:86 +#: ../../common/config.py:90 msgid "Every Week" msgstr "Hvørja viku" -#: ../../common/config.py:87 +#: ../../common/config.py:91 msgid "Every Month" msgstr "Hvønn mánað" -#: ../../common/config.py:91 +#: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Dag(ar)" -#: ../../common/config.py:92 +#: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Vika(ur)" -#: ../../common/config.py:93 +#: ../../common/config.py:97 msgid "Year(s)" msgstr "Ár" -#: ../../common/config.py:100 +#: ../../common/config.py:101 +msgid "Hour(s)" +msgstr "" + +#: ../../common/config.py:104 +msgid "Month(s)" +msgstr "" + +#: ../../common/config.py:126 ../../qt4/settingsdialog.py:551 msgid " EXPERIMENTAL!" msgstr "" -#: ../../common/config.py:103 +#: ../../common/config.py:129 msgid "Local" msgstr "" -#: ../../common/config.py:104 +#: ../../common/config.py:130 msgid "SSH" msgstr "" -#: ../../common/config.py:104 ../../common/config.py:106 -#: ../../gnome/settingsdialog.py:475 ../../kde4/settingsdialog.py:1325 +#: ../../common/config.py:130 ../../common/config.py:132 +#: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "" -#: ../../common/config.py:105 +#: ../../common/config.py:131 msgid "Local encrypted" msgstr "" -#: ../../common/config.py:105 ../../common/config.py:106 +#: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "" -#: ../../common/config.py:106 +#: ../../common/config.py:132 msgid "SSH encrypted" msgstr "" -#: ../../common/config.py:112 +#: ../../common/config.py:135 msgid "Default" msgstr "" -#: ../../common/config.py:113 +#: ../../common/config.py:136 msgid "AES128-CTR" msgstr "" -#: ../../common/config.py:114 +#: ../../common/config.py:137 msgid "AES192-CTR" msgstr "" -#: ../../common/config.py:115 +#: ../../common/config.py:138 msgid "AES256-CTR" msgstr "" -#: ../../common/config.py:116 +#: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "" -#: ../../common/config.py:117 +#: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "" -#: ../../common/config.py:118 +#: ../../common/config.py:141 msgid "AES128-CBC" msgstr "" -#: ../../common/config.py:119 +#: ../../common/config.py:142 msgid "3DES-CBC" msgstr "" -#: ../../common/config.py:120 +#: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "" -#: ../../common/config.py:121 +#: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "" -#: ../../common/config.py:122 +#: ../../common/config.py:145 msgid "AES192-CBC" msgstr "" -#: ../../common/config.py:123 +#: ../../common/config.py:146 msgid "AES256-CBC" msgstr "" -#: ../../common/config.py:124 +#: ../../common/config.py:147 msgid "ARCFOUR" msgstr "" -#: ../../common/config.py:129 +#: ../../common/config.py:153 msgid "Main profile" msgstr "Høvuðsumhvarv" -#: ../../common/config.py:256 ../../common/config.py:275 -#: ../../common/config.py:286 ../../common/config.py:291 +#: ../../common/config.py:289 ../../common/config.py:296 +#: ../../common/config.py:307 ../../common/config.py:312 +#: ../../qt4/qt4systrayicon.py:61 #, python-format msgid "Profile: \"%s\"" msgstr "Umhvarv: \"%s\"" -#: ../../common/config.py:256 +#: ../../common/config.py:289 msgid "Snapshots folder is not valid !" msgstr "Støðumyndaskjáttan er ikki lóglig !" -#: ../../common/config.py:275 +#: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "Tú má í minnsta lag velja eina skjáttu at trygdarrita !" -#: ../../common/config.py:286 +#: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "Tú kann ikki hava trygdarritsskjáttuna við !" -#: ../../common/config.py:291 +#: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "Tú kann ikki hava eina trygdarritsskjáttu við !" -#: ../../common/config.py:361 +#: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s er ikki ein skjatta" -#: ../../common/config.py:376 ../../common/config.py:389 +#: ../../common/config.py:380 +msgid "Host/User/Profile-ID must not be empty!" +msgstr "" + +#: ../../common/config.py:388 ../../common/config.py:420 #, python-format msgid "" "Can't write to: %s\n" @@ -215,59 +247,68 @@ "Kann ikki skriva til: %s\n" "Hevur tú skrivi rættindi ?" -#: ../../common/config.py:1286 +#: ../../common/config.py:400 +#, python-format msgid "" -"Can't find crontab.\n" -"Are you sure cron is installed ?\n" -"If not you should disable all automatic backups." +"Destination filesystem for '%(path)s' is formatted with FAT which doesn't " +"support hard-links. Please use a native Linux filesystem." msgstr "" -"Kann ikki finna crontab.\n" -"Er tú viss/ur í at cron er innlagt ?\n" -"Um so ikk er, eigur tú at ógilda allar sjálvvirknar trygdarritingar." -#: ../../common/config.py:1338 +#: ../../common/config.py:405 #, python-format -msgid "Schedule udev doesn't work with mode %s" +msgid "" +"Destination filsystem for '%(path)s' is a SMB mounted share. Please make " +"sure the remote SMB server supports symlinks or activate '%(copyLinks)s' in " +"'%(expertOptions)s'." msgstr "" -#: ../../common/config.py:1342 -#, python-format -msgid "Couldn't find UUID for \"%s\"" +#: ../../common/config.py:408 ../../qt4/settingsdialog.py:815 +msgid "Copy links (dereference symbolic links)" msgstr "" -#: ../../common/config.py:1379 -msgid "Failed to remove udev rules" -msgstr "" +#: ../../common/config.py:409 ../../qt4/settingsdialog.py:669 +msgid "Expert Options" +msgstr "Framkomnir kostir" -#: ../../common/config.py:1385 -msgid "Failed to create udev rules" +#: ../../common/config.py:411 +#, python-format +msgid "" +"Destination filesystem for '%(path)s is a sshfs mounted share. sshfs doesn't " +"support hard-links. Please use mode 'SSH' instead." msgstr "" -#: ../../common/config.py:1420 +#: ../../common/config.py:1407 msgid "" -"Can't find anacron.\n" -"Are you sure anacron is installed ?\n" -"If not you should disable daily anacron backups." +"Can't find crontab.\n" +"Are you sure cron is installed ?\n" +"If not you should disable all automatic backups." msgstr "" +"Kann ikki finna crontab.\n" +"Er tú viss/ur í at cron er innlagt ?\n" +"Um so ikk er, eigur tú at ógilda allar sjálvvirknar trygdarritingar." -#: ../../common/config.py:1439 -msgid "Please provide your sudo password to install the udev rule." +#: ../../common/config.py:1411 +msgid "Failed to write new crontab." msgstr "" -#: ../../common/config.py:1445 -msgid "Please provide your sudo password to remove unused udev rules." +#: ../../common/config.py:1505 +#, python-format +msgid "" +"Could not install Udev rule for profile %(profile_id)s. DBus Service " +"'%(dbus_interface)s' wasn't available" msgstr "" -#: ../../common/configfile.py:253 ../../common/configfile.py:315 +#: ../../common/config.py:1517 #, python-format -msgid "Profile \"%s\" already exists !" -msgstr "Umhvarv \"%s\" finnst longu !" +msgid "Schedule udev doesn't work with mode %s" +msgstr "" -#: ../../common/configfile.py:284 -msgid "You can't remove the last profile !" -msgstr "Tú kannst ikki taka tað síðsta umhvarvið burtur !" +#: ../../common/config.py:1526 +#, python-format +msgid "Couldn't find UUID for \"%s\"" +msgstr "" -#: ../../common/encfstools.py:95 +#: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" @@ -275,38 +316,38 @@ "%(error)s" msgstr "" -#: ../../common/encfstools.py:105 +#: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "" -#: ../../common/encfstools.py:149 +#: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "" -#: ../../common/encfstools.py:153 +#: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" -#: ../../common/encfstools.py:154 +#: ../../common/encfstools.py:171 msgid "Cancel" msgstr "" -#: ../../common/encfstools.py:157 +#: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "" -#: ../../common/encfstools.py:161 +#: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "" -#: ../../common/encfstools.py:166 +#: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" -#: ../../common/encfstools.py:174 ../../common/sshtools.py:207 +#: ../../common/encfstools.py:196 ../../common/sshtools.py:262 #, python-format msgid "" "%(user)s is not member of group 'fuse'.\n" @@ -314,70 +355,73 @@ "Look at 'man backintime' for further instructions." msgstr "" -#: ../../common/encfstools.py:189 +#: ../../common/encfstools.py:211 msgid "" "encfs version 1.7.2 and before has a bug with option --reverse. Please " "update encfs" msgstr "" -#: ../../common/encfstools.py:453 ../../common/encfstools.py:480 -#: ../../common/snapshots.py:982 ../../common/snapshots.py:1288 -#: ../../kde4/app.py:82 ../../gnome/mainwindow.glade:43 +#: ../../common/encfstools.py:512 ../../common/snapshots.py:1131 +#: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "Tak eina løtumynd" -#: ../../common/mount.py:195 +#: ../../common/mount.py:204 #, python-format msgid "" "Hash collision occurred in hash_id %s. Incrementing global value " "hash_collision and try again." msgstr "" -#: ../../common/mount.py:246 +#: ../../common/mount.py:259 #, python-format msgid "mountpoint %s not empty." msgstr "" -#: ../../common/mount.py:286 +#: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" -#: ../../common/password.py:425 +#: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" -#: ../../common/snapshots.py:171 ../../gnome/app.py:1127 -#: ../../kde4/app.py:1014 +#: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Nú" -#: ../../common/snapshots.py:182 ../../gnome/gnometools.py:37 +#: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "VIÐ VILLUM !" -#: ../../common/snapshots.py:282 +#: ../../common/snapshots.py:344 msgid "" "### This log has been decoded with automatic search pattern\n" "### If some paths are not decoded you can manually decode them with:\n" msgstr "" -#: ../../common/snapshots.py:465 +#: ../../common/snapshots.py:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "" -#: ../../common/snapshots.py:564 +#: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "" -#: ../../common/snapshots.py:739 +#: ../../common/snapshots.py:752 ../../qt4/app.py:377 ../../qt4/app.py:675 +#: ../../qt4/app.py:692 ../../qt4/qt4systrayicon.py:65 +msgid "Done" +msgstr "Liðugt" + +#: ../../common/snapshots.py:860 msgid "" "Back In Time changed its backup format.\n" "\n" "Your old snapshots can be moved according to this new format. OK?" msgstr "" -#: ../../common/snapshots.py:749 +#: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" @@ -391,13 +435,13 @@ "Tað nýggja trygdarritingar-sniðið stuðlar goymslu av ymsum brúkarum og " "umhvarvum á sama staði. Vil tú nýta sama stað til bæði umhvarvini?" -#: ../../common/snapshots.py:752 +#: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" msgstr "" -#: ../../common/snapshots.py:803 +#: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" @@ -410,7 +454,7 @@ "cannot continue taking snapshots" msgstr "" -#: ../../common/snapshots.py:812 +#: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" @@ -420,14 +464,14 @@ "if you are done restart Back In Time to proceed" msgstr "" -#: ../../common/snapshots.py:825 +#: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" msgstr "" -#: ../../common/snapshots.py:830 +#: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" @@ -439,172 +483,183 @@ "If you do not, you will be asked again next time you start Back In Time." msgstr "" -#: ../../common/snapshots.py:839 +#: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "" -#: ../../common/snapshots.py:841 +#: ../../common/snapshots.py:953 msgid "" "Back In Time still cannot continue taking new snapshots.\n" "Restart Back In Time to see the questions again" msgstr "" -#: ../../common/snapshots.py:913 +#: ../../common/snapshots.py:972 +msgid "Deferring backup while on battery" +msgstr "" + +#: ../../common/snapshots.py:1035 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it." msgstr "" -#: ../../common/snapshots.py:915 +#: ../../common/snapshots.py:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "Bíði %s sekund." msgstr[1] "Bíði %s sekund." -#: ../../common/snapshots.py:941 +#: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "" -#: ../../common/snapshots.py:950 +#: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "" -#: ../../common/snapshots.py:1088 +#: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "Kann ikki stovna skjáttuna: %s" -#: ../../common/snapshots.py:1107 +#: ../../common/snapshots.py:1217 msgid "..." msgstr "..." -#: ../../common/snapshots.py:1134 +#: ../../common/snapshots.py:1238 +#, python-format +msgid "Found leftover '%s' which can be continued." +msgstr "" + +#: ../../common/snapshots.py:1250 +#, python-format +msgid "Remove leftover '%s' folder from last run" +msgstr "" + +#: ../../common/snapshots.py:1263 #, python-format msgid "Can't remove folder: %s" msgstr "Kaann ikki taka burtur skjáttuna: %s" -#: ../../common/snapshots.py:1219 +#: ../../common/snapshots.py:1340 #, python-format msgid "Compare with snapshot %s" msgstr "samanberð við støåumyndini %s" -#: ../../common/snapshots.py:1248 +#: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "Stovna harð-leinkjur" -#: ../../common/snapshots.py:1335 +#: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "Goymi samansetingarfíluna ..." -#: ../../common/snapshots.py:1341 +#: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "Goymi loyvi ...." -#: ../../common/snapshots.py:1442 +#: ../../common/snapshots.py:1470 +msgid "Save permission over ssh failed. Retry normal method" +msgstr "" + +#: ../../common/snapshots.py:1521 #, python-format msgid "Can't rename %(new_path)s to %(path)s" msgstr "" -#: ../../common/snapshots.py:1562 -msgid "Remove old snapshots" -msgstr "Tak gamlar støðumyndir burtir" - -#: ../../common/snapshots.py:1586 ../../kde4/settingsdialog.py:501 -#: ../../gnome/settingsdialog.glade:1660 +#: ../../common/snapshots.py:1695 ../../common/snapshots.py:1728 +#: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "" -#: ../../common/snapshots.py:1591 +#: ../../common/snapshots.py:1704 +msgid "Remove old snapshots" +msgstr "Tak gamlar støðumyndir burtir" + +#: ../../common/snapshots.py:1733 msgid "Try to keep min free space" msgstr "Royn at halda minstamark av tøkum plássi" -#: ../../common/snapshots.py:1621 +#: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" -#: ../../common/sshtools.py:106 +#: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "" -#: ../../common/sshtools.py:113 +#: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "" -#: ../../common/sshtools.py:187 -#, python-format -msgid "" -"Failed to unlock SSH private key:\n" -"Error: %s" -msgstr "" - -#: ../../common/sshtools.py:194 +#: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" -#: ../../common/sshtools.py:199 +#: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" -#: ../../common/sshtools.py:217 +#: ../../common/sshtools.py:278 #, python-format msgid "" "Password-less authentication for %(user)s@%(host)s failed. Look at 'man " "backintime' for further instructions." msgstr "" -#: ../../common/sshtools.py:229 +#: ../../common/sshtools.py:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" -#: ../../common/sshtools.py:254 +#: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" -#: ../../common/sshtools.py:274 +#: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" -#: ../../common/sshtools.py:276 +#: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:278 +#: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:280 +#: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" -#: ../../common/sshtools.py:302 +#: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" -#: ../../common/sshtools.py:325 ../../common/sshtools.py:383 +#: ../../common/sshtools.py:423 ../../common/sshtools.py:553 #, python-format msgid "" "Remote host %(host)s doesn't support '%(command)s':\n" @@ -612,7 +667,7 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:387 +#: ../../common/sshtools.py:556 #, python-format msgid "" "Check commands on host %(host)s returned unknown error:\n" @@ -620,823 +675,939 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:400 +#: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "" -#: ../../gnome/app.py:185 ../../gnome/app.py:594 ../../gnome/app.py:608 -#: ../../kde4/app.py:299 ../../kde4/app.py:570 ../../kde4/app.py:587 -msgid "Done" -msgstr "Liðugt" +#: ../../qt4/app.py:81 +msgid "Refresh snapshots list" +msgstr "" -#: ../../gnome/app.py:189 ../../kde4/app.py:143 ../../kde4/app.py:159 -#: ../../gnome/mainwindow.glade:225 +#: ../../qt4/app.py:85 ../../qt4/app.py:890 +msgid "Snapshot Name" +msgstr "Navn á støðumynd" + +#: ../../qt4/app.py:88 +msgid "Remove Snapshot" +msgstr "Tak støðumynd burtur" + +#: ../../qt4/app.py:91 +msgid "View Snapshot Log" +msgstr "" + +#: ../../qt4/app.py:94 +msgid "View Last Log" +msgstr "" + +#: ../../qt4/app.py:99 ../../qt4/settingsdialog.py:51 +msgid "Settings" +msgstr "Instillingar" + +#: ../../qt4/app.py:104 +msgid "Shutdown" +msgstr "" + +#: ../../qt4/app.py:105 +msgid "Shutdown system after snapshot has finished." +msgstr "" + +#: ../../qt4/app.py:111 +msgid "Exit" +msgstr "Far úr" + +#: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 msgid "Help" msgstr "Hjálp" -#: ../../gnome/app.py:191 ../../kde4/app.py:146 -#: ../../gnome/mainwindow.glade:223 +#: ../../qt4/app.py:122 +msgid "Config File Help" +msgstr "" + +#: ../../qt4/app.py:125 msgid "Website" msgstr "Heimasíða" -#: ../../gnome/app.py:192 ../../kde4/app.py:148 +#: ../../qt4/app.py:127 ../../qt4/app.py:982 +msgid "Changelog" +msgstr "" + +#: ../../qt4/app.py:129 msgid "FAQ" msgstr "" -#: ../../gnome/app.py:193 ../../kde4/app.py:150 +#: ../../qt4/app.py:131 msgid "Ask a question" msgstr "" -#: ../../gnome/app.py:194 ../../kde4/app.py:152 +#: ../../qt4/app.py:133 msgid "Report a bug" msgstr "" -#: ../../gnome/app.py:196 ../../kde4/app.py:155 +#: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "Um forritið" -#: ../../gnome/app.py:202 ../../gnome/app.py:887 -#: ../../gnome/restoredialog.py:84 ../../gnome/snapshotsdialog.py:83 -#: ../../gnome/snapshotsdialog.py:244 ../../kde4/app.py:206 -#: ../../kde4/app.py:216 ../../kde4/restoredialog.py:68 -#: ../../kde4/snapshotsdialog.py:111 ../../kde4/snapshotsdialog.py:117 -#: ../../gnome/mainwindow.glade:350 ../../gnome/mainwindow.glade:352 -#: ../../gnome/snapshotsdialog.glade:169 ../../gnome/snapshotsdialog.glade:171 +#: ../../qt4/app.py:163 +msgid "Up" +msgstr "Upp" + +#: ../../qt4/app.py:174 ../../qt4/settingsdialog.py:1776 +msgid "Show hidden files" +msgstr "Vís fjaldar fílur" + +#: ../../qt4/app.py:184 ../../qt4/app.py:199 ../../qt4/app.py:233 +#: ../../qt4/restoredialog.py:62 ../../qt4/settingsdialog.py:1818 +#: ../../qt4/snapshotsdialog.py:134 ../../qt4/snapshotsdialog.py:139 msgid "Restore" msgstr "Endurstovna" -#: ../../gnome/app.py:203 ../../gnome/app.py:888 ../../gnome/gnometools.py:67 -#: ../../gnome/snapshotsdialog.py:84 ../../gnome/snapshotsdialog.py:245 -#: ../../kde4/app.py:208 ../../kde4/restoredialog.py:42 -#: ../../kde4/snapshotsdialog.py:113 +#: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 +#: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "" -#: ../../gnome/app.py:205 ../../gnome/app.py:896 ../../gnome/app.py:1146 -#: ../../kde4/app.py:1041 -#, python-format -msgid "Restore '%s'" +#: ../../qt4/app.py:194 +msgid "Restore and delete new files" msgstr "" -#: ../../gnome/app.py:207 ../../gnome/app.py:897 ../../gnome/app.py:1147 -#: ../../kde4/app.py:1042 +#: ../../qt4/app.py:201 #, python-format -msgid "Restore '%s' to ..." +msgid "" +"Restore selected file or folder.\n" +"If this button is grayed out this is most likely because \"%(now)s\" is " +"selected in left hand snapshots list." +msgstr "" + +#: ../../qt4/app.py:206 ../../qt4/logviewdialog.py:67 +#: ../../qt4/qt4tools.py:160 ../../qt4/snapshotsdialog.py:96 +msgid "Snapshots" +msgstr "Støðumyndir" + +#: ../../qt4/app.py:213 +msgid "Snapshot" msgstr "" -#: ../../gnome/app.py:226 ../../kde4/app.py:235 +#: ../../qt4/app.py:224 +msgid "View" +msgstr "" + +#: ../../qt4/app.py:277 msgid "Shortcuts" msgstr "Snarvegir" -#: ../../gnome/app.py:249 -msgid "Name" -msgstr "Navn" - -#: ../../gnome/app.py:260 -msgid "Size" -msgstr "Stødd" - -#: ../../gnome/app.py:267 -msgid "Date" -msgstr "Dagfesting" - -#: ../../gnome/app.py:286 ../../gnome/app.py:883 -#: ../../gnome/snapshotsdialog.py:116 ../../kde4/app.py:171 -#: ../../kde4/app.py:221 ../../kde4/snapshotsdialog.py:91 -#: ../../gnome/mainwindow.glade:366 ../../gnome/mainwindow.glade:368 -#: ../../gnome/snapshotsdialog.glade:8 -msgid "Snapshots" -msgstr "Støðumyndir" +#: ../../qt4/app.py:295 +msgid "" +"This folder doesn't exist\n" +"in the current selected snapshot!" +msgstr "" + +#: ../../qt4/app.py:359 +msgid "Add to Include" +msgstr "" + +#: ../../qt4/app.py:360 +msgid "Add to Exclude" +msgstr "" -#: ../../gnome/app.py:348 ../../kde4/app.py:362 +#: ../../qt4/app.py:416 +#, python-format +msgid "" +"%(appName)s is not configured. Would you like to restore a previous " +"configuration?" +msgstr "" + +#: ../../qt4/app.py:440 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it and then press OK" msgstr "" -#: ../../gnome/app.py:611 ../../kde4/app.py:590 -msgid "Done, no backup needed" -msgstr "Liðug, eingin trygdarriting neyðug" +#: ../../qt4/app.py:473 +msgid "" +"If you close this window Back In Time will not be able to shutdown your " +"system when the snapshot has finished.\n" +"Do you really want to close?" +msgstr "" -#: ../../gnome/app.py:619 ../../kde4/app.py:598 +#: ../../qt4/app.py:667 ../../qt4/app.py:703 msgid "Working:" msgstr "Arbeiði:" -#: ../../gnome/app.py:623 ../../kde4/app.py:602 +#: ../../qt4/app.py:695 +msgid "Done, no backup needed" +msgstr "Liðug, eingin trygdarriting neyðug" + +#: ../../qt4/app.py:707 msgid "Error:" msgstr "Villa:" -#: ../../gnome/app.py:636 ../../kde4/app.py:649 +#: ../../qt4/app.py:726 ../../qt4/qt4systrayicon.py:153 +msgid "Sent:" +msgstr "" + +#: ../../qt4/app.py:727 ../../qt4/qt4systrayicon.py:154 +msgid "Speed:" +msgstr "" + +#: ../../qt4/app.py:728 ../../qt4/qt4systrayicon.py:155 +msgid "ETA:" +msgstr "" + +#: ../../qt4/app.py:777 msgid "Global" msgstr "Heiltøkur" -#: ../../gnome/app.py:637 ../../kde4/app.py:650 +#: ../../qt4/app.py:778 msgid "Root" msgstr "Rót" -#: ../../gnome/app.py:638 ../../kde4/app.py:651 +#: ../../qt4/app.py:779 msgid "Home" msgstr "Heim" -#: ../../gnome/app.py:662 -msgid "Bookmarks" -msgstr "Bókamerki" - -#: ../../gnome/app.py:675 ../../kde4/app.py:662 +#: ../../qt4/app.py:794 msgid "Backup folders" msgstr "Trygdarritingar-skjáttur" -#: ../../gnome/app.py:701 ../../kde4/app.py:734 -msgid "Today" -msgstr "Í dag" +#: ../../qt4/app.py:849 +msgid "This is NOT a snapshot but a live view of your local files" +msgstr "" -#: ../../gnome/app.py:705 ../../kde4/app.py:738 -msgid "Yesterday" -msgstr "Í gjár" +#: ../../qt4/app.py:860 ../../qt4/app.py:1476 +#, python-format +msgid "Last check %s" +msgstr "" -#: ../../gnome/app.py:709 ../../kde4/app.py:742 -msgid "This week" -msgstr "Henda vikan" +#: ../../qt4/app.py:928 +#, python-format +msgid "" +"Are you sure you want to remove the snapshot:\n" +"%s" +msgstr "" +"Er tú viss/ur í at taka støðumyndina burtur:\n" +"%s" -#: ../../gnome/app.py:713 ../../kde4/app.py:746 -msgid "Last week" -msgstr "Fyrra vikan" +#: ../../qt4/app.py:1004 +#, python-format +msgid "" +"Backup local files before overwriting or\n" +"removing with trailing '%(suffix)s'." +msgstr "" -#: ../../gnome/app.py:764 ../../kde4/app.py:398 +#: ../../qt4/app.py:1010 msgid "" -"If you close this window Back In Time will not be able to shutdown your " -"system when the snapshot has finished.\n" -"Do you really want to close?" +"Are you sure you want to remove all newer files in your original folder?" msgstr "" -#: ../../gnome/app.py:881 ../../gnome/snapshotsdialog.py:238 -msgid "Open" -msgstr "Lat upp" +#: ../../qt4/app.py:1014 +msgid "" +"WARNING: deleting files in filesystem root could break your whole system!!!" +msgstr "" -#: ../../gnome/app.py:1056 ../../kde4/app.py:90 ../../kde4/app.py:805 -#: ../../gnome/mainwindow.glade:73 ../../gnome/mainwindow.glade:75 -msgid "Snapshot Name" -msgstr "Navn á støðumynd" +#: ../../qt4/app.py:1016 +msgid "Files to be restored:" +msgstr "" -#: ../../gnome/app.py:1075 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +#: ../../qt4/app.py:1031 +msgid "Do you really want to restore this files(s):" msgstr "" -"Er tú viss/ur í at taka støðumyndina burtur:\n" -"%s" -#: ../../gnome/app.py:1123 ../../kde4/app.py:1010 +#: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "Støðumynd: %s" -#: ../../gnome/app.py:1124 ../../kde4/app.py:1011 +#: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "Sýn støðumyndina ið gjørd varð við %s" -#: ../../gnome/app.py:1126 ../../kde4/app.py:1013 +#: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "Sýn núverandi innihald á diski" -#: ../../gnome/logviewdialog.py:106 ../../gnome/settingsdialog.py:414 -#: ../../kde4/logviewdialog.py:83 ../../kde4/settingsdialog.py:590 -msgid "All" -msgstr "Alt" - -#: ../../gnome/logviewdialog.py:107 ../../gnome/settingsdialog.py:412 -#: ../../kde4/logviewdialog.py:84 ../../kde4/settingsdialog.py:588 -msgid "Errors" -msgstr "Villur" - -#: ../../gnome/logviewdialog.py:112 ../../kde4/logviewdialog.py:89 -msgid "Changes" -msgstr "Broytingar" - -#: ../../gnome/logviewdialog.py:115 ../../kde4/logviewdialog.py:92 -msgid "Informations" -msgstr "Upplýsingar" - -#: ../../gnome/settingsdialog.py:235 ../../kde4/settingsdialog.py:387 -msgid "Include files and folders" -msgstr "" - -#: ../../gnome/settingsdialog.py:264 -msgid "Exclude patterns, files or folders" +#: ../../qt4/app.py:1268 +#, python-format +msgid "Restore '%s'" msgstr "" -#: ../../gnome/settingsdialog.py:411 ../../kde4/settingsdialog.py:587 -msgid "None" -msgstr "Einki" - -#: ../../gnome/settingsdialog.py:413 ../../kde4/settingsdialog.py:589 -msgid "Changes & Errors" -msgstr "Broytingar & brek" - -#: ../../gnome/settingsdialog.py:458 -msgid "Snapshots folder" -msgstr "Støðumynda skjátta" - -#: ../../gnome/settingsdialog.py:466 ../../kde4/settingsdialog.py:1314 -msgid "Are you sure you want to change snapshots folder ?" -msgstr "Er tú viss/ur í at broyta støðumyndaskjáttu ?" - -#: ../../gnome/settingsdialog.py:901 ../../kde4/settingsdialog.py:914 -msgid "" -"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " -"*/3 for periodic backups every 3 hours" +#: ../../qt4/app.py:1269 +#, python-format +msgid "Restore '%s' to ..." msgstr "" -#: ../../gnome/settingsdialog.py:1141 ../../kde4/settingsdialog.py:653 -msgid "New profile" -msgstr "Nýtt umhvarv" - -#: ../../gnome/settingsdialog.py:1155 ../../kde4/settingsdialog.py:669 -msgid "Rename profile" -msgstr "Nýnevn umhvarv" - -#: ../../gnome/settingsdialog.py:1167 ../../kde4/settingsdialog.py:683 +#: ../../qt4/app.py:1270 #, python-format -msgid "Are you sure you want to delete the profile \"%s\" ?" -msgstr "Er tú viss/ur í at strika umhvarvið \"%s\" ?" - -#: ../../gnome/settingsdialog.py:1173 ../../kde4/settingsdialog.py:1292 -msgid "Include folder" -msgstr "Tak skjáttur við" - -#: ../../gnome/settingsdialog.py:1193 ../../kde4/settingsdialog.py:1278 -msgid "Include file" -msgstr "Tak fílu við" - -#: ../../gnome/settingsdialog.py:1235 ../../kde4/settingsdialog.py:1241 -msgid "Exclude pattern" +msgid "Restore '%s' and delete new files" msgstr "" -#: ../../gnome/settingsdialog.py:1240 ../../kde4/settingsdialog.py:1251 -msgid "Exclude patterns can't contain ':' char !" +#: ../../qt4/app.py:1368 ../../qt4/app.py:1385 +msgid "Authors" msgstr "" -#: ../../gnome/settingsdialog.py:1246 ../../kde4/settingsdialog.py:1257 -msgid "Exclude file" +#: ../../qt4/app.py:1369 ../../qt4/app.py:1388 +msgid "Translations" msgstr "" -#: ../../gnome/settingsdialog.py:1257 ../../kde4/settingsdialog.py:1261 -msgid "Exclude folder" +#: ../../qt4/app.py:1370 ../../qt4/app.py:1391 +msgid "License" msgstr "" -#: ../../gnome/snapshotsdialog.py:240 -msgid "Jump to" +#: ../../qt4/logviewdialog.py:49 +msgid "Last Log View" msgstr "" -#: ../../gnome/snapshotsdialog.py:248 ../../kde4/snapshotsdialog.py:164 -msgid "Diff" +#: ../../qt4/logviewdialog.py:51 +msgid "Snapshot Log View" msgstr "" -#: ../../gnome/snapshotsdialog.py:277 ../../kde4/snapshotsdialog.py:339 -msgid "You can't compare a snapshot to itself" -msgstr "Tú kannst ikki samanbera eina støðumynd við sær sjálvari" - -#: ../../gnome/snapshotsdialog.py:284 ../../kde4/snapshotsdialog.py:346 -#, python-format -msgid "Command not found: %s" -msgstr "Stýriboð ikki funni: %s" - -#: ../../gnome/snapshotsdialog.py:307 ../../kde4/snapshotsdialog.py:367 -#, python-format -msgid "" -"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" -msgstr "" +#: ../../qt4/logviewdialog.py:59 ../../qt4/settingsdialog.py:59 +#: ../../qt4/settingsdialog.py:274 ../../qt4/settingsdialog.py:1899 +msgid "Profile:" +msgstr "Umhvarv:" -#: ../../gnome/snapshotsdialog.py:310 ../../kde4/snapshotsdialog.py:370 -#, python-format -msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" -msgstr "" +#: ../../qt4/logviewdialog.py:81 +msgid "Filter:" +msgstr "Filtur:" -#: ../../gnome/snapshotsdialog.py:312 ../../kde4/snapshotsdialog.py:372 -msgid "WARNING: This can not be revoked!" -msgstr "" +#: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 +msgid "All" +msgstr "Alt" -#: ../../gnome/snapshotsdialog.py:317 ../../kde4/snapshotsdialog.py:377 -#, python-format -msgid "Exclude \"%s\" from future snapshots?" -msgstr "" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 +#: ../../qt4/settingsdialog.py:657 +msgid "Errors" +msgstr "Villur" -#: ../../kde4/app.py:86 ../../gnome/mainwindow.glade:58 -#: ../../gnome/mainwindow.glade:60 -msgid "Refresh snapshots list" -msgstr "" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 +msgid "Changes" +msgstr "Broytingar" -#: ../../kde4/app.py:94 ../../gnome/mainwindow.glade:88 -#: ../../gnome/mainwindow.glade:90 -msgid "Remove Snapshot" -msgstr "Tak støðumynd burtur" +#: ../../qt4/logviewdialog.py:92 +msgid "Informations" +msgstr "Upplýsingar" -#: ../../kde4/app.py:98 ../../gnome/mainwindow.glade:105 -msgid "View Snapshot Log" +#: ../../qt4/logviewdialog.py:101 +msgid "[E] Error, [I] Information, [C] Change" msgstr "" -#: ../../kde4/app.py:102 ../../gnome/mainwindow.glade:121 -msgid "View Last Log" +#: ../../qt4/logviewdialog.py:104 +msgid "decode paths" msgstr "" -#: ../../kde4/app.py:108 ../../kde4/settingsdialog.py:69 -#: ../../gnome/mainwindow.glade:144 ../../gnome/mainwindow.glade:146 -#: ../../gnome/settingsdialog.glade:7 -msgid "Settings" -msgstr "Instillingar" - -#: ../../kde4/app.py:124 ../../gnome/mainwindow.glade:169 -msgid "Shutdown system after snapshot has finished." +#: ../../qt4/messagebox.py:56 +msgid "Error" msgstr "" -#: ../../kde4/app.py:131 ../../gnome/mainwindow.glade:184 -#: ../../gnome/mainwindow.glade:186 -msgid "Exit" -msgstr "Far úr" - -#: ../../kde4/app.py:186 ../../gnome/mainwindow.glade:289 -msgid "Up" -msgstr "Upp" - -#: ../../kde4/app.py:199 ../../gnome/mainwindow.glade:325 -msgid "Show hidden files" -msgstr "Vís fjaldar fílur" - -#: ../../kde4/app.py:244 -msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +#: ../../qt4/messagebox.py:62 ../../qt4/messagebox.py:68 +msgid "Question" msgstr "" -"Hendan skjáttan finnst ikki\n" -"í núverandi støðumyndd !" -#: ../../kde4/app.py:839 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +#: ../../qt4/qt4systrayicon.py:69 +msgid "Start BackInTime" msgstr "" -"Er tú viss/ur í at taka støðumyndina burtur:\n" -"%s" -#: ../../kde4/app.py:1140 ../../kde4/kde4systrayicon.py:117 +#: ../../qt4/qt4systrayicon.py:124 msgid "Working..." msgstr "Arbeiði..." -#: ../../kde4/logviewdialog.py:55 -msgid "Error Log View" -msgstr "" +#: ../../qt4/qt4tools.py:178 +msgid "Today" +msgstr "Í dag" -#: ../../kde4/logviewdialog.py:65 ../../kde4/settingsdialog.py:79 -#: ../../kde4/settingsdialog.py:293 ../../gnome/logviewdialog.glade:73 -#: ../../gnome/settingsdialog.glade:72 -msgid "Profile:" -msgstr "Umhvarv:" +#: ../../qt4/qt4tools.py:183 +msgid "Yesterday" +msgstr "Í gjár" -#: ../../kde4/logviewdialog.py:77 ../../gnome/logviewdialog.glade:110 -msgid "Filter:" -msgstr "Filtur:" +#: ../../qt4/qt4tools.py:188 +msgid "This week" +msgstr "Henda vikan" -#: ../../kde4/logviewdialog.py:100 ../../gnome/logviewdialog.glade:169 -msgid "[E] Error, [I] Information, [C] Change" -msgstr "" +#: ../../qt4/qt4tools.py:193 +msgid "Last week" +msgstr "Fyrra vikan" -#: ../../kde4/logviewdialog.py:103 ../../gnome/logviewdialog.glade:195 -msgid "decode paths" +#: ../../qt4/restoredialog.py:75 +msgid "Show full Log" msgstr "" -#: ../../kde4/settingsdialog.py:88 +#: ../../qt4/settingsdialog.py:68 msgid "Edit" msgstr "Ritstjórna" -#: ../../kde4/settingsdialog.py:106 ../../gnome/settingsdialog.glade:1207 +#: ../../qt4/settingsdialog.py:73 +msgid "Modify for Full System Backup" +msgstr "" + +#: ../../qt4/settingsdialog.py:77 ../../qt4/settingsdialog.py:451 +msgid "Add" +msgstr "" + +#: ../../qt4/settingsdialog.py:81 ../../qt4/settingsdialog.py:408 +#: ../../qt4/settingsdialog.py:467 +msgid "Remove" +msgstr "" + +#: ../../qt4/settingsdialog.py:96 msgid "General" msgstr "Alment" -#: ../../kde4/settingsdialog.py:114 ../../gnome/settingsdialog.glade:199 +#: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "" -#: ../../kde4/settingsdialog.py:127 ../../kde4/settingsdialog.py:1311 +#: ../../qt4/settingsdialog.py:119 +#, python-format +msgid "" +"Warning: %(app)s uses EncFS for encryption. A recent security audit " +"revealed several possible attack vectors for this. Please take a look at 'A " +"NOTE ON SECURITY' in 'man backintime'." +msgstr "" + +#: ../../qt4/settingsdialog.py:129 ../../qt4/settingsdialog.py:1568 msgid "Where to save snapshots" msgstr "Hvar skullu støðumyndirnar goymast" -#: ../../kde4/settingsdialog.py:146 +#: ../../qt4/settingsdialog.py:145 +msgid "Folder" +msgstr "" + +#: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" -#: ../../kde4/settingsdialog.py:158 ../../kde4/settingsdialog.py:283 -#: ../../gnome/settingsdialog.glade:323 ../../gnome/settingsdialog.glade:583 -#: ../../gnome/settingsdialog.glade:874 +#: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "Vertur:" -#: ../../kde4/settingsdialog.py:163 ../../gnome/settingsdialog.glade:350 -#: ../../gnome/settingsdialog.glade:610 +#: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "" -#: ../../kde4/settingsdialog.py:168 ../../kde4/settingsdialog.py:288 -#: ../../gnome/settingsdialog.glade:377 ../../gnome/settingsdialog.glade:637 -#: ../../gnome/settingsdialog.glade:902 +#: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "Brúkari:" -#: ../../kde4/settingsdialog.py:173 ../../gnome/settingsdialog.glade:416 +#: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" -#: ../../kde4/settingsdialog.py:178 ../../gnome/settingsdialog.glade:459 +#: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" -#: ../../kde4/settingsdialog.py:184 +#: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "" -#: ../../kde4/settingsdialog.py:228 ../../kde4/settingsdialog.py:237 -#: ../../kde4/settingsdialog.py:243 ../../gnome/settingsdialog.glade:703 -#: ../../gnome/settingsdialog.glade:743 +#: ../../qt4/settingsdialog.py:201 +msgid "Key File" +msgstr "" + +#: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 +#: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "" -#: ../../kde4/settingsdialog.py:249 ../../gnome/settingsdialog.glade:775 +#: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" -#: ../../kde4/settingsdialog.py:252 ../../gnome/settingsdialog.glade:792 +#: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" -#: ../../kde4/settingsdialog.py:264 ../../gnome/settingsdialog.glade:968 +#: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "Framkomið" -#: ../../kde4/settingsdialog.py:276 ../../gnome/settingsdialog.glade:848 -msgid "Auto Host / User / Profile Id" +#: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 +msgid "Full snapshot path: " msgstr "" -#: ../../kde4/settingsdialog.py:301 +#: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "Skrá" -#: ../../kde4/settingsdialog.py:311 ../../gnome/settingsdialog.glade:1092 +#: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "" -#: ../../kde4/settingsdialog.py:322 ../../gnome/settingsdialog.glade:1079 +#: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "" -#: ../../kde4/settingsdialog.py:333 ../../gnome/settingsdialog.glade:1066 +#: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "Tími:" -#: ../../kde4/settingsdialog.py:344 ../../gnome/settingsdialog.glade:1053 +#: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "" -#: ../../kde4/settingsdialog.py:353 ../../gnome/settingsdialog.glade:1014 +#: ../../qt4/settingsdialog.py:339 msgid "" -"Run Back In Time periodically with anacron. This is useful if the computer " -"is not running regular." +"Run Back In Time repeatedly. This is useful if the computer is not running " +"regular." msgstr "" -#: ../../kde4/settingsdialog.py:357 ../../gnome/settingsdialog.glade:1040 -msgid "Frequency in days:" +#: ../../qt4/settingsdialog.py:344 +msgid "Every:" msgstr "" -#: ../../kde4/settingsdialog.py:368 ../../gnome/settingsdialog.glade:1026 +#: ../../qt4/settingsdialog.py:362 msgid "" "Run Back In Time as soon as the drive is connected (only once every X " "days).\n" "You will be prompted for your sudo password." msgstr "" -#: ../../kde4/settingsdialog.py:379 ../../gnome/settingsdialog.glade:1310 +#: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Tak við" -#: ../../kde4/settingsdialog.py:403 ../../kde4/settingsdialog.py:445 -#: ../../gnome/settingsdialog.glade:1411 +#: ../../qt4/settingsdialog.py:381 +msgid "Include files and folders" +msgstr "" + +#: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "Legg fílu til" -#: ../../kde4/settingsdialog.py:408 ../../kde4/settingsdialog.py:450 -#: ../../gnome/settingsdialog.glade:1427 +#: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Legg skjáttu til" -#: ../../kde4/settingsdialog.py:418 ../../gnome/settingsdialog.glade:1474 +#: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Útiloka" -#: ../../kde4/settingsdialog.py:421 ../../gnome/settingsdialog.glade:1328 +#: ../../qt4/settingsdialog.py:417 msgid "" "Warning: Wildcards ('foo*', '[fF]oo', 'fo?') will be ignored with " "mode 'SSH encrypted'.\n" "Only separate asterisk are allowed ('foo/*', 'foo/**/bar')" msgstr "" -#: ../../kde4/settingsdialog.py:430 +#: ../../qt4/settingsdialog.py:425 +msgid "Exclude patterns, files or folders" +msgstr "" + +#: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "" -#: ../../kde4/settingsdialog.py:460 ../../gnome/settingsdialog.glade:1905 +#: ../../qt4/settingsdialog.py:463 +msgid "Add default" +msgstr "" + +#: ../../qt4/settingsdialog.py:474 +msgid "Exclude files bigger than: " +msgstr "" + +#: ../../qt4/settingsdialog.py:475 +#, python-format +msgid "" +"Exclude files bigger than value in %(prefix)s.\n" +"With 'Full rsync mode' disabled this will only affect new files\n" +"because for rsync this is a transfer option, not an exclude option.\n" +"So big files that has been backed up before will remain in snapshots\n" +"even if they had changed." +msgstr "" + +#: ../../qt4/settingsdialog.py:493 msgid "Auto-remove" msgstr "" -#: ../../kde4/settingsdialog.py:464 ../../gnome/settingsdialog.glade:1608 +#: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "Eldri enn:" -#: ../../kde4/settingsdialog.py:478 ../../gnome/settingsdialog.glade:1624 +#: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "Um tað tøka plássið er minni enn:" -#: ../../kde4/settingsdialog.py:490 ../../gnome/settingsdialog.glade:1642 +#: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" -#: ../../kde4/settingsdialog.py:514 ../../gnome/settingsdialog.glade:1697 +#: ../../qt4/settingsdialog.py:551 +msgid "Run in background on remote Host." +msgstr "" + +#: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "" -#: ../../kde4/settingsdialog.py:517 ../../kde4/settingsdialog.py:522 -#: ../../gnome/settingsdialog.glade:1705 ../../gnome/settingsdialog.glade:1729 +#: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "" -#: ../../kde4/settingsdialog.py:519 ../../gnome/settingsdialog.glade:1717 +#: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "" -#: ../../kde4/settingsdialog.py:524 ../../gnome/settingsdialog.glade:1743 +#: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "" -#: ../../kde4/settingsdialog.py:527 +#: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "" -#: ../../kde4/settingsdialog.py:529 ../../gnome/settingsdialog.glade:1769 +#: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "" -#: ../../kde4/settingsdialog.py:532 ../../gnome/settingsdialog.glade:1781 +#: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "" -#: ../../kde4/settingsdialog.py:534 ../../gnome/settingsdialog.glade:1795 +#: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "" -#: ../../kde4/settingsdialog.py:537 ../../gnome/settingsdialog.glade:1496 +#: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "" -#: ../../kde4/settingsdialog.py:546 ../../gnome/settingsdialog.glade:2104 +#: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Kostir" -#: ../../kde4/settingsdialog.py:549 ../../gnome/settingsdialog.glade:1920 +#: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Virkja kunningar" -#: ../../kde4/settingsdialog.py:552 ../../gnome/settingsdialog.glade:1937 +#: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "" -#: ../../kde4/settingsdialog.py:555 +#: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" msgstr "" -#: ../../kde4/settingsdialog.py:558 ../../gnome/settingsdialog.glade:1955 -msgid "Backup files on restore" +#: ../../qt4/settingsdialog.py:611 +msgid "Run only one snapshot at a time" +msgstr "" + +#: ../../qt4/settingsdialog.py:612 +msgid "" +"Other snapshots will be blocked until the current snapshot is done.\n" +"This is a global option. So it will effect all profiles for this user.\n" +"But you need to activate this for all other users, too." +msgstr "" + +#: ../../qt4/settingsdialog.py:617 +msgid "Backup replaced files on restore" msgstr "" -#: ../../kde4/settingsdialog.py:561 ../../gnome/settingsdialog.glade:1972 +#: ../../qt4/settingsdialog.py:618 +#, python-format +msgid "" +"Newer versions of files will be renamed with trailing '%(suffix)s' before " +"restoring.\n" +"If you don't need them anymore you can remove them with '%(cmd)s'" +msgstr "" + +#: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "" -#: ../../kde4/settingsdialog.py:564 ../../gnome/settingsdialog.glade:1989 +#: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "" -#: ../../kde4/settingsdialog.py:567 ../../gnome/settingsdialog.glade:2006 +#: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "" -#: ../../kde4/settingsdialog.py:568 ../../gnome/settingsdialog.glade:2032 +#: ../../qt4/settingsdialog.py:634 msgid "" -"- snapshots are no read-only\n" -"- destination file-system must support all linux attributes (dates, rights, " +"- snapshots are not read-only\n" +"- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" -#: ../../kde4/settingsdialog.py:575 ../../gnome/settingsdialog.glade:2045 +#: ../../qt4/settingsdialog.py:641 +msgid "Take a new snapshot regardless of there were changes or not." +msgstr "" + +#: ../../qt4/settingsdialog.py:644 msgid "Check for changes (don't take a new snapshot if nothing changed)" msgstr "" -#: ../../kde4/settingsdialog.py:582 +#: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "" -#: ../../kde4/settingsdialog.py:597 ../../gnome/settingsdialog.glade:2366 -msgid "Expert Options" -msgstr "Framkomnir kostir" +#: ../../qt4/settingsdialog.py:656 +msgid "None" +msgstr "Einki" -#: ../../kde4/settingsdialog.py:600 +#: ../../qt4/settingsdialog.py:658 +msgid "Changes & Errors" +msgstr "Broytingar & brek" + +#: ../../qt4/settingsdialog.py:674 msgid "Change these options only if you really know what you are doing !" msgstr "" -#: ../../kde4/settingsdialog.py:608 ../../gnome/settingsdialog.glade:2133 -msgid "Run 'nice' as cron job (default: enabled)" -msgstr "Koyr 'nice' sum eitt cron-verk (forsett: virkjað)" +#: ../../qt4/settingsdialog.py:678 +msgid "Run 'nice':" +msgstr "" + +#: ../../qt4/settingsdialog.py:684 ../../qt4/settingsdialog.py:696 +msgid "as cron job" +msgstr "" + +#: ../../qt4/settingsdialog.py:687 ../../qt4/settingsdialog.py:702 +#: ../../qt4/settingsdialog.py:716 +msgid "on remote host" +msgstr "" + +#: ../../qt4/settingsdialog.py:690 +msgid "Run 'ionice':" +msgstr "" + +#: ../../qt4/settingsdialog.py:699 +msgid "when taking a manual snapshot" +msgstr "" -#: ../../kde4/settingsdialog.py:611 ../../gnome/settingsdialog.glade:2150 -msgid "Run 'ionice' as cron job (default: enabled)" -msgstr "Koyr 'nice' sum eitt cron-verk (forsett: virkjað)" +#: ../../qt4/settingsdialog.py:706 +msgid "Run 'rsync' with 'nocache':" +msgstr "" -#: ../../kde4/settingsdialog.py:614 ../../gnome/settingsdialog.glade:2167 -msgid "Run 'ionice' when taking a manual snapshot (default: disabled)" +#: ../../qt4/settingsdialog.py:712 +msgid "on local machine" msgstr "" -#: ../../kde4/settingsdialog.py:617 ../../gnome/settingsdialog.glade:2184 -msgid "Run 'nice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:719 +msgid "Redirect stdout to /dev/null in cronjobs." msgstr "" -#: ../../kde4/settingsdialog.py:620 ../../gnome/settingsdialog.glade:2201 -msgid "Run 'ionice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:725 +msgid "Redirect stderr to /dev/null in cronjobs." msgstr "" -#: ../../kde4/settingsdialog.py:626 ../../gnome/settingsdialog.glade:2224 +#: ../../qt4/settingsdialog.py:734 msgid "Limit rsync bandwidth usage: " msgstr "" -#: ../../kde4/settingsdialog.py:629 ../../gnome/settingsdialog.glade:2259 +#: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" -#: ../../kde4/settingsdialog.py:634 ../../gnome/settingsdialog.glade:2280 +#: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "" -#: ../../kde4/settingsdialog.py:637 ../../gnome/settingsdialog.glade:2297 +#: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "" -#: ../../kde4/settingsdialog.py:640 ../../gnome/settingsdialog.glade:2314 +#: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute links)" msgstr "" -#: ../../kde4/settingsdialog.py:643 ../../gnome/settingsdialog.glade:2331 -msgid "Copy links (dereference symbolic links)" +#: ../../qt4/settingsdialog.py:834 +msgid "Paste additional options to rsync" msgstr "" -#: ../../kde4/snapshotsdialog.py:46 ../../kde4/snapshotsdialog.py:173 -#: ../../gnome/snapshotsdialog.glade:385 -msgid "Diff Options" +#: ../../qt4/settingsdialog.py:837 +msgid "" +"Options must be quoted e.g. --exclude-from=\"/path/to/my exclude file\"." msgstr "" -#: ../../kde4/snapshotsdialog.py:56 ../../gnome/snapshotsdialog.glade:314 -msgid "Command:" -msgstr "Stýriboð:" +#: ../../qt4/settingsdialog.py:847 +msgid "Add prefix to SSH commands" +msgstr "" -#: ../../kde4/snapshotsdialog.py:60 ../../gnome/snapshotsdialog.glade:322 -msgid "Parameters:" +#: ../../qt4/settingsdialog.py:850 +#, python-format +msgid "" +"Prefix to run before every command on remote host.\n" +"Variables need to be escaped with \\$FOO.\n" +"This doesn't touch rsync. So to add a prefix\n" +"for rsync use \"%(cb_rsync_options)s\" with\n" +"%(rsync_options_value)s\n" +"\n" +"%(default)s: %(def_value)s" msgstr "" -#: ../../kde4/snapshotsdialog.py:64 ../../gnome/snapshotsdialog.glade:334 -msgid "Use %1 and %2 for path parameters" +#: ../../qt4/settingsdialog.py:858 ../../qt4/settingsdialog.py:1691 +msgid "default" msgstr "" -#: ../../kde4/snapshotsdialog.py:123 ../../gnome/snapshotsdialog.glade:184 -#: ../../gnome/snapshotsdialog.glade:186 -msgid "Delete" +#: ../../qt4/settingsdialog.py:875 +msgid "Restore Config" msgstr "" -#: ../../kde4/snapshotsdialog.py:128 ../../gnome/snapshotsdialog.glade:199 -#: ../../gnome/snapshotsdialog.glade:201 -msgid "Select All" +#: ../../qt4/settingsdialog.py:891 +msgid "" +"Full system backup can only create a snapshot to be restored to the same " +"physical disk(s) with the same disk partitioning as from the source; " +"restoring to new physical disks or the same disks with different " +"partitioning will yield a potentially broken and unusable system.\n" +"\n" +"Full system backup will override some settings that may have been " +"customized. Continue?" msgstr "" -#: ../../kde4/snapshotsdialog.py:132 ../../gnome/snapshotsdialog.glade:88 -msgid "List only different snapshots" +#: ../../qt4/settingsdialog.py:922 +msgid "New profile" +msgstr "Nýtt umhvarv" + +#: ../../qt4/settingsdialog.py:938 +msgid "Rename profile" +msgstr "Nýnevn umhvarv" + +#: ../../qt4/settingsdialog.py:952 +#, python-format +msgid "Are you sure you want to delete the profile \"%s\" ?" +msgstr "Er tú viss/ur í at strika umhvarvið \"%s\" ?" + +#: ../../qt4/settingsdialog.py:1191 +msgid "" +"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " +"*/3 for periodic backups every 3 hours" msgstr "" -#: ../../kde4/snapshotsdialog.py:139 ../../gnome/snapshotsdialog.glade:110 -msgid "List only equal snapshots to: " +#: ../../qt4/settingsdialog.py:1489 +msgid "Exclude pattern" msgstr "" -#: ../../kde4/snapshotsdialog.py:149 ../../gnome/snapshotsdialog.glade:146 -msgid "Deep check (more accurate, but slow)" +#: ../../qt4/settingsdialog.py:1502 +msgid "Exclude file" msgstr "" -#: ../../kde4/snapshotsdialog.py:174 -msgid "Go To" -msgstr "Far til" +#: ../../qt4/settingsdialog.py:1506 +msgid "Exclude folder" +msgstr "" -#: ../../gnome/logviewdialog.glade:9 -msgid "Log View" +#: ../../qt4/settingsdialog.py:1525 +msgid "Include file" +msgstr "Tak fílu við" + +#: ../../qt4/settingsdialog.py:1533 ../../qt4/settingsdialog.py:1553 +#, python-format +msgid "" +"\"%s\" is a symlink. The linked target will not be backed up until you " +"include it, too.\n" +"Would you like to include the symlinks target instead?" msgstr "" -#: ../../gnome/logviewdialog.glade:179 -msgid "scroll down automatic" +#: ../../qt4/settingsdialog.py:1545 +msgid "Include folder" +msgstr "Tak skjáttur við" + +#: ../../qt4/settingsdialog.py:1572 +msgid "Are you sure you want to change snapshots folder ?" +msgstr "Er tú viss/ur í at broyta støðumyndaskjáttu ?" + +#: ../../qt4/settingsdialog.py:1688 +msgid "enabled" msgstr "" -#: ../../gnome/mainwindow.glade:7 -msgid "Back In Time" +#: ../../qt4/settingsdialog.py:1690 +msgid "disabled" msgstr "" -#: ../../gnome/mainwindow.glade:45 -msgid "Backup Now" -msgstr "Trygdarrita nú" +#: ../../qt4/settingsdialog.py:1715 +msgid "Restore Settings" +msgstr "" -#: ../../gnome/mainwindow.glade:171 -msgid "Shutdown" +#: ../../qt4/settingsdialog.py:1732 +msgid " and add your user to group 'fuse'" msgstr "" -#: ../../gnome/mainwindow.glade:287 -msgid "Parent folder" +#: ../../qt4/settingsdialog.py:1736 +#, python-format +msgid "" +"Please navigate to the snapshot from which you want to restore %(appName)s's " +"configuration. The path may look like: \n" +"%(samplePath)s\n" +"\n" +"If your snapshots are on a remote drive or if they are encrypted you need to " +"manually mount them first. If you use Mode SSH you also may need to set up " +"public key login to the remote host%(addFuse)s.\n" +"Take a look at 'man backintime'." msgstr "" -#: ../../gnome/mainwindow.glade:327 -msgid "Hidden files" -msgstr "Fjaldar fílur" +#: ../../qt4/settingsdialog.py:1794 ../../qt4/settingsdialog.py:1854 +msgid "No config found" +msgstr "" -#: ../../gnome/mainwindow.glade:451 -msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +#: ../../qt4/snapshotsdialog.py:49 ../../qt4/snapshotsdialog.py:173 +msgid "Diff Options" msgstr "" -#: ../../gnome/settingsdialog.glade:287 -msgid "Where to save snapshots" -msgstr "Hvar skal støðumyndin goymast" +#: ../../qt4/snapshotsdialog.py:56 +msgid "Command:" +msgstr "Stýriboð:" -#: ../../gnome/settingsdialog.glade:483 -msgid "Private key:" +#: ../../qt4/snapshotsdialog.py:60 +msgid "Parameters:" msgstr "" -#: ../../gnome/settingsdialog.glade:534 -msgid "Advanced SSH Settings" +#: ../../qt4/snapshotsdialog.py:64 +msgid "Use %1 and %2 for path parameters" msgstr "" -#: ../../gnome/settingsdialog.glade:552 -msgid "SSH Settings" +#: ../../qt4/snapshotsdialog.py:106 +msgid "List only different snapshots" msgstr "" -#: ../../gnome/settingsdialog.glade:815 -msgid "Password" +#: ../../qt4/snapshotsdialog.py:113 +msgid "List only equal snapshots to: " msgstr "" -#: ../../gnome/settingsdialog.glade:930 -msgid "Profile Id:" +#: ../../qt4/snapshotsdialog.py:123 +msgid "Deep check (more accurate, but slow)" msgstr "" -#: ../../gnome/settingsdialog.glade:1115 -msgid "" -"hours seperate by comma ( e.g. 8,12,18,23) or */3 for periodic backups every " -"3 hours (cron style)" +#: ../../qt4/snapshotsdialog.py:144 +msgid "Delete" msgstr "" -#: ../../gnome/settingsdialog.glade:1163 -msgid "Schedule" +#: ../../qt4/snapshotsdialog.py:148 +msgid "Select All" msgstr "" -#: ../../gnome/settingsdialog.glade:1363 -msgid "Highly recommended:" +#: ../../qt4/snapshotsdialog.py:161 +msgid "Diff" msgstr "" -#: ../../gnome/settingsdialog.glade:1377 -msgid "label" -msgstr "spjaldur" +#: ../../qt4/snapshotsdialog.py:172 +msgid "Go To" +msgstr "Far til" -#: ../../gnome/settingsdialog.glade:1755 -msgid "week(s)" -msgstr "" +#: ../../qt4/snapshotsdialog.py:326 +msgid "You can't compare a snapshot to itself" +msgstr "Tú kannst ikki samanbera eina støðumynd við sær sjálvari" -#: ../../gnome/settingsdialog.glade:2069 -msgid "Log level:" -msgstr "" +#: ../../qt4/snapshotsdialog.py:333 +#, python-format +msgid "Command not found: %s" +msgstr "Stýriboð ikki funni: %s" -#: ../../gnome/settingsdialog.glade:2121 +#: ../../qt4/snapshotsdialog.py:354 +#, python-format msgid "" -"Change these options only if you really know what you are doing !" +"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" msgstr "" -#: ../../gnome/snapshotsdialog.glade:263 -msgid "Diff with" +#: ../../qt4/snapshotsdialog.py:357 +#, python-format +msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" msgstr "" -#: ../../gnome/textinputdialog.glade:7 -msgid "Pattern" -msgstr "Mynstur" +#: ../../qt4/snapshotsdialog.py:359 +msgid "WARNING: This can not be revoked!" +msgstr "" -#: ../../gnome/textinputdialog.glade:70 -msgid "Text" +#: ../../qt4/snapshotsdialog.py:374 +#, python-format +msgid "Exclude \"%s\" from future snapshots?" msgstr "" diff -Nru backintime-1.0.36/common/po/fr.po backintime-1.1.12/common/po/fr.po --- backintime-1.0.36/common/po/fr.po 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/po/fr.po 2016-01-11 18:07:58.000000000 +0000 @@ -7,207 +7,239 @@ msgstr "" "Project-Id-Version: Back In Time 0.8.8\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-11-09 22:34+0100\n" -"PO-Revision-Date: 2014-05-28 14:23+0000\n" -"Last-Translator: dYp \n" +"POT-Creation-Date: 2015-12-19 00:47+0100\n" +"PO-Revision-Date: 2015-11-19 23:25+0000\n" +"Last-Translator: Germar \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Launchpad-Export-Date: 2014-08-06 10:19+0000\n" -"X-Generator: Launchpad (build 17147)\n" +"X-Launchpad-Export-Date: 2016-01-11 17:52+0000\n" +"X-Generator: Launchpad (build 17881)\n" -#: ../../common/config.py:72 +#: ../../common/configfile.py:60 +#, python-format +msgid "Failed to save config: %s" +msgstr "" + +#: ../../common/configfile.py:78 +#, python-format +msgid "Failed to load config: %s" +msgstr "" + +#: ../../common/configfile.py:352 ../../common/configfile.py:414 +#, python-format +msgid "Profile \"%s\" already exists !" +msgstr "Le profil \"%s\" existe déjà !" + +#: ../../common/configfile.py:383 +msgid "You can't remove the last profile !" +msgstr "Vous ne pouvez pas supprimer le dernier profil !" + +#: ../../common/config.py:76 msgid "Disabled" msgstr "Désactivée" -#: ../../common/config.py:73 +#: ../../common/config.py:77 msgid "At every boot/reboot" msgstr "À chaque démarrage/re-démarrage" -#: ../../common/config.py:74 +#: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Toutes les 5 minutes" -#: ../../common/config.py:75 +#: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Toutes les 10 minutes" -#: ../../common/config.py:76 +#: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "Toutes les 30 minutes" -#: ../../common/config.py:77 +#: ../../common/config.py:81 msgid "Every hour" msgstr "Toutes les heures" -#: ../../common/config.py:78 +#: ../../common/config.py:82 msgid "Every 2 hours" msgstr "Toutes les 2 heures" -#: ../../common/config.py:79 +#: ../../common/config.py:83 msgid "Every 4 hours" msgstr "Toutes les 4 heures" -#: ../../common/config.py:80 +#: ../../common/config.py:84 msgid "Every 6 hours" msgstr "Toutes les 6 heures" -#: ../../common/config.py:81 +#: ../../common/config.py:85 msgid "Every 12 hours" msgstr "Toutes les 12 heures" -#: ../../common/config.py:82 +#: ../../common/config.py:86 msgid "Custom Hours" msgstr "Heures personnalisés" -#: ../../common/config.py:83 +#: ../../common/config.py:87 msgid "Every Day" msgstr "Quotidiennement" -#: ../../common/config.py:84 -msgid "Daily (anacron)" -msgstr "Quotidienement (anacron)" +#: ../../common/config.py:88 +msgid "Repeatedly (anacron)" +msgstr "A plusieurs reprises (anacron)" -#: ../../common/config.py:85 +#: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "Quand le lecteur est connecté (udev)" -#: ../../common/config.py:86 +#: ../../common/config.py:90 msgid "Every Week" msgstr "Chaque semaine" -#: ../../common/config.py:87 +#: ../../common/config.py:91 msgid "Every Month" msgstr "Chaque mois" -#: ../../common/config.py:91 +#: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Jour(s)" -#: ../../common/config.py:92 +#: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Semaine(s)" -#: ../../common/config.py:93 +#: ../../common/config.py:97 msgid "Year(s)" msgstr "Année(s)" -#: ../../common/config.py:100 +#: ../../common/config.py:101 +msgid "Hour(s)" +msgstr "Heure(s)" + +#: ../../common/config.py:104 +msgid "Month(s)" +msgstr "Mois" + +#: ../../common/config.py:126 ../../qt4/settingsdialog.py:551 msgid " EXPERIMENTAL!" msgstr " EXPERIMENTAL !" -#: ../../common/config.py:103 +#: ../../common/config.py:129 msgid "Local" msgstr "Locale" -#: ../../common/config.py:104 +#: ../../common/config.py:130 msgid "SSH" msgstr "SSH" -#: ../../common/config.py:104 ../../common/config.py:106 -#: ../../gnome/settingsdialog.py:475 ../../kde4/settingsdialog.py:1325 +#: ../../common/config.py:130 ../../common/config.py:132 +#: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "Clé privée SSH" -#: ../../common/config.py:105 +#: ../../common/config.py:131 msgid "Local encrypted" -msgstr "Crypté localement" +msgstr "Chiffré localement" -#: ../../common/config.py:105 ../../common/config.py:106 +#: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "Chiffrement" -#: ../../common/config.py:106 +#: ../../common/config.py:132 msgid "SSH encrypted" -msgstr "SSH crypté" +msgstr "SSH chiffré" -#: ../../common/config.py:112 +#: ../../common/config.py:135 msgid "Default" msgstr "Par Défaut" -#: ../../common/config.py:113 +#: ../../common/config.py:136 msgid "AES128-CTR" msgstr "AES128-CTR" -#: ../../common/config.py:114 +#: ../../common/config.py:137 msgid "AES192-CTR" msgstr "AES192-CTR" -#: ../../common/config.py:115 +#: ../../common/config.py:138 msgid "AES256-CTR" msgstr "AES256-CTR" -#: ../../common/config.py:116 +#: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "ARCFOUR256" -#: ../../common/config.py:117 +#: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "ARCFOUR128" -#: ../../common/config.py:118 +#: ../../common/config.py:141 msgid "AES128-CBC" msgstr "AES128-CBC" -#: ../../common/config.py:119 +#: ../../common/config.py:142 msgid "3DES-CBC" msgstr "3DES-CBC" -#: ../../common/config.py:120 +#: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "Blowfish-CBC" -#: ../../common/config.py:121 +#: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "Cast128-CBC" -#: ../../common/config.py:122 +#: ../../common/config.py:145 msgid "AES192-CBC" msgstr "AES192-CBC" -#: ../../common/config.py:123 +#: ../../common/config.py:146 msgid "AES256-CBC" msgstr "AES256-CBC" -#: ../../common/config.py:124 +#: ../../common/config.py:147 msgid "ARCFOUR" msgstr "ARCFOUR" -#: ../../common/config.py:129 +#: ../../common/config.py:153 msgid "Main profile" msgstr "Profil principal" -#: ../../common/config.py:256 ../../common/config.py:275 -#: ../../common/config.py:286 ../../common/config.py:291 +#: ../../common/config.py:289 ../../common/config.py:296 +#: ../../common/config.py:307 ../../common/config.py:312 +#: ../../qt4/qt4systrayicon.py:61 #, python-format msgid "Profile: \"%s\"" msgstr "Profil : «%s»" -#: ../../common/config.py:256 +#: ../../common/config.py:289 msgid "Snapshots folder is not valid !" msgstr "Le dossier des sauvegardes n'est pas valide !" -#: ../../common/config.py:275 +#: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "Vous devez sélectionner au moins un dossier à sauvegarder !" -#: ../../common/config.py:286 +#: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "Vous ne pouvez pas inclure le dossier des sauvegardes !" -#: ../../common/config.py:291 +#: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "" "Vous ne pouvez pas inclure un sous-dossier du dossier des sauvegardes !" -#: ../../common/config.py:361 +#: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s n'est pas un dossier !" -#: ../../common/config.py:376 ../../common/config.py:389 +#: ../../common/config.py:380 +msgid "Host/User/Profile-ID must not be empty!" +msgstr "Hôte/Utilisateur/Profile-ID ne doit pas être vide !" + +#: ../../common/config.py:388 ../../common/config.py:420 #, python-format msgid "" "Can't write to: %s\n" @@ -216,7 +248,37 @@ "Impossible d'écrire dans : %s\n" "Êtes-vous sûr d'avoir les droits en écriture ?" -#: ../../common/config.py:1286 +#: ../../common/config.py:400 +#, python-format +msgid "" +"Destination filesystem for '%(path)s' is formatted with FAT which doesn't " +"support hard-links. Please use a native Linux filesystem." +msgstr "" + +#: ../../common/config.py:405 +#, python-format +msgid "" +"Destination filsystem for '%(path)s' is a SMB mounted share. Please make " +"sure the remote SMB server supports symlinks or activate '%(copyLinks)s' in " +"'%(expertOptions)s'." +msgstr "" + +#: ../../common/config.py:408 ../../qt4/settingsdialog.py:815 +msgid "Copy links (dereference symbolic links)" +msgstr "Copier les liens (supprime les liens symboliques)" + +#: ../../common/config.py:409 ../../qt4/settingsdialog.py:669 +msgid "Expert Options" +msgstr "Avancé" + +#: ../../common/config.py:411 +#, python-format +msgid "" +"Destination filesystem for '%(path)s is a sshfs mounted share. sshfs doesn't " +"support hard-links. Please use mode 'SSH' instead." +msgstr "" + +#: ../../common/config.py:1407 msgid "" "Can't find crontab.\n" "Are you sure cron is installed ?\n" @@ -226,52 +288,30 @@ "Êtes-vous sûr que cron est installé ?\n" "Si ce n'est pas le cas vous devriez désactiver les sauvegardes automatiques." -#: ../../common/config.py:1338 -#, python-format -msgid "Schedule udev doesn't work with mode %s" -msgstr "Le programme udev ne fonctionne pas avec le mode %s" +#: ../../common/config.py:1411 +msgid "Failed to write new crontab." +msgstr "Echec d'écriture de la nouvelle crontab" -#: ../../common/config.py:1342 +#: ../../common/config.py:1505 #, python-format -msgid "Couldn't find UUID for \"%s\"" -msgstr "Impossible de trouver l'UUID pour %s" - -#: ../../common/config.py:1379 -msgid "Failed to remove udev rules" -msgstr "Échec de la suppression des règles udev" - -#: ../../common/config.py:1385 -msgid "Failed to create udev rules" -msgstr "Échec de la création des règles udev" - -#: ../../common/config.py:1420 msgid "" -"Can't find anacron.\n" -"Are you sure anacron is installed ?\n" -"If not you should disable daily anacron backups." +"Could not install Udev rule for profile %(profile_id)s. DBus Service " +"'%(dbus_interface)s' wasn't available" msgstr "" -"anacron introuvable\n" -"anacron est-il bien installé ?\n" -"Si non, vous devez désactiver les sauvegardes quotidiennes anacron." +"Echec d'installation de la règle Udev pour le profil %(profile_id)s. DBus " +"Service '%(dbus_interface)s' n'était pas disponible." -#: ../../common/config.py:1439 -msgid "Please provide your sudo password to install the udev rule." -msgstr "Entrez le mot de passe sudo pour installer les règles udev." - -#: ../../common/config.py:1445 -msgid "Please provide your sudo password to remove unused udev rules." -msgstr "Entrez le mot de passe sudo pour désinstaller les règles udev." - -#: ../../common/configfile.py:253 ../../common/configfile.py:315 +#: ../../common/config.py:1517 #, python-format -msgid "Profile \"%s\" already exists !" -msgstr "Le profil \"%s\" existe déjà !" +msgid "Schedule udev doesn't work with mode %s" +msgstr "Le programme udev ne fonctionne pas avec le mode %s" -#: ../../common/configfile.py:284 -msgid "You can't remove the last profile !" -msgstr "Vous ne pouvez pas supprimer le dernier profil !" +#: ../../common/config.py:1526 +#, python-format +msgid "Couldn't find UUID for \"%s\"" +msgstr "Impossible de trouver l'UUID pour %s" -#: ../../common/encfstools.py:95 +#: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" @@ -282,41 +322,41 @@ "\n" "%(error)s" -#: ../../common/encfstools.py:105 +#: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "Impossible de démonter encfs %s" -#: ../../common/encfstools.py:149 +#: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." -msgstr "Config pour dossier crypté introuvable." +msgstr "Config pour dossier chiffré introuvable." -#: ../../common/encfstools.py:153 +#: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" "\n" -"Créer un nouveau dossier crypté ?" +"Créer un nouveau dossier chiffré ?" -#: ../../common/encfstools.py:154 +#: ../../common/encfstools.py:171 msgid "Cancel" msgstr "Annuler" -#: ../../common/encfstools.py:157 +#: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "Veuillez confirmer votre mot de passe" -#: ../../common/encfstools.py:161 +#: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "Le mot de passe ne correspond pas" -#: ../../common/encfstools.py:166 +#: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" "encfs introuvable. Veuillez l'installer par exemple 'apt-get install encfs'" -#: ../../common/encfstools.py:174 ../../common/sshtools.py:207 +#: ../../common/encfstools.py:196 ../../common/sshtools.py:262 #, python-format msgid "" "%(user)s is not member of group 'fuse'.\n" @@ -328,7 +368,7 @@ "déconnectez-vous et reconnectez-vous.\n" "Consultez 'man backintime' pour de plus amples instructions." -#: ../../common/encfstools.py:189 +#: ../../common/encfstools.py:211 msgid "" "encfs version 1.7.2 and before has a bug with option --reverse. Please " "update encfs" @@ -336,13 +376,12 @@ "La version 1.7.2 et précédentes de encfs , ont un bug avec l'option --" "reverse. Veuillez mettre à jour encfs" -#: ../../common/encfstools.py:453 ../../common/encfstools.py:480 -#: ../../common/snapshots.py:982 ../../common/snapshots.py:1288 -#: ../../kde4/app.py:82 ../../gnome/mainwindow.glade:43 +#: ../../common/encfstools.py:512 ../../common/snapshots.py:1131 +#: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "Sauvegarder" -#: ../../common/mount.py:195 +#: ../../common/mount.py:204 #, python-format msgid "" "Hash collision occurred in hash_id %s. Incrementing global value " @@ -351,30 +390,29 @@ "Une collision de hash s'est produite dans hash_id %s. Incrémentez la valeur " "globale hash_collision et réessayez." -#: ../../common/mount.py:246 +#: ../../common/mount.py:259 #, python-format msgid "mountpoint %s not empty." msgstr "le point de montage %s n'est pas vide." -#: ../../common/mount.py:286 +#: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "Délai de montage dépassé" -#: ../../common/password.py:425 +#: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "Profil '%(profile)s' : Entrez le mot de passe pour %(mode)s : " -#: ../../common/snapshots.py:171 ../../gnome/app.py:1127 -#: ../../kde4/app.py:1014 +#: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Maintenant" -#: ../../common/snapshots.py:182 ../../gnome/gnometools.py:37 +#: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "AVEC DES ERREURS !" -#: ../../common/snapshots.py:282 +#: ../../common/snapshots.py:344 msgid "" "### This log has been decoded with automatic search pattern\n" "### If some paths are not decoded you can manually decode them with:\n" @@ -383,15 +421,20 @@ "### Si certains chemins ne sont pas décodés vous pouvez les décoder " "manuellement avec:\n" -#: ../../common/snapshots.py:465 +#: ../../common/snapshots.py:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "ÉCHEC" -#: ../../common/snapshots.py:564 +#: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "Restaurer les permissions :" -#: ../../common/snapshots.py:739 +#: ../../common/snapshots.py:752 ../../qt4/app.py:377 ../../qt4/app.py:675 +#: ../../qt4/app.py:692 ../../qt4/qt4systrayicon.py:65 +msgid "Done" +msgstr "Terminé" + +#: ../../common/snapshots.py:860 msgid "" "Back In Time changed its backup format.\n" "\n" @@ -402,7 +445,7 @@ "Vos anciennes sauvegardes peuvent être converties dans ce nouveau format. OK " "?" -#: ../../common/snapshots.py:749 +#: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" @@ -420,7 +463,7 @@ "\n" "(Le programme sera toujours capable de faire la différence entre les deux.)" -#: ../../common/snapshots.py:752 +#: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" @@ -428,7 +471,7 @@ "Aucun profil trouvé. Une mise à jour des profils est nécessaire, veuillez " "redémarrer Back In Time." -#: ../../common/snapshots.py:803 +#: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" @@ -450,7 +493,7 @@ "Sinon Back In Time va restaurer les anciens paramètres de ce profil, mais ne " "peut pas continuer à prendre des clichés" -#: ../../common/snapshots.py:812 +#: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" @@ -465,7 +508,7 @@ "Vous pouvez déplacer manuellement les instantanés, \n" "si vous avez fini redémarrez Back In Time pour continuer." -#: ../../common/snapshots.py:825 +#: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" @@ -475,7 +518,7 @@ "\n" "Back In Time continuera à prendre des instantanés selon la planification." -#: ../../common/snapshots.py:830 +#: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" @@ -496,11 +539,11 @@ "Sinon, ces questions vous seront reposées la prochaine fois que vous " "redémarrerez Back In Time." -#: ../../common/snapshots.py:839 +#: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "Back In Time continuera à prendre des instantanés comme planifié." -#: ../../common/snapshots.py:841 +#: ../../common/snapshots.py:953 msgid "" "Back In Time still cannot continue taking new snapshots.\n" "Restart Back In Time to see the questions again" @@ -509,7 +552,11 @@ "instantanés.\n" "Redémarrez Back In Time pour voir à nouveau ces questions." -#: ../../common/snapshots.py:913 +#: ../../common/snapshots.py:972 +msgid "Deferring backup while on battery" +msgstr "Reporter la sauvegarde lors du fonctionnement sur batterie" + +#: ../../common/snapshots.py:1035 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it." @@ -517,96 +564,101 @@ "Impossible de trouver le dossier des sauvegardes.\n" "S'il se trouve sur un disque externe, veuillez le connecter." -#: ../../common/snapshots.py:915 +#: ../../common/snapshots.py:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "En attente %s seconde." msgstr[1] "En attente %s secondes." -#: ../../common/snapshots.py:941 +#: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "Impossible d'effectuer la sauvegarde %s !!!" -#: ../../common/snapshots.py:950 +#: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "Finalisation" -#: ../../common/snapshots.py:1088 +#: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "Impossible de créer le dossier : %s" -#: ../../common/snapshots.py:1107 +#: ../../common/snapshots.py:1217 msgid "..." msgstr "..." -#: ../../common/snapshots.py:1134 +#: ../../common/snapshots.py:1238 +#, python-format +msgid "Found leftover '%s' which can be continued." +msgstr "" + +#: ../../common/snapshots.py:1250 +#, python-format +msgid "Remove leftover '%s' folder from last run" +msgstr "" + +#: ../../common/snapshots.py:1263 #, python-format msgid "Can't remove folder: %s" msgstr "Impossible de supprimer le dossier : %s" -#: ../../common/snapshots.py:1219 +#: ../../common/snapshots.py:1340 #, python-format msgid "Compare with snapshot %s" msgstr "Comparaison avec la sauvegarde %s" -#: ../../common/snapshots.py:1248 +#: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "Création des liens physiques" -#: ../../common/snapshots.py:1335 +#: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "Sauvegarde du fichier de configuration..." -#: ../../common/snapshots.py:1341 +#: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "Sauvegarde des permissions..." -#: ../../common/snapshots.py:1442 +#: ../../common/snapshots.py:1470 +msgid "Save permission over ssh failed. Retry normal method" +msgstr "Sauvegarde permission par ssh échouée. Réessayez la méthode normale." + +#: ../../common/snapshots.py:1521 #, python-format msgid "Can't rename %(new_path)s to %(path)s" msgstr "Impossible de renommer %(new_path)s vers %(path)s" -#: ../../common/snapshots.py:1562 -msgid "Remove old snapshots" -msgstr "Supprimer les anciens instantanés" - -#: ../../common/snapshots.py:1586 ../../kde4/settingsdialog.py:501 -#: ../../gnome/settingsdialog.glade:1660 +#: ../../common/snapshots.py:1695 ../../common/snapshots.py:1728 +#: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "Suppression intelligente" -#: ../../common/snapshots.py:1591 +#: ../../common/snapshots.py:1704 +msgid "Remove old snapshots" +msgstr "Supprimer les anciens instantanés" + +#: ../../common/snapshots.py:1733 msgid "Try to keep min free space" msgstr "Essayez de garder un espace libre minimum" -#: ../../common/snapshots.py:1621 +#: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "Gardez un minimum de %d%% inodes libres" -#: ../../common/sshtools.py:106 +#: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "Impossible de monter %s" -#: ../../common/sshtools.py:113 +#: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "Impossible de monter le sshfs %s" -#: ../../common/sshtools.py:187 -#, python-format -msgid "" -"Failed to unlock SSH private key:\n" -"Error: %s" -msgstr "" -"Impossible de déverrouiller la clé privée SSH :\n" -"Erreur: %s" - -#: ../../common/sshtools.py:194 +#: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." @@ -614,12 +666,12 @@ "Impossible de déverrouiller la clé privée SSH. Mot de passe incorrect ou mot " "de passe non disponible pour le cron." -#: ../../common/sshtools.py:199 +#: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" "sshfs introuvable. Veuillez installer par exemple 'apt-get install sshfs'" -#: ../../common/sshtools.py:217 +#: ../../common/sshtools.py:278 #, python-format msgid "" "Password-less authentication for %(user)s@%(host)s failed. Look at 'man " @@ -628,7 +680,7 @@ "L'authentification sans mot de passe pour %(user)s@%(host)s à échoué. " "Regardez 'man backintime' pour de plus amples instructions." -#: ../../common/sshtools.py:229 +#: ../../common/sshtools.py:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" @@ -637,12 +689,12 @@ "Le chiffrage %(cipher)s à échoué pour %(host)s :\n" "%(err)s" -#: ../../common/sshtools.py:254 +#: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "%s non trouvé dans ssh_known_hosts." -#: ../../common/sshtools.py:274 +#: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" @@ -651,7 +703,7 @@ "Le chemin d'accès distant existe mais n'est pas un répertoire :\n" " %s" -#: ../../common/sshtools.py:276 +#: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" @@ -660,7 +712,7 @@ "Le chemin d'accès distant n'est pas ouvert en écriture :\n" " %s" -#: ../../common/sshtools.py:278 +#: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" @@ -669,7 +721,7 @@ "Le chemin d'accès distant n'est pas éxécutable :\n" " %s" -#: ../../common/sshtools.py:280 +#: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" @@ -678,13 +730,13 @@ "Impossible de créer le chemin d'accès distant :\n" " %s" -#: ../../common/sshtools.py:302 +#: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" "Le ping de %s a échoué. L'hôte est injoignable ou c'est une mauvaise adresse." -#: ../../common/sshtools.py:325 ../../common/sshtools.py:383 +#: ../../common/sshtools.py:423 ../../common/sshtools.py:553 #, python-format msgid "" "Remote host %(host)s doesn't support '%(command)s':\n" @@ -695,7 +747,7 @@ "%(err)s\n" "Consultez 'man backintime' pour plus d'informations" -#: ../../common/sshtools.py:387 +#: ../../common/sshtools.py:556 #, python-format msgid "" "Check commands on host %(host)s returned unknown error:\n" @@ -706,96 +758,154 @@ "%(err)s \n" "Regardez 'man backintime' pour obtenir des instructions supplémentaires" -#: ../../common/sshtools.py:400 +#: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "L'hôte distant %s ne supporte pas les liens en dur" -#: ../../gnome/app.py:185 ../../gnome/app.py:594 ../../gnome/app.py:608 -#: ../../kde4/app.py:299 ../../kde4/app.py:570 ../../kde4/app.py:587 -msgid "Done" -msgstr "Terminé" +#: ../../qt4/app.py:81 +msgid "Refresh snapshots list" +msgstr "Rafraîchir la liste des instantanés" + +#: ../../qt4/app.py:85 ../../qt4/app.py:890 +msgid "Snapshot Name" +msgstr "Nommer la sauvegarde" + +#: ../../qt4/app.py:88 +msgid "Remove Snapshot" +msgstr "Supprimer" + +#: ../../qt4/app.py:91 +msgid "View Snapshot Log" +msgstr "Voir le journal des instantanés" + +#: ../../qt4/app.py:94 +msgid "View Last Log" +msgstr "Voir la dernière entrée du journal" + +#: ../../qt4/app.py:99 ../../qt4/settingsdialog.py:51 +msgid "Settings" +msgstr "Préférences" + +#: ../../qt4/app.py:104 +msgid "Shutdown" +msgstr "Arrêt." + +#: ../../qt4/app.py:105 +msgid "Shutdown system after snapshot has finished." +msgstr "Éteindre le système après l'instantané ?" + +#: ../../qt4/app.py:111 +msgid "Exit" +msgstr "Quitter" -#: ../../gnome/app.py:189 ../../kde4/app.py:143 ../../kde4/app.py:159 -#: ../../gnome/mainwindow.glade:225 +#: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 msgid "Help" msgstr "Aide" -#: ../../gnome/app.py:191 ../../kde4/app.py:146 -#: ../../gnome/mainwindow.glade:223 +#: ../../qt4/app.py:122 +msgid "Config File Help" +msgstr "Aide du fichier de configuration" + +#: ../../qt4/app.py:125 msgid "Website" msgstr "Site Web" -#: ../../gnome/app.py:192 ../../kde4/app.py:148 +#: ../../qt4/app.py:127 ../../qt4/app.py:982 +msgid "Changelog" +msgstr "Notes de version" + +#: ../../qt4/app.py:129 msgid "FAQ" msgstr "FAQ" -#: ../../gnome/app.py:193 ../../kde4/app.py:150 +#: ../../qt4/app.py:131 msgid "Ask a question" msgstr "Poser une question" -#: ../../gnome/app.py:194 ../../kde4/app.py:152 +#: ../../qt4/app.py:133 msgid "Report a bug" msgstr "Signaler un bogue" -#: ../../gnome/app.py:196 ../../kde4/app.py:155 +#: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "À propos" -#: ../../gnome/app.py:202 ../../gnome/app.py:887 -#: ../../gnome/restoredialog.py:84 ../../gnome/snapshotsdialog.py:83 -#: ../../gnome/snapshotsdialog.py:244 ../../kde4/app.py:206 -#: ../../kde4/app.py:216 ../../kde4/restoredialog.py:68 -#: ../../kde4/snapshotsdialog.py:111 ../../kde4/snapshotsdialog.py:117 -#: ../../gnome/mainwindow.glade:350 ../../gnome/mainwindow.glade:352 -#: ../../gnome/snapshotsdialog.glade:169 ../../gnome/snapshotsdialog.glade:171 +#: ../../qt4/app.py:163 +msgid "Up" +msgstr "Dossier parent" + +#: ../../qt4/app.py:174 ../../qt4/settingsdialog.py:1776 +msgid "Show hidden files" +msgstr "Fichiers cachés" + +#: ../../qt4/app.py:184 ../../qt4/app.py:199 ../../qt4/app.py:233 +#: ../../qt4/restoredialog.py:62 ../../qt4/settingsdialog.py:1818 +#: ../../qt4/snapshotsdialog.py:134 ../../qt4/snapshotsdialog.py:139 msgid "Restore" msgstr "Restaurer" -#: ../../gnome/app.py:203 ../../gnome/app.py:888 ../../gnome/gnometools.py:67 -#: ../../gnome/snapshotsdialog.py:84 ../../gnome/snapshotsdialog.py:245 -#: ../../kde4/app.py:208 ../../kde4/restoredialog.py:42 -#: ../../kde4/snapshotsdialog.py:113 +#: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 +#: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "Restaurer vers ..." -#: ../../gnome/app.py:205 ../../gnome/app.py:896 ../../gnome/app.py:1146 -#: ../../kde4/app.py:1041 -#, python-format -msgid "Restore '%s'" -msgstr "Restaurer '%s'" +#: ../../qt4/app.py:194 +msgid "Restore and delete new files" +msgstr "Restaurer et supprimer les nouveaux fichiers" -#: ../../gnome/app.py:207 ../../gnome/app.py:897 ../../gnome/app.py:1147 -#: ../../kde4/app.py:1042 +#: ../../qt4/app.py:201 #, python-format -msgid "Restore '%s' to ..." -msgstr "Restaurer '%s' vers ..." +msgid "" +"Restore selected file or folder.\n" +"If this button is grayed out this is most likely because \"%(now)s\" is " +"selected in left hand snapshots list." +msgstr "" +"Restaurer les fichiers ou dossiers sélectionnés.\n" +"Si ce bouton est grisé, c'est principalement parce que \"%(now)s\" est " +"sélectionné dans les deux listes." + +#: ../../qt4/app.py:206 ../../qt4/logviewdialog.py:67 +#: ../../qt4/qt4tools.py:160 ../../qt4/snapshotsdialog.py:96 +msgid "Snapshots" +msgstr "Sauvegardes" -#: ../../gnome/app.py:226 ../../kde4/app.py:235 +#: ../../qt4/app.py:213 +msgid "Snapshot" +msgstr "Cliché instantané" + +#: ../../qt4/app.py:224 +msgid "View" +msgstr "Vue" + +#: ../../qt4/app.py:277 msgid "Shortcuts" msgstr "Raccourcis" -#: ../../gnome/app.py:249 -msgid "Name" -msgstr "Nom" - -#: ../../gnome/app.py:260 -msgid "Size" -msgstr "Taille" - -#: ../../gnome/app.py:267 -msgid "Date" -msgstr "Date" - -#: ../../gnome/app.py:286 ../../gnome/app.py:883 -#: ../../gnome/snapshotsdialog.py:116 ../../kde4/app.py:171 -#: ../../kde4/app.py:221 ../../kde4/snapshotsdialog.py:91 -#: ../../gnome/mainwindow.glade:366 ../../gnome/mainwindow.glade:368 -#: ../../gnome/snapshotsdialog.glade:8 -msgid "Snapshots" -msgstr "Sauvegardes" +#: ../../qt4/app.py:295 +msgid "" +"This folder doesn't exist\n" +"in the current selected snapshot!" +msgstr "" + +#: ../../qt4/app.py:359 +msgid "Add to Include" +msgstr "Ajouter aux Inclusions" + +#: ../../qt4/app.py:360 +msgid "Add to Exclude" +msgstr "Ajouter aux Exclusions" + +#: ../../qt4/app.py:416 +#, python-format +msgid "" +"%(appName)s is not configured. Would you like to restore a previous " +"configuration?" +msgstr "" +"%(appName)s n'est pas configuré(e). Voulez vous restaurer une configuration " +"précédente?" -#: ../../gnome/app.py:348 ../../kde4/app.py:362 +#: ../../qt4/app.py:440 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it and then press OK" @@ -804,414 +914,359 @@ "S'il se trouve sur un disque externe, veuillez connecter celui-ci puis faire " "OK" -#: ../../gnome/app.py:611 ../../kde4/app.py:590 -msgid "Done, no backup needed" -msgstr "Terminé, il n'y a rien à sauvegarder" +#: ../../qt4/app.py:473 +msgid "" +"If you close this window Back In Time will not be able to shutdown your " +"system when the snapshot has finished.\n" +"Do you really want to close?" +msgstr "" +"Si vous fermez cette fenêtre, Back In Time ne sera pas en mesure d'arrêter " +"votre système lorsque l'instantané sera terminée. \n" +"Voulez-vous vraiment fermer?" -#: ../../gnome/app.py:619 ../../kde4/app.py:598 +#: ../../qt4/app.py:667 ../../qt4/app.py:703 msgid "Working:" msgstr "En cours :" -#: ../../gnome/app.py:623 ../../kde4/app.py:602 +#: ../../qt4/app.py:695 +msgid "Done, no backup needed" +msgstr "Terminé, il n'y a rien à sauvegarder" + +#: ../../qt4/app.py:707 msgid "Error:" msgstr "Erreur:" -#: ../../gnome/app.py:636 ../../kde4/app.py:649 +#: ../../qt4/app.py:726 ../../qt4/qt4systrayicon.py:153 +msgid "Sent:" +msgstr "Envoyé :" + +#: ../../qt4/app.py:727 ../../qt4/qt4systrayicon.py:154 +msgid "Speed:" +msgstr "Vitesse :" + +#: ../../qt4/app.py:728 ../../qt4/qt4systrayicon.py:155 +msgid "ETA:" +msgstr "ETA :" + +#: ../../qt4/app.py:777 msgid "Global" msgstr "Global" -#: ../../gnome/app.py:637 ../../kde4/app.py:650 +#: ../../qt4/app.py:778 msgid "Root" msgstr "Système de fichiers" -#: ../../gnome/app.py:638 ../../kde4/app.py:651 +#: ../../qt4/app.py:779 msgid "Home" msgstr "Dossier personnel" -#: ../../gnome/app.py:662 -msgid "Bookmarks" -msgstr "Signets" - -#: ../../gnome/app.py:675 ../../kde4/app.py:662 +#: ../../qt4/app.py:794 msgid "Backup folders" msgstr "Dossiers sauvegardés" -#: ../../gnome/app.py:701 ../../kde4/app.py:734 -msgid "Today" -msgstr "Aujourd'hui" - -#: ../../gnome/app.py:705 ../../kde4/app.py:738 -msgid "Yesterday" -msgstr "Hier" - -#: ../../gnome/app.py:709 ../../kde4/app.py:742 -msgid "This week" -msgstr "Cette semaine" +#: ../../qt4/app.py:849 +msgid "This is NOT a snapshot but a live view of your local files" +msgstr "" +"Ce n'est pas pas un instantané (sauvegarde) mais une vue de l'état Actuel de " +"vous fichiers locaux." -#: ../../gnome/app.py:713 ../../kde4/app.py:746 -msgid "Last week" -msgstr "La semaine dernière" +#: ../../qt4/app.py:860 ../../qt4/app.py:1476 +#, python-format +msgid "Last check %s" +msgstr "Dernière vérification %s" -#: ../../gnome/app.py:764 ../../kde4/app.py:398 +#: ../../qt4/app.py:928 +#, python-format msgid "" -"If you close this window Back In Time will not be able to shutdown your " -"system when the snapshot has finished.\n" -"Do you really want to close?" +"Are you sure you want to remove the snapshot:\n" +"%s" msgstr "" -"Si vous fermez cette fenêtre, Back In Time ne sera pas en mesure d'arrêter " -"votre système lorsque l'instantané sera terminée. \n" -"Voulez-vous vraiment fermer?" +"Êtes-vous sûr de vouloir supprimer la sauvegarde :\n" +"%s" -#: ../../gnome/app.py:881 ../../gnome/snapshotsdialog.py:238 -msgid "Open" -msgstr "Ouvrir" +#: ../../qt4/app.py:1004 +#, python-format +msgid "" +"Backup local files before overwriting or\n" +"removing with trailing '%(suffix)s'." +msgstr "" +"Sauvegarder les fichiers locaux avant écrasement ou\n" +"suppression avec le suffixe '%(suffix)s'." -#: ../../gnome/app.py:1056 ../../kde4/app.py:90 ../../kde4/app.py:805 -#: ../../gnome/mainwindow.glade:73 ../../gnome/mainwindow.glade:75 -msgid "Snapshot Name" -msgstr "Nommer la sauvegarde" +#: ../../qt4/app.py:1010 +msgid "" +"Are you sure you want to remove all newer files in your original folder?" +msgstr "" +"Êtes vous sûre de vouloir supprimer tous les nouveaux fichiers dans le " +"répertoire d'origine?" -#: ../../gnome/app.py:1075 -#, python-format +#: ../../qt4/app.py:1014 msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +"WARNING: deleting files in filesystem root could break your whole system!!!" msgstr "" -"Etes-vous sûr de vouloir supprimer la sauvegarde :\n" -"%s" +"ATTENTION : supprimer des fichiers de la racine pourrait casser tout votre " +"système !!!" + +#: ../../qt4/app.py:1016 +msgid "Files to be restored:" +msgstr "Fichiers à restaurer :" -#: ../../gnome/app.py:1123 ../../kde4/app.py:1010 +#: ../../qt4/app.py:1031 +msgid "Do you really want to restore this files(s):" +msgstr "Voulez-vous vraiment restaurer ces fichiers(s) :" + +#: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "Sauvegarde : %s" -#: ../../gnome/app.py:1124 ../../kde4/app.py:1011 +#: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "Voir le contenu sauvegardé dans %s" -#: ../../gnome/app.py:1126 ../../kde4/app.py:1013 +#: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "Voir le contenu actuel" -#: ../../gnome/logviewdialog.py:106 ../../gnome/settingsdialog.py:414 -#: ../../kde4/logviewdialog.py:83 ../../kde4/settingsdialog.py:590 +#: ../../qt4/app.py:1268 +#, python-format +msgid "Restore '%s'" +msgstr "Restaurer '%s'" + +#: ../../qt4/app.py:1269 +#, python-format +msgid "Restore '%s' to ..." +msgstr "Restaurer '%s' vers ..." + +#: ../../qt4/app.py:1270 +#, python-format +msgid "Restore '%s' and delete new files" +msgstr "Restaurer '%s' et supprimer les nouveaux fichiers" + +#: ../../qt4/app.py:1368 ../../qt4/app.py:1385 +msgid "Authors" +msgstr "Auteurs" + +#: ../../qt4/app.py:1369 ../../qt4/app.py:1388 +msgid "Translations" +msgstr "Traductions" + +#: ../../qt4/app.py:1370 ../../qt4/app.py:1391 +msgid "License" +msgstr "Licence" + +#: ../../qt4/logviewdialog.py:49 +msgid "Last Log View" +msgstr "" + +#: ../../qt4/logviewdialog.py:51 +msgid "Snapshot Log View" +msgstr "" + +#: ../../qt4/logviewdialog.py:59 ../../qt4/settingsdialog.py:59 +#: ../../qt4/settingsdialog.py:274 ../../qt4/settingsdialog.py:1899 +msgid "Profile:" +msgstr "Profil :" + +#: ../../qt4/logviewdialog.py:81 +msgid "Filter:" +msgstr "Filtre :" + +#: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 msgid "All" msgstr "Tous" -#: ../../gnome/logviewdialog.py:107 ../../gnome/settingsdialog.py:412 -#: ../../kde4/logviewdialog.py:84 ../../kde4/settingsdialog.py:588 +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 +#: ../../qt4/settingsdialog.py:657 msgid "Errors" msgstr "Erreurs" -#: ../../gnome/logviewdialog.py:112 ../../kde4/logviewdialog.py:89 +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 msgid "Changes" msgstr "Modifications" -#: ../../gnome/logviewdialog.py:115 ../../kde4/logviewdialog.py:92 +#: ../../qt4/logviewdialog.py:92 msgid "Informations" msgstr "Informations" -#: ../../gnome/settingsdialog.py:235 ../../kde4/settingsdialog.py:387 -msgid "Include files and folders" -msgstr "Inclure les fichiers et les dossiers" +#: ../../qt4/logviewdialog.py:101 +msgid "[E] Error, [I] Information, [C] Change" +msgstr "[E] Erreur, [I] Information, [C] Modification" -#: ../../gnome/settingsdialog.py:264 -msgid "Exclude patterns, files or folders" -msgstr "Exclure les motifs, fichiers ou dossiers" +#: ../../qt4/logviewdialog.py:104 +msgid "decode paths" +msgstr "décoder les chemins" -#: ../../gnome/settingsdialog.py:411 ../../kde4/settingsdialog.py:587 -msgid "None" -msgstr "Aucun" +#: ../../qt4/messagebox.py:56 +msgid "Error" +msgstr "Erreur" + +#: ../../qt4/messagebox.py:62 ../../qt4/messagebox.py:68 +msgid "Question" +msgstr "Question" + +#: ../../qt4/qt4systrayicon.py:69 +msgid "Start BackInTime" +msgstr "Démarrer BackinTime" -#: ../../gnome/settingsdialog.py:413 ../../kde4/settingsdialog.py:589 -msgid "Changes & Errors" -msgstr "Changements et Erreurs" +#: ../../qt4/qt4systrayicon.py:124 +msgid "Working..." +msgstr "Traitement en cours..." -#: ../../gnome/settingsdialog.py:458 -msgid "Snapshots folder" -msgstr "Dossier des sauvegardes" +#: ../../qt4/qt4tools.py:178 +msgid "Today" +msgstr "Aujourd'hui" -#: ../../gnome/settingsdialog.py:466 ../../kde4/settingsdialog.py:1314 -msgid "Are you sure you want to change snapshots folder ?" -msgstr "Etes-vous sûr de vouloir changer de dossier des sauvegardes ?" - -#: ../../gnome/settingsdialog.py:901 ../../kde4/settingsdialog.py:914 -msgid "" -"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " -"*/3 for periodic backups every 3 hours" -msgstr "" -"Les heures personnalisés doivent être séparéesune par une virgule (ex : " -"8,12,18,23) ou */3 pour les sauvegardes périodiques toutes les 3 heures" - -#: ../../gnome/settingsdialog.py:1141 ../../kde4/settingsdialog.py:653 -msgid "New profile" -msgstr "Nouveau profil" - -#: ../../gnome/settingsdialog.py:1155 ../../kde4/settingsdialog.py:669 -msgid "Rename profile" -msgstr "Renommer le profil" - -#: ../../gnome/settingsdialog.py:1167 ../../kde4/settingsdialog.py:683 -#, python-format -msgid "Are you sure you want to delete the profile \"%s\" ?" -msgstr "Êtes-vous sûr de vouloir supprimer le profil \"%s\" ?" - -#: ../../gnome/settingsdialog.py:1173 ../../kde4/settingsdialog.py:1292 -msgid "Include folder" -msgstr "Inclure un dossier" - -#: ../../gnome/settingsdialog.py:1193 ../../kde4/settingsdialog.py:1278 -msgid "Include file" -msgstr "Inclure le fichier" - -#: ../../gnome/settingsdialog.py:1235 ../../kde4/settingsdialog.py:1241 -msgid "Exclude pattern" -msgstr "Exclure selon un modèle" - -#: ../../gnome/settingsdialog.py:1240 ../../kde4/settingsdialog.py:1251 -msgid "Exclude patterns can't contain ':' char !" -msgstr "Un modèle ne peut pas contenir le caractère « : » !" - -#: ../../gnome/settingsdialog.py:1246 ../../kde4/settingsdialog.py:1257 -msgid "Exclude file" -msgstr "Exclure un fichier" - -#: ../../gnome/settingsdialog.py:1257 ../../kde4/settingsdialog.py:1261 -msgid "Exclude folder" -msgstr "Exclure un dossier" - -#: ../../gnome/snapshotsdialog.py:240 -msgid "Jump to" -msgstr "Sauter vers" +#: ../../qt4/qt4tools.py:183 +msgid "Yesterday" +msgstr "Hier" -#: ../../gnome/snapshotsdialog.py:248 ../../kde4/snapshotsdialog.py:164 -msgid "Diff" -msgstr "Comparer" +#: ../../qt4/qt4tools.py:188 +msgid "This week" +msgstr "Cette semaine" -#: ../../gnome/snapshotsdialog.py:277 ../../kde4/snapshotsdialog.py:339 -msgid "You can't compare a snapshot to itself" -msgstr "Vous ne pouvez pas comparer une sauvegarde à elle-même" +#: ../../qt4/qt4tools.py:193 +msgid "Last week" +msgstr "La semaine dernière" -#: ../../gnome/snapshotsdialog.py:284 ../../kde4/snapshotsdialog.py:346 -#, python-format -msgid "Command not found: %s" -msgstr "Commande non trouvée : %s" +#: ../../qt4/restoredialog.py:75 +msgid "Show full Log" +msgstr "Afficher le journal complet" -#: ../../gnome/snapshotsdialog.py:307 ../../kde4/snapshotsdialog.py:367 -#, python-format -msgid "" -"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" -msgstr "" -"Voulez-vous vraiment supprimer \"%(file)s\" dans l'instantané " -"\"%(snapshot_id)s ?\n" +#: ../../qt4/settingsdialog.py:68 +msgid "Edit" +msgstr "Modifier" -#: ../../gnome/snapshotsdialog.py:310 ../../kde4/snapshotsdialog.py:370 -#, python-format -msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +#: ../../qt4/settingsdialog.py:73 +msgid "Modify for Full System Backup" msgstr "" -"Voulez-vous vraiment supprimer \"%(file)s\" dans les instantanés %(count)d " -"?\n" -#: ../../gnome/snapshotsdialog.py:312 ../../kde4/snapshotsdialog.py:372 -msgid "WARNING: This can not be revoked!" -msgstr "AVERTISSEMENT: Ce ne peut être révoqué !" - -#: ../../gnome/snapshotsdialog.py:317 ../../kde4/snapshotsdialog.py:377 -#, python-format -msgid "Exclude \"%s\" from future snapshots?" -msgstr "Exclure \"%s\" des futurs instantanés ?" - -#: ../../kde4/app.py:86 ../../gnome/mainwindow.glade:58 -#: ../../gnome/mainwindow.glade:60 -msgid "Refresh snapshots list" -msgstr "Rafraîchir la liste des instantanés" +#: ../../qt4/settingsdialog.py:77 ../../qt4/settingsdialog.py:451 +msgid "Add" +msgstr "Ajouter à" -#: ../../kde4/app.py:94 ../../gnome/mainwindow.glade:88 -#: ../../gnome/mainwindow.glade:90 -msgid "Remove Snapshot" +#: ../../qt4/settingsdialog.py:81 ../../qt4/settingsdialog.py:408 +#: ../../qt4/settingsdialog.py:467 +msgid "Remove" msgstr "Supprimer" -#: ../../kde4/app.py:98 ../../gnome/mainwindow.glade:105 -msgid "View Snapshot Log" -msgstr "Voir le journal des instantanés" - -#: ../../kde4/app.py:102 ../../gnome/mainwindow.glade:121 -msgid "View Last Log" -msgstr "Voir la dernière entrée du journal" - -#: ../../kde4/app.py:108 ../../kde4/settingsdialog.py:69 -#: ../../gnome/mainwindow.glade:144 ../../gnome/mainwindow.glade:146 -#: ../../gnome/settingsdialog.glade:7 -msgid "Settings" -msgstr "Préférences" - -#: ../../kde4/app.py:124 ../../gnome/mainwindow.glade:169 -msgid "Shutdown system after snapshot has finished." -msgstr "Éteindre le système après l'instantané ?" - -#: ../../kde4/app.py:131 ../../gnome/mainwindow.glade:184 -#: ../../gnome/mainwindow.glade:186 -msgid "Exit" -msgstr "Quitter" - -#: ../../kde4/app.py:186 ../../gnome/mainwindow.glade:289 -msgid "Up" -msgstr "Dossier parent" - -#: ../../kde4/app.py:199 ../../gnome/mainwindow.glade:325 -msgid "Show hidden files" -msgstr "Fichiers cachés" - -#: ../../kde4/app.py:244 -msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" -msgstr "" -"Ce dossier n'existe pas\n" -"dans la sauvegarde sélectionnée" - -#: ../../kde4/app.py:839 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" -msgstr "" -"Êtes-vous sûr de vouloir supprimer la sauvegarde :\n" -"%s" - -#: ../../kde4/app.py:1140 ../../kde4/kde4systrayicon.py:117 -msgid "Working..." -msgstr "Traitement en cours..." - -#: ../../kde4/logviewdialog.py:55 -msgid "Error Log View" -msgstr "Voir le journal d'erreurs" - -#: ../../kde4/logviewdialog.py:65 ../../kde4/settingsdialog.py:79 -#: ../../kde4/settingsdialog.py:293 ../../gnome/logviewdialog.glade:73 -#: ../../gnome/settingsdialog.glade:72 -msgid "Profile:" -msgstr "Profil :" - -#: ../../kde4/logviewdialog.py:77 ../../gnome/logviewdialog.glade:110 -msgid "Filter:" -msgstr "Filtre :" - -#: ../../kde4/logviewdialog.py:100 ../../gnome/logviewdialog.glade:169 -msgid "[E] Error, [I] Information, [C] Change" -msgstr "[E] Erreur, [I] Information, [C] Modification" - -#: ../../kde4/logviewdialog.py:103 ../../gnome/logviewdialog.glade:195 -msgid "decode paths" -msgstr "décoder les chemins" - -#: ../../kde4/settingsdialog.py:88 -msgid "Edit" -msgstr "Modifier" - -#: ../../kde4/settingsdialog.py:106 ../../gnome/settingsdialog.glade:1207 +#: ../../qt4/settingsdialog.py:96 msgid "General" msgstr "Général" -#: ../../kde4/settingsdialog.py:114 ../../gnome/settingsdialog.glade:199 +#: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "Mode :" -#: ../../kde4/settingsdialog.py:127 ../../kde4/settingsdialog.py:1311 +#: ../../qt4/settingsdialog.py:119 +#, python-format +msgid "" +"Warning: %(app)s uses EncFS for encryption. A recent security audit " +"revealed several possible attack vectors for this. Please take a look at 'A " +"NOTE ON SECURITY' in 'man backintime'." +msgstr "" +"Attention : %(app)s utilise EncFS pour le chiffrement. Un récent " +"audit de sécurité à révélé plusieurs vecteurs d'attaque possibles le " +"concernant. Veuillez jeter un oeil à la section 'A NOTE ON SECURITY' dans " +"'man backintime'." + +#: ../../qt4/settingsdialog.py:129 ../../qt4/settingsdialog.py:1568 msgid "Where to save snapshots" msgstr "Dossier pour les sauvegardes" -#: ../../kde4/settingsdialog.py:146 +#: ../../qt4/settingsdialog.py:145 +msgid "Folder" +msgstr "Dossier" + +#: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "Réglages SSH" -#: ../../kde4/settingsdialog.py:158 ../../kde4/settingsdialog.py:283 -#: ../../gnome/settingsdialog.glade:323 ../../gnome/settingsdialog.glade:583 -#: ../../gnome/settingsdialog.glade:874 +#: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "Hôte :" -#: ../../kde4/settingsdialog.py:163 ../../gnome/settingsdialog.glade:350 -#: ../../gnome/settingsdialog.glade:610 +#: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "Port :" -#: ../../kde4/settingsdialog.py:168 ../../kde4/settingsdialog.py:288 -#: ../../gnome/settingsdialog.glade:377 ../../gnome/settingsdialog.glade:637 -#: ../../gnome/settingsdialog.glade:902 +#: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "Utilisateur :" -#: ../../kde4/settingsdialog.py:173 ../../gnome/settingsdialog.glade:416 +#: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "Chemin :" -#: ../../kde4/settingsdialog.py:178 ../../gnome/settingsdialog.glade:459 +#: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "Type de chiffrement :" -#: ../../kde4/settingsdialog.py:184 +#: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "Clé privée :" -#: ../../kde4/settingsdialog.py:228 ../../kde4/settingsdialog.py:237 -#: ../../kde4/settingsdialog.py:243 ../../gnome/settingsdialog.glade:703 -#: ../../gnome/settingsdialog.glade:743 +#: ../../qt4/settingsdialog.py:201 +msgid "Key File" +msgstr "Fichier clé" + +#: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 +#: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "Mot de passe" -#: ../../kde4/settingsdialog.py:249 ../../gnome/settingsdialog.glade:775 +#: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "Enregistrer le Mot de passe dans le trousseau" -#: ../../kde4/settingsdialog.py:252 ../../gnome/settingsdialog.glade:792 +#: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" "Mot de passe caché pour Cron (question de sécurité : root peut lire le mot " "de passe)" -#: ../../kde4/settingsdialog.py:264 ../../gnome/settingsdialog.glade:968 +#: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "Options avancées" -#: ../../kde4/settingsdialog.py:276 ../../gnome/settingsdialog.glade:848 -msgid "Auto Host / User / Profile Id" -msgstr "Hôte / Utilisateur / Profil automatiques" +#: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 +msgid "Full snapshot path: " +msgstr "Chemin complet de l'instantané " -#: ../../kde4/settingsdialog.py:301 +#: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "Planification" -#: ../../kde4/settingsdialog.py:311 ../../gnome/settingsdialog.glade:1092 +#: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "Jour:" -#: ../../kde4/settingsdialog.py:322 ../../gnome/settingsdialog.glade:1079 +#: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "Jour de la semaine :" -#: ../../kde4/settingsdialog.py:333 ../../gnome/settingsdialog.glade:1066 +#: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "Heure :" -#: ../../kde4/settingsdialog.py:344 ../../gnome/settingsdialog.glade:1053 +#: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "Heures :" -#: ../../kde4/settingsdialog.py:353 ../../gnome/settingsdialog.glade:1014 +#: ../../qt4/settingsdialog.py:339 msgid "" -"Run Back In Time periodically with anacron. This is useful if the computer " -"is not running regular." +"Run Back In Time repeatedly. This is useful if the computer is not running " +"regular." msgstr "" -"Exécutez Back In Time périodiquement aveec anacron. Ceci est utile si " -"l'ordinateur ne fonctionne pas régulièrement." +"Exécuter BackInTime à plusieurs reprises. Ce réglage est utile si " +"l'ordinateur n'est pas allumé régulièrement" -#: ../../kde4/settingsdialog.py:357 ../../gnome/settingsdialog.glade:1040 -msgid "Frequency in days:" -msgstr "Fréquence en jours :" +#: ../../qt4/settingsdialog.py:344 +msgid "Every:" +msgstr "Tous les:" -#: ../../kde4/settingsdialog.py:368 ../../gnome/settingsdialog.glade:1026 +#: ../../qt4/settingsdialog.py:362 msgid "" "Run Back In Time as soon as the drive is connected (only once every X " "days).\n" @@ -1221,343 +1276,503 @@ "tous les X jours). \n" "Vous serez invité à entrer votre mot de passe sudo." -#: ../../kde4/settingsdialog.py:379 ../../gnome/settingsdialog.glade:1310 +#: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Inclure" -#: ../../kde4/settingsdialog.py:403 ../../kde4/settingsdialog.py:445 -#: ../../gnome/settingsdialog.glade:1411 +#: ../../qt4/settingsdialog.py:381 +msgid "Include files and folders" +msgstr "Inclure les fichiers et les dossiers" + +#: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "Ajouter un fichier" -#: ../../kde4/settingsdialog.py:408 ../../kde4/settingsdialog.py:450 -#: ../../gnome/settingsdialog.glade:1427 +#: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Ajouter un dossier" -#: ../../kde4/settingsdialog.py:418 ../../gnome/settingsdialog.glade:1474 +#: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Exclure" -#: ../../kde4/settingsdialog.py:421 ../../gnome/settingsdialog.glade:1328 +#: ../../qt4/settingsdialog.py:417 msgid "" "Warning: Wildcards ('foo*', '[fF]oo', 'fo?') will be ignored with " "mode 'SSH encrypted'.\n" "Only separate asterisk are allowed ('foo/*', 'foo/**/bar')" msgstr "" "Attention : Les caractères génériques ('foo*', '[FF]oo', 'fo?') " -"seront ignorés en mode 'SSH crypté'. \n" +"seront ignorés en mode 'SSH chiffré'. \n" "Seuls ceux séparés par astérisque sont autorisés ('foo/*', 'foo/**/bar')" -#: ../../kde4/settingsdialog.py:430 +#: ../../qt4/settingsdialog.py:425 +msgid "Exclude patterns, files or folders" +msgstr "Exclure les motifs, fichiers ou dossiers" + +#: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "Fortement recommandé :" -#: ../../kde4/settingsdialog.py:460 ../../gnome/settingsdialog.glade:1905 +#: ../../qt4/settingsdialog.py:463 +msgid "Add default" +msgstr "Ajouter par défaut" + +#: ../../qt4/settingsdialog.py:474 +msgid "Exclude files bigger than: " +msgstr "Exclure les fichiers plus gros que: " + +#: ../../qt4/settingsdialog.py:475 +#, python-format +msgid "" +"Exclude files bigger than value in %(prefix)s.\n" +"With 'Full rsync mode' disabled this will only affect new files\n" +"because for rsync this is a transfer option, not an exclude option.\n" +"So big files that has been backed up before will remain in snapshots\n" +"even if they had changed." +msgstr "" +"Exclure les fichiers plus gros que cette valeur en %(prefix)s.\n" +"Avec 'Full rsync mode' désactivé, cela n'affectera que les nouveaux " +"fichiers\n" +"parce que pour rsync c'est une option de transfert et non pas une option " +"d'exclusion.\n" +"Donc les gros fichier qui ont été transférés avant, resteront dans " +"l'instantané.\n" +"même s'ils ont changés." + +#: ../../qt4/settingsdialog.py:493 msgid "Auto-remove" msgstr "Purge auto" -#: ../../kde4/settingsdialog.py:464 ../../gnome/settingsdialog.glade:1608 +#: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "Si antérieur à :" -#: ../../kde4/settingsdialog.py:478 ../../gnome/settingsdialog.glade:1624 +#: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "Si l'espace libre est inférieur à :" -#: ../../kde4/settingsdialog.py:490 ../../gnome/settingsdialog.glade:1642 +#: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "Si les inodes libres sont inférieurs à:" -#: ../../kde4/settingsdialog.py:514 ../../gnome/settingsdialog.glade:1697 +#: ../../qt4/settingsdialog.py:551 +msgid "Run in background on remote Host." +msgstr "Exécuter en tâche de fond sur l'hôte distant." + +#: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "Garder tous les instantanés depuis les derniers" -#: ../../kde4/settingsdialog.py:517 ../../kde4/settingsdialog.py:522 -#: ../../gnome/settingsdialog.glade:1705 ../../gnome/settingsdialog.glade:1729 +#: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "jour(s)" -#: ../../kde4/settingsdialog.py:519 ../../gnome/settingsdialog.glade:1717 +#: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "Garder un instantané par jour depuis les derniers" -#: ../../kde4/settingsdialog.py:524 ../../gnome/settingsdialog.glade:1743 +#: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "Garder un instantané par semaine depuis les derniers" -#: ../../kde4/settingsdialog.py:527 +#: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "semaine(s)" -#: ../../kde4/settingsdialog.py:529 ../../gnome/settingsdialog.glade:1769 +#: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "Garder un instantané par mois depuis les derniers" -#: ../../kde4/settingsdialog.py:532 ../../gnome/settingsdialog.glade:1781 +#: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "mois" -#: ../../kde4/settingsdialog.py:534 ../../gnome/settingsdialog.glade:1795 +#: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "Garder un instantané par an depuis les derniers" -#: ../../kde4/settingsdialog.py:537 ../../gnome/settingsdialog.glade:1496 +#: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "Ne pas effacer les sauvegardes avec des noms" -#: ../../kde4/settingsdialog.py:546 ../../gnome/settingsdialog.glade:2104 +#: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Options" -#: ../../kde4/settingsdialog.py:549 ../../gnome/settingsdialog.glade:1920 +#: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Activer les notifications" -#: ../../kde4/settingsdialog.py:552 ../../gnome/settingsdialog.glade:1937 +#: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "Désactiver les sauvegardes automatiques en mode batterie" -#: ../../kde4/settingsdialog.py:555 +#: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" msgstr "Impossible d'obtenir l'état de l'alimentation du système" -#: ../../kde4/settingsdialog.py:558 ../../gnome/settingsdialog.glade:1955 -msgid "Backup files on restore" -msgstr "Sauvegarder les fichiers lors de la restauration" +#: ../../qt4/settingsdialog.py:611 +msgid "Run only one snapshot at a time" +msgstr "Exécuter un seul instantané à la fois" + +#: ../../qt4/settingsdialog.py:612 +msgid "" +"Other snapshots will be blocked until the current snapshot is done.\n" +"This is a global option. So it will effect all profiles for this user.\n" +"But you need to activate this for all other users, too." +msgstr "" +"Les autres instantanés seront bloqués jusqu'à ce que l'instantané courant " +"soit terminé.\n" +"C'est une option globale. Donc elle affectera tous les profils pour cet " +"utilisateur.\n" +"Mais vous avez besoin de l'activer pour tous les autres utilisateurs, aussi." + +#: ../../qt4/settingsdialog.py:617 +msgid "Backup replaced files on restore" +msgstr "Fichiers remplacés lors de la restauration" -#: ../../kde4/settingsdialog.py:561 ../../gnome/settingsdialog.glade:1972 +#: ../../qt4/settingsdialog.py:618 +#, python-format +msgid "" +"Newer versions of files will be renamed with trailing '%(suffix)s' before " +"restoring.\n" +"If you don't need them anymore you can remove them with '%(cmd)s'" +msgstr "" +"Les nouvelles versions des fichiers seront renommés avec le préfixe " +"'%(suffix)s' avant la restauration.\n" +"Si vous n'en avez pas besoin, vous pouvez les supprimer avec '%(cmd)s'" + +#: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "Continuer en cas d'erreur (conserver les sauvegardes incomplètes)" -#: ../../kde4/settingsdialog.py:564 ../../gnome/settingsdialog.glade:1989 +#: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "Utiliser le checksum pour détecter les changements" -#: ../../kde4/settingsdialog.py:567 ../../gnome/settingsdialog.glade:2006 +#: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "Mode rsync complet. Peut être plus rapide mais :" -#: ../../kde4/settingsdialog.py:568 ../../gnome/settingsdialog.glade:2032 +#: ../../qt4/settingsdialog.py:634 msgid "" -"- snapshots are no read-only\n" -"- destination file-system must support all linux attributes (dates, rights, " +"- snapshots are not read-only\n" +"- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" "- les snapshots ne sont pas en lecture-seule\n" "- le système de fichier de destination doit supporter tous les attributs " "linux (dates, droits, utilisateur , groupe...)" -#: ../../kde4/settingsdialog.py:575 ../../gnome/settingsdialog.glade:2045 +#: ../../qt4/settingsdialog.py:641 +msgid "Take a new snapshot regardless of there were changes or not." +msgstr "Prendre un instantané qu'il y ait eu des changements ou non." + +#: ../../qt4/settingsdialog.py:644 msgid "Check for changes (don't take a new snapshot if nothing changed)" msgstr "" "Vérifier les changements (ne pas faire un nouvel instantané si rien n'a " "changé)" -#: ../../kde4/settingsdialog.py:582 +#: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "Niveau de journalisation :" -#: ../../kde4/settingsdialog.py:597 ../../gnome/settingsdialog.glade:2366 -msgid "Expert Options" -msgstr "Avancé" +#: ../../qt4/settingsdialog.py:656 +msgid "None" +msgstr "Aucun" -#: ../../kde4/settingsdialog.py:600 +#: ../../qt4/settingsdialog.py:658 +msgid "Changes & Errors" +msgstr "Changements et Erreurs" + +#: ../../qt4/settingsdialog.py:674 msgid "Change these options only if you really know what you are doing !" msgstr "" "Modifiez ces options uniquement si vous savez réellement ce que vous faites !" -#: ../../kde4/settingsdialog.py:608 ../../gnome/settingsdialog.glade:2133 -msgid "Run 'nice' as cron job (default: enabled)" -msgstr "Utiliser 'nice' pour exécuter la commande cron (activé par défaut)" +#: ../../qt4/settingsdialog.py:678 +msgid "Run 'nice':" +msgstr "Exécuter 'nice'" + +#: ../../qt4/settingsdialog.py:684 ../../qt4/settingsdialog.py:696 +msgid "as cron job" +msgstr "comme une tâche de cron" + +#: ../../qt4/settingsdialog.py:687 ../../qt4/settingsdialog.py:702 +#: ../../qt4/settingsdialog.py:716 +msgid "on remote host" +msgstr "sur un serveur distant" + +#: ../../qt4/settingsdialog.py:690 +msgid "Run 'ionice':" +msgstr "Exécuter 'ionice'" + +#: ../../qt4/settingsdialog.py:699 +msgid "when taking a manual snapshot" +msgstr "lors d'un instantané manuel" + +#: ../../qt4/settingsdialog.py:706 +msgid "Run 'rsync' with 'nocache':" +msgstr "Exécuter 'rsync' avec l'option 'nocache':" + +#: ../../qt4/settingsdialog.py:712 +msgid "on local machine" +msgstr "sur la machine locale" + +#: ../../qt4/settingsdialog.py:719 +msgid "Redirect stdout to /dev/null in cronjobs." +msgstr "Rediriger stdout vers /dev/null dans les travaux cron." + +#: ../../qt4/settingsdialog.py:725 +msgid "Redirect stderr to /dev/null in cronjobs." +msgstr "Rediriger stderr vers /dev/null dans les travaux cron." -#: ../../kde4/settingsdialog.py:611 ../../gnome/settingsdialog.glade:2150 -msgid "Run 'ionice' as cron job (default: enabled)" -msgstr "Executer 'ionice' en tant que tâche planifiée (par defaut: activé)" - -#: ../../kde4/settingsdialog.py:614 ../../gnome/settingsdialog.glade:2167 -msgid "Run 'ionice' when taking a manual snapshot (default: disabled)" -msgstr "" -"Lancer 'ionice' lorsqu'un instantané manuel est lancé (défaut : désactivé)" - -#: ../../kde4/settingsdialog.py:617 ../../gnome/settingsdialog.glade:2184 -msgid "Run 'nice' on remote host (default: disabled)" -msgstr "Exécutez 'nice' sur l'hôte distant (désactivé par défaut)" - -#: ../../kde4/settingsdialog.py:620 ../../gnome/settingsdialog.glade:2201 -msgid "Run 'ionice' on remote host (default: disabled)" -msgstr "Exécutez 'ionice' sur l'hôte distant (désactivé par défaut)" - -#: ../../kde4/settingsdialog.py:626 ../../gnome/settingsdialog.glade:2224 +#: ../../qt4/settingsdialog.py:734 msgid "Limit rsync bandwidth usage: " msgstr "Limiter l'utilisation de bande passante par rsync : " -#: ../../kde4/settingsdialog.py:629 ../../gnome/settingsdialog.glade:2259 +#: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr " KB/sec" -#: ../../kde4/settingsdialog.py:634 ../../gnome/settingsdialog.glade:2280 +#: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "Conserver les autorisations" -#: ../../kde4/settingsdialog.py:637 ../../gnome/settingsdialog.glade:2297 +#: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "Conserver les attributs étendus (xattr)" -#: ../../kde4/settingsdialog.py:640 ../../gnome/settingsdialog.glade:2314 +#: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute links)" msgstr "" "Copier les liens non sécurisés (fonctionne seulement avec les liens absolus)" -#: ../../kde4/settingsdialog.py:643 ../../gnome/settingsdialog.glade:2331 -msgid "Copy links (dereference symbolic links)" -msgstr "Copier les liens (supprime les liens symboliques)" +#: ../../qt4/settingsdialog.py:834 +msgid "Paste additional options to rsync" +msgstr "Passer des options supplémentaires à rsync" -#: ../../kde4/snapshotsdialog.py:46 ../../kde4/snapshotsdialog.py:173 -#: ../../gnome/snapshotsdialog.glade:385 -msgid "Diff Options" -msgstr "Options de comparaison" +#: ../../qt4/settingsdialog.py:837 +msgid "" +"Options must be quoted e.g. --exclude-from=\"/path/to/my exclude file\"." +msgstr "" +"Les options doivent être entourés de double quotte, par exemple: --exclude-" +"from=\"/path/to/my exclude file\"." -#: ../../kde4/snapshotsdialog.py:56 ../../gnome/snapshotsdialog.glade:314 -msgid "Command:" -msgstr "Commande :" +#: ../../qt4/settingsdialog.py:847 +msgid "Add prefix to SSH commands" +msgstr "Ajouter un préfixe aux commandes SSH" -#: ../../kde4/snapshotsdialog.py:60 ../../gnome/snapshotsdialog.glade:322 -msgid "Parameters:" -msgstr "Paramètres :" - -#: ../../kde4/snapshotsdialog.py:64 ../../gnome/snapshotsdialog.glade:334 -msgid "Use %1 and %2 for path parameters" -msgstr "Utilisez %1 et %2 pour les deux chemins" +#: ../../qt4/settingsdialog.py:850 +#, python-format +msgid "" +"Prefix to run before every command on remote host.\n" +"Variables need to be escaped with \\$FOO.\n" +"This doesn't touch rsync. So to add a prefix\n" +"for rsync use \"%(cb_rsync_options)s\" with\n" +"%(rsync_options_value)s\n" +"\n" +"%(default)s: %(def_value)s" +msgstr "" +"Préfixe à lancer avant chaque commande sur l'hôte distant.\n" +"Les variable doivent être échappées avec \\$FOO.\n" +"Cela ne touche pas rsync. Donc pour ajouter un préfixe\n" +"pour rsync, utilisez \"%(cb_rsync_options)s\" avec\n" +"%(rsync_options_value)s\n" +"\n" +"%(default)s : %(def_value)s" -#: ../../kde4/snapshotsdialog.py:123 ../../gnome/snapshotsdialog.glade:184 -#: ../../gnome/snapshotsdialog.glade:186 -msgid "Delete" -msgstr "Supprimer" +#: ../../qt4/settingsdialog.py:858 ../../qt4/settingsdialog.py:1691 +msgid "default" +msgstr "par défaut" -#: ../../kde4/snapshotsdialog.py:128 ../../gnome/snapshotsdialog.glade:199 -#: ../../gnome/snapshotsdialog.glade:201 -msgid "Select All" -msgstr "Tout sélectionner" +#: ../../qt4/settingsdialog.py:875 +msgid "Restore Config" +msgstr "Restaurer la configuration" -#: ../../kde4/snapshotsdialog.py:132 ../../gnome/snapshotsdialog.glade:88 -msgid "List only different snapshots" -msgstr "Lister uniquement les instantanés différents" +#: ../../qt4/settingsdialog.py:891 +msgid "" +"Full system backup can only create a snapshot to be restored to the same " +"physical disk(s) with the same disk partitioning as from the source; " +"restoring to new physical disks or the same disks with different " +"partitioning will yield a potentially broken and unusable system.\n" +"\n" +"Full system backup will override some settings that may have been " +"customized. Continue?" +msgstr "" -#: ../../kde4/snapshotsdialog.py:139 ../../gnome/snapshotsdialog.glade:110 -msgid "List only equal snapshots to: " -msgstr "Liste des instantanés seulement égal à : " +#: ../../qt4/settingsdialog.py:922 +msgid "New profile" +msgstr "Nouveau profil" -#: ../../kde4/snapshotsdialog.py:149 ../../gnome/snapshotsdialog.glade:146 -msgid "Deep check (more accurate, but slow)" -msgstr "Vérification avancée (plus sûre mais lente)" +#: ../../qt4/settingsdialog.py:938 +msgid "Rename profile" +msgstr "Renommer le profil" -#: ../../kde4/snapshotsdialog.py:174 -msgid "Go To" -msgstr "Atteindre" +#: ../../qt4/settingsdialog.py:952 +#, python-format +msgid "Are you sure you want to delete the profile \"%s\" ?" +msgstr "Êtes-vous sûr de vouloir supprimer le profil \"%s\" ?" -#: ../../gnome/logviewdialog.glade:9 -msgid "Log View" -msgstr "Voir le journal" - -#: ../../gnome/logviewdialog.glade:179 -msgid "scroll down automatic" -msgstr "défilement automatique" - -#: ../../gnome/mainwindow.glade:7 -msgid "Back In Time" -msgstr "Back In Time" +#: ../../qt4/settingsdialog.py:1191 +msgid "" +"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " +"*/3 for periodic backups every 3 hours" +msgstr "" +"Les heures personnalisés doivent être séparéesune par une virgule (ex : " +"8,12,18,23) ou */3 pour les sauvegardes périodiques toutes les 3 heures" -#: ../../gnome/mainwindow.glade:45 -msgid "Backup Now" -msgstr "Sauvegarder" +#: ../../qt4/settingsdialog.py:1489 +msgid "Exclude pattern" +msgstr "Exclure selon un modèle" -#: ../../gnome/mainwindow.glade:171 -msgid "Shutdown" -msgstr "Arrêt." +#: ../../qt4/settingsdialog.py:1502 +msgid "Exclude file" +msgstr "Exclure un fichier" -#: ../../gnome/mainwindow.glade:287 -msgid "Parent folder" -msgstr "Dossier parent" +#: ../../qt4/settingsdialog.py:1506 +msgid "Exclude folder" +msgstr "Exclure un dossier" -#: ../../gnome/mainwindow.glade:327 -msgid "Hidden files" -msgstr "Fichiers cachés" +#: ../../qt4/settingsdialog.py:1525 +msgid "Include file" +msgstr "Inclure le fichier" -#: ../../gnome/mainwindow.glade:451 +#: ../../qt4/settingsdialog.py:1533 ../../qt4/settingsdialog.py:1553 +#, python-format msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +"\"%s\" is a symlink. The linked target will not be backed up until you " +"include it, too.\n" +"Would you like to include the symlinks target instead?" msgstr "" -"Ce dossier n'existe pas\n" -"dans la sauvegarde sélectionnée !" +"\"%s\" est un lien symbolique. La cible du lien ne sera pas sauvegardé " +"avant que vous ne l'incluez dans la sauvegarde.\n" +"Voulez vous au contraire inclure le fichier cible?" + +#: ../../qt4/settingsdialog.py:1545 +msgid "Include folder" +msgstr "Inclure un dossier" -#: ../../gnome/settingsdialog.glade:287 -msgid "Where to save snapshots" -msgstr "Dossier pour les sauvegardes" +#: ../../qt4/settingsdialog.py:1572 +msgid "Are you sure you want to change snapshots folder ?" +msgstr "Etes-vous sûr de vouloir changer de dossier des sauvegardes ?" -#: ../../gnome/settingsdialog.glade:483 -msgid "Private key:" -msgstr "Clé privée :" +#: ../../qt4/settingsdialog.py:1688 +msgid "enabled" +msgstr "activé" -#: ../../gnome/settingsdialog.glade:534 -msgid "Advanced SSH Settings" -msgstr "Réglages SSH avancés" - -#: ../../gnome/settingsdialog.glade:552 -msgid "SSH Settings" -msgstr "Réglages SSH" - -#: ../../gnome/settingsdialog.glade:815 -msgid "Password" -msgstr "Mot de passe" +#: ../../qt4/settingsdialog.py:1690 +msgid "disabled" +msgstr "désactivé" -#: ../../gnome/settingsdialog.glade:930 -msgid "Profile Id:" -msgstr "Profil :" +#: ../../qt4/settingsdialog.py:1715 +msgid "Restore Settings" +msgstr "Restaurer les préférences" -#: ../../gnome/settingsdialog.glade:1115 +#: ../../qt4/settingsdialog.py:1732 +msgid " and add your user to group 'fuse'" +msgstr " et ajouter votre utilisateur au groupe 'fuse'" + +#: ../../qt4/settingsdialog.py:1736 +#, python-format msgid "" -"hours seperate by comma ( e.g. 8,12,18,23) or */3 for periodic backups every " -"3 hours (cron style)" +"Please navigate to the snapshot from which you want to restore %(appName)s's " +"configuration. The path may look like: \n" +"%(samplePath)s\n" +"\n" +"If your snapshots are on a remote drive or if they are encrypted you need to " +"manually mount them first. If you use Mode SSH you also may need to set up " +"public key login to the remote host%(addFuse)s.\n" +"Take a look at 'man backintime'." msgstr "" -"heures séparées par des virgules (ex : 8,12,18,23) ou */3 pour les " -"sauvegardes périodiques toutes les 3 heures (de style cron)" +"Merci de naviguer dans l'instantané depuis lequel vous voulez restaurer la " +"configuration de %(appName)s. \n" +"Le chemin doit ressembler à %(samplePath)s\n" +"\n" +"Si vos instantanés sont sur un disque distant ou sont chiffrés, vous devez " +"en premier les monter manuellement. si vous utilisez le mode SSH, vous devez " +"aussi configurer votre clef publique sur le serveur distant %(addFuse)s.\n" +"Regardez la documentation disponible via 'man backintime'." -#: ../../gnome/settingsdialog.glade:1163 -msgid "Schedule" -msgstr "Sauvegarde automatique" +#: ../../qt4/settingsdialog.py:1794 ../../qt4/settingsdialog.py:1854 +msgid "No config found" +msgstr "Aucune configuration trouvé" -#: ../../gnome/settingsdialog.glade:1363 -msgid "Highly recommended:" -msgstr "Fortement recommandé:" +#: ../../qt4/snapshotsdialog.py:49 ../../qt4/snapshotsdialog.py:173 +msgid "Diff Options" +msgstr "Options de comparaison" -#: ../../gnome/settingsdialog.glade:1377 -msgid "label" -msgstr "label" +#: ../../qt4/snapshotsdialog.py:56 +msgid "Command:" +msgstr "Commande :" -#: ../../gnome/settingsdialog.glade:1755 -msgid "week(s)" -msgstr "semaine(s)" +#: ../../qt4/snapshotsdialog.py:60 +msgid "Parameters:" +msgstr "Paramètres :" -#: ../../gnome/settingsdialog.glade:2069 -msgid "Log level:" -msgstr "Niveau de journalisation :" +#: ../../qt4/snapshotsdialog.py:64 +msgid "Use %1 and %2 for path parameters" +msgstr "Utilisez %1 et %2 pour les deux chemins" + +#: ../../qt4/snapshotsdialog.py:106 +msgid "List only different snapshots" +msgstr "Lister uniquement les instantanés différents" + +#: ../../qt4/snapshotsdialog.py:113 +msgid "List only equal snapshots to: " +msgstr "Liste des instantanés seulement égal à : " + +#: ../../qt4/snapshotsdialog.py:123 +msgid "Deep check (more accurate, but slow)" +msgstr "Vérification avancée (plus sûre mais lente)" + +#: ../../qt4/snapshotsdialog.py:144 +msgid "Delete" +msgstr "Supprimer" + +#: ../../qt4/snapshotsdialog.py:148 +msgid "Select All" +msgstr "Tout sélectionner" + +#: ../../qt4/snapshotsdialog.py:161 +msgid "Diff" +msgstr "Comparer" + +#: ../../qt4/snapshotsdialog.py:172 +msgid "Go To" +msgstr "Atteindre" -#: ../../gnome/settingsdialog.glade:2121 +#: ../../qt4/snapshotsdialog.py:326 +msgid "You can't compare a snapshot to itself" +msgstr "Vous ne pouvez pas comparer une sauvegarde à elle-même" + +#: ../../qt4/snapshotsdialog.py:333 +#, python-format +msgid "Command not found: %s" +msgstr "Commande non trouvée : %s" + +#: ../../qt4/snapshotsdialog.py:354 +#, python-format msgid "" -"Change these options only if you really know what you are doing !" +"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" msgstr "" -"Modifiez ces options uniquement si vous savez ce que vous faites !

" +"Voulez-vous vraiment supprimer \"%(file)s\" dans l'instantané " +"\"%(snapshot_id)s ?\n" -#: ../../gnome/snapshotsdialog.glade:263 -msgid "Diff with" -msgstr "Comparer avec" +#: ../../qt4/snapshotsdialog.py:357 +#, python-format +msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +msgstr "" +"Voulez-vous vraiment supprimer \"%(file)s\" dans les instantanés %(count)d " +"?\n" -#: ../../gnome/textinputdialog.glade:7 -msgid "Pattern" -msgstr "Modèle" +#: ../../qt4/snapshotsdialog.py:359 +msgid "WARNING: This can not be revoked!" +msgstr "AVERTISSEMENT: Ce ne peut être révoqué !" -#: ../../gnome/textinputdialog.glade:70 -msgid "Text" -msgstr "Texte" +#: ../../qt4/snapshotsdialog.py:374 +#, python-format +msgid "Exclude \"%s\" from future snapshots?" +msgstr "Exclure \"%s\" des futurs instantanés ?" diff -Nru backintime-1.0.36/common/po/genmessages.sh backintime-1.1.12/common/po/genmessages.sh --- backintime-1.0.36/common/po/genmessages.sh 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/po/genmessages.sh 2016-01-11 18:07:58.000000000 +0000 @@ -1,3 +1,2 @@ #!/bin/bash -#xgettext --output=- ../../**/*.py ../../**/*.glade | msggrep -v -K -e "gtk-" > messages.pot -xgettext --output=- ../../**/*.py ../../**/*.glade > messages.pot +xgettext --output=- ../../common/*.py ../../qt4/*.py > messages.pot diff -Nru backintime-1.0.36/common/po/gl.po backintime-1.1.12/common/po/gl.po --- backintime-1.0.36/common/po/gl.po 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/po/gl.po 2016-01-11 18:07:58.000000000 +0000 @@ -7,207 +7,239 @@ msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2013-11-09 22:34+0100\n" -"PO-Revision-Date: 2014-05-10 12:24+0000\n" +"POT-Creation-Date: 2015-12-19 00:47+0100\n" +"PO-Revision-Date: 2016-01-05 03:22+0000\n" "Last-Translator: Marcos Lans \n" "Language-Team: Galician \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2014-08-06 10:19+0000\n" -"X-Generator: Launchpad (build 17147)\n" +"X-Launchpad-Export-Date: 2016-01-11 17:52+0000\n" +"X-Generator: Launchpad (build 17881)\n" "Language: gl\n" -#: ../../common/config.py:72 +#: ../../common/configfile.py:60 +#, python-format +msgid "Failed to save config: %s" +msgstr "Produciuse un erro gardando a configuración: %s" + +#: ../../common/configfile.py:78 +#, python-format +msgid "Failed to load config: %s" +msgstr "Produciuse un erro gardando a configuración: %s" + +#: ../../common/configfile.py:352 ../../common/configfile.py:414 +#, python-format +msgid "Profile \"%s\" already exists !" +msgstr "O perfil «%s» xa existe" + +#: ../../common/configfile.py:383 +msgid "You can't remove the last profile !" +msgstr "Non pode eliminar o último perfil." + +#: ../../common/config.py:76 msgid "Disabled" msgstr "Desactivado" -#: ../../common/config.py:73 +#: ../../common/config.py:77 msgid "At every boot/reboot" msgstr "En todos os arranques" -#: ../../common/config.py:74 +#: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Cada 5 minutos" -#: ../../common/config.py:75 +#: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Cada 10 minutos" -#: ../../common/config.py:76 +#: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "Cada 30 minutos" -#: ../../common/config.py:77 +#: ../../common/config.py:81 msgid "Every hour" msgstr "Cada hora" -#: ../../common/config.py:78 +#: ../../common/config.py:82 msgid "Every 2 hours" msgstr "Cada dúas horas" -#: ../../common/config.py:79 +#: ../../common/config.py:83 msgid "Every 4 hours" msgstr "Cada 4 horas" -#: ../../common/config.py:80 +#: ../../common/config.py:84 msgid "Every 6 hours" msgstr "Cada 6 horas" -#: ../../common/config.py:81 +#: ../../common/config.py:85 msgid "Every 12 hours" msgstr "Cada 12 horas" -#: ../../common/config.py:82 +#: ../../common/config.py:86 msgid "Custom Hours" msgstr "Horas personalizadas" -#: ../../common/config.py:83 +#: ../../common/config.py:87 msgid "Every Day" msgstr "Todos os días" -#: ../../common/config.py:84 -msgid "Daily (anacron)" -msgstr "Diariamente (anacron)" +#: ../../common/config.py:88 +msgid "Repeatedly (anacron)" +msgstr "Repetidamente (anacron)" -#: ../../common/config.py:85 +#: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "Cando a unidade se conecte (udev)" -#: ../../common/config.py:86 +#: ../../common/config.py:90 msgid "Every Week" msgstr "Todas as semanas" -#: ../../common/config.py:87 +#: ../../common/config.py:91 msgid "Every Month" msgstr "Todos os meses" -#: ../../common/config.py:91 +#: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "día(s)" -#: ../../common/config.py:92 +#: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "semana(s)" -#: ../../common/config.py:93 +#: ../../common/config.py:97 msgid "Year(s)" msgstr "ano(s)" -#: ../../common/config.py:100 +#: ../../common/config.py:101 +msgid "Hour(s)" +msgstr "Hora(s)" + +#: ../../common/config.py:104 +msgid "Month(s)" +msgstr "Mes(es)" + +#: ../../common/config.py:126 ../../qt4/settingsdialog.py:551 msgid " EXPERIMENTAL!" msgstr " EXPERIMENTAL!" -#: ../../common/config.py:103 +#: ../../common/config.py:129 msgid "Local" msgstr "Local" -#: ../../common/config.py:104 +#: ../../common/config.py:130 msgid "SSH" msgstr "SSH" -#: ../../common/config.py:104 ../../common/config.py:106 -#: ../../gnome/settingsdialog.py:475 ../../kde4/settingsdialog.py:1325 +#: ../../common/config.py:130 ../../common/config.py:132 +#: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "Chave privada SSH" -#: ../../common/config.py:105 +#: ../../common/config.py:131 msgid "Local encrypted" msgstr "Cifrado local" -#: ../../common/config.py:105 ../../common/config.py:106 +#: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "Cifrado" -#: ../../common/config.py:106 +#: ../../common/config.py:132 msgid "SSH encrypted" msgstr "Cifrado SSH" -#: ../../common/config.py:112 +#: ../../common/config.py:135 msgid "Default" msgstr "Predeterminado" -#: ../../common/config.py:113 +#: ../../common/config.py:136 msgid "AES128-CTR" msgstr "AES128-CTR" -#: ../../common/config.py:114 +#: ../../common/config.py:137 msgid "AES192-CTR" msgstr "AES192-CTR" -#: ../../common/config.py:115 +#: ../../common/config.py:138 msgid "AES256-CTR" msgstr "AES256-CTR" -#: ../../common/config.py:116 +#: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "ARCFOUR256" -#: ../../common/config.py:117 +#: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "ARCFOUR128" -#: ../../common/config.py:118 +#: ../../common/config.py:141 msgid "AES128-CBC" msgstr "AES128-CBC" -#: ../../common/config.py:119 +#: ../../common/config.py:142 msgid "3DES-CBC" msgstr "3DES-CBC" -#: ../../common/config.py:120 +#: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "Blowfish-CBC" -#: ../../common/config.py:121 +#: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "Cast128-CBC" -#: ../../common/config.py:122 +#: ../../common/config.py:145 msgid "AES192-CBC" msgstr "AES192-CBC" -#: ../../common/config.py:123 +#: ../../common/config.py:146 msgid "AES256-CBC" msgstr "AES256-CBC" -#: ../../common/config.py:124 +#: ../../common/config.py:147 msgid "ARCFOUR" msgstr "ARCFOUR" -#: ../../common/config.py:129 +#: ../../common/config.py:153 msgid "Main profile" msgstr "Perfil principal" -#: ../../common/config.py:256 ../../common/config.py:275 -#: ../../common/config.py:286 ../../common/config.py:291 +#: ../../common/config.py:289 ../../common/config.py:296 +#: ../../common/config.py:307 ../../common/config.py:312 +#: ../../qt4/qt4systrayicon.py:61 #, python-format msgid "Profile: \"%s\"" msgstr "Perfil: «%s»" -#: ../../common/config.py:256 +#: ../../common/config.py:289 msgid "Snapshots folder is not valid !" msgstr "O cartafol das copias de seguranza non é correcto." -#: ../../common/config.py:275 +#: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "Debe escoller polo menos un cartafol para copiar." -#: ../../common/config.py:286 +#: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "Non pode incluír un cartafol da copia de seguranza." -#: ../../common/config.py:291 +#: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "Non pode incluír un sub-cartafol da copia de seguranza." -#: ../../common/config.py:361 +#: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s non é un cartafol." -#: ../../common/config.py:376 ../../common/config.py:389 +#: ../../common/config.py:380 +msgid "Host/User/Profile-ID must not be empty!" +msgstr "O servidor/usuario/ID do perfil non poden estar baleiros." + +#: ../../common/config.py:388 ../../common/config.py:420 #, python-format msgid "" "Can't write to: %s\n" @@ -216,63 +248,77 @@ "Non se pode escribir en:%s\n" "Está certo de ter acceso á escritura?" -#: ../../common/config.py:1286 +#: ../../common/config.py:400 +#, python-format msgid "" -"Can't find crontab.\n" -"Are you sure cron is installed ?\n" -"If not you should disable all automatic backups." +"Destination filesystem for '%(path)s' is formatted with FAT which doesn't " +"support hard-links. Please use a native Linux filesystem." msgstr "" -"Non se atopa «crontab».\n" -"Está certo de que «cron» está instalado?\n" -"Se non o está debería desactivar todas as copias automáticas." +"O sistema de ficheiros de destino de '%(path)s está formatado con FAT o cal " +"non soporta ligazóns fortes. Use un sistema de ficheiros nativo de Linux." -#: ../../common/config.py:1338 +#: ../../common/config.py:405 #, python-format -msgid "Schedule udev doesn't work with mode %s" -msgstr "O programador udev non funciona en modo %s" +msgid "" +"Destination filsystem for '%(path)s' is a SMB mounted share. Please make " +"sure the remote SMB server supports symlinks or activate '%(copyLinks)s' in " +"'%(expertOptions)s'." +msgstr "" +"O sistema de ficheiros de destino %(path)s é unha comparticion montada de " +"SMB. Asegúrese de que o servidor SMB remoto acepta symlinks ou active " +"%(copyLinks)s en %(expertOptions)s." -#: ../../common/config.py:1342 -#, python-format -msgid "Couldn't find UUID for \"%s\"" -msgstr "Non foi posíbel atopar o UUID de \"%s\"" +#: ../../common/config.py:408 ../../qt4/settingsdialog.py:815 +msgid "Copy links (dereference symbolic links)" +msgstr "Copiar as ligazóns (seguir as ligazóns simbólicas aos ficheiros)" -#: ../../common/config.py:1379 -msgid "Failed to remove udev rules" -msgstr "Produciuse un fallo ao eliminar as regras de udev" +#: ../../common/config.py:409 ../../qt4/settingsdialog.py:669 +msgid "Expert Options" +msgstr "Opcións avanzadas" -#: ../../common/config.py:1385 -msgid "Failed to create udev rules" -msgstr "Produciuse un fallo ao crear as regras de udev" +#: ../../common/config.py:411 +#, python-format +msgid "" +"Destination filesystem for '%(path)s is a sshfs mounted share. sshfs doesn't " +"support hard-links. Please use mode 'SSH' instead." +msgstr "" +"O sistema de ficheiros de destino de %(path)s é unha compartición montada de " +"sshfs. sshfs non acepta ligazóns fortes. Use o modo SSH." -#: ../../common/config.py:1420 +#: ../../common/config.py:1407 msgid "" -"Can't find anacron.\n" -"Are you sure anacron is installed ?\n" -"If not you should disable daily anacron backups." +"Can't find crontab.\n" +"Are you sure cron is installed ?\n" +"If not you should disable all automatic backups." msgstr "" -"Non é posíbel encontrar anacron.\n" -"Está instalado anacron?\n" -"Se non é así debería desactivar as copias diarias con el." +"Non se atopa «crontab».\n" +"Está certo de que «cron» está instalado?\n" +"Se non o está debería desactivar todas as copias automáticas." -#: ../../common/config.py:1439 -msgid "Please provide your sudo password to install the udev rule." -msgstr "Introduza o contrasinal sudo para instalar a regra udev." +#: ../../common/config.py:1411 +msgid "Failed to write new crontab." +msgstr "Produciuse un fallo escribindo no novo crontab." -#: ../../common/config.py:1445 -msgid "Please provide your sudo password to remove unused udev rules." +#: ../../common/config.py:1505 +#, python-format +msgid "" +"Could not install Udev rule for profile %(profile_id)s. DBus Service " +"'%(dbus_interface)s' wasn't available" msgstr "" -"Introduza o contrasinal sudo para eliminar as regras udev que non se usan." +"Non foi posíbel instalar a regra de Udev para o perfil %(profile_id)s. O " +"servizo DBus «%(dbus_interface)s» non está dispoñíbel" -#: ../../common/configfile.py:253 ../../common/configfile.py:315 +#: ../../common/config.py:1517 #, python-format -msgid "Profile \"%s\" already exists !" -msgstr "O perfil «%s» xa existe" +msgid "Schedule udev doesn't work with mode %s" +msgstr "O programador udev non funciona en modo %s" -#: ../../common/configfile.py:284 -msgid "You can't remove the last profile !" -msgstr "Non pode eliminar o último perfil." +#: ../../common/config.py:1526 +#, python-format +msgid "Couldn't find UUID for \"%s\"" +msgstr "Non foi posíbel atopar o UUID de \"%s\"" -#: ../../common/encfstools.py:95 +#: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" @@ -283,16 +329,16 @@ "\n" "%(error)s" -#: ../../common/encfstools.py:105 +#: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "Non é posible desmontar encfs %s" -#: ../../common/encfstools.py:149 +#: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "Non se atopou a configuración do cartafol cifrado." -#: ../../common/encfstools.py:153 +#: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" @@ -300,23 +346,23 @@ "\n" "Desexa crear un novo cartafol cifrado?" -#: ../../common/encfstools.py:154 +#: ../../common/encfstools.py:171 msgid "Cancel" msgstr "Cancelar" -#: ../../common/encfstools.py:157 +#: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "Confirme o contrasinal" -#: ../../common/encfstools.py:161 +#: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "O contrasinal non coincide" -#: ../../common/encfstools.py:166 +#: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "Non se atopou encfs. Instale 'apt-get install encfs'" -#: ../../common/encfstools.py:174 ../../common/sshtools.py:207 +#: ../../common/encfstools.py:196 ../../common/sshtools.py:262 #, python-format msgid "" "%(user)s is not member of group 'fuse'.\n" @@ -328,7 +374,7 @@ "sesión.\n" "Vexa 'man backintime' para máis instrucións." -#: ../../common/encfstools.py:189 +#: ../../common/encfstools.py:211 msgid "" "encfs version 1.7.2 and before has a bug with option --reverse. Please " "update encfs" @@ -336,13 +382,12 @@ "A versión de encfs 1.7.2 e anteriores teñen un fallo coa opción --reverse. " "Actualice encfs" -#: ../../common/encfstools.py:453 ../../common/encfstools.py:480 -#: ../../common/snapshots.py:982 ../../common/snapshots.py:1288 -#: ../../kde4/app.py:82 ../../gnome/mainwindow.glade:43 +#: ../../common/encfstools.py:512 ../../common/snapshots.py:1131 +#: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "Facer copia" -#: ../../common/mount.py:195 +#: ../../common/mount.py:204 #, python-format msgid "" "Hash collision occurred in hash_id %s. Incrementing global value " @@ -351,30 +396,29 @@ "Produciuse un conflito de hash no hash_id %s. Incremente o valor global " "hash_collision e probe de novo." -#: ../../common/mount.py:246 +#: ../../common/mount.py:259 #, python-format msgid "mountpoint %s not empty." msgstr "o punto de montaxe %s non está libre." -#: ../../common/mount.py:286 +#: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "Tempo de espera do bloqueo do proceso de montaxe" -#: ../../common/password.py:425 +#: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "Perfil '%(profile)s': Introduza o contrasinal para %(mode)s: " -#: ../../common/snapshots.py:171 ../../gnome/app.py:1127 -#: ../../kde4/app.py:1014 +#: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Agora" -#: ../../common/snapshots.py:182 ../../gnome/gnometools.py:37 +#: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "HAI ERROS" -#: ../../common/snapshots.py:282 +#: ../../common/snapshots.py:344 msgid "" "### This log has been decoded with automatic search pattern\n" "### If some paths are not decoded you can manually decode them with:\n" @@ -382,15 +426,20 @@ "### Este rexistro decodificouse cun patrón de busca automático\n" "### Se algunhas rutas non están decodificadas pode facelo manualmente con:\n" -#: ../../common/snapshots.py:465 +#: ../../common/snapshots.py:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "FALLOU" -#: ../../common/snapshots.py:564 +#: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "Restabelecer permisos:" -#: ../../common/snapshots.py:739 +#: ../../common/snapshots.py:752 ../../qt4/app.py:377 ../../qt4/app.py:675 +#: ../../qt4/app.py:692 ../../qt4/qt4systrayicon.py:65 +msgid "Done" +msgstr "Feito" + +#: ../../common/snapshots.py:860 msgid "" "Back In Time changed its backup format.\n" "\n" @@ -400,7 +449,7 @@ "\n" "As copias de seguranza vellas poden migrar a este formato. Está de acordo?" -#: ../../common/snapshots.py:749 +#: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" @@ -418,7 +467,7 @@ "\n" "(O programa será quen de diferencialos)" -#: ../../common/snapshots.py:752 +#: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" @@ -426,7 +475,7 @@ "Non se atoparon perfís. Terá que actualizar os perfís primeiro, reinicie o " "Back In Time" -#: ../../common/snapshots.py:803 +#: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" @@ -450,7 +499,7 @@ "Senón Back In Time restablecerá a configuración antiga deste perfil pero " "non continuará facendo copias." -#: ../../common/snapshots.py:812 +#: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" @@ -465,7 +514,7 @@ "Pode mover as copias manualmente,\n" "se xa rematou, reinicie o aplicativo para continuar." -#: ../../common/snapshots.py:825 +#: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" @@ -475,7 +524,7 @@ "\n" "Back In Time continuará facendo as copias de seguranza na forma programada" -#: ../../common/snapshots.py:830 +#: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" @@ -495,12 +544,12 @@ "\n" "En caso negativo preguntaráselle de novo a próxima vez que inicie o programa." -#: ../../common/snapshots.py:839 +#: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "" "Back In Time continuará a facer as copias de seguranza programadas de novo" -#: ../../common/snapshots.py:841 +#: ../../common/snapshots.py:953 msgid "" "Back In Time still cannot continue taking new snapshots.\n" "Restart Back In Time to see the questions again" @@ -508,7 +557,11 @@ "Back In Time aínda non pode facer unha copia de seguranza.\n" "Reinicie o aplicativo para ver as preguntas de novo" -#: ../../common/snapshots.py:913 +#: ../../common/snapshots.py:972 +msgid "Deferring backup while on battery" +msgstr "Atraso da copia no modo batería" + +#: ../../common/snapshots.py:1035 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it." @@ -516,106 +569,113 @@ "Non se pode atopar o cartafol de copias de seguranza.\n" "Se está nun dispositivo extraíbel débeo conectar." -#: ../../common/snapshots.py:915 +#: ../../common/snapshots.py:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "Agardando %s segundo." msgstr[1] "Agardando %s segundos." -#: ../../common/snapshots.py:941 +#: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "Produciuse un fallo durante a copia %s." -#: ../../common/snapshots.py:950 +#: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "Rematando" -#: ../../common/snapshots.py:1088 +#: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "Non se pode crear o cartafol: %s" -#: ../../common/snapshots.py:1107 +#: ../../common/snapshots.py:1217 msgid "..." msgstr "..." -#: ../../common/snapshots.py:1134 +#: ../../common/snapshots.py:1238 +#, python-format +msgid "Found leftover '%s' which can be continued." +msgstr "Atopáronse restos en «%s» desde os cales se pode continuar." + +#: ../../common/snapshots.py:1250 +#, python-format +msgid "Remove leftover '%s' folder from last run" +msgstr "Eliminar o cartafol «%s» con restos da última execución" + +#: ../../common/snapshots.py:1263 #, python-format msgid "Can't remove folder: %s" msgstr "Non se pode eliminar o cartafol: %s" -#: ../../common/snapshots.py:1219 +#: ../../common/snapshots.py:1340 #, python-format msgid "Compare with snapshot %s" msgstr "comparando coa copia %s" -#: ../../common/snapshots.py:1248 +#: ../../common/snapshots.py:1360 msgid "Create hard-links" -msgstr "creando ligazóns fortes" +msgstr "creando ligazóns físicas" -#: ../../common/snapshots.py:1335 +#: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "gardando o ficheiro de config ..." -#: ../../common/snapshots.py:1341 +#: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "gardando os permisos..." -#: ../../common/snapshots.py:1442 +#: ../../common/snapshots.py:1470 +msgid "Save permission over ssh failed. Retry normal method" +msgstr "" +"Produciuse un fallo ao gardar os permisos sobre ssh. Reintentar o método " +"normal." + +#: ../../common/snapshots.py:1521 #, python-format msgid "Can't rename %(new_path)s to %(path)s" msgstr "Non é posible renomear %(new_path)s a %(path)s" -#: ../../common/snapshots.py:1562 -msgid "Remove old snapshots" -msgstr "Eliminar as copias de seguranza antigas" - -#: ../../common/snapshots.py:1586 ../../kde4/settingsdialog.py:501 -#: ../../gnome/settingsdialog.glade:1660 +#: ../../common/snapshots.py:1695 ../../common/snapshots.py:1728 +#: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "Eliminación intelixente" -#: ../../common/snapshots.py:1591 +#: ../../common/snapshots.py:1704 +msgid "Remove old snapshots" +msgstr "Eliminar as copias de seguranza antigas" + +#: ../../common/snapshots.py:1733 msgid "Try to keep min free space" msgstr "Tentar preservar o espazo libre mínimo" -#: ../../common/snapshots.py:1621 +#: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "Tentar manter un mínimo de %d%% inodos libres" -#: ../../common/sshtools.py:106 +#: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "Non é posible montar %s" -#: ../../common/sshtools.py:113 +#: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "Non é posible desmontar sshfs %s" -#: ../../common/sshtools.py:187 -#, python-format -msgid "" -"Failed to unlock SSH private key:\n" -"Error: %s" -msgstr "" -"Fallou o desbloqueo da chave privada SSH:\n" -"Erro: %s" - -#: ../../common/sshtools.py:194 +#: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "Non foi posible" -#: ../../common/sshtools.py:199 +#: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "Non se encontrou sshfs. Instáleo p.e: 'apt-get install sshfs'" -#: ../../common/sshtools.py:217 +#: ../../common/sshtools.py:278 #, python-format msgid "" "Password-less authentication for %(user)s@%(host)s failed. Look at 'man " @@ -624,7 +684,7 @@ "Fallou a autenticación de %(user)s@%(host)s. Vexa 'man backintime' para máis " "instrucións." -#: ../../common/sshtools.py:229 +#: ../../common/sshtools.py:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" @@ -633,12 +693,12 @@ "Fallou o cifrado %(cipher)s para %(host)s:\n" "%(err)s" -#: ../../common/sshtools.py:254 +#: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "%s non se encotrou en ssh_known_hosts." -#: ../../common/sshtools.py:274 +#: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" @@ -647,7 +707,7 @@ "A ruta remota existe pero non é un cartafol:\n" " %s" -#: ../../common/sshtools.py:276 +#: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" @@ -656,7 +716,7 @@ "A ruta remota non permite a escritura:\n" " %s" -#: ../../common/sshtools.py:278 +#: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" @@ -665,7 +725,7 @@ "A ruta remota non é executable:\n" " %s" -#: ../../common/sshtools.py:280 +#: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" @@ -674,12 +734,12 @@ "Non foi posible crear a ruta remota:\n" " %s" -#: ../../common/sshtools.py:302 +#: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "Fallou o ping %s. O servidor está caído ou o enderezo é incorrecto." -#: ../../common/sshtools.py:325 ../../common/sshtools.py:383 +#: ../../common/sshtools.py:423 ../../common/sshtools.py:553 #, python-format msgid "" "Remote host %(host)s doesn't support '%(command)s':\n" @@ -690,7 +750,7 @@ "%(err)s\n" "Mire 'man backintime' para máis instrucións" -#: ../../common/sshtools.py:387 +#: ../../common/sshtools.py:556 #, python-format msgid "" "Check commands on host %(host)s returned unknown error:\n" @@ -702,96 +762,156 @@ "%(err)s\n" "Mire 'man backintime' para máis instrucións" -#: ../../common/sshtools.py:400 +#: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "O servidor remoto %s non admite hardlinks" -#: ../../gnome/app.py:185 ../../gnome/app.py:594 ../../gnome/app.py:608 -#: ../../kde4/app.py:299 ../../kde4/app.py:570 ../../kde4/app.py:587 -msgid "Done" -msgstr "Feito" +#: ../../qt4/app.py:81 +msgid "Refresh snapshots list" +msgstr "Actualizar a lista de copias de seguranza" + +#: ../../qt4/app.py:85 ../../qt4/app.py:890 +msgid "Snapshot Name" +msgstr "Nome da copia de seguranza" + +#: ../../qt4/app.py:88 +msgid "Remove Snapshot" +msgstr "Eliminar a copia de seguranza" + +#: ../../qt4/app.py:91 +msgid "View Snapshot Log" +msgstr "Ver o rexistro de copias de seguranza" + +#: ../../qt4/app.py:94 +msgid "View Last Log" +msgstr "Ver o último rexistro" + +#: ../../qt4/app.py:99 ../../qt4/settingsdialog.py:51 +msgid "Settings" +msgstr "Configuración" + +#: ../../qt4/app.py:104 +msgid "Shutdown" +msgstr "Apagar" + +#: ../../qt4/app.py:105 +msgid "Shutdown system after snapshot has finished." +msgstr "Sistema de apagado do sistema ao rematar a copia de seguranza." + +#: ../../qt4/app.py:111 +msgid "Exit" +msgstr "Saír" -#: ../../gnome/app.py:189 ../../kde4/app.py:143 ../../kde4/app.py:159 -#: ../../gnome/mainwindow.glade:225 +#: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 msgid "Help" msgstr "Axuda" -#: ../../gnome/app.py:191 ../../kde4/app.py:146 -#: ../../gnome/mainwindow.glade:223 +#: ../../qt4/app.py:122 +msgid "Config File Help" +msgstr "Axuda para o ficheiro de configuración" + +#: ../../qt4/app.py:125 msgid "Website" msgstr "Sitio web" -#: ../../gnome/app.py:192 ../../kde4/app.py:148 +#: ../../qt4/app.py:127 ../../qt4/app.py:982 +msgid "Changelog" +msgstr "Rexistro de cambios" + +#: ../../qt4/app.py:129 msgid "FAQ" msgstr "FAQ" -#: ../../gnome/app.py:193 ../../kde4/app.py:150 +#: ../../qt4/app.py:131 msgid "Ask a question" msgstr "Fai unha pregunta" -#: ../../gnome/app.py:194 ../../kde4/app.py:152 +#: ../../qt4/app.py:133 msgid "Report a bug" msgstr "Informar dun erro" -#: ../../gnome/app.py:196 ../../kde4/app.py:155 +#: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "Sobre" -#: ../../gnome/app.py:202 ../../gnome/app.py:887 -#: ../../gnome/restoredialog.py:84 ../../gnome/snapshotsdialog.py:83 -#: ../../gnome/snapshotsdialog.py:244 ../../kde4/app.py:206 -#: ../../kde4/app.py:216 ../../kde4/restoredialog.py:68 -#: ../../kde4/snapshotsdialog.py:111 ../../kde4/snapshotsdialog.py:117 -#: ../../gnome/mainwindow.glade:350 ../../gnome/mainwindow.glade:352 -#: ../../gnome/snapshotsdialog.glade:169 ../../gnome/snapshotsdialog.glade:171 +#: ../../qt4/app.py:163 +msgid "Up" +msgstr "Arriba" + +#: ../../qt4/app.py:174 ../../qt4/settingsdialog.py:1776 +msgid "Show hidden files" +msgstr "Mostrar os ficheiros ocultos" + +#: ../../qt4/app.py:184 ../../qt4/app.py:199 ../../qt4/app.py:233 +#: ../../qt4/restoredialog.py:62 ../../qt4/settingsdialog.py:1818 +#: ../../qt4/snapshotsdialog.py:134 ../../qt4/snapshotsdialog.py:139 msgid "Restore" msgstr "Restaurar" -#: ../../gnome/app.py:203 ../../gnome/app.py:888 ../../gnome/gnometools.py:67 -#: ../../gnome/snapshotsdialog.py:84 ../../gnome/snapshotsdialog.py:245 -#: ../../kde4/app.py:208 ../../kde4/restoredialog.py:42 -#: ../../kde4/snapshotsdialog.py:113 +#: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 +#: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "Restablecer como ..." -#: ../../gnome/app.py:205 ../../gnome/app.py:896 ../../gnome/app.py:1146 -#: ../../kde4/app.py:1041 -#, python-format -msgid "Restore '%s'" -msgstr "Restabelecer '%s'" +#: ../../qt4/app.py:194 +msgid "Restore and delete new files" +msgstr "Restabelecer e eliminar os ficheiros novos" -#: ../../gnome/app.py:207 ../../gnome/app.py:897 ../../gnome/app.py:1147 -#: ../../kde4/app.py:1042 +#: ../../qt4/app.py:201 #, python-format -msgid "Restore '%s' to ..." -msgstr "Restabelecer '%s' como ..." +msgid "" +"Restore selected file or folder.\n" +"If this button is grayed out this is most likely because \"%(now)s\" is " +"selected in left hand snapshots list." +msgstr "" +"Restabelecer o ficheiro ou cartafol seleccionado.\n" +"Se este botón está en gris probabelmente «%(now)s» está seleccionado na " +"lista de copias da esquerda." + +#: ../../qt4/app.py:206 ../../qt4/logviewdialog.py:67 +#: ../../qt4/qt4tools.py:160 ../../qt4/snapshotsdialog.py:96 +msgid "Snapshots" +msgstr "Copias de seguranza" -#: ../../gnome/app.py:226 ../../kde4/app.py:235 +#: ../../qt4/app.py:213 +msgid "Snapshot" +msgstr "Copia de seguranza" + +#: ../../qt4/app.py:224 +msgid "View" +msgstr "Ver" + +#: ../../qt4/app.py:277 msgid "Shortcuts" msgstr "Atallos" -#: ../../gnome/app.py:249 -msgid "Name" -msgstr "Nome" - -#: ../../gnome/app.py:260 -msgid "Size" -msgstr "Tamaño" - -#: ../../gnome/app.py:267 -msgid "Date" -msgstr "Data" - -#: ../../gnome/app.py:286 ../../gnome/app.py:883 -#: ../../gnome/snapshotsdialog.py:116 ../../kde4/app.py:171 -#: ../../kde4/app.py:221 ../../kde4/snapshotsdialog.py:91 -#: ../../gnome/mainwindow.glade:366 ../../gnome/mainwindow.glade:368 -#: ../../gnome/snapshotsdialog.glade:8 -msgid "Snapshots" -msgstr "Copias de seguranza" +#: ../../qt4/app.py:295 +msgid "" +"This folder doesn't exist\n" +"in the current selected snapshot!" +msgstr "" +"Este cartafol non existe\n" +"na actual imaxe seleccionada." + +#: ../../qt4/app.py:359 +msgid "Add to Include" +msgstr "Engadir a incluír" + +#: ../../qt4/app.py:360 +msgid "Add to Exclude" +msgstr "Engadir a excluír" + +#: ../../qt4/app.py:416 +#, python-format +msgid "" +"%(appName)s is not configured. Would you like to restore a previous " +"configuration?" +msgstr "" +"%(appName)s non está configurado. Desexa restabelecer unha configuración " +"anterior?" -#: ../../gnome/app.py:348 ../../kde4/app.py:362 +#: ../../qt4/app.py:440 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it and then press OK" @@ -799,413 +919,355 @@ "Non se pode atopar o cartafol de copias de seguranza.\n" "Se está nun dispositivo extraíbel débeo conectar e premer «Aceptar»" -#: ../../gnome/app.py:611 ../../kde4/app.py:590 -msgid "Done, no backup needed" -msgstr "Rematado, non foi necesario facer unha copia de seguranza" +#: ../../qt4/app.py:473 +msgid "" +"If you close this window Back In Time will not be able to shutdown your " +"system when the snapshot has finished.\n" +"Do you really want to close?" +msgstr "" +"Se pecha esta xanela Back In Time non poderá apagar o seu sistema cando " +"remate a copia de seguranza.\n" +"Desexa pechala?" -#: ../../gnome/app.py:619 ../../kde4/app.py:598 +#: ../../qt4/app.py:667 ../../qt4/app.py:703 msgid "Working:" msgstr "En proceso:" -#: ../../gnome/app.py:623 ../../kde4/app.py:602 +#: ../../qt4/app.py:695 +msgid "Done, no backup needed" +msgstr "Rematado, non foi necesario facer unha copia de seguranza" + +#: ../../qt4/app.py:707 msgid "Error:" msgstr "Produciuse un erro" -#: ../../gnome/app.py:636 ../../kde4/app.py:649 +#: ../../qt4/app.py:726 ../../qt4/qt4systrayicon.py:153 +msgid "Sent:" +msgstr "Enviado:" + +#: ../../qt4/app.py:727 ../../qt4/qt4systrayicon.py:154 +msgid "Speed:" +msgstr "Velocidade:" + +#: ../../qt4/app.py:728 ../../qt4/qt4systrayicon.py:155 +msgid "ETA:" +msgstr "Tempo:" + +#: ../../qt4/app.py:777 msgid "Global" msgstr "Global" -#: ../../gnome/app.py:637 ../../kde4/app.py:650 +#: ../../qt4/app.py:778 msgid "Root" msgstr "Root" -#: ../../gnome/app.py:638 ../../kde4/app.py:651 +#: ../../qt4/app.py:779 msgid "Home" msgstr "Inicio" -#: ../../gnome/app.py:662 -msgid "Bookmarks" -msgstr "Marcadores" - -#: ../../gnome/app.py:675 ../../kde4/app.py:662 +#: ../../qt4/app.py:794 msgid "Backup folders" msgstr "Cartafoles para copiar" -#: ../../gnome/app.py:701 ../../kde4/app.py:734 -msgid "Today" -msgstr "Hoxe" - -#: ../../gnome/app.py:705 ../../kde4/app.py:738 -msgid "Yesterday" -msgstr "Onte" - -#: ../../gnome/app.py:709 ../../kde4/app.py:742 -msgid "This week" -msgstr "Esta semana" +#: ../../qt4/app.py:849 +msgid "This is NOT a snapshot but a live view of your local files" +msgstr "Esta NON é unha copia senón unha vista actual dos ficheiros locais" -#: ../../gnome/app.py:713 ../../kde4/app.py:746 -msgid "Last week" -msgstr "A semana pasada" +#: ../../qt4/app.py:860 ../../qt4/app.py:1476 +#, python-format +msgid "Last check %s" +msgstr "Última comprobación %s" -#: ../../gnome/app.py:764 ../../kde4/app.py:398 +#: ../../qt4/app.py:928 +#, python-format msgid "" -"If you close this window Back In Time will not be able to shutdown your " -"system when the snapshot has finished.\n" -"Do you really want to close?" +"Are you sure you want to remove the snapshot:\n" +"%s" msgstr "" -"Se pecha esta xanela Back In Time non poderá apagar o seu sistema cando " -"remate a copia de seguranza.\n" -"Desexa pechala?" +"Está certo de querer eliminar a copia de seguranza?:\n" +"%s" -#: ../../gnome/app.py:881 ../../gnome/snapshotsdialog.py:238 -msgid "Open" -msgstr "Abrir" +#: ../../qt4/app.py:1004 +#, python-format +msgid "" +"Backup local files before overwriting or\n" +"removing with trailing '%(suffix)s'." +msgstr "" +"Copiar os ficheiros locais antes de sobrescribir ou\n" +"retiralos engadíndolles un «%(suffix)s» final." -#: ../../gnome/app.py:1056 ../../kde4/app.py:90 ../../kde4/app.py:805 -#: ../../gnome/mainwindow.glade:73 ../../gnome/mainwindow.glade:75 -msgid "Snapshot Name" -msgstr "Nome da copia de seguranza" +#: ../../qt4/app.py:1010 +msgid "" +"Are you sure you want to remove all newer files in your original folder?" +msgstr "" +"Seguro que desexa eliminar todos os ficheiros novos do cartafol orixinal?" -#: ../../gnome/app.py:1075 -#, python-format +#: ../../qt4/app.py:1014 msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +"WARNING: deleting files in filesystem root could break your whole system!!!" msgstr "" -"Esta certo de querer eliminar a copia de seguranza?:\n" -"%s" +"AVISO: a eliminación de ficheiros no sistema raíz pode estragar todo o " +"sistema!!" + +#: ../../qt4/app.py:1016 +msgid "Files to be restored:" +msgstr "Ficheiros para restabelecer:" -#: ../../gnome/app.py:1123 ../../kde4/app.py:1010 +#: ../../qt4/app.py:1031 +msgid "Do you really want to restore this files(s):" +msgstr "Confirma o restabelecemento destes ficheiros:" + +#: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "Copia de seguranza: %s" -#: ../../gnome/app.py:1124 ../../kde4/app.py:1011 +#: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "Ver a copia de seguranza feita en %s" -#: ../../gnome/app.py:1126 ../../kde4/app.py:1013 +#: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "Ver o contido do disco actual" -#: ../../gnome/logviewdialog.py:106 ../../gnome/settingsdialog.py:414 -#: ../../kde4/logviewdialog.py:83 ../../kde4/settingsdialog.py:590 +#: ../../qt4/app.py:1268 +#, python-format +msgid "Restore '%s'" +msgstr "Restabelecer '%s'" + +#: ../../qt4/app.py:1269 +#, python-format +msgid "Restore '%s' to ..." +msgstr "Restabelecer '%s' como ..." + +#: ../../qt4/app.py:1270 +#, python-format +msgid "Restore '%s' and delete new files" +msgstr "Restabelecer «%s» e eliminar os ficheiros novos" + +#: ../../qt4/app.py:1368 ../../qt4/app.py:1385 +msgid "Authors" +msgstr "Autores" + +#: ../../qt4/app.py:1369 ../../qt4/app.py:1388 +msgid "Translations" +msgstr "Traducións" + +#: ../../qt4/app.py:1370 ../../qt4/app.py:1391 +msgid "License" +msgstr "Licenza" + +#: ../../qt4/logviewdialog.py:49 +msgid "Last Log View" +msgstr "Última visualización do rexistro" + +#: ../../qt4/logviewdialog.py:51 +msgid "Snapshot Log View" +msgstr "Visualización do rexistro da imaxe" + +#: ../../qt4/logviewdialog.py:59 ../../qt4/settingsdialog.py:59 +#: ../../qt4/settingsdialog.py:274 ../../qt4/settingsdialog.py:1899 +msgid "Profile:" +msgstr "Perfil:" + +#: ../../qt4/logviewdialog.py:81 +msgid "Filter:" +msgstr "Filtro:" + +#: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 msgid "All" msgstr "Todo" -#: ../../gnome/logviewdialog.py:107 ../../gnome/settingsdialog.py:412 -#: ../../kde4/logviewdialog.py:84 ../../kde4/settingsdialog.py:588 +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 +#: ../../qt4/settingsdialog.py:657 msgid "Errors" msgstr "Erros" -#: ../../gnome/logviewdialog.py:112 ../../kde4/logviewdialog.py:89 +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 msgid "Changes" msgstr "Cambios" -#: ../../gnome/logviewdialog.py:115 ../../kde4/logviewdialog.py:92 +#: ../../qt4/logviewdialog.py:92 msgid "Informations" msgstr "Informacións" -#: ../../gnome/settingsdialog.py:235 ../../kde4/settingsdialog.py:387 -msgid "Include files and folders" -msgstr "Incluír os ficheiros e os cartafoles" +#: ../../qt4/logviewdialog.py:101 +msgid "[E] Error, [I] Information, [C] Change" +msgstr "[E] Erro, [I] Información, [C] Cambio" -#: ../../gnome/settingsdialog.py:264 -msgid "Exclude patterns, files or folders" -msgstr "Excluír os patróns, ficheiros ou cartafoles" +#: ../../qt4/logviewdialog.py:104 +msgid "decode paths" +msgstr "decodificar rutas" -#: ../../gnome/settingsdialog.py:411 ../../kde4/settingsdialog.py:587 -msgid "None" -msgstr "Ningún" +#: ../../qt4/messagebox.py:56 +msgid "Error" +msgstr "Erro" + +#: ../../qt4/messagebox.py:62 ../../qt4/messagebox.py:68 +msgid "Question" +msgstr "Pregunta" + +#: ../../qt4/qt4systrayicon.py:69 +msgid "Start BackInTime" +msgstr "Iniciar BackInTime" -#: ../../gnome/settingsdialog.py:413 ../../kde4/settingsdialog.py:589 -msgid "Changes & Errors" -msgstr "Cambios e erros" +#: ../../qt4/qt4systrayicon.py:124 +msgid "Working..." +msgstr "En proceso..." -#: ../../gnome/settingsdialog.py:458 -msgid "Snapshots folder" -msgstr "Cartafol de copias de seguranza" +#: ../../qt4/qt4tools.py:178 +msgid "Today" +msgstr "Hoxe" -#: ../../gnome/settingsdialog.py:466 ../../kde4/settingsdialog.py:1314 -msgid "Are you sure you want to change snapshots folder ?" -msgstr "Está certo de querer cambiar o cartafol de copias de seguranza?" +#: ../../qt4/qt4tools.py:183 +msgid "Yesterday" +msgstr "Onte" -#: ../../gnome/settingsdialog.py:901 ../../kde4/settingsdialog.py:914 -msgid "" -"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " -"*/3 for periodic backups every 3 hours" -msgstr "" -"As horas personalizadas só poden ser unha lista de horas separadas por comas " -"(p.e: 8,12,18,23) ou */3 para copias periódicas cada 3 horas" - -#: ../../gnome/settingsdialog.py:1141 ../../kde4/settingsdialog.py:653 -msgid "New profile" -msgstr "Perfil novo" - -#: ../../gnome/settingsdialog.py:1155 ../../kde4/settingsdialog.py:669 -msgid "Rename profile" -msgstr "Renomear o perfil" - -#: ../../gnome/settingsdialog.py:1167 ../../kde4/settingsdialog.py:683 -#, python-format -msgid "Are you sure you want to delete the profile \"%s\" ?" -msgstr "Está certo de eliminar o perfil \"%s\" ?" - -#: ../../gnome/settingsdialog.py:1173 ../../kde4/settingsdialog.py:1292 -msgid "Include folder" -msgstr "Incluír o cartafol" - -#: ../../gnome/settingsdialog.py:1193 ../../kde4/settingsdialog.py:1278 -msgid "Include file" -msgstr "Incluír o ficheiro" - -#: ../../gnome/settingsdialog.py:1235 ../../kde4/settingsdialog.py:1241 -msgid "Exclude pattern" -msgstr "Excluír o patrón" - -#: ../../gnome/settingsdialog.py:1240 ../../kde4/settingsdialog.py:1251 -msgid "Exclude patterns can't contain ':' char !" -msgstr "Un patrón de exclusión non poden conter o caracter «:»" - -#: ../../gnome/settingsdialog.py:1246 ../../kde4/settingsdialog.py:1257 -msgid "Exclude file" -msgstr "Excluír o ficheiro" - -#: ../../gnome/settingsdialog.py:1257 ../../kde4/settingsdialog.py:1261 -msgid "Exclude folder" -msgstr "Excluír o cartafol" - -#: ../../gnome/snapshotsdialog.py:240 -msgid "Jump to" -msgstr "Ir a" - -#: ../../gnome/snapshotsdialog.py:248 ../../kde4/snapshotsdialog.py:164 -msgid "Diff" -msgstr "Diferenzas" - -#: ../../gnome/snapshotsdialog.py:277 ../../kde4/snapshotsdialog.py:339 -msgid "You can't compare a snapshot to itself" -msgstr "Non pode comparar unha copia de seguranza con ela mesma" - -#: ../../gnome/snapshotsdialog.py:284 ../../kde4/snapshotsdialog.py:346 -#, python-format -msgid "Command not found: %s" -msgstr "Non se atopou a orde: %s" - -#: ../../gnome/snapshotsdialog.py:307 ../../kde4/snapshotsdialog.py:367 -#, python-format -msgid "" -"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" -msgstr "" -"Está certo de eliminar \"%(file)s\" na copia de seguranza " -"\"%(snapshot_id)s?\n" - -#: ../../gnome/snapshotsdialog.py:310 ../../kde4/snapshotsdialog.py:370 -#, python-format -msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" -msgstr "" -"Está certo de eliminar \"%(file)s\" en %(count)d copias de seguranza?\n" - -#: ../../gnome/snapshotsdialog.py:312 ../../kde4/snapshotsdialog.py:372 -msgid "WARNING: This can not be revoked!" -msgstr "AVISO: isto non se pode revogar" - -#: ../../gnome/snapshotsdialog.py:317 ../../kde4/snapshotsdialog.py:377 -#, python-format -msgid "Exclude \"%s\" from future snapshots?" -msgstr "Quere excluír \"%s\" de copias de seguranza futuras?" - -#: ../../kde4/app.py:86 ../../gnome/mainwindow.glade:58 -#: ../../gnome/mainwindow.glade:60 -msgid "Refresh snapshots list" -msgstr "Actualizar a lista de copias de seguranza" - -#: ../../kde4/app.py:94 ../../gnome/mainwindow.glade:88 -#: ../../gnome/mainwindow.glade:90 -msgid "Remove Snapshot" -msgstr "Eliminar a copia de seguranza" - -#: ../../kde4/app.py:98 ../../gnome/mainwindow.glade:105 -msgid "View Snapshot Log" -msgstr "Ver o rexistro de copias de seguranza" - -#: ../../kde4/app.py:102 ../../gnome/mainwindow.glade:121 -msgid "View Last Log" -msgstr "Ver o último rexistro" - -#: ../../kde4/app.py:108 ../../kde4/settingsdialog.py:69 -#: ../../gnome/mainwindow.glade:144 ../../gnome/mainwindow.glade:146 -#: ../../gnome/settingsdialog.glade:7 -msgid "Settings" -msgstr "Configuración" - -#: ../../kde4/app.py:124 ../../gnome/mainwindow.glade:169 -msgid "Shutdown system after snapshot has finished." -msgstr "Sistema de apagado do sistema ao rematar a copia de seguranza." - -#: ../../kde4/app.py:131 ../../gnome/mainwindow.glade:184 -#: ../../gnome/mainwindow.glade:186 -msgid "Exit" -msgstr "Saír" - -#: ../../kde4/app.py:186 ../../gnome/mainwindow.glade:289 -msgid "Up" -msgstr "Arriba" - -#: ../../kde4/app.py:199 ../../gnome/mainwindow.glade:325 -msgid "Show hidden files" -msgstr "Mostrar os ficheiros ocultos" - -#: ../../kde4/app.py:244 -msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" -msgstr "" -"Este cartafol non existe\n" -"na copia de seguranza actual." - -#: ../../kde4/app.py:839 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" -msgstr "" -"Está certo de querer eliminar a copia de seguranza?:\n" -"%s" - -#: ../../kde4/app.py:1140 ../../kde4/kde4systrayicon.py:117 -msgid "Working..." -msgstr "En proceso..." - -#: ../../kde4/logviewdialog.py:55 -msgid "Error Log View" -msgstr "Ver o rexistro de erros" - -#: ../../kde4/logviewdialog.py:65 ../../kde4/settingsdialog.py:79 -#: ../../kde4/settingsdialog.py:293 ../../gnome/logviewdialog.glade:73 -#: ../../gnome/settingsdialog.glade:72 -msgid "Profile:" -msgstr "Perfil:" - -#: ../../kde4/logviewdialog.py:77 ../../gnome/logviewdialog.glade:110 -msgid "Filter:" -msgstr "Filtro:" +#: ../../qt4/qt4tools.py:188 +msgid "This week" +msgstr "Esta semana" -#: ../../kde4/logviewdialog.py:100 ../../gnome/logviewdialog.glade:169 -msgid "[E] Error, [I] Information, [C] Change" -msgstr "[E] Erro, [I] Información, [C] Cambio" +#: ../../qt4/qt4tools.py:193 +msgid "Last week" +msgstr "A semana pasada" -#: ../../kde4/logviewdialog.py:103 ../../gnome/logviewdialog.glade:195 -msgid "decode paths" -msgstr "decodificar rutas" +#: ../../qt4/restoredialog.py:75 +msgid "Show full Log" +msgstr "Mostrar o rexistro completo" -#: ../../kde4/settingsdialog.py:88 +#: ../../qt4/settingsdialog.py:68 msgid "Edit" msgstr "Editar" -#: ../../kde4/settingsdialog.py:106 ../../gnome/settingsdialog.glade:1207 +#: ../../qt4/settingsdialog.py:73 +msgid "Modify for Full System Backup" +msgstr "Modificar para copias de seguranza de todo o sistema" + +#: ../../qt4/settingsdialog.py:77 ../../qt4/settingsdialog.py:451 +msgid "Add" +msgstr "Engadir" + +#: ../../qt4/settingsdialog.py:81 ../../qt4/settingsdialog.py:408 +#: ../../qt4/settingsdialog.py:467 +msgid "Remove" +msgstr "Eliminar" + +#: ../../qt4/settingsdialog.py:96 msgid "General" msgstr "Xeral" -#: ../../kde4/settingsdialog.py:114 ../../gnome/settingsdialog.glade:199 +#: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "Modo:" -#: ../../kde4/settingsdialog.py:127 ../../kde4/settingsdialog.py:1311 +#: ../../qt4/settingsdialog.py:119 +#, python-format +msgid "" +"Warning: %(app)s uses EncFS for encryption. A recent security audit " +"revealed several possible attack vectors for this. Please take a look at 'A " +"NOTE ON SECURITY' in 'man backintime'." +msgstr "" +"Aviso: %(app)s usa o cifrado de EncFS. Unha auditoría recente de " +"seguranza mostrou varios posíbeis vectores de ataque para el. Bota unha " +"ollada a «A NOTE ON SECURITY» no manual do backintime." + +#: ../../qt4/settingsdialog.py:129 ../../qt4/settingsdialog.py:1568 msgid "Where to save snapshots" msgstr "Onde gardar as copias de seguranza" -#: ../../kde4/settingsdialog.py:146 +#: ../../qt4/settingsdialog.py:145 +msgid "Folder" +msgstr "Cartafol" + +#: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "Axustes SSH" -#: ../../kde4/settingsdialog.py:158 ../../kde4/settingsdialog.py:283 -#: ../../gnome/settingsdialog.glade:323 ../../gnome/settingsdialog.glade:583 -#: ../../gnome/settingsdialog.glade:874 +#: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "Servidor:" -#: ../../kde4/settingsdialog.py:163 ../../gnome/settingsdialog.glade:350 -#: ../../gnome/settingsdialog.glade:610 +#: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "Porto:" -#: ../../kde4/settingsdialog.py:168 ../../kde4/settingsdialog.py:288 -#: ../../gnome/settingsdialog.glade:377 ../../gnome/settingsdialog.glade:637 -#: ../../gnome/settingsdialog.glade:902 +#: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "Usuario:" -#: ../../kde4/settingsdialog.py:173 ../../gnome/settingsdialog.glade:416 +#: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "Ruta:" -#: ../../kde4/settingsdialog.py:178 ../../gnome/settingsdialog.glade:459 +#: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "Cifrado:" -#: ../../kde4/settingsdialog.py:184 +#: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "Chave privada:" -#: ../../kde4/settingsdialog.py:228 ../../kde4/settingsdialog.py:237 -#: ../../kde4/settingsdialog.py:243 ../../gnome/settingsdialog.glade:703 -#: ../../gnome/settingsdialog.glade:743 +#: ../../qt4/settingsdialog.py:201 +msgid "Key File" +msgstr "Ficheiro de chaves" + +#: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 +#: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "Contrasinal" -#: ../../kde4/settingsdialog.py:249 ../../gnome/settingsdialog.glade:775 +#: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "Gardar o contrasinal no chaveiro" -#: ../../kde4/settingsdialog.py:252 ../../gnome/settingsdialog.glade:792 +#: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" "Caché do contrasinal para Cron (incidencia de seguridade: root pode ler o " "contrasinal)" -#: ../../kde4/settingsdialog.py:264 ../../gnome/settingsdialog.glade:968 +#: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "Avanzado" -#: ../../kde4/settingsdialog.py:276 ../../gnome/settingsdialog.glade:848 -msgid "Auto Host / User / Profile Id" -msgstr "Auto Servidor / Usuario / Id do perfil" +#: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 +msgid "Full snapshot path: " +msgstr "Ruta completa á copia: " -#: ../../kde4/settingsdialog.py:301 +#: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "Programar" -#: ../../kde4/settingsdialog.py:311 ../../gnome/settingsdialog.glade:1092 +#: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "Día:" -#: ../../kde4/settingsdialog.py:322 ../../gnome/settingsdialog.glade:1079 +#: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "Día da semana:" -#: ../../kde4/settingsdialog.py:333 ../../gnome/settingsdialog.glade:1066 +#: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "Hora:" -#: ../../kde4/settingsdialog.py:344 ../../gnome/settingsdialog.glade:1053 +#: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "Horas:" -#: ../../kde4/settingsdialog.py:353 ../../gnome/settingsdialog.glade:1014 +#: ../../qt4/settingsdialog.py:339 msgid "" -"Run Back In Time periodically with anacron. This is useful if the computer " -"is not running regular." +"Run Back In Time repeatedly. This is useful if the computer is not running " +"regular." msgstr "" -"Execute Back In Time periodicamente con anacron. Isto é útil se o computador " -"non funciona regularmente." +"Executar Back In Time repetidamente. Útil se o computador non ten un " +"funcionamento regular." -#: ../../kde4/settingsdialog.py:357 ../../gnome/settingsdialog.glade:1040 -msgid "Frequency in days:" -msgstr "Frecuencia en días:" +#: ../../qt4/settingsdialog.py:344 +msgid "Every:" +msgstr "Cada:" -#: ../../kde4/settingsdialog.py:368 ../../gnome/settingsdialog.glade:1026 +#: ../../qt4/settingsdialog.py:362 msgid "" "Run Back In Time as soon as the drive is connected (only once every X " "days).\n" @@ -1215,25 +1277,27 @@ "X días).\n" "Pediráselle o seu contrasinal para sudo." -#: ../../kde4/settingsdialog.py:379 ../../gnome/settingsdialog.glade:1310 +#: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Incluír" -#: ../../kde4/settingsdialog.py:403 ../../kde4/settingsdialog.py:445 -#: ../../gnome/settingsdialog.glade:1411 +#: ../../qt4/settingsdialog.py:381 +msgid "Include files and folders" +msgstr "Incluír os ficheiros e os cartafoles" + +#: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "Engadir ficheiro" -#: ../../kde4/settingsdialog.py:408 ../../kde4/settingsdialog.py:450 -#: ../../gnome/settingsdialog.glade:1427 +#: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Engadir cartafol" -#: ../../kde4/settingsdialog.py:418 ../../gnome/settingsdialog.glade:1474 +#: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Excluír" -#: ../../kde4/settingsdialog.py:421 ../../gnome/settingsdialog.glade:1328 +#: ../../qt4/settingsdialog.py:417 msgid "" "Warning: Wildcards ('foo*', '[fF]oo', 'fo?') will be ignored with " "mode 'SSH encrypted'.\n" @@ -1243,314 +1307,470 @@ "cifrado'.\n" "Unicamente se permiten asteriscos ('foo/*', 'foo/**/bar')" -#: ../../kde4/settingsdialog.py:430 +#: ../../qt4/settingsdialog.py:425 +msgid "Exclude patterns, files or folders" +msgstr "Excluír os patróns, ficheiros ou cartafoles" + +#: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "Altamente recomendábel:" -#: ../../kde4/settingsdialog.py:460 ../../gnome/settingsdialog.glade:1905 +#: ../../qt4/settingsdialog.py:463 +msgid "Add default" +msgstr "Engadir predeterminado" + +#: ../../qt4/settingsdialog.py:474 +msgid "Exclude files bigger than: " +msgstr "Excluír ficheiros maiores de: " + +#: ../../qt4/settingsdialog.py:475 +#, python-format +msgid "" +"Exclude files bigger than value in %(prefix)s.\n" +"With 'Full rsync mode' disabled this will only affect new files\n" +"because for rsync this is a transfer option, not an exclude option.\n" +"So big files that has been backed up before will remain in snapshots\n" +"even if they had changed." +msgstr "" +"Excluír os ficheiros maiores dun valor en %(prefix)s.\n" +"Co «Modo resync completo» desactivado isto só afectará os novos ficheiros\n" +"porque para rsync é unha opción de transferencia non unha exclusión.\n" +"Por iso, os ficheiros grandes que se copiaron antes permanecerán nas copias\n" +"incluso se tiveron cambios." + +#: ../../qt4/settingsdialog.py:493 msgid "Auto-remove" msgstr "Eliminar automaticamente" -#: ../../kde4/settingsdialog.py:464 ../../gnome/settingsdialog.glade:1608 +#: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "Máis de:" -#: ../../kde4/settingsdialog.py:478 ../../gnome/settingsdialog.glade:1624 +#: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "Se o espazo libre é menor de:" -#: ../../kde4/settingsdialog.py:490 ../../gnome/settingsdialog.glade:1642 +#: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "Se os inodos libres son menos de:" -#: ../../kde4/settingsdialog.py:514 ../../gnome/settingsdialog.glade:1697 +#: ../../qt4/settingsdialog.py:551 +msgid "Run in background on remote Host." +msgstr "Executar en segundo plano no servidor remoto." + +#: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" -msgstr "Conservar todas as copias de seguranza dos últimos" +msgstr "Conservar todas as copias dos últimos" -#: ../../kde4/settingsdialog.py:517 ../../kde4/settingsdialog.py:522 -#: ../../gnome/settingsdialog.glade:1705 ../../gnome/settingsdialog.glade:1729 +#: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "día(s)" -#: ../../kde4/settingsdialog.py:519 ../../gnome/settingsdialog.glade:1717 +#: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" -msgstr "Conservar unha copia de seguranza diaria dos últimos" +msgstr "Conservar unha copia diaria dos últimos" -#: ../../kde4/settingsdialog.py:524 ../../gnome/settingsdialog.glade:1743 +#: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" -msgstr "Conservar unha copia de seguranza semanal das últimas" +msgstr "Conservar unha copia semanal das últimas" -#: ../../kde4/settingsdialog.py:527 +#: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "semana(s)" -#: ../../kde4/settingsdialog.py:529 ../../gnome/settingsdialog.glade:1769 +#: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" -msgstr "Conservar unha copia de seguranza mensual dos últimos" +msgstr "Conservar unha copia mensual dos últimos" -#: ../../kde4/settingsdialog.py:532 ../../gnome/settingsdialog.glade:1781 +#: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "mes(es)" -#: ../../kde4/settingsdialog.py:534 ../../gnome/settingsdialog.glade:1795 +#: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "Conservar unha copia de seguranza anual" -#: ../../kde4/settingsdialog.py:537 ../../gnome/settingsdialog.glade:1496 +#: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "Non eliminar as copia de seguranzas con nome" -#: ../../kde4/settingsdialog.py:546 ../../gnome/settingsdialog.glade:2104 +#: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Opcións" -#: ../../kde4/settingsdialog.py:549 ../../gnome/settingsdialog.glade:1920 +#: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Activar as notificacións" -#: ../../kde4/settingsdialog.py:552 ../../gnome/settingsdialog.glade:1937 +#: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "Desactivar as copias de seguranza cando estea en modo batería" -#: ../../kde4/settingsdialog.py:555 +#: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" msgstr "O estado da alimentación non está dispoñíbel no sistema" -#: ../../kde4/settingsdialog.py:558 ../../gnome/settingsdialog.glade:1955 -msgid "Backup files on restore" -msgstr "Ficheiros de copia de seguranza na restauración" +#: ../../qt4/settingsdialog.py:611 +msgid "Run only one snapshot at a time" +msgstr "Executar só unha captura á vez" + +#: ../../qt4/settingsdialog.py:612 +msgid "" +"Other snapshots will be blocked until the current snapshot is done.\n" +"This is a global option. So it will effect all profiles for this user.\n" +"But you need to activate this for all other users, too." +msgstr "" +"As demais capturas bloquearanse até que remate a actual.\n" +"Esta é unha opción global. Afectará a todos os perfís deste usuario.\n" +"Pero tamén precisa activalo para o resto de usuarios." + +#: ../../qt4/settingsdialog.py:617 +msgid "Backup replaced files on restore" +msgstr "Facer copia dos ficheiros substituídos na restauración" -#: ../../kde4/settingsdialog.py:561 ../../gnome/settingsdialog.glade:1972 +#: ../../qt4/settingsdialog.py:618 +#, python-format +msgid "" +"Newer versions of files will be renamed with trailing '%(suffix)s' before " +"restoring.\n" +"If you don't need them anymore you can remove them with '%(cmd)s'" +msgstr "" +"As versións máis novas dos ficheiros renomearanse cun «%(suffix)s» antes da " +"restauración.\n" +"Se xa non os precisa pode eliminalos con «%(cmd)s»" + +#: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "Continuar con erros (mantén as copias de seguranza incompletas)" -#: ../../kde4/settingsdialog.py:564 ../../gnome/settingsdialog.glade:1989 +#: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "Usar a suma de comprobación para detectar cambios" -#: ../../kde4/settingsdialog.py:567 ../../gnome/settingsdialog.glade:2006 +#: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "Modo rsync completo. Pode ser máis rápido pero:" -#: ../../kde4/settingsdialog.py:568 ../../gnome/settingsdialog.glade:2032 +#: ../../qt4/settingsdialog.py:634 msgid "" -"- snapshots are no read-only\n" -"- destination file-system must support all linux attributes (dates, rights, " +"- snapshots are not read-only\n" +"- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" "- as copias de seguranza non son de só lectura\n" "- o sistema de ficheiros de destino debe admitir todos os atributos de linux " "(datas, dereitos, usuario, grupo...)" -#: ../../kde4/settingsdialog.py:575 ../../gnome/settingsdialog.glade:2045 +#: ../../qt4/settingsdialog.py:641 +msgid "Take a new snapshot regardless of there were changes or not." +msgstr "Facer unha nova captura aínda que non houbese cambios." + +#: ../../qt4/settingsdialog.py:644 msgid "Check for changes (don't take a new snapshot if nothing changed)" msgstr "Buscar cambios (non facer ningunha captura se non hai trocos)" -#: ../../kde4/settingsdialog.py:582 +#: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "Nivel de rexistro:" -#: ../../kde4/settingsdialog.py:597 ../../gnome/settingsdialog.glade:2366 -msgid "Expert Options" -msgstr "Opcións avanzadas" +#: ../../qt4/settingsdialog.py:656 +msgid "None" +msgstr "Ningún" -#: ../../kde4/settingsdialog.py:600 +#: ../../qt4/settingsdialog.py:658 +msgid "Changes & Errors" +msgstr "Cambios e erros" + +#: ../../qt4/settingsdialog.py:674 msgid "Change these options only if you really know what you are doing !" msgstr "Cambie estas opcións unicamente se sabe ben o que está a facer" -#: ../../kde4/settingsdialog.py:608 ../../gnome/settingsdialog.glade:2133 -msgid "Run 'nice' as cron job (default: enabled)" -msgstr "Empregar «nice» para executar «cron» (predeterminado: activado)" - -#: ../../kde4/settingsdialog.py:611 ../../gnome/settingsdialog.glade:2150 -msgid "Run 'ionice' as cron job (default: enabled)" -msgstr "" -"Executar «ionice» como unha tarefa do «cron» (predeterminado: activado)" +#: ../../qt4/settingsdialog.py:678 +msgid "Run 'nice':" +msgstr "Executar «nice»:" + +#: ../../qt4/settingsdialog.py:684 ../../qt4/settingsdialog.py:696 +msgid "as cron job" +msgstr "como un traballo de cron" + +#: ../../qt4/settingsdialog.py:687 ../../qt4/settingsdialog.py:702 +#: ../../qt4/settingsdialog.py:716 +msgid "on remote host" +msgstr "nun servidor remoto" + +#: ../../qt4/settingsdialog.py:690 +msgid "Run 'ionice':" +msgstr "Executar «ionice»:" + +#: ../../qt4/settingsdialog.py:699 +msgid "when taking a manual snapshot" +msgstr "ao facer unha copia manual" + +#: ../../qt4/settingsdialog.py:706 +msgid "Run 'rsync' with 'nocache':" +msgstr "Executar «rsync» con «nocache»:" + +#: ../../qt4/settingsdialog.py:712 +msgid "on local machine" +msgstr "na máquina local" + +#: ../../qt4/settingsdialog.py:719 +msgid "Redirect stdout to /dev/null in cronjobs." +msgstr "Redireccionar stdout a /dev/null en cronjobs." + +#: ../../qt4/settingsdialog.py:725 +msgid "Redirect stderr to /dev/null in cronjobs." +msgstr "Redireccionar stderr a /dev/null en cronjobs." -#: ../../kde4/settingsdialog.py:614 ../../gnome/settingsdialog.glade:2167 -msgid "Run 'ionice' when taking a manual snapshot (default: disabled)" -msgstr "" -"Executar \"ionice\" cando se fagan copias de seguranza manuais " -"(predeterminado: desactivado)" - -#: ../../kde4/settingsdialog.py:617 ../../gnome/settingsdialog.glade:2184 -msgid "Run 'nice' on remote host (default: disabled)" -msgstr "Executar «nice» nun servidor remoto (predeterminado: desactivado)" - -#: ../../kde4/settingsdialog.py:620 ../../gnome/settingsdialog.glade:2201 -msgid "Run 'ionice' on remote host (default: disabled)" -msgstr "Executar «ionice» nun servidor remoto (predeterminado; desactivado)" - -#: ../../kde4/settingsdialog.py:626 ../../gnome/settingsdialog.glade:2224 +#: ../../qt4/settingsdialog.py:734 msgid "Limit rsync bandwidth usage: " msgstr "Limitar o uso do largo de banda para rsync: " -#: ../../kde4/settingsdialog.py:629 ../../gnome/settingsdialog.glade:2259 +#: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr " KB/seg" -#: ../../kde4/settingsdialog.py:634 ../../gnome/settingsdialog.glade:2280 +#: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "Preservar permisos (ACL)" -#: ../../kde4/settingsdialog.py:637 ../../gnome/settingsdialog.glade:2297 +#: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "Preservar os atributos estendidos (xattr)" -#: ../../kde4/settingsdialog.py:640 ../../gnome/settingsdialog.glade:2314 +#: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute links)" msgstr "" "Copiar as ligazóns inseguras (funciona unicamente con ligazóns absolutas)" -#: ../../kde4/settingsdialog.py:643 ../../gnome/settingsdialog.glade:2331 -msgid "Copy links (dereference symbolic links)" -msgstr "Copiar as ligazóns (seguir as ligazóns simbólicas aos ficheiros)" +#: ../../qt4/settingsdialog.py:834 +msgid "Paste additional options to rsync" +msgstr "Engadir as opcións adicionais a rsync" -#: ../../kde4/snapshotsdialog.py:46 ../../kde4/snapshotsdialog.py:173 -#: ../../gnome/snapshotsdialog.glade:385 -msgid "Diff Options" -msgstr "Opcións de comparación" +#: ../../qt4/settingsdialog.py:837 +msgid "" +"Options must be quoted e.g. --exclude-from=\"/path/to/my exclude file\"." +msgstr "" +"As opcións deben levar comiñas p.e. --exclude-" +"from=\"/ruta/ao/ficheiro_excluído\"." -#: ../../kde4/snapshotsdialog.py:56 ../../gnome/snapshotsdialog.glade:314 -msgid "Command:" -msgstr "Orde:" +#: ../../qt4/settingsdialog.py:847 +msgid "Add prefix to SSH commands" +msgstr "Engadir prefixo ás ordes de SSH" -#: ../../kde4/snapshotsdialog.py:60 ../../gnome/snapshotsdialog.glade:322 -msgid "Parameters:" -msgstr "Parámetros:" +#: ../../qt4/settingsdialog.py:850 +#, python-format +msgid "" +"Prefix to run before every command on remote host.\n" +"Variables need to be escaped with \\$FOO.\n" +"This doesn't touch rsync. So to add a prefix\n" +"for rsync use \"%(cb_rsync_options)s\" with\n" +"%(rsync_options_value)s\n" +"\n" +"%(default)s: %(def_value)s" +msgstr "" +"Prefixo para executar antes de cada orde nun servidor remoto.\n" +"As variábeis precisan un escape con \\$FOO.\n" +"Isto non afecta a rsync. Así para engadir un prefixo\n" +"para rsync usar «%(cb_rsync_options)s» con\n" +"%(rsync_options_value)s\n" +"\n" +"%(default)s: %(def_value)s" -#: ../../kde4/snapshotsdialog.py:64 ../../gnome/snapshotsdialog.glade:334 -msgid "Use %1 and %2 for path parameters" -msgstr "Usar %1 e %2 como parámetros da ruta" +#: ../../qt4/settingsdialog.py:858 ../../qt4/settingsdialog.py:1691 +msgid "default" +msgstr "predeterminado" -#: ../../kde4/snapshotsdialog.py:123 ../../gnome/snapshotsdialog.glade:184 -#: ../../gnome/snapshotsdialog.glade:186 -msgid "Delete" -msgstr "Eliminar" +#: ../../qt4/settingsdialog.py:875 +msgid "Restore Config" +msgstr "Restabelecer Config" -#: ../../kde4/snapshotsdialog.py:128 ../../gnome/snapshotsdialog.glade:199 -#: ../../gnome/snapshotsdialog.glade:201 -msgid "Select All" -msgstr "Selecionar todo" +#: ../../qt4/settingsdialog.py:891 +msgid "" +"Full system backup can only create a snapshot to be restored to the same " +"physical disk(s) with the same disk partitioning as from the source; " +"restoring to new physical disks or the same disks with different " +"partitioning will yield a potentially broken and unusable system.\n" +"\n" +"Full system backup will override some settings that may have been " +"customized. Continue?" +msgstr "" +"Facer unha copia de todo o sistema creará unha imaxe para restabelecer no " +"mesmo disco(s) físico co mesmo particionado que a orixe; o restabelecemento " +"nun novo disco físico ou no mesmo disco físico cun particionado distinto " +"resultará nunha quebra potencial e nun sistema non usábel.\n" +"\n" +"A copia de seguranza do sistema completo sobrescribirá algúns axustes " +"personalizados polo usuario. Continuamos?" -#: ../../kde4/snapshotsdialog.py:132 ../../gnome/snapshotsdialog.glade:88 -msgid "List only different snapshots" -msgstr "Listar unicamente as copias de seguranza diferentes" +#: ../../qt4/settingsdialog.py:922 +msgid "New profile" +msgstr "Perfil novo" -#: ../../kde4/snapshotsdialog.py:139 ../../gnome/snapshotsdialog.glade:110 -msgid "List only equal snapshots to: " -msgstr "Listar só as copias de seguranza iguais a: " +#: ../../qt4/settingsdialog.py:938 +msgid "Rename profile" +msgstr "Renomear o perfil" -#: ../../kde4/snapshotsdialog.py:149 ../../gnome/snapshotsdialog.glade:146 -msgid "Deep check (more accurate, but slow)" -msgstr "Comprobación exhaustiva (máis precisa pero máis lenta)" +#: ../../qt4/settingsdialog.py:952 +#, python-format +msgid "Are you sure you want to delete the profile \"%s\" ?" +msgstr "Está certo de eliminar o perfil \"%s\" ?" -#: ../../kde4/snapshotsdialog.py:174 -msgid "Go To" -msgstr "Ir a" +#: ../../qt4/settingsdialog.py:1191 +msgid "" +"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " +"*/3 for periodic backups every 3 hours" +msgstr "" +"As horas personalizadas só poden ser unha lista de horas separadas por comas " +"(p.e: 8,12,18,23) ou */3 para copias periódicas cada 3 horas" -#: ../../gnome/logviewdialog.glade:9 -msgid "Log View" -msgstr "Visualización do rexistro" - -#: ../../gnome/logviewdialog.glade:179 -msgid "scroll down automatic" -msgstr "desprazamento abaixo automático" - -#: ../../gnome/mainwindow.glade:7 -msgid "Back In Time" -msgstr "Back In Time" - -#: ../../gnome/mainwindow.glade:45 -msgid "Backup Now" -msgstr "Facer agora unha copia de seguranza" +#: ../../qt4/settingsdialog.py:1489 +msgid "Exclude pattern" +msgstr "Excluír o patrón" -#: ../../gnome/mainwindow.glade:171 -msgid "Shutdown" -msgstr "Apagar" +#: ../../qt4/settingsdialog.py:1502 +msgid "Exclude file" +msgstr "Excluír o ficheiro" -#: ../../gnome/mainwindow.glade:287 -msgid "Parent folder" -msgstr "Cartafol pai" +#: ../../qt4/settingsdialog.py:1506 +msgid "Exclude folder" +msgstr "Excluír o cartafol" -#: ../../gnome/mainwindow.glade:327 -msgid "Hidden files" -msgstr "Ficheiros agochados" +#: ../../qt4/settingsdialog.py:1525 +msgid "Include file" +msgstr "Incluír o ficheiro" -#: ../../gnome/mainwindow.glade:451 +#: ../../qt4/settingsdialog.py:1533 ../../qt4/settingsdialog.py:1553 +#, python-format msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +"\"%s\" is a symlink. The linked target will not be backed up until you " +"include it, too.\n" +"Would you like to include the symlinks target instead?" msgstr "" -"Este cartafol non existe\n" -"na captura actual." +"«%s» é unha ligazón simbólica. O destino ligado non se copiará até que o " +"inclúa.\n" +"Desexa incluír tamén o destino das ligazóns simbólicas?" -#: ../../gnome/settingsdialog.glade:287 -msgid "Where to save snapshots" -msgstr "Onde gardar as copias de seguranza" +#: ../../qt4/settingsdialog.py:1545 +msgid "Include folder" +msgstr "Incluír o cartafol" -#: ../../gnome/settingsdialog.glade:483 -msgid "Private key:" -msgstr "Chave privada:" +#: ../../qt4/settingsdialog.py:1572 +msgid "Are you sure you want to change snapshots folder ?" +msgstr "Está certo de querer cambiar o cartafol de copias de seguranza?" -#: ../../gnome/settingsdialog.glade:534 -msgid "Advanced SSH Settings" -msgstr "Axustes SSH avanzados" +#: ../../qt4/settingsdialog.py:1688 +msgid "enabled" +msgstr "activado" -#: ../../gnome/settingsdialog.glade:552 -msgid "SSH Settings" -msgstr "Axustes SSH " +#: ../../qt4/settingsdialog.py:1690 +msgid "disabled" +msgstr "desactivado" -#: ../../gnome/settingsdialog.glade:815 -msgid "Password" -msgstr "Contrasinal" +#: ../../qt4/settingsdialog.py:1715 +msgid "Restore Settings" +msgstr "Restabelecer a configuración" -#: ../../gnome/settingsdialog.glade:930 -msgid "Profile Id:" -msgstr "Id do perfil:" +#: ../../qt4/settingsdialog.py:1732 +msgid " and add your user to group 'fuse'" +msgstr " e engadir o seu usuario ao grupo «fuse»" -#: ../../gnome/settingsdialog.glade:1115 +#: ../../qt4/settingsdialog.py:1736 +#, python-format msgid "" -"hours seperate by comma ( e.g. 8,12,18,23) or */3 for periodic backups every " -"3 hours (cron style)" +"Please navigate to the snapshot from which you want to restore %(appName)s's " +"configuration. The path may look like: \n" +"%(samplePath)s\n" +"\n" +"If your snapshots are on a remote drive or if they are encrypted you need to " +"manually mount them first. If you use Mode SSH you also may need to set up " +"public key login to the remote host%(addFuse)s.\n" +"Take a look at 'man backintime'." msgstr "" -"horas separadas por comas ( p.e: 8,12,18,23) ou */3 para copias periódicas " -"cada 3 horas (estilo cron)" +"Vaia á copia de seguranza na que desexa restabelecer a configuración de " +"%(appName)s. A ruta será como esta: \n" +" %(samplePath)s\n" +"\n" +"Se as copias de seguranza están nunha unidade remota ou están cifradas debe " +"montalas primeiro. Se usa o modo SSH pode necesitar\n" +"configurar o acceso coa chave pública ao host%(addFuse)s." -#: ../../gnome/settingsdialog.glade:1163 -msgid "Schedule" -msgstr "Programar" +#: ../../qt4/settingsdialog.py:1794 ../../qt4/settingsdialog.py:1854 +msgid "No config found" +msgstr "Non se atopou config" -#: ../../gnome/settingsdialog.glade:1363 -msgid "Highly recommended:" -msgstr "Altamente recomendábel:" +#: ../../qt4/snapshotsdialog.py:49 ../../qt4/snapshotsdialog.py:173 +msgid "Diff Options" +msgstr "Opcións de comparación" -#: ../../gnome/settingsdialog.glade:1377 -msgid "label" -msgstr "etiqueta" +#: ../../qt4/snapshotsdialog.py:56 +msgid "Command:" +msgstr "Orde:" -#: ../../gnome/settingsdialog.glade:1755 -msgid "week(s)" -msgstr "semana(s)" +#: ../../qt4/snapshotsdialog.py:60 +msgid "Parameters:" +msgstr "Parámetros:" -#: ../../gnome/settingsdialog.glade:2069 -msgid "Log level:" -msgstr "Nivel de rexistro:" +#: ../../qt4/snapshotsdialog.py:64 +msgid "Use %1 and %2 for path parameters" +msgstr "Usar %1 e %2 como parámetros da ruta" + +#: ../../qt4/snapshotsdialog.py:106 +msgid "List only different snapshots" +msgstr "Listar unicamente as copias de seguranza diferentes" + +#: ../../qt4/snapshotsdialog.py:113 +msgid "List only equal snapshots to: " +msgstr "Listar só as copias de seguranza iguais a: " + +#: ../../qt4/snapshotsdialog.py:123 +msgid "Deep check (more accurate, but slow)" +msgstr "Comprobación exhaustiva (máis precisa pero máis lenta)" + +#: ../../qt4/snapshotsdialog.py:144 +msgid "Delete" +msgstr "Eliminar" + +#: ../../qt4/snapshotsdialog.py:148 +msgid "Select All" +msgstr "Selecionar todo" + +#: ../../qt4/snapshotsdialog.py:161 +msgid "Diff" +msgstr "Diferenzas" + +#: ../../qt4/snapshotsdialog.py:172 +msgid "Go To" +msgstr "Ir a" + +#: ../../qt4/snapshotsdialog.py:326 +msgid "You can't compare a snapshot to itself" +msgstr "Non pode comparar unha copia de seguranza con ela mesma" -#: ../../gnome/settingsdialog.glade:2121 +#: ../../qt4/snapshotsdialog.py:333 +#, python-format +msgid "Command not found: %s" +msgstr "Non se atopou a orde: %s" + +#: ../../qt4/snapshotsdialog.py:354 +#, python-format msgid "" -"Change these options only if you really know what you are doing !" +"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" msgstr "" -"Cambie estas opcións unicamente se sabe ben o que está a facer" +"Está certo de eliminar \"%(file)s\" na copia de seguranza " +"\"%(snapshot_id)s?\n" -#: ../../gnome/snapshotsdialog.glade:263 -msgid "Diff with" -msgstr "Comparar con" +#: ../../qt4/snapshotsdialog.py:357 +#, python-format +msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +msgstr "" +"Está certo de eliminar \"%(file)s\" en %(count)d copias de seguranza?\n" -#: ../../gnome/textinputdialog.glade:7 -msgid "Pattern" -msgstr "Patrón" +#: ../../qt4/snapshotsdialog.py:359 +msgid "WARNING: This can not be revoked!" +msgstr "AVISO: isto non se pode revogar" -#: ../../gnome/textinputdialog.glade:70 -msgid "Text" -msgstr "Texto" +#: ../../qt4/snapshotsdialog.py:374 +#, python-format +msgid "Exclude \"%s\" from future snapshots?" +msgstr "Quere excluír \"%s\" de copias de seguranza futuras?" diff -Nru backintime-1.0.36/common/po/he.po backintime-1.1.12/common/po/he.po --- backintime-1.0.36/common/po/he.po 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/po/he.po 2016-01-11 18:07:58.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2013-11-09 22:34+0100\n" +"POT-Creation-Date: 2015-12-19 00:47+0100\n" "PO-Revision-Date: 2013-04-17 20:42+0000\n" "Last-Translator: Konstantin Golenberg \n" "Language-Team: Hebrew \n" @@ -15,198 +15,230 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2014-08-06 10:19+0000\n" -"X-Generator: Launchpad (build 17147)\n" +"X-Launchpad-Export-Date: 2016-01-11 17:52+0000\n" +"X-Generator: Launchpad (build 17881)\n" -#: ../../common/config.py:72 +#: ../../common/configfile.py:60 +#, python-format +msgid "Failed to save config: %s" +msgstr "" + +#: ../../common/configfile.py:78 +#, python-format +msgid "Failed to load config: %s" +msgstr "" + +#: ../../common/configfile.py:352 ../../common/configfile.py:414 +#, python-format +msgid "Profile \"%s\" already exists !" +msgstr "הפרופיל \"%s\" כבר קיים !" + +#: ../../common/configfile.py:383 +msgid "You can't remove the last profile !" +msgstr "לא ניתן להסיר את הפרופיל האחרון !" + +#: ../../common/config.py:76 msgid "Disabled" msgstr "מנוטרל" -#: ../../common/config.py:73 +#: ../../common/config.py:77 msgid "At every boot/reboot" msgstr "כל איתחול של מערכת" -#: ../../common/config.py:74 +#: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "כל 5 דקות" -#: ../../common/config.py:75 +#: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "כל 10 דקות" -#: ../../common/config.py:76 +#: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "כל 30 דקות" -#: ../../common/config.py:77 +#: ../../common/config.py:81 msgid "Every hour" msgstr "כל שעה" -#: ../../common/config.py:78 +#: ../../common/config.py:82 msgid "Every 2 hours" msgstr "כל שעתיים" -#: ../../common/config.py:79 +#: ../../common/config.py:83 msgid "Every 4 hours" msgstr "כל 4 שעות" -#: ../../common/config.py:80 +#: ../../common/config.py:84 msgid "Every 6 hours" msgstr "כל 6 שעות" -#: ../../common/config.py:81 +#: ../../common/config.py:85 msgid "Every 12 hours" msgstr "כל 12 שעות" -#: ../../common/config.py:82 +#: ../../common/config.py:86 msgid "Custom Hours" msgstr "" -#: ../../common/config.py:83 +#: ../../common/config.py:87 msgid "Every Day" msgstr "כל יום" -#: ../../common/config.py:84 -msgid "Daily (anacron)" +#: ../../common/config.py:88 +msgid "Repeatedly (anacron)" msgstr "" -#: ../../common/config.py:85 +#: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "" -#: ../../common/config.py:86 +#: ../../common/config.py:90 msgid "Every Week" msgstr "כל שבוע" -#: ../../common/config.py:87 +#: ../../common/config.py:91 msgid "Every Month" msgstr "כל חודש" -#: ../../common/config.py:91 +#: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "יום/ימים" -#: ../../common/config.py:92 +#: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "שבוע/ות" -#: ../../common/config.py:93 +#: ../../common/config.py:97 msgid "Year(s)" msgstr "שנה/שנים" -#: ../../common/config.py:100 +#: ../../common/config.py:101 +msgid "Hour(s)" +msgstr "" + +#: ../../common/config.py:104 +msgid "Month(s)" +msgstr "" + +#: ../../common/config.py:126 ../../qt4/settingsdialog.py:551 msgid " EXPERIMENTAL!" msgstr "" -#: ../../common/config.py:103 +#: ../../common/config.py:129 msgid "Local" msgstr "מקומי" -#: ../../common/config.py:104 +#: ../../common/config.py:130 msgid "SSH" msgstr "SSH" -#: ../../common/config.py:104 ../../common/config.py:106 -#: ../../gnome/settingsdialog.py:475 ../../kde4/settingsdialog.py:1325 +#: ../../common/config.py:130 ../../common/config.py:132 +#: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "מפתח פרטי SSH" -#: ../../common/config.py:105 +#: ../../common/config.py:131 msgid "Local encrypted" msgstr "" -#: ../../common/config.py:105 ../../common/config.py:106 +#: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "" -#: ../../common/config.py:106 +#: ../../common/config.py:132 msgid "SSH encrypted" msgstr "" -#: ../../common/config.py:112 +#: ../../common/config.py:135 msgid "Default" msgstr "ברירת מחדל" -#: ../../common/config.py:113 +#: ../../common/config.py:136 msgid "AES128-CTR" msgstr "AES128-CTR" -#: ../../common/config.py:114 +#: ../../common/config.py:137 msgid "AES192-CTR" msgstr "AES192-CTR" -#: ../../common/config.py:115 +#: ../../common/config.py:138 msgid "AES256-CTR" msgstr "AES256-CTR" -#: ../../common/config.py:116 +#: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "ARCFOUR256" -#: ../../common/config.py:117 +#: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "ARCFOUR128" -#: ../../common/config.py:118 +#: ../../common/config.py:141 msgid "AES128-CBC" msgstr "AES128-CBC" -#: ../../common/config.py:119 +#: ../../common/config.py:142 msgid "3DES-CBC" msgstr "3DES-CBC" -#: ../../common/config.py:120 +#: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "Blowfish-CBC" -#: ../../common/config.py:121 +#: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "Cast128-CBC" -#: ../../common/config.py:122 +#: ../../common/config.py:145 msgid "AES192-CBC" msgstr "AES192-CBC" -#: ../../common/config.py:123 +#: ../../common/config.py:146 msgid "AES256-CBC" msgstr "AES256-CBC" -#: ../../common/config.py:124 +#: ../../common/config.py:147 msgid "ARCFOUR" msgstr "ARCFOUR" -#: ../../common/config.py:129 +#: ../../common/config.py:153 msgid "Main profile" msgstr "הפרופיל הראשי" -#: ../../common/config.py:256 ../../common/config.py:275 -#: ../../common/config.py:286 ../../common/config.py:291 +#: ../../common/config.py:289 ../../common/config.py:296 +#: ../../common/config.py:307 ../../common/config.py:312 +#: ../../qt4/qt4systrayicon.py:61 #, python-format msgid "Profile: \"%s\"" msgstr "הפרופיל: \"%s\"" -#: ../../common/config.py:256 +#: ../../common/config.py:289 msgid "Snapshots folder is not valid !" msgstr "תיקיית הגיבויים אינה תקנית !" -#: ../../common/config.py:275 +#: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "עליך לבחור לפחות תיקייה אחת לגיבוי !" -#: ../../common/config.py:286 +#: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "לא ניתן לכלול את תיקיית הגיבוי !" -#: ../../common/config.py:291 +#: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "לא ניתן לכלול תת־תיקיות של תיקיית הגיבוי !" -#: ../../common/config.py:361 +#: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s אינה תיקייה !" -#: ../../common/config.py:376 ../../common/config.py:389 +#: ../../common/config.py:380 +msgid "Host/User/Profile-ID must not be empty!" +msgstr "" + +#: ../../common/config.py:388 ../../common/config.py:420 #, python-format msgid "" "Can't write to: %s\n" @@ -215,59 +247,68 @@ "לא ניתן לכתוב אל: %s\n" "האם יש ברשותך גישה לכתיבה ?" -#: ../../common/config.py:1286 +#: ../../common/config.py:400 +#, python-format msgid "" -"Can't find crontab.\n" -"Are you sure cron is installed ?\n" -"If not you should disable all automatic backups." +"Destination filesystem for '%(path)s' is formatted with FAT which doesn't " +"support hard-links. Please use a native Linux filesystem." msgstr "" -"לא ניתן למצוא את crontab.\n" -"האם cron מותקן?\n" -"במידה שלא יש לבטל את כל הגיבויים האוטומטיים." -#: ../../common/config.py:1338 +#: ../../common/config.py:405 #, python-format -msgid "Schedule udev doesn't work with mode %s" +msgid "" +"Destination filsystem for '%(path)s' is a SMB mounted share. Please make " +"sure the remote SMB server supports symlinks or activate '%(copyLinks)s' in " +"'%(expertOptions)s'." msgstr "" -#: ../../common/config.py:1342 -#, python-format -msgid "Couldn't find UUID for \"%s\"" +#: ../../common/config.py:408 ../../qt4/settingsdialog.py:815 +msgid "Copy links (dereference symbolic links)" msgstr "" -#: ../../common/config.py:1379 -msgid "Failed to remove udev rules" -msgstr "" +#: ../../common/config.py:409 ../../qt4/settingsdialog.py:669 +msgid "Expert Options" +msgstr "אפשרויות מתקדמות" -#: ../../common/config.py:1385 -msgid "Failed to create udev rules" +#: ../../common/config.py:411 +#, python-format +msgid "" +"Destination filesystem for '%(path)s is a sshfs mounted share. sshfs doesn't " +"support hard-links. Please use mode 'SSH' instead." msgstr "" -#: ../../common/config.py:1420 +#: ../../common/config.py:1407 msgid "" -"Can't find anacron.\n" -"Are you sure anacron is installed ?\n" -"If not you should disable daily anacron backups." +"Can't find crontab.\n" +"Are you sure cron is installed ?\n" +"If not you should disable all automatic backups." msgstr "" +"לא ניתן למצוא את crontab.\n" +"האם cron מותקן?\n" +"במידה שלא יש לבטל את כל הגיבויים האוטומטיים." -#: ../../common/config.py:1439 -msgid "Please provide your sudo password to install the udev rule." +#: ../../common/config.py:1411 +msgid "Failed to write new crontab." msgstr "" -#: ../../common/config.py:1445 -msgid "Please provide your sudo password to remove unused udev rules." +#: ../../common/config.py:1505 +#, python-format +msgid "" +"Could not install Udev rule for profile %(profile_id)s. DBus Service " +"'%(dbus_interface)s' wasn't available" msgstr "" -#: ../../common/configfile.py:253 ../../common/configfile.py:315 +#: ../../common/config.py:1517 #, python-format -msgid "Profile \"%s\" already exists !" -msgstr "הפרופיל \"%s\" כבר קיים !" +msgid "Schedule udev doesn't work with mode %s" +msgstr "" -#: ../../common/configfile.py:284 -msgid "You can't remove the last profile !" -msgstr "לא ניתן להסיר את הפרופיל האחרון !" +#: ../../common/config.py:1526 +#, python-format +msgid "Couldn't find UUID for \"%s\"" +msgstr "" -#: ../../common/encfstools.py:95 +#: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" @@ -275,38 +316,38 @@ "%(error)s" msgstr "" -#: ../../common/encfstools.py:105 +#: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "" -#: ../../common/encfstools.py:149 +#: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "" -#: ../../common/encfstools.py:153 +#: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" -#: ../../common/encfstools.py:154 +#: ../../common/encfstools.py:171 msgid "Cancel" msgstr "" -#: ../../common/encfstools.py:157 +#: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "" -#: ../../common/encfstools.py:161 +#: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "" -#: ../../common/encfstools.py:166 +#: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" -#: ../../common/encfstools.py:174 ../../common/sshtools.py:207 +#: ../../common/encfstools.py:196 ../../common/sshtools.py:262 #, python-format msgid "" "%(user)s is not member of group 'fuse'.\n" @@ -314,70 +355,73 @@ "Look at 'man backintime' for further instructions." msgstr "" -#: ../../common/encfstools.py:189 +#: ../../common/encfstools.py:211 msgid "" "encfs version 1.7.2 and before has a bug with option --reverse. Please " "update encfs" msgstr "" -#: ../../common/encfstools.py:453 ../../common/encfstools.py:480 -#: ../../common/snapshots.py:982 ../../common/snapshots.py:1288 -#: ../../kde4/app.py:82 ../../gnome/mainwindow.glade:43 +#: ../../common/encfstools.py:512 ../../common/snapshots.py:1131 +#: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "ביצוע הגיבוי" -#: ../../common/mount.py:195 +#: ../../common/mount.py:204 #, python-format msgid "" "Hash collision occurred in hash_id %s. Incrementing global value " "hash_collision and try again." msgstr "" -#: ../../common/mount.py:246 +#: ../../common/mount.py:259 #, python-format msgid "mountpoint %s not empty." msgstr "" -#: ../../common/mount.py:286 +#: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" -#: ../../common/password.py:425 +#: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" -#: ../../common/snapshots.py:171 ../../gnome/app.py:1127 -#: ../../kde4/app.py:1014 +#: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "כעת" -#: ../../common/snapshots.py:182 ../../gnome/gnometools.py:37 +#: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "עם שגיאות !" -#: ../../common/snapshots.py:282 +#: ../../common/snapshots.py:344 msgid "" "### This log has been decoded with automatic search pattern\n" "### If some paths are not decoded you can manually decode them with:\n" msgstr "" -#: ../../common/snapshots.py:465 +#: ../../common/snapshots.py:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "נכשל" -#: ../../common/snapshots.py:564 +#: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "" -#: ../../common/snapshots.py:739 +#: ../../common/snapshots.py:752 ../../qt4/app.py:377 ../../qt4/app.py:675 +#: ../../qt4/app.py:692 ../../qt4/qt4systrayicon.py:65 +msgid "Done" +msgstr "בוצע" + +#: ../../common/snapshots.py:860 msgid "" "Back In Time changed its backup format.\n" "\n" "Your old snapshots can be moved according to this new format. OK?" msgstr "" -#: ../../common/snapshots.py:749 +#: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" @@ -391,13 +435,13 @@ "תצורת הגיבוי החדשה תומכת באיחסון על משתמשים ופרופילים שונים שנמצאים באותו " "המיקום. האם תרצה להשתמש באותו המיקום עבור שני הפרופילים?" -#: ../../common/snapshots.py:752 +#: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" msgstr "" -#: ../../common/snapshots.py:803 +#: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" @@ -410,7 +454,7 @@ "cannot continue taking snapshots" msgstr "" -#: ../../common/snapshots.py:812 +#: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" @@ -420,7 +464,7 @@ "if you are done restart Back In Time to proceed" msgstr "" -#: ../../common/snapshots.py:825 +#: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" @@ -430,7 +474,7 @@ "\n" "Back In Time תמשיך לבצעה גיבוים כמתוכנן" -#: ../../common/snapshots.py:830 +#: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" @@ -442,17 +486,21 @@ "If you do not, you will be asked again next time you start Back In Time." msgstr "" -#: ../../common/snapshots.py:839 +#: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "Back In Time שוב ימשיך לבצעה גיבוים כמתוכנן" -#: ../../common/snapshots.py:841 +#: ../../common/snapshots.py:953 msgid "" "Back In Time still cannot continue taking new snapshots.\n" "Restart Back In Time to see the questions again" msgstr "" -#: ../../common/snapshots.py:913 +#: ../../common/snapshots.py:972 +msgid "Deferring backup while on battery" +msgstr "" + +#: ../../common/snapshots.py:1035 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it." @@ -460,158 +508,165 @@ "לא ניתן למצוא את תיקיית הגיבויים.\n" "אם היא נמצאת בכונן נשלף עליך לחבר אותו." -#: ../../common/snapshots.py:915 +#: ../../common/snapshots.py:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "בהמתנה של שניה אחת." msgstr[1] "בהמתנה של %s שניות." -#: ../../common/snapshots.py:941 +#: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "נכשל בלקיחת גיבוי %s !!!" -#: ../../common/snapshots.py:950 +#: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "בהליכי סיום" -#: ../../common/snapshots.py:1088 +#: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "לא ניתן ליצור את התיקייה: %s" -#: ../../common/snapshots.py:1107 +#: ../../common/snapshots.py:1217 msgid "..." msgstr "..." -#: ../../common/snapshots.py:1134 +#: ../../common/snapshots.py:1238 +#, python-format +msgid "Found leftover '%s' which can be continued." +msgstr "" + +#: ../../common/snapshots.py:1250 +#, python-format +msgid "Remove leftover '%s' folder from last run" +msgstr "" + +#: ../../common/snapshots.py:1263 #, python-format msgid "Can't remove folder: %s" msgstr "לא ניתן להסיר את התיקייה: %s" -#: ../../common/snapshots.py:1219 +#: ../../common/snapshots.py:1340 #, python-format msgid "Compare with snapshot %s" msgstr "השוואה עם הגיבוי %s" -#: ../../common/snapshots.py:1248 +#: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "יצירת קישורים קשיחים" -#: ../../common/snapshots.py:1335 +#: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "שומר קובץ הגדרות ..." -#: ../../common/snapshots.py:1341 +#: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "שמירת ההרשאות ..." -#: ../../common/snapshots.py:1442 +#: ../../common/snapshots.py:1470 +msgid "Save permission over ssh failed. Retry normal method" +msgstr "" + +#: ../../common/snapshots.py:1521 #, python-format msgid "Can't rename %(new_path)s to %(path)s" msgstr "" -#: ../../common/snapshots.py:1562 -msgid "Remove old snapshots" -msgstr "הסרת גיבויים ישנים" - -#: ../../common/snapshots.py:1586 ../../kde4/settingsdialog.py:501 -#: ../../gnome/settingsdialog.glade:1660 +#: ../../common/snapshots.py:1695 ../../common/snapshots.py:1728 +#: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "הסרה חכמה" -#: ../../common/snapshots.py:1591 +#: ../../common/snapshots.py:1704 +msgid "Remove old snapshots" +msgstr "הסרת גיבויים ישנים" + +#: ../../common/snapshots.py:1733 msgid "Try to keep min free space" msgstr "נסיון לשמירת כמה שפחות מקום פנוי" -#: ../../common/snapshots.py:1621 +#: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" -#: ../../common/sshtools.py:106 +#: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "" -#: ../../common/sshtools.py:113 +#: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "" -#: ../../common/sshtools.py:187 -#, python-format -msgid "" -"Failed to unlock SSH private key:\n" -"Error: %s" -msgstr "" - -#: ../../common/sshtools.py:194 +#: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" -#: ../../common/sshtools.py:199 +#: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" "ספריית sshfs לא נמצאה. נא לבצעה התקנה, לדוגמה ע\"י פקודה 'apt-get install " "sshfs'" -#: ../../common/sshtools.py:217 +#: ../../common/sshtools.py:278 #, python-format msgid "" "Password-less authentication for %(user)s@%(host)s failed. Look at 'man " "backintime' for further instructions." msgstr "" -#: ../../common/sshtools.py:229 +#: ../../common/sshtools.py:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" -#: ../../common/sshtools.py:254 +#: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "%s לא נמצא ברשימה ssh_known_hosts." -#: ../../common/sshtools.py:274 +#: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" -#: ../../common/sshtools.py:276 +#: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:278 +#: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:280 +#: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" -#: ../../common/sshtools.py:302 +#: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" -#: ../../common/sshtools.py:325 ../../common/sshtools.py:383 +#: ../../common/sshtools.py:423 ../../common/sshtools.py:553 #, python-format msgid "" "Remote host %(host)s doesn't support '%(command)s':\n" @@ -619,7 +674,7 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:387 +#: ../../common/sshtools.py:556 #, python-format msgid "" "Check commands on host %(host)s returned unknown error:\n" @@ -627,96 +682,149 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:400 +#: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "" -#: ../../gnome/app.py:185 ../../gnome/app.py:594 ../../gnome/app.py:608 -#: ../../kde4/app.py:299 ../../kde4/app.py:570 ../../kde4/app.py:587 -msgid "Done" -msgstr "בוצע" +#: ../../qt4/app.py:81 +msgid "Refresh snapshots list" +msgstr "לרענן רשימת גיבוים" + +#: ../../qt4/app.py:85 ../../qt4/app.py:890 +msgid "Snapshot Name" +msgstr "שם הגיבוי" + +#: ../../qt4/app.py:88 +msgid "Remove Snapshot" +msgstr "הסר לכידה" + +#: ../../qt4/app.py:91 +msgid "View Snapshot Log" +msgstr "" + +#: ../../qt4/app.py:94 +msgid "View Last Log" +msgstr "" -#: ../../gnome/app.py:189 ../../kde4/app.py:143 ../../kde4/app.py:159 -#: ../../gnome/mainwindow.glade:225 +#: ../../qt4/app.py:99 ../../qt4/settingsdialog.py:51 +msgid "Settings" +msgstr "הגדרות" + +#: ../../qt4/app.py:104 +msgid "Shutdown" +msgstr "" + +#: ../../qt4/app.py:105 +msgid "Shutdown system after snapshot has finished." +msgstr "" + +#: ../../qt4/app.py:111 +msgid "Exit" +msgstr "יציאה" + +#: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 msgid "Help" msgstr "עזרה" -#: ../../gnome/app.py:191 ../../kde4/app.py:146 -#: ../../gnome/mainwindow.glade:223 +#: ../../qt4/app.py:122 +msgid "Config File Help" +msgstr "" + +#: ../../qt4/app.py:125 msgid "Website" msgstr "אתר הבית" -#: ../../gnome/app.py:192 ../../kde4/app.py:148 +#: ../../qt4/app.py:127 ../../qt4/app.py:982 +msgid "Changelog" +msgstr "" + +#: ../../qt4/app.py:129 msgid "FAQ" msgstr "" -#: ../../gnome/app.py:193 ../../kde4/app.py:150 +#: ../../qt4/app.py:131 msgid "Ask a question" msgstr "שאל שאלה" -#: ../../gnome/app.py:194 ../../kde4/app.py:152 +#: ../../qt4/app.py:133 msgid "Report a bug" msgstr "דיווח על תקלה" -#: ../../gnome/app.py:196 ../../kde4/app.py:155 +#: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "אודות" -#: ../../gnome/app.py:202 ../../gnome/app.py:887 -#: ../../gnome/restoredialog.py:84 ../../gnome/snapshotsdialog.py:83 -#: ../../gnome/snapshotsdialog.py:244 ../../kde4/app.py:206 -#: ../../kde4/app.py:216 ../../kde4/restoredialog.py:68 -#: ../../kde4/snapshotsdialog.py:111 ../../kde4/snapshotsdialog.py:117 -#: ../../gnome/mainwindow.glade:350 ../../gnome/mainwindow.glade:352 -#: ../../gnome/snapshotsdialog.glade:169 ../../gnome/snapshotsdialog.glade:171 +#: ../../qt4/app.py:163 +msgid "Up" +msgstr "מעלה" + +#: ../../qt4/app.py:174 ../../qt4/settingsdialog.py:1776 +msgid "Show hidden files" +msgstr "הצג קבצים מוסתרים" + +#: ../../qt4/app.py:184 ../../qt4/app.py:199 ../../qt4/app.py:233 +#: ../../qt4/restoredialog.py:62 ../../qt4/settingsdialog.py:1818 +#: ../../qt4/snapshotsdialog.py:134 ../../qt4/snapshotsdialog.py:139 msgid "Restore" msgstr "שחזור" -#: ../../gnome/app.py:203 ../../gnome/app.py:888 ../../gnome/gnometools.py:67 -#: ../../gnome/snapshotsdialog.py:84 ../../gnome/snapshotsdialog.py:245 -#: ../../kde4/app.py:208 ../../kde4/restoredialog.py:42 -#: ../../kde4/snapshotsdialog.py:113 +#: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 +#: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "לשחזר ל..." -#: ../../gnome/app.py:205 ../../gnome/app.py:896 ../../gnome/app.py:1146 -#: ../../kde4/app.py:1041 -#, python-format -msgid "Restore '%s'" -msgstr "לשחזר '%s'" +#: ../../qt4/app.py:194 +msgid "Restore and delete new files" +msgstr "" -#: ../../gnome/app.py:207 ../../gnome/app.py:897 ../../gnome/app.py:1147 -#: ../../kde4/app.py:1042 +#: ../../qt4/app.py:201 #, python-format -msgid "Restore '%s' to ..." -msgstr "לשחזר '%s' ל..." +msgid "" +"Restore selected file or folder.\n" +"If this button is grayed out this is most likely because \"%(now)s\" is " +"selected in left hand snapshots list." +msgstr "" + +#: ../../qt4/app.py:206 ../../qt4/logviewdialog.py:67 +#: ../../qt4/qt4tools.py:160 ../../qt4/snapshotsdialog.py:96 +msgid "Snapshots" +msgstr "גיבויים" + +#: ../../qt4/app.py:213 +msgid "Snapshot" +msgstr "" + +#: ../../qt4/app.py:224 +msgid "View" +msgstr "" -#: ../../gnome/app.py:226 ../../kde4/app.py:235 +#: ../../qt4/app.py:277 msgid "Shortcuts" msgstr "קיצורים" -#: ../../gnome/app.py:249 -msgid "Name" -msgstr "שם" - -#: ../../gnome/app.py:260 -msgid "Size" -msgstr "גודל" - -#: ../../gnome/app.py:267 -msgid "Date" -msgstr "תאריך" - -#: ../../gnome/app.py:286 ../../gnome/app.py:883 -#: ../../gnome/snapshotsdialog.py:116 ../../kde4/app.py:171 -#: ../../kde4/app.py:221 ../../kde4/snapshotsdialog.py:91 -#: ../../gnome/mainwindow.glade:366 ../../gnome/mainwindow.glade:368 -#: ../../gnome/snapshotsdialog.glade:8 -msgid "Snapshots" -msgstr "גיבויים" +#: ../../qt4/app.py:295 +msgid "" +"This folder doesn't exist\n" +"in the current selected snapshot!" +msgstr "" + +#: ../../qt4/app.py:359 +msgid "Add to Include" +msgstr "" + +#: ../../qt4/app.py:360 +msgid "Add to Exclude" +msgstr "" + +#: ../../qt4/app.py:416 +#, python-format +msgid "" +"%(appName)s is not configured. Would you like to restore a previous " +"configuration?" +msgstr "" -#: ../../gnome/app.py:348 ../../kde4/app.py:362 +#: ../../qt4/app.py:440 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it and then press OK" @@ -724,730 +832,791 @@ "לא ניתן למצוא את תיקיית הגיבויים.\n" "אם היא נמצאת על כונן נשלף יש לחבר אותו וללחוץ על אישור" -#: ../../gnome/app.py:611 ../../kde4/app.py:590 -msgid "Done, no backup needed" -msgstr "הסתיים, לא נדרש גיבוי" +#: ../../qt4/app.py:473 +msgid "" +"If you close this window Back In Time will not be able to shutdown your " +"system when the snapshot has finished.\n" +"Do you really want to close?" +msgstr "" -#: ../../gnome/app.py:619 ../../kde4/app.py:598 +#: ../../qt4/app.py:667 ../../qt4/app.py:703 msgid "Working:" msgstr "בעבודה:" -#: ../../gnome/app.py:623 ../../kde4/app.py:602 +#: ../../qt4/app.py:695 +msgid "Done, no backup needed" +msgstr "הסתיים, לא נדרש גיבוי" + +#: ../../qt4/app.py:707 msgid "Error:" msgstr "שגיאה:" -#: ../../gnome/app.py:636 ../../kde4/app.py:649 +#: ../../qt4/app.py:726 ../../qt4/qt4systrayicon.py:153 +msgid "Sent:" +msgstr "" + +#: ../../qt4/app.py:727 ../../qt4/qt4systrayicon.py:154 +msgid "Speed:" +msgstr "" + +#: ../../qt4/app.py:728 ../../qt4/qt4systrayicon.py:155 +msgid "ETA:" +msgstr "" + +#: ../../qt4/app.py:777 msgid "Global" msgstr "כללי" -#: ../../gnome/app.py:637 ../../kde4/app.py:650 +#: ../../qt4/app.py:778 msgid "Root" msgstr "תיקיית העל" -#: ../../gnome/app.py:638 ../../kde4/app.py:651 +#: ../../qt4/app.py:779 msgid "Home" msgstr "תיקיית הבית" -#: ../../gnome/app.py:662 -msgid "Bookmarks" -msgstr "סימניות" - -#: ../../gnome/app.py:675 ../../kde4/app.py:662 +#: ../../qt4/app.py:794 msgid "Backup folders" msgstr "תיקיות הגיבוי" -#: ../../gnome/app.py:701 ../../kde4/app.py:734 -msgid "Today" -msgstr "היום" +#: ../../qt4/app.py:849 +msgid "This is NOT a snapshot but a live view of your local files" +msgstr "" -#: ../../gnome/app.py:705 ../../kde4/app.py:738 -msgid "Yesterday" -msgstr "אתמול" +#: ../../qt4/app.py:860 ../../qt4/app.py:1476 +#, python-format +msgid "Last check %s" +msgstr "" -#: ../../gnome/app.py:709 ../../kde4/app.py:742 -msgid "This week" -msgstr "השבוע" +#: ../../qt4/app.py:928 +#, python-format +msgid "" +"Are you sure you want to remove the snapshot:\n" +"%s" +msgstr "" +"אתה בטוח שברצונך להסיר את הגיבוי:\n" +"%s" -#: ../../gnome/app.py:713 ../../kde4/app.py:746 -msgid "Last week" -msgstr "שבוע שעבר" +#: ../../qt4/app.py:1004 +#, python-format +msgid "" +"Backup local files before overwriting or\n" +"removing with trailing '%(suffix)s'." +msgstr "" -#: ../../gnome/app.py:764 ../../kde4/app.py:398 +#: ../../qt4/app.py:1010 msgid "" -"If you close this window Back In Time will not be able to shutdown your " -"system when the snapshot has finished.\n" -"Do you really want to close?" +"Are you sure you want to remove all newer files in your original folder?" msgstr "" -#: ../../gnome/app.py:881 ../../gnome/snapshotsdialog.py:238 -msgid "Open" -msgstr "פתיחה" +#: ../../qt4/app.py:1014 +msgid "" +"WARNING: deleting files in filesystem root could break your whole system!!!" +msgstr "" -#: ../../gnome/app.py:1056 ../../kde4/app.py:90 ../../kde4/app.py:805 -#: ../../gnome/mainwindow.glade:73 ../../gnome/mainwindow.glade:75 -msgid "Snapshot Name" -msgstr "שם הגיבוי" +#: ../../qt4/app.py:1016 +msgid "Files to be restored:" +msgstr "" -#: ../../gnome/app.py:1075 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +#: ../../qt4/app.py:1031 +msgid "Do you really want to restore this files(s):" msgstr "" -"האם אתה בטוח שברצונך להסיר את הגיבוי:\n" -"%s" -#: ../../gnome/app.py:1123 ../../kde4/app.py:1010 +#: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "גיבוי: %s" -#: ../../gnome/app.py:1124 ../../kde4/app.py:1011 +#: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "צפיה בגיבוי שבוצע ב־%s" -#: ../../gnome/app.py:1126 ../../kde4/app.py:1013 +#: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "צפיה בתוכן הנוכחי של הכונן" -#: ../../gnome/logviewdialog.py:106 ../../gnome/settingsdialog.py:414 -#: ../../kde4/logviewdialog.py:83 ../../kde4/settingsdialog.py:590 -msgid "All" -msgstr "הכל" +#: ../../qt4/app.py:1268 +#, python-format +msgid "Restore '%s'" +msgstr "לשחזר '%s'" -#: ../../gnome/logviewdialog.py:107 ../../gnome/settingsdialog.py:412 -#: ../../kde4/logviewdialog.py:84 ../../kde4/settingsdialog.py:588 -msgid "Errors" -msgstr "שגיאות" +#: ../../qt4/app.py:1269 +#, python-format +msgid "Restore '%s' to ..." +msgstr "לשחזר '%s' ל..." -#: ../../gnome/logviewdialog.py:112 ../../kde4/logviewdialog.py:89 -msgid "Changes" -msgstr "שינויים" +#: ../../qt4/app.py:1270 +#, python-format +msgid "Restore '%s' and delete new files" +msgstr "" -#: ../../gnome/logviewdialog.py:115 ../../kde4/logviewdialog.py:92 -msgid "Informations" +#: ../../qt4/app.py:1368 ../../qt4/app.py:1385 +msgid "Authors" msgstr "" -#: ../../gnome/settingsdialog.py:235 ../../kde4/settingsdialog.py:387 -msgid "Include files and folders" +#: ../../qt4/app.py:1369 ../../qt4/app.py:1388 +msgid "Translations" msgstr "" -#: ../../gnome/settingsdialog.py:264 -msgid "Exclude patterns, files or folders" +#: ../../qt4/app.py:1370 ../../qt4/app.py:1391 +msgid "License" msgstr "" -#: ../../gnome/settingsdialog.py:411 ../../kde4/settingsdialog.py:587 -msgid "None" +#: ../../qt4/logviewdialog.py:49 +msgid "Last Log View" msgstr "" -#: ../../gnome/settingsdialog.py:413 ../../kde4/settingsdialog.py:589 -msgid "Changes & Errors" -msgstr "שינוים ושגיאות" +#: ../../qt4/logviewdialog.py:51 +msgid "Snapshot Log View" +msgstr "" -#: ../../gnome/settingsdialog.py:458 -msgid "Snapshots folder" -msgstr "תיקיית הגיבויים" +#: ../../qt4/logviewdialog.py:59 ../../qt4/settingsdialog.py:59 +#: ../../qt4/settingsdialog.py:274 ../../qt4/settingsdialog.py:1899 +msgid "Profile:" +msgstr "פרופיל:" -#: ../../gnome/settingsdialog.py:466 ../../kde4/settingsdialog.py:1314 -msgid "Are you sure you want to change snapshots folder ?" -msgstr "האם לשנות את תיקיית הגיבויים?" +#: ../../qt4/logviewdialog.py:81 +msgid "Filter:" +msgstr "סינון:" -#: ../../gnome/settingsdialog.py:901 ../../kde4/settingsdialog.py:914 -msgid "" -"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " -"*/3 for periodic backups every 3 hours" -msgstr "" - -#: ../../gnome/settingsdialog.py:1141 ../../kde4/settingsdialog.py:653 -msgid "New profile" -msgstr "פרופיל חדש" - -#: ../../gnome/settingsdialog.py:1155 ../../kde4/settingsdialog.py:669 -msgid "Rename profile" -msgstr "שינוי שם לפרופיל" - -#: ../../gnome/settingsdialog.py:1167 ../../kde4/settingsdialog.py:683 -#, python-format -msgid "Are you sure you want to delete the profile \"%s\" ?" -msgstr "האם אתה בטוח שברצונך למחוק את הפרופיל \"%s\" ?" - -#: ../../gnome/settingsdialog.py:1173 ../../kde4/settingsdialog.py:1292 -msgid "Include folder" -msgstr "לכלול תיקיה" - -#: ../../gnome/settingsdialog.py:1193 ../../kde4/settingsdialog.py:1278 -msgid "Include file" -msgstr "לכלול קובץ" - -#: ../../gnome/settingsdialog.py:1235 ../../kde4/settingsdialog.py:1241 -msgid "Exclude pattern" -msgstr "הכללת תבנית" - -#: ../../gnome/settingsdialog.py:1240 ../../kde4/settingsdialog.py:1251 -msgid "Exclude patterns can't contain ':' char !" -msgstr "הכללת התבניות לא יכולה להכיל ':' תו !" - -#: ../../gnome/settingsdialog.py:1246 ../../kde4/settingsdialog.py:1257 -msgid "Exclude file" -msgstr "הכללת קובץ" - -#: ../../gnome/settingsdialog.py:1257 ../../kde4/settingsdialog.py:1261 -msgid "Exclude folder" -msgstr "הכללת תיקיה" +#: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 +msgid "All" +msgstr "הכל" -#: ../../gnome/snapshotsdialog.py:240 -msgid "Jump to" -msgstr "מעבר אל" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 +#: ../../qt4/settingsdialog.py:657 +msgid "Errors" +msgstr "שגיאות" -#: ../../gnome/snapshotsdialog.py:248 ../../kde4/snapshotsdialog.py:164 -msgid "Diff" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 +msgid "Changes" msgstr "שינויים" -#: ../../gnome/snapshotsdialog.py:277 ../../kde4/snapshotsdialog.py:339 -msgid "You can't compare a snapshot to itself" -msgstr "לא ניתן להשוות לכידה לעצמה" - -#: ../../gnome/snapshotsdialog.py:284 ../../kde4/snapshotsdialog.py:346 -#, python-format -msgid "Command not found: %s" -msgstr "הפקודה לא נמצאה: %s" - -#: ../../gnome/snapshotsdialog.py:307 ../../kde4/snapshotsdialog.py:367 -#, python-format -msgid "" -"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" +#: ../../qt4/logviewdialog.py:92 +msgid "Informations" msgstr "" -#: ../../gnome/snapshotsdialog.py:310 ../../kde4/snapshotsdialog.py:370 -#, python-format -msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +#: ../../qt4/logviewdialog.py:101 +msgid "[E] Error, [I] Information, [C] Change" msgstr "" -#: ../../gnome/snapshotsdialog.py:312 ../../kde4/snapshotsdialog.py:372 -msgid "WARNING: This can not be revoked!" +#: ../../qt4/logviewdialog.py:104 +msgid "decode paths" msgstr "" -#: ../../gnome/snapshotsdialog.py:317 ../../kde4/snapshotsdialog.py:377 -#, python-format -msgid "Exclude \"%s\" from future snapshots?" +#: ../../qt4/messagebox.py:56 +msgid "Error" msgstr "" -#: ../../kde4/app.py:86 ../../gnome/mainwindow.glade:58 -#: ../../gnome/mainwindow.glade:60 -msgid "Refresh snapshots list" -msgstr "לרענן רשימת גיבוים" - -#: ../../kde4/app.py:94 ../../gnome/mainwindow.glade:88 -#: ../../gnome/mainwindow.glade:90 -msgid "Remove Snapshot" -msgstr "הסר לכידה" - -#: ../../kde4/app.py:98 ../../gnome/mainwindow.glade:105 -msgid "View Snapshot Log" +#: ../../qt4/messagebox.py:62 ../../qt4/messagebox.py:68 +msgid "Question" msgstr "" -#: ../../kde4/app.py:102 ../../gnome/mainwindow.glade:121 -msgid "View Last Log" +#: ../../qt4/qt4systrayicon.py:69 +msgid "Start BackInTime" msgstr "" -#: ../../kde4/app.py:108 ../../kde4/settingsdialog.py:69 -#: ../../gnome/mainwindow.glade:144 ../../gnome/mainwindow.glade:146 -#: ../../gnome/settingsdialog.glade:7 -msgid "Settings" -msgstr "הגדרות" - -#: ../../kde4/app.py:124 ../../gnome/mainwindow.glade:169 -msgid "Shutdown system after snapshot has finished." -msgstr "" +#: ../../qt4/qt4systrayicon.py:124 +msgid "Working..." +msgstr "פועל..." -#: ../../kde4/app.py:131 ../../gnome/mainwindow.glade:184 -#: ../../gnome/mainwindow.glade:186 -msgid "Exit" -msgstr "יציאה" +#: ../../qt4/qt4tools.py:178 +msgid "Today" +msgstr "היום" -#: ../../kde4/app.py:186 ../../gnome/mainwindow.glade:289 -msgid "Up" -msgstr "מעלה" +#: ../../qt4/qt4tools.py:183 +msgid "Yesterday" +msgstr "אתמול" -#: ../../kde4/app.py:199 ../../gnome/mainwindow.glade:325 -msgid "Show hidden files" -msgstr "הצג קבצים מוסתרים" +#: ../../qt4/qt4tools.py:188 +msgid "This week" +msgstr "השבוע" -#: ../../kde4/app.py:244 -msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" -msgstr "" -"התיקיה אינה קיימת\n" -"בגיבוי הנוכחי !" +#: ../../qt4/qt4tools.py:193 +msgid "Last week" +msgstr "שבוע שעבר" -#: ../../kde4/app.py:839 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +#: ../../qt4/restoredialog.py:75 +msgid "Show full Log" msgstr "" -"אתה בטוח שברצונך להסיר את הגיבוי:\n" -"%s" -#: ../../kde4/app.py:1140 ../../kde4/kde4systrayicon.py:117 -msgid "Working..." -msgstr "פועל..." +#: ../../qt4/settingsdialog.py:68 +msgid "Edit" +msgstr "עריכה" -#: ../../kde4/logviewdialog.py:55 -msgid "Error Log View" +#: ../../qt4/settingsdialog.py:73 +msgid "Modify for Full System Backup" msgstr "" -#: ../../kde4/logviewdialog.py:65 ../../kde4/settingsdialog.py:79 -#: ../../kde4/settingsdialog.py:293 ../../gnome/logviewdialog.glade:73 -#: ../../gnome/settingsdialog.glade:72 -msgid "Profile:" -msgstr "פרופיל:" - -#: ../../kde4/logviewdialog.py:77 ../../gnome/logviewdialog.glade:110 -msgid "Filter:" -msgstr "סינון:" - -#: ../../kde4/logviewdialog.py:100 ../../gnome/logviewdialog.glade:169 -msgid "[E] Error, [I] Information, [C] Change" +#: ../../qt4/settingsdialog.py:77 ../../qt4/settingsdialog.py:451 +msgid "Add" msgstr "" -#: ../../kde4/logviewdialog.py:103 ../../gnome/logviewdialog.glade:195 -msgid "decode paths" +#: ../../qt4/settingsdialog.py:81 ../../qt4/settingsdialog.py:408 +#: ../../qt4/settingsdialog.py:467 +msgid "Remove" msgstr "" -#: ../../kde4/settingsdialog.py:88 -msgid "Edit" -msgstr "עריכה" - -#: ../../kde4/settingsdialog.py:106 ../../gnome/settingsdialog.glade:1207 +#: ../../qt4/settingsdialog.py:96 msgid "General" msgstr "כללי" -#: ../../kde4/settingsdialog.py:114 ../../gnome/settingsdialog.glade:199 +#: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "מצב:" -#: ../../kde4/settingsdialog.py:127 ../../kde4/settingsdialog.py:1311 +#: ../../qt4/settingsdialog.py:119 +#, python-format +msgid "" +"Warning: %(app)s uses EncFS for encryption. A recent security audit " +"revealed several possible attack vectors for this. Please take a look at 'A " +"NOTE ON SECURITY' in 'man backintime'." +msgstr "" + +#: ../../qt4/settingsdialog.py:129 ../../qt4/settingsdialog.py:1568 msgid "Where to save snapshots" msgstr "איפה לשמור גיבויים" -#: ../../kde4/settingsdialog.py:146 +#: ../../qt4/settingsdialog.py:145 +msgid "Folder" +msgstr "" + +#: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "הגדרות SSH" -#: ../../kde4/settingsdialog.py:158 ../../kde4/settingsdialog.py:283 -#: ../../gnome/settingsdialog.glade:323 ../../gnome/settingsdialog.glade:583 -#: ../../gnome/settingsdialog.glade:874 +#: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "" -#: ../../kde4/settingsdialog.py:163 ../../gnome/settingsdialog.glade:350 -#: ../../gnome/settingsdialog.glade:610 +#: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "פורט:" -#: ../../kde4/settingsdialog.py:168 ../../kde4/settingsdialog.py:288 -#: ../../gnome/settingsdialog.glade:377 ../../gnome/settingsdialog.glade:637 -#: ../../gnome/settingsdialog.glade:902 +#: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "" -#: ../../kde4/settingsdialog.py:173 ../../gnome/settingsdialog.glade:416 +#: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" -#: ../../kde4/settingsdialog.py:178 ../../gnome/settingsdialog.glade:459 +#: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "צופן:" -#: ../../kde4/settingsdialog.py:184 +#: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "מפתח פרטי:" -#: ../../kde4/settingsdialog.py:228 ../../kde4/settingsdialog.py:237 -#: ../../kde4/settingsdialog.py:243 ../../gnome/settingsdialog.glade:703 -#: ../../gnome/settingsdialog.glade:743 +#: ../../qt4/settingsdialog.py:201 +msgid "Key File" +msgstr "" + +#: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 +#: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "סיסמה" -#: ../../kde4/settingsdialog.py:249 ../../gnome/settingsdialog.glade:775 +#: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" -#: ../../kde4/settingsdialog.py:252 ../../gnome/settingsdialog.glade:792 +#: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" -#: ../../kde4/settingsdialog.py:264 ../../gnome/settingsdialog.glade:968 +#: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "הגדרות מתקדמות" -#: ../../kde4/settingsdialog.py:276 ../../gnome/settingsdialog.glade:848 -msgid "Auto Host / User / Profile Id" +#: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 +msgid "Full snapshot path: " msgstr "" -#: ../../kde4/settingsdialog.py:301 +#: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "תזמון" -#: ../../kde4/settingsdialog.py:311 ../../gnome/settingsdialog.glade:1092 +#: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "יום:" -#: ../../kde4/settingsdialog.py:322 ../../gnome/settingsdialog.glade:1079 +#: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "" -#: ../../kde4/settingsdialog.py:333 ../../gnome/settingsdialog.glade:1066 +#: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "שעה:" -#: ../../kde4/settingsdialog.py:344 ../../gnome/settingsdialog.glade:1053 +#: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "שעות:" -#: ../../kde4/settingsdialog.py:353 ../../gnome/settingsdialog.glade:1014 +#: ../../qt4/settingsdialog.py:339 msgid "" -"Run Back In Time periodically with anacron. This is useful if the computer " -"is not running regular." +"Run Back In Time repeatedly. This is useful if the computer is not running " +"regular." msgstr "" -#: ../../kde4/settingsdialog.py:357 ../../gnome/settingsdialog.glade:1040 -msgid "Frequency in days:" +#: ../../qt4/settingsdialog.py:344 +msgid "Every:" msgstr "" -#: ../../kde4/settingsdialog.py:368 ../../gnome/settingsdialog.glade:1026 +#: ../../qt4/settingsdialog.py:362 msgid "" "Run Back In Time as soon as the drive is connected (only once every X " "days).\n" "You will be prompted for your sudo password." msgstr "" -#: ../../kde4/settingsdialog.py:379 ../../gnome/settingsdialog.glade:1310 +#: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "כלול" -#: ../../kde4/settingsdialog.py:403 ../../kde4/settingsdialog.py:445 -#: ../../gnome/settingsdialog.glade:1411 +#: ../../qt4/settingsdialog.py:381 +msgid "Include files and folders" +msgstr "" + +#: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "הוספת קובץ" -#: ../../kde4/settingsdialog.py:408 ../../kde4/settingsdialog.py:450 -#: ../../gnome/settingsdialog.glade:1427 +#: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "הוספת תיקייה" -#: ../../kde4/settingsdialog.py:418 ../../gnome/settingsdialog.glade:1474 +#: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "כלול" -#: ../../kde4/settingsdialog.py:421 ../../gnome/settingsdialog.glade:1328 +#: ../../qt4/settingsdialog.py:417 msgid "" "Warning: Wildcards ('foo*', '[fF]oo', 'fo?') will be ignored with " "mode 'SSH encrypted'.\n" "Only separate asterisk are allowed ('foo/*', 'foo/**/bar')" msgstr "" -#: ../../kde4/settingsdialog.py:430 +#: ../../qt4/settingsdialog.py:425 +msgid "Exclude patterns, files or folders" +msgstr "" + +#: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "מאוד מומלץ:" -#: ../../kde4/settingsdialog.py:460 ../../gnome/settingsdialog.glade:1905 +#: ../../qt4/settingsdialog.py:463 +msgid "Add default" +msgstr "" + +#: ../../qt4/settingsdialog.py:474 +msgid "Exclude files bigger than: " +msgstr "" + +#: ../../qt4/settingsdialog.py:475 +#, python-format +msgid "" +"Exclude files bigger than value in %(prefix)s.\n" +"With 'Full rsync mode' disabled this will only affect new files\n" +"because for rsync this is a transfer option, not an exclude option.\n" +"So big files that has been backed up before will remain in snapshots\n" +"even if they had changed." +msgstr "" + +#: ../../qt4/settingsdialog.py:493 msgid "Auto-remove" msgstr "הסרה-אוטומטית" -#: ../../kde4/settingsdialog.py:464 ../../gnome/settingsdialog.glade:1608 +#: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "ישן מ:" -#: ../../kde4/settingsdialog.py:478 ../../gnome/settingsdialog.glade:1624 +#: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "אם המקום פנוי קטן מ:" -#: ../../kde4/settingsdialog.py:490 ../../gnome/settingsdialog.glade:1642 +#: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" -#: ../../kde4/settingsdialog.py:514 ../../gnome/settingsdialog.glade:1697 +#: ../../qt4/settingsdialog.py:551 +msgid "Run in background on remote Host." +msgstr "" + +#: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "" -#: ../../kde4/settingsdialog.py:517 ../../kde4/settingsdialog.py:522 -#: ../../gnome/settingsdialog.glade:1705 ../../gnome/settingsdialog.glade:1729 +#: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "" -#: ../../kde4/settingsdialog.py:519 ../../gnome/settingsdialog.glade:1717 +#: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "" -#: ../../kde4/settingsdialog.py:524 ../../gnome/settingsdialog.glade:1743 +#: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "" -#: ../../kde4/settingsdialog.py:527 +#: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "שבועות" -#: ../../kde4/settingsdialog.py:529 ../../gnome/settingsdialog.glade:1769 +#: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "" -#: ../../kde4/settingsdialog.py:532 ../../gnome/settingsdialog.glade:1781 +#: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "חודשים" -#: ../../kde4/settingsdialog.py:534 ../../gnome/settingsdialog.glade:1795 +#: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "" -#: ../../kde4/settingsdialog.py:537 ../../gnome/settingsdialog.glade:1496 +#: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "אל תסיר לכידות בעלות שם" -#: ../../kde4/settingsdialog.py:546 ../../gnome/settingsdialog.glade:2104 +#: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "אפשרויות" -#: ../../kde4/settingsdialog.py:549 ../../gnome/settingsdialog.glade:1920 +#: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "אפשר הודעות" -#: ../../kde4/settingsdialog.py:552 ../../gnome/settingsdialog.glade:1937 +#: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "השבת גיבויים כאשר על בטרייה" -#: ../../kde4/settingsdialog.py:555 +#: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" msgstr "מצב הכוח אינו זמין מהמערכת" -#: ../../kde4/settingsdialog.py:558 ../../gnome/settingsdialog.glade:1955 -msgid "Backup files on restore" -msgstr "גיבוי קבצים בשחזור" +#: ../../qt4/settingsdialog.py:611 +msgid "Run only one snapshot at a time" +msgstr "" + +#: ../../qt4/settingsdialog.py:612 +msgid "" +"Other snapshots will be blocked until the current snapshot is done.\n" +"This is a global option. So it will effect all profiles for this user.\n" +"But you need to activate this for all other users, too." +msgstr "" -#: ../../kde4/settingsdialog.py:561 ../../gnome/settingsdialog.glade:1972 +#: ../../qt4/settingsdialog.py:617 +msgid "Backup replaced files on restore" +msgstr "" + +#: ../../qt4/settingsdialog.py:618 +#, python-format +msgid "" +"Newer versions of files will be renamed with trailing '%(suffix)s' before " +"restoring.\n" +"If you don't need them anymore you can remove them with '%(cmd)s'" +msgstr "" + +#: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "" -#: ../../kde4/settingsdialog.py:564 ../../gnome/settingsdialog.glade:1989 +#: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "" -#: ../../kde4/settingsdialog.py:567 ../../gnome/settingsdialog.glade:2006 +#: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "" -#: ../../kde4/settingsdialog.py:568 ../../gnome/settingsdialog.glade:2032 +#: ../../qt4/settingsdialog.py:634 msgid "" -"- snapshots are no read-only\n" -"- destination file-system must support all linux attributes (dates, rights, " +"- snapshots are not read-only\n" +"- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" -#: ../../kde4/settingsdialog.py:575 ../../gnome/settingsdialog.glade:2045 +#: ../../qt4/settingsdialog.py:641 +msgid "Take a new snapshot regardless of there were changes or not." +msgstr "" + +#: ../../qt4/settingsdialog.py:644 msgid "Check for changes (don't take a new snapshot if nothing changed)" msgstr "" -#: ../../kde4/settingsdialog.py:582 +#: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "" -#: ../../kde4/settingsdialog.py:597 ../../gnome/settingsdialog.glade:2366 -msgid "Expert Options" -msgstr "אפשרויות מתקדמות" +#: ../../qt4/settingsdialog.py:656 +msgid "None" +msgstr "" + +#: ../../qt4/settingsdialog.py:658 +msgid "Changes & Errors" +msgstr "שינוים ושגיאות" -#: ../../kde4/settingsdialog.py:600 +#: ../../qt4/settingsdialog.py:674 msgid "Change these options only if you really know what you are doing !" msgstr "עשו שינוים בהגדרות אלו רק אם אתם באמת יודעים מה אתם עושים !" -#: ../../kde4/settingsdialog.py:608 ../../gnome/settingsdialog.glade:2133 -msgid "Run 'nice' as cron job (default: enabled)" -msgstr "הפעל 'עדיפות מתוזמנת' כמשימה מתוזמנת (ברירת מחדל: מופעל)" +#: ../../qt4/settingsdialog.py:678 +msgid "Run 'nice':" +msgstr "" + +#: ../../qt4/settingsdialog.py:684 ../../qt4/settingsdialog.py:696 +msgid "as cron job" +msgstr "" + +#: ../../qt4/settingsdialog.py:687 ../../qt4/settingsdialog.py:702 +#: ../../qt4/settingsdialog.py:716 +msgid "on remote host" +msgstr "" + +#: ../../qt4/settingsdialog.py:690 +msgid "Run 'ionice':" +msgstr "" + +#: ../../qt4/settingsdialog.py:699 +msgid "when taking a manual snapshot" +msgstr "" -#: ../../kde4/settingsdialog.py:611 ../../gnome/settingsdialog.glade:2150 -msgid "Run 'ionice' as cron job (default: enabled)" -msgstr "הפעל 'עדיפות מתוזמנת לתיקיה' כמשימה מתוזמנת (ברירת מחדל: מופעל)" +#: ../../qt4/settingsdialog.py:706 +msgid "Run 'rsync' with 'nocache':" +msgstr "" -#: ../../kde4/settingsdialog.py:614 ../../gnome/settingsdialog.glade:2167 -msgid "Run 'ionice' when taking a manual snapshot (default: disabled)" +#: ../../qt4/settingsdialog.py:712 +msgid "on local machine" msgstr "" -#: ../../kde4/settingsdialog.py:617 ../../gnome/settingsdialog.glade:2184 -msgid "Run 'nice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:719 +msgid "Redirect stdout to /dev/null in cronjobs." msgstr "" -#: ../../kde4/settingsdialog.py:620 ../../gnome/settingsdialog.glade:2201 -msgid "Run 'ionice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:725 +msgid "Redirect stderr to /dev/null in cronjobs." msgstr "" -#: ../../kde4/settingsdialog.py:626 ../../gnome/settingsdialog.glade:2224 +#: ../../qt4/settingsdialog.py:734 msgid "Limit rsync bandwidth usage: " msgstr "" -#: ../../kde4/settingsdialog.py:629 ../../gnome/settingsdialog.glade:2259 +#: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" -#: ../../kde4/settingsdialog.py:634 ../../gnome/settingsdialog.glade:2280 +#: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "" -#: ../../kde4/settingsdialog.py:637 ../../gnome/settingsdialog.glade:2297 +#: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "" -#: ../../kde4/settingsdialog.py:640 ../../gnome/settingsdialog.glade:2314 +#: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute links)" msgstr "" -#: ../../kde4/settingsdialog.py:643 ../../gnome/settingsdialog.glade:2331 -msgid "Copy links (dereference symbolic links)" +#: ../../qt4/settingsdialog.py:834 +msgid "Paste additional options to rsync" msgstr "" -#: ../../kde4/snapshotsdialog.py:46 ../../kde4/snapshotsdialog.py:173 -#: ../../gnome/snapshotsdialog.glade:385 -msgid "Diff Options" -msgstr "אפשרויות שינויים" - -#: ../../kde4/snapshotsdialog.py:56 ../../gnome/snapshotsdialog.glade:314 -msgid "Command:" -msgstr "פקודה:" - -#: ../../kde4/snapshotsdialog.py:60 ../../gnome/snapshotsdialog.glade:322 -msgid "Parameters:" -msgstr "פרמטרים:" - -#: ../../kde4/snapshotsdialog.py:64 ../../gnome/snapshotsdialog.glade:334 -msgid "Use %1 and %2 for path parameters" -msgstr "השתמש ב־%1 ו־%2 כפרמטרים לניתוב" +#: ../../qt4/settingsdialog.py:837 +msgid "" +"Options must be quoted e.g. --exclude-from=\"/path/to/my exclude file\"." +msgstr "" -#: ../../kde4/snapshotsdialog.py:123 ../../gnome/snapshotsdialog.glade:184 -#: ../../gnome/snapshotsdialog.glade:186 -msgid "Delete" +#: ../../qt4/settingsdialog.py:847 +msgid "Add prefix to SSH commands" msgstr "" -#: ../../kde4/snapshotsdialog.py:128 ../../gnome/snapshotsdialog.glade:199 -#: ../../gnome/snapshotsdialog.glade:201 -msgid "Select All" +#: ../../qt4/settingsdialog.py:850 +#, python-format +msgid "" +"Prefix to run before every command on remote host.\n" +"Variables need to be escaped with \\$FOO.\n" +"This doesn't touch rsync. So to add a prefix\n" +"for rsync use \"%(cb_rsync_options)s\" with\n" +"%(rsync_options_value)s\n" +"\n" +"%(default)s: %(def_value)s" msgstr "" -#: ../../kde4/snapshotsdialog.py:132 ../../gnome/snapshotsdialog.glade:88 -msgid "List only different snapshots" +#: ../../qt4/settingsdialog.py:858 ../../qt4/settingsdialog.py:1691 +msgid "default" msgstr "" -#: ../../kde4/snapshotsdialog.py:139 ../../gnome/snapshotsdialog.glade:110 -msgid "List only equal snapshots to: " +#: ../../qt4/settingsdialog.py:875 +msgid "Restore Config" msgstr "" -#: ../../kde4/snapshotsdialog.py:149 ../../gnome/snapshotsdialog.glade:146 -msgid "Deep check (more accurate, but slow)" +#: ../../qt4/settingsdialog.py:891 +msgid "" +"Full system backup can only create a snapshot to be restored to the same " +"physical disk(s) with the same disk partitioning as from the source; " +"restoring to new physical disks or the same disks with different " +"partitioning will yield a potentially broken and unusable system.\n" +"\n" +"Full system backup will override some settings that may have been " +"customized. Continue?" msgstr "" -#: ../../kde4/snapshotsdialog.py:174 -msgid "Go To" -msgstr "עבור אל" +#: ../../qt4/settingsdialog.py:922 +msgid "New profile" +msgstr "פרופיל חדש" + +#: ../../qt4/settingsdialog.py:938 +msgid "Rename profile" +msgstr "שינוי שם לפרופיל" -#: ../../gnome/logviewdialog.glade:9 -msgid "Log View" +#: ../../qt4/settingsdialog.py:952 +#, python-format +msgid "Are you sure you want to delete the profile \"%s\" ?" +msgstr "האם אתה בטוח שברצונך למחוק את הפרופיל \"%s\" ?" + +#: ../../qt4/settingsdialog.py:1191 +msgid "" +"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " +"*/3 for periodic backups every 3 hours" msgstr "" -#: ../../gnome/logviewdialog.glade:179 -msgid "scroll down automatic" +#: ../../qt4/settingsdialog.py:1489 +msgid "Exclude pattern" +msgstr "הכללת תבנית" + +#: ../../qt4/settingsdialog.py:1502 +msgid "Exclude file" +msgstr "הכללת קובץ" + +#: ../../qt4/settingsdialog.py:1506 +msgid "Exclude folder" +msgstr "הכללת תיקיה" + +#: ../../qt4/settingsdialog.py:1525 +msgid "Include file" +msgstr "לכלול קובץ" + +#: ../../qt4/settingsdialog.py:1533 ../../qt4/settingsdialog.py:1553 +#, python-format +msgid "" +"\"%s\" is a symlink. The linked target will not be backed up until you " +"include it, too.\n" +"Would you like to include the symlinks target instead?" msgstr "" -#: ../../gnome/mainwindow.glade:7 -msgid "Back In Time" -msgstr "חזרה בזמן" +#: ../../qt4/settingsdialog.py:1545 +msgid "Include folder" +msgstr "לכלול תיקיה" -#: ../../gnome/mainwindow.glade:45 -msgid "Backup Now" -msgstr "גבה כעת" +#: ../../qt4/settingsdialog.py:1572 +msgid "Are you sure you want to change snapshots folder ?" +msgstr "האם לשנות את תיקיית הגיבויים?" -#: ../../gnome/mainwindow.glade:171 -msgid "Shutdown" +#: ../../qt4/settingsdialog.py:1688 +msgid "enabled" +msgstr "" + +#: ../../qt4/settingsdialog.py:1690 +msgid "disabled" msgstr "" -#: ../../gnome/mainwindow.glade:287 -msgid "Parent folder" -msgstr "תיקיית האב" +#: ../../qt4/settingsdialog.py:1715 +msgid "Restore Settings" +msgstr "" -#: ../../gnome/mainwindow.glade:327 -msgid "Hidden files" -msgstr "קבצים מוסתרים" +#: ../../qt4/settingsdialog.py:1732 +msgid " and add your user to group 'fuse'" +msgstr "" -#: ../../gnome/mainwindow.glade:451 +#: ../../qt4/settingsdialog.py:1736 +#, python-format msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +"Please navigate to the snapshot from which you want to restore %(appName)s's " +"configuration. The path may look like: \n" +"%(samplePath)s\n" +"\n" +"If your snapshots are on a remote drive or if they are encrypted you need to " +"manually mount them first. If you use Mode SSH you also may need to set up " +"public key login to the remote host%(addFuse)s.\n" +"Take a look at 'man backintime'." msgstr "" -"התיקיה הזו לא קיימת\n" -"בגיבוי הנוכחי !" -#: ../../gnome/settingsdialog.glade:287 -msgid "Where to save snapshots" -msgstr "היכן לשמור את הגיבויים" +#: ../../qt4/settingsdialog.py:1794 ../../qt4/settingsdialog.py:1854 +msgid "No config found" +msgstr "" -#: ../../gnome/settingsdialog.glade:483 -msgid "Private key:" -msgstr "מפתח פרטי:" +#: ../../qt4/snapshotsdialog.py:49 ../../qt4/snapshotsdialog.py:173 +msgid "Diff Options" +msgstr "אפשרויות שינויים" -#: ../../gnome/settingsdialog.glade:534 -msgid "Advanced SSH Settings" -msgstr "הגדרות מתקדמות של SSH" +#: ../../qt4/snapshotsdialog.py:56 +msgid "Command:" +msgstr "פקודה:" -#: ../../gnome/settingsdialog.glade:552 -msgid "SSH Settings" -msgstr "הגדרות SSH" +#: ../../qt4/snapshotsdialog.py:60 +msgid "Parameters:" +msgstr "פרמטרים:" -#: ../../gnome/settingsdialog.glade:815 -msgid "Password" -msgstr "סיסמה" +#: ../../qt4/snapshotsdialog.py:64 +msgid "Use %1 and %2 for path parameters" +msgstr "השתמש ב־%1 ו־%2 כפרמטרים לניתוב" -#: ../../gnome/settingsdialog.glade:930 -msgid "Profile Id:" +#: ../../qt4/snapshotsdialog.py:106 +msgid "List only different snapshots" msgstr "" -#: ../../gnome/settingsdialog.glade:1115 -msgid "" -"hours seperate by comma ( e.g. 8,12,18,23) or */3 for periodic backups every " -"3 hours (cron style)" +#: ../../qt4/snapshotsdialog.py:113 +msgid "List only equal snapshots to: " msgstr "" -#: ../../gnome/settingsdialog.glade:1163 -msgid "Schedule" -msgstr "לוח זמנים" +#: ../../qt4/snapshotsdialog.py:123 +msgid "Deep check (more accurate, but slow)" +msgstr "" -#: ../../gnome/settingsdialog.glade:1363 -msgid "Highly recommended:" -msgstr "מאוד מומלץ:" +#: ../../qt4/snapshotsdialog.py:144 +msgid "Delete" +msgstr "" -#: ../../gnome/settingsdialog.glade:1377 -msgid "label" -msgstr "תווית" +#: ../../qt4/snapshotsdialog.py:148 +msgid "Select All" +msgstr "" -#: ../../gnome/settingsdialog.glade:1755 -msgid "week(s)" -msgstr "שבועות" +#: ../../qt4/snapshotsdialog.py:161 +msgid "Diff" +msgstr "שינויים" -#: ../../gnome/settingsdialog.glade:2069 -msgid "Log level:" -msgstr "" +#: ../../qt4/snapshotsdialog.py:172 +msgid "Go To" +msgstr "עבור אל" -#: ../../gnome/settingsdialog.glade:2121 +#: ../../qt4/snapshotsdialog.py:326 +msgid "You can't compare a snapshot to itself" +msgstr "לא ניתן להשוות לכידה לעצמה" + +#: ../../qt4/snapshotsdialog.py:333 +#, python-format +msgid "Command not found: %s" +msgstr "הפקודה לא נמצאה: %s" + +#: ../../qt4/snapshotsdialog.py:354 +#, python-format msgid "" -"Change these options only if you really know what you are doing !" +"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" msgstr "" -#: ../../gnome/snapshotsdialog.glade:263 -msgid "Diff with" -msgstr "השוואה בין" +#: ../../qt4/snapshotsdialog.py:357 +#, python-format +msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +msgstr "" -#: ../../gnome/textinputdialog.glade:7 -msgid "Pattern" -msgstr "תבנית" +#: ../../qt4/snapshotsdialog.py:359 +msgid "WARNING: This can not be revoked!" +msgstr "" -#: ../../gnome/textinputdialog.glade:70 -msgid "Text" +#: ../../qt4/snapshotsdialog.py:374 +#, python-format +msgid "Exclude \"%s\" from future snapshots?" msgstr "" diff -Nru backintime-1.0.36/common/po/hr.po backintime-1.1.12/common/po/hr.po --- backintime-1.0.36/common/po/hr.po 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/po/hr.po 2016-01-11 18:07:58.000000000 +0000 @@ -7,8 +7,8 @@ msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2013-11-09 22:34+0100\n" -"PO-Revision-Date: 2012-04-06 19:12+0000\n" +"POT-Creation-Date: 2015-12-19 00:47+0100\n" +"PO-Revision-Date: 2015-09-09 21:52+0000\n" "Last-Translator: gogo \n" "Language-Team: Croatian \n" "MIME-Version: 1.0\n" @@ -16,198 +16,230 @@ "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Launchpad-Export-Date: 2014-08-06 10:20+0000\n" -"X-Generator: Launchpad (build 17147)\n" +"X-Launchpad-Export-Date: 2016-01-11 17:52+0000\n" +"X-Generator: Launchpad (build 17881)\n" -#: ../../common/config.py:72 +#: ../../common/configfile.py:60 +#, python-format +msgid "Failed to save config: %s" +msgstr "" + +#: ../../common/configfile.py:78 +#, python-format +msgid "Failed to load config: %s" +msgstr "" + +#: ../../common/configfile.py:352 ../../common/configfile.py:414 +#, python-format +msgid "Profile \"%s\" already exists !" +msgstr "Profil \"%s\" već postoji!" + +#: ../../common/configfile.py:383 +msgid "You can't remove the last profile !" +msgstr "Nije moguće ukloniti zadnji profil!" + +#: ../../common/config.py:76 msgid "Disabled" msgstr "Onemogućeno" -#: ../../common/config.py:73 +#: ../../common/config.py:77 msgid "At every boot/reboot" msgstr "Pri svakom paljenju/podizanju" -#: ../../common/config.py:74 +#: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Svakih 5 minuta" -#: ../../common/config.py:75 +#: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Svakih 10 minuta" -#: ../../common/config.py:76 +#: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "" -#: ../../common/config.py:77 +#: ../../common/config.py:81 msgid "Every hour" msgstr "" -#: ../../common/config.py:78 +#: ../../common/config.py:82 msgid "Every 2 hours" msgstr "" -#: ../../common/config.py:79 +#: ../../common/config.py:83 msgid "Every 4 hours" msgstr "" -#: ../../common/config.py:80 +#: ../../common/config.py:84 msgid "Every 6 hours" msgstr "" -#: ../../common/config.py:81 +#: ../../common/config.py:85 msgid "Every 12 hours" msgstr "" -#: ../../common/config.py:82 +#: ../../common/config.py:86 msgid "Custom Hours" msgstr "" -#: ../../common/config.py:83 +#: ../../common/config.py:87 msgid "Every Day" msgstr "Svaki dan" -#: ../../common/config.py:84 -msgid "Daily (anacron)" +#: ../../common/config.py:88 +msgid "Repeatedly (anacron)" msgstr "" -#: ../../common/config.py:85 +#: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "" -#: ../../common/config.py:86 +#: ../../common/config.py:90 msgid "Every Week" msgstr "Svaki tjedan" -#: ../../common/config.py:87 +#: ../../common/config.py:91 msgid "Every Month" msgstr "Svaki mjesec" -#: ../../common/config.py:91 +#: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Dan(a)" -#: ../../common/config.py:92 +#: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Tjedan(a)" -#: ../../common/config.py:93 +#: ../../common/config.py:97 msgid "Year(s)" msgstr "Godina" -#: ../../common/config.py:100 +#: ../../common/config.py:101 +msgid "Hour(s)" +msgstr "" + +#: ../../common/config.py:104 +msgid "Month(s)" +msgstr "" + +#: ../../common/config.py:126 ../../qt4/settingsdialog.py:551 msgid " EXPERIMENTAL!" msgstr "" -#: ../../common/config.py:103 +#: ../../common/config.py:129 msgid "Local" msgstr "" -#: ../../common/config.py:104 +#: ../../common/config.py:130 msgid "SSH" msgstr "" -#: ../../common/config.py:104 ../../common/config.py:106 -#: ../../gnome/settingsdialog.py:475 ../../kde4/settingsdialog.py:1325 +#: ../../common/config.py:130 ../../common/config.py:132 +#: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "" -#: ../../common/config.py:105 +#: ../../common/config.py:131 msgid "Local encrypted" msgstr "" -#: ../../common/config.py:105 ../../common/config.py:106 +#: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "" -#: ../../common/config.py:106 +#: ../../common/config.py:132 msgid "SSH encrypted" msgstr "" -#: ../../common/config.py:112 +#: ../../common/config.py:135 msgid "Default" msgstr "" -#: ../../common/config.py:113 +#: ../../common/config.py:136 msgid "AES128-CTR" msgstr "" -#: ../../common/config.py:114 +#: ../../common/config.py:137 msgid "AES192-CTR" msgstr "" -#: ../../common/config.py:115 +#: ../../common/config.py:138 msgid "AES256-CTR" msgstr "" -#: ../../common/config.py:116 +#: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "" -#: ../../common/config.py:117 +#: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "" -#: ../../common/config.py:118 +#: ../../common/config.py:141 msgid "AES128-CBC" msgstr "" -#: ../../common/config.py:119 +#: ../../common/config.py:142 msgid "3DES-CBC" msgstr "" -#: ../../common/config.py:120 +#: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "" -#: ../../common/config.py:121 +#: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "" -#: ../../common/config.py:122 +#: ../../common/config.py:145 msgid "AES192-CBC" msgstr "" -#: ../../common/config.py:123 +#: ../../common/config.py:146 msgid "AES256-CBC" msgstr "" -#: ../../common/config.py:124 +#: ../../common/config.py:147 msgid "ARCFOUR" msgstr "" -#: ../../common/config.py:129 +#: ../../common/config.py:153 msgid "Main profile" msgstr "Glavni profil" -#: ../../common/config.py:256 ../../common/config.py:275 -#: ../../common/config.py:286 ../../common/config.py:291 +#: ../../common/config.py:289 ../../common/config.py:296 +#: ../../common/config.py:307 ../../common/config.py:312 +#: ../../qt4/qt4systrayicon.py:61 #, python-format msgid "Profile: \"%s\"" msgstr "Profil: \"%s\"" -#: ../../common/config.py:256 +#: ../../common/config.py:289 msgid "Snapshots folder is not valid !" msgstr "Mapa snimki nije valjana" -#: ../../common/config.py:275 +#: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "Morate odabrati barem jednu mapu za rezervu !" -#: ../../common/config.py:286 +#: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "Nije moguće uključiti mapu rezerve !" -#: ../../common/config.py:291 +#: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "Nije moguće uključiti pod-mapu rezerve !" -#: ../../common/config.py:361 +#: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s nije mapa !" -#: ../../common/config.py:376 ../../common/config.py:389 +#: ../../common/config.py:380 +msgid "Host/User/Profile-ID must not be empty!" +msgstr "" + +#: ../../common/config.py:388 ../../common/config.py:420 #, python-format msgid "" "Can't write to: %s\n" @@ -216,59 +248,68 @@ "Nije moguće zapisati u: %s\n" "Provjerite imate li pristup zapisivanju ?" -#: ../../common/config.py:1286 +#: ../../common/config.py:400 +#, python-format msgid "" -"Can't find crontab.\n" -"Are you sure cron is installed ?\n" -"If not you should disable all automatic backups." +"Destination filesystem for '%(path)s' is formatted with FAT which doesn't " +"support hard-links. Please use a native Linux filesystem." msgstr "" -"Nije moguće pronaći crontab.\n" -"Provjerite jeli cron instaliran ?\n" -"Ako nije, onesposobite sve automatske rezerve." -#: ../../common/config.py:1338 +#: ../../common/config.py:405 #, python-format -msgid "Schedule udev doesn't work with mode %s" +msgid "" +"Destination filsystem for '%(path)s' is a SMB mounted share. Please make " +"sure the remote SMB server supports symlinks or activate '%(copyLinks)s' in " +"'%(expertOptions)s'." msgstr "" -#: ../../common/config.py:1342 -#, python-format -msgid "Couldn't find UUID for \"%s\"" +#: ../../common/config.py:408 ../../qt4/settingsdialog.py:815 +msgid "Copy links (dereference symbolic links)" msgstr "" -#: ../../common/config.py:1379 -msgid "Failed to remove udev rules" -msgstr "" +#: ../../common/config.py:409 ../../qt4/settingsdialog.py:669 +msgid "Expert Options" +msgstr "Stručne opcije" -#: ../../common/config.py:1385 -msgid "Failed to create udev rules" +#: ../../common/config.py:411 +#, python-format +msgid "" +"Destination filesystem for '%(path)s is a sshfs mounted share. sshfs doesn't " +"support hard-links. Please use mode 'SSH' instead." msgstr "" -#: ../../common/config.py:1420 +#: ../../common/config.py:1407 msgid "" -"Can't find anacron.\n" -"Are you sure anacron is installed ?\n" -"If not you should disable daily anacron backups." +"Can't find crontab.\n" +"Are you sure cron is installed ?\n" +"If not you should disable all automatic backups." msgstr "" +"Nije moguće pronaći crontab.\n" +"Provjerite jeli cron instaliran ?\n" +"Ako nije, onesposobite sve automatske rezerve." -#: ../../common/config.py:1439 -msgid "Please provide your sudo password to install the udev rule." +#: ../../common/config.py:1411 +msgid "Failed to write new crontab." msgstr "" -#: ../../common/config.py:1445 -msgid "Please provide your sudo password to remove unused udev rules." +#: ../../common/config.py:1505 +#, python-format +msgid "" +"Could not install Udev rule for profile %(profile_id)s. DBus Service " +"'%(dbus_interface)s' wasn't available" msgstr "" -#: ../../common/configfile.py:253 ../../common/configfile.py:315 +#: ../../common/config.py:1517 #, python-format -msgid "Profile \"%s\" already exists !" -msgstr "Profil \"%s\" već postoji!" +msgid "Schedule udev doesn't work with mode %s" +msgstr "" -#: ../../common/configfile.py:284 -msgid "You can't remove the last profile !" -msgstr "Nije moguće ukloniti zadnji profil!" +#: ../../common/config.py:1526 +#, python-format +msgid "Couldn't find UUID for \"%s\"" +msgstr "" -#: ../../common/encfstools.py:95 +#: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" @@ -276,38 +317,38 @@ "%(error)s" msgstr "" -#: ../../common/encfstools.py:105 +#: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "" -#: ../../common/encfstools.py:149 +#: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "" -#: ../../common/encfstools.py:153 +#: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" -#: ../../common/encfstools.py:154 +#: ../../common/encfstools.py:171 msgid "Cancel" msgstr "" -#: ../../common/encfstools.py:157 +#: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "" -#: ../../common/encfstools.py:161 +#: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "" -#: ../../common/encfstools.py:166 +#: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" -#: ../../common/encfstools.py:174 ../../common/sshtools.py:207 +#: ../../common/encfstools.py:196 ../../common/sshtools.py:262 #, python-format msgid "" "%(user)s is not member of group 'fuse'.\n" @@ -315,63 +356,66 @@ "Look at 'man backintime' for further instructions." msgstr "" -#: ../../common/encfstools.py:189 +#: ../../common/encfstools.py:211 msgid "" "encfs version 1.7.2 and before has a bug with option --reverse. Please " "update encfs" msgstr "" -#: ../../common/encfstools.py:453 ../../common/encfstools.py:480 -#: ../../common/snapshots.py:982 ../../common/snapshots.py:1288 -#: ../../kde4/app.py:82 ../../gnome/mainwindow.glade:43 +#: ../../common/encfstools.py:512 ../../common/snapshots.py:1131 +#: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "Uzmi snimku" -#: ../../common/mount.py:195 +#: ../../common/mount.py:204 #, python-format msgid "" "Hash collision occurred in hash_id %s. Incrementing global value " "hash_collision and try again." msgstr "" -#: ../../common/mount.py:246 +#: ../../common/mount.py:259 #, python-format msgid "mountpoint %s not empty." msgstr "" -#: ../../common/mount.py:286 +#: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" -#: ../../common/password.py:425 +#: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" -#: ../../common/snapshots.py:171 ../../gnome/app.py:1127 -#: ../../kde4/app.py:1014 +#: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Sada" -#: ../../common/snapshots.py:182 ../../gnome/gnometools.py:37 +#: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "S GRJEŠKAMA !" -#: ../../common/snapshots.py:282 +#: ../../common/snapshots.py:344 msgid "" "### This log has been decoded with automatic search pattern\n" "### If some paths are not decoded you can manually decode them with:\n" msgstr "" -#: ../../common/snapshots.py:465 +#: ../../common/snapshots.py:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "" -#: ../../common/snapshots.py:564 +#: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "" -#: ../../common/snapshots.py:739 +#: ../../common/snapshots.py:752 ../../qt4/app.py:377 ../../qt4/app.py:675 +#: ../../qt4/app.py:692 ../../qt4/qt4systrayicon.py:65 +msgid "Done" +msgstr "Završeno" + +#: ../../common/snapshots.py:860 msgid "" "Back In Time changed its backup format.\n" "\n" @@ -380,7 +424,7 @@ "Back In Time je promijenio format rezerve.\n" "Vaše stare slike mogu biti premještene prema novom formatu. U redu?" -#: ../../common/snapshots.py:749 +#: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" @@ -397,7 +441,7 @@ "\n" "(Program će biti u mogučnosti razlikovati ih)" -#: ../../common/snapshots.py:752 +#: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" @@ -405,7 +449,7 @@ "Nisu pronađeni profili. Zanavljanje na profile je potrebno, molim ponovno " "pokrenite Back In Time" -#: ../../common/snapshots.py:803 +#: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" @@ -418,7 +462,7 @@ "cannot continue taking snapshots" msgstr "" -#: ../../common/snapshots.py:812 +#: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" @@ -433,7 +477,7 @@ "Možete ručno premjestiti snimke, \n" "ako ste gotovi, ponovno pokrenite Back In Time za nastavak" -#: ../../common/snapshots.py:825 +#: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" @@ -443,7 +487,7 @@ "\n" "Back In Time će nastaviti s uzimanje snimki po rasporedu" -#: ../../common/snapshots.py:830 +#: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" @@ -463,11 +507,11 @@ "\n" "Ako ne želite, ovo će vas upitati pri sljedećem pokretanju Back In Time." -#: ../../common/snapshots.py:839 +#: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "Back In Time će nastaviti s uzimanjem snimki po rasporedu" -#: ../../common/snapshots.py:841 +#: ../../common/snapshots.py:953 msgid "" "Back In Time still cannot continue taking new snapshots.\n" "Restart Back In Time to see the questions again" @@ -475,7 +519,11 @@ "Back In Time još ne može uzimati nove snimke.\n" "Ponovno pokrenite Back In Time za ponovni prolazak kroz pitanja" -#: ../../common/snapshots.py:913 +#: ../../common/snapshots.py:972 +msgid "Deferring backup while on battery" +msgstr "" + +#: ../../common/snapshots.py:1035 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it." @@ -483,7 +531,7 @@ "Nije moguće pronači mapu snimki.\n" "Ako se nalazi na izmjenjivom disku, molimo, spojite ga." -#: ../../common/snapshots.py:915 +#: ../../common/snapshots.py:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." @@ -491,149 +539,156 @@ msgstr[1] "Čekanje %s sekundi." msgstr[2] "Čekanje %s sekundi." -#: ../../common/snapshots.py:941 +#: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "Neuspjelo uzimanje snimke %s !!!" -#: ../../common/snapshots.py:950 +#: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "Završavanje" -#: ../../common/snapshots.py:1088 +#: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "Nije moguće napraviti mapu: %s" -#: ../../common/snapshots.py:1107 +#: ../../common/snapshots.py:1217 msgid "..." msgstr "..." -#: ../../common/snapshots.py:1134 +#: ../../common/snapshots.py:1238 +#, python-format +msgid "Found leftover '%s' which can be continued." +msgstr "" + +#: ../../common/snapshots.py:1250 +#, python-format +msgid "Remove leftover '%s' folder from last run" +msgstr "" + +#: ../../common/snapshots.py:1263 #, python-format msgid "Can't remove folder: %s" msgstr "Nije moguće ukloniti mapu: %s" -#: ../../common/snapshots.py:1219 +#: ../../common/snapshots.py:1340 #, python-format msgid "Compare with snapshot %s" msgstr "Usporedi s snimkom %s" -#: ../../common/snapshots.py:1248 +#: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "Stvori hard-linkove" -#: ../../common/snapshots.py:1335 +#: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "Spremi datoteku postavki ..." -#: ../../common/snapshots.py:1341 +#: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "Spremi dopuštenje ..." -#: ../../common/snapshots.py:1442 +#: ../../common/snapshots.py:1470 +msgid "Save permission over ssh failed. Retry normal method" +msgstr "" + +#: ../../common/snapshots.py:1521 #, python-format msgid "Can't rename %(new_path)s to %(path)s" msgstr "" -#: ../../common/snapshots.py:1562 -msgid "Remove old snapshots" -msgstr "Ukloni stare snimke" - -#: ../../common/snapshots.py:1586 ../../kde4/settingsdialog.py:501 -#: ../../gnome/settingsdialog.glade:1660 +#: ../../common/snapshots.py:1695 ../../common/snapshots.py:1728 +#: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "Smart uklanjanje" -#: ../../common/snapshots.py:1591 +#: ../../common/snapshots.py:1704 +msgid "Remove old snapshots" +msgstr "Ukloni stare snimke" + +#: ../../common/snapshots.py:1733 msgid "Try to keep min free space" msgstr "Pokušaj sačuvati min slobodno mjesta" -#: ../../common/snapshots.py:1621 +#: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" -#: ../../common/sshtools.py:106 +#: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "" -#: ../../common/sshtools.py:113 +#: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "" -#: ../../common/sshtools.py:187 -#, python-format -msgid "" -"Failed to unlock SSH private key:\n" -"Error: %s" -msgstr "" - -#: ../../common/sshtools.py:194 +#: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" -#: ../../common/sshtools.py:199 +#: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" -#: ../../common/sshtools.py:217 +#: ../../common/sshtools.py:278 #, python-format msgid "" "Password-less authentication for %(user)s@%(host)s failed. Look at 'man " "backintime' for further instructions." msgstr "" -#: ../../common/sshtools.py:229 +#: ../../common/sshtools.py:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" -#: ../../common/sshtools.py:254 +#: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" -#: ../../common/sshtools.py:274 +#: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" -#: ../../common/sshtools.py:276 +#: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:278 +#: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:280 +#: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" -#: ../../common/sshtools.py:302 +#: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" -#: ../../common/sshtools.py:325 ../../common/sshtools.py:383 +#: ../../common/sshtools.py:423 ../../common/sshtools.py:553 #, python-format msgid "" "Remote host %(host)s doesn't support '%(command)s':\n" @@ -641,7 +696,7 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:387 +#: ../../common/sshtools.py:556 #, python-format msgid "" "Check commands on host %(host)s returned unknown error:\n" @@ -649,96 +704,149 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:400 +#: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "" -#: ../../gnome/app.py:185 ../../gnome/app.py:594 ../../gnome/app.py:608 -#: ../../kde4/app.py:299 ../../kde4/app.py:570 ../../kde4/app.py:587 -msgid "Done" -msgstr "Završeno" +#: ../../qt4/app.py:81 +msgid "Refresh snapshots list" +msgstr "Osvježi popis snimki" + +#: ../../qt4/app.py:85 ../../qt4/app.py:890 +msgid "Snapshot Name" +msgstr "Ime Snimke" + +#: ../../qt4/app.py:88 +msgid "Remove Snapshot" +msgstr "Ukloni Snimku" + +#: ../../qt4/app.py:91 +msgid "View Snapshot Log" +msgstr "Prikaži Zapis Snimke" + +#: ../../qt4/app.py:94 +msgid "View Last Log" +msgstr "Prikaži Zadnji Zapis" -#: ../../gnome/app.py:189 ../../kde4/app.py:143 ../../kde4/app.py:159 -#: ../../gnome/mainwindow.glade:225 +#: ../../qt4/app.py:99 ../../qt4/settingsdialog.py:51 +msgid "Settings" +msgstr "Postavke" + +#: ../../qt4/app.py:104 +msgid "Shutdown" +msgstr "" + +#: ../../qt4/app.py:105 +msgid "Shutdown system after snapshot has finished." +msgstr "" + +#: ../../qt4/app.py:111 +msgid "Exit" +msgstr "Izlaz" + +#: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 msgid "Help" msgstr "Pomoć" -#: ../../gnome/app.py:191 ../../kde4/app.py:146 -#: ../../gnome/mainwindow.glade:223 +#: ../../qt4/app.py:122 +msgid "Config File Help" +msgstr "" + +#: ../../qt4/app.py:125 msgid "Website" msgstr "Web stranica" -#: ../../gnome/app.py:192 ../../kde4/app.py:148 +#: ../../qt4/app.py:127 ../../qt4/app.py:982 +msgid "Changelog" +msgstr "" + +#: ../../qt4/app.py:129 msgid "FAQ" msgstr "" -#: ../../gnome/app.py:193 ../../kde4/app.py:150 +#: ../../qt4/app.py:131 msgid "Ask a question" msgstr "" -#: ../../gnome/app.py:194 ../../kde4/app.py:152 +#: ../../qt4/app.py:133 msgid "Report a bug" msgstr "" -#: ../../gnome/app.py:196 ../../kde4/app.py:155 +#: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "O programu" -#: ../../gnome/app.py:202 ../../gnome/app.py:887 -#: ../../gnome/restoredialog.py:84 ../../gnome/snapshotsdialog.py:83 -#: ../../gnome/snapshotsdialog.py:244 ../../kde4/app.py:206 -#: ../../kde4/app.py:216 ../../kde4/restoredialog.py:68 -#: ../../kde4/snapshotsdialog.py:111 ../../kde4/snapshotsdialog.py:117 -#: ../../gnome/mainwindow.glade:350 ../../gnome/mainwindow.glade:352 -#: ../../gnome/snapshotsdialog.glade:169 ../../gnome/snapshotsdialog.glade:171 +#: ../../qt4/app.py:163 +msgid "Up" +msgstr "Gore" + +#: ../../qt4/app.py:174 ../../qt4/settingsdialog.py:1776 +msgid "Show hidden files" +msgstr "Prikaži skrivene datoteke" + +#: ../../qt4/app.py:184 ../../qt4/app.py:199 ../../qt4/app.py:233 +#: ../../qt4/restoredialog.py:62 ../../qt4/settingsdialog.py:1818 +#: ../../qt4/snapshotsdialog.py:134 ../../qt4/snapshotsdialog.py:139 msgid "Restore" msgstr "Povrati" -#: ../../gnome/app.py:203 ../../gnome/app.py:888 ../../gnome/gnometools.py:67 -#: ../../gnome/snapshotsdialog.py:84 ../../gnome/snapshotsdialog.py:245 -#: ../../kde4/app.py:208 ../../kde4/restoredialog.py:42 -#: ../../kde4/snapshotsdialog.py:113 +#: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 +#: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "" -#: ../../gnome/app.py:205 ../../gnome/app.py:896 ../../gnome/app.py:1146 -#: ../../kde4/app.py:1041 -#, python-format -msgid "Restore '%s'" +#: ../../qt4/app.py:194 +msgid "Restore and delete new files" msgstr "" -#: ../../gnome/app.py:207 ../../gnome/app.py:897 ../../gnome/app.py:1147 -#: ../../kde4/app.py:1042 +#: ../../qt4/app.py:201 #, python-format -msgid "Restore '%s' to ..." +msgid "" +"Restore selected file or folder.\n" +"If this button is grayed out this is most likely because \"%(now)s\" is " +"selected in left hand snapshots list." +msgstr "" + +#: ../../qt4/app.py:206 ../../qt4/logviewdialog.py:67 +#: ../../qt4/qt4tools.py:160 ../../qt4/snapshotsdialog.py:96 +msgid "Snapshots" +msgstr "Snimke" + +#: ../../qt4/app.py:213 +msgid "Snapshot" +msgstr "" + +#: ../../qt4/app.py:224 +msgid "View" msgstr "" -#: ../../gnome/app.py:226 ../../kde4/app.py:235 +#: ../../qt4/app.py:277 msgid "Shortcuts" msgstr "Prečaci" -#: ../../gnome/app.py:249 -msgid "Name" -msgstr "Naziv" - -#: ../../gnome/app.py:260 -msgid "Size" -msgstr "Veličina" - -#: ../../gnome/app.py:267 -msgid "Date" -msgstr "Nadnevak" - -#: ../../gnome/app.py:286 ../../gnome/app.py:883 -#: ../../gnome/snapshotsdialog.py:116 ../../kde4/app.py:171 -#: ../../kde4/app.py:221 ../../kde4/snapshotsdialog.py:91 -#: ../../gnome/mainwindow.glade:366 ../../gnome/mainwindow.glade:368 -#: ../../gnome/snapshotsdialog.glade:8 -msgid "Snapshots" -msgstr "Snimke" +#: ../../qt4/app.py:295 +msgid "" +"This folder doesn't exist\n" +"in the current selected snapshot!" +msgstr "" + +#: ../../qt4/app.py:359 +msgid "Add to Include" +msgstr "" -#: ../../gnome/app.py:348 ../../kde4/app.py:362 +#: ../../qt4/app.py:360 +msgid "Add to Exclude" +msgstr "" + +#: ../../qt4/app.py:416 +#, python-format +msgid "" +"%(appName)s is not configured. Would you like to restore a previous " +"configuration?" +msgstr "" + +#: ../../qt4/app.py:440 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it and then press OK" @@ -746,728 +854,791 @@ "Nije moguće pronaći mapu snimki.\n" "Ako je na izmjenjivom disku, molimo, spojite ga i pritisnite OK" -#: ../../gnome/app.py:611 ../../kde4/app.py:590 -msgid "Done, no backup needed" -msgstr "Završeno, nije potrebna rezerva" +#: ../../qt4/app.py:473 +msgid "" +"If you close this window Back In Time will not be able to shutdown your " +"system when the snapshot has finished.\n" +"Do you really want to close?" +msgstr "" -#: ../../gnome/app.py:619 ../../kde4/app.py:598 +#: ../../qt4/app.py:667 ../../qt4/app.py:703 msgid "Working:" msgstr "Radim:" -#: ../../gnome/app.py:623 ../../kde4/app.py:602 +#: ../../qt4/app.py:695 +msgid "Done, no backup needed" +msgstr "Završeno, nije potrebna rezerva" + +#: ../../qt4/app.py:707 msgid "Error:" msgstr "Greška:" -#: ../../gnome/app.py:636 ../../kde4/app.py:649 +#: ../../qt4/app.py:726 ../../qt4/qt4systrayicon.py:153 +msgid "Sent:" +msgstr "" + +#: ../../qt4/app.py:727 ../../qt4/qt4systrayicon.py:154 +msgid "Speed:" +msgstr "" + +#: ../../qt4/app.py:728 ../../qt4/qt4systrayicon.py:155 +msgid "ETA:" +msgstr "" + +#: ../../qt4/app.py:777 msgid "Global" msgstr "Globalno" -#: ../../gnome/app.py:637 ../../kde4/app.py:650 +#: ../../qt4/app.py:778 msgid "Root" msgstr "Korijen" -#: ../../gnome/app.py:638 ../../kde4/app.py:651 +#: ../../qt4/app.py:779 msgid "Home" msgstr "Početak" -#: ../../gnome/app.py:662 -msgid "Bookmarks" -msgstr "Zabilješke" - -#: ../../gnome/app.py:675 ../../kde4/app.py:662 +#: ../../qt4/app.py:794 msgid "Backup folders" msgstr "Mape rezerve" -#: ../../gnome/app.py:701 ../../kde4/app.py:734 -msgid "Today" -msgstr "Danas" +#: ../../qt4/app.py:849 +msgid "This is NOT a snapshot but a live view of your local files" +msgstr "" -#: ../../gnome/app.py:705 ../../kde4/app.py:738 -msgid "Yesterday" -msgstr "Jučer" +#: ../../qt4/app.py:860 ../../qt4/app.py:1476 +#, python-format +msgid "Last check %s" +msgstr "" -#: ../../gnome/app.py:709 ../../kde4/app.py:742 -msgid "This week" -msgstr "Ovaj tjedan" +#: ../../qt4/app.py:928 +#, python-format +msgid "" +"Are you sure you want to remove the snapshot:\n" +"%s" +msgstr "" +"Jeste li sigurni da želite ukloniti snimku:\n" +"%s" -#: ../../gnome/app.py:713 ../../kde4/app.py:746 -msgid "Last week" -msgstr "Prošli tjedan" +#: ../../qt4/app.py:1004 +#, python-format +msgid "" +"Backup local files before overwriting or\n" +"removing with trailing '%(suffix)s'." +msgstr "" -#: ../../gnome/app.py:764 ../../kde4/app.py:398 +#: ../../qt4/app.py:1010 msgid "" -"If you close this window Back In Time will not be able to shutdown your " -"system when the snapshot has finished.\n" -"Do you really want to close?" +"Are you sure you want to remove all newer files in your original folder?" msgstr "" -#: ../../gnome/app.py:881 ../../gnome/snapshotsdialog.py:238 -msgid "Open" -msgstr "Otvori" +#: ../../qt4/app.py:1014 +msgid "" +"WARNING: deleting files in filesystem root could break your whole system!!!" +msgstr "" -#: ../../gnome/app.py:1056 ../../kde4/app.py:90 ../../kde4/app.py:805 -#: ../../gnome/mainwindow.glade:73 ../../gnome/mainwindow.glade:75 -msgid "Snapshot Name" -msgstr "Ime Snimke" +#: ../../qt4/app.py:1016 +msgid "Files to be restored:" +msgstr "" -#: ../../gnome/app.py:1075 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +#: ../../qt4/app.py:1031 +msgid "Do you really want to restore this files(s):" msgstr "" -"Jeste li sigurni da želite ukloniti snimku:\n" -"%s" -#: ../../gnome/app.py:1123 ../../kde4/app.py:1010 +#: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "Snimka: %s" -#: ../../gnome/app.py:1124 ../../kde4/app.py:1011 +#: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "Prikaži snimku napravljenu %s" -#: ../../gnome/app.py:1126 ../../kde4/app.py:1013 +#: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "Prikaži trenutni sadržaj diska" -#: ../../gnome/logviewdialog.py:106 ../../gnome/settingsdialog.py:414 -#: ../../kde4/logviewdialog.py:83 ../../kde4/settingsdialog.py:590 +#: ../../qt4/app.py:1268 +#, python-format +msgid "Restore '%s'" +msgstr "" + +#: ../../qt4/app.py:1269 +#, python-format +msgid "Restore '%s' to ..." +msgstr "" + +#: ../../qt4/app.py:1270 +#, python-format +msgid "Restore '%s' and delete new files" +msgstr "" + +#: ../../qt4/app.py:1368 ../../qt4/app.py:1385 +msgid "Authors" +msgstr "" + +#: ../../qt4/app.py:1369 ../../qt4/app.py:1388 +msgid "Translations" +msgstr "" + +#: ../../qt4/app.py:1370 ../../qt4/app.py:1391 +msgid "License" +msgstr "" + +#: ../../qt4/logviewdialog.py:49 +msgid "Last Log View" +msgstr "" + +#: ../../qt4/logviewdialog.py:51 +msgid "Snapshot Log View" +msgstr "" + +#: ../../qt4/logviewdialog.py:59 ../../qt4/settingsdialog.py:59 +#: ../../qt4/settingsdialog.py:274 ../../qt4/settingsdialog.py:1899 +msgid "Profile:" +msgstr "Profil:" + +#: ../../qt4/logviewdialog.py:81 +msgid "Filter:" +msgstr "Filter:" + +#: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 msgid "All" msgstr "Sve" -#: ../../gnome/logviewdialog.py:107 ../../gnome/settingsdialog.py:412 -#: ../../kde4/logviewdialog.py:84 ../../kde4/settingsdialog.py:588 +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 +#: ../../qt4/settingsdialog.py:657 msgid "Errors" msgstr "Grješke" -#: ../../gnome/logviewdialog.py:112 ../../kde4/logviewdialog.py:89 +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 msgid "Changes" msgstr "Promjene" -#: ../../gnome/logviewdialog.py:115 ../../kde4/logviewdialog.py:92 +#: ../../qt4/logviewdialog.py:92 msgid "Informations" msgstr "Informacije" -#: ../../gnome/settingsdialog.py:235 ../../kde4/settingsdialog.py:387 -msgid "Include files and folders" -msgstr "Ukljući mape i datoteke" +#: ../../qt4/logviewdialog.py:101 +msgid "[E] Error, [I] Information, [C] Change" +msgstr "[E] Grješka, [I] Informacije, [C] Promjeni" -#: ../../gnome/settingsdialog.py:264 -msgid "Exclude patterns, files or folders" -msgstr "Iskljući sljedove, datoteke ili mape" - -#: ../../gnome/settingsdialog.py:411 ../../kde4/settingsdialog.py:587 -msgid "None" -msgstr "Nijedno" - -#: ../../gnome/settingsdialog.py:413 ../../kde4/settingsdialog.py:589 -msgid "Changes & Errors" -msgstr "Promjene & Grješke" - -#: ../../gnome/settingsdialog.py:458 -msgid "Snapshots folder" -msgstr "Mapa snimki" - -#: ../../gnome/settingsdialog.py:466 ../../kde4/settingsdialog.py:1314 -msgid "Are you sure you want to change snapshots folder ?" -msgstr "Jeste li sigurni da želite promjeniti mapu snimki?" - -#: ../../gnome/settingsdialog.py:901 ../../kde4/settingsdialog.py:914 -msgid "" -"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " -"*/3 for periodic backups every 3 hours" -msgstr "" - -#: ../../gnome/settingsdialog.py:1141 ../../kde4/settingsdialog.py:653 -msgid "New profile" -msgstr "Novi profil" - -#: ../../gnome/settingsdialog.py:1155 ../../kde4/settingsdialog.py:669 -msgid "Rename profile" -msgstr "Preimenuj profil" - -#: ../../gnome/settingsdialog.py:1167 ../../kde4/settingsdialog.py:683 -#, python-format -msgid "Are you sure you want to delete the profile \"%s\" ?" -msgstr "Jeste li sigurni da želite obrisati profil \"%s\" ?" - -#: ../../gnome/settingsdialog.py:1173 ../../kde4/settingsdialog.py:1292 -msgid "Include folder" -msgstr "Uključi mapu" - -#: ../../gnome/settingsdialog.py:1193 ../../kde4/settingsdialog.py:1278 -msgid "Include file" -msgstr "Uključi datoteku" - -#: ../../gnome/settingsdialog.py:1235 ../../kde4/settingsdialog.py:1241 -msgid "Exclude pattern" -msgstr "Isključi slijed" - -#: ../../gnome/settingsdialog.py:1240 ../../kde4/settingsdialog.py:1251 -msgid "Exclude patterns can't contain ':' char !" -msgstr "" - -#: ../../gnome/settingsdialog.py:1246 ../../kde4/settingsdialog.py:1257 -msgid "Exclude file" -msgstr "Isključi datoteku" - -#: ../../gnome/settingsdialog.py:1257 ../../kde4/settingsdialog.py:1261 -msgid "Exclude folder" -msgstr "Isključi mapu" - -#: ../../gnome/snapshotsdialog.py:240 -msgid "Jump to" -msgstr "" - -#: ../../gnome/snapshotsdialog.py:248 ../../kde4/snapshotsdialog.py:164 -msgid "Diff" -msgstr "Razlika" - -#: ../../gnome/snapshotsdialog.py:277 ../../kde4/snapshotsdialog.py:339 -msgid "You can't compare a snapshot to itself" -msgstr "Nije moguće usporediti snimku s njom samom" - -#: ../../gnome/snapshotsdialog.py:284 ../../kde4/snapshotsdialog.py:346 -#, python-format -msgid "Command not found: %s" -msgstr "Naredba nije pronađena: %s" - -#: ../../gnome/snapshotsdialog.py:307 ../../kde4/snapshotsdialog.py:367 -#, python-format -msgid "" -"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" +#: ../../qt4/logviewdialog.py:104 +msgid "decode paths" msgstr "" -#: ../../gnome/snapshotsdialog.py:310 ../../kde4/snapshotsdialog.py:370 -#, python-format -msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +#: ../../qt4/messagebox.py:56 +msgid "Error" msgstr "" -#: ../../gnome/snapshotsdialog.py:312 ../../kde4/snapshotsdialog.py:372 -msgid "WARNING: This can not be revoked!" +#: ../../qt4/messagebox.py:62 ../../qt4/messagebox.py:68 +msgid "Question" msgstr "" -#: ../../gnome/snapshotsdialog.py:317 ../../kde4/snapshotsdialog.py:377 -#, python-format -msgid "Exclude \"%s\" from future snapshots?" +#: ../../qt4/qt4systrayicon.py:69 +msgid "Start BackInTime" msgstr "" -#: ../../kde4/app.py:86 ../../gnome/mainwindow.glade:58 -#: ../../gnome/mainwindow.glade:60 -msgid "Refresh snapshots list" -msgstr "Osvježi popis snimki" +#: ../../qt4/qt4systrayicon.py:124 +msgid "Working..." +msgstr "Obrađujem..." -#: ../../kde4/app.py:94 ../../gnome/mainwindow.glade:88 -#: ../../gnome/mainwindow.glade:90 -msgid "Remove Snapshot" -msgstr "Ukloni Snimku" +#: ../../qt4/qt4tools.py:178 +msgid "Today" +msgstr "Danas" -#: ../../kde4/app.py:98 ../../gnome/mainwindow.glade:105 -msgid "View Snapshot Log" -msgstr "Prikaži Zapis Snimke" +#: ../../qt4/qt4tools.py:183 +msgid "Yesterday" +msgstr "Jučer" -#: ../../kde4/app.py:102 ../../gnome/mainwindow.glade:121 -msgid "View Last Log" -msgstr "Prikaži Zadnji Zapis" +#: ../../qt4/qt4tools.py:188 +msgid "This week" +msgstr "Ovaj tjedan" -#: ../../kde4/app.py:108 ../../kde4/settingsdialog.py:69 -#: ../../gnome/mainwindow.glade:144 ../../gnome/mainwindow.glade:146 -#: ../../gnome/settingsdialog.glade:7 -msgid "Settings" -msgstr "Postavke" +#: ../../qt4/qt4tools.py:193 +msgid "Last week" +msgstr "Prošli tjedan" -#: ../../kde4/app.py:124 ../../gnome/mainwindow.glade:169 -msgid "Shutdown system after snapshot has finished." +#: ../../qt4/restoredialog.py:75 +msgid "Show full Log" msgstr "" -#: ../../kde4/app.py:131 ../../gnome/mainwindow.glade:184 -#: ../../gnome/mainwindow.glade:186 -msgid "Exit" -msgstr "Izlaz" - -#: ../../kde4/app.py:186 ../../gnome/mainwindow.glade:289 -msgid "Up" -msgstr "Gore" - -#: ../../kde4/app.py:199 ../../gnome/mainwindow.glade:325 -msgid "Show hidden files" -msgstr "Prikaži skrivene datoteke" +#: ../../qt4/settingsdialog.py:68 +msgid "Edit" +msgstr "Uredi" -#: ../../kde4/app.py:244 -msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +#: ../../qt4/settingsdialog.py:73 +msgid "Modify for Full System Backup" msgstr "" -"Ova mapa ne postoji\n" -"u trenutnoj snimci !" -#: ../../kde4/app.py:839 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +#: ../../qt4/settingsdialog.py:77 ../../qt4/settingsdialog.py:451 +msgid "Add" msgstr "" -"Jeste li sigurni da želite ukloniti snimku:\n" -"%s" - -#: ../../kde4/app.py:1140 ../../kde4/kde4systrayicon.py:117 -msgid "Working..." -msgstr "Obrađujem..." - -#: ../../kde4/logviewdialog.py:55 -msgid "Error Log View" -msgstr "Pregled Zapisa o Grješki" - -#: ../../kde4/logviewdialog.py:65 ../../kde4/settingsdialog.py:79 -#: ../../kde4/settingsdialog.py:293 ../../gnome/logviewdialog.glade:73 -#: ../../gnome/settingsdialog.glade:72 -msgid "Profile:" -msgstr "Profil:" -#: ../../kde4/logviewdialog.py:77 ../../gnome/logviewdialog.glade:110 -msgid "Filter:" -msgstr "Filter:" - -#: ../../kde4/logviewdialog.py:100 ../../gnome/logviewdialog.glade:169 -msgid "[E] Error, [I] Information, [C] Change" -msgstr "[E] Grješka, [I] Informacije, [C] Promjeni" - -#: ../../kde4/logviewdialog.py:103 ../../gnome/logviewdialog.glade:195 -msgid "decode paths" +#: ../../qt4/settingsdialog.py:81 ../../qt4/settingsdialog.py:408 +#: ../../qt4/settingsdialog.py:467 +msgid "Remove" msgstr "" -#: ../../kde4/settingsdialog.py:88 -msgid "Edit" -msgstr "Uredi" - -#: ../../kde4/settingsdialog.py:106 ../../gnome/settingsdialog.glade:1207 +#: ../../qt4/settingsdialog.py:96 msgid "General" msgstr "Općenito" -#: ../../kde4/settingsdialog.py:114 ../../gnome/settingsdialog.glade:199 +#: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "" -#: ../../kde4/settingsdialog.py:127 ../../kde4/settingsdialog.py:1311 +#: ../../qt4/settingsdialog.py:119 +#, python-format +msgid "" +"Warning: %(app)s uses EncFS for encryption. A recent security audit " +"revealed several possible attack vectors for this. Please take a look at 'A " +"NOTE ON SECURITY' in 'man backintime'." +msgstr "" + +#: ../../qt4/settingsdialog.py:129 ../../qt4/settingsdialog.py:1568 msgid "Where to save snapshots" msgstr "Gdje sačuvati snimke" -#: ../../kde4/settingsdialog.py:146 +#: ../../qt4/settingsdialog.py:145 +msgid "Folder" +msgstr "" + +#: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" -#: ../../kde4/settingsdialog.py:158 ../../kde4/settingsdialog.py:283 -#: ../../gnome/settingsdialog.glade:323 ../../gnome/settingsdialog.glade:583 -#: ../../gnome/settingsdialog.glade:874 +#: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "Domaćin:" -#: ../../kde4/settingsdialog.py:163 ../../gnome/settingsdialog.glade:350 -#: ../../gnome/settingsdialog.glade:610 +#: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "" -#: ../../kde4/settingsdialog.py:168 ../../kde4/settingsdialog.py:288 -#: ../../gnome/settingsdialog.glade:377 ../../gnome/settingsdialog.glade:637 -#: ../../gnome/settingsdialog.glade:902 +#: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "Korisnik:" -#: ../../kde4/settingsdialog.py:173 ../../gnome/settingsdialog.glade:416 +#: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" -#: ../../kde4/settingsdialog.py:178 ../../gnome/settingsdialog.glade:459 +#: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" -#: ../../kde4/settingsdialog.py:184 +#: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "" -#: ../../kde4/settingsdialog.py:228 ../../kde4/settingsdialog.py:237 -#: ../../kde4/settingsdialog.py:243 ../../gnome/settingsdialog.glade:703 -#: ../../gnome/settingsdialog.glade:743 +#: ../../qt4/settingsdialog.py:201 +msgid "Key File" +msgstr "" + +#: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 +#: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "" -#: ../../kde4/settingsdialog.py:249 ../../gnome/settingsdialog.glade:775 +#: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" -#: ../../kde4/settingsdialog.py:252 ../../gnome/settingsdialog.glade:792 +#: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" -#: ../../kde4/settingsdialog.py:264 ../../gnome/settingsdialog.glade:968 +#: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "Napredno" -#: ../../kde4/settingsdialog.py:276 ../../gnome/settingsdialog.glade:848 -msgid "Auto Host / User / Profile Id" -msgstr "Auto Host / Korisnik / Profil Id" +#: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 +msgid "Full snapshot path: " +msgstr "" -#: ../../kde4/settingsdialog.py:301 +#: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "Raspored" -#: ../../kde4/settingsdialog.py:311 ../../gnome/settingsdialog.glade:1092 +#: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "" -#: ../../kde4/settingsdialog.py:322 ../../gnome/settingsdialog.glade:1079 +#: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "" -#: ../../kde4/settingsdialog.py:333 ../../gnome/settingsdialog.glade:1066 +#: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "Sat:" -#: ../../kde4/settingsdialog.py:344 ../../gnome/settingsdialog.glade:1053 +#: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "" -#: ../../kde4/settingsdialog.py:353 ../../gnome/settingsdialog.glade:1014 +#: ../../qt4/settingsdialog.py:339 msgid "" -"Run Back In Time periodically with anacron. This is useful if the computer " -"is not running regular." +"Run Back In Time repeatedly. This is useful if the computer is not running " +"regular." msgstr "" -#: ../../kde4/settingsdialog.py:357 ../../gnome/settingsdialog.glade:1040 -msgid "Frequency in days:" +#: ../../qt4/settingsdialog.py:344 +msgid "Every:" msgstr "" -#: ../../kde4/settingsdialog.py:368 ../../gnome/settingsdialog.glade:1026 +#: ../../qt4/settingsdialog.py:362 msgid "" "Run Back In Time as soon as the drive is connected (only once every X " "days).\n" "You will be prompted for your sudo password." msgstr "" -#: ../../kde4/settingsdialog.py:379 ../../gnome/settingsdialog.glade:1310 +#: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Uključi" -#: ../../kde4/settingsdialog.py:403 ../../kde4/settingsdialog.py:445 -#: ../../gnome/settingsdialog.glade:1411 +#: ../../qt4/settingsdialog.py:381 +msgid "Include files and folders" +msgstr "Ukljući mape i datoteke" + +#: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "Dodaj datoteku" -#: ../../kde4/settingsdialog.py:408 ../../kde4/settingsdialog.py:450 -#: ../../gnome/settingsdialog.glade:1427 +#: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Dodaj mapu" -#: ../../kde4/settingsdialog.py:418 ../../gnome/settingsdialog.glade:1474 +#: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Isključi" -#: ../../kde4/settingsdialog.py:421 ../../gnome/settingsdialog.glade:1328 +#: ../../qt4/settingsdialog.py:417 msgid "" "Warning: Wildcards ('foo*', '[fF]oo', 'fo?') will be ignored with " "mode 'SSH encrypted'.\n" "Only separate asterisk are allowed ('foo/*', 'foo/**/bar')" msgstr "" -#: ../../kde4/settingsdialog.py:430 +#: ../../qt4/settingsdialog.py:425 +msgid "Exclude patterns, files or folders" +msgstr "Iskljući sljedove, datoteke ili mape" + +#: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "Visoko preporučeno" -#: ../../kde4/settingsdialog.py:460 ../../gnome/settingsdialog.glade:1905 +#: ../../qt4/settingsdialog.py:463 +msgid "Add default" +msgstr "" + +#: ../../qt4/settingsdialog.py:474 +msgid "Exclude files bigger than: " +msgstr "" + +#: ../../qt4/settingsdialog.py:475 +#, python-format +msgid "" +"Exclude files bigger than value in %(prefix)s.\n" +"With 'Full rsync mode' disabled this will only affect new files\n" +"because for rsync this is a transfer option, not an exclude option.\n" +"So big files that has been backed up before will remain in snapshots\n" +"even if they had changed." +msgstr "" + +#: ../../qt4/settingsdialog.py:493 msgid "Auto-remove" msgstr "Auto-ukloni" -#: ../../kde4/settingsdialog.py:464 ../../gnome/settingsdialog.glade:1608 +#: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "Starije od:" -#: ../../kde4/settingsdialog.py:478 ../../gnome/settingsdialog.glade:1624 +#: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "Ako je slobodan prostor manji od:" -#: ../../kde4/settingsdialog.py:490 ../../gnome/settingsdialog.glade:1642 +#: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" -#: ../../kde4/settingsdialog.py:514 ../../gnome/settingsdialog.glade:1697 +#: ../../qt4/settingsdialog.py:551 +msgid "Run in background on remote Host." +msgstr "" + +#: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "" -#: ../../kde4/settingsdialog.py:517 ../../kde4/settingsdialog.py:522 -#: ../../gnome/settingsdialog.glade:1705 ../../gnome/settingsdialog.glade:1729 +#: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "" -#: ../../kde4/settingsdialog.py:519 ../../gnome/settingsdialog.glade:1717 +#: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "" -#: ../../kde4/settingsdialog.py:524 ../../gnome/settingsdialog.glade:1743 +#: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "" -#: ../../kde4/settingsdialog.py:527 +#: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "" -#: ../../kde4/settingsdialog.py:529 ../../gnome/settingsdialog.glade:1769 +#: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "" -#: ../../kde4/settingsdialog.py:532 ../../gnome/settingsdialog.glade:1781 +#: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "" -#: ../../kde4/settingsdialog.py:534 ../../gnome/settingsdialog.glade:1795 +#: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "" -#: ../../kde4/settingsdialog.py:537 ../../gnome/settingsdialog.glade:1496 +#: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "Nemoj uklanjati imenovane snimke" -#: ../../kde4/settingsdialog.py:546 ../../gnome/settingsdialog.glade:2104 +#: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Opcije" -#: ../../kde4/settingsdialog.py:549 ../../gnome/settingsdialog.glade:1920 +#: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Omogući obavijesti" -#: ../../kde4/settingsdialog.py:552 ../../gnome/settingsdialog.glade:1937 +#: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "Onesposobi snimke tijekom rada na bateriji" -#: ../../kde4/settingsdialog.py:555 +#: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" msgstr "Stanje energije nije dostupno od sustava" -#: ../../kde4/settingsdialog.py:558 ../../gnome/settingsdialog.glade:1955 -msgid "Backup files on restore" -msgstr "Napravi rezervu podataka na povraćanju" +#: ../../qt4/settingsdialog.py:611 +msgid "Run only one snapshot at a time" +msgstr "" + +#: ../../qt4/settingsdialog.py:612 +msgid "" +"Other snapshots will be blocked until the current snapshot is done.\n" +"This is a global option. So it will effect all profiles for this user.\n" +"But you need to activate this for all other users, too." +msgstr "" + +#: ../../qt4/settingsdialog.py:617 +msgid "Backup replaced files on restore" +msgstr "" + +#: ../../qt4/settingsdialog.py:618 +#, python-format +msgid "" +"Newer versions of files will be renamed with trailing '%(suffix)s' before " +"restoring.\n" +"If you don't need them anymore you can remove them with '%(cmd)s'" +msgstr "" -#: ../../kde4/settingsdialog.py:561 ../../gnome/settingsdialog.glade:1972 +#: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "Nastavi ne grješkama (zadrži nepotpune snimke)" -#: ../../kde4/settingsdialog.py:564 ../../gnome/settingsdialog.glade:1989 +#: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "" -#: ../../kde4/settingsdialog.py:567 ../../gnome/settingsdialog.glade:2006 +#: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "" -#: ../../kde4/settingsdialog.py:568 ../../gnome/settingsdialog.glade:2032 +#: ../../qt4/settingsdialog.py:634 msgid "" -"- snapshots are no read-only\n" -"- destination file-system must support all linux attributes (dates, rights, " +"- snapshots are not read-only\n" +"- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" -#: ../../kde4/settingsdialog.py:575 ../../gnome/settingsdialog.glade:2045 +#: ../../qt4/settingsdialog.py:641 +msgid "Take a new snapshot regardless of there were changes or not." +msgstr "" + +#: ../../qt4/settingsdialog.py:644 msgid "Check for changes (don't take a new snapshot if nothing changed)" msgstr "" -#: ../../kde4/settingsdialog.py:582 +#: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "Razina Zapisa:" -#: ../../kde4/settingsdialog.py:597 ../../gnome/settingsdialog.glade:2366 -msgid "Expert Options" -msgstr "Stručne opcije" +#: ../../qt4/settingsdialog.py:656 +msgid "None" +msgstr "Nijedno" + +#: ../../qt4/settingsdialog.py:658 +msgid "Changes & Errors" +msgstr "Promjene & Grješke" -#: ../../kde4/settingsdialog.py:600 +#: ../../qt4/settingsdialog.py:674 msgid "Change these options only if you really know what you are doing !" msgstr "Mjenjajte ove opcije samo ako stvarno znate što radite !" -#: ../../kde4/settingsdialog.py:608 ../../gnome/settingsdialog.glade:2133 -msgid "Run 'nice' as cron job (default: enabled)" +#: ../../qt4/settingsdialog.py:678 +msgid "Run 'nice':" +msgstr "" + +#: ../../qt4/settingsdialog.py:684 ../../qt4/settingsdialog.py:696 +msgid "as cron job" +msgstr "" + +#: ../../qt4/settingsdialog.py:687 ../../qt4/settingsdialog.py:702 +#: ../../qt4/settingsdialog.py:716 +msgid "on remote host" msgstr "" -#: ../../kde4/settingsdialog.py:611 ../../gnome/settingsdialog.glade:2150 -msgid "Run 'ionice' as cron job (default: enabled)" +#: ../../qt4/settingsdialog.py:690 +msgid "Run 'ionice':" msgstr "" -#: ../../kde4/settingsdialog.py:614 ../../gnome/settingsdialog.glade:2167 -msgid "Run 'ionice' when taking a manual snapshot (default: disabled)" +#: ../../qt4/settingsdialog.py:699 +msgid "when taking a manual snapshot" msgstr "" -#: ../../kde4/settingsdialog.py:617 ../../gnome/settingsdialog.glade:2184 -msgid "Run 'nice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:706 +msgid "Run 'rsync' with 'nocache':" msgstr "" -#: ../../kde4/settingsdialog.py:620 ../../gnome/settingsdialog.glade:2201 -msgid "Run 'ionice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:712 +msgid "on local machine" msgstr "" -#: ../../kde4/settingsdialog.py:626 ../../gnome/settingsdialog.glade:2224 +#: ../../qt4/settingsdialog.py:719 +msgid "Redirect stdout to /dev/null in cronjobs." +msgstr "" + +#: ../../qt4/settingsdialog.py:725 +msgid "Redirect stderr to /dev/null in cronjobs." +msgstr "" + +#: ../../qt4/settingsdialog.py:734 msgid "Limit rsync bandwidth usage: " msgstr "" -#: ../../kde4/settingsdialog.py:629 ../../gnome/settingsdialog.glade:2259 +#: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" -#: ../../kde4/settingsdialog.py:634 ../../gnome/settingsdialog.glade:2280 +#: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "Sačuvaj ACL" -#: ../../kde4/settingsdialog.py:637 ../../gnome/settingsdialog.glade:2297 +#: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "" -#: ../../kde4/settingsdialog.py:640 ../../gnome/settingsdialog.glade:2314 +#: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute links)" msgstr "" -#: ../../kde4/settingsdialog.py:643 ../../gnome/settingsdialog.glade:2331 -msgid "Copy links (dereference symbolic links)" +#: ../../qt4/settingsdialog.py:834 +msgid "Paste additional options to rsync" msgstr "" -#: ../../kde4/snapshotsdialog.py:46 ../../kde4/snapshotsdialog.py:173 -#: ../../gnome/snapshotsdialog.glade:385 -msgid "Diff Options" +#: ../../qt4/settingsdialog.py:837 +msgid "" +"Options must be quoted e.g. --exclude-from=\"/path/to/my exclude file\"." msgstr "" -#: ../../kde4/snapshotsdialog.py:56 ../../gnome/snapshotsdialog.glade:314 -msgid "Command:" -msgstr "Naredba:" +#: ../../qt4/settingsdialog.py:847 +msgid "Add prefix to SSH commands" +msgstr "" -#: ../../kde4/snapshotsdialog.py:60 ../../gnome/snapshotsdialog.glade:322 -msgid "Parameters:" -msgstr "Parametri:" +#: ../../qt4/settingsdialog.py:850 +#, python-format +msgid "" +"Prefix to run before every command on remote host.\n" +"Variables need to be escaped with \\$FOO.\n" +"This doesn't touch rsync. So to add a prefix\n" +"for rsync use \"%(cb_rsync_options)s\" with\n" +"%(rsync_options_value)s\n" +"\n" +"%(default)s: %(def_value)s" +msgstr "" -#: ../../kde4/snapshotsdialog.py:64 ../../gnome/snapshotsdialog.glade:334 -msgid "Use %1 and %2 for path parameters" +#: ../../qt4/settingsdialog.py:858 ../../qt4/settingsdialog.py:1691 +msgid "default" msgstr "" -#: ../../kde4/snapshotsdialog.py:123 ../../gnome/snapshotsdialog.glade:184 -#: ../../gnome/snapshotsdialog.glade:186 -msgid "Delete" +#: ../../qt4/settingsdialog.py:875 +msgid "Restore Config" msgstr "" -#: ../../kde4/snapshotsdialog.py:128 ../../gnome/snapshotsdialog.glade:199 -#: ../../gnome/snapshotsdialog.glade:201 -msgid "Select All" +#: ../../qt4/settingsdialog.py:891 +msgid "" +"Full system backup can only create a snapshot to be restored to the same " +"physical disk(s) with the same disk partitioning as from the source; " +"restoring to new physical disks or the same disks with different " +"partitioning will yield a potentially broken and unusable system.\n" +"\n" +"Full system backup will override some settings that may have been " +"customized. Continue?" msgstr "" -#: ../../kde4/snapshotsdialog.py:132 ../../gnome/snapshotsdialog.glade:88 -msgid "List only different snapshots" -msgstr "Prikaži samo različite snimke" +#: ../../qt4/settingsdialog.py:922 +msgid "New profile" +msgstr "Novi profil" -#: ../../kde4/snapshotsdialog.py:139 ../../gnome/snapshotsdialog.glade:110 -msgid "List only equal snapshots to: " +#: ../../qt4/settingsdialog.py:938 +msgid "Rename profile" +msgstr "Preimenuj profil" + +#: ../../qt4/settingsdialog.py:952 +#, python-format +msgid "Are you sure you want to delete the profile \"%s\" ?" +msgstr "Jeste li sigurni da želite obrisati profil \"%s\" ?" + +#: ../../qt4/settingsdialog.py:1191 +msgid "" +"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " +"*/3 for periodic backups every 3 hours" msgstr "" -#: ../../kde4/snapshotsdialog.py:149 ../../gnome/snapshotsdialog.glade:146 -msgid "Deep check (more accurate, but slow)" -msgstr "Dubinska provjera (preciznije, ali sporije)" +#: ../../qt4/settingsdialog.py:1489 +msgid "Exclude pattern" +msgstr "Isključi slijed" -#: ../../kde4/snapshotsdialog.py:174 -msgid "Go To" -msgstr "Idi Na" +#: ../../qt4/settingsdialog.py:1502 +msgid "Exclude file" +msgstr "Isključi datoteku" + +#: ../../qt4/settingsdialog.py:1506 +msgid "Exclude folder" +msgstr "Isključi mapu" -#: ../../gnome/logviewdialog.glade:9 -msgid "Log View" -msgstr "Prikaži Zapis" +#: ../../qt4/settingsdialog.py:1525 +msgid "Include file" +msgstr "Uključi datoteku" -#: ../../gnome/logviewdialog.glade:179 -msgid "scroll down automatic" +#: ../../qt4/settingsdialog.py:1533 ../../qt4/settingsdialog.py:1553 +#, python-format +msgid "" +"\"%s\" is a symlink. The linked target will not be backed up until you " +"include it, too.\n" +"Would you like to include the symlinks target instead?" msgstr "" -#: ../../gnome/mainwindow.glade:7 -msgid "Back In Time" -msgstr "Back In Time" +#: ../../qt4/settingsdialog.py:1545 +msgid "Include folder" +msgstr "Uključi mapu" -#: ../../gnome/mainwindow.glade:45 -msgid "Backup Now" -msgstr "Napravi rezervu sada" +#: ../../qt4/settingsdialog.py:1572 +msgid "Are you sure you want to change snapshots folder ?" +msgstr "Jeste li sigurni da želite promjeniti mapu snimki?" -#: ../../gnome/mainwindow.glade:171 -msgid "Shutdown" +#: ../../qt4/settingsdialog.py:1688 +msgid "enabled" msgstr "" -#: ../../gnome/mainwindow.glade:287 -msgid "Parent folder" -msgstr "Roditeljska mapa" +#: ../../qt4/settingsdialog.py:1690 +msgid "disabled" +msgstr "" -#: ../../gnome/mainwindow.glade:327 -msgid "Hidden files" -msgstr "Skrivene datoteke" +#: ../../qt4/settingsdialog.py:1715 +msgid "Restore Settings" +msgstr "" -#: ../../gnome/mainwindow.glade:451 -msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +#: ../../qt4/settingsdialog.py:1732 +msgid " and add your user to group 'fuse'" msgstr "" -#: ../../gnome/settingsdialog.glade:287 -msgid "Where to save snapshots" -msgstr "Gdje spremiti snimke" +#: ../../qt4/settingsdialog.py:1736 +#, python-format +msgid "" +"Please navigate to the snapshot from which you want to restore %(appName)s's " +"configuration. The path may look like: \n" +"%(samplePath)s\n" +"\n" +"If your snapshots are on a remote drive or if they are encrypted you need to " +"manually mount them first. If you use Mode SSH you also may need to set up " +"public key login to the remote host%(addFuse)s.\n" +"Take a look at 'man backintime'." +msgstr "" -#: ../../gnome/settingsdialog.glade:483 -msgid "Private key:" +#: ../../qt4/settingsdialog.py:1794 ../../qt4/settingsdialog.py:1854 +msgid "No config found" msgstr "" -#: ../../gnome/settingsdialog.glade:534 -msgid "Advanced SSH Settings" +#: ../../qt4/snapshotsdialog.py:49 ../../qt4/snapshotsdialog.py:173 +msgid "Diff Options" msgstr "" -#: ../../gnome/settingsdialog.glade:552 -msgid "SSH Settings" +#: ../../qt4/snapshotsdialog.py:56 +msgid "Command:" +msgstr "Naredba:" + +#: ../../qt4/snapshotsdialog.py:60 +msgid "Parameters:" +msgstr "Parametri:" + +#: ../../qt4/snapshotsdialog.py:64 +msgid "Use %1 and %2 for path parameters" msgstr "" -#: ../../gnome/settingsdialog.glade:815 -msgid "Password" +#: ../../qt4/snapshotsdialog.py:106 +msgid "List only different snapshots" +msgstr "Prikaži samo različite snimke" + +#: ../../qt4/snapshotsdialog.py:113 +msgid "List only equal snapshots to: " msgstr "" -#: ../../gnome/settingsdialog.glade:930 -msgid "Profile Id:" -msgstr "Profil Id:" +#: ../../qt4/snapshotsdialog.py:123 +msgid "Deep check (more accurate, but slow)" +msgstr "Dubinska provjera (preciznije, ali sporije)" -#: ../../gnome/settingsdialog.glade:1115 -msgid "" -"hours seperate by comma ( e.g. 8,12,18,23) or */3 for periodic backups every " -"3 hours (cron style)" +#: ../../qt4/snapshotsdialog.py:144 +msgid "Delete" msgstr "" -#: ../../gnome/settingsdialog.glade:1163 -msgid "Schedule" -msgstr "Raspored" +#: ../../qt4/snapshotsdialog.py:148 +msgid "Select All" +msgstr "" -#: ../../gnome/settingsdialog.glade:1363 -msgid "Highly recommended:" -msgstr "Visoko preporučeno:" +#: ../../qt4/snapshotsdialog.py:161 +msgid "Diff" +msgstr "Razlika" -#: ../../gnome/settingsdialog.glade:1377 -msgid "label" -msgstr "oznaka" +#: ../../qt4/snapshotsdialog.py:172 +msgid "Go To" +msgstr "Idi Na" -#: ../../gnome/settingsdialog.glade:1755 -msgid "week(s)" -msgstr "" +#: ../../qt4/snapshotsdialog.py:326 +msgid "You can't compare a snapshot to itself" +msgstr "Nije moguće usporediti snimku s njom samom" -#: ../../gnome/settingsdialog.glade:2069 -msgid "Log level:" -msgstr "Razina zapisa:" +#: ../../qt4/snapshotsdialog.py:333 +#, python-format +msgid "Command not found: %s" +msgstr "Naredba nije pronađena: %s" -#: ../../gnome/settingsdialog.glade:2121 +#: ../../qt4/snapshotsdialog.py:354 +#, python-format msgid "" -"Change these options only if you really know what you are doing !" -msgstr "Mjenjajte ove opcije samo ako doista znate što radite !" +"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" +msgstr "" -#: ../../gnome/snapshotsdialog.glade:263 -msgid "Diff with" +#: ../../qt4/snapshotsdialog.py:357 +#, python-format +msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" msgstr "" -#: ../../gnome/textinputdialog.glade:7 -msgid "Pattern" -msgstr "Slijed" +#: ../../qt4/snapshotsdialog.py:359 +msgid "WARNING: This can not be revoked!" +msgstr "" -#: ../../gnome/textinputdialog.glade:70 -msgid "Text" +#: ../../qt4/snapshotsdialog.py:374 +#, python-format +msgid "Exclude \"%s\" from future snapshots?" msgstr "" diff -Nru backintime-1.0.36/common/po/hu.po backintime-1.1.12/common/po/hu.po --- backintime-1.0.36/common/po/hu.po 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/po/hu.po 2016-01-11 18:07:58.000000000 +0000 @@ -8,207 +8,239 @@ msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2013-11-09 22:34+0100\n" -"PO-Revision-Date: 2013-11-19 20:19+0000\n" -"Last-Translator: Kósa Lajos \n" +"POT-Creation-Date: 2015-12-19 00:47+0100\n" +"PO-Revision-Date: 2015-09-09 21:52+0000\n" +"Last-Translator: Back In Time Team \n" "Language-Team: Hungarian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2014-08-06 10:20+0000\n" -"X-Generator: Launchpad (build 17147)\n" +"X-Launchpad-Export-Date: 2016-01-11 17:52+0000\n" +"X-Generator: Launchpad (build 17881)\n" "Language: hu\n" -#: ../../common/config.py:72 +#: ../../common/configfile.py:60 +#, python-format +msgid "Failed to save config: %s" +msgstr "" + +#: ../../common/configfile.py:78 +#, python-format +msgid "Failed to load config: %s" +msgstr "" + +#: ../../common/configfile.py:352 ../../common/configfile.py:414 +#, python-format +msgid "Profile \"%s\" already exists !" +msgstr "A \"%s\" már létezik!" + +#: ../../common/configfile.py:383 +msgid "You can't remove the last profile !" +msgstr "Nem távolíthatod el az utolsó profilt!" + +#: ../../common/config.py:76 msgid "Disabled" msgstr "Kikapcsolva" -#: ../../common/config.py:73 +#: ../../common/config.py:77 msgid "At every boot/reboot" msgstr "Minden (újra)indításkor" -#: ../../common/config.py:74 +#: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Ötpercenként" -#: ../../common/config.py:75 +#: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Tízpercenként" -#: ../../common/config.py:76 +#: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "30 percenként" -#: ../../common/config.py:77 +#: ../../common/config.py:81 msgid "Every hour" msgstr "Óránként" -#: ../../common/config.py:78 +#: ../../common/config.py:82 msgid "Every 2 hours" msgstr "Kétóránként" -#: ../../common/config.py:79 +#: ../../common/config.py:83 msgid "Every 4 hours" msgstr "Négyóránként" -#: ../../common/config.py:80 +#: ../../common/config.py:84 msgid "Every 6 hours" msgstr "Hatóránként" -#: ../../common/config.py:81 +#: ../../common/config.py:85 msgid "Every 12 hours" msgstr "Tizenkétóránként" -#: ../../common/config.py:82 +#: ../../common/config.py:86 msgid "Custom Hours" msgstr "Egyedi beállítás (óra)" -#: ../../common/config.py:83 +#: ../../common/config.py:87 msgid "Every Day" msgstr "Naponta" -#: ../../common/config.py:84 -msgid "Daily (anacron)" -msgstr "Naponta (anacron)" +#: ../../common/config.py:88 +msgid "Repeatedly (anacron)" +msgstr "" -#: ../../common/config.py:85 +#: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "Ha csatlakozik a meghajtó (udev)" -#: ../../common/config.py:86 +#: ../../common/config.py:90 msgid "Every Week" msgstr "Hetente" -#: ../../common/config.py:87 +#: ../../common/config.py:91 msgid "Every Month" msgstr "Havonta" -#: ../../common/config.py:91 +#: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Nap" -#: ../../common/config.py:92 +#: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Hét" -#: ../../common/config.py:93 +#: ../../common/config.py:97 msgid "Year(s)" msgstr "Év" -#: ../../common/config.py:100 +#: ../../common/config.py:101 +msgid "Hour(s)" +msgstr "" + +#: ../../common/config.py:104 +msgid "Month(s)" +msgstr "" + +#: ../../common/config.py:126 ../../qt4/settingsdialog.py:551 msgid " EXPERIMENTAL!" msgstr " KÍSÉRLETI!" -#: ../../common/config.py:103 +#: ../../common/config.py:129 msgid "Local" msgstr "Helyi" -#: ../../common/config.py:104 +#: ../../common/config.py:130 msgid "SSH" msgstr "SSH" -#: ../../common/config.py:104 ../../common/config.py:106 -#: ../../gnome/settingsdialog.py:475 ../../kde4/settingsdialog.py:1325 +#: ../../common/config.py:130 ../../common/config.py:132 +#: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "SSH privát kulcs" -#: ../../common/config.py:105 +#: ../../common/config.py:131 msgid "Local encrypted" msgstr "Helyi titkosított" -#: ../../common/config.py:105 ../../common/config.py:106 +#: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "Titkosítás" -#: ../../common/config.py:106 +#: ../../common/config.py:132 msgid "SSH encrypted" msgstr "SSH-val titkosított" -#: ../../common/config.py:112 +#: ../../common/config.py:135 msgid "Default" msgstr "Alapértelmezett" -#: ../../common/config.py:113 +#: ../../common/config.py:136 msgid "AES128-CTR" msgstr "AES128-CTR" -#: ../../common/config.py:114 +#: ../../common/config.py:137 msgid "AES192-CTR" msgstr "AES192-CTR" -#: ../../common/config.py:115 +#: ../../common/config.py:138 msgid "AES256-CTR" msgstr "AES256-CTR" -#: ../../common/config.py:116 +#: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "ARCFOUR256" -#: ../../common/config.py:117 +#: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "ARCFOUR128" -#: ../../common/config.py:118 +#: ../../common/config.py:141 msgid "AES128-CBC" msgstr "AES128-CBC" -#: ../../common/config.py:119 +#: ../../common/config.py:142 msgid "3DES-CBC" msgstr "3DES-CBC" -#: ../../common/config.py:120 +#: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "Blowfish-CBC" -#: ../../common/config.py:121 +#: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "Cast128-CBC" -#: ../../common/config.py:122 +#: ../../common/config.py:145 msgid "AES192-CBC" msgstr "AES192-CBC" -#: ../../common/config.py:123 +#: ../../common/config.py:146 msgid "AES256-CBC" msgstr "AES256-CBC" -#: ../../common/config.py:124 +#: ../../common/config.py:147 msgid "ARCFOUR" msgstr "ARCFOUR" -#: ../../common/config.py:129 +#: ../../common/config.py:153 msgid "Main profile" msgstr "Fő profil" -#: ../../common/config.py:256 ../../common/config.py:275 -#: ../../common/config.py:286 ../../common/config.py:291 +#: ../../common/config.py:289 ../../common/config.py:296 +#: ../../common/config.py:307 ../../common/config.py:312 +#: ../../qt4/qt4systrayicon.py:61 #, python-format msgid "Profile: \"%s\"" msgstr "Profil: \"%s\"" -#: ../../common/config.py:256 +#: ../../common/config.py:289 msgid "Snapshots folder is not valid !" msgstr "A pillanatkép-könyvtár nem érvényes" -#: ../../common/config.py:275 +#: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "Legalább egy könyvtárat ki kell jelölnie a mentéshez" -#: ../../common/config.py:286 +#: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "Nem adható hozzá a biztonsági mentés mappája" -#: ../../common/config.py:291 +#: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "Nem adható hozzá a biztonsági mentés almappája" -#: ../../common/config.py:361 +#: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "A(z) %s nem könyvtár" -#: ../../common/config.py:376 ../../common/config.py:389 +#: ../../common/config.py:380 +msgid "Host/User/Profile-ID must not be empty!" +msgstr "" + +#: ../../common/config.py:388 ../../common/config.py:420 #, python-format msgid "" "Can't write to: %s\n" @@ -217,64 +249,68 @@ "Nem tudok ide írni: %s\n" "Biztos, hogy van írási jogod?" -#: ../../common/config.py:1286 +#: ../../common/config.py:400 +#, python-format msgid "" -"Can't find crontab.\n" -"Are you sure cron is installed ?\n" -"If not you should disable all automatic backups." +"Destination filesystem for '%(path)s' is formatted with FAT which doesn't " +"support hard-links. Please use a native Linux filesystem." msgstr "" -"A crontab nem található.\n" -"Biztos, hogy telepítve van a cron?\n" -"Ha nem, akkor ki kell kapcsolni az automatikus biztonsági mentést." -#: ../../common/config.py:1338 +#: ../../common/config.py:405 #, python-format -msgid "Schedule udev doesn't work with mode %s" -msgstr "Az udev időzítése nem működik ezzel a móddal: %s" +msgid "" +"Destination filsystem for '%(path)s' is a SMB mounted share. Please make " +"sure the remote SMB server supports symlinks or activate '%(copyLinks)s' in " +"'%(expertOptions)s'." +msgstr "" -#: ../../common/config.py:1342 -#, python-format -msgid "Couldn't find UUID for \"%s\"" -msgstr "Nem találom a \"%s\" meghajtó UUID-ját" +#: ../../common/config.py:408 ../../qt4/settingsdialog.py:815 +msgid "Copy links (dereference symbolic links)" +msgstr "Linkek másolása (szimbolikus linkeknél nem csak a hivatkozást)" -#: ../../common/config.py:1379 -msgid "Failed to remove udev rules" -msgstr "Nem tudtam eltávolítani az udev-szabályokat" +#: ../../common/config.py:409 ../../qt4/settingsdialog.py:669 +msgid "Expert Options" +msgstr "Szakértői beállítások" -#: ../../common/config.py:1385 -msgid "Failed to create udev rules" -msgstr "Nem tudtam létrehozni az udev-szabályokat" +#: ../../common/config.py:411 +#, python-format +msgid "" +"Destination filesystem for '%(path)s is a sshfs mounted share. sshfs doesn't " +"support hard-links. Please use mode 'SSH' instead." +msgstr "" -#: ../../common/config.py:1420 +#: ../../common/config.py:1407 msgid "" -"Can't find anacron.\n" -"Are you sure anacron is installed ?\n" -"If not you should disable daily anacron backups." +"Can't find crontab.\n" +"Are you sure cron is installed ?\n" +"If not you should disable all automatic backups." msgstr "" -"Nem találom az anacront.\n" -"Biztos, hogy telepítetted?\n" -"Ha nem, tiltsd le a napi anacron mentéseket." +"A crontab nem található.\n" +"Biztos, hogy telepítve van a cron?\n" +"Ha nem, akkor ki kell kapcsolni az automatikus biztonsági mentést." -#: ../../common/config.py:1439 -msgid "Please provide your sudo password to install the udev rule." -msgstr "Add meg a sudo-jelszót, hogy az udev-szabályokat telepíteni tudjam." +#: ../../common/config.py:1411 +msgid "Failed to write new crontab." +msgstr "" -#: ../../common/config.py:1445 -msgid "Please provide your sudo password to remove unused udev rules." +#: ../../common/config.py:1505 +#, python-format +msgid "" +"Could not install Udev rule for profile %(profile_id)s. DBus Service " +"'%(dbus_interface)s' wasn't available" msgstr "" -"Add meg a sudo-jelszót, hogy eltávolítsam a használaton kívüli udev-" -"szabályokat." -#: ../../common/configfile.py:253 ../../common/configfile.py:315 +#: ../../common/config.py:1517 #, python-format -msgid "Profile \"%s\" already exists !" -msgstr "A \"%s\" már létezik!" +msgid "Schedule udev doesn't work with mode %s" +msgstr "Az udev időzítése nem működik ezzel a móddal: %s" -#: ../../common/configfile.py:284 -msgid "You can't remove the last profile !" -msgstr "Nem távolíthatod el az utolsó profilt!" +#: ../../common/config.py:1526 +#, python-format +msgid "Couldn't find UUID for \"%s\"" +msgstr "Nem találom a \"%s\" meghajtó UUID-ját" -#: ../../common/encfstools.py:95 +#: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" @@ -285,16 +321,16 @@ "\n" "%(error)s" -#: ../../common/encfstools.py:105 +#: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "Nem tudom lecsatolni a(z) %s encfs-t" -#: ../../common/encfstools.py:149 +#: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "A titkosított mappa konfigurációja nem található" -#: ../../common/encfstools.py:153 +#: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" @@ -302,23 +338,23 @@ "\n" "Létrehozzak egy új titkosított mappát?" -#: ../../common/encfstools.py:154 +#: ../../common/encfstools.py:171 msgid "Cancel" msgstr "Mégsem" -#: ../../common/encfstools.py:157 +#: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "Erősítsd meg a jelszót" -#: ../../common/encfstools.py:161 +#: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "A jelszavakat nem egyeznek" -#: ../../common/encfstools.py:166 +#: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "Nem találom az encfs-t. Telepítsd pl. így: 'apt-get install encfs'" -#: ../../common/encfstools.py:174 ../../common/sshtools.py:207 +#: ../../common/encfstools.py:196 ../../common/sshtools.py:262 #, python-format msgid "" "%(user)s is not member of group 'fuse'.\n" @@ -330,7 +366,7 @@ "vissza.\n" "Nézd meg a 'man backintime'-ot további részletekért." -#: ../../common/encfstools.py:189 +#: ../../common/encfstools.py:211 msgid "" "encfs version 1.7.2 and before has a bug with option --reverse. Please " "update encfs" @@ -338,13 +374,12 @@ "Az encfs az 1.7.2-es és korábbi verzióknál hibás, ha a --reverse opciót " "használod. Frissítsd az encfs-t" -#: ../../common/encfstools.py:453 ../../common/encfstools.py:480 -#: ../../common/snapshots.py:982 ../../common/snapshots.py:1288 -#: ../../kde4/app.py:82 ../../gnome/mainwindow.glade:43 +#: ../../common/encfstools.py:512 ../../common/snapshots.py:1131 +#: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "Pillanatkép készítése" -#: ../../common/mount.py:195 +#: ../../common/mount.py:204 #, python-format msgid "" "Hash collision occurred in hash_id %s. Incrementing global value " @@ -353,31 +388,30 @@ "Hash-ütközés történt: hash_id %s. Megnövelem a hash_collision értékét, és " "újra próbálom." -#: ../../common/mount.py:246 +#: ../../common/mount.py:259 #, python-format msgid "mountpoint %s not empty." msgstr "A %s csatolási pont foglalt" -#: ../../common/mount.py:286 +#: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "A csatolási folyamat túl sok időt vett igénybe" -#: ../../common/password.py:425 +#: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" "A(z) '%(profile)s' profil: add meg a jelszót a következőhöz: %(mode)s " -#: ../../common/snapshots.py:171 ../../gnome/app.py:1127 -#: ../../kde4/app.py:1014 +#: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Most" -#: ../../common/snapshots.py:182 ../../gnome/gnometools.py:37 +#: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "HIBÁKKAL!" -#: ../../common/snapshots.py:282 +#: ../../common/snapshots.py:344 msgid "" "### This log has been decoded with automatic search pattern\n" "### If some paths are not decoded you can manually decode them with:\n" @@ -386,15 +420,20 @@ "### Ha néhány útvonal dekódolása elmaradt, a következővel tudod kézzel " "dekódolni:\n" -#: ../../common/snapshots.py:465 +#: ../../common/snapshots.py:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "MEGHIÚSULT" -#: ../../common/snapshots.py:564 +#: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "Engedélyek visszaállítása:" -#: ../../common/snapshots.py:739 +#: ../../common/snapshots.py:752 ../../qt4/app.py:377 ../../qt4/app.py:675 +#: ../../qt4/app.py:692 ../../qt4/qt4systrayicon.py:65 +msgid "Done" +msgstr "Kész" + +#: ../../common/snapshots.py:860 msgid "" "Back In Time changed its backup format.\n" "\n" @@ -404,7 +443,7 @@ "\n" "A régi pillanatképeket át tudjuk konvertálni ebbe az új formátumba. Rendben?" -#: ../../common/snapshots.py:749 +#: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" @@ -422,7 +461,7 @@ "\n" "(A program ettől még meg fogja tudni különböztetni őket)" -#: ../../common/snapshots.py:752 +#: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" @@ -430,7 +469,7 @@ "Nem találtam profilt. Először frissíteni kell a profilokat, először indítsd " "újra a Back In Time-ot" -#: ../../common/snapshots.py:803 +#: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" @@ -450,7 +489,7 @@ "Ha nem folytatom, a Back In Time visszaállítja ennek a profilnak a korábbi " "beállításait, de nem fog tudni pillanatképeket készíteni" -#: ../../common/snapshots.py:812 +#: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" @@ -465,7 +504,7 @@ "Kézzel tudod mozgatni a pillanatképeket,\n" "ha befejezted, a folytatáshoz indítsd újra a Back in Time-ot" -#: ../../common/snapshots.py:825 +#: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" @@ -475,7 +514,7 @@ "\n" "A Back in Time folytatja a pillanatképek készítését az időzítés szerint." -#: ../../common/snapshots.py:830 +#: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" @@ -495,11 +534,11 @@ "\n" "Ha nem, a Back In Time következő indításakor újra megkapod ezt a kérdést." -#: ../../common/snapshots.py:839 +#: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "A Back in Time újra készít majd pillanatképeket az időzítés szerint." -#: ../../common/snapshots.py:841 +#: ../../common/snapshots.py:953 msgid "" "Back In Time still cannot continue taking new snapshots.\n" "Restart Back In Time to see the questions again" @@ -507,7 +546,11 @@ "A Back in Time nem tud újabb pillanatképeket készíteni.\n" "Indítsd újra a Back in Time -ot, hogy ismét láthasd a kérdéseket." -#: ../../common/snapshots.py:913 +#: ../../common/snapshots.py:972 +msgid "Deferring backup while on battery" +msgstr "" + +#: ../../common/snapshots.py:1035 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it." @@ -515,96 +558,101 @@ "A pillanatképek könyvtára nem található.\n" "Ha egy eltávolítható adathordozón van, csatlakoztasd." -#: ../../common/snapshots.py:915 +#: ../../common/snapshots.py:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "%s másodperc várakozás." msgstr[1] "%s másodperc várakozás." -#: ../../common/snapshots.py:941 +#: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "A %s pillanatkép készítése meghiúsult!!!" -#: ../../common/snapshots.py:950 +#: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "Véglegesítés" -#: ../../common/snapshots.py:1088 +#: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "A(z) %s mappa nem hozható létre" -#: ../../common/snapshots.py:1107 +#: ../../common/snapshots.py:1217 msgid "..." msgstr "..." -#: ../../common/snapshots.py:1134 +#: ../../common/snapshots.py:1238 +#, python-format +msgid "Found leftover '%s' which can be continued." +msgstr "" + +#: ../../common/snapshots.py:1250 +#, python-format +msgid "Remove leftover '%s' folder from last run" +msgstr "" + +#: ../../common/snapshots.py:1263 #, python-format msgid "Can't remove folder: %s" msgstr "A(z) %s mappa nem távolítható el" -#: ../../common/snapshots.py:1219 +#: ../../common/snapshots.py:1340 #, python-format msgid "Compare with snapshot %s" msgstr "Összehasonlítás a következő pillanatképpel: %s" -#: ../../common/snapshots.py:1248 +#: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "Hard-linkek készítése" -#: ../../common/snapshots.py:1335 +#: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "Konfigurációs fájl mentése..." -#: ../../common/snapshots.py:1341 +#: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "Hozzáférési jogosultságok mentése..." -#: ../../common/snapshots.py:1442 +#: ../../common/snapshots.py:1470 +msgid "Save permission over ssh failed. Retry normal method" +msgstr "" + +#: ../../common/snapshots.py:1521 #, python-format msgid "Can't rename %(new_path)s to %(path)s" msgstr "Nem tudom a(z) %(path)s útvonalat átnevezni erre: %(new_path)s" -#: ../../common/snapshots.py:1562 -msgid "Remove old snapshots" -msgstr "Régi pillanatképek eltávolítása" - -#: ../../common/snapshots.py:1586 ../../kde4/settingsdialog.py:501 -#: ../../gnome/settingsdialog.glade:1660 +#: ../../common/snapshots.py:1695 ../../common/snapshots.py:1728 +#: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "Okos eltávolítás" -#: ../../common/snapshots.py:1591 +#: ../../common/snapshots.py:1704 +msgid "Remove old snapshots" +msgstr "Régi pillanatképek eltávolítása" + +#: ../../common/snapshots.py:1733 msgid "Try to keep min free space" msgstr "A minimálisan megadott szabad hely kialakítása" -#: ../../common/snapshots.py:1621 +#: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "Megpróbálok legalább %d%% szabad inode-ot tartani" -#: ../../common/sshtools.py:106 +#: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "Nem tudom felcsatolni: %s" -#: ../../common/sshtools.py:113 +#: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "Nem tudom felcsatolni a(z) %s sshfs-t" -#: ../../common/sshtools.py:187 -#, python-format -msgid "" -"Failed to unlock SSH private key:\n" -"Error: %s" -msgstr "" -"Nem tudtam feloldani az SSH privát kulcsát:\n" -"Hiba: %s" - -#: ../../common/sshtools.py:194 +#: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." @@ -612,12 +660,12 @@ "Nem tudtam feloldani az ssh privát kulcsát. Hibás jelszó vagy a cron nem éri " "el a jelszót." -#: ../../common/sshtools.py:199 +#: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" "Nem találom az sshfs-t. Telepítsd pl. az 'apt-get install sshfs' paranccsal." -#: ../../common/sshtools.py:217 +#: ../../common/sshtools.py:278 #, python-format msgid "" "Password-less authentication for %(user)s@%(host)s failed. Look at 'man " @@ -626,7 +674,7 @@ "A %(user)s@%(host)s nem tudott jelszó nélkül bejelentkeztni. Nézd meg a 'man " "backintime'-ot további részletekért." -#: ../../common/sshtools.py:229 +#: ../../common/sshtools.py:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" @@ -635,12 +683,12 @@ "A(z) %(cipher)s nem sikerült a %(host)s esetében:\n" "%(err)s" -#: ../../common/sshtools.py:254 +#: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "A(z) %s nem található itt: ssh_known_hosts." -#: ../../common/sshtools.py:274 +#: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" @@ -649,7 +697,7 @@ "A távoli útvonal létezik, de nem könyvtár:\n" " %s" -#: ../../common/sshtools.py:276 +#: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" @@ -658,7 +706,7 @@ "A távoli útvonal nem írható:\n" " %s" -#: ../../common/sshtools.py:278 +#: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" @@ -667,7 +715,7 @@ "A távoli útvonal nem futtatható:\n" " %s" -#: ../../common/sshtools.py:280 +#: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" @@ -676,13 +724,13 @@ "Nem tudom távoli útvonalat elkészíteni:\n" " %s" -#: ../../common/sshtools.py:302 +#: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" "A(z) %s ping sikertelen volt. A kiszolgáló nem működik vagy rossz a cím." -#: ../../common/sshtools.py:325 ../../common/sshtools.py:383 +#: ../../common/sshtools.py:423 ../../common/sshtools.py:553 #, python-format msgid "" "Remote host %(host)s doesn't support '%(command)s':\n" @@ -693,7 +741,7 @@ "%(err)s\n" "Nézd meg a 'man backintime'-ot további részletekért" -#: ../../common/sshtools.py:387 +#: ../../common/sshtools.py:556 #, python-format msgid "" "Check commands on host %(host)s returned unknown error:\n" @@ -704,96 +752,149 @@ "%(err)s\n" "Nézd meg a 'man backintime'-ot további részletekért" -#: ../../common/sshtools.py:400 +#: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "A(z) %s kiszolgáló nem támogatja a hardlinkeket." -#: ../../gnome/app.py:185 ../../gnome/app.py:594 ../../gnome/app.py:608 -#: ../../kde4/app.py:299 ../../kde4/app.py:570 ../../kde4/app.py:587 -msgid "Done" -msgstr "Kész" +#: ../../qt4/app.py:81 +msgid "Refresh snapshots list" +msgstr "Pillanatképek listájának frissítése" + +#: ../../qt4/app.py:85 ../../qt4/app.py:890 +msgid "Snapshot Name" +msgstr "Pillanatkép neve" + +#: ../../qt4/app.py:88 +msgid "Remove Snapshot" +msgstr "Pillanatkép eltávolítása" -#: ../../gnome/app.py:189 ../../kde4/app.py:143 ../../kde4/app.py:159 -#: ../../gnome/mainwindow.glade:225 +#: ../../qt4/app.py:91 +msgid "View Snapshot Log" +msgstr "A pillanatképek naplófájljának megtekintése" + +#: ../../qt4/app.py:94 +msgid "View Last Log" +msgstr "Utolsó naplófájl megtekintése" + +#: ../../qt4/app.py:99 ../../qt4/settingsdialog.py:51 +msgid "Settings" +msgstr "Beállítások" + +#: ../../qt4/app.py:104 +msgid "Shutdown" +msgstr "Leállítás" + +#: ../../qt4/app.py:105 +msgid "Shutdown system after snapshot has finished." +msgstr "Állítsd le a rendszert, ha elkészült a pillanatkép." + +#: ../../qt4/app.py:111 +msgid "Exit" +msgstr "Kilépés" + +#: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 msgid "Help" msgstr "Súgó" -#: ../../gnome/app.py:191 ../../kde4/app.py:146 -#: ../../gnome/mainwindow.glade:223 +#: ../../qt4/app.py:122 +msgid "Config File Help" +msgstr "" + +#: ../../qt4/app.py:125 msgid "Website" msgstr "Honlap" -#: ../../gnome/app.py:192 ../../kde4/app.py:148 +#: ../../qt4/app.py:127 ../../qt4/app.py:982 +msgid "Changelog" +msgstr "" + +#: ../../qt4/app.py:129 msgid "FAQ" msgstr "GYIK" -#: ../../gnome/app.py:193 ../../kde4/app.py:150 +#: ../../qt4/app.py:131 msgid "Ask a question" msgstr "Kérdezz" -#: ../../gnome/app.py:194 ../../kde4/app.py:152 +#: ../../qt4/app.py:133 msgid "Report a bug" msgstr "Hiba jelentése" -#: ../../gnome/app.py:196 ../../kde4/app.py:155 +#: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "Névjegy" -#: ../../gnome/app.py:202 ../../gnome/app.py:887 -#: ../../gnome/restoredialog.py:84 ../../gnome/snapshotsdialog.py:83 -#: ../../gnome/snapshotsdialog.py:244 ../../kde4/app.py:206 -#: ../../kde4/app.py:216 ../../kde4/restoredialog.py:68 -#: ../../kde4/snapshotsdialog.py:111 ../../kde4/snapshotsdialog.py:117 -#: ../../gnome/mainwindow.glade:350 ../../gnome/mainwindow.glade:352 -#: ../../gnome/snapshotsdialog.glade:169 ../../gnome/snapshotsdialog.glade:171 +#: ../../qt4/app.py:163 +msgid "Up" +msgstr "Fel" + +#: ../../qt4/app.py:174 ../../qt4/settingsdialog.py:1776 +msgid "Show hidden files" +msgstr "Rejtett fájlok megjelenítése" + +#: ../../qt4/app.py:184 ../../qt4/app.py:199 ../../qt4/app.py:233 +#: ../../qt4/restoredialog.py:62 ../../qt4/settingsdialog.py:1818 +#: ../../qt4/snapshotsdialog.py:134 ../../qt4/snapshotsdialog.py:139 msgid "Restore" msgstr "Visszaállítás" -#: ../../gnome/app.py:203 ../../gnome/app.py:888 ../../gnome/gnometools.py:67 -#: ../../gnome/snapshotsdialog.py:84 ../../gnome/snapshotsdialog.py:245 -#: ../../kde4/app.py:208 ../../kde4/restoredialog.py:42 -#: ../../kde4/snapshotsdialog.py:113 +#: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 +#: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "Visszaállítás ide..." -#: ../../gnome/app.py:205 ../../gnome/app.py:896 ../../gnome/app.py:1146 -#: ../../kde4/app.py:1041 -#, python-format -msgid "Restore '%s'" -msgstr "A(z) '%s' visszaállítása" +#: ../../qt4/app.py:194 +msgid "Restore and delete new files" +msgstr "" -#: ../../gnome/app.py:207 ../../gnome/app.py:897 ../../gnome/app.py:1147 -#: ../../kde4/app.py:1042 +#: ../../qt4/app.py:201 #, python-format -msgid "Restore '%s' to ..." -msgstr "A(z) '%s' visszaállítása ide..." +msgid "" +"Restore selected file or folder.\n" +"If this button is grayed out this is most likely because \"%(now)s\" is " +"selected in left hand snapshots list." +msgstr "" + +#: ../../qt4/app.py:206 ../../qt4/logviewdialog.py:67 +#: ../../qt4/qt4tools.py:160 ../../qt4/snapshotsdialog.py:96 +msgid "Snapshots" +msgstr "Pillanatképek" + +#: ../../qt4/app.py:213 +msgid "Snapshot" +msgstr "" + +#: ../../qt4/app.py:224 +msgid "View" +msgstr "" -#: ../../gnome/app.py:226 ../../kde4/app.py:235 +#: ../../qt4/app.py:277 msgid "Shortcuts" msgstr "Billentyűparancsok" -#: ../../gnome/app.py:249 -msgid "Name" -msgstr "Név" - -#: ../../gnome/app.py:260 -msgid "Size" -msgstr "Méret" - -#: ../../gnome/app.py:267 -msgid "Date" -msgstr "Dátum" - -#: ../../gnome/app.py:286 ../../gnome/app.py:883 -#: ../../gnome/snapshotsdialog.py:116 ../../kde4/app.py:171 -#: ../../kde4/app.py:221 ../../kde4/snapshotsdialog.py:91 -#: ../../gnome/mainwindow.glade:366 ../../gnome/mainwindow.glade:368 -#: ../../gnome/snapshotsdialog.glade:8 -msgid "Snapshots" -msgstr "Pillanatképek" +#: ../../qt4/app.py:295 +msgid "" +"This folder doesn't exist\n" +"in the current selected snapshot!" +msgstr "" -#: ../../gnome/app.py:348 ../../kde4/app.py:362 +#: ../../qt4/app.py:359 +msgid "Add to Include" +msgstr "" + +#: ../../qt4/app.py:360 +msgid "Add to Exclude" +msgstr "" + +#: ../../qt4/app.py:416 +#, python-format +msgid "" +"%(appName)s is not configured. Would you like to restore a previous " +"configuration?" +msgstr "" + +#: ../../qt4/app.py:440 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it and then press OK" @@ -801,411 +902,345 @@ "Nem található a pillanatképek könyvtára.\n" "Ha egy eltávolítható lemezen van, csatlakoztasd és nyomd meg az OK-t" -#: ../../gnome/app.py:611 ../../kde4/app.py:590 -msgid "Done, no backup needed" -msgstr "Kész, nincs szükség biztonsági mentés készítésére" +#: ../../qt4/app.py:473 +msgid "" +"If you close this window Back In Time will not be able to shutdown your " +"system when the snapshot has finished.\n" +"Do you really want to close?" +msgstr "" +"Ha bezárod ezt az ablakot, a Back In Time nem tudja lekapcsolni a rendszert " +"a biztonsági mentés elvégzése után.\n" +"Biztos bezárod?" -#: ../../gnome/app.py:619 ../../kde4/app.py:598 +#: ../../qt4/app.py:667 ../../qt4/app.py:703 msgid "Working:" msgstr "Dolgozik:" -#: ../../gnome/app.py:623 ../../kde4/app.py:602 +#: ../../qt4/app.py:695 +msgid "Done, no backup needed" +msgstr "Kész, nincs szükség biztonsági mentés készítésére" + +#: ../../qt4/app.py:707 msgid "Error:" msgstr "Hiba:" -#: ../../gnome/app.py:636 ../../kde4/app.py:649 +#: ../../qt4/app.py:726 ../../qt4/qt4systrayicon.py:153 +msgid "Sent:" +msgstr "" + +#: ../../qt4/app.py:727 ../../qt4/qt4systrayicon.py:154 +msgid "Speed:" +msgstr "" + +#: ../../qt4/app.py:728 ../../qt4/qt4systrayicon.py:155 +msgid "ETA:" +msgstr "" + +#: ../../qt4/app.py:777 msgid "Global" msgstr "Globális" -#: ../../gnome/app.py:637 ../../kde4/app.py:650 +#: ../../qt4/app.py:778 msgid "Root" msgstr "Root" -#: ../../gnome/app.py:638 ../../kde4/app.py:651 +#: ../../qt4/app.py:779 msgid "Home" msgstr "Home" -#: ../../gnome/app.py:662 -msgid "Bookmarks" -msgstr "Könyvjelzők" - -#: ../../gnome/app.py:675 ../../kde4/app.py:662 +#: ../../qt4/app.py:794 msgid "Backup folders" msgstr "Biztonsági mentés mappái" -#: ../../gnome/app.py:701 ../../kde4/app.py:734 -msgid "Today" -msgstr "Ma" +#: ../../qt4/app.py:849 +msgid "This is NOT a snapshot but a live view of your local files" +msgstr "" -#: ../../gnome/app.py:705 ../../kde4/app.py:738 -msgid "Yesterday" -msgstr "Tegnap" +#: ../../qt4/app.py:860 ../../qt4/app.py:1476 +#, python-format +msgid "Last check %s" +msgstr "" -#: ../../gnome/app.py:709 ../../kde4/app.py:742 -msgid "This week" -msgstr "Ezen a héten" +#: ../../qt4/app.py:928 +#, python-format +msgid "" +"Are you sure you want to remove the snapshot:\n" +"%s" +msgstr "" +"Biztos, hogy el akar távolítani a következő pillanatképet:\n" +"%s?" -#: ../../gnome/app.py:713 ../../kde4/app.py:746 -msgid "Last week" -msgstr "Múlt héten" +#: ../../qt4/app.py:1004 +#, python-format +msgid "" +"Backup local files before overwriting or\n" +"removing with trailing '%(suffix)s'." +msgstr "" -#: ../../gnome/app.py:764 ../../kde4/app.py:398 +#: ../../qt4/app.py:1010 msgid "" -"If you close this window Back In Time will not be able to shutdown your " -"system when the snapshot has finished.\n" -"Do you really want to close?" +"Are you sure you want to remove all newer files in your original folder?" msgstr "" -"Ha bezárod ezt az ablakot, a Back In Time nem tudja lekapcsolni a rendszert " -"a biztonsági mentés elvégzése után.\n" -"Biztos bezárod?" -#: ../../gnome/app.py:881 ../../gnome/snapshotsdialog.py:238 -msgid "Open" -msgstr "Megnyitás" +#: ../../qt4/app.py:1014 +msgid "" +"WARNING: deleting files in filesystem root could break your whole system!!!" +msgstr "" -#: ../../gnome/app.py:1056 ../../kde4/app.py:90 ../../kde4/app.py:805 -#: ../../gnome/mainwindow.glade:73 ../../gnome/mainwindow.glade:75 -msgid "Snapshot Name" -msgstr "Pillanatkép neve" +#: ../../qt4/app.py:1016 +msgid "Files to be restored:" +msgstr "" -#: ../../gnome/app.py:1075 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +#: ../../qt4/app.py:1031 +msgid "Do you really want to restore this files(s):" msgstr "" -"Biztos, hogy el akarod távolítani a következő pillanatképet:\n" -"%s?" -#: ../../gnome/app.py:1123 ../../kde4/app.py:1010 +#: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "Pillanatkép: %s" -#: ../../gnome/app.py:1124 ../../kde4/app.py:1011 +#: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "A %s időpontban észült pillanatkép megtekintése" -#: ../../gnome/app.py:1126 ../../kde4/app.py:1013 +#: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "A lemez jelenlegi tartalmának megtekintése" -#: ../../gnome/logviewdialog.py:106 ../../gnome/settingsdialog.py:414 -#: ../../kde4/logviewdialog.py:83 ../../kde4/settingsdialog.py:590 -msgid "All" -msgstr "Mindegyik" +#: ../../qt4/app.py:1268 +#, python-format +msgid "Restore '%s'" +msgstr "A(z) '%s' visszaállítása" -#: ../../gnome/logviewdialog.py:107 ../../gnome/settingsdialog.py:412 -#: ../../kde4/logviewdialog.py:84 ../../kde4/settingsdialog.py:588 -msgid "Errors" -msgstr "Hibák" +#: ../../qt4/app.py:1269 +#, python-format +msgid "Restore '%s' to ..." +msgstr "A(z) '%s' visszaállítása ide..." -#: ../../gnome/logviewdialog.py:112 ../../kde4/logviewdialog.py:89 -msgid "Changes" -msgstr "Változások" +#: ../../qt4/app.py:1270 +#, python-format +msgid "Restore '%s' and delete new files" +msgstr "" -#: ../../gnome/logviewdialog.py:115 ../../kde4/logviewdialog.py:92 -msgid "Informations" -msgstr "Információk" +#: ../../qt4/app.py:1368 ../../qt4/app.py:1385 +msgid "Authors" +msgstr "" -#: ../../gnome/settingsdialog.py:235 ../../kde4/settingsdialog.py:387 -msgid "Include files and folders" -msgstr "Felveendő fájlok és mappák" - -#: ../../gnome/settingsdialog.py:264 -msgid "Exclude patterns, files or folders" -msgstr "Kihagyandó minták, fájlok és mappák" - -#: ../../gnome/settingsdialog.py:411 ../../kde4/settingsdialog.py:587 -msgid "None" -msgstr "Egyik sem" - -#: ../../gnome/settingsdialog.py:413 ../../kde4/settingsdialog.py:589 -msgid "Changes & Errors" -msgstr "Változások & Hibák" - -#: ../../gnome/settingsdialog.py:458 -msgid "Snapshots folder" -msgstr "A biztonsági mentések mappája" - -#: ../../gnome/settingsdialog.py:466 ../../kde4/settingsdialog.py:1314 -msgid "Are you sure you want to change snapshots folder ?" -msgstr "Biztos, hogy szeretnéd megváltoztatni a pillanatképek mappáját?" - -#: ../../gnome/settingsdialog.py:901 ../../kde4/settingsdialog.py:914 -msgid "" -"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " -"*/3 for periodic backups every 3 hours" +#: ../../qt4/app.py:1369 ../../qt4/app.py:1388 +msgid "Translations" msgstr "" -"Az egyedi órák csak vesszővel elválasztott, listázott értékek lehetnek (pl. " -"8,12,18,23), vagy */3, ha háromóránként akarsz mentést készíteni." - -#: ../../gnome/settingsdialog.py:1141 ../../kde4/settingsdialog.py:653 -msgid "New profile" -msgstr "Új profil" - -#: ../../gnome/settingsdialog.py:1155 ../../kde4/settingsdialog.py:669 -msgid "Rename profile" -msgstr "Profil átnevezése" - -#: ../../gnome/settingsdialog.py:1167 ../../kde4/settingsdialog.py:683 -#, python-format -msgid "Are you sure you want to delete the profile \"%s\" ?" -msgstr "Biztosan törlöd a(z) \"%s\" profilt?" - -#: ../../gnome/settingsdialog.py:1173 ../../kde4/settingsdialog.py:1292 -msgid "Include folder" -msgstr "Felveendő mappa" - -#: ../../gnome/settingsdialog.py:1193 ../../kde4/settingsdialog.py:1278 -msgid "Include file" -msgstr "Felveendő fájl" - -#: ../../gnome/settingsdialog.py:1235 ../../kde4/settingsdialog.py:1241 -msgid "Exclude pattern" -msgstr "Kihagyási minta" -#: ../../gnome/settingsdialog.py:1240 ../../kde4/settingsdialog.py:1251 -msgid "Exclude patterns can't contain ':' char !" -msgstr "A kihagyási minták nem tartalmazhatnak kettőspontot" - -#: ../../gnome/settingsdialog.py:1246 ../../kde4/settingsdialog.py:1257 -msgid "Exclude file" -msgstr "Kihagyandó fájl" - -#: ../../gnome/settingsdialog.py:1257 ../../kde4/settingsdialog.py:1261 -msgid "Exclude folder" -msgstr "Kihagyandó mappa" - -#: ../../gnome/snapshotsdialog.py:240 -msgid "Jump to" -msgstr "Ugrás ide:" - -#: ../../gnome/snapshotsdialog.py:248 ../../kde4/snapshotsdialog.py:164 -msgid "Diff" -msgstr "Különbség" - -#: ../../gnome/snapshotsdialog.py:277 ../../kde4/snapshotsdialog.py:339 -msgid "You can't compare a snapshot to itself" -msgstr "Egy pillanatkép nem hasonlítható össze önmagával" - -#: ../../gnome/snapshotsdialog.py:284 ../../kde4/snapshotsdialog.py:346 -#, python-format -msgid "Command not found: %s" -msgstr "A következő parancs nem található: %s" - -#: ../../gnome/snapshotsdialog.py:307 ../../kde4/snapshotsdialog.py:367 -#, python-format -msgid "" -"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" +#: ../../qt4/app.py:1370 ../../qt4/app.py:1391 +msgid "License" msgstr "" -"Biztosan töröljem a \"%(file)s\" fájlt a \"%(snapshot_id)s pillanatképből?\n" - -#: ../../gnome/snapshotsdialog.py:310 ../../kde4/snapshotsdialog.py:370 -#, python-format -msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" -msgstr "Biztos, hogy törlöd a \"%(file)s\"-t a \"%(count)d-pillanatképből?\n" -#: ../../gnome/snapshotsdialog.py:312 ../../kde4/snapshotsdialog.py:372 -msgid "WARNING: This can not be revoked!" -msgstr "Nem lehet visszavonni!" +#: ../../qt4/logviewdialog.py:49 +msgid "Last Log View" +msgstr "" -#: ../../gnome/snapshotsdialog.py:317 ../../kde4/snapshotsdialog.py:377 -#, python-format -msgid "Exclude \"%s\" from future snapshots?" -msgstr "Kizárjam a \"%s\"-t a jövőbeli pillanatképekből?" +#: ../../qt4/logviewdialog.py:51 +msgid "Snapshot Log View" +msgstr "" -#: ../../kde4/app.py:86 ../../gnome/mainwindow.glade:58 -#: ../../gnome/mainwindow.glade:60 -msgid "Refresh snapshots list" -msgstr "Pillanatképek listájának frissítése" +#: ../../qt4/logviewdialog.py:59 ../../qt4/settingsdialog.py:59 +#: ../../qt4/settingsdialog.py:274 ../../qt4/settingsdialog.py:1899 +msgid "Profile:" +msgstr "Profil:" -#: ../../kde4/app.py:94 ../../gnome/mainwindow.glade:88 -#: ../../gnome/mainwindow.glade:90 -msgid "Remove Snapshot" -msgstr "Pillanatkép eltávolítása" +#: ../../qt4/logviewdialog.py:81 +msgid "Filter:" +msgstr "Szűrő:" -#: ../../kde4/app.py:98 ../../gnome/mainwindow.glade:105 -msgid "View Snapshot Log" -msgstr "A pillanatképek naplófájljának megtekintése" +#: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 +msgid "All" +msgstr "Mindegyik" -#: ../../kde4/app.py:102 ../../gnome/mainwindow.glade:121 -msgid "View Last Log" -msgstr "Utolsó naplófájl megtekintése" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 +#: ../../qt4/settingsdialog.py:657 +msgid "Errors" +msgstr "Hibák" -#: ../../kde4/app.py:108 ../../kde4/settingsdialog.py:69 -#: ../../gnome/mainwindow.glade:144 ../../gnome/mainwindow.glade:146 -#: ../../gnome/settingsdialog.glade:7 -msgid "Settings" -msgstr "Beállítások" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 +msgid "Changes" +msgstr "Változások" -#: ../../kde4/app.py:124 ../../gnome/mainwindow.glade:169 -msgid "Shutdown system after snapshot has finished." -msgstr "Állítsd le a rendszert, ha elkészült a pillanatkép." +#: ../../qt4/logviewdialog.py:92 +msgid "Informations" +msgstr "Információk" -#: ../../kde4/app.py:131 ../../gnome/mainwindow.glade:184 -#: ../../gnome/mainwindow.glade:186 -msgid "Exit" -msgstr "Kilépés" +#: ../../qt4/logviewdialog.py:101 +msgid "[E] Error, [I] Information, [C] Change" +msgstr "[E] hiba, [I] információ, [C] változtat" -#: ../../kde4/app.py:186 ../../gnome/mainwindow.glade:289 -msgid "Up" -msgstr "Fel" +#: ../../qt4/logviewdialog.py:104 +msgid "decode paths" +msgstr "dekódolás útvonalai" -#: ../../kde4/app.py:199 ../../gnome/mainwindow.glade:325 -msgid "Show hidden files" -msgstr "Rejtett fájlok megjelenítése" +#: ../../qt4/messagebox.py:56 +msgid "Error" +msgstr "" -#: ../../kde4/app.py:244 -msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +#: ../../qt4/messagebox.py:62 ../../qt4/messagebox.py:68 +msgid "Question" msgstr "" -"A jelenlegi pillanatképben\n" -"nincs benne ez a mappa!" -#: ../../kde4/app.py:839 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +#: ../../qt4/qt4systrayicon.py:69 +msgid "Start BackInTime" msgstr "" -"Biztos, hogy el akar távolítani a következő pillanatképet:\n" -"%s?" -#: ../../kde4/app.py:1140 ../../kde4/kde4systrayicon.py:117 +#: ../../qt4/qt4systrayicon.py:124 msgid "Working..." msgstr "Dolgozom..." -#: ../../kde4/logviewdialog.py:55 -msgid "Error Log View" -msgstr "Hibanapló megtekintése" - -#: ../../kde4/logviewdialog.py:65 ../../kde4/settingsdialog.py:79 -#: ../../kde4/settingsdialog.py:293 ../../gnome/logviewdialog.glade:73 -#: ../../gnome/settingsdialog.glade:72 -msgid "Profile:" -msgstr "Profil:" +#: ../../qt4/qt4tools.py:178 +msgid "Today" +msgstr "Ma" -#: ../../kde4/logviewdialog.py:77 ../../gnome/logviewdialog.glade:110 -msgid "Filter:" -msgstr "Szűrő:" +#: ../../qt4/qt4tools.py:183 +msgid "Yesterday" +msgstr "Tegnap" -#: ../../kde4/logviewdialog.py:100 ../../gnome/logviewdialog.glade:169 -msgid "[E] Error, [I] Information, [C] Change" -msgstr "[E] hiba, [I] információ, [C] változtat" +#: ../../qt4/qt4tools.py:188 +msgid "This week" +msgstr "Ezen a héten" -#: ../../kde4/logviewdialog.py:103 ../../gnome/logviewdialog.glade:195 -msgid "decode paths" -msgstr "dekódolás útvonalai" +#: ../../qt4/qt4tools.py:193 +msgid "Last week" +msgstr "Múlt héten" -#: ../../kde4/settingsdialog.py:88 +#: ../../qt4/restoredialog.py:75 +msgid "Show full Log" +msgstr "" + +#: ../../qt4/settingsdialog.py:68 msgid "Edit" msgstr "Szerkesztés" -#: ../../kde4/settingsdialog.py:106 ../../gnome/settingsdialog.glade:1207 +#: ../../qt4/settingsdialog.py:73 +msgid "Modify for Full System Backup" +msgstr "" + +#: ../../qt4/settingsdialog.py:77 ../../qt4/settingsdialog.py:451 +msgid "Add" +msgstr "" + +#: ../../qt4/settingsdialog.py:81 ../../qt4/settingsdialog.py:408 +#: ../../qt4/settingsdialog.py:467 +msgid "Remove" +msgstr "" + +#: ../../qt4/settingsdialog.py:96 msgid "General" msgstr "Általános" -#: ../../kde4/settingsdialog.py:114 ../../gnome/settingsdialog.glade:199 +#: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "Mód:" -#: ../../kde4/settingsdialog.py:127 ../../kde4/settingsdialog.py:1311 +#: ../../qt4/settingsdialog.py:119 +#, python-format +msgid "" +"Warning: %(app)s uses EncFS for encryption. A recent security audit " +"revealed several possible attack vectors for this. Please take a look at 'A " +"NOTE ON SECURITY' in 'man backintime'." +msgstr "" + +#: ../../qt4/settingsdialog.py:129 ../../qt4/settingsdialog.py:1568 msgid "Where to save snapshots" msgstr "Hova mentse a pillanatképeket" -#: ../../kde4/settingsdialog.py:146 +#: ../../qt4/settingsdialog.py:145 +msgid "Folder" +msgstr "" + +#: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "Az SSH beállításai" -#: ../../kde4/settingsdialog.py:158 ../../kde4/settingsdialog.py:283 -#: ../../gnome/settingsdialog.glade:323 ../../gnome/settingsdialog.glade:583 -#: ../../gnome/settingsdialog.glade:874 +#: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "Kiszolgáló:" -#: ../../kde4/settingsdialog.py:163 ../../gnome/settingsdialog.glade:350 -#: ../../gnome/settingsdialog.glade:610 +#: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "Port:" -#: ../../kde4/settingsdialog.py:168 ../../kde4/settingsdialog.py:288 -#: ../../gnome/settingsdialog.glade:377 ../../gnome/settingsdialog.glade:637 -#: ../../gnome/settingsdialog.glade:902 +#: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "Felhasználó:" -#: ../../kde4/settingsdialog.py:173 ../../gnome/settingsdialog.glade:416 +#: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "Elérési út:" -#: ../../kde4/settingsdialog.py:178 ../../gnome/settingsdialog.glade:459 +#: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "Cipher:" -#: ../../kde4/settingsdialog.py:184 +#: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "Privát kulcs" -#: ../../kde4/settingsdialog.py:228 ../../kde4/settingsdialog.py:237 -#: ../../kde4/settingsdialog.py:243 ../../gnome/settingsdialog.glade:703 -#: ../../gnome/settingsdialog.glade:743 +#: ../../qt4/settingsdialog.py:201 +msgid "Key File" +msgstr "" + +#: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 +#: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "Jelszó" -#: ../../kde4/settingsdialog.py:249 ../../gnome/settingsdialog.glade:775 +#: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "Jelszó mentése a kulcstartóba" -#: ../../kde4/settingsdialog.py:252 ../../gnome/settingsdialog.glade:792 +#: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" "Jelszó mentése a Cron számára (biztonsági figyelmeztetés: a root látja a " "jelszót)" -#: ../../kde4/settingsdialog.py:264 ../../gnome/settingsdialog.glade:968 +#: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "Szakértői" -#: ../../kde4/settingsdialog.py:276 ../../gnome/settingsdialog.glade:848 -msgid "Auto Host / User / Profile Id" -msgstr "Kiszolgáló/Felhasználó/Profil Id automatikusan" +#: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 +msgid "Full snapshot path: " +msgstr "" -#: ../../kde4/settingsdialog.py:301 +#: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "Ütemterv" -#: ../../kde4/settingsdialog.py:311 ../../gnome/settingsdialog.glade:1092 +#: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "Nap:" -#: ../../kde4/settingsdialog.py:322 ../../gnome/settingsdialog.glade:1079 +#: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "Hét napja:" -#: ../../kde4/settingsdialog.py:333 ../../gnome/settingsdialog.glade:1066 +#: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "Óra:" -#: ../../kde4/settingsdialog.py:344 ../../gnome/settingsdialog.glade:1053 +#: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "Óra:" -#: ../../kde4/settingsdialog.py:353 ../../gnome/settingsdialog.glade:1014 +#: ../../qt4/settingsdialog.py:339 msgid "" -"Run Back In Time periodically with anacron. This is useful if the computer " -"is not running regular." +"Run Back In Time repeatedly. This is useful if the computer is not running " +"regular." msgstr "" -"A Back In Time rendszeresen fusson anacronnal. Ez akkor hasznos, ha a " -"számítógép nem üzemel folyamatosan." -#: ../../kde4/settingsdialog.py:357 ../../gnome/settingsdialog.glade:1040 -msgid "Frequency in days:" -msgstr "Gyakoriság napokban:" +#: ../../qt4/settingsdialog.py:344 +msgid "Every:" +msgstr "" -#: ../../kde4/settingsdialog.py:368 ../../gnome/settingsdialog.glade:1026 +#: ../../qt4/settingsdialog.py:362 msgid "" "Run Back In Time as soon as the drive is connected (only once every X " "days).\n" @@ -1214,25 +1249,27 @@ "Futtassa a Back In Time-ot, amint csatolod a meghajtót (X naponta egyszer).\n" "Be fogja kérni a sudo jelszót." -#: ../../kde4/settingsdialog.py:379 ../../gnome/settingsdialog.glade:1310 +#: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Hozzáadás" -#: ../../kde4/settingsdialog.py:403 ../../kde4/settingsdialog.py:445 -#: ../../gnome/settingsdialog.glade:1411 +#: ../../qt4/settingsdialog.py:381 +msgid "Include files and folders" +msgstr "Felveendő fájlok és mappák" + +#: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "Fájl hozzáadása" -#: ../../kde4/settingsdialog.py:408 ../../kde4/settingsdialog.py:450 -#: ../../gnome/settingsdialog.glade:1427 +#: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Mappa hozzáadása" -#: ../../kde4/settingsdialog.py:418 ../../gnome/settingsdialog.glade:1474 +#: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Kihagyás" -#: ../../kde4/settingsdialog.py:421 ../../gnome/settingsdialog.glade:1328 +#: ../../qt4/settingsdialog.py:417 msgid "" "Warning: Wildcards ('foo*', '[fF]oo', 'fo?') will be ignored with " "mode 'SSH encrypted'.\n" @@ -1242,318 +1279,433 @@ "'SSH encrypted' mód nem veszi figyelembe.\n" "Csak az elválasztó csillag megengedett ('foo/*', 'foo/**/bar')" -#: ../../kde4/settingsdialog.py:430 +#: ../../qt4/settingsdialog.py:425 +msgid "Exclude patterns, files or folders" +msgstr "Kihagyandó minták, fájlok és mappák" + +#: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "Erősen ajánlott:" -#: ../../kde4/settingsdialog.py:460 ../../gnome/settingsdialog.glade:1905 +#: ../../qt4/settingsdialog.py:463 +msgid "Add default" +msgstr "" + +#: ../../qt4/settingsdialog.py:474 +msgid "Exclude files bigger than: " +msgstr "" + +#: ../../qt4/settingsdialog.py:475 +#, python-format +msgid "" +"Exclude files bigger than value in %(prefix)s.\n" +"With 'Full rsync mode' disabled this will only affect new files\n" +"because for rsync this is a transfer option, not an exclude option.\n" +"So big files that has been backed up before will remain in snapshots\n" +"even if they had changed." +msgstr "" + +#: ../../qt4/settingsdialog.py:493 msgid "Auto-remove" msgstr "Automatikus eltávolítás" -#: ../../kde4/settingsdialog.py:464 ../../gnome/settingsdialog.glade:1608 +#: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "Régebbi, mint:" -#: ../../kde4/settingsdialog.py:478 ../../gnome/settingsdialog.glade:1624 +#: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "Ha a szabad hely kevesebb, mint:" -#: ../../kde4/settingsdialog.py:490 ../../gnome/settingsdialog.glade:1642 +#: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "Ha a szabad inode-ok száma kevesebb, mint" -#: ../../kde4/settingsdialog.py:514 ../../gnome/settingsdialog.glade:1697 +#: ../../qt4/settingsdialog.py:551 +msgid "Run in background on remote Host." +msgstr "" + +#: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "Tartsd meg a pillanatképeket a legutóbbi:" -#: ../../kde4/settingsdialog.py:517 ../../kde4/settingsdialog.py:522 -#: ../../gnome/settingsdialog.glade:1705 ../../gnome/settingsdialog.glade:1729 +#: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "napból" -#: ../../kde4/settingsdialog.py:519 ../../gnome/settingsdialog.glade:1717 +#: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "Tarts meg napi egy pillanatképet a legutóbbi:" -#: ../../kde4/settingsdialog.py:524 ../../gnome/settingsdialog.glade:1743 +#: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "Tarts meg heti egy pillanatképet a legutóbbi:" -#: ../../kde4/settingsdialog.py:527 +#: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "hétből" -#: ../../kde4/settingsdialog.py:529 ../../gnome/settingsdialog.glade:1769 +#: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "Tarts meg havi egy pillanatképet a legutóbbi:" -#: ../../kde4/settingsdialog.py:532 ../../gnome/settingsdialog.glade:1781 +#: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "hónapból" -#: ../../kde4/settingsdialog.py:534 ../../gnome/settingsdialog.glade:1795 +#: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "Tarts meg évi egy pillanatképet a legutóbbi:" -#: ../../kde4/settingsdialog.py:537 ../../gnome/settingsdialog.glade:1496 +#: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "Ne távolítsa el a névvel ellátott pillanatképeket" -#: ../../kde4/settingsdialog.py:546 ../../gnome/settingsdialog.glade:2104 +#: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Beállítások" -#: ../../kde4/settingsdialog.py:549 ../../gnome/settingsdialog.glade:1920 +#: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Értesítések engedélyezése" -#: ../../kde4/settingsdialog.py:552 ../../gnome/settingsdialog.glade:1937 +#: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "Pillanatképek készítésének tiltása akkumulátorról működésnél" -#: ../../kde4/settingsdialog.py:555 +#: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" msgstr "A rendszer nem adja meg az energiaellátás állapotát" -#: ../../kde4/settingsdialog.py:558 ../../gnome/settingsdialog.glade:1955 -msgid "Backup files on restore" -msgstr "Visszaállításkor a fájlok biztonsági mentése" +#: ../../qt4/settingsdialog.py:611 +msgid "Run only one snapshot at a time" +msgstr "" + +#: ../../qt4/settingsdialog.py:612 +msgid "" +"Other snapshots will be blocked until the current snapshot is done.\n" +"This is a global option. So it will effect all profiles for this user.\n" +"But you need to activate this for all other users, too." +msgstr "" + +#: ../../qt4/settingsdialog.py:617 +msgid "Backup replaced files on restore" +msgstr "" + +#: ../../qt4/settingsdialog.py:618 +#, python-format +msgid "" +"Newer versions of files will be renamed with trailing '%(suffix)s' before " +"restoring.\n" +"If you don't need them anymore you can remove them with '%(cmd)s'" +msgstr "" -#: ../../kde4/settingsdialog.py:561 ../../gnome/settingsdialog.glade:1972 +#: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "Folytatás hibák esetén (megtartja a nem teljes pillanatképeket)" -#: ../../kde4/settingsdialog.py:564 ../../gnome/settingsdialog.glade:1989 +#: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "Checksum használata hibák felfedezéséhez" -#: ../../kde4/settingsdialog.py:567 ../../gnome/settingsdialog.glade:2006 +#: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "Teljes rsync-mód. Lassabb lehet, de:" -#: ../../kde4/settingsdialog.py:568 ../../gnome/settingsdialog.glade:2032 +#: ../../qt4/settingsdialog.py:634 msgid "" -"- snapshots are no read-only\n" -"- destination file-system must support all linux attributes (dates, rights, " +"- snapshots are not read-only\n" +"- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" "- a pillanatképek nem csak olvashatók\n" "- a célfájlrendszernek támogatnia kell minden linux-attribútumot (dátumok, " "jogok, felhasználó, csoport...)" -#: ../../kde4/settingsdialog.py:575 ../../gnome/settingsdialog.glade:2045 +#: ../../qt4/settingsdialog.py:641 +msgid "Take a new snapshot regardless of there were changes or not." +msgstr "" + +#: ../../qt4/settingsdialog.py:644 msgid "Check for changes (don't take a new snapshot if nothing changed)" msgstr "" "Változások ellenőrzése (nem készít új pillanatképet, ha nincs változás)" -#: ../../kde4/settingsdialog.py:582 +#: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "Naplózás szintje:" -#: ../../kde4/settingsdialog.py:597 ../../gnome/settingsdialog.glade:2366 -msgid "Expert Options" -msgstr "Szakértői beállítások" +#: ../../qt4/settingsdialog.py:656 +msgid "None" +msgstr "Egyik sem" -#: ../../kde4/settingsdialog.py:600 +#: ../../qt4/settingsdialog.py:658 +msgid "Changes & Errors" +msgstr "Változások & Hibák" + +#: ../../qt4/settingsdialog.py:674 msgid "Change these options only if you really know what you are doing !" msgstr "" "Ezeket a beállításokat csak akkor változtasd meg, ha biztosan tudod, mit " "csinálsz!" -#: ../../kde4/settingsdialog.py:608 ../../gnome/settingsdialog.glade:2133 -msgid "Run 'nice' as cron job (default: enabled)" +#: ../../qt4/settingsdialog.py:678 +msgid "Run 'nice':" msgstr "" -"A cron-feladatok 'nice'-ként fussanak (alapértelmezett: engedélyezve)" -#: ../../kde4/settingsdialog.py:611 ../../gnome/settingsdialog.glade:2150 -msgid "Run 'ionice' as cron job (default: enabled)" +#: ../../qt4/settingsdialog.py:684 ../../qt4/settingsdialog.py:696 +msgid "as cron job" msgstr "" -"A cron-feladatok 'ionice'-ként fussanak (alapértelmezett: engedélyezve)" -#: ../../kde4/settingsdialog.py:614 ../../gnome/settingsdialog.glade:2167 -msgid "Run 'ionice' when taking a manual snapshot (default: disabled)" +#: ../../qt4/settingsdialog.py:687 ../../qt4/settingsdialog.py:702 +#: ../../qt4/settingsdialog.py:716 +msgid "on remote host" msgstr "" -"A cron-feladatok 'nice'-ként fussanak, ha kézzel készítesz pillanatképet " -"(alapértelmezett: tiltva)" -#: ../../kde4/settingsdialog.py:617 ../../gnome/settingsdialog.glade:2184 -msgid "Run 'nice' on remote host (default: disabled)" -msgstr "A távoli kiszolgálón 'nice'-ként fusson (alapértelmezés: tiltva)" +#: ../../qt4/settingsdialog.py:690 +msgid "Run 'ionice':" +msgstr "" -#: ../../kde4/settingsdialog.py:620 ../../gnome/settingsdialog.glade:2201 -msgid "Run 'ionice' on remote host (default: disabled)" -msgstr "A távoli kiszolgálón 'ionice'-ként fusson (alapértelmezés: tiltva)" +#: ../../qt4/settingsdialog.py:699 +msgid "when taking a manual snapshot" +msgstr "" + +#: ../../qt4/settingsdialog.py:706 +msgid "Run 'rsync' with 'nocache':" +msgstr "" + +#: ../../qt4/settingsdialog.py:712 +msgid "on local machine" +msgstr "" + +#: ../../qt4/settingsdialog.py:719 +msgid "Redirect stdout to /dev/null in cronjobs." +msgstr "" + +#: ../../qt4/settingsdialog.py:725 +msgid "Redirect stderr to /dev/null in cronjobs." +msgstr "" -#: ../../kde4/settingsdialog.py:626 ../../gnome/settingsdialog.glade:2224 +#: ../../qt4/settingsdialog.py:734 msgid "Limit rsync bandwidth usage: " msgstr "Az rsync sávszélesség-használatának korlátja: " -#: ../../kde4/settingsdialog.py:629 ../../gnome/settingsdialog.glade:2259 +#: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr " KB/sec" -#: ../../kde4/settingsdialog.py:634 ../../gnome/settingsdialog.glade:2280 +#: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "ACL-ek megtartása" -#: ../../kde4/settingsdialog.py:637 ../../gnome/settingsdialog.glade:2297 +#: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "Kiterjesztett jogosultságok (xattr) megtartása" -#: ../../kde4/settingsdialog.py:640 ../../gnome/settingsdialog.glade:2314 +#: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute links)" msgstr "Nem biztonságos linkek másolása (csak abszolút linkekkel működik)" -#: ../../kde4/settingsdialog.py:643 ../../gnome/settingsdialog.glade:2331 -msgid "Copy links (dereference symbolic links)" -msgstr "Linkek másolása (szimbolikus linkeknél nem csak a hivatkozást)" +#: ../../qt4/settingsdialog.py:834 +msgid "Paste additional options to rsync" +msgstr "" -#: ../../kde4/snapshotsdialog.py:46 ../../kde4/snapshotsdialog.py:173 -#: ../../gnome/snapshotsdialog.glade:385 -msgid "Diff Options" -msgstr "Diff beállítások" +#: ../../qt4/settingsdialog.py:837 +msgid "" +"Options must be quoted e.g. --exclude-from=\"/path/to/my exclude file\"." +msgstr "" -#: ../../kde4/snapshotsdialog.py:56 ../../gnome/snapshotsdialog.glade:314 -msgid "Command:" -msgstr "Parancs:" +#: ../../qt4/settingsdialog.py:847 +msgid "Add prefix to SSH commands" +msgstr "" -#: ../../kde4/snapshotsdialog.py:60 ../../gnome/snapshotsdialog.glade:322 -msgid "Parameters:" -msgstr "Paraméterek:" +#: ../../qt4/settingsdialog.py:850 +#, python-format +msgid "" +"Prefix to run before every command on remote host.\n" +"Variables need to be escaped with \\$FOO.\n" +"This doesn't touch rsync. So to add a prefix\n" +"for rsync use \"%(cb_rsync_options)s\" with\n" +"%(rsync_options_value)s\n" +"\n" +"%(default)s: %(def_value)s" +msgstr "" -#: ../../kde4/snapshotsdialog.py:64 ../../gnome/snapshotsdialog.glade:334 -msgid "Use %1 and %2 for path parameters" -msgstr "Használja ezeket útvonal-paraméterként: %1 és %2" +#: ../../qt4/settingsdialog.py:858 ../../qt4/settingsdialog.py:1691 +msgid "default" +msgstr "" -#: ../../kde4/snapshotsdialog.py:123 ../../gnome/snapshotsdialog.glade:184 -#: ../../gnome/snapshotsdialog.glade:186 -msgid "Delete" -msgstr "Töröl" +#: ../../qt4/settingsdialog.py:875 +msgid "Restore Config" +msgstr "" -#: ../../kde4/snapshotsdialog.py:128 ../../gnome/snapshotsdialog.glade:199 -#: ../../gnome/snapshotsdialog.glade:201 -msgid "Select All" -msgstr "Minden kijelölése" +#: ../../qt4/settingsdialog.py:891 +msgid "" +"Full system backup can only create a snapshot to be restored to the same " +"physical disk(s) with the same disk partitioning as from the source; " +"restoring to new physical disks or the same disks with different " +"partitioning will yield a potentially broken and unusable system.\n" +"\n" +"Full system backup will override some settings that may have been " +"customized. Continue?" +msgstr "" -#: ../../kde4/snapshotsdialog.py:132 ../../gnome/snapshotsdialog.glade:88 -msgid "List only different snapshots" -msgstr "Csak az eltérő pillanatképek listázása" +#: ../../qt4/settingsdialog.py:922 +msgid "New profile" +msgstr "Új profil" -#: ../../kde4/snapshotsdialog.py:139 ../../gnome/snapshotsdialog.glade:110 -msgid "List only equal snapshots to: " -msgstr "Csak a következőkkel megegyező pillanatképek listázása: " +#: ../../qt4/settingsdialog.py:938 +msgid "Rename profile" +msgstr "Profil átnevezése" -#: ../../kde4/snapshotsdialog.py:149 ../../gnome/snapshotsdialog.glade:146 -msgid "Deep check (more accurate, but slow)" -msgstr "Alapos ellenőrzés (pontosabb, de lassú)" +#: ../../qt4/settingsdialog.py:952 +#, python-format +msgid "Are you sure you want to delete the profile \"%s\" ?" +msgstr "Biztosan törlöd a(z) \"%s\" profilt?" -#: ../../kde4/snapshotsdialog.py:174 -msgid "Go To" -msgstr "Ugrás ide:" +#: ../../qt4/settingsdialog.py:1191 +msgid "" +"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " +"*/3 for periodic backups every 3 hours" +msgstr "" +"Az egyedi órák csak vesszővel elválasztott, listázott értékek lehetnek (pl. " +"8,12,18,23), vagy */3, ha háromóránként akarsz mentést készíteni." -#: ../../gnome/logviewdialog.glade:9 -msgid "Log View" -msgstr "Naplófájl megtekintése" - -#: ../../gnome/logviewdialog.glade:179 -msgid "scroll down automatic" -msgstr "automatikus lefelé görgetés" - -#: ../../gnome/mainwindow.glade:7 -msgid "Back In Time" -msgstr "Back In Time" - -#: ../../gnome/mainwindow.glade:45 -msgid "Backup Now" -msgstr "Biztonsági mentés most" +#: ../../qt4/settingsdialog.py:1489 +msgid "Exclude pattern" +msgstr "Kihagyási minta" -#: ../../gnome/mainwindow.glade:171 -msgid "Shutdown" -msgstr "Leállítás" +#: ../../qt4/settingsdialog.py:1502 +msgid "Exclude file" +msgstr "Kihagyandó fájl" -#: ../../gnome/mainwindow.glade:287 -msgid "Parent folder" -msgstr "Szülőkönyvtár" +#: ../../qt4/settingsdialog.py:1506 +msgid "Exclude folder" +msgstr "Kihagyandó mappa" -#: ../../gnome/mainwindow.glade:327 -msgid "Hidden files" -msgstr "Rejtett fájlok" +#: ../../qt4/settingsdialog.py:1525 +msgid "Include file" +msgstr "Felveendő fájl" -#: ../../gnome/mainwindow.glade:451 +#: ../../qt4/settingsdialog.py:1533 ../../qt4/settingsdialog.py:1553 +#, python-format msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +"\"%s\" is a symlink. The linked target will not be backed up until you " +"include it, too.\n" +"Would you like to include the symlinks target instead?" msgstr "" -"A jelenlegi pillanatképben\n" -"nincs benne ez a mappa!" -#: ../../gnome/settingsdialog.glade:287 -msgid "Where to save snapshots" -msgstr "Hova mentsem a pillanatképet" +#: ../../qt4/settingsdialog.py:1545 +msgid "Include folder" +msgstr "Felveendő mappa" -#: ../../gnome/settingsdialog.glade:483 -msgid "Private key:" -msgstr "Privát kulcs:" +#: ../../qt4/settingsdialog.py:1572 +msgid "Are you sure you want to change snapshots folder ?" +msgstr "Biztos, hogy szeretnéd megváltoztatni a pillanatképek mappáját?" -#: ../../gnome/settingsdialog.glade:534 -msgid "Advanced SSH Settings" -msgstr "Szakértői SSH-beállítások" +#: ../../qt4/settingsdialog.py:1688 +msgid "enabled" +msgstr "" -#: ../../gnome/settingsdialog.glade:552 -msgid "SSH Settings" -msgstr "SSH-beállítások" +#: ../../qt4/settingsdialog.py:1690 +msgid "disabled" +msgstr "" -#: ../../gnome/settingsdialog.glade:815 -msgid "Password" -msgstr "Jelszó" +#: ../../qt4/settingsdialog.py:1715 +msgid "Restore Settings" +msgstr "" -#: ../../gnome/settingsdialog.glade:930 -msgid "Profile Id:" -msgstr "A profil azonosítója:" +#: ../../qt4/settingsdialog.py:1732 +msgid " and add your user to group 'fuse'" +msgstr "" -#: ../../gnome/settingsdialog.glade:1115 +#: ../../qt4/settingsdialog.py:1736 +#, python-format msgid "" -"hours seperate by comma ( e.g. 8,12,18,23) or */3 for periodic backups every " -"3 hours (cron style)" +"Please navigate to the snapshot from which you want to restore %(appName)s's " +"configuration. The path may look like: \n" +"%(samplePath)s\n" +"\n" +"If your snapshots are on a remote drive or if they are encrypted you need to " +"manually mount them first. If you use Mode SSH you also may need to set up " +"public key login to the remote host%(addFuse)s.\n" +"Take a look at 'man backintime'." msgstr "" -"az órákat vesszővel kell elválasztani (pl. 8,12,18,23) vagy */3 esetén " -"háromóránként készül mentés (cron-stílus)" -#: ../../gnome/settingsdialog.glade:1163 -msgid "Schedule" -msgstr "Ütemterv" +#: ../../qt4/settingsdialog.py:1794 ../../qt4/settingsdialog.py:1854 +msgid "No config found" +msgstr "" + +#: ../../qt4/snapshotsdialog.py:49 ../../qt4/snapshotsdialog.py:173 +msgid "Diff Options" +msgstr "Diff beállítások" + +#: ../../qt4/snapshotsdialog.py:56 +msgid "Command:" +msgstr "Parancs:" + +#: ../../qt4/snapshotsdialog.py:60 +msgid "Parameters:" +msgstr "Paraméterek:" + +#: ../../qt4/snapshotsdialog.py:64 +msgid "Use %1 and %2 for path parameters" +msgstr "Használja ezeket útvonal-paraméterként: %1 és %2" + +#: ../../qt4/snapshotsdialog.py:106 +msgid "List only different snapshots" +msgstr "Csak az eltérő pillanatképek listázása" + +#: ../../qt4/snapshotsdialog.py:113 +msgid "List only equal snapshots to: " +msgstr "Csak a következőkkel megegyező pillanatképek listázása: " -#: ../../gnome/settingsdialog.glade:1363 -msgid "Highly recommended:" -msgstr "Erősen ajánlott:" +#: ../../qt4/snapshotsdialog.py:123 +msgid "Deep check (more accurate, but slow)" +msgstr "Alapos ellenőrzés (pontosabb, de lassú)" -#: ../../gnome/settingsdialog.glade:1377 -msgid "label" -msgstr "címke" +#: ../../qt4/snapshotsdialog.py:144 +msgid "Delete" +msgstr "Töröl" -#: ../../gnome/settingsdialog.glade:1755 -msgid "week(s)" -msgstr "hét" +#: ../../qt4/snapshotsdialog.py:148 +msgid "Select All" +msgstr "Minden kijelölése" -#: ../../gnome/settingsdialog.glade:2069 -msgid "Log level:" -msgstr "Naplózási szint:" +#: ../../qt4/snapshotsdialog.py:161 +msgid "Diff" +msgstr "Különbség" -#: ../../gnome/settingsdialog.glade:2121 +#: ../../qt4/snapshotsdialog.py:172 +msgid "Go To" +msgstr "Ugrás ide:" + +#: ../../qt4/snapshotsdialog.py:326 +msgid "You can't compare a snapshot to itself" +msgstr "Egy pillanatkép nem hasonlítható össze önmagával" + +#: ../../qt4/snapshotsdialog.py:333 +#, python-format +msgid "Command not found: %s" +msgstr "A következő parancs nem található: %s" + +#: ../../qt4/snapshotsdialog.py:354 +#, python-format msgid "" -"Change these options only if you really know what you are doing !" +"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" msgstr "" -"Ezeket a beállításokat csak akkor változtasd meg, ha biztosan tudod, mit " -"csinálsz!" +"Biztosan töröljem a \"%(file)s\" fájlt a \"%(snapshot_id)s pillanatképből?\n" -#: ../../gnome/snapshotsdialog.glade:263 -msgid "Diff with" -msgstr "Összehasonlítás ezzel:" +#: ../../qt4/snapshotsdialog.py:357 +#, python-format +msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +msgstr "Biztos, hogy törlöd a \"%(file)s\"-t a \"%(count)d-pillanatképből?\n" -#: ../../gnome/textinputdialog.glade:7 -msgid "Pattern" -msgstr "Minta" +#: ../../qt4/snapshotsdialog.py:359 +msgid "WARNING: This can not be revoked!" +msgstr "Nem lehet visszavonni!" -#: ../../gnome/textinputdialog.glade:70 -msgid "Text" -msgstr "Szöveg" +#: ../../qt4/snapshotsdialog.py:374 +#, python-format +msgid "Exclude \"%s\" from future snapshots?" +msgstr "Kizárjam a \"%s\"-t a jövőbeli pillanatképekből?" diff -Nru backintime-1.0.36/common/po/id.po backintime-1.1.12/common/po/id.po --- backintime-1.0.36/common/po/id.po 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/po/id.po 2016-01-11 18:07:58.000000000 +0000 @@ -7,372 +7,442 @@ msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2013-11-09 22:34+0100\n" -"PO-Revision-Date: 2009-04-17 13:52+0000\n" -"Last-Translator: Rahman Yusri Aftian \n" +"POT-Creation-Date: 2015-12-19 00:47+0100\n" +"PO-Revision-Date: 2015-09-09 21:52+0000\n" +"Last-Translator: Back In Time Team \n" "Language-Team: Indonesian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Launchpad-Export-Date: 2014-08-06 10:20+0000\n" -"X-Generator: Launchpad (build 17147)\n" +"X-Launchpad-Export-Date: 2016-01-11 17:52+0000\n" +"X-Generator: Launchpad (build 17881)\n" -#: ../../common/config.py:72 +#: ../../common/configfile.py:60 +#, python-format +msgid "Failed to save config: %s" +msgstr "" + +#: ../../common/configfile.py:78 +#, python-format +msgid "Failed to load config: %s" +msgstr "" + +#: ../../common/configfile.py:352 ../../common/configfile.py:414 +#, python-format +msgid "Profile \"%s\" already exists !" +msgstr "Profil \"%s\" sudah terpakai !" + +#: ../../common/configfile.py:383 +msgid "You can't remove the last profile !" +msgstr "Anda tidak dapat menghapus profil terakhir !" + +#: ../../common/config.py:76 msgid "Disabled" msgstr "Dinonaktifkan" -#: ../../common/config.py:73 +#: ../../common/config.py:77 msgid "At every boot/reboot" -msgstr "" +msgstr "Pada setiap boot/reboot" -#: ../../common/config.py:74 +#: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Setiap 5 menit" -#: ../../common/config.py:75 +#: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Setiap 10 menit" -#: ../../common/config.py:76 +#: ../../common/config.py:80 msgid "Every 30 minutes" -msgstr "" +msgstr "Setiap 30 menit" -#: ../../common/config.py:77 +#: ../../common/config.py:81 msgid "Every hour" -msgstr "" +msgstr "Setiap jam" -#: ../../common/config.py:78 +#: ../../common/config.py:82 msgid "Every 2 hours" -msgstr "" +msgstr "Setiap 2 jam" -#: ../../common/config.py:79 +#: ../../common/config.py:83 msgid "Every 4 hours" -msgstr "" +msgstr "Setiap 4 jam" -#: ../../common/config.py:80 +#: ../../common/config.py:84 msgid "Every 6 hours" -msgstr "" +msgstr "Setiap 6 jam" -#: ../../common/config.py:81 +#: ../../common/config.py:85 msgid "Every 12 hours" -msgstr "" +msgstr "Setiap 12 jam" -#: ../../common/config.py:82 +#: ../../common/config.py:86 msgid "Custom Hours" -msgstr "" +msgstr "Menentukan Jam Sendiri" -#: ../../common/config.py:83 +#: ../../common/config.py:87 msgid "Every Day" msgstr "Setiap Hari" -#: ../../common/config.py:84 -msgid "Daily (anacron)" +#: ../../common/config.py:88 +msgid "Repeatedly (anacron)" msgstr "" -#: ../../common/config.py:85 +#: ../../common/config.py:89 msgid "When drive get connected (udev)" -msgstr "" +msgstr "Ketika drive dihubungkan (udev)" -#: ../../common/config.py:86 +#: ../../common/config.py:90 msgid "Every Week" msgstr "Setiap Minggu" -#: ../../common/config.py:87 +#: ../../common/config.py:91 msgid "Every Month" msgstr "Setiap Bulan" -#: ../../common/config.py:91 +#: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Hari(s)" -#: ../../common/config.py:92 +#: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Minggu(s)" -#: ../../common/config.py:93 +#: ../../common/config.py:97 msgid "Year(s)" msgstr "Tahun(s)" -#: ../../common/config.py:100 -msgid " EXPERIMENTAL!" +#: ../../common/config.py:101 +msgid "Hour(s)" msgstr "" -#: ../../common/config.py:103 -msgid "Local" +#: ../../common/config.py:104 +msgid "Month(s)" msgstr "" -#: ../../common/config.py:104 +#: ../../common/config.py:126 ../../qt4/settingsdialog.py:551 +msgid " EXPERIMENTAL!" +msgstr " EXPERIMENTAL!" + +#: ../../common/config.py:129 +msgid "Local" +msgstr "Lokal" + +#: ../../common/config.py:130 msgid "SSH" -msgstr "" +msgstr "SSH" -#: ../../common/config.py:104 ../../common/config.py:106 -#: ../../gnome/settingsdialog.py:475 ../../kde4/settingsdialog.py:1325 +#: ../../common/config.py:130 ../../common/config.py:132 +#: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" -msgstr "" +msgstr "Kunci private SSH" -#: ../../common/config.py:105 +#: ../../common/config.py:131 msgid "Local encrypted" -msgstr "" +msgstr "Lokal terenkripsi" -#: ../../common/config.py:105 ../../common/config.py:106 +#: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" -msgstr "" +msgstr "Enkripsi" -#: ../../common/config.py:106 +#: ../../common/config.py:132 msgid "SSH encrypted" -msgstr "" +msgstr "SSH terenkripsi" -#: ../../common/config.py:112 +#: ../../common/config.py:135 msgid "Default" -msgstr "" +msgstr "Bawaan" -#: ../../common/config.py:113 +#: ../../common/config.py:136 msgid "AES128-CTR" -msgstr "" +msgstr "AES128-CTR" -#: ../../common/config.py:114 +#: ../../common/config.py:137 msgid "AES192-CTR" -msgstr "" +msgstr "AES192-CTR" -#: ../../common/config.py:115 +#: ../../common/config.py:138 msgid "AES256-CTR" -msgstr "" +msgstr "AES256-CTR" -#: ../../common/config.py:116 +#: ../../common/config.py:139 msgid "ARCFOUR256" -msgstr "" +msgstr "ARCFOUR256" -#: ../../common/config.py:117 +#: ../../common/config.py:140 msgid "ARCFOUR128" -msgstr "" +msgstr "ARCFOUR128" -#: ../../common/config.py:118 +#: ../../common/config.py:141 msgid "AES128-CBC" -msgstr "" +msgstr "AES128-CBC" -#: ../../common/config.py:119 +#: ../../common/config.py:142 msgid "3DES-CBC" -msgstr "" +msgstr "3DES-CBC" -#: ../../common/config.py:120 +#: ../../common/config.py:143 msgid "Blowfish-CBC" -msgstr "" +msgstr "Blowfish-CBC" -#: ../../common/config.py:121 +#: ../../common/config.py:144 msgid "Cast128-CBC" -msgstr "" +msgstr "Cast128-CBC" -#: ../../common/config.py:122 +#: ../../common/config.py:145 msgid "AES192-CBC" -msgstr "" +msgstr "AES192-CBC" -#: ../../common/config.py:123 +#: ../../common/config.py:146 msgid "AES256-CBC" -msgstr "" +msgstr "AES256-CBC" -#: ../../common/config.py:124 +#: ../../common/config.py:147 msgid "ARCFOUR" -msgstr "" +msgstr "ARCFOUR" -#: ../../common/config.py:129 +#: ../../common/config.py:153 msgid "Main profile" -msgstr "" +msgstr "Profil utama" -#: ../../common/config.py:256 ../../common/config.py:275 -#: ../../common/config.py:286 ../../common/config.py:291 +#: ../../common/config.py:289 ../../common/config.py:296 +#: ../../common/config.py:307 ../../common/config.py:312 +#: ../../qt4/qt4systrayicon.py:61 #, python-format msgid "Profile: \"%s\"" -msgstr "" +msgstr "Profil: \"%s\"" -#: ../../common/config.py:256 +#: ../../common/config.py:289 msgid "Snapshots folder is not valid !" -msgstr "" +msgstr "Folder snapshot tidak valid !" -#: ../../common/config.py:275 +#: ../../common/config.py:296 msgid "You must select at least one folder to backup !" -msgstr "" +msgstr "Anda harus memilih setidaknya satu folder untuk backup !" -#: ../../common/config.py:286 +#: ../../common/config.py:307 msgid "You can't include backup folder !" -msgstr "" +msgstr "Anda jangan memasukkan juga folder backup !" -#: ../../common/config.py:291 +#: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" -msgstr "" +msgstr "Anda jangan memasukkan juga sub-folder backup !" -#: ../../common/config.py:361 +#: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" +msgstr "%s bukan sebuah folder !" + +#: ../../common/config.py:380 +msgid "Host/User/Profile-ID must not be empty!" msgstr "" -#: ../../common/config.py:376 ../../common/config.py:389 +#: ../../common/config.py:388 ../../common/config.py:420 #, python-format msgid "" "Can't write to: %s\n" "Are you sure you have write access ?" msgstr "" +"Tidak dapat menulis: %s\n" +"Apakah anda yakin memiliki hak akses tulis?" -#: ../../common/config.py:1286 +#: ../../common/config.py:400 +#, python-format msgid "" -"Can't find crontab.\n" -"Are you sure cron is installed ?\n" -"If not you should disable all automatic backups." +"Destination filesystem for '%(path)s' is formatted with FAT which doesn't " +"support hard-links. Please use a native Linux filesystem." msgstr "" -#: ../../common/config.py:1338 +#: ../../common/config.py:405 #, python-format -msgid "Schedule udev doesn't work with mode %s" +msgid "" +"Destination filsystem for '%(path)s' is a SMB mounted share. Please make " +"sure the remote SMB server supports symlinks or activate '%(copyLinks)s' in " +"'%(expertOptions)s'." msgstr "" -#: ../../common/config.py:1342 -#, python-format -msgid "Couldn't find UUID for \"%s\"" +#: ../../common/config.py:408 ../../qt4/settingsdialog.py:815 +msgid "Copy links (dereference symbolic links)" msgstr "" -#: ../../common/config.py:1379 -msgid "Failed to remove udev rules" +#: ../../common/config.py:409 ../../qt4/settingsdialog.py:669 +msgid "Expert Options" msgstr "" -#: ../../common/config.py:1385 -msgid "Failed to create udev rules" +#: ../../common/config.py:411 +#, python-format +msgid "" +"Destination filesystem for '%(path)s is a sshfs mounted share. sshfs doesn't " +"support hard-links. Please use mode 'SSH' instead." msgstr "" -#: ../../common/config.py:1420 +#: ../../common/config.py:1407 msgid "" -"Can't find anacron.\n" -"Are you sure anacron is installed ?\n" -"If not you should disable daily anacron backups." +"Can't find crontab.\n" +"Are you sure cron is installed ?\n" +"If not you should disable all automatic backups." msgstr "" +"Tidak dapat menemukan crontab.\n" +"Apakah anda yakin cron sudah terpasang ?\n" +"Jika tidak, anda harus mematikan semua backup otomatis." -#: ../../common/config.py:1439 -msgid "Please provide your sudo password to install the udev rule." +#: ../../common/config.py:1411 +msgid "Failed to write new crontab." msgstr "" -#: ../../common/config.py:1445 -msgid "Please provide your sudo password to remove unused udev rules." +#: ../../common/config.py:1505 +#, python-format +msgid "" +"Could not install Udev rule for profile %(profile_id)s. DBus Service " +"'%(dbus_interface)s' wasn't available" msgstr "" -#: ../../common/configfile.py:253 ../../common/configfile.py:315 +#: ../../common/config.py:1517 #, python-format -msgid "Profile \"%s\" already exists !" -msgstr "" +msgid "Schedule udev doesn't work with mode %s" +msgstr "Jadwal udev tidak bekerja pada mode %s" -#: ../../common/configfile.py:284 -msgid "You can't remove the last profile !" -msgstr "" +#: ../../common/config.py:1526 +#, python-format +msgid "Couldn't find UUID for \"%s\"" +msgstr "Tidak mampu menemukan UUID untuk \"%s\"" -#: ../../common/encfstools.py:95 +#: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" "\n" "%(error)s" msgstr "" +"Tidak mampu untuk memuat '%(command)s':\n" +"\n" +"%(error)s" -#: ../../common/encfstools.py:105 +#: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" -msgstr "" +msgstr "Tidak mampu memuat encfs %s" -#: ../../common/encfstools.py:149 +#: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." -msgstr "" +msgstr "Konfig untuk folder yang terenkripsi tidak ditemukan." -#: ../../common/encfstools.py:153 +#: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" +"\n" +"Buat sebuah folder terenkripsi yang baru?" -#: ../../common/encfstools.py:154 +#: ../../common/encfstools.py:171 msgid "Cancel" -msgstr "" +msgstr "Batal" -#: ../../common/encfstools.py:157 +#: ../../common/encfstools.py:174 msgid "Please confirm password" -msgstr "" +msgstr "Mohon kata sandi dikonfirmasi" -#: ../../common/encfstools.py:161 +#: ../../common/encfstools.py:178 msgid "Password doesn't match" -msgstr "" +msgstr "Kata sandi tidak cocok" -#: ../../common/encfstools.py:166 +#: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" +"encfs tidak ditemukan. Silahkan pasang misal dengan cara `apt-get install " +"encfs'" -#: ../../common/encfstools.py:174 ../../common/sshtools.py:207 +#: ../../common/encfstools.py:196 ../../common/sshtools.py:262 #, python-format msgid "" "%(user)s is not member of group 'fuse'.\n" " Run 'sudo adduser %(user)s fuse'. To apply changes logout and login again.\n" "Look at 'man backintime' for further instructions." msgstr "" +"%(user)s bukan merupakan anggota dari grup 'fuse'.\n" +" Jalankan 'sudo adduser %(user)s fuse'. Untuk menerapkan perubahan silahkan " +"logout dan login kembali.\n" +"Lihat pada 'man backintime' untuk instruksi lebih lanjut." -#: ../../common/encfstools.py:189 +#: ../../common/encfstools.py:211 msgid "" "encfs version 1.7.2 and before has a bug with option --reverse. Please " "update encfs" msgstr "" +"versi encfs 1.7.2 dan setelahnya mempunyai bug ketika menggunakan opsi --" +"reverse. Silahkan perbaharui encfs" -#: ../../common/encfstools.py:453 ../../common/encfstools.py:480 -#: ../../common/snapshots.py:982 ../../common/snapshots.py:1288 -#: ../../kde4/app.py:82 ../../gnome/mainwindow.glade:43 +#: ../../common/encfstools.py:512 ../../common/snapshots.py:1131 +#: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" -msgstr "" +msgstr "Ambil snapshot" -#: ../../common/mount.py:195 +#: ../../common/mount.py:204 #, python-format msgid "" "Hash collision occurred in hash_id %s. Incrementing global value " "hash_collision and try again." msgstr "" +"Tabrakan hash muncul pada hash_id %s. Naikkan nilai global hash_collision " +"dan cobalah lagi." -#: ../../common/mount.py:246 +#: ../../common/mount.py:259 #, python-format msgid "mountpoint %s not empty." -msgstr "" +msgstr "mountpoint %s tidak kosong." -#: ../../common/mount.py:286 +#: ../../common/mount.py:296 msgid "Mountprocess lock timeout" -msgstr "" +msgstr "Kunci proses mount telah habis" -#: ../../common/password.py:425 +#: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " -msgstr "" +msgstr "Profil '%(profile)s': Masukkan kata sandi untuk %(mode)s: " -#: ../../common/snapshots.py:171 ../../gnome/app.py:1127 -#: ../../kde4/app.py:1014 +#: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Saat Ini" -#: ../../common/snapshots.py:182 ../../gnome/gnometools.py:37 +#: ../../common/snapshots.py:196 msgid "WITH ERRORS !" -msgstr "" +msgstr "DENGAN KESALAHAN !" -#: ../../common/snapshots.py:282 +#: ../../common/snapshots.py:344 msgid "" "### This log has been decoded with automatic search pattern\n" "### If some paths are not decoded you can manually decode them with:\n" msgstr "" +"### Catatan ini telah di decode dengan pencarian pola otomatis\n" +"### Jika ada beberapa jalur yang tidak didecode anda dapat mendecodenya " +"secara manual menggunakan:\n" -#: ../../common/snapshots.py:465 +#: ../../common/snapshots.py:562 ../../common/snapshots.py:750 msgid "FAILED" -msgstr "" +msgstr "GAGAL" -#: ../../common/snapshots.py:564 +#: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" -msgstr "" +msgstr "Kembalikan hak akses:" + +#: ../../common/snapshots.py:752 ../../qt4/app.py:377 ../../qt4/app.py:675 +#: ../../qt4/app.py:692 ../../qt4/qt4systrayicon.py:65 +msgid "Done" +msgstr "Selesai" -#: ../../common/snapshots.py:739 +#: ../../common/snapshots.py:860 msgid "" "Back In Time changed its backup format.\n" "\n" "Your old snapshots can be moved according to this new format. OK?" msgstr "" +"Back In Time telah mengubah format backupnya.\n" +"\n" +"Snapshot anda yang lama dapat dipindah menurut format yang baru. Setuju?" -#: ../../common/snapshots.py:749 +#: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" @@ -382,14 +452,23 @@ "\n" "(The program will still be able to discriminate between them)" msgstr "" +"profile %s ditemukan. \n" +"\n" +"Format backup yang baru mendukung penyimpanan pada pengguna dan profile yang " +"berbeda pada lokasi yang sama. Apakah anda ingin menggunakan lokasi yang " +"sama untuk kedua profil? \n" +"\n" +"(Program akan tetap mampu membedakan keduanya)" -#: ../../common/snapshots.py:752 +#: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" msgstr "" +"Tidak ada profil yang ditemukan. Harus melakukan pembaruan profil terlebih " +"dahulu, mohon restart Back In Time" -#: ../../common/snapshots.py:803 +#: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" @@ -401,8 +480,17 @@ "If not Back In Time will restore former settings for this profile, however " "cannot continue taking snapshots" msgstr "" +"%(snapshots_left)s\n" +"dari profil %(profile_id)s tidak dipindahkan pada lokasi yang baru\n" +"Apakah anda ingin memprosesnya?\n" +"(Back In Time akan mampu melanjutkannya meskipun sedang mengambil snapshot, " +"bagaimanapun snapshot yang tersisa tidak akan mengalami penghapusan " +"otomatis)\n" +"\n" +"Jika tidak, Back In Time akan memulihkan pengaturan awalnya untuk profil " +"ini. Dengan kata lain tidak akan mampu melanjutkan pengambilan snapshot" -#: ../../common/snapshots.py:812 +#: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" @@ -411,15 +499,24 @@ "You can manually move the snapshots, \n" "if you are done restart Back In Time to proceed" msgstr "" +"Pengaturan awal untuk profil %s sedang dipulihkan.\n" +"Back In Time tidak mampu melanjutkannya ketika sedang mengambil snapshot " +"baru.\n" +"\n" +"Anda dapat memindahkan snapshotnya secara manual, \n" +"Jika anda sudah selesai, restart Back In Time untuk memprosesnya" -#: ../../common/snapshots.py:825 +#: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" msgstr "" +"Pembaruan berhasil!\n" +"\n" +"Back In Time akan melanjutkan mengambil snapshot lagi sesuai yang dijadwalkan" -#: ../../common/snapshots.py:830 +#: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" @@ -430,999 +527,1178 @@ "\n" "If you do not, you will be asked again next time you start Back In Time." msgstr "" +"Apakah anda yakin untuk tidak mau memindahkan snapshot anda yang lama?\n" +"\n" +"\n" +"Jika ada melakukannya, anda tidak akan melihat pertanyaan ini lagi nanti, " +"Back In Time akan melanjutkan mengambil snapshot lagi, tapi smart-remove " +"tidak akan mampu mengambil snapshot anda yang lama kedalam akun lebih lama " +"lagi!\n" +"\n" +"Jika tidak, anda akan ditanyai lagi jika anda memulai program Back In Time " +"nanti." -#: ../../common/snapshots.py:839 +#: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "" +"Back In Time akan melanjutkan pengambilan snapshot sesuai yang dijadwalkan" -#: ../../common/snapshots.py:841 +#: ../../common/snapshots.py:953 msgid "" "Back In Time still cannot continue taking new snapshots.\n" "Restart Back In Time to see the questions again" msgstr "" +"Back In Time masih tidak dapat melanjutkan pengambilan snapshot yang baru.\n" +"Nyalakan ulang Back In Time untuk mendapatkan pertanyaan ini lagi" + +#: ../../common/snapshots.py:972 +msgid "Deferring backup while on battery" +msgstr "" -#: ../../common/snapshots.py:913 +#: ../../common/snapshots.py:1035 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it." msgstr "" +"Tidak dapat menemukan folder snapshot.\n" +"Jika ada di hardisk eksternal atau perangkat lainnya silahkan ditancapkan." -#: ../../common/snapshots.py:915 +#: ../../common/snapshots.py:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Menunggu %s detik." -#: ../../common/snapshots.py:941 +#: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" -msgstr "" +msgstr "Gagal untuk mengambil snapshot %s !!!" -#: ../../common/snapshots.py:950 +#: ../../common/snapshots.py:1072 msgid "Finalizing" -msgstr "" +msgstr "Menyelesaikan" -#: ../../common/snapshots.py:1088 +#: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" -msgstr "" +msgstr "Tidak mampu membuat folder: %s" -#: ../../common/snapshots.py:1107 +#: ../../common/snapshots.py:1217 msgid "..." +msgstr "..." + +#: ../../common/snapshots.py:1238 +#, python-format +msgid "Found leftover '%s' which can be continued." msgstr "" -#: ../../common/snapshots.py:1134 +#: ../../common/snapshots.py:1250 #, python-format -msgid "Can't remove folder: %s" +msgid "Remove leftover '%s' folder from last run" msgstr "" -#: ../../common/snapshots.py:1219 +#: ../../common/snapshots.py:1263 +#, python-format +msgid "Can't remove folder: %s" +msgstr "Tidak mampu menghapus folder: %s" + +#: ../../common/snapshots.py:1340 #, python-format msgid "Compare with snapshot %s" -msgstr "" +msgstr "Bandingkan dengan snapshot %s" -#: ../../common/snapshots.py:1248 +#: ../../common/snapshots.py:1360 msgid "Create hard-links" -msgstr "" +msgstr "Buat hard-link" -#: ../../common/snapshots.py:1335 +#: ../../common/snapshots.py:1439 msgid "Save config file ..." -msgstr "" +msgstr "Simpan berkas konfigurasi ..." -#: ../../common/snapshots.py:1341 +#: ../../common/snapshots.py:1445 msgid "Save permission ..." +msgstr "Simpan hak akses ..." + +#: ../../common/snapshots.py:1470 +msgid "Save permission over ssh failed. Retry normal method" msgstr "" -#: ../../common/snapshots.py:1442 +#: ../../common/snapshots.py:1521 #, python-format msgid "Can't rename %(new_path)s to %(path)s" -msgstr "" - -#: ../../common/snapshots.py:1562 -msgid "Remove old snapshots" -msgstr "" +msgstr "Tidak bisa mengubah nama %(new_path)s ke %(path)s" -#: ../../common/snapshots.py:1586 ../../kde4/settingsdialog.py:501 -#: ../../gnome/settingsdialog.glade:1660 +#: ../../common/snapshots.py:1695 ../../common/snapshots.py:1728 +#: ../../qt4/settingsdialog.py:542 msgid "Smart remove" -msgstr "" +msgstr "Penghapusan pintar" + +#: ../../common/snapshots.py:1704 +msgid "Remove old snapshots" +msgstr "Hapus snapshot lama" -#: ../../common/snapshots.py:1591 +#: ../../common/snapshots.py:1733 msgid "Try to keep min free space" -msgstr "" +msgstr "Coba untuk selalu menyimpan sisa partisi yang minimal" -#: ../../common/snapshots.py:1621 +#: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" -msgstr "" +msgstr "Coba untuk menyimpan sisa inodes %d%%" -#: ../../common/sshtools.py:106 +#: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" -msgstr "" +msgstr "Tidak dapat mengkaitkan %s" -#: ../../common/sshtools.py:113 +#: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" -msgstr "" - -#: ../../common/sshtools.py:187 -#, python-format -msgid "" -"Failed to unlock SSH private key:\n" -"Error: %s" -msgstr "" +msgstr "Tidak bisa mencabut sshfs %s" -#: ../../common/sshtools.py:194 +#: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" +"Tidak dapat membuka kunci privat SSH. Kata sandi yang salah atau tidak " +"tersedia untuk cron." -#: ../../common/sshtools.py:199 +#: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" +"sshfs tidak ditemukan. Silahkan pasang misal dengan 'apt-get install sshfs'" -#: ../../common/sshtools.py:217 +#: ../../common/sshtools.py:278 #, python-format msgid "" "Password-less authentication for %(user)s@%(host)s failed. Look at 'man " "backintime' for further instructions." msgstr "" +"Otentikasi tak bersandi untuk %(user)s@%(host)s gagal. Lihat pada 'man " +"backintime' untuk instruksi lebih lanjut." -#: ../../common/sshtools.py:229 +#: ../../common/sshtools.py:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" +"Cipher %(cipher)s gagal untuk %(host)s:\n" +"%(err)s" -#: ../../common/sshtools.py:254 +#: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." -msgstr "" +msgstr "%s tidak ditemukan dalam ssh_known_hosts." -#: ../../common/sshtools.py:274 +#: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" +"Jalur yang dipantau tersedia tapi sayangnya bukan sebuah direktori:\n" +" %s" -#: ../../common/sshtools.py:276 +#: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" +"Jalur yang dipantau tidak dapat ditulisi:\n" +" %s" -#: ../../common/sshtools.py:278 +#: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" +"Jalur yang dipantau tidak dapat dieksekusi:\n" +" %s" -#: ../../common/sshtools.py:280 +#: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" +"Tidak mampu membuat jalur pemantau:\n" +" %s" -#: ../../common/sshtools.py:302 +#: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." -msgstr "" +msgstr "Ping %s gagal. Host sedang down atau alamatnya salah." -#: ../../common/sshtools.py:325 ../../common/sshtools.py:383 +#: ../../common/sshtools.py:423 ../../common/sshtools.py:553 #, python-format msgid "" "Remote host %(host)s doesn't support '%(command)s':\n" "%(err)s\n" "Look at 'man backintime' for further instructions" msgstr "" +"Host yang dipantau %(host)s tidak mendukung '%(command)s':\n" +"%(err)s\n" +"Lihat pada 'man backintime' untuk instruksi lebih lanjut" -#: ../../common/sshtools.py:387 +#: ../../common/sshtools.py:556 #, python-format msgid "" "Check commands on host %(host)s returned unknown error:\n" "%(err)s\n" "Look at 'man backintime' for further instructions" msgstr "" +"Periksa perintah-perintah pada host %(host)s yang menyebabkan kesalahan:\n" +"%(err)s\n" +"Lihat pada 'man backintime' untuk penjelasan lebih lanjut" -#: ../../common/sshtools.py:400 +#: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" +msgstr "Host %s yang dipantau tidak mendukung hardlink" + +#: ../../qt4/app.py:81 +msgid "Refresh snapshots list" +msgstr "Segarkan daftar snapshot" + +#: ../../qt4/app.py:85 ../../qt4/app.py:890 +msgid "Snapshot Name" +msgstr "Nama Snapshot" + +#: ../../qt4/app.py:88 +msgid "Remove Snapshot" +msgstr "Singkirkan Snapshot" + +#: ../../qt4/app.py:91 +msgid "View Snapshot Log" +msgstr "Lihat Catatan Snapshot" + +#: ../../qt4/app.py:94 +msgid "View Last Log" +msgstr "Lihat Catatan Terakhir" + +#: ../../qt4/app.py:99 ../../qt4/settingsdialog.py:51 +msgid "Settings" +msgstr "Pengaturan" + +#: ../../qt4/app.py:104 +msgid "Shutdown" msgstr "" -#: ../../gnome/app.py:185 ../../gnome/app.py:594 ../../gnome/app.py:608 -#: ../../kde4/app.py:299 ../../kde4/app.py:570 ../../kde4/app.py:587 -msgid "Done" -msgstr "Selesai" +#: ../../qt4/app.py:105 +msgid "Shutdown system after snapshot has finished." +msgstr "Matikan sistem setelah snapshot selesai." -#: ../../gnome/app.py:189 ../../kde4/app.py:143 ../../kde4/app.py:159 -#: ../../gnome/mainwindow.glade:225 +#: ../../qt4/app.py:111 +msgid "Exit" +msgstr "Keluar" + +#: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 msgid "Help" +msgstr "Bantuan" + +#: ../../qt4/app.py:122 +msgid "Config File Help" msgstr "" -#: ../../gnome/app.py:191 ../../kde4/app.py:146 -#: ../../gnome/mainwindow.glade:223 +#: ../../qt4/app.py:125 msgid "Website" +msgstr "Situs Web" + +#: ../../qt4/app.py:127 ../../qt4/app.py:982 +msgid "Changelog" msgstr "" -#: ../../gnome/app.py:192 ../../kde4/app.py:148 +#: ../../qt4/app.py:129 msgid "FAQ" -msgstr "" +msgstr "Tanya Jawab" -#: ../../gnome/app.py:193 ../../kde4/app.py:150 +#: ../../qt4/app.py:131 msgid "Ask a question" -msgstr "" +msgstr "Ajukan sebuah pertanyaan" -#: ../../gnome/app.py:194 ../../kde4/app.py:152 +#: ../../qt4/app.py:133 msgid "Report a bug" -msgstr "" +msgstr "Laporkan bug" -#: ../../gnome/app.py:196 ../../kde4/app.py:155 +#: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" -msgstr "" +msgstr "Tentang" -#: ../../gnome/app.py:202 ../../gnome/app.py:887 -#: ../../gnome/restoredialog.py:84 ../../gnome/snapshotsdialog.py:83 -#: ../../gnome/snapshotsdialog.py:244 ../../kde4/app.py:206 -#: ../../kde4/app.py:216 ../../kde4/restoredialog.py:68 -#: ../../kde4/snapshotsdialog.py:111 ../../kde4/snapshotsdialog.py:117 -#: ../../gnome/mainwindow.glade:350 ../../gnome/mainwindow.glade:352 -#: ../../gnome/snapshotsdialog.glade:169 ../../gnome/snapshotsdialog.glade:171 +#: ../../qt4/app.py:163 +msgid "Up" +msgstr "Naik" + +#: ../../qt4/app.py:174 ../../qt4/settingsdialog.py:1776 +msgid "Show hidden files" +msgstr "Tampilkan berkas-berkas tersembunyi" + +#: ../../qt4/app.py:184 ../../qt4/app.py:199 ../../qt4/app.py:233 +#: ../../qt4/restoredialog.py:62 ../../qt4/settingsdialog.py:1818 +#: ../../qt4/snapshotsdialog.py:134 ../../qt4/snapshotsdialog.py:139 msgid "Restore" -msgstr "" +msgstr "Pulihkan" -#: ../../gnome/app.py:203 ../../gnome/app.py:888 ../../gnome/gnometools.py:67 -#: ../../gnome/snapshotsdialog.py:84 ../../gnome/snapshotsdialog.py:245 -#: ../../kde4/app.py:208 ../../kde4/restoredialog.py:42 -#: ../../kde4/snapshotsdialog.py:113 +#: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 +#: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." +msgstr "Pulihkan ke ..." + +#: ../../qt4/app.py:194 +msgid "Restore and delete new files" msgstr "" -#: ../../gnome/app.py:205 ../../gnome/app.py:896 ../../gnome/app.py:1146 -#: ../../kde4/app.py:1041 +#: ../../qt4/app.py:201 #, python-format -msgid "Restore '%s'" +msgid "" +"Restore selected file or folder.\n" +"If this button is grayed out this is most likely because \"%(now)s\" is " +"selected in left hand snapshots list." msgstr "" -#: ../../gnome/app.py:207 ../../gnome/app.py:897 ../../gnome/app.py:1147 -#: ../../kde4/app.py:1042 -#, python-format -msgid "Restore '%s' to ..." +#: ../../qt4/app.py:206 ../../qt4/logviewdialog.py:67 +#: ../../qt4/qt4tools.py:160 ../../qt4/snapshotsdialog.py:96 +msgid "Snapshots" +msgstr "Snapshot" + +#: ../../qt4/app.py:213 +msgid "Snapshot" msgstr "" -#: ../../gnome/app.py:226 ../../kde4/app.py:235 +#: ../../qt4/app.py:224 +msgid "View" +msgstr "" + +#: ../../qt4/app.py:277 msgid "Shortcuts" msgstr "Jalan Pintas" -#: ../../gnome/app.py:249 -msgid "Name" -msgstr "Nama" - -#: ../../gnome/app.py:260 -msgid "Size" -msgstr "Ukuran" - -#: ../../gnome/app.py:267 -msgid "Date" -msgstr "" - -#: ../../gnome/app.py:286 ../../gnome/app.py:883 -#: ../../gnome/snapshotsdialog.py:116 ../../kde4/app.py:171 -#: ../../kde4/app.py:221 ../../kde4/snapshotsdialog.py:91 -#: ../../gnome/mainwindow.glade:366 ../../gnome/mainwindow.glade:368 -#: ../../gnome/snapshotsdialog.glade:8 -msgid "Snapshots" +#: ../../qt4/app.py:295 +msgid "" +"This folder doesn't exist\n" +"in the current selected snapshot!" +msgstr "" + +#: ../../qt4/app.py:359 +msgid "Add to Include" +msgstr "" + +#: ../../qt4/app.py:360 +msgid "Add to Exclude" +msgstr "" + +#: ../../qt4/app.py:416 +#, python-format +msgid "" +"%(appName)s is not configured. Would you like to restore a previous " +"configuration?" msgstr "" -#: ../../gnome/app.py:348 ../../kde4/app.py:362 +#: ../../qt4/app.py:440 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it and then press OK" msgstr "" +"Tidak dapat menemukan folder snapshot.\n" +"Jika berada pada perangkat USB atau lainnya, silahkan tancapkan dan tekan OK" -#: ../../gnome/app.py:611 ../../kde4/app.py:590 -msgid "Done, no backup needed" +#: ../../qt4/app.py:473 +msgid "" +"If you close this window Back In Time will not be able to shutdown your " +"system when the snapshot has finished.\n" +"Do you really want to close?" msgstr "" +"Jika anda menutup jendela ini Back In Time tidak akan mampu mematikan sistem " +"anda ketika snapshot selesai dibuat.\n" +"Apakah anda yakin ingin menutupnya?" -#: ../../gnome/app.py:619 ../../kde4/app.py:598 +#: ../../qt4/app.py:667 ../../qt4/app.py:703 msgid "Working:" msgstr "Sedang Bekerja:" -#: ../../gnome/app.py:623 ../../kde4/app.py:602 +#: ../../qt4/app.py:695 +msgid "Done, no backup needed" +msgstr "Selesai, backup tidak diperlukan" + +#: ../../qt4/app.py:707 msgid "Error:" +msgstr "Kesalahan:" + +#: ../../qt4/app.py:726 ../../qt4/qt4systrayicon.py:153 +msgid "Sent:" +msgstr "" + +#: ../../qt4/app.py:727 ../../qt4/qt4systrayicon.py:154 +msgid "Speed:" msgstr "" -#: ../../gnome/app.py:636 ../../kde4/app.py:649 +#: ../../qt4/app.py:728 ../../qt4/qt4systrayicon.py:155 +msgid "ETA:" +msgstr "" + +#: ../../qt4/app.py:777 msgid "Global" msgstr "Global" -#: ../../gnome/app.py:637 ../../kde4/app.py:650 +#: ../../qt4/app.py:778 msgid "Root" msgstr "Root" -#: ../../gnome/app.py:638 ../../kde4/app.py:651 +#: ../../qt4/app.py:779 msgid "Home" msgstr "Rumah" -#: ../../gnome/app.py:662 -msgid "Bookmarks" -msgstr "Penanda" - -#: ../../gnome/app.py:675 ../../kde4/app.py:662 +#: ../../qt4/app.py:794 msgid "Backup folders" -msgstr "" +msgstr "Folder Backup" -#: ../../gnome/app.py:701 ../../kde4/app.py:734 -msgid "Today" -msgstr "Hari ini" - -#: ../../gnome/app.py:705 ../../kde4/app.py:738 -msgid "Yesterday" -msgstr "Kemarin" - -#: ../../gnome/app.py:709 ../../kde4/app.py:742 -msgid "This week" -msgstr "Minggu Ini" - -#: ../../gnome/app.py:713 ../../kde4/app.py:746 -msgid "Last week" -msgstr "Minggu kemarin" - -#: ../../gnome/app.py:764 ../../kde4/app.py:398 -msgid "" -"If you close this window Back In Time will not be able to shutdown your " -"system when the snapshot has finished.\n" -"Do you really want to close?" +#: ../../qt4/app.py:849 +msgid "This is NOT a snapshot but a live view of your local files" msgstr "" -#: ../../gnome/app.py:881 ../../gnome/snapshotsdialog.py:238 -msgid "Open" -msgstr "Buka" - -#: ../../gnome/app.py:1056 ../../kde4/app.py:90 ../../kde4/app.py:805 -#: ../../gnome/mainwindow.glade:73 ../../gnome/mainwindow.glade:75 -msgid "Snapshot Name" +#: ../../qt4/app.py:860 ../../qt4/app.py:1476 +#, python-format +msgid "Last check %s" msgstr "" -#: ../../gnome/app.py:1075 +#: ../../qt4/app.py:928 #, python-format msgid "" "Are you sure you want to remove the snapshot:\n" -"%s" -msgstr "" - -#: ../../gnome/app.py:1123 ../../kde4/app.py:1010 -#, python-format -msgid "Snapshot: %s" +"%s" msgstr "" +"Apakah anda yakin untuk menghapus snapsot:\n" +"%s" -#: ../../gnome/app.py:1124 ../../kde4/app.py:1011 +#: ../../qt4/app.py:1004 #, python-format -msgid "View the snapshot made at %s" +msgid "" +"Backup local files before overwriting or\n" +"removing with trailing '%(suffix)s'." msgstr "" -#: ../../gnome/app.py:1126 ../../kde4/app.py:1013 -msgid "View the current disk content" +#: ../../qt4/app.py:1010 +msgid "" +"Are you sure you want to remove all newer files in your original folder?" msgstr "" -#: ../../gnome/logviewdialog.py:106 ../../gnome/settingsdialog.py:414 -#: ../../kde4/logviewdialog.py:83 ../../kde4/settingsdialog.py:590 -msgid "All" +#: ../../qt4/app.py:1014 +msgid "" +"WARNING: deleting files in filesystem root could break your whole system!!!" msgstr "" -#: ../../gnome/logviewdialog.py:107 ../../gnome/settingsdialog.py:412 -#: ../../kde4/logviewdialog.py:84 ../../kde4/settingsdialog.py:588 -msgid "Errors" +#: ../../qt4/app.py:1016 +msgid "Files to be restored:" msgstr "" -#: ../../gnome/logviewdialog.py:112 ../../kde4/logviewdialog.py:89 -msgid "Changes" +#: ../../qt4/app.py:1031 +msgid "Do you really want to restore this files(s):" msgstr "" -#: ../../gnome/logviewdialog.py:115 ../../kde4/logviewdialog.py:92 -msgid "Informations" -msgstr "" +#: ../../qt4/app.py:1226 +#, python-format +msgid "Snapshot: %s" +msgstr "Snapshot: %s" -#: ../../gnome/settingsdialog.py:235 ../../kde4/settingsdialog.py:387 -msgid "Include files and folders" -msgstr "" +#: ../../qt4/app.py:1227 +#, python-format +msgid "View the snapshot made at %s" +msgstr "Lihat snapshot yang dibuat pada %s" -#: ../../gnome/settingsdialog.py:264 -msgid "Exclude patterns, files or folders" -msgstr "" +#: ../../qt4/app.py:1229 +msgid "View the current disk content" +msgstr "Lihat isi disk yang sekarang" -#: ../../gnome/settingsdialog.py:411 ../../kde4/settingsdialog.py:587 -msgid "None" -msgstr "" +#: ../../qt4/app.py:1268 +#, python-format +msgid "Restore '%s'" +msgstr "Memulihkan '%s'" -#: ../../gnome/settingsdialog.py:413 ../../kde4/settingsdialog.py:589 -msgid "Changes & Errors" -msgstr "" +#: ../../qt4/app.py:1269 +#, python-format +msgid "Restore '%s' to ..." +msgstr "Pulihan '%s' ke ..." -#: ../../gnome/settingsdialog.py:458 -msgid "Snapshots folder" +#: ../../qt4/app.py:1270 +#, python-format +msgid "Restore '%s' and delete new files" msgstr "" -#: ../../gnome/settingsdialog.py:466 ../../kde4/settingsdialog.py:1314 -msgid "Are you sure you want to change snapshots folder ?" +#: ../../qt4/app.py:1368 ../../qt4/app.py:1385 +msgid "Authors" msgstr "" -#: ../../gnome/settingsdialog.py:901 ../../kde4/settingsdialog.py:914 -msgid "" -"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " -"*/3 for periodic backups every 3 hours" +#: ../../qt4/app.py:1369 ../../qt4/app.py:1388 +msgid "Translations" msgstr "" -#: ../../gnome/settingsdialog.py:1141 ../../kde4/settingsdialog.py:653 -msgid "New profile" +#: ../../qt4/app.py:1370 ../../qt4/app.py:1391 +msgid "License" msgstr "" -#: ../../gnome/settingsdialog.py:1155 ../../kde4/settingsdialog.py:669 -msgid "Rename profile" +#: ../../qt4/logviewdialog.py:49 +msgid "Last Log View" msgstr "" -#: ../../gnome/settingsdialog.py:1167 ../../kde4/settingsdialog.py:683 -#, python-format -msgid "Are you sure you want to delete the profile \"%s\" ?" +#: ../../qt4/logviewdialog.py:51 +msgid "Snapshot Log View" msgstr "" -#: ../../gnome/settingsdialog.py:1173 ../../kde4/settingsdialog.py:1292 -msgid "Include folder" -msgstr "" +#: ../../qt4/logviewdialog.py:59 ../../qt4/settingsdialog.py:59 +#: ../../qt4/settingsdialog.py:274 ../../qt4/settingsdialog.py:1899 +msgid "Profile:" +msgstr "Profil:" -#: ../../gnome/settingsdialog.py:1193 ../../kde4/settingsdialog.py:1278 -msgid "Include file" +#: ../../qt4/logviewdialog.py:81 +msgid "Filter:" msgstr "" -#: ../../gnome/settingsdialog.py:1235 ../../kde4/settingsdialog.py:1241 -msgid "Exclude pattern" -msgstr "" +#: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 +msgid "All" +msgstr "Semua" -#: ../../gnome/settingsdialog.py:1240 ../../kde4/settingsdialog.py:1251 -msgid "Exclude patterns can't contain ':' char !" -msgstr "" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 +#: ../../qt4/settingsdialog.py:657 +msgid "Errors" +msgstr "Kesalahan" -#: ../../gnome/settingsdialog.py:1246 ../../kde4/settingsdialog.py:1257 -msgid "Exclude file" -msgstr "" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 +msgid "Changes" +msgstr "Perubahan" -#: ../../gnome/settingsdialog.py:1257 ../../kde4/settingsdialog.py:1261 -msgid "Exclude folder" -msgstr "" +#: ../../qt4/logviewdialog.py:92 +msgid "Informations" +msgstr "Informasi" -#: ../../gnome/snapshotsdialog.py:240 -msgid "Jump to" +#: ../../qt4/logviewdialog.py:101 +msgid "[E] Error, [I] Information, [C] Change" msgstr "" -#: ../../gnome/snapshotsdialog.py:248 ../../kde4/snapshotsdialog.py:164 -msgid "Diff" -msgstr "Beda" - -#: ../../gnome/snapshotsdialog.py:277 ../../kde4/snapshotsdialog.py:339 -msgid "You can't compare a snapshot to itself" +#: ../../qt4/logviewdialog.py:104 +msgid "decode paths" msgstr "" -#: ../../gnome/snapshotsdialog.py:284 ../../kde4/snapshotsdialog.py:346 -#, python-format -msgid "Command not found: %s" +#: ../../qt4/messagebox.py:56 +msgid "Error" msgstr "" -#: ../../gnome/snapshotsdialog.py:307 ../../kde4/snapshotsdialog.py:367 -#, python-format -msgid "" -"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" +#: ../../qt4/messagebox.py:62 ../../qt4/messagebox.py:68 +msgid "Question" msgstr "" -#: ../../gnome/snapshotsdialog.py:310 ../../kde4/snapshotsdialog.py:370 -#, python-format -msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +#: ../../qt4/qt4systrayicon.py:69 +msgid "Start BackInTime" msgstr "" -#: ../../gnome/snapshotsdialog.py:312 ../../kde4/snapshotsdialog.py:372 -msgid "WARNING: This can not be revoked!" -msgstr "" +#: ../../qt4/qt4systrayicon.py:124 +msgid "Working..." +msgstr "Sedang Bekerja..." -#: ../../gnome/snapshotsdialog.py:317 ../../kde4/snapshotsdialog.py:377 -#, python-format -msgid "Exclude \"%s\" from future snapshots?" -msgstr "" +#: ../../qt4/qt4tools.py:178 +msgid "Today" +msgstr "Hari ini" -#: ../../kde4/app.py:86 ../../gnome/mainwindow.glade:58 -#: ../../gnome/mainwindow.glade:60 -msgid "Refresh snapshots list" -msgstr "" +#: ../../qt4/qt4tools.py:183 +msgid "Yesterday" +msgstr "Kemarin" -#: ../../kde4/app.py:94 ../../gnome/mainwindow.glade:88 -#: ../../gnome/mainwindow.glade:90 -msgid "Remove Snapshot" -msgstr "" +#: ../../qt4/qt4tools.py:188 +msgid "This week" +msgstr "Minggu Ini" -#: ../../kde4/app.py:98 ../../gnome/mainwindow.glade:105 -msgid "View Snapshot Log" -msgstr "" +#: ../../qt4/qt4tools.py:193 +msgid "Last week" +msgstr "Minggu kemarin" -#: ../../kde4/app.py:102 ../../gnome/mainwindow.glade:121 -msgid "View Last Log" +#: ../../qt4/restoredialog.py:75 +msgid "Show full Log" msgstr "" -#: ../../kde4/app.py:108 ../../kde4/settingsdialog.py:69 -#: ../../gnome/mainwindow.glade:144 ../../gnome/mainwindow.glade:146 -#: ../../gnome/settingsdialog.glade:7 -msgid "Settings" +#: ../../qt4/settingsdialog.py:68 +msgid "Edit" msgstr "" -#: ../../kde4/app.py:124 ../../gnome/mainwindow.glade:169 -msgid "Shutdown system after snapshot has finished." +#: ../../qt4/settingsdialog.py:73 +msgid "Modify for Full System Backup" msgstr "" -#: ../../kde4/app.py:131 ../../gnome/mainwindow.glade:184 -#: ../../gnome/mainwindow.glade:186 -msgid "Exit" +#: ../../qt4/settingsdialog.py:77 ../../qt4/settingsdialog.py:451 +msgid "Add" msgstr "" -#: ../../kde4/app.py:186 ../../gnome/mainwindow.glade:289 -msgid "Up" +#: ../../qt4/settingsdialog.py:81 ../../qt4/settingsdialog.py:408 +#: ../../qt4/settingsdialog.py:467 +msgid "Remove" msgstr "" -#: ../../kde4/app.py:199 ../../gnome/mainwindow.glade:325 -msgid "Show hidden files" +#: ../../qt4/settingsdialog.py:96 +msgid "General" msgstr "" -#: ../../kde4/app.py:244 -msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +#: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 +msgid "Mode:" msgstr "" -#: ../../kde4/app.py:839 +#: ../../qt4/settingsdialog.py:119 #, python-format msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" -msgstr "" - -#: ../../kde4/app.py:1140 ../../kde4/kde4systrayicon.py:117 -msgid "Working..." -msgstr "Sedang Bekerja..." - -#: ../../kde4/logviewdialog.py:55 -msgid "Error Log View" -msgstr "" - -#: ../../kde4/logviewdialog.py:65 ../../kde4/settingsdialog.py:79 -#: ../../kde4/settingsdialog.py:293 ../../gnome/logviewdialog.glade:73 -#: ../../gnome/settingsdialog.glade:72 -msgid "Profile:" -msgstr "" - -#: ../../kde4/logviewdialog.py:77 ../../gnome/logviewdialog.glade:110 -msgid "Filter:" -msgstr "" - -#: ../../kde4/logviewdialog.py:100 ../../gnome/logviewdialog.glade:169 -msgid "[E] Error, [I] Information, [C] Change" -msgstr "" - -#: ../../kde4/logviewdialog.py:103 ../../gnome/logviewdialog.glade:195 -msgid "decode paths" -msgstr "" - -#: ../../kde4/settingsdialog.py:88 -msgid "Edit" -msgstr "" - -#: ../../kde4/settingsdialog.py:106 ../../gnome/settingsdialog.glade:1207 -msgid "General" +"Warning: %(app)s uses EncFS for encryption. A recent security audit " +"revealed several possible attack vectors for this. Please take a look at 'A " +"NOTE ON SECURITY' in 'man backintime'." msgstr "" -#: ../../kde4/settingsdialog.py:114 ../../gnome/settingsdialog.glade:199 -msgid "Mode:" +#: ../../qt4/settingsdialog.py:129 ../../qt4/settingsdialog.py:1568 +msgid "Where to save snapshots" msgstr "" -#: ../../kde4/settingsdialog.py:127 ../../kde4/settingsdialog.py:1311 -msgid "Where to save snapshots" +#: ../../qt4/settingsdialog.py:145 +msgid "Folder" msgstr "" -#: ../../kde4/settingsdialog.py:146 +#: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" -#: ../../kde4/settingsdialog.py:158 ../../kde4/settingsdialog.py:283 -#: ../../gnome/settingsdialog.glade:323 ../../gnome/settingsdialog.glade:583 -#: ../../gnome/settingsdialog.glade:874 +#: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "" -#: ../../kde4/settingsdialog.py:163 ../../gnome/settingsdialog.glade:350 -#: ../../gnome/settingsdialog.glade:610 +#: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "" -#: ../../kde4/settingsdialog.py:168 ../../kde4/settingsdialog.py:288 -#: ../../gnome/settingsdialog.glade:377 ../../gnome/settingsdialog.glade:637 -#: ../../gnome/settingsdialog.glade:902 +#: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "" -#: ../../kde4/settingsdialog.py:173 ../../gnome/settingsdialog.glade:416 +#: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" -#: ../../kde4/settingsdialog.py:178 ../../gnome/settingsdialog.glade:459 +#: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" -#: ../../kde4/settingsdialog.py:184 +#: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "" -#: ../../kde4/settingsdialog.py:228 ../../kde4/settingsdialog.py:237 -#: ../../kde4/settingsdialog.py:243 ../../gnome/settingsdialog.glade:703 -#: ../../gnome/settingsdialog.glade:743 +#: ../../qt4/settingsdialog.py:201 +msgid "Key File" +msgstr "" + +#: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 +#: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "" -#: ../../kde4/settingsdialog.py:249 ../../gnome/settingsdialog.glade:775 +#: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" -#: ../../kde4/settingsdialog.py:252 ../../gnome/settingsdialog.glade:792 +#: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" -#: ../../kde4/settingsdialog.py:264 ../../gnome/settingsdialog.glade:968 +#: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "" -#: ../../kde4/settingsdialog.py:276 ../../gnome/settingsdialog.glade:848 -msgid "Auto Host / User / Profile Id" +#: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 +msgid "Full snapshot path: " msgstr "" -#: ../../kde4/settingsdialog.py:301 +#: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "Penjadwalan" -#: ../../kde4/settingsdialog.py:311 ../../gnome/settingsdialog.glade:1092 +#: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "" -#: ../../kde4/settingsdialog.py:322 ../../gnome/settingsdialog.glade:1079 +#: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "" -#: ../../kde4/settingsdialog.py:333 ../../gnome/settingsdialog.glade:1066 +#: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "" -#: ../../kde4/settingsdialog.py:344 ../../gnome/settingsdialog.glade:1053 +#: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "" -#: ../../kde4/settingsdialog.py:353 ../../gnome/settingsdialog.glade:1014 +#: ../../qt4/settingsdialog.py:339 msgid "" -"Run Back In Time periodically with anacron. This is useful if the computer " -"is not running regular." +"Run Back In Time repeatedly. This is useful if the computer is not running " +"regular." msgstr "" -#: ../../kde4/settingsdialog.py:357 ../../gnome/settingsdialog.glade:1040 -msgid "Frequency in days:" +#: ../../qt4/settingsdialog.py:344 +msgid "Every:" msgstr "" -#: ../../kde4/settingsdialog.py:368 ../../gnome/settingsdialog.glade:1026 +#: ../../qt4/settingsdialog.py:362 msgid "" "Run Back In Time as soon as the drive is connected (only once every X " "days).\n" "You will be prompted for your sudo password." msgstr "" -#: ../../kde4/settingsdialog.py:379 ../../gnome/settingsdialog.glade:1310 +#: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "" -#: ../../kde4/settingsdialog.py:403 ../../kde4/settingsdialog.py:445 -#: ../../gnome/settingsdialog.glade:1411 +#: ../../qt4/settingsdialog.py:381 +msgid "Include files and folders" +msgstr "Termasuk berkas dan folder" + +#: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "" -#: ../../kde4/settingsdialog.py:408 ../../kde4/settingsdialog.py:450 -#: ../../gnome/settingsdialog.glade:1427 +#: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "" -#: ../../kde4/settingsdialog.py:418 ../../gnome/settingsdialog.glade:1474 +#: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "" -#: ../../kde4/settingsdialog.py:421 ../../gnome/settingsdialog.glade:1328 +#: ../../qt4/settingsdialog.py:417 msgid "" "Warning: Wildcards ('foo*', '[fF]oo', 'fo?') will be ignored with " "mode 'SSH encrypted'.\n" "Only separate asterisk are allowed ('foo/*', 'foo/**/bar')" msgstr "" -#: ../../kde4/settingsdialog.py:430 +#: ../../qt4/settingsdialog.py:425 +msgid "Exclude patterns, files or folders" +msgstr "Diluar pola, berkas atau folder" + +#: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "" -#: ../../kde4/settingsdialog.py:460 ../../gnome/settingsdialog.glade:1905 +#: ../../qt4/settingsdialog.py:463 +msgid "Add default" +msgstr "" + +#: ../../qt4/settingsdialog.py:474 +msgid "Exclude files bigger than: " +msgstr "" + +#: ../../qt4/settingsdialog.py:475 +#, python-format +msgid "" +"Exclude files bigger than value in %(prefix)s.\n" +"With 'Full rsync mode' disabled this will only affect new files\n" +"because for rsync this is a transfer option, not an exclude option.\n" +"So big files that has been backed up before will remain in snapshots\n" +"even if they had changed." +msgstr "" + +#: ../../qt4/settingsdialog.py:493 msgid "Auto-remove" msgstr "" -#: ../../kde4/settingsdialog.py:464 ../../gnome/settingsdialog.glade:1608 +#: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "" -#: ../../kde4/settingsdialog.py:478 ../../gnome/settingsdialog.glade:1624 +#: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "" -#: ../../kde4/settingsdialog.py:490 ../../gnome/settingsdialog.glade:1642 +#: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" -#: ../../kde4/settingsdialog.py:514 ../../gnome/settingsdialog.glade:1697 +#: ../../qt4/settingsdialog.py:551 +msgid "Run in background on remote Host." +msgstr "" + +#: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "" -#: ../../kde4/settingsdialog.py:517 ../../kde4/settingsdialog.py:522 -#: ../../gnome/settingsdialog.glade:1705 ../../gnome/settingsdialog.glade:1729 +#: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "" -#: ../../kde4/settingsdialog.py:519 ../../gnome/settingsdialog.glade:1717 +#: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "" -#: ../../kde4/settingsdialog.py:524 ../../gnome/settingsdialog.glade:1743 +#: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "" -#: ../../kde4/settingsdialog.py:527 +#: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "" -#: ../../kde4/settingsdialog.py:529 ../../gnome/settingsdialog.glade:1769 +#: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "" -#: ../../kde4/settingsdialog.py:532 ../../gnome/settingsdialog.glade:1781 +#: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "" -#: ../../kde4/settingsdialog.py:534 ../../gnome/settingsdialog.glade:1795 +#: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "" -#: ../../kde4/settingsdialog.py:537 ../../gnome/settingsdialog.glade:1496 +#: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "" -#: ../../kde4/settingsdialog.py:546 ../../gnome/settingsdialog.glade:2104 +#: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "" -#: ../../kde4/settingsdialog.py:549 ../../gnome/settingsdialog.glade:1920 +#: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "" -#: ../../kde4/settingsdialog.py:552 ../../gnome/settingsdialog.glade:1937 +#: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "" -#: ../../kde4/settingsdialog.py:555 +#: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" msgstr "" -#: ../../kde4/settingsdialog.py:558 ../../gnome/settingsdialog.glade:1955 -msgid "Backup files on restore" +#: ../../qt4/settingsdialog.py:611 +msgid "Run only one snapshot at a time" +msgstr "" + +#: ../../qt4/settingsdialog.py:612 +msgid "" +"Other snapshots will be blocked until the current snapshot is done.\n" +"This is a global option. So it will effect all profiles for this user.\n" +"But you need to activate this for all other users, too." +msgstr "" + +#: ../../qt4/settingsdialog.py:617 +msgid "Backup replaced files on restore" +msgstr "" + +#: ../../qt4/settingsdialog.py:618 +#, python-format +msgid "" +"Newer versions of files will be renamed with trailing '%(suffix)s' before " +"restoring.\n" +"If you don't need them anymore you can remove them with '%(cmd)s'" msgstr "" -#: ../../kde4/settingsdialog.py:561 ../../gnome/settingsdialog.glade:1972 +#: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "" -#: ../../kde4/settingsdialog.py:564 ../../gnome/settingsdialog.glade:1989 +#: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "" -#: ../../kde4/settingsdialog.py:567 ../../gnome/settingsdialog.glade:2006 +#: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "" -#: ../../kde4/settingsdialog.py:568 ../../gnome/settingsdialog.glade:2032 +#: ../../qt4/settingsdialog.py:634 msgid "" -"- snapshots are no read-only\n" -"- destination file-system must support all linux attributes (dates, rights, " +"- snapshots are not read-only\n" +"- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" -#: ../../kde4/settingsdialog.py:575 ../../gnome/settingsdialog.glade:2045 +#: ../../qt4/settingsdialog.py:641 +msgid "Take a new snapshot regardless of there were changes or not." +msgstr "" + +#: ../../qt4/settingsdialog.py:644 msgid "Check for changes (don't take a new snapshot if nothing changed)" msgstr "" -#: ../../kde4/settingsdialog.py:582 +#: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "" -#: ../../kde4/settingsdialog.py:597 ../../gnome/settingsdialog.glade:2366 -msgid "Expert Options" -msgstr "" +#: ../../qt4/settingsdialog.py:656 +msgid "None" +msgstr "Tidak ada" + +#: ../../qt4/settingsdialog.py:658 +msgid "Changes & Errors" +msgstr "Perubahan dan Kesalahan" -#: ../../kde4/settingsdialog.py:600 +#: ../../qt4/settingsdialog.py:674 msgid "Change these options only if you really know what you are doing !" msgstr "" -#: ../../kde4/settingsdialog.py:608 ../../gnome/settingsdialog.glade:2133 -msgid "Run 'nice' as cron job (default: enabled)" +#: ../../qt4/settingsdialog.py:678 +msgid "Run 'nice':" +msgstr "" + +#: ../../qt4/settingsdialog.py:684 ../../qt4/settingsdialog.py:696 +msgid "as cron job" +msgstr "" + +#: ../../qt4/settingsdialog.py:687 ../../qt4/settingsdialog.py:702 +#: ../../qt4/settingsdialog.py:716 +msgid "on remote host" msgstr "" -#: ../../kde4/settingsdialog.py:611 ../../gnome/settingsdialog.glade:2150 -msgid "Run 'ionice' as cron job (default: enabled)" +#: ../../qt4/settingsdialog.py:690 +msgid "Run 'ionice':" msgstr "" -#: ../../kde4/settingsdialog.py:614 ../../gnome/settingsdialog.glade:2167 -msgid "Run 'ionice' when taking a manual snapshot (default: disabled)" +#: ../../qt4/settingsdialog.py:699 +msgid "when taking a manual snapshot" msgstr "" -#: ../../kde4/settingsdialog.py:617 ../../gnome/settingsdialog.glade:2184 -msgid "Run 'nice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:706 +msgid "Run 'rsync' with 'nocache':" msgstr "" -#: ../../kde4/settingsdialog.py:620 ../../gnome/settingsdialog.glade:2201 -msgid "Run 'ionice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:712 +msgid "on local machine" msgstr "" -#: ../../kde4/settingsdialog.py:626 ../../gnome/settingsdialog.glade:2224 +#: ../../qt4/settingsdialog.py:719 +msgid "Redirect stdout to /dev/null in cronjobs." +msgstr "" + +#: ../../qt4/settingsdialog.py:725 +msgid "Redirect stderr to /dev/null in cronjobs." +msgstr "" + +#: ../../qt4/settingsdialog.py:734 msgid "Limit rsync bandwidth usage: " msgstr "" -#: ../../kde4/settingsdialog.py:629 ../../gnome/settingsdialog.glade:2259 +#: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" -#: ../../kde4/settingsdialog.py:634 ../../gnome/settingsdialog.glade:2280 +#: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "" -#: ../../kde4/settingsdialog.py:637 ../../gnome/settingsdialog.glade:2297 +#: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "" -#: ../../kde4/settingsdialog.py:640 ../../gnome/settingsdialog.glade:2314 +#: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute links)" msgstr "" -#: ../../kde4/settingsdialog.py:643 ../../gnome/settingsdialog.glade:2331 -msgid "Copy links (dereference symbolic links)" +#: ../../qt4/settingsdialog.py:834 +msgid "Paste additional options to rsync" msgstr "" -#: ../../kde4/snapshotsdialog.py:46 ../../kde4/snapshotsdialog.py:173 -#: ../../gnome/snapshotsdialog.glade:385 -msgid "Diff Options" +#: ../../qt4/settingsdialog.py:837 +msgid "" +"Options must be quoted e.g. --exclude-from=\"/path/to/my exclude file\"." msgstr "" -#: ../../kde4/snapshotsdialog.py:56 ../../gnome/snapshotsdialog.glade:314 -msgid "Command:" +#: ../../qt4/settingsdialog.py:847 +msgid "Add prefix to SSH commands" msgstr "" -#: ../../kde4/snapshotsdialog.py:60 ../../gnome/snapshotsdialog.glade:322 -msgid "Parameters:" +#: ../../qt4/settingsdialog.py:850 +#, python-format +msgid "" +"Prefix to run before every command on remote host.\n" +"Variables need to be escaped with \\$FOO.\n" +"This doesn't touch rsync. So to add a prefix\n" +"for rsync use \"%(cb_rsync_options)s\" with\n" +"%(rsync_options_value)s\n" +"\n" +"%(default)s: %(def_value)s" msgstr "" -#: ../../kde4/snapshotsdialog.py:64 ../../gnome/snapshotsdialog.glade:334 -msgid "Use %1 and %2 for path parameters" +#: ../../qt4/settingsdialog.py:858 ../../qt4/settingsdialog.py:1691 +msgid "default" msgstr "" -#: ../../kde4/snapshotsdialog.py:123 ../../gnome/snapshotsdialog.glade:184 -#: ../../gnome/snapshotsdialog.glade:186 -msgid "Delete" +#: ../../qt4/settingsdialog.py:875 +msgid "Restore Config" msgstr "" -#: ../../kde4/snapshotsdialog.py:128 ../../gnome/snapshotsdialog.glade:199 -#: ../../gnome/snapshotsdialog.glade:201 -msgid "Select All" +#: ../../qt4/settingsdialog.py:891 +msgid "" +"Full system backup can only create a snapshot to be restored to the same " +"physical disk(s) with the same disk partitioning as from the source; " +"restoring to new physical disks or the same disks with different " +"partitioning will yield a potentially broken and unusable system.\n" +"\n" +"Full system backup will override some settings that may have been " +"customized. Continue?" msgstr "" -#: ../../kde4/snapshotsdialog.py:132 ../../gnome/snapshotsdialog.glade:88 -msgid "List only different snapshots" +#: ../../qt4/settingsdialog.py:922 +msgid "New profile" +msgstr "Profil baru" + +#: ../../qt4/settingsdialog.py:938 +msgid "Rename profile" +msgstr "Ubah nama profil" + +#: ../../qt4/settingsdialog.py:952 +#, python-format +msgid "Are you sure you want to delete the profile \"%s\" ?" +msgstr "Apakah anda yakin untuk menghapus profile \"%s\" ?" + +#: ../../qt4/settingsdialog.py:1191 +msgid "" +"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " +"*/3 for periodic backups every 3 hours" msgstr "" +"Custom hour hanya dapat menjadi koma pemisah dalam daftar jam (misal " +"8,12,18,23) atau */3 untuk backup periodik setiap 3 jam" -#: ../../kde4/snapshotsdialog.py:139 ../../gnome/snapshotsdialog.glade:110 -msgid "List only equal snapshots to: " +#: ../../qt4/settingsdialog.py:1489 +msgid "Exclude pattern" msgstr "" -#: ../../kde4/snapshotsdialog.py:149 ../../gnome/snapshotsdialog.glade:146 -msgid "Deep check (more accurate, but slow)" +#: ../../qt4/settingsdialog.py:1502 +msgid "Exclude file" msgstr "" -#: ../../kde4/snapshotsdialog.py:174 -msgid "Go To" +#: ../../qt4/settingsdialog.py:1506 +msgid "Exclude folder" msgstr "" -#: ../../gnome/logviewdialog.glade:9 -msgid "Log View" +#: ../../qt4/settingsdialog.py:1525 +msgid "Include file" msgstr "" -#: ../../gnome/logviewdialog.glade:179 -msgid "scroll down automatic" +#: ../../qt4/settingsdialog.py:1533 ../../qt4/settingsdialog.py:1553 +#, python-format +msgid "" +"\"%s\" is a symlink. The linked target will not be backed up until you " +"include it, too.\n" +"Would you like to include the symlinks target instead?" msgstr "" -#: ../../gnome/mainwindow.glade:7 -msgid "Back In Time" +#: ../../qt4/settingsdialog.py:1545 +msgid "Include folder" msgstr "" -#: ../../gnome/mainwindow.glade:45 -msgid "Backup Now" +#: ../../qt4/settingsdialog.py:1572 +msgid "Are you sure you want to change snapshots folder ?" +msgstr "Apakah anda yakin ingin mengubah folder snapshot?" + +#: ../../qt4/settingsdialog.py:1688 +msgid "enabled" msgstr "" -#: ../../gnome/mainwindow.glade:171 -msgid "Shutdown" +#: ../../qt4/settingsdialog.py:1690 +msgid "disabled" msgstr "" -#: ../../gnome/mainwindow.glade:287 -msgid "Parent folder" +#: ../../qt4/settingsdialog.py:1715 +msgid "Restore Settings" msgstr "" -#: ../../gnome/mainwindow.glade:327 -msgid "Hidden files" +#: ../../qt4/settingsdialog.py:1732 +msgid " and add your user to group 'fuse'" msgstr "" -#: ../../gnome/mainwindow.glade:451 +#: ../../qt4/settingsdialog.py:1736 +#, python-format msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +"Please navigate to the snapshot from which you want to restore %(appName)s's " +"configuration. The path may look like: \n" +"%(samplePath)s\n" +"\n" +"If your snapshots are on a remote drive or if they are encrypted you need to " +"manually mount them first. If you use Mode SSH you also may need to set up " +"public key login to the remote host%(addFuse)s.\n" +"Take a look at 'man backintime'." msgstr "" -#: ../../gnome/settingsdialog.glade:287 -msgid "Where to save snapshots" +#: ../../qt4/settingsdialog.py:1794 ../../qt4/settingsdialog.py:1854 +msgid "No config found" msgstr "" -#: ../../gnome/settingsdialog.glade:483 -msgid "Private key:" +#: ../../qt4/snapshotsdialog.py:49 ../../qt4/snapshotsdialog.py:173 +msgid "Diff Options" msgstr "" -#: ../../gnome/settingsdialog.glade:534 -msgid "Advanced SSH Settings" +#: ../../qt4/snapshotsdialog.py:56 +msgid "Command:" msgstr "" -#: ../../gnome/settingsdialog.glade:552 -msgid "SSH Settings" +#: ../../qt4/snapshotsdialog.py:60 +msgid "Parameters:" msgstr "" -#: ../../gnome/settingsdialog.glade:815 -msgid "Password" +#: ../../qt4/snapshotsdialog.py:64 +msgid "Use %1 and %2 for path parameters" msgstr "" -#: ../../gnome/settingsdialog.glade:930 -msgid "Profile Id:" +#: ../../qt4/snapshotsdialog.py:106 +msgid "List only different snapshots" msgstr "" -#: ../../gnome/settingsdialog.glade:1115 -msgid "" -"hours seperate by comma ( e.g. 8,12,18,23) or */3 for periodic backups every " -"3 hours (cron style)" +#: ../../qt4/snapshotsdialog.py:113 +msgid "List only equal snapshots to: " msgstr "" -#: ../../gnome/settingsdialog.glade:1163 -msgid "Schedule" +#: ../../qt4/snapshotsdialog.py:123 +msgid "Deep check (more accurate, but slow)" msgstr "" -#: ../../gnome/settingsdialog.glade:1363 -msgid "Highly recommended:" +#: ../../qt4/snapshotsdialog.py:144 +msgid "Delete" msgstr "" -#: ../../gnome/settingsdialog.glade:1377 -msgid "label" +#: ../../qt4/snapshotsdialog.py:148 +msgid "Select All" msgstr "" -#: ../../gnome/settingsdialog.glade:1755 -msgid "week(s)" +#: ../../qt4/snapshotsdialog.py:161 +msgid "Diff" +msgstr "Beda" + +#: ../../qt4/snapshotsdialog.py:172 +msgid "Go To" msgstr "" -#: ../../gnome/settingsdialog.glade:2069 -msgid "Log level:" +#: ../../qt4/snapshotsdialog.py:326 +msgid "You can't compare a snapshot to itself" msgstr "" +"Anda tidak dapat membandingkan sebuah snapshot dengan dirinya sendiri" -#: ../../gnome/settingsdialog.glade:2121 +#: ../../qt4/snapshotsdialog.py:333 +#, python-format +msgid "Command not found: %s" +msgstr "Perintah tidak ditemukan: %s" + +#: ../../qt4/snapshotsdialog.py:354 +#, python-format msgid "" -"Change these options only if you really know what you are doing !" +"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" msgstr "" +"Apakah anda yakin ingin menghapus \"%(file)s\" dalam snapshot " +"\"%(snapshot_id)s?\n" -#: ../../gnome/snapshotsdialog.glade:263 -msgid "Diff with" +#: ../../qt4/snapshotsdialog.py:357 +#, python-format +msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" msgstr "" +"Apakah anda yakin ingin menghapus \"%(file)s\" dalam %(count)d snapshot?\n" -#: ../../gnome/textinputdialog.glade:7 -msgid "Pattern" -msgstr "" +#: ../../qt4/snapshotsdialog.py:359 +msgid "WARNING: This can not be revoked!" +msgstr "PERINGATAN: Ini tidak bisa dibatalkan!" -#: ../../gnome/textinputdialog.glade:70 -msgid "Text" +#: ../../qt4/snapshotsdialog.py:374 +#, python-format +msgid "Exclude \"%s\" from future snapshots?" msgstr "" diff -Nru backintime-1.0.36/common/po/is.po backintime-1.1.12/common/po/is.po --- backintime-1.0.36/common/po/is.po 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/po/is.po 2016-01-11 18:07:58.000000000 +0000 @@ -4,213 +4,246 @@ # This file is distributed under the same license as the backintime package. # # FIRST AUTHOR , 2011. -# Sveinn í Felli , 2011. +# Sveinn í Felli , 2011, 2015. msgid "" msgstr "" "Project-Id-Version: 20110902-common_po_common-is\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2013-11-09 22:34+0100\n" -"PO-Revision-Date: 2011-09-08 07:52+0000\n" +"POT-Creation-Date: 2015-12-19 00:47+0100\n" +"PO-Revision-Date: 2015-09-09 21:49+0000\n" "Last-Translator: Sveinn í Felli \n" "Language-Team: Icelandic \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2014-08-06 10:20+0000\n" -"X-Generator: Launchpad (build 17147)\n" +"X-Launchpad-Export-Date: 2016-01-11 17:52+0000\n" +"X-Generator: Launchpad (build 17881)\n" +"Language: is\n" -#: ../../common/config.py:72 +#: ../../common/configfile.py:60 +#, python-format +msgid "Failed to save config: %s" +msgstr "" + +#: ../../common/configfile.py:78 +#, python-format +msgid "Failed to load config: %s" +msgstr "" + +#: ../../common/configfile.py:352 ../../common/configfile.py:414 +#, python-format +msgid "Profile \"%s\" already exists !" +msgstr "Sniðið \"%s\" er þegar til staðar !" + +#: ../../common/configfile.py:383 +msgid "You can't remove the last profile !" +msgstr "Þú getur ekki fjarlægt síðasta snið !" + +#: ../../common/config.py:76 msgid "Disabled" msgstr "Óvirkt" -#: ../../common/config.py:73 +#: ../../common/config.py:77 msgid "At every boot/reboot" msgstr "Við hverja ræsingu/endurræsingu" -#: ../../common/config.py:74 +#: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Á 5 mínútna fresti" -#: ../../common/config.py:75 +#: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Á 10 mínútna fresti" -#: ../../common/config.py:76 +#: ../../common/config.py:80 msgid "Every 30 minutes" -msgstr "" +msgstr "Á 30 mínútna fresti" -#: ../../common/config.py:77 +#: ../../common/config.py:81 msgid "Every hour" -msgstr "" +msgstr "Á klukkustundar fresti" -#: ../../common/config.py:78 +#: ../../common/config.py:82 msgid "Every 2 hours" -msgstr "" +msgstr "Á 2 klukkustunda fresti" -#: ../../common/config.py:79 +#: ../../common/config.py:83 msgid "Every 4 hours" -msgstr "" +msgstr "Á 4 klukkustunda fresti" -#: ../../common/config.py:80 +#: ../../common/config.py:84 msgid "Every 6 hours" -msgstr "" +msgstr "Á 6 klukkustunda fresti" -#: ../../common/config.py:81 +#: ../../common/config.py:85 msgid "Every 12 hours" -msgstr "" +msgstr "Á 12 klukkustunda fresti" -#: ../../common/config.py:82 +#: ../../common/config.py:86 msgid "Custom Hours" -msgstr "" +msgstr "Sérsniðnar klukkustundir" -#: ../../common/config.py:83 +#: ../../common/config.py:87 msgid "Every Day" msgstr "Daglega" -#: ../../common/config.py:84 -msgid "Daily (anacron)" -msgstr "" +#: ../../common/config.py:88 +msgid "Repeatedly (anacron)" +msgstr "Endurtekið (anacron)" -#: ../../common/config.py:85 +#: ../../common/config.py:89 msgid "When drive get connected (udev)" -msgstr "" +msgstr "Þegar drif er tengt (udev)" -#: ../../common/config.py:86 +#: ../../common/config.py:90 msgid "Every Week" msgstr "Vikulega" -#: ../../common/config.py:87 +#: ../../common/config.py:91 msgid "Every Month" msgstr "Mánaðarlega" -#: ../../common/config.py:91 +#: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "dag(a)" -#: ../../common/config.py:92 +#: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "viku(r)" -#: ../../common/config.py:93 +#: ../../common/config.py:97 msgid "Year(s)" msgstr "ár" -#: ../../common/config.py:100 +#: ../../common/config.py:101 +msgid "Hour(s)" +msgstr "klukkustund(ir)" + +#: ../../common/config.py:104 +msgid "Month(s)" +msgstr "mánuð(ir)" + +#: ../../common/config.py:126 ../../qt4/settingsdialog.py:551 msgid " EXPERIMENTAL!" -msgstr "" +msgstr " Á tilraunastigi!" -#: ../../common/config.py:103 +#: ../../common/config.py:129 msgid "Local" -msgstr "" +msgstr "Staðvært" -#: ../../common/config.py:104 +#: ../../common/config.py:130 msgid "SSH" -msgstr "" +msgstr "SSH" -#: ../../common/config.py:104 ../../common/config.py:106 -#: ../../gnome/settingsdialog.py:475 ../../kde4/settingsdialog.py:1325 +#: ../../common/config.py:130 ../../common/config.py:132 +#: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" -msgstr "" +msgstr "SSH einkalykill" -#: ../../common/config.py:105 +#: ../../common/config.py:131 msgid "Local encrypted" -msgstr "" +msgstr "Staðvært dulritað" -#: ../../common/config.py:105 ../../common/config.py:106 +#: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" -msgstr "" +msgstr "Dulritun" -#: ../../common/config.py:106 +#: ../../common/config.py:132 msgid "SSH encrypted" -msgstr "" +msgstr "SSH dulritað" -#: ../../common/config.py:112 +#: ../../common/config.py:135 msgid "Default" -msgstr "" +msgstr "Sjálfgefið" -#: ../../common/config.py:113 +#: ../../common/config.py:136 msgid "AES128-CTR" -msgstr "" +msgstr "AES128-CTR" -#: ../../common/config.py:114 +#: ../../common/config.py:137 msgid "AES192-CTR" -msgstr "" +msgstr "AES192-CTR" -#: ../../common/config.py:115 +#: ../../common/config.py:138 msgid "AES256-CTR" -msgstr "" +msgstr "AES256-CTR" -#: ../../common/config.py:116 +#: ../../common/config.py:139 msgid "ARCFOUR256" -msgstr "" +msgstr "ARCFOUR256" -#: ../../common/config.py:117 +#: ../../common/config.py:140 msgid "ARCFOUR128" -msgstr "" +msgstr "ARCFOUR128" -#: ../../common/config.py:118 +#: ../../common/config.py:141 msgid "AES128-CBC" -msgstr "" +msgstr "AES128-CBC" -#: ../../common/config.py:119 +#: ../../common/config.py:142 msgid "3DES-CBC" -msgstr "" +msgstr "3DES-CBC" -#: ../../common/config.py:120 +#: ../../common/config.py:143 msgid "Blowfish-CBC" -msgstr "" +msgstr "Blowfish-CBC" -#: ../../common/config.py:121 +#: ../../common/config.py:144 msgid "Cast128-CBC" -msgstr "" +msgstr "Cast128-CBC" -#: ../../common/config.py:122 +#: ../../common/config.py:145 msgid "AES192-CBC" -msgstr "" +msgstr "AES192-CBC" -#: ../../common/config.py:123 +#: ../../common/config.py:146 msgid "AES256-CBC" -msgstr "" +msgstr "AES256-CBC" -#: ../../common/config.py:124 +#: ../../common/config.py:147 msgid "ARCFOUR" -msgstr "" +msgstr "ARCFOUR" -#: ../../common/config.py:129 +#: ../../common/config.py:153 msgid "Main profile" msgstr "Aðalsnið" -#: ../../common/config.py:256 ../../common/config.py:275 -#: ../../common/config.py:286 ../../common/config.py:291 +#: ../../common/config.py:289 ../../common/config.py:296 +#: ../../common/config.py:307 ../../common/config.py:312 +#: ../../qt4/qt4systrayicon.py:61 #, python-format msgid "Profile: \"%s\"" msgstr "Snið: \"%s\"" -#: ../../common/config.py:256 +#: ../../common/config.py:289 msgid "Snapshots folder is not valid !" msgstr "Mappa fyrir skyndiafrit er ekki gild !" -#: ../../common/config.py:275 +#: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "Þú verður að velja a.m.k. eina möppu til að öryggisafrita !" -#: ../../common/config.py:286 +#: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "Þú mátt ekki hafa með möppuna sem öryggisafritin eiga að fara í !" -#: ../../common/config.py:291 +#: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "" "Þú mátt ekki hafa með undirmöppu möppunnar sem öryggisafritin eiga að fara í " "!" -#: ../../common/config.py:361 +#: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s er ekki mappa !" -#: ../../common/config.py:376 ../../common/config.py:389 +#: ../../common/config.py:380 +msgid "Host/User/Profile-ID must not be empty!" +msgstr "" + +#: ../../common/config.py:388 ../../common/config.py:420 #, python-format msgid "" "Can't write to: %s\n" @@ -219,98 +252,112 @@ "Get ekki skrifað í: %s\n" "Ertu viss um að þú hafir skrifaðgang þarna ?" -#: ../../common/config.py:1286 +#: ../../common/config.py:400 +#, python-format msgid "" -"Can't find crontab.\n" -"Are you sure cron is installed ?\n" -"If not you should disable all automatic backups." +"Destination filesystem for '%(path)s' is formatted with FAT which doesn't " +"support hard-links. Please use a native Linux filesystem." msgstr "" -"Finn ekki crontab.\n" -"Ertu viss um að cron sé uppsett ?\n" -"Ef ekki, ættirðu að gera alla sjálfvirka öryggisafritun óvirka." -#: ../../common/config.py:1338 +#: ../../common/config.py:405 #, python-format -msgid "Schedule udev doesn't work with mode %s" +msgid "" +"Destination filsystem for '%(path)s' is a SMB mounted share. Please make " +"sure the remote SMB server supports symlinks or activate '%(copyLinks)s' in " +"'%(expertOptions)s'." msgstr "" -#: ../../common/config.py:1342 -#, python-format -msgid "Couldn't find UUID for \"%s\"" +#: ../../common/config.py:408 ../../qt4/settingsdialog.py:815 +msgid "Copy links (dereference symbolic links)" msgstr "" -#: ../../common/config.py:1379 -msgid "Failed to remove udev rules" -msgstr "" +#: ../../common/config.py:409 ../../qt4/settingsdialog.py:669 +msgid "Expert Options" +msgstr "Ítarlegri valkostir" -#: ../../common/config.py:1385 -msgid "Failed to create udev rules" +#: ../../common/config.py:411 +#, python-format +msgid "" +"Destination filesystem for '%(path)s is a sshfs mounted share. sshfs doesn't " +"support hard-links. Please use mode 'SSH' instead." msgstr "" -#: ../../common/config.py:1420 +#: ../../common/config.py:1407 msgid "" -"Can't find anacron.\n" -"Are you sure anacron is installed ?\n" -"If not you should disable daily anacron backups." +"Can't find crontab.\n" +"Are you sure cron is installed ?\n" +"If not you should disable all automatic backups." msgstr "" +"Finn ekki crontab.\n" +"Ertu viss um að cron sé uppsett ?\n" +"Ef ekki, ættirðu að gera alla sjálfvirka öryggisafritun óvirka." -#: ../../common/config.py:1439 -msgid "Please provide your sudo password to install the udev rule." +#: ../../common/config.py:1411 +msgid "Failed to write new crontab." msgstr "" -#: ../../common/config.py:1445 -msgid "Please provide your sudo password to remove unused udev rules." +#: ../../common/config.py:1505 +#, python-format +msgid "" +"Could not install Udev rule for profile %(profile_id)s. DBus Service " +"'%(dbus_interface)s' wasn't available" msgstr "" -#: ../../common/configfile.py:253 ../../common/configfile.py:315 +#: ../../common/config.py:1517 #, python-format -msgid "Profile \"%s\" already exists !" -msgstr "Sniðið \"%s\" er þegar til staðar !" +msgid "Schedule udev doesn't work with mode %s" +msgstr "" -#: ../../common/configfile.py:284 -msgid "You can't remove the last profile !" -msgstr "Þú getur ekki fjarlægt síðasta snið !" +#: ../../common/config.py:1526 +#, python-format +msgid "Couldn't find UUID for \"%s\"" +msgstr "Gat ekki fundið UUID fyrir \"%s\"" -#: ../../common/encfstools.py:95 +#: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" "\n" "%(error)s" msgstr "" +"Get ekki tengt '%(command)s':\n" +"\n" +"%(error)s" -#: ../../common/encfstools.py:105 +#: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" -msgstr "" +msgstr "Get ekki aftengt encfs %s" -#: ../../common/encfstools.py:149 +#: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "" -#: ../../common/encfstools.py:153 +#: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" +"\n" +"Búa til nýja dulkóðaða möppu?" -#: ../../common/encfstools.py:154 +#: ../../common/encfstools.py:171 msgid "Cancel" -msgstr "" +msgstr "Hætta við" -#: ../../common/encfstools.py:157 +#: ../../common/encfstools.py:174 msgid "Please confirm password" -msgstr "" +msgstr "Staðfestu aðgangsorð" -#: ../../common/encfstools.py:161 +#: ../../common/encfstools.py:178 msgid "Password doesn't match" -msgstr "" +msgstr "Lykilorðin stemma ekki" -#: ../../common/encfstools.py:166 +#: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" -#: ../../common/encfstools.py:174 ../../common/sshtools.py:207 +#: ../../common/encfstools.py:196 ../../common/sshtools.py:262 #, python-format msgid "" "%(user)s is not member of group 'fuse'.\n" @@ -318,70 +365,73 @@ "Look at 'man backintime' for further instructions." msgstr "" -#: ../../common/encfstools.py:189 +#: ../../common/encfstools.py:211 msgid "" "encfs version 1.7.2 and before has a bug with option --reverse. Please " "update encfs" msgstr "" -#: ../../common/encfstools.py:453 ../../common/encfstools.py:480 -#: ../../common/snapshots.py:982 ../../common/snapshots.py:1288 -#: ../../kde4/app.py:82 ../../gnome/mainwindow.glade:43 +#: ../../common/encfstools.py:512 ../../common/snapshots.py:1131 +#: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "Taka skyndiafrit" -#: ../../common/mount.py:195 +#: ../../common/mount.py:204 #, python-format msgid "" "Hash collision occurred in hash_id %s. Incrementing global value " "hash_collision and try again." msgstr "" -#: ../../common/mount.py:246 +#: ../../common/mount.py:259 #, python-format msgid "mountpoint %s not empty." -msgstr "" +msgstr "tengipunkturinn %s ekki laus." -#: ../../common/mount.py:286 +#: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" -#: ../../common/password.py:425 +#: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" -#: ../../common/snapshots.py:171 ../../gnome/app.py:1127 -#: ../../kde4/app.py:1014 +#: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Núna" -#: ../../common/snapshots.py:182 ../../gnome/gnometools.py:37 +#: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "MEÐ VILLUM !" -#: ../../common/snapshots.py:282 +#: ../../common/snapshots.py:344 msgid "" "### This log has been decoded with automatic search pattern\n" "### If some paths are not decoded you can manually decode them with:\n" msgstr "" -#: ../../common/snapshots.py:465 +#: ../../common/snapshots.py:562 ../../common/snapshots.py:750 msgid "FAILED" -msgstr "" +msgstr "MISTÓKST" -#: ../../common/snapshots.py:564 +#: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" -msgstr "" +msgstr "Endurheimta heimildir:" + +#: ../../common/snapshots.py:752 ../../qt4/app.py:377 ../../qt4/app.py:675 +#: ../../qt4/app.py:692 ../../qt4/qt4systrayicon.py:65 +msgid "Done" +msgstr "Búið" -#: ../../common/snapshots.py:739 +#: ../../common/snapshots.py:860 msgid "" "Back In Time changed its backup format.\n" "\n" "Your old snapshots can be moved according to this new format. OK?" msgstr "" -#: ../../common/snapshots.py:749 +#: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" @@ -392,13 +442,13 @@ "(The program will still be able to discriminate between them)" msgstr "" -#: ../../common/snapshots.py:752 +#: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" msgstr "" -#: ../../common/snapshots.py:803 +#: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" @@ -411,7 +461,7 @@ "cannot continue taking snapshots" msgstr "" -#: ../../common/snapshots.py:812 +#: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" @@ -421,14 +471,14 @@ "if you are done restart Back In Time to proceed" msgstr "" -#: ../../common/snapshots.py:825 +#: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" msgstr "" -#: ../../common/snapshots.py:830 +#: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" @@ -440,172 +490,183 @@ "If you do not, you will be asked again next time you start Back In Time." msgstr "" -#: ../../common/snapshots.py:839 +#: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "" -#: ../../common/snapshots.py:841 +#: ../../common/snapshots.py:953 msgid "" "Back In Time still cannot continue taking new snapshots.\n" "Restart Back In Time to see the questions again" msgstr "" -#: ../../common/snapshots.py:913 +#: ../../common/snapshots.py:972 +msgid "Deferring backup while on battery" +msgstr "Fresta afritun þegar rafhlöður eru í notkun" + +#: ../../common/snapshots.py:1035 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it." msgstr "" -#: ../../common/snapshots.py:915 +#: ../../common/snapshots.py:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "Bið %s sekúndu." msgstr[1] "Bið %s sekúndur." -#: ../../common/snapshots.py:941 +#: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "Mistókst að taka skyndiafritið %s !!!" -#: ../../common/snapshots.py:950 +#: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "Geng frá" -#: ../../common/snapshots.py:1088 +#: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "Get ekki búið til möppu: %s" -#: ../../common/snapshots.py:1107 +#: ../../common/snapshots.py:1217 msgid "..." msgstr "..." -#: ../../common/snapshots.py:1134 +#: ../../common/snapshots.py:1238 +#, python-format +msgid "Found leftover '%s' which can be continued." +msgstr "" + +#: ../../common/snapshots.py:1250 +#, python-format +msgid "Remove leftover '%s' folder from last run" +msgstr "" + +#: ../../common/snapshots.py:1263 #, python-format msgid "Can't remove folder: %s" msgstr "Get ekki fjarlægt möppu: %s" -#: ../../common/snapshots.py:1219 +#: ../../common/snapshots.py:1340 #, python-format msgid "Compare with snapshot %s" msgstr "Bera saman við skyndiafritið %s" -#: ../../common/snapshots.py:1248 +#: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "" -#: ../../common/snapshots.py:1335 +#: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "Vista stillingaskrá ..." -#: ../../common/snapshots.py:1341 +#: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "Vista aðgangsheimildir ..." -#: ../../common/snapshots.py:1442 +#: ../../common/snapshots.py:1470 +msgid "Save permission over ssh failed. Retry normal method" +msgstr "" + +#: ../../common/snapshots.py:1521 #, python-format msgid "Can't rename %(new_path)s to %(path)s" msgstr "" -#: ../../common/snapshots.py:1562 -msgid "Remove old snapshots" -msgstr "Fjarlægja gömul skyndiafrit" - -#: ../../common/snapshots.py:1586 ../../kde4/settingsdialog.py:501 -#: ../../gnome/settingsdialog.glade:1660 +#: ../../common/snapshots.py:1695 ../../common/snapshots.py:1728 +#: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "Snjöll fjarlæging" -#: ../../common/snapshots.py:1591 +#: ../../common/snapshots.py:1704 +msgid "Remove old snapshots" +msgstr "Fjarlægja gömul skyndiafrit" + +#: ../../common/snapshots.py:1733 msgid "Try to keep min free space" msgstr "Reyna að halda í lágmarksmagn af lausu plássi" -#: ../../common/snapshots.py:1621 +#: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" -msgstr "" +msgstr "Reyna að halda a.m.k. %d%% af lausum ihnútum (inodes)" -#: ../../common/sshtools.py:106 +#: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" -msgstr "" +msgstr "Get ekki tengt %s" -#: ../../common/sshtools.py:113 +#: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" -msgstr "" +msgstr "Get ekki aftengt sshfs %s" -#: ../../common/sshtools.py:187 -#, python-format -msgid "" -"Failed to unlock SSH private key:\n" -"Error: %s" -msgstr "" - -#: ../../common/sshtools.py:194 +#: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" -#: ../../common/sshtools.py:199 +#: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" -#: ../../common/sshtools.py:217 +#: ../../common/sshtools.py:278 #, python-format msgid "" "Password-less authentication for %(user)s@%(host)s failed. Look at 'man " "backintime' for further instructions." msgstr "" -#: ../../common/sshtools.py:229 +#: ../../common/sshtools.py:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" -#: ../../common/sshtools.py:254 +#: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" -#: ../../common/sshtools.py:274 +#: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" -#: ../../common/sshtools.py:276 +#: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:278 +#: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:280 +#: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" -#: ../../common/sshtools.py:302 +#: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" -#: ../../common/sshtools.py:325 ../../common/sshtools.py:383 +#: ../../common/sshtools.py:423 ../../common/sshtools.py:553 #, python-format msgid "" "Remote host %(host)s doesn't support '%(command)s':\n" @@ -613,7 +674,7 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:387 +#: ../../common/sshtools.py:556 #, python-format msgid "" "Check commands on host %(host)s returned unknown error:\n" @@ -621,820 +682,942 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:400 +#: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "" -#: ../../gnome/app.py:185 ../../gnome/app.py:594 ../../gnome/app.py:608 -#: ../../kde4/app.py:299 ../../kde4/app.py:570 ../../kde4/app.py:587 -msgid "Done" -msgstr "Búið" +#: ../../qt4/app.py:81 +msgid "Refresh snapshots list" +msgstr "Endurnýja lista yfir skyndiafrit" + +#: ../../qt4/app.py:85 ../../qt4/app.py:890 +msgid "Snapshot Name" +msgstr "Heiti skyndiafrits" + +#: ../../qt4/app.py:88 +msgid "Remove Snapshot" +msgstr "Fjarlægja skyndiafrit" -#: ../../gnome/app.py:189 ../../kde4/app.py:143 ../../kde4/app.py:159 -#: ../../gnome/mainwindow.glade:225 +#: ../../qt4/app.py:91 +msgid "View Snapshot Log" +msgstr "Skoða skyndiafritaannál" + +#: ../../qt4/app.py:94 +msgid "View Last Log" +msgstr "Skoða síðasta annál" + +#: ../../qt4/app.py:99 ../../qt4/settingsdialog.py:51 +msgid "Settings" +msgstr "Stillingar" + +#: ../../qt4/app.py:104 +msgid "Shutdown" +msgstr "Slökkva" + +#: ../../qt4/app.py:105 +msgid "Shutdown system after snapshot has finished." +msgstr "Slökkva á kerfi þegar skyndiafritun lýkur." + +#: ../../qt4/app.py:111 +msgid "Exit" +msgstr "Hætta" + +#: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 msgid "Help" msgstr "Hjálp" -#: ../../gnome/app.py:191 ../../kde4/app.py:146 -#: ../../gnome/mainwindow.glade:223 +#: ../../qt4/app.py:122 +msgid "Config File Help" +msgstr "" + +#: ../../qt4/app.py:125 msgid "Website" msgstr "Vefsvæði" -#: ../../gnome/app.py:192 ../../kde4/app.py:148 +#: ../../qt4/app.py:127 ../../qt4/app.py:982 +msgid "Changelog" +msgstr "Breytingasaga" + +#: ../../qt4/app.py:129 msgid "FAQ" -msgstr "" +msgstr "FAQ / Algengar spurningar" -#: ../../gnome/app.py:193 ../../kde4/app.py:150 +#: ../../qt4/app.py:131 msgid "Ask a question" -msgstr "" +msgstr "Spyrja spurninga" -#: ../../gnome/app.py:194 ../../kde4/app.py:152 +#: ../../qt4/app.py:133 msgid "Report a bug" -msgstr "" +msgstr "Tilkynna um villu" -#: ../../gnome/app.py:196 ../../kde4/app.py:155 +#: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "Um forritið" -#: ../../gnome/app.py:202 ../../gnome/app.py:887 -#: ../../gnome/restoredialog.py:84 ../../gnome/snapshotsdialog.py:83 -#: ../../gnome/snapshotsdialog.py:244 ../../kde4/app.py:206 -#: ../../kde4/app.py:216 ../../kde4/restoredialog.py:68 -#: ../../kde4/snapshotsdialog.py:111 ../../kde4/snapshotsdialog.py:117 -#: ../../gnome/mainwindow.glade:350 ../../gnome/mainwindow.glade:352 -#: ../../gnome/snapshotsdialog.glade:169 ../../gnome/snapshotsdialog.glade:171 +#: ../../qt4/app.py:163 +msgid "Up" +msgstr "Upp" + +#: ../../qt4/app.py:174 ../../qt4/settingsdialog.py:1776 +msgid "Show hidden files" +msgstr "Sýna faldar skrár" + +#: ../../qt4/app.py:184 ../../qt4/app.py:199 ../../qt4/app.py:233 +#: ../../qt4/restoredialog.py:62 ../../qt4/settingsdialog.py:1818 +#: ../../qt4/snapshotsdialog.py:134 ../../qt4/snapshotsdialog.py:139 msgid "Restore" msgstr "Endurheimta" -#: ../../gnome/app.py:203 ../../gnome/app.py:888 ../../gnome/gnometools.py:67 -#: ../../gnome/snapshotsdialog.py:84 ../../gnome/snapshotsdialog.py:245 -#: ../../kde4/app.py:208 ../../kde4/restoredialog.py:42 -#: ../../kde4/snapshotsdialog.py:113 +#: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 +#: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." -msgstr "" +msgstr "Endurheimta í ..." -#: ../../gnome/app.py:205 ../../gnome/app.py:896 ../../gnome/app.py:1146 -#: ../../kde4/app.py:1041 -#, python-format -msgid "Restore '%s'" -msgstr "" +#: ../../qt4/app.py:194 +msgid "Restore and delete new files" +msgstr "Endurheimta og eyða nýjum skrám" -#: ../../gnome/app.py:207 ../../gnome/app.py:897 ../../gnome/app.py:1147 -#: ../../kde4/app.py:1042 +#: ../../qt4/app.py:201 #, python-format -msgid "Restore '%s' to ..." +msgid "" +"Restore selected file or folder.\n" +"If this button is grayed out this is most likely because \"%(now)s\" is " +"selected in left hand snapshots list." msgstr "" -#: ../../gnome/app.py:226 ../../kde4/app.py:235 +#: ../../qt4/app.py:206 ../../qt4/logviewdialog.py:67 +#: ../../qt4/qt4tools.py:160 ../../qt4/snapshotsdialog.py:96 +msgid "Snapshots" +msgstr "Skyndiafrit" + +#: ../../qt4/app.py:213 +msgid "Snapshot" +msgstr "Skyndiafrit" + +#: ../../qt4/app.py:224 +msgid "View" +msgstr "Skoða" + +#: ../../qt4/app.py:277 msgid "Shortcuts" msgstr "Flýtilyklar" -#: ../../gnome/app.py:249 -msgid "Name" -msgstr "Heiti" - -#: ../../gnome/app.py:260 -msgid "Size" -msgstr "Stærð" - -#: ../../gnome/app.py:267 -msgid "Date" -msgstr "Dagsetning" - -#: ../../gnome/app.py:286 ../../gnome/app.py:883 -#: ../../gnome/snapshotsdialog.py:116 ../../kde4/app.py:171 -#: ../../kde4/app.py:221 ../../kde4/snapshotsdialog.py:91 -#: ../../gnome/mainwindow.glade:366 ../../gnome/mainwindow.glade:368 -#: ../../gnome/snapshotsdialog.glade:8 -msgid "Snapshots" -msgstr "Skyndiafrit" +#: ../../qt4/app.py:295 +msgid "" +"This folder doesn't exist\n" +"in the current selected snapshot!" +msgstr "" + +#: ../../qt4/app.py:359 +msgid "Add to Include" +msgstr "" + +#: ../../qt4/app.py:360 +msgid "Add to Exclude" +msgstr "" + +#: ../../qt4/app.py:416 +#, python-format +msgid "" +"%(appName)s is not configured. Would you like to restore a previous " +"configuration?" +msgstr "" -#: ../../gnome/app.py:348 ../../kde4/app.py:362 +#: ../../qt4/app.py:440 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it and then press OK" msgstr "" -#: ../../gnome/app.py:611 ../../kde4/app.py:590 -msgid "Done, no backup needed" -msgstr "Búið, engin öryggisafritun nauðsynleg" +#: ../../qt4/app.py:473 +msgid "" +"If you close this window Back In Time will not be able to shutdown your " +"system when the snapshot has finished.\n" +"Do you really want to close?" +msgstr "" -#: ../../gnome/app.py:619 ../../kde4/app.py:598 +#: ../../qt4/app.py:667 ../../qt4/app.py:703 msgid "Working:" msgstr "Að vinna:" -#: ../../gnome/app.py:623 ../../kde4/app.py:602 +#: ../../qt4/app.py:695 +msgid "Done, no backup needed" +msgstr "Búið, engin öryggisafritun nauðsynleg" + +#: ../../qt4/app.py:707 msgid "Error:" msgstr "Villa:" -#: ../../gnome/app.py:636 ../../kde4/app.py:649 +#: ../../qt4/app.py:726 ../../qt4/qt4systrayicon.py:153 +msgid "Sent:" +msgstr "Sent:" + +#: ../../qt4/app.py:727 ../../qt4/qt4systrayicon.py:154 +msgid "Speed:" +msgstr "Hraði:" + +#: ../../qt4/app.py:728 ../../qt4/qt4systrayicon.py:155 +msgid "ETA:" +msgstr "Áætluð lok:" + +#: ../../qt4/app.py:777 msgid "Global" msgstr "Víðvært" -#: ../../gnome/app.py:637 ../../kde4/app.py:650 +#: ../../qt4/app.py:778 msgid "Root" msgstr "Kerfisstjóri (root)" -#: ../../gnome/app.py:638 ../../kde4/app.py:651 +#: ../../qt4/app.py:779 msgid "Home" msgstr "Einkamappa (Home)" -#: ../../gnome/app.py:662 -msgid "Bookmarks" -msgstr "Bókamerki" - -#: ../../gnome/app.py:675 ../../kde4/app.py:662 +#: ../../qt4/app.py:794 msgid "Backup folders" msgstr "Öryggisafritunarmöppur" -#: ../../gnome/app.py:701 ../../kde4/app.py:734 -msgid "Today" -msgstr "Í dag" +#: ../../qt4/app.py:849 +msgid "This is NOT a snapshot but a live view of your local files" +msgstr "" -#: ../../gnome/app.py:705 ../../kde4/app.py:738 -msgid "Yesterday" -msgstr "Í gær" +#: ../../qt4/app.py:860 ../../qt4/app.py:1476 +#, python-format +msgid "Last check %s" +msgstr "Síðasta athugun %s" -#: ../../gnome/app.py:709 ../../kde4/app.py:742 -msgid "This week" -msgstr "Í þessari viku" +#: ../../qt4/app.py:928 +#, python-format +msgid "" +"Are you sure you want to remove the snapshot:\n" +"%s" +msgstr "" +"Ertu viss um að þú viljir fjarlægja skyndiafritið:\n" +"%s" -#: ../../gnome/app.py:713 ../../kde4/app.py:746 -msgid "Last week" -msgstr "Í síðustu viku" +#: ../../qt4/app.py:1004 +#, python-format +msgid "" +"Backup local files before overwriting or\n" +"removing with trailing '%(suffix)s'." +msgstr "" -#: ../../gnome/app.py:764 ../../kde4/app.py:398 +#: ../../qt4/app.py:1010 msgid "" -"If you close this window Back In Time will not be able to shutdown your " -"system when the snapshot has finished.\n" -"Do you really want to close?" +"Are you sure you want to remove all newer files in your original folder?" msgstr "" -#: ../../gnome/app.py:881 ../../gnome/snapshotsdialog.py:238 -msgid "Open" -msgstr "Opna" +#: ../../qt4/app.py:1014 +msgid "" +"WARNING: deleting files in filesystem root could break your whole system!!!" +msgstr "" -#: ../../gnome/app.py:1056 ../../kde4/app.py:90 ../../kde4/app.py:805 -#: ../../gnome/mainwindow.glade:73 ../../gnome/mainwindow.glade:75 -msgid "Snapshot Name" -msgstr "Heiti skyndiafrits" +#: ../../qt4/app.py:1016 +msgid "Files to be restored:" +msgstr "Skrár sem á að endurheimta:" -#: ../../gnome/app.py:1075 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +#: ../../qt4/app.py:1031 +msgid "Do you really want to restore this files(s):" msgstr "" -"Ertu viss um að þú viljir fjarlægja skyndiafritið:\n" -"%s" -#: ../../gnome/app.py:1123 ../../kde4/app.py:1010 +#: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "Skyndiafrit: %s" -#: ../../gnome/app.py:1124 ../../kde4/app.py:1011 +#: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "Skoða skyndiafritið sem búið var til %s" -#: ../../gnome/app.py:1126 ../../kde4/app.py:1013 +#: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "Skoða innihald á diski" -#: ../../gnome/logviewdialog.py:106 ../../gnome/settingsdialog.py:414 -#: ../../kde4/logviewdialog.py:83 ../../kde4/settingsdialog.py:590 -msgid "All" -msgstr "Allt" - -#: ../../gnome/logviewdialog.py:107 ../../gnome/settingsdialog.py:412 -#: ../../kde4/logviewdialog.py:84 ../../kde4/settingsdialog.py:588 -msgid "Errors" -msgstr "Villur" - -#: ../../gnome/logviewdialog.py:112 ../../kde4/logviewdialog.py:89 -msgid "Changes" -msgstr "Breytingar" - -#: ../../gnome/logviewdialog.py:115 ../../kde4/logviewdialog.py:92 -msgid "Informations" -msgstr "Upplýsingar" - -#: ../../gnome/settingsdialog.py:235 ../../kde4/settingsdialog.py:387 -msgid "Include files and folders" -msgstr "Hafa með skrár og möppur" - -#: ../../gnome/settingsdialog.py:264 -msgid "Exclude patterns, files or folders" -msgstr "Undanskilja mynstur, skrár eða möppur" - -#: ../../gnome/settingsdialog.py:411 ../../kde4/settingsdialog.py:587 -msgid "None" -msgstr "Ekkert" - -#: ../../gnome/settingsdialog.py:413 ../../kde4/settingsdialog.py:589 -msgid "Changes & Errors" -msgstr "Breytingar og villuboð" - -#: ../../gnome/settingsdialog.py:458 -msgid "Snapshots folder" -msgstr "Mappa fyrir skyndiafrit" - -#: ../../gnome/settingsdialog.py:466 ../../kde4/settingsdialog.py:1314 -msgid "Are you sure you want to change snapshots folder ?" -msgstr "Ertu viss um að þú viljir skipta um möppu undir skyndiafrit ?" - -#: ../../gnome/settingsdialog.py:901 ../../kde4/settingsdialog.py:914 -msgid "" -"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " -"*/3 for periodic backups every 3 hours" -msgstr "" - -#: ../../gnome/settingsdialog.py:1141 ../../kde4/settingsdialog.py:653 -msgid "New profile" -msgstr "Nýtt snið" - -#: ../../gnome/settingsdialog.py:1155 ../../kde4/settingsdialog.py:669 -msgid "Rename profile" -msgstr "Endurnefna snið" - -#: ../../gnome/settingsdialog.py:1167 ../../kde4/settingsdialog.py:683 +#: ../../qt4/app.py:1268 #, python-format -msgid "Are you sure you want to delete the profile \"%s\" ?" -msgstr "Ertu viss um að þú viljir eyða sniðinu \"%s\" ?" - -#: ../../gnome/settingsdialog.py:1173 ../../kde4/settingsdialog.py:1292 -msgid "Include folder" -msgstr "Hafa með möppu" - -#: ../../gnome/settingsdialog.py:1193 ../../kde4/settingsdialog.py:1278 -msgid "Include file" -msgstr "Hafa með skrá" - -#: ../../gnome/settingsdialog.py:1235 ../../kde4/settingsdialog.py:1241 -msgid "Exclude pattern" -msgstr "Útilokunarmynstur" - -#: ../../gnome/settingsdialog.py:1240 ../../kde4/settingsdialog.py:1251 -msgid "Exclude patterns can't contain ':' char !" -msgstr "Útilokunarmynstur geta ekki innihaldið ':' táknið !" - -#: ../../gnome/settingsdialog.py:1246 ../../kde4/settingsdialog.py:1257 -msgid "Exclude file" -msgstr "Undanskilja skrá" - -#: ../../gnome/settingsdialog.py:1257 ../../kde4/settingsdialog.py:1261 -msgid "Exclude folder" -msgstr "Undanskilja möppu" - -#: ../../gnome/snapshotsdialog.py:240 -msgid "Jump to" -msgstr "" - -#: ../../gnome/snapshotsdialog.py:248 ../../kde4/snapshotsdialog.py:164 -msgid "Diff" -msgstr "Diff" - -#: ../../gnome/snapshotsdialog.py:277 ../../kde4/snapshotsdialog.py:339 -msgid "You can't compare a snapshot to itself" -msgstr "Þú getur ekki borið skyndiafrit saman við sjálft sig" +msgid "Restore '%s'" +msgstr "Endurheimta '%s'" -#: ../../gnome/snapshotsdialog.py:284 ../../kde4/snapshotsdialog.py:346 +#: ../../qt4/app.py:1269 #, python-format -msgid "Command not found: %s" -msgstr "Skipun fannst ekki: %s" +msgid "Restore '%s' to ..." +msgstr "Endurheimta '%s' í ..." -#: ../../gnome/snapshotsdialog.py:307 ../../kde4/snapshotsdialog.py:367 +#: ../../qt4/app.py:1270 #, python-format -msgid "" -"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" -msgstr "" +msgid "Restore '%s' and delete new files" +msgstr "Endurheimta '%s' og eyða nýjum skrám" -#: ../../gnome/snapshotsdialog.py:310 ../../kde4/snapshotsdialog.py:370 -#, python-format -msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" -msgstr "" +#: ../../qt4/app.py:1368 ../../qt4/app.py:1385 +msgid "Authors" +msgstr "Höfundar" -#: ../../gnome/snapshotsdialog.py:312 ../../kde4/snapshotsdialog.py:372 -msgid "WARNING: This can not be revoked!" +#: ../../qt4/app.py:1369 ../../qt4/app.py:1388 +msgid "Translations" +msgstr "Þýðingar" + +#: ../../qt4/app.py:1370 ../../qt4/app.py:1391 +msgid "License" +msgstr "Notkunarleyfi" + +#: ../../qt4/logviewdialog.py:49 +msgid "Last Log View" msgstr "" -#: ../../gnome/snapshotsdialog.py:317 ../../kde4/snapshotsdialog.py:377 -#, python-format -msgid "Exclude \"%s\" from future snapshots?" +#: ../../qt4/logviewdialog.py:51 +msgid "Snapshot Log View" msgstr "" -#: ../../kde4/app.py:86 ../../gnome/mainwindow.glade:58 -#: ../../gnome/mainwindow.glade:60 -msgid "Refresh snapshots list" -msgstr "Endurnýja lista yfir skyndiafrit" +#: ../../qt4/logviewdialog.py:59 ../../qt4/settingsdialog.py:59 +#: ../../qt4/settingsdialog.py:274 ../../qt4/settingsdialog.py:1899 +msgid "Profile:" +msgstr "Snið:" -#: ../../kde4/app.py:94 ../../gnome/mainwindow.glade:88 -#: ../../gnome/mainwindow.glade:90 -msgid "Remove Snapshot" -msgstr "Fjarlægja skyndiafrit" +#: ../../qt4/logviewdialog.py:81 +msgid "Filter:" +msgstr "Sía:" -#: ../../kde4/app.py:98 ../../gnome/mainwindow.glade:105 -msgid "View Snapshot Log" -msgstr "Skoða skyndiafritaannál" +#: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 +msgid "All" +msgstr "Allt" -#: ../../kde4/app.py:102 ../../gnome/mainwindow.glade:121 -msgid "View Last Log" -msgstr "Skoða síðasta annál" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 +#: ../../qt4/settingsdialog.py:657 +msgid "Errors" +msgstr "Villur" -#: ../../kde4/app.py:108 ../../kde4/settingsdialog.py:69 -#: ../../gnome/mainwindow.glade:144 ../../gnome/mainwindow.glade:146 -#: ../../gnome/settingsdialog.glade:7 -msgid "Settings" -msgstr "Stillingar" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 +msgid "Changes" +msgstr "Breytingar" -#: ../../kde4/app.py:124 ../../gnome/mainwindow.glade:169 -msgid "Shutdown system after snapshot has finished." -msgstr "" +#: ../../qt4/logviewdialog.py:92 +msgid "Informations" +msgstr "Upplýsingar" -#: ../../kde4/app.py:131 ../../gnome/mainwindow.glade:184 -#: ../../gnome/mainwindow.glade:186 -msgid "Exit" -msgstr "Hætta" +#: ../../qt4/logviewdialog.py:101 +msgid "[E] Error, [I] Information, [C] Change" +msgstr "[E] Villa, [I] Upplýsingar, [C] Breyta" -#: ../../kde4/app.py:186 ../../gnome/mainwindow.glade:289 -msgid "Up" -msgstr "Upp" +#: ../../qt4/logviewdialog.py:104 +msgid "decode paths" +msgstr "afkóða slóðir" -#: ../../kde4/app.py:199 ../../gnome/mainwindow.glade:325 -msgid "Show hidden files" -msgstr "Sýna faldar skrár" +#: ../../qt4/messagebox.py:56 +msgid "Error" +msgstr "Villa" -#: ../../kde4/app.py:244 -msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" -msgstr "" +#: ../../qt4/messagebox.py:62 ../../qt4/messagebox.py:68 +msgid "Question" +msgstr "Spurning" -#: ../../kde4/app.py:839 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" -msgstr "" +#: ../../qt4/qt4systrayicon.py:69 +msgid "Start BackInTime" +msgstr "Ræsa BackInTime" -#: ../../kde4/app.py:1140 ../../kde4/kde4systrayicon.py:117 +#: ../../qt4/qt4systrayicon.py:124 msgid "Working..." msgstr "Í vinnslu..." -#: ../../kde4/logviewdialog.py:55 -msgid "Error Log View" -msgstr "Villuannálsskoðun" - -#: ../../kde4/logviewdialog.py:65 ../../kde4/settingsdialog.py:79 -#: ../../kde4/settingsdialog.py:293 ../../gnome/logviewdialog.glade:73 -#: ../../gnome/settingsdialog.glade:72 -msgid "Profile:" -msgstr "Snið:" +#: ../../qt4/qt4tools.py:178 +msgid "Today" +msgstr "Í dag" -#: ../../kde4/logviewdialog.py:77 ../../gnome/logviewdialog.glade:110 -msgid "Filter:" -msgstr "Sía:" +#: ../../qt4/qt4tools.py:183 +msgid "Yesterday" +msgstr "Í gær" -#: ../../kde4/logviewdialog.py:100 ../../gnome/logviewdialog.glade:169 -msgid "[E] Error, [I] Information, [C] Change" -msgstr "[E] Villa, [I] Upplýsingar, [C] Breyta" +#: ../../qt4/qt4tools.py:188 +msgid "This week" +msgstr "Í þessari viku" -#: ../../kde4/logviewdialog.py:103 ../../gnome/logviewdialog.glade:195 -msgid "decode paths" -msgstr "" +#: ../../qt4/qt4tools.py:193 +msgid "Last week" +msgstr "Í síðustu viku" -#: ../../kde4/settingsdialog.py:88 +#: ../../qt4/restoredialog.py:75 +msgid "Show full Log" +msgstr "Birta fullan annál" + +#: ../../qt4/settingsdialog.py:68 msgid "Edit" msgstr "Breyta" -#: ../../kde4/settingsdialog.py:106 ../../gnome/settingsdialog.glade:1207 +#: ../../qt4/settingsdialog.py:73 +msgid "Modify for Full System Backup" +msgstr "" + +#: ../../qt4/settingsdialog.py:77 ../../qt4/settingsdialog.py:451 +msgid "Add" +msgstr "Bæta við" + +#: ../../qt4/settingsdialog.py:81 ../../qt4/settingsdialog.py:408 +#: ../../qt4/settingsdialog.py:467 +msgid "Remove" +msgstr "Fjarlægja" + +#: ../../qt4/settingsdialog.py:96 msgid "General" msgstr "Almennt" -#: ../../kde4/settingsdialog.py:114 ../../gnome/settingsdialog.glade:199 +#: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" +msgstr "Hamur:" + +#: ../../qt4/settingsdialog.py:119 +#, python-format +msgid "" +"Warning: %(app)s uses EncFS for encryption. A recent security audit " +"revealed several possible attack vectors for this. Please take a look at 'A " +"NOTE ON SECURITY' in 'man backintime'." msgstr "" -#: ../../kde4/settingsdialog.py:127 ../../kde4/settingsdialog.py:1311 +#: ../../qt4/settingsdialog.py:129 ../../qt4/settingsdialog.py:1568 msgid "Where to save snapshots" msgstr "Hvar á að vista skyndiafrit" -#: ../../kde4/settingsdialog.py:146 +#: ../../qt4/settingsdialog.py:145 +msgid "Folder" +msgstr "Mappa" + +#: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" -msgstr "" +msgstr "SSH stillingar" -#: ../../kde4/settingsdialog.py:158 ../../kde4/settingsdialog.py:283 -#: ../../gnome/settingsdialog.glade:323 ../../gnome/settingsdialog.glade:583 -#: ../../gnome/settingsdialog.glade:874 +#: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "Miðlari:" -#: ../../kde4/settingsdialog.py:163 ../../gnome/settingsdialog.glade:350 -#: ../../gnome/settingsdialog.glade:610 +#: ../../qt4/settingsdialog.py:170 msgid "Port:" -msgstr "" +msgstr "Gátt:" -#: ../../kde4/settingsdialog.py:168 ../../kde4/settingsdialog.py:288 -#: ../../gnome/settingsdialog.glade:377 ../../gnome/settingsdialog.glade:637 -#: ../../gnome/settingsdialog.glade:902 +#: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "Notandi:" -#: ../../kde4/settingsdialog.py:173 ../../gnome/settingsdialog.glade:416 +#: ../../qt4/settingsdialog.py:180 msgid "Path:" -msgstr "" +msgstr "Slóð:" -#: ../../kde4/settingsdialog.py:178 ../../gnome/settingsdialog.glade:459 +#: ../../qt4/settingsdialog.py:186 msgid "Cipher:" -msgstr "" +msgstr "Dulkóðunarlykill:" -#: ../../kde4/settingsdialog.py:184 +#: ../../qt4/settingsdialog.py:192 msgid "Private Key:" -msgstr "" +msgstr "Einkalykill:" -#: ../../kde4/settingsdialog.py:228 ../../kde4/settingsdialog.py:237 -#: ../../kde4/settingsdialog.py:243 ../../gnome/settingsdialog.glade:703 -#: ../../gnome/settingsdialog.glade:743 +#: ../../qt4/settingsdialog.py:201 +msgid "Key File" +msgstr "Lykilskrá" + +#: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 +#: ../../qt4/settingsdialog.py:229 msgid "Password" -msgstr "" +msgstr "Lykilorð" -#: ../../kde4/settingsdialog.py:249 ../../gnome/settingsdialog.glade:775 +#: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" -#: ../../kde4/settingsdialog.py:252 ../../gnome/settingsdialog.glade:792 +#: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" -#: ../../kde4/settingsdialog.py:264 ../../gnome/settingsdialog.glade:968 +#: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "Nánar" -#: ../../kde4/settingsdialog.py:276 ../../gnome/settingsdialog.glade:848 -msgid "Auto Host / User / Profile Id" -msgstr "" +#: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 +msgid "Full snapshot path: " +msgstr "Heildarslóð skyndiafrita: " -#: ../../kde4/settingsdialog.py:301 +#: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "Vinnuáætlun" -#: ../../kde4/settingsdialog.py:311 ../../gnome/settingsdialog.glade:1092 +#: ../../qt4/settingsdialog.py:297 msgid "Day:" -msgstr "" +msgstr "Dagur:" -#: ../../kde4/settingsdialog.py:322 ../../gnome/settingsdialog.glade:1079 +#: ../../qt4/settingsdialog.py:308 msgid "Weekday:" -msgstr "" +msgstr "Vikudagur:" -#: ../../kde4/settingsdialog.py:333 ../../gnome/settingsdialog.glade:1066 +#: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "Klukkustund:" -#: ../../kde4/settingsdialog.py:344 ../../gnome/settingsdialog.glade:1053 +#: ../../qt4/settingsdialog.py:330 msgid "Hours:" -msgstr "" +msgstr "Klukkustundir:" -#: ../../kde4/settingsdialog.py:353 ../../gnome/settingsdialog.glade:1014 +#: ../../qt4/settingsdialog.py:339 msgid "" -"Run Back In Time periodically with anacron. This is useful if the computer " -"is not running regular." +"Run Back In Time repeatedly. This is useful if the computer is not running " +"regular." msgstr "" -#: ../../kde4/settingsdialog.py:357 ../../gnome/settingsdialog.glade:1040 -msgid "Frequency in days:" -msgstr "" +#: ../../qt4/settingsdialog.py:344 +msgid "Every:" +msgstr "Hverjar:" -#: ../../kde4/settingsdialog.py:368 ../../gnome/settingsdialog.glade:1026 +#: ../../qt4/settingsdialog.py:362 msgid "" "Run Back In Time as soon as the drive is connected (only once every X " "days).\n" "You will be prompted for your sudo password." msgstr "" -#: ../../kde4/settingsdialog.py:379 ../../gnome/settingsdialog.glade:1310 +#: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Taka með" -#: ../../kde4/settingsdialog.py:403 ../../kde4/settingsdialog.py:445 -#: ../../gnome/settingsdialog.glade:1411 +#: ../../qt4/settingsdialog.py:381 +msgid "Include files and folders" +msgstr "Hafa með skrár og möppur" + +#: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "Bæta við skrá" -#: ../../kde4/settingsdialog.py:408 ../../kde4/settingsdialog.py:450 -#: ../../gnome/settingsdialog.glade:1427 +#: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Bæta við möppu" -#: ../../kde4/settingsdialog.py:418 ../../gnome/settingsdialog.glade:1474 +#: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Undanskilja" -#: ../../kde4/settingsdialog.py:421 ../../gnome/settingsdialog.glade:1328 +#: ../../qt4/settingsdialog.py:417 msgid "" "Warning: Wildcards ('foo*', '[fF]oo', 'fo?') will be ignored with " "mode 'SSH encrypted'.\n" "Only separate asterisk are allowed ('foo/*', 'foo/**/bar')" msgstr "" -#: ../../kde4/settingsdialog.py:430 +#: ../../qt4/settingsdialog.py:425 +msgid "Exclude patterns, files or folders" +msgstr "Undanskilja mynstur, skrár eða möppur" + +#: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "Sérstaklega mælt með:" -#: ../../kde4/settingsdialog.py:460 ../../gnome/settingsdialog.glade:1905 +#: ../../qt4/settingsdialog.py:463 +msgid "Add default" +msgstr "Bæta við sjálfgefnu" + +#: ../../qt4/settingsdialog.py:474 +msgid "Exclude files bigger than: " +msgstr "Hunsa skrár stærri en: " + +#: ../../qt4/settingsdialog.py:475 +#, python-format +msgid "" +"Exclude files bigger than value in %(prefix)s.\n" +"With 'Full rsync mode' disabled this will only affect new files\n" +"because for rsync this is a transfer option, not an exclude option.\n" +"So big files that has been backed up before will remain in snapshots\n" +"even if they had changed." +msgstr "" + +#: ../../qt4/settingsdialog.py:493 msgid "Auto-remove" msgstr "Sjálfvirk fjarlæging" -#: ../../kde4/settingsdialog.py:464 ../../gnome/settingsdialog.glade:1608 +#: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "Eldri en:" -#: ../../kde4/settingsdialog.py:478 ../../gnome/settingsdialog.glade:1624 +#: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "Ef laust pláss er minna en:" -#: ../../kde4/settingsdialog.py:490 ../../gnome/settingsdialog.glade:1642 +#: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" +msgstr "Ef lausir ihnútar (inodes) eru færri en:" + +#: ../../qt4/settingsdialog.py:551 +msgid "Run in background on remote Host." msgstr "" -#: ../../kde4/settingsdialog.py:514 ../../gnome/settingsdialog.glade:1697 +#: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" -msgstr "" +msgstr "Geyma öll skyndiafrit síðustu" -#: ../../kde4/settingsdialog.py:517 ../../kde4/settingsdialog.py:522 -#: ../../gnome/settingsdialog.glade:1705 ../../gnome/settingsdialog.glade:1729 +#: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" -msgstr "" +msgstr "dag(a)" -#: ../../kde4/settingsdialog.py:519 ../../gnome/settingsdialog.glade:1717 +#: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" -msgstr "" +msgstr "Geyma eitt skyndiafrit á dag síðustu" -#: ../../kde4/settingsdialog.py:524 ../../gnome/settingsdialog.glade:1743 +#: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" -msgstr "" +msgstr "Geyma eitt skyndiafrit á viku síðustu" -#: ../../kde4/settingsdialog.py:527 +#: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" -msgstr "" +msgstr "viku(r)" -#: ../../kde4/settingsdialog.py:529 ../../gnome/settingsdialog.glade:1769 +#: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" -msgstr "" +msgstr "Geyma eitt skyndiafrit á mánuði síðustu" -#: ../../kde4/settingsdialog.py:532 ../../gnome/settingsdialog.glade:1781 +#: ../../qt4/settingsdialog.py:576 msgid "month(s)" -msgstr "" +msgstr "mánuði(r)" -#: ../../kde4/settingsdialog.py:534 ../../gnome/settingsdialog.glade:1795 +#: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" -msgstr "" +msgstr "Geyma eitt skyndiafrit á dári síðustu" -#: ../../kde4/settingsdialog.py:537 ../../gnome/settingsdialog.glade:1496 +#: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "Ekki fjarlægja nefnd skyndiafrit" -#: ../../kde4/settingsdialog.py:546 ../../gnome/settingsdialog.glade:2104 +#: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Valkostir" -#: ../../kde4/settingsdialog.py:549 ../../gnome/settingsdialog.glade:1920 +#: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Virkja tilkynningar" -#: ../../kde4/settingsdialog.py:552 ../../gnome/settingsdialog.glade:1937 +#: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "Koma í veg fyrir skyndiafritun þegar rafhlaða er í notkun" -#: ../../kde4/settingsdialog.py:555 +#: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" +msgstr "Staða rafhlöðu er ekki tiltæk frá kerfinu" + +#: ../../qt4/settingsdialog.py:611 +msgid "Run only one snapshot at a time" msgstr "" -#: ../../kde4/settingsdialog.py:558 ../../gnome/settingsdialog.glade:1955 -msgid "Backup files on restore" +#: ../../qt4/settingsdialog.py:612 +msgid "" +"Other snapshots will be blocked until the current snapshot is done.\n" +"This is a global option. So it will effect all profiles for this user.\n" +"But you need to activate this for all other users, too." msgstr "" -#: ../../kde4/settingsdialog.py:561 ../../gnome/settingsdialog.glade:1972 -msgid "Continue on errors (keep incomplete snapshots)" +#: ../../qt4/settingsdialog.py:617 +msgid "Backup replaced files on restore" +msgstr "Öryggisafrit skipti út skrám við endurheimtingu" + +#: ../../qt4/settingsdialog.py:618 +#, python-format +msgid "" +"Newer versions of files will be renamed with trailing '%(suffix)s' before " +"restoring.\n" +"If you don't need them anymore you can remove them with '%(cmd)s'" msgstr "" -#: ../../kde4/settingsdialog.py:564 ../../gnome/settingsdialog.glade:1989 +#: ../../qt4/settingsdialog.py:627 +msgid "Continue on errors (keep incomplete snapshots)" +msgstr "Halda áfram við villur (geyma ókláruð skyndiafrit)" + +#: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "Nota gátsummu til að skynja breytingar" -#: ../../kde4/settingsdialog.py:567 ../../gnome/settingsdialog.glade:2006 +#: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" -msgstr "" +msgstr "Fullur rsync hamur. Gæti verið hraðvirkari, en:" -#: ../../kde4/settingsdialog.py:568 ../../gnome/settingsdialog.glade:2032 +#: ../../qt4/settingsdialog.py:634 msgid "" -"- snapshots are no read-only\n" -"- destination file-system must support all linux attributes (dates, rights, " +"- snapshots are not read-only\n" +"- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" +"- skyndiafrit eru ekki einungis lesanleg\n" +"- móttökuskráakerfi verður að styðja öll eigindi Linux skráakerfa " +"(dagsetningar, skráaheimildir, notendur, hópa ...)" + +#: ../../qt4/settingsdialog.py:641 +msgid "Take a new snapshot regardless of there were changes or not." +msgstr "Taka skyndiafrit sama hvort nokkuð hafi breyst." -#: ../../kde4/settingsdialog.py:575 ../../gnome/settingsdialog.glade:2045 +#: ../../qt4/settingsdialog.py:644 msgid "Check for changes (don't take a new snapshot if nothing changed)" -msgstr "" +msgstr "Athuga með breytingar (ekki taka skyndiafrit ef ekkert hefur breyst)" -#: ../../kde4/settingsdialog.py:582 +#: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "Annálsstig:" -#: ../../kde4/settingsdialog.py:597 ../../gnome/settingsdialog.glade:2366 -msgid "Expert Options" -msgstr "Ítarlegri valkostir" +#: ../../qt4/settingsdialog.py:656 +msgid "None" +msgstr "Ekkert" + +#: ../../qt4/settingsdialog.py:658 +msgid "Changes & Errors" +msgstr "Breytingar og villuboð" -#: ../../kde4/settingsdialog.py:600 +#: ../../qt4/settingsdialog.py:674 msgid "Change these options only if you really know what you are doing !" msgstr "EKKI breyta þessum stillingum nema að þú vitir hvað þú ert að gera !" -#: ../../kde4/settingsdialog.py:608 ../../gnome/settingsdialog.glade:2133 -msgid "Run 'nice' as cron job (default: enabled)" -msgstr "" +#: ../../qt4/settingsdialog.py:678 +msgid "Run 'nice':" +msgstr "Keyra 'nice':" -#: ../../kde4/settingsdialog.py:611 ../../gnome/settingsdialog.glade:2150 -msgid "Run 'ionice' as cron job (default: enabled)" -msgstr "" +#: ../../qt4/settingsdialog.py:684 ../../qt4/settingsdialog.py:696 +msgid "as cron job" +msgstr "sem cron-verk" -#: ../../kde4/settingsdialog.py:614 ../../gnome/settingsdialog.glade:2167 -msgid "Run 'ionice' when taking a manual snapshot (default: disabled)" -msgstr "" +#: ../../qt4/settingsdialog.py:687 ../../qt4/settingsdialog.py:702 +#: ../../qt4/settingsdialog.py:716 +msgid "on remote host" +msgstr "á fjartengdri vél" -#: ../../kde4/settingsdialog.py:617 ../../gnome/settingsdialog.glade:2184 -msgid "Run 'nice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:690 +msgid "Run 'ionice':" +msgstr "Keyra 'ionice':" + +#: ../../qt4/settingsdialog.py:699 +msgid "when taking a manual snapshot" +msgstr "við að taka handvirkt skyndiafrit" + +#: ../../qt4/settingsdialog.py:706 +msgid "Run 'rsync' with 'nocache':" +msgstr "Keyra 'rsync' með 'nocache':" + +#: ../../qt4/settingsdialog.py:712 +msgid "on local machine" +msgstr "á staðværri vél" + +#: ../../qt4/settingsdialog.py:719 +msgid "Redirect stdout to /dev/null in cronjobs." msgstr "" -#: ../../kde4/settingsdialog.py:620 ../../gnome/settingsdialog.glade:2201 -msgid "Run 'ionice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:725 +msgid "Redirect stderr to /dev/null in cronjobs." msgstr "" -#: ../../kde4/settingsdialog.py:626 ../../gnome/settingsdialog.glade:2224 +#: ../../qt4/settingsdialog.py:734 msgid "Limit rsync bandwidth usage: " -msgstr "" +msgstr "Takmarka notkun rsync á bandbreidd: " -#: ../../kde4/settingsdialog.py:629 ../../gnome/settingsdialog.glade:2259 +#: ../../qt4/settingsdialog.py:737 msgid " KB/sec" -msgstr "" +msgstr " KB/sek" -#: ../../kde4/settingsdialog.py:634 ../../gnome/settingsdialog.glade:2280 +#: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "Varðveita ACL" -#: ../../kde4/settingsdialog.py:637 ../../gnome/settingsdialog.glade:2297 +#: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "Varðveita ítarleg eigindi (xattr)" -#: ../../kde4/settingsdialog.py:640 ../../gnome/settingsdialog.glade:2314 +#: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute links)" msgstr "" -#: ../../kde4/settingsdialog.py:643 ../../gnome/settingsdialog.glade:2331 -msgid "Copy links (dereference symbolic links)" +#: ../../qt4/settingsdialog.py:834 +msgid "Paste additional options to rsync" +msgstr "Líma viðbótarvalkosti inn í rsync" + +#: ../../qt4/settingsdialog.py:837 +msgid "" +"Options must be quoted e.g. --exclude-from=\"/path/to/my exclude file\"." msgstr "" -#: ../../kde4/snapshotsdialog.py:46 ../../kde4/snapshotsdialog.py:173 -#: ../../gnome/snapshotsdialog.glade:385 -msgid "Diff Options" -msgstr "Diff valkostir" +#: ../../qt4/settingsdialog.py:847 +msgid "Add prefix to SSH commands" +msgstr "" -#: ../../kde4/snapshotsdialog.py:56 ../../gnome/snapshotsdialog.glade:314 -msgid "Command:" -msgstr "Skipun:" +#: ../../qt4/settingsdialog.py:850 +#, python-format +msgid "" +"Prefix to run before every command on remote host.\n" +"Variables need to be escaped with \\$FOO.\n" +"This doesn't touch rsync. So to add a prefix\n" +"for rsync use \"%(cb_rsync_options)s\" with\n" +"%(rsync_options_value)s\n" +"\n" +"%(default)s: %(def_value)s" +msgstr "" -#: ../../kde4/snapshotsdialog.py:60 ../../gnome/snapshotsdialog.glade:322 -msgid "Parameters:" -msgstr "Viðföng:" +#: ../../qt4/settingsdialog.py:858 ../../qt4/settingsdialog.py:1691 +msgid "default" +msgstr "sjálfgefið" -#: ../../kde4/snapshotsdialog.py:64 ../../gnome/snapshotsdialog.glade:334 -msgid "Use %1 and %2 for path parameters" -msgstr "" +#: ../../qt4/settingsdialog.py:875 +msgid "Restore Config" +msgstr "Endurheimta stillingaskrá" -#: ../../kde4/snapshotsdialog.py:123 ../../gnome/snapshotsdialog.glade:184 -#: ../../gnome/snapshotsdialog.glade:186 -msgid "Delete" +#: ../../qt4/settingsdialog.py:891 +msgid "" +"Full system backup can only create a snapshot to be restored to the same " +"physical disk(s) with the same disk partitioning as from the source; " +"restoring to new physical disks or the same disks with different " +"partitioning will yield a potentially broken and unusable system.\n" +"\n" +"Full system backup will override some settings that may have been " +"customized. Continue?" msgstr "" -#: ../../kde4/snapshotsdialog.py:128 ../../gnome/snapshotsdialog.glade:199 -#: ../../gnome/snapshotsdialog.glade:201 -msgid "Select All" -msgstr "" +#: ../../qt4/settingsdialog.py:922 +msgid "New profile" +msgstr "Nýtt snið" -#: ../../kde4/snapshotsdialog.py:132 ../../gnome/snapshotsdialog.glade:88 -msgid "List only different snapshots" -msgstr "" +#: ../../qt4/settingsdialog.py:938 +msgid "Rename profile" +msgstr "Endurnefna snið" -#: ../../kde4/snapshotsdialog.py:139 ../../gnome/snapshotsdialog.glade:110 -msgid "List only equal snapshots to: " -msgstr "" +#: ../../qt4/settingsdialog.py:952 +#, python-format +msgid "Are you sure you want to delete the profile \"%s\" ?" +msgstr "Ertu viss um að þú viljir eyða sniðinu \"%s\" ?" -#: ../../kde4/snapshotsdialog.py:149 ../../gnome/snapshotsdialog.glade:146 -msgid "Deep check (more accurate, but slow)" +#: ../../qt4/settingsdialog.py:1191 +msgid "" +"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " +"*/3 for periodic backups every 3 hours" msgstr "" -#: ../../kde4/snapshotsdialog.py:174 -msgid "Go To" -msgstr "Fara í" +#: ../../qt4/settingsdialog.py:1489 +msgid "Exclude pattern" +msgstr "Útilokunarmynstur" + +#: ../../qt4/settingsdialog.py:1502 +msgid "Exclude file" +msgstr "Undanskilja skrá" + +#: ../../qt4/settingsdialog.py:1506 +msgid "Exclude folder" +msgstr "Undanskilja möppu" -#: ../../gnome/logviewdialog.glade:9 -msgid "Log View" -msgstr "Annálaskoðun" +#: ../../qt4/settingsdialog.py:1525 +msgid "Include file" +msgstr "Hafa með skrá" -#: ../../gnome/logviewdialog.glade:179 -msgid "scroll down automatic" +#: ../../qt4/settingsdialog.py:1533 ../../qt4/settingsdialog.py:1553 +#, python-format +msgid "" +"\"%s\" is a symlink. The linked target will not be backed up until you " +"include it, too.\n" +"Would you like to include the symlinks target instead?" msgstr "" -#: ../../gnome/mainwindow.glade:7 -msgid "Back In Time" -msgstr "Bakka í tíma" +#: ../../qt4/settingsdialog.py:1545 +msgid "Include folder" +msgstr "Hafa með möppu" -#: ../../gnome/mainwindow.glade:45 -msgid "Backup Now" -msgstr "Taka öryggisafrit núna" +#: ../../qt4/settingsdialog.py:1572 +msgid "Are you sure you want to change snapshots folder ?" +msgstr "Ertu viss um að þú viljir skipta um möppu undir skyndiafrit ?" -#: ../../gnome/mainwindow.glade:171 -msgid "Shutdown" -msgstr "" +#: ../../qt4/settingsdialog.py:1688 +msgid "enabled" +msgstr "virkt" -#: ../../gnome/mainwindow.glade:287 -msgid "Parent folder" -msgstr "Yfirmappa" +#: ../../qt4/settingsdialog.py:1690 +msgid "disabled" +msgstr "óvirkt" -#: ../../gnome/mainwindow.glade:327 -msgid "Hidden files" -msgstr "Faldar skrár" +#: ../../qt4/settingsdialog.py:1715 +msgid "Restore Settings" +msgstr "Endurheimta stillingar" -#: ../../gnome/mainwindow.glade:451 +#: ../../qt4/settingsdialog.py:1732 +msgid " and add your user to group 'fuse'" +msgstr "" + +#: ../../qt4/settingsdialog.py:1736 +#, python-format msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +"Please navigate to the snapshot from which you want to restore %(appName)s's " +"configuration. The path may look like: \n" +"%(samplePath)s\n" +"\n" +"If your snapshots are on a remote drive or if they are encrypted you need to " +"manually mount them first. If you use Mode SSH you also may need to set up " +"public key login to the remote host%(addFuse)s.\n" +"Take a look at 'man backintime'." msgstr "" -#: ../../gnome/settingsdialog.glade:287 -msgid "Where to save snapshots" -msgstr "Hvar á að vista skyndiafrit" +#: ../../qt4/settingsdialog.py:1794 ../../qt4/settingsdialog.py:1854 +msgid "No config found" +msgstr "Engin stillingaskrá fannst" -#: ../../gnome/settingsdialog.glade:483 -msgid "Private key:" -msgstr "" +#: ../../qt4/snapshotsdialog.py:49 ../../qt4/snapshotsdialog.py:173 +msgid "Diff Options" +msgstr "Diff valkostir" -#: ../../gnome/settingsdialog.glade:534 -msgid "Advanced SSH Settings" -msgstr "" +#: ../../qt4/snapshotsdialog.py:56 +msgid "Command:" +msgstr "Skipun:" -#: ../../gnome/settingsdialog.glade:552 -msgid "SSH Settings" +#: ../../qt4/snapshotsdialog.py:60 +msgid "Parameters:" +msgstr "Viðföng:" + +#: ../../qt4/snapshotsdialog.py:64 +msgid "Use %1 and %2 for path parameters" msgstr "" -#: ../../gnome/settingsdialog.glade:815 -msgid "Password" +#: ../../qt4/snapshotsdialog.py:106 +msgid "List only different snapshots" msgstr "" -#: ../../gnome/settingsdialog.glade:930 -msgid "Profile Id:" -msgstr "Auðkenni sniðs:" +#: ../../qt4/snapshotsdialog.py:113 +msgid "List only equal snapshots to: " +msgstr "" -#: ../../gnome/settingsdialog.glade:1115 -msgid "" -"hours seperate by comma ( e.g. 8,12,18,23) or */3 for periodic backups every " -"3 hours (cron style)" +#: ../../qt4/snapshotsdialog.py:123 +msgid "Deep check (more accurate, but slow)" msgstr "" -#: ../../gnome/settingsdialog.glade:1163 -msgid "Schedule" -msgstr "Vinnuáætlun" +#: ../../qt4/snapshotsdialog.py:144 +msgid "Delete" +msgstr "Eyða" + +#: ../../qt4/snapshotsdialog.py:148 +msgid "Select All" +msgstr "Velja allt" -#: ../../gnome/settingsdialog.glade:1363 -msgid "Highly recommended:" -msgstr "Sérstaklega mælt með:" +#: ../../qt4/snapshotsdialog.py:161 +msgid "Diff" +msgstr "Diff" -#: ../../gnome/settingsdialog.glade:1377 -msgid "label" -msgstr "skýring" +#: ../../qt4/snapshotsdialog.py:172 +msgid "Go To" +msgstr "Fara í" -#: ../../gnome/settingsdialog.glade:1755 -msgid "week(s)" -msgstr "" +#: ../../qt4/snapshotsdialog.py:326 +msgid "You can't compare a snapshot to itself" +msgstr "Þú getur ekki borið skyndiafrit saman við sjálft sig" -#: ../../gnome/settingsdialog.glade:2069 -msgid "Log level:" -msgstr "Annálsstig:" +#: ../../qt4/snapshotsdialog.py:333 +#, python-format +msgid "Command not found: %s" +msgstr "Skipun fannst ekki: %s" -#: ../../gnome/settingsdialog.glade:2121 +#: ../../qt4/snapshotsdialog.py:354 +#, python-format msgid "" -"Change these options only if you really know what you are doing !" +"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" msgstr "" -"EKKI breyta þessum stillingum nema að þú vitir hvað þú ert að gera !" -#: ../../gnome/snapshotsdialog.glade:263 -msgid "Diff with" -msgstr "Sameina (diff) við" +#: ../../qt4/snapshotsdialog.py:357 +#, python-format +msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +msgstr "" -#: ../../gnome/textinputdialog.glade:7 -msgid "Pattern" -msgstr "Mynstur" +#: ../../qt4/snapshotsdialog.py:359 +msgid "WARNING: This can not be revoked!" +msgstr "" -#: ../../gnome/textinputdialog.glade:70 -msgid "Text" +#: ../../qt4/snapshotsdialog.py:374 +#, python-format +msgid "Exclude \"%s\" from future snapshots?" msgstr "" diff -Nru backintime-1.0.36/common/po/it.po backintime-1.1.12/common/po/it.po --- backintime-1.0.36/common/po/it.po 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/po/it.po 2016-01-11 18:07:58.000000000 +0000 @@ -7,206 +7,238 @@ msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2013-11-09 22:34+0100\n" -"PO-Revision-Date: 2012-12-09 20:11+0000\n" -"Last-Translator: matrobriva \n" +"POT-Creation-Date: 2015-12-19 00:47+0100\n" +"PO-Revision-Date: 2016-01-08 23:45+0000\n" +"Last-Translator: name.surname1971 \n" "Language-Team: Italian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2014-08-06 10:20+0000\n" -"X-Generator: Launchpad (build 17147)\n" +"X-Launchpad-Export-Date: 2016-01-11 17:52+0000\n" +"X-Generator: Launchpad (build 17881)\n" -#: ../../common/config.py:286 +#: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "Impossibile includere la cartella di backup !" -#: ../../common/config.py:72 +#: ../../common/configfile.py:60 +#, python-format +msgid "Failed to save config: %s" +msgstr "Fallimento nel salvataggio della configurazione: %s" + +#: ../../common/configfile.py:78 +#, python-format +msgid "Failed to load config: %s" +msgstr "Fallimento nel caricamento della configurazione: %s" + +#: ../../common/configfile.py:352 ../../common/configfile.py:414 +#, python-format +msgid "Profile \"%s\" already exists !" +msgstr "Il profilo \"%s\" esiste già !" + +#: ../../common/configfile.py:383 +msgid "You can't remove the last profile !" +msgstr "Non si può rimuovere l'ultimo profilo !" + +#: ../../common/config.py:76 msgid "Disabled" msgstr "Disabilitato" -#: ../../common/config.py:73 +#: ../../common/config.py:77 msgid "At every boot/reboot" msgstr "Ad ogni avvio/riavvio" -#: ../../common/config.py:74 +#: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Ogni 5 minuti" -#: ../../common/config.py:75 +#: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Ogni 10 minuti" -#: ../../common/config.py:76 +#: ../../common/config.py:80 msgid "Every 30 minutes" -msgstr "" +msgstr "Ogni 30 minuti" -#: ../../common/config.py:77 +#: ../../common/config.py:81 msgid "Every hour" -msgstr "" +msgstr "Ogni ora" -#: ../../common/config.py:78 +#: ../../common/config.py:82 msgid "Every 2 hours" -msgstr "" +msgstr "Ogni 2 ore" -#: ../../common/config.py:79 +#: ../../common/config.py:83 msgid "Every 4 hours" -msgstr "" +msgstr "Ogni 4 ore" -#: ../../common/config.py:80 +#: ../../common/config.py:84 msgid "Every 6 hours" -msgstr "" +msgstr "Ogni 6 ore" -#: ../../common/config.py:81 +#: ../../common/config.py:85 msgid "Every 12 hours" -msgstr "" +msgstr "Ogni 12 ore" -#: ../../common/config.py:82 +#: ../../common/config.py:86 msgid "Custom Hours" -msgstr "" +msgstr "Orario personalizzato" -#: ../../common/config.py:83 +#: ../../common/config.py:87 msgid "Every Day" msgstr "Ogni giorno" -#: ../../common/config.py:84 -msgid "Daily (anacron)" -msgstr "" +#: ../../common/config.py:88 +msgid "Repeatedly (anacron)" +msgstr "Ripetutamente (anacron)" -#: ../../common/config.py:85 +#: ../../common/config.py:89 msgid "When drive get connected (udev)" -msgstr "" +msgstr "Quando il drive è connesso (udev)" -#: ../../common/config.py:86 +#: ../../common/config.py:90 msgid "Every Week" msgstr "Ogni settimana" -#: ../../common/config.py:87 +#: ../../common/config.py:91 msgid "Every Month" msgstr "Ogni mese" -#: ../../common/config.py:91 +#: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Giorno(i)" -#: ../../common/config.py:92 +#: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Settimana(e)" -#: ../../common/config.py:93 +#: ../../common/config.py:97 msgid "Year(s)" msgstr "Anno(i)" -#: ../../common/config.py:100 +#: ../../common/config.py:101 +msgid "Hour(s)" +msgstr "Ora(e)" + +#: ../../common/config.py:104 +msgid "Month(s)" +msgstr "Mese(i)" + +#: ../../common/config.py:126 ../../qt4/settingsdialog.py:551 msgid " EXPERIMENTAL!" -msgstr "" +msgstr " SPERIMENTALE!" -#: ../../common/config.py:103 +#: ../../common/config.py:129 msgid "Local" -msgstr "" +msgstr "Locale" -#: ../../common/config.py:104 +#: ../../common/config.py:130 msgid "SSH" -msgstr "" +msgstr "SSH" -#: ../../common/config.py:104 ../../common/config.py:106 -#: ../../gnome/settingsdialog.py:475 ../../kde4/settingsdialog.py:1325 +#: ../../common/config.py:130 ../../common/config.py:132 +#: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" -msgstr "" +msgstr "Chiave privata SSH" -#: ../../common/config.py:105 +#: ../../common/config.py:131 msgid "Local encrypted" -msgstr "" +msgstr "Cifratura locale" -#: ../../common/config.py:105 ../../common/config.py:106 +#: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" -msgstr "" +msgstr "Cifratura" -#: ../../common/config.py:106 +#: ../../common/config.py:132 msgid "SSH encrypted" -msgstr "" +msgstr "SSH cifrato" -#: ../../common/config.py:112 +#: ../../common/config.py:135 msgid "Default" -msgstr "" +msgstr "Predefinito" -#: ../../common/config.py:113 +#: ../../common/config.py:136 msgid "AES128-CTR" -msgstr "" +msgstr "AES128-CTR" -#: ../../common/config.py:114 +#: ../../common/config.py:137 msgid "AES192-CTR" -msgstr "" +msgstr "AES192-CTR" -#: ../../common/config.py:115 +#: ../../common/config.py:138 msgid "AES256-CTR" -msgstr "" +msgstr "AES256-CTR" -#: ../../common/config.py:116 +#: ../../common/config.py:139 msgid "ARCFOUR256" -msgstr "" +msgstr "ARCFOUR256" -#: ../../common/config.py:117 +#: ../../common/config.py:140 msgid "ARCFOUR128" -msgstr "" +msgstr "ARCFOUR128" -#: ../../common/config.py:118 +#: ../../common/config.py:141 msgid "AES128-CBC" -msgstr "" +msgstr "AES128-CBC" -#: ../../common/config.py:119 +#: ../../common/config.py:142 msgid "3DES-CBC" -msgstr "" +msgstr "3DES-CBC" -#: ../../common/config.py:120 +#: ../../common/config.py:143 msgid "Blowfish-CBC" -msgstr "" +msgstr "Blowfish-CBC" -#: ../../common/config.py:121 +#: ../../common/config.py:144 msgid "Cast128-CBC" -msgstr "" +msgstr "Cast128-CBC" -#: ../../common/config.py:122 +#: ../../common/config.py:145 msgid "AES192-CBC" -msgstr "" +msgstr "AES192-CBC" -#: ../../common/config.py:123 +#: ../../common/config.py:146 msgid "AES256-CBC" -msgstr "" +msgstr "AES256-CBC" -#: ../../common/config.py:124 +#: ../../common/config.py:147 msgid "ARCFOUR" -msgstr "" +msgstr "ARCFOUR" -#: ../../common/config.py:129 +#: ../../common/config.py:153 msgid "Main profile" msgstr "Profilo principale" -#: ../../common/config.py:256 ../../common/config.py:275 -#: ../../common/config.py:286 ../../common/config.py:291 +#: ../../common/config.py:289 ../../common/config.py:296 +#: ../../common/config.py:307 ../../common/config.py:312 +#: ../../qt4/qt4systrayicon.py:61 #, python-format msgid "Profile: \"%s\"" msgstr "Profilo: \"%s\"" -#: ../../common/config.py:256 +#: ../../common/config.py:289 msgid "Snapshots folder is not valid !" msgstr "Cartella delle istantanee non valida !" -#: ../../common/config.py:275 +#: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "Scegliere almeno una cartella per il backup !" -#: ../../common/config.py:291 +#: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "Impossibile includere una sottocartella di backup !" -#: ../../common/config.py:361 +#: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s non è una cartella !" -#: ../../common/config.py:376 ../../common/config.py:389 +#: ../../common/config.py:380 +msgid "Host/User/Profile-ID must not be empty!" +msgstr "Host/Utente/Profilo non può essere vuoto!" + +#: ../../common/config.py:388 ../../common/config.py:420 #, python-format msgid "" "Can't write to: %s\n" @@ -215,162 +247,195 @@ "Impossibile accedere a: %s\n" "Verificare di avere i permessi in scrittura?" -#: ../../common/config.py:1286 +#: ../../common/config.py:400 +#, python-format msgid "" -"Can't find crontab.\n" -"Are you sure cron is installed ?\n" -"If not you should disable all automatic backups." +"Destination filesystem for '%(path)s' is formatted with FAT which doesn't " +"support hard-links. Please use a native Linux filesystem." msgstr "" -"Impossibile trovare la crontab.\n" -"Verificare che cron sia installato ?\n" -"Se non lo è, disattivare tutti i backup automatici." +"Il filesystem di destinazione per '%(path)s' è formattato con FAT che non " +"supporta hard-link. Per favore usa un filesystem Linux nativo." -#: ../../common/config.py:1338 +#: ../../common/config.py:405 #, python-format -msgid "Schedule udev doesn't work with mode %s" +msgid "" +"Destination filsystem for '%(path)s' is a SMB mounted share. Please make " +"sure the remote SMB server supports symlinks or activate '%(copyLinks)s' in " +"'%(expertOptions)s'." msgstr "" -#: ../../common/config.py:1342 -#, python-format -msgid "Couldn't find UUID for \"%s\"" -msgstr "" +#: ../../common/config.py:408 ../../qt4/settingsdialog.py:815 +msgid "Copy links (dereference symbolic links)" +msgstr "Copia collegamenti (segue i collegamenti simbolici)" -#: ../../common/config.py:1379 -msgid "Failed to remove udev rules" -msgstr "" +#: ../../common/config.py:409 ../../qt4/settingsdialog.py:669 +msgid "Expert Options" +msgstr "Opzioni per esperti" -#: ../../common/config.py:1385 -msgid "Failed to create udev rules" +#: ../../common/config.py:411 +#, python-format +msgid "" +"Destination filesystem for '%(path)s is a sshfs mounted share. sshfs doesn't " +"support hard-links. Please use mode 'SSH' instead." msgstr "" -#: ../../common/config.py:1420 +#: ../../common/config.py:1407 msgid "" -"Can't find anacron.\n" -"Are you sure anacron is installed ?\n" -"If not you should disable daily anacron backups." +"Can't find crontab.\n" +"Are you sure cron is installed ?\n" +"If not you should disable all automatic backups." msgstr "" +"Impossibile trovare la crontab.\n" +"Verificare che cron sia installato ?\n" +"Se non lo è, disattivare tutti i backup automatici." -#: ../../common/config.py:1439 -msgid "Please provide your sudo password to install the udev rule." -msgstr "" +#: ../../common/config.py:1411 +msgid "Failed to write new crontab." +msgstr "Scrittura del nuovo crontab fallita" -#: ../../common/config.py:1445 -msgid "Please provide your sudo password to remove unused udev rules." +#: ../../common/config.py:1505 +#, python-format +msgid "" +"Could not install Udev rule for profile %(profile_id)s. DBus Service " +"'%(dbus_interface)s' wasn't available" msgstr "" +"Non è stato possibile installare la regola udev per il profilo " +"%(profile_id)s. Il servizio DBus '%(dbus_interface)s' non era disponibile" -#: ../../common/configfile.py:253 ../../common/configfile.py:315 +#: ../../common/config.py:1517 #, python-format -msgid "Profile \"%s\" already exists !" -msgstr "Il profilo \"%s\" esiste già !" +msgid "Schedule udev doesn't work with mode %s" +msgstr "La pianificazione udev non funziona con la modalità %s" -#: ../../common/configfile.py:284 -msgid "You can't remove the last profile !" -msgstr "Non si può rimuovere l'ultimo profilo !" +#: ../../common/config.py:1526 +#, python-format +msgid "Couldn't find UUID for \"%s\"" +msgstr "Impossibile trovare UUID per \"%s\"" -#: ../../common/encfstools.py:95 +#: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" "\n" "%(error)s" msgstr "" +"Non posso montare '%(command)s':\n" +"\n" +"%(error)s" -#: ../../common/encfstools.py:105 +#: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" -msgstr "" +msgstr "Non posso smontare encfs %s" -#: ../../common/encfstools.py:149 +#: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." -msgstr "" +msgstr "Configurazione per cartella cifrata non trovata" -#: ../../common/encfstools.py:153 +#: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" +"\n" +"Creo una nuova cartella cifrata?" -#: ../../common/encfstools.py:154 +#: ../../common/encfstools.py:171 msgid "Cancel" -msgstr "" +msgstr "Annulla" -#: ../../common/encfstools.py:157 +#: ../../common/encfstools.py:174 msgid "Please confirm password" -msgstr "" +msgstr "Per favore conferma la password" -#: ../../common/encfstools.py:161 +#: ../../common/encfstools.py:178 msgid "Password doesn't match" -msgstr "" +msgstr "La password non combacia" -#: ../../common/encfstools.py:166 +#: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" +"encfs non trovato. Per favore installalo e.g. 'apt-get install encfs'" -#: ../../common/encfstools.py:174 ../../common/sshtools.py:207 +#: ../../common/encfstools.py:196 ../../common/sshtools.py:262 #, python-format msgid "" "%(user)s is not member of group 'fuse'.\n" " Run 'sudo adduser %(user)s fuse'. To apply changes logout and login again.\n" "Look at 'man backintime' for further instructions." msgstr "" +"%(user)s non è un membro del gruppo'fuse'.\n" +"Esegui 'sudo adduser %(user)s fuse'. Per applicare le modifiche, fai logout " +"e di nuovo login.\n" +"Guarda 'man backintime' per ulteriori istruzioni." -#: ../../common/encfstools.py:189 +#: ../../common/encfstools.py:211 msgid "" "encfs version 1.7.2 and before has a bug with option --reverse. Please " "update encfs" msgstr "" +"la versione di encfs 1.7.2 e precedenti ha un baco con l'opzione --reverse. " +"Per favore aggiorna encfs" -#: ../../common/encfstools.py:453 ../../common/encfstools.py:480 -#: ../../common/snapshots.py:982 ../../common/snapshots.py:1288 -#: ../../kde4/app.py:82 ../../gnome/mainwindow.glade:43 +#: ../../common/encfstools.py:512 ../../common/snapshots.py:1131 +#: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "Prendi istantanea" -#: ../../common/mount.py:195 +#: ../../common/mount.py:204 #, python-format msgid "" "Hash collision occurred in hash_id %s. Incrementing global value " "hash_collision and try again." msgstr "" +"Collisione creata in hash_id %s. Incrementail valore globale hash_collision " +"e prova di nuovo" -#: ../../common/mount.py:246 +#: ../../common/mount.py:259 #, python-format msgid "mountpoint %s not empty." -msgstr "" +msgstr "In punto di montaggio %s non è vuoto" -#: ../../common/mount.py:286 +#: ../../common/mount.py:296 msgid "Mountprocess lock timeout" -msgstr "" +msgstr "Timeout nell'acquisizione del lock durante il processo di mount" -#: ../../common/password.py:425 +#: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " -msgstr "" +msgstr "Profilo '%(profile)s': Inserisci la password per %(mode)s: " -#: ../../common/snapshots.py:171 ../../gnome/app.py:1127 -#: ../../kde4/app.py:1014 +#: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Adesso" -#: ../../common/snapshots.py:182 ../../gnome/gnometools.py:37 +#: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "CON ERRORI !" -#: ../../common/snapshots.py:282 +#: ../../common/snapshots.py:344 msgid "" "### This log has been decoded with automatic search pattern\n" "### If some paths are not decoded you can manually decode them with:\n" msgstr "" +"### Questo log è stato decodificato con un pattern di ricerca automatico\n" +"### Se alcuni percorsi non sono decodificati, puoi decodificarli manualmente " +"con:\n" -#: ../../common/snapshots.py:465 +#: ../../common/snapshots.py:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "Fallito" -#: ../../common/snapshots.py:564 +#: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "Ripristina permessi:" -#: ../../common/snapshots.py:739 +#: ../../common/snapshots.py:752 ../../qt4/app.py:377 ../../qt4/app.py:675 +#: ../../qt4/app.py:692 ../../qt4/qt4systrayicon.py:65 +msgid "Done" +msgstr "Fatto" + +#: ../../common/snapshots.py:860 msgid "" "Back In Time changed its backup format.\n" "\n" @@ -381,7 +446,7 @@ "Le vecchie istantanee possono essere spostate secondo il nuovo formato. " "Continuare?" -#: ../../common/snapshots.py:749 +#: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" @@ -399,7 +464,7 @@ "\n" "(L'applicazione sarà comunque in grado di distinguerli)" -#: ../../common/snapshots.py:752 +#: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" @@ -407,7 +472,7 @@ "Nessun profilo trovato. È prima necessario aggiornare i profili, riavviare " "Back In Time" -#: ../../common/snapshots.py:803 +#: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" @@ -419,8 +484,17 @@ "If not Back In Time will restore former settings for this profile, however " "cannot continue taking snapshots" msgstr "" +"%(snapshots_left)s\n" +"del profilo %(profile_id)s non sono spostati nella loro nuova posizione\n" +"Vuoi procedere?\n" +"(Back In Time sarà in grado di continuare a prendere istantanee, tuttavia le " +"istantanee rimanenti non saranno prese in considerazione per la rimozione " +"automatica)\n" +"\n" +"In caso contrario, Back In Time ripristinerà le impostazioni precedenti per " +"questo profilo, tuttavia non può continuare a prendere istantanee" -#: ../../common/snapshots.py:812 +#: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" @@ -435,7 +509,7 @@ "È possibile spostare manualmente le istantanee, \n" "una volta terminato riavviare Back In Time per proseguire" -#: ../../common/snapshots.py:825 +#: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" @@ -445,7 +519,7 @@ "\n" "Back In Time continuerà a prendere istantanee come programmato" -#: ../../common/snapshots.py:830 +#: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" @@ -465,12 +539,12 @@ "\n" "Se no, questa domanda verrà mostrata nuovamente all'avvio di Back In Time." -#: ../../common/snapshots.py:839 +#: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "" "Back In Time will continuerà a prendere le istantanee come programmato" -#: ../../common/snapshots.py:841 +#: ../../common/snapshots.py:953 msgid "" "Back In Time still cannot continue taking new snapshots.\n" "Restart Back In Time to see the questions again" @@ -478,7 +552,11 @@ "Back In Time non può continuare a prendere istantanee.\n" "Riavviare Back In Time per visualizzare nuovamente le domande" -#: ../../common/snapshots.py:913 +#: ../../common/snapshots.py:972 +msgid "Deferring backup while on battery" +msgstr "Posticipa il backup nel caso di funzionamento a batteria" + +#: ../../common/snapshots.py:1035 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it." @@ -486,261 +564,353 @@ "Impossibile trovare la cartella delle istantanee.\n" "Se si tratta di un disco rimovibile, collegarlo." -#: ../../common/snapshots.py:915 +#: ../../common/snapshots.py:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "Aspetta %s secondo." msgstr[1] "Aspetta %s secondi." -#: ../../common/snapshots.py:941 +#: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "Creazione dell'istantanea %s fallita !" -#: ../../common/snapshots.py:950 +#: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "Finalizzazione" -#: ../../common/snapshots.py:1088 +#: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "Impossibile creare la cartella: %s" -#: ../../common/snapshots.py:1107 +#: ../../common/snapshots.py:1217 msgid "..." msgstr "..." -#: ../../common/snapshots.py:1134 +#: ../../common/snapshots.py:1238 +#, python-format +msgid "Found leftover '%s' which can be continued." +msgstr "" + +#: ../../common/snapshots.py:1250 +#, python-format +msgid "Remove leftover '%s' folder from last run" +msgstr "" + +#: ../../common/snapshots.py:1263 #, python-format msgid "Can't remove folder: %s" msgstr "Impossibile eliminare la cartella: %s" -#: ../../common/snapshots.py:1219 +#: ../../common/snapshots.py:1340 #, python-format msgid "Compare with snapshot %s" msgstr "Confronta con l'istantanea %s" -#: ../../common/snapshots.py:1248 +#: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "Crea hard-links" -#: ../../common/snapshots.py:1335 +#: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "Salva il file di configurazione .." -#: ../../common/snapshots.py:1341 +#: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "Salva permessi ..." -#: ../../common/snapshots.py:1442 +#: ../../common/snapshots.py:1470 +msgid "Save permission over ssh failed. Retry normal method" +msgstr "" +"Il salvataggio dei permessi via SSH è fallito. Riprova il metodo normale" + +#: ../../common/snapshots.py:1521 #, python-format msgid "Can't rename %(new_path)s to %(path)s" -msgstr "" +msgstr "Non posso rinominare %(new_path)s in %(path)s" + +#: ../../common/snapshots.py:1695 ../../common/snapshots.py:1728 +#: ../../qt4/settingsdialog.py:542 +msgid "Smart remove" +msgstr "Rimozione intelligente" -#: ../../common/snapshots.py:1562 +#: ../../common/snapshots.py:1704 msgid "Remove old snapshots" msgstr "Rimuovi vecchie istantanee" -#: ../../common/snapshots.py:1586 ../../kde4/settingsdialog.py:501 -#: ../../gnome/settingsdialog.glade:1660 -msgid "Smart remove" -msgstr "Rimozione comoda" - -#: ../../common/snapshots.py:1591 +#: ../../common/snapshots.py:1733 msgid "Try to keep min free space" msgstr "Prova a tenere il minor spazio libero" -#: ../../common/snapshots.py:1621 +#: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" -msgstr "" +msgstr "Prova a mantenere almeno il %d%% di inode liberi" -#: ../../common/sshtools.py:106 +#: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" -msgstr "" +msgstr "Non riesco a montare %s" -#: ../../common/sshtools.py:113 +#: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" -msgstr "" - -#: ../../common/sshtools.py:187 -#, python-format -msgid "" -"Failed to unlock SSH private key:\n" -"Error: %s" -msgstr "" +msgstr "Non riesco a smontare sshfs %s" -#: ../../common/sshtools.py:194 +#: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" +"Non ho potuto sbloccare la chiave privata ssh. Password errata o non " +"disponibile per cron." -#: ../../common/sshtools.py:199 +#: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" +"sshfs non trovato. Per favore installalo ad esempio con 'apt-get install " +"sshfs'" -#: ../../common/sshtools.py:217 +#: ../../common/sshtools.py:278 #, python-format msgid "" "Password-less authentication for %(user)s@%(host)s failed. Look at 'man " "backintime' for further instructions." msgstr "" +"Autenticazione senza password per %(user)s@%(host)s fallita. Guarda 'man " +"backintime' per ulteriori istruzioni." -#: ../../common/sshtools.py:229 +#: ../../common/sshtools.py:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" +"Cifratura %(cipher)s fallita per %(host)s:\n" +"%(err)s" -#: ../../common/sshtools.py:254 +#: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." -msgstr "" +msgstr "%s non trovato in ssh_known_hosts." -#: ../../common/sshtools.py:274 +#: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" +"Il percorso remoto esiste, ma non è una cartella:\n" +" %s" -#: ../../common/sshtools.py:276 +#: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" +"Il percorso remoto non è scrivibile:\n" +" %s" -#: ../../common/sshtools.py:278 +#: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" +"Il percorso remoto non è eseguibile:\n" +" %s" -#: ../../common/sshtools.py:280 +#: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" +"Non ho potuto create il percorso remoto:\n" +" %s" -#: ../../common/sshtools.py:302 +#: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" +"Il ping verso %s è fallito. L'host non funziona o l'indirizzo è sbagliato." -#: ../../common/sshtools.py:325 ../../common/sshtools.py:383 +#: ../../common/sshtools.py:423 ../../common/sshtools.py:553 #, python-format msgid "" "Remote host %(host)s doesn't support '%(command)s':\n" "%(err)s\n" "Look at 'man backintime' for further instructions" msgstr "" +"L'host remoto %(host)s non supporta '%(command)s':\n" +"%(err)s\n" +"Guarda 'man backintime' per ulteriori istruzioni" -#: ../../common/sshtools.py:387 +#: ../../common/sshtools.py:556 #, python-format msgid "" "Check commands on host %(host)s returned unknown error:\n" "%(err)s\n" "Look at 'man backintime' for further instructions" msgstr "" +"Il controllo dei comandi sull'host %(host)s ha restituito un errore " +"sconosciuto:\n" +"%(err)s\n" +"Guarda 'man backintime' per ulteriori istruzioni" -#: ../../common/sshtools.py:400 +#: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" -msgstr "" +msgstr "L'host remoto %s non supporta gli hard link" -#: ../../gnome/app.py:185 ../../gnome/app.py:594 ../../gnome/app.py:608 -#: ../../kde4/app.py:299 ../../kde4/app.py:570 ../../kde4/app.py:587 -msgid "Done" -msgstr "Fatto" +#: ../../qt4/app.py:81 +msgid "Refresh snapshots list" +msgstr "Aggiorna lista istantanee" + +#: ../../qt4/app.py:85 ../../qt4/app.py:890 +msgid "Snapshot Name" +msgstr "Nome istantanea" + +#: ../../qt4/app.py:88 +msgid "Remove Snapshot" +msgstr "Rimuovi istantanea" + +#: ../../qt4/app.py:91 +msgid "View Snapshot Log" +msgstr "Visualizza log istantanea" + +#: ../../qt4/app.py:94 +msgid "View Last Log" +msgstr "Visualizza ultimo log" -#: ../../gnome/app.py:189 ../../kde4/app.py:143 ../../kde4/app.py:159 -#: ../../gnome/mainwindow.glade:225 +#: ../../qt4/app.py:99 ../../qt4/settingsdialog.py:51 +msgid "Settings" +msgstr "Impostazioni" + +#: ../../qt4/app.py:104 +msgid "Shutdown" +msgstr "Arresto" + +#: ../../qt4/app.py:105 +msgid "Shutdown system after snapshot has finished." +msgstr "Arresta il sistema quando l'istantanea è terminata." + +#: ../../qt4/app.py:111 +msgid "Exit" +msgstr "Esci" + +#: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 msgid "Help" msgstr "Aiuto" -#: ../../gnome/app.py:191 ../../kde4/app.py:146 -#: ../../gnome/mainwindow.glade:223 +#: ../../qt4/app.py:122 +msgid "Config File Help" +msgstr "Guida al file di configurazione" + +#: ../../qt4/app.py:125 msgid "Website" msgstr "Sito web" -#: ../../gnome/app.py:192 ../../kde4/app.py:148 +#: ../../qt4/app.py:127 ../../qt4/app.py:982 +msgid "Changelog" +msgstr "Registro dei cambiamenti" + +#: ../../qt4/app.py:129 msgid "FAQ" -msgstr "" +msgstr "Domande frequenti" -#: ../../gnome/app.py:193 ../../kde4/app.py:150 +#: ../../qt4/app.py:131 msgid "Ask a question" -msgstr "" +msgstr "Poni una domanda" -#: ../../gnome/app.py:194 ../../kde4/app.py:152 +#: ../../qt4/app.py:133 msgid "Report a bug" -msgstr "" +msgstr "Segnala un bug" -#: ../../gnome/app.py:196 ../../kde4/app.py:155 +#: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "Informazioni" -#: ../../gnome/app.py:202 ../../gnome/app.py:887 -#: ../../gnome/restoredialog.py:84 ../../gnome/snapshotsdialog.py:83 -#: ../../gnome/snapshotsdialog.py:244 ../../kde4/app.py:206 -#: ../../kde4/app.py:216 ../../kde4/restoredialog.py:68 -#: ../../kde4/snapshotsdialog.py:111 ../../kde4/snapshotsdialog.py:117 -#: ../../gnome/mainwindow.glade:350 ../../gnome/mainwindow.glade:352 -#: ../../gnome/snapshotsdialog.glade:169 ../../gnome/snapshotsdialog.glade:171 +#: ../../qt4/app.py:163 +msgid "Up" +msgstr "Su" + +#: ../../qt4/app.py:174 ../../qt4/settingsdialog.py:1776 +msgid "Show hidden files" +msgstr "Mostrare file nascosti" + +#: ../../qt4/app.py:184 ../../qt4/app.py:199 ../../qt4/app.py:233 +#: ../../qt4/restoredialog.py:62 ../../qt4/settingsdialog.py:1818 +#: ../../qt4/snapshotsdialog.py:134 ../../qt4/snapshotsdialog.py:139 msgid "Restore" msgstr "Ripristina" -#: ../../gnome/app.py:203 ../../gnome/app.py:888 ../../gnome/gnometools.py:67 -#: ../../gnome/snapshotsdialog.py:84 ../../gnome/snapshotsdialog.py:245 -#: ../../kde4/app.py:208 ../../kde4/restoredialog.py:42 -#: ../../kde4/snapshotsdialog.py:113 +#: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 +#: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "Ripristina a..." -#: ../../gnome/app.py:205 ../../gnome/app.py:896 ../../gnome/app.py:1146 -#: ../../kde4/app.py:1041 -#, python-format -msgid "Restore '%s'" -msgstr "Ripristina '%s'" +#: ../../qt4/app.py:194 +msgid "Restore and delete new files" +msgstr "Ripristina e cancella i file nuovi" -#: ../../gnome/app.py:207 ../../gnome/app.py:897 ../../gnome/app.py:1147 -#: ../../kde4/app.py:1042 +#: ../../qt4/app.py:201 #, python-format -msgid "Restore '%s' to ..." -msgstr "Riporta '%s' a..." +msgid "" +"Restore selected file or folder.\n" +"If this button is grayed out this is most likely because \"%(now)s\" is " +"selected in left hand snapshots list." +msgstr "" +"Ripristina il file o la cartella selezionato/a.\n" +"Se il pulsante è disabilitato molto probabilmente è perché \"%(now)s\" è " +"selezionato nell'elenco delle istantanee sulla sinistra." + +#: ../../qt4/app.py:206 ../../qt4/logviewdialog.py:67 +#: ../../qt4/qt4tools.py:160 ../../qt4/snapshotsdialog.py:96 +msgid "Snapshots" +msgstr "Istantanee" + +#: ../../qt4/app.py:213 +msgid "Snapshot" +msgstr "Istantanea" + +#: ../../qt4/app.py:224 +msgid "View" +msgstr "Visualizza" -#: ../../gnome/app.py:226 ../../kde4/app.py:235 +#: ../../qt4/app.py:277 msgid "Shortcuts" msgstr "Collegamenti" -#: ../../gnome/app.py:249 -msgid "Name" -msgstr "Nome" - -#: ../../gnome/app.py:260 -msgid "Size" -msgstr "Dimensione" - -#: ../../gnome/app.py:267 -msgid "Date" -msgstr "Data" - -#: ../../gnome/app.py:286 ../../gnome/app.py:883 -#: ../../gnome/snapshotsdialog.py:116 ../../kde4/app.py:171 -#: ../../kde4/app.py:221 ../../kde4/snapshotsdialog.py:91 -#: ../../gnome/mainwindow.glade:366 ../../gnome/mainwindow.glade:368 -#: ../../gnome/snapshotsdialog.glade:8 -msgid "Snapshots" -msgstr "Istantanee" +#: ../../qt4/app.py:295 +msgid "" +"This folder doesn't exist\n" +"in the current selected snapshot!" +msgstr "" +"Questa cartella non esiste\n" +"nello snapshot selezionato al momento!" + +#: ../../qt4/app.py:359 +msgid "Add to Include" +msgstr "Aggiungi alle inclusioni" + +#: ../../qt4/app.py:360 +msgid "Add to Exclude" +msgstr "Aggiungi alle esclusioni" -#: ../../gnome/app.py:348 ../../kde4/app.py:362 +#: ../../qt4/app.py:416 +#, python-format +msgid "" +"%(appName)s is not configured. Would you like to restore a previous " +"configuration?" +msgstr "" +"%(appName)s non è configurato. Vuoi ripristinare una precedente " +"configurazione?" + +#: ../../qt4/app.py:440 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it and then press OK" @@ -748,737 +918,860 @@ "Impossibile trovare la cartella delle istantanee.\n" "Se si tratta di un disco rimovibile, collegarlo e premere OK" -#: ../../gnome/app.py:611 ../../kde4/app.py:590 -msgid "Done, no backup needed" -msgstr "Fatto, nessun backup necessario" +#: ../../qt4/app.py:473 +msgid "" +"If you close this window Back In Time will not be able to shutdown your " +"system when the snapshot has finished.\n" +"Do you really want to close?" +msgstr "" +"Se chiudi questa finestra Back In Time non sarà in grado di arrestare il " +"sistema al termine dell'istantanea.\n" +"Vuoi veramente chiuderla?" -#: ../../gnome/app.py:619 ../../kde4/app.py:598 +#: ../../qt4/app.py:667 ../../qt4/app.py:703 msgid "Working:" msgstr "Lavoro in corso:" -#: ../../gnome/app.py:623 ../../kde4/app.py:602 +#: ../../qt4/app.py:695 +msgid "Done, no backup needed" +msgstr "Fatto, nessun backup necessario" + +#: ../../qt4/app.py:707 msgid "Error:" msgstr "Errore:" -#: ../../gnome/app.py:636 ../../kde4/app.py:649 +#: ../../qt4/app.py:726 ../../qt4/qt4systrayicon.py:153 +msgid "Sent:" +msgstr "Inviati:" + +#: ../../qt4/app.py:727 ../../qt4/qt4systrayicon.py:154 +msgid "Speed:" +msgstr "Velocità:" + +#: ../../qt4/app.py:728 ../../qt4/qt4systrayicon.py:155 +msgid "ETA:" +msgstr "Tempo rimanente stimato:" + +#: ../../qt4/app.py:777 msgid "Global" msgstr "Globale" -#: ../../gnome/app.py:637 ../../kde4/app.py:650 +#: ../../qt4/app.py:778 msgid "Root" msgstr "Root" -#: ../../gnome/app.py:638 ../../kde4/app.py:651 +#: ../../qt4/app.py:779 msgid "Home" msgstr "Home" -#: ../../gnome/app.py:662 -msgid "Bookmarks" -msgstr "Segnalibri" - -#: ../../gnome/app.py:675 ../../kde4/app.py:662 +#: ../../qt4/app.py:794 msgid "Backup folders" msgstr "Cartelle di backup" -#: ../../gnome/app.py:701 ../../kde4/app.py:734 -msgid "Today" -msgstr "Oggi" - -#: ../../gnome/app.py:705 ../../kde4/app.py:738 -msgid "Yesterday" -msgstr "Ieri" - -#: ../../gnome/app.py:709 ../../kde4/app.py:742 -msgid "This week" -msgstr "Questa settimana" - -#: ../../gnome/app.py:713 ../../kde4/app.py:746 -msgid "Last week" -msgstr "Scorsa settimana" - -#: ../../gnome/app.py:764 ../../kde4/app.py:398 -msgid "" -"If you close this window Back In Time will not be able to shutdown your " -"system when the snapshot has finished.\n" -"Do you really want to close?" +#: ../../qt4/app.py:849 +msgid "This is NOT a snapshot but a live view of your local files" msgstr "" +"Questa NON è un'istantanea, bensì una vista attiva dei tuoi file locali" -#: ../../gnome/app.py:881 ../../gnome/snapshotsdialog.py:238 -msgid "Open" -msgstr "Apri" - -#: ../../gnome/app.py:1056 ../../kde4/app.py:90 ../../kde4/app.py:805 -#: ../../gnome/mainwindow.glade:73 ../../gnome/mainwindow.glade:75 -msgid "Snapshot Name" -msgstr "Nome istantanea" +#: ../../qt4/app.py:860 ../../qt4/app.py:1476 +#, python-format +msgid "Last check %s" +msgstr "Ultimo controllo %s" -#: ../../gnome/app.py:1075 +#: ../../qt4/app.py:928 #, python-format msgid "" "Are you sure you want to remove the snapshot:\n" -"%s" +"%s" msgstr "" -"Rimuovere veramente l'istantanea:\n" -"%s" +"Sei sicuro di voler rimuovere l'istantanea:\n" +"%s" -#: ../../gnome/app.py:1123 ../../kde4/app.py:1010 +#: ../../qt4/app.py:1004 #, python-format -msgid "Snapshot: %s" -msgstr "Istantanea: %s" - -#: ../../gnome/app.py:1124 ../../kde4/app.py:1011 -#, python-format -msgid "View the snapshot made at %s" -msgstr "Visualizza l'istantanea fatta il %s" - -#: ../../gnome/app.py:1126 ../../kde4/app.py:1013 -msgid "View the current disk content" -msgstr "Visualizza il contenuto corrente del disco" - -#: ../../gnome/logviewdialog.py:106 ../../gnome/settingsdialog.py:414 -#: ../../kde4/logviewdialog.py:83 ../../kde4/settingsdialog.py:590 -msgid "All" -msgstr "Tutti" - -#: ../../gnome/logviewdialog.py:107 ../../gnome/settingsdialog.py:412 -#: ../../kde4/logviewdialog.py:84 ../../kde4/settingsdialog.py:588 -msgid "Errors" -msgstr "Errori" - -#: ../../gnome/logviewdialog.py:112 ../../kde4/logviewdialog.py:89 -msgid "Changes" -msgstr "Cambiamenti" - -#: ../../gnome/logviewdialog.py:115 ../../kde4/logviewdialog.py:92 -msgid "Informations" -msgstr "Informazioni" - -#: ../../gnome/settingsdialog.py:235 ../../kde4/settingsdialog.py:387 -msgid "Include files and folders" -msgstr "Includi file e cartelle" - -#: ../../gnome/settingsdialog.py:264 -msgid "Exclude patterns, files or folders" -msgstr "Esclude pattern, file o cartelle" - -#: ../../gnome/settingsdialog.py:411 ../../kde4/settingsdialog.py:587 -msgid "None" -msgstr "Nulla" - -#: ../../gnome/settingsdialog.py:413 ../../kde4/settingsdialog.py:589 -msgid "Changes & Errors" -msgstr "Modifica & Errori" - -#: ../../gnome/settingsdialog.py:458 -msgid "Snapshots folder" -msgstr "Cartella delle istantanee" +msgid "" +"Backup local files before overwriting or\n" +"removing with trailing '%(suffix)s'." +msgstr "" +"Fai il backup dei file locali prima di sovrascriverli o\n" +"di rimuoverli aggiungendo '%(suffix)s'." -#: ../../gnome/settingsdialog.py:466 ../../kde4/settingsdialog.py:1314 -msgid "Are you sure you want to change snapshots folder ?" -msgstr "Cambiare veramente la cartella delle istantanee?" +#: ../../qt4/app.py:1010 +msgid "" +"Are you sure you want to remove all newer files in your original folder?" +msgstr "" +"Sei sicuro di voler rimuovere tutti i file più nuovi nella tua cartella " +"originale?" -#: ../../gnome/settingsdialog.py:901 ../../kde4/settingsdialog.py:914 +#: ../../qt4/app.py:1014 msgid "" -"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " -"*/3 for periodic backups every 3 hours" +"WARNING: deleting files in filesystem root could break your whole system!!!" msgstr "" +"ATTENZIONE: cancellare i file nella radice del filesystem potrebbe " +"danneggiare l'intero sistema!" -#: ../../gnome/settingsdialog.py:1141 ../../kde4/settingsdialog.py:653 -msgid "New profile" -msgstr "Nuovo profilo" +#: ../../qt4/app.py:1016 +msgid "Files to be restored:" +msgstr "File da ripristinare:" -#: ../../gnome/settingsdialog.py:1155 ../../kde4/settingsdialog.py:669 -msgid "Rename profile" -msgstr "Rinomina profilo" +#: ../../qt4/app.py:1031 +msgid "Do you really want to restore this files(s):" +msgstr "Vuoi veramente ripristinare il/i file seguente/i:" -#: ../../gnome/settingsdialog.py:1167 ../../kde4/settingsdialog.py:683 +#: ../../qt4/app.py:1226 #, python-format -msgid "Are you sure you want to delete the profile \"%s\" ?" -msgstr "Sei sicuro di voler eliminare il profilo \"%s\" ?" - -#: ../../gnome/settingsdialog.py:1173 ../../kde4/settingsdialog.py:1292 -msgid "Include folder" -msgstr "Cartella inclusa" - -#: ../../gnome/settingsdialog.py:1193 ../../kde4/settingsdialog.py:1278 -msgid "Include file" -msgstr "Includi il file" - -#: ../../gnome/settingsdialog.py:1235 ../../kde4/settingsdialog.py:1241 -msgid "Exclude pattern" -msgstr "Modello escluso" - -#: ../../gnome/settingsdialog.py:1240 ../../kde4/settingsdialog.py:1251 -msgid "Exclude patterns can't contain ':' char !" -msgstr "Escludi i modelli che non contengono il carattere \":\" !" - -#: ../../gnome/settingsdialog.py:1246 ../../kde4/settingsdialog.py:1257 -msgid "Exclude file" -msgstr "File esclusi" - -#: ../../gnome/settingsdialog.py:1257 ../../kde4/settingsdialog.py:1261 -msgid "Exclude folder" -msgstr "Cartelle Escluse" - -#: ../../gnome/snapshotsdialog.py:240 -msgid "Jump to" -msgstr "Vai a" +msgid "Snapshot: %s" +msgstr "Istantanea: %s" -#: ../../gnome/snapshotsdialog.py:248 ../../kde4/snapshotsdialog.py:164 -msgid "Diff" -msgstr "Diff" +#: ../../qt4/app.py:1227 +#, python-format +msgid "View the snapshot made at %s" +msgstr "Visualizza l'istantanea fatta il %s" -#: ../../gnome/snapshotsdialog.py:277 ../../kde4/snapshotsdialog.py:339 -msgid "You can't compare a snapshot to itself" -msgstr "Non è possibile confrontare un'istantanea con se stessa" +#: ../../qt4/app.py:1229 +msgid "View the current disk content" +msgstr "Visualizza il contenuto corrente del disco" -#: ../../gnome/snapshotsdialog.py:284 ../../kde4/snapshotsdialog.py:346 +#: ../../qt4/app.py:1268 #, python-format -msgid "Command not found: %s" -msgstr "Comando non trovato: %s" +msgid "Restore '%s'" +msgstr "Ripristina '%s'" -#: ../../gnome/snapshotsdialog.py:307 ../../kde4/snapshotsdialog.py:367 +#: ../../qt4/app.py:1269 #, python-format -msgid "" -"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" -msgstr "" +msgid "Restore '%s' to ..." +msgstr "Riporta '%s' a..." -#: ../../gnome/snapshotsdialog.py:310 ../../kde4/snapshotsdialog.py:370 +#: ../../qt4/app.py:1270 #, python-format -msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" -msgstr "" +msgid "Restore '%s' and delete new files" +msgstr "Ripristina '%s' e cancella i file nuovi" -#: ../../gnome/snapshotsdialog.py:312 ../../kde4/snapshotsdialog.py:372 -msgid "WARNING: This can not be revoked!" +#: ../../qt4/app.py:1368 ../../qt4/app.py:1385 +msgid "Authors" +msgstr "Autori" + +#: ../../qt4/app.py:1369 ../../qt4/app.py:1388 +msgid "Translations" +msgstr "Traduzioni" + +#: ../../qt4/app.py:1370 ../../qt4/app.py:1391 +msgid "License" +msgstr "Licenza" + +#: ../../qt4/logviewdialog.py:49 +msgid "Last Log View" msgstr "" -#: ../../gnome/snapshotsdialog.py:317 ../../kde4/snapshotsdialog.py:377 -#, python-format -msgid "Exclude \"%s\" from future snapshots?" +#: ../../qt4/logviewdialog.py:51 +msgid "Snapshot Log View" msgstr "" -#: ../../kde4/app.py:86 ../../gnome/mainwindow.glade:58 -#: ../../gnome/mainwindow.glade:60 -msgid "Refresh snapshots list" -msgstr "Aggiorna lista istantanee" +#: ../../qt4/logviewdialog.py:59 ../../qt4/settingsdialog.py:59 +#: ../../qt4/settingsdialog.py:274 ../../qt4/settingsdialog.py:1899 +msgid "Profile:" +msgstr "Profilo:" -#: ../../kde4/app.py:94 ../../gnome/mainwindow.glade:88 -#: ../../gnome/mainwindow.glade:90 -msgid "Remove Snapshot" -msgstr "Rimuovi istantanea" +#: ../../qt4/logviewdialog.py:81 +msgid "Filter:" +msgstr "Filtro:" -#: ../../kde4/app.py:98 ../../gnome/mainwindow.glade:105 -msgid "View Snapshot Log" -msgstr "Visualizza log istantanea" +#: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 +msgid "All" +msgstr "Tutti" -#: ../../kde4/app.py:102 ../../gnome/mainwindow.glade:121 -msgid "View Last Log" -msgstr "Visualizza ultimo log" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 +#: ../../qt4/settingsdialog.py:657 +msgid "Errors" +msgstr "Errori" -#: ../../kde4/app.py:108 ../../kde4/settingsdialog.py:69 -#: ../../gnome/mainwindow.glade:144 ../../gnome/mainwindow.glade:146 -#: ../../gnome/settingsdialog.glade:7 -msgid "Settings" -msgstr "Impostazioni" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 +msgid "Changes" +msgstr "Cambiamenti" -#: ../../kde4/app.py:124 ../../gnome/mainwindow.glade:169 -msgid "Shutdown system after snapshot has finished." -msgstr "" +#: ../../qt4/logviewdialog.py:92 +msgid "Informations" +msgstr "Informazioni" -#: ../../kde4/app.py:131 ../../gnome/mainwindow.glade:184 -#: ../../gnome/mainwindow.glade:186 -msgid "Exit" -msgstr "Esci" +#: ../../qt4/logviewdialog.py:101 +msgid "[E] Error, [I] Information, [C] Change" +msgstr "[E] Errore, [I] Informazione, [C] Cambiamento" -#: ../../kde4/app.py:186 ../../gnome/mainwindow.glade:289 -msgid "Up" -msgstr "Su" +#: ../../qt4/logviewdialog.py:104 +msgid "decode paths" +msgstr "decodifica i percorsi" -#: ../../kde4/app.py:199 ../../gnome/mainwindow.glade:325 -msgid "Show hidden files" -msgstr "Mostrare file nascosti" +#: ../../qt4/messagebox.py:56 +msgid "Error" +msgstr "Errore" -#: ../../kde4/app.py:244 -msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" -msgstr "" -"Questa cartella non esiste\n" -"nell'istantanea corrente !" +#: ../../qt4/messagebox.py:62 ../../qt4/messagebox.py:68 +msgid "Question" +msgstr "Domanda" -#: ../../kde4/app.py:839 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" -msgstr "" -"Rimuovere veramente l'istantanea:\n" -"%s" +#: ../../qt4/qt4systrayicon.py:69 +msgid "Start BackInTime" +msgstr "Avvia BackInTime" -#: ../../kde4/app.py:1140 ../../kde4/kde4systrayicon.py:117 +#: ../../qt4/qt4systrayicon.py:124 msgid "Working..." msgstr "Lavoro in corso..." -#: ../../kde4/logviewdialog.py:55 -msgid "Error Log View" -msgstr "Log errori" - -#: ../../kde4/logviewdialog.py:65 ../../kde4/settingsdialog.py:79 -#: ../../kde4/settingsdialog.py:293 ../../gnome/logviewdialog.glade:73 -#: ../../gnome/settingsdialog.glade:72 -msgid "Profile:" -msgstr "Profilo:" +#: ../../qt4/qt4tools.py:178 +msgid "Today" +msgstr "Oggi" -#: ../../kde4/logviewdialog.py:77 ../../gnome/logviewdialog.glade:110 -msgid "Filter:" -msgstr "Filtro:" +#: ../../qt4/qt4tools.py:183 +msgid "Yesterday" +msgstr "Ieri" -#: ../../kde4/logviewdialog.py:100 ../../gnome/logviewdialog.glade:169 -msgid "[E] Error, [I] Information, [C] Change" -msgstr "[E] Errore, [I] Informazione, [C] Cambiamento" +#: ../../qt4/qt4tools.py:188 +msgid "This week" +msgstr "Questa settimana" -#: ../../kde4/logviewdialog.py:103 ../../gnome/logviewdialog.glade:195 -msgid "decode paths" -msgstr "" +#: ../../qt4/qt4tools.py:193 +msgid "Last week" +msgstr "Scorsa settimana" + +#: ../../qt4/restoredialog.py:75 +msgid "Show full Log" +msgstr "Mostra il log completo" -#: ../../kde4/settingsdialog.py:88 +#: ../../qt4/settingsdialog.py:68 msgid "Edit" msgstr "Modifica" -#: ../../kde4/settingsdialog.py:106 ../../gnome/settingsdialog.glade:1207 +#: ../../qt4/settingsdialog.py:73 +msgid "Modify for Full System Backup" +msgstr "" + +#: ../../qt4/settingsdialog.py:77 ../../qt4/settingsdialog.py:451 +msgid "Add" +msgstr "Aggiungi" + +#: ../../qt4/settingsdialog.py:81 ../../qt4/settingsdialog.py:408 +#: ../../qt4/settingsdialog.py:467 +msgid "Remove" +msgstr "Rimuovi" + +#: ../../qt4/settingsdialog.py:96 msgid "General" msgstr "Generale" -#: ../../kde4/settingsdialog.py:114 ../../gnome/settingsdialog.glade:199 +#: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" +msgstr "Modalità:" + +#: ../../qt4/settingsdialog.py:119 +#, python-format +msgid "" +"Warning: %(app)s uses EncFS for encryption. A recent security audit " +"revealed several possible attack vectors for this. Please take a look at 'A " +"NOTE ON SECURITY' in 'man backintime'." msgstr "" +"Attenzione: %(app)s utilizza EncFS per la crittografia. Una recente " +"revisione di sicurezza ha rivelato numerosi possibili vettori d'attacco in " +"questa configurazione. Per favore consulta la sezione 'A NOTE ON SECURITY' " +"in 'man backintime'." -#: ../../kde4/settingsdialog.py:127 ../../kde4/settingsdialog.py:1311 +#: ../../qt4/settingsdialog.py:129 ../../qt4/settingsdialog.py:1568 msgid "Where to save snapshots" msgstr "Posizione delle istantanee" -#: ../../kde4/settingsdialog.py:146 +#: ../../qt4/settingsdialog.py:145 +msgid "Folder" +msgstr "Cartella" + +#: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" -msgstr "" +msgstr "Impostazioni di SSH" -#: ../../kde4/settingsdialog.py:158 ../../kde4/settingsdialog.py:283 -#: ../../gnome/settingsdialog.glade:323 ../../gnome/settingsdialog.glade:583 -#: ../../gnome/settingsdialog.glade:874 +#: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "Host:" -#: ../../kde4/settingsdialog.py:163 ../../gnome/settingsdialog.glade:350 -#: ../../gnome/settingsdialog.glade:610 +#: ../../qt4/settingsdialog.py:170 msgid "Port:" -msgstr "" +msgstr "Porta:" -#: ../../kde4/settingsdialog.py:168 ../../kde4/settingsdialog.py:288 -#: ../../gnome/settingsdialog.glade:377 ../../gnome/settingsdialog.glade:637 -#: ../../gnome/settingsdialog.glade:902 +#: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "Utente:" -#: ../../kde4/settingsdialog.py:173 ../../gnome/settingsdialog.glade:416 +#: ../../qt4/settingsdialog.py:180 msgid "Path:" -msgstr "" +msgstr "Percorso:" -#: ../../kde4/settingsdialog.py:178 ../../gnome/settingsdialog.glade:459 +#: ../../qt4/settingsdialog.py:186 msgid "Cipher:" -msgstr "" +msgstr "Cifratura:" -#: ../../kde4/settingsdialog.py:184 +#: ../../qt4/settingsdialog.py:192 msgid "Private Key:" -msgstr "" +msgstr "Chiave privata:" + +#: ../../qt4/settingsdialog.py:201 +msgid "Key File" +msgstr "File chiave" -#: ../../kde4/settingsdialog.py:228 ../../kde4/settingsdialog.py:237 -#: ../../kde4/settingsdialog.py:243 ../../gnome/settingsdialog.glade:703 -#: ../../gnome/settingsdialog.glade:743 +#: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 +#: ../../qt4/settingsdialog.py:229 msgid "Password" -msgstr "" +msgstr "Password" -#: ../../kde4/settingsdialog.py:249 ../../gnome/settingsdialog.glade:775 +#: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" -msgstr "" +msgstr "Salva la password nel gestore delle password" -#: ../../kde4/settingsdialog.py:252 ../../gnome/settingsdialog.glade:792 +#: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" +"Salva la password per Cron (problema di sicurezza: l'utente root può leggere " +"la password)" -#: ../../kde4/settingsdialog.py:264 ../../gnome/settingsdialog.glade:968 +#: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "Avanzate" -#: ../../kde4/settingsdialog.py:276 ../../gnome/settingsdialog.glade:848 -msgid "Auto Host / User / Profile Id" -msgstr "Host / User / Profile Id automatici" +#: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 +msgid "Full snapshot path: " +msgstr "Percorso completo per le istantanee: " -#: ../../kde4/settingsdialog.py:301 +#: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "Pianifica" -#: ../../kde4/settingsdialog.py:311 ../../gnome/settingsdialog.glade:1092 +#: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "Giorno:" -#: ../../kde4/settingsdialog.py:322 ../../gnome/settingsdialog.glade:1079 +#: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "Giorno della settimana:" -#: ../../kde4/settingsdialog.py:333 ../../gnome/settingsdialog.glade:1066 +#: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "Ora:" -#: ../../kde4/settingsdialog.py:344 ../../gnome/settingsdialog.glade:1053 +#: ../../qt4/settingsdialog.py:330 msgid "Hours:" -msgstr "" +msgstr "Ore:" -#: ../../kde4/settingsdialog.py:353 ../../gnome/settingsdialog.glade:1014 +#: ../../qt4/settingsdialog.py:339 msgid "" -"Run Back In Time periodically with anacron. This is useful if the computer " -"is not running regular." +"Run Back In Time repeatedly. This is useful if the computer is not running " +"regular." msgstr "" +"Avvia Back In Time ripetutamente. È utile se il computer non viene avviato " +"regolarmente." -#: ../../kde4/settingsdialog.py:357 ../../gnome/settingsdialog.glade:1040 -msgid "Frequency in days:" -msgstr "" +#: ../../qt4/settingsdialog.py:344 +msgid "Every:" +msgstr "Ogni:" -#: ../../kde4/settingsdialog.py:368 ../../gnome/settingsdialog.glade:1026 +#: ../../qt4/settingsdialog.py:362 msgid "" "Run Back In Time as soon as the drive is connected (only once every X " "days).\n" "You will be prompted for your sudo password." msgstr "" +"Avvia Back In Time non appena il dispositivo viene collegato (solo una volta " +"ogni X giorni).\n" +"Ti verrà richiesta la tua password di sudo." -#: ../../kde4/settingsdialog.py:379 ../../gnome/settingsdialog.glade:1310 +#: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Includi" -#: ../../kde4/settingsdialog.py:403 ../../kde4/settingsdialog.py:445 -#: ../../gnome/settingsdialog.glade:1411 +#: ../../qt4/settingsdialog.py:381 +msgid "Include files and folders" +msgstr "Includi file e cartelle" + +#: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "Aggiungi file" -#: ../../kde4/settingsdialog.py:408 ../../kde4/settingsdialog.py:450 -#: ../../gnome/settingsdialog.glade:1427 +#: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Aggiungi cartella" -#: ../../kde4/settingsdialog.py:418 ../../gnome/settingsdialog.glade:1474 +#: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Escludi" -#: ../../kde4/settingsdialog.py:421 ../../gnome/settingsdialog.glade:1328 +#: ../../qt4/settingsdialog.py:417 msgid "" "Warning: Wildcards ('foo*', '[fF]oo', 'fo?') will be ignored with " "mode 'SSH encrypted'.\n" "Only separate asterisk are allowed ('foo/*', 'foo/**/bar')" msgstr "" +"Attenzione: le wildcard ('foo*', '[fF]oo', 'fo?') verranno ignorate " +"con la modalità 'SSH cifrato'.\n" +"Sono ammessi solo asterischi separati ('foo/*', 'foo/**/bar')" -#: ../../kde4/settingsdialog.py:430 +#: ../../qt4/settingsdialog.py:425 +msgid "Exclude patterns, files or folders" +msgstr "Esclude pattern, file o cartelle" + +#: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "Fortemente raccomandato:" -#: ../../kde4/settingsdialog.py:460 ../../gnome/settingsdialog.glade:1905 +#: ../../qt4/settingsdialog.py:463 +msgid "Add default" +msgstr "Aggiungi predefiniti" + +#: ../../qt4/settingsdialog.py:474 +msgid "Exclude files bigger than: " +msgstr "Escludi file più grandi di: " + +#: ../../qt4/settingsdialog.py:475 +#, python-format +msgid "" +"Exclude files bigger than value in %(prefix)s.\n" +"With 'Full rsync mode' disabled this will only affect new files\n" +"because for rsync this is a transfer option, not an exclude option.\n" +"So big files that has been backed up before will remain in snapshots\n" +"even if they had changed." +msgstr "" +"Escludi file più grandi del valore in %(prefix)s.\n" +"Se la modalità 'rsync completa' è disabilitata, verrà applicato solo\n" +"ai file nuovi, perché per rsync si tratta di un'opzione di \n" +"trasferimento, non di un'opzione di esclusione. Per questo motivo,\n" +"i file che erano stati copiati precedentemente continueranno a \n" +"rimanere nelle istantanee anche se sono cambiati." + +#: ../../qt4/settingsdialog.py:493 msgid "Auto-remove" msgstr "Rimozione automatica" -#: ../../kde4/settingsdialog.py:464 ../../gnome/settingsdialog.glade:1608 +#: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "Più vecchi di:" -#: ../../kde4/settingsdialog.py:478 ../../gnome/settingsdialog.glade:1624 +#: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "Se lo spazio libero è minore di:" -#: ../../kde4/settingsdialog.py:490 ../../gnome/settingsdialog.glade:1642 +#: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" -msgstr "" +msgstr "Se gli inode liberi sono meno del:" -#: ../../kde4/settingsdialog.py:514 ../../gnome/settingsdialog.glade:1697 +#: ../../qt4/settingsdialog.py:551 +msgid "Run in background on remote Host." +msgstr "Esegui in modo asincrono sull'host remoto" + +#: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" -msgstr "Esegui tutte le instantanee per ultimo" +msgstr "Mantieni tutte le istantanee degli ultimi" -#: ../../kde4/settingsdialog.py:517 ../../kde4/settingsdialog.py:522 -#: ../../gnome/settingsdialog.glade:1705 ../../gnome/settingsdialog.glade:1729 +#: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "giorno/i" -#: ../../kde4/settingsdialog.py:519 ../../gnome/settingsdialog.glade:1717 +#: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" -msgstr "Esegui un'instantanea al giorno per ultimo" +msgstr "Mantieni un'istantanea al giorno per gli ultimi" -#: ../../kde4/settingsdialog.py:524 ../../gnome/settingsdialog.glade:1743 +#: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" -msgstr "Esegui un'instantanea a settimana per ultimo" +msgstr "Mantieni un'istantanea alla settimana per le ultime" -#: ../../kde4/settingsdialog.py:527 +#: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "Settimana/e" -#: ../../kde4/settingsdialog.py:529 ../../gnome/settingsdialog.glade:1769 +#: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" -msgstr "Esegui un'instantanea al mese per ultimo" +msgstr "Mantieni un'istantanea al mese per gli ultimi" -#: ../../kde4/settingsdialog.py:532 ../../gnome/settingsdialog.glade:1781 +#: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "mese/i" -#: ../../kde4/settingsdialog.py:534 ../../gnome/settingsdialog.glade:1795 +#: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" -msgstr "Esegui un'instantanea all'anno per tutti gli anni" +msgstr "Mantieni un'istantanea all'anno per tutti gli anni" -#: ../../kde4/settingsdialog.py:537 ../../gnome/settingsdialog.glade:1496 +#: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" -msgstr "Non rimuovere istantanee rinominate" +msgstr "Non rimuovere le istantanee a cui è stato assegnato un nome" -#: ../../kde4/settingsdialog.py:546 ../../gnome/settingsdialog.glade:2104 +#: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Opzioni" -#: ../../kde4/settingsdialog.py:549 ../../gnome/settingsdialog.glade:1920 +#: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Attivare le notifiche" -#: ../../kde4/settingsdialog.py:552 ../../gnome/settingsdialog.glade:1937 +#: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "Disabilita le istantanee quando si usa la batteria" -#: ../../kde4/settingsdialog.py:555 +#: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" msgstr "Impossibile stabilire la modalità di alimentazione" -#: ../../kde4/settingsdialog.py:558 ../../gnome/settingsdialog.glade:1955 -msgid "Backup files on restore" -msgstr "File di backup da ripristinare" +#: ../../qt4/settingsdialog.py:611 +msgid "Run only one snapshot at a time" +msgstr "Esegui solo un'istantanea alla volta" + +#: ../../qt4/settingsdialog.py:612 +msgid "" +"Other snapshots will be blocked until the current snapshot is done.\n" +"This is a global option. So it will effect all profiles for this user.\n" +"But you need to activate this for all other users, too." +msgstr "" +"Le altre istantanee verranno bloccate finché l'istantanea corrente non sarà " +"terminata.\n" +"Questa è un'opzione globale, pertanto avrà effetto su tutti i profili di " +"questo utente.\n" +"Tuttavia devi attivare quest'opzione anche per gli altri utenti." + +#: ../../qt4/settingsdialog.py:617 +msgid "Backup replaced files on restore" +msgstr "Esegui il backup dei file sostituiti durante il ripristino" -#: ../../kde4/settingsdialog.py:561 ../../gnome/settingsdialog.glade:1972 +#: ../../qt4/settingsdialog.py:618 +#, python-format +msgid "" +"Newer versions of files will be renamed with trailing '%(suffix)s' before " +"restoring.\n" +"If you don't need them anymore you can remove them with '%(cmd)s'" +msgstr "" +"Le versioni nuove dei file verranno rinominate con il suffisso '%(suffix)s' " +"prima di effettuare il ripristino.\n" +"Se non ne hai più bisogno, puoi rimuoverle con '%(cmd)s'" + +#: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "Continua in caso di errore (mantiene un'istantanea incompleta)" -#: ../../kde4/settingsdialog.py:564 ../../gnome/settingsdialog.glade:1989 +#: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "Usa il checksum per scoprire i cambiamenti" -#: ../../kde4/settingsdialog.py:567 ../../gnome/settingsdialog.glade:2006 +#: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "Modalità rsync completa. Potrebbe essere più veloce ma:" -#: ../../kde4/settingsdialog.py:568 ../../gnome/settingsdialog.glade:2032 +#: ../../qt4/settingsdialog.py:634 msgid "" -"- snapshots are no read-only\n" -"- destination file-system must support all linux attributes (dates, rights, " +"- snapshots are not read-only\n" +"- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" "- Le instantanee non sono di sola lettura\n" "- Il file system di destinazione deve supportare tutti gli attributi linux " "(date, permessi, utenti, gruppi...)" -#: ../../kde4/settingsdialog.py:575 ../../gnome/settingsdialog.glade:2045 +#: ../../qt4/settingsdialog.py:641 +msgid "Take a new snapshot regardless of there were changes or not." +msgstr "" +"Prendi un'istantanea anche se non ci sono modifiche rispetto alla precedente." + +#: ../../qt4/settingsdialog.py:644 msgid "Check for changes (don't take a new snapshot if nothing changed)" msgstr "" "Controlla le modifiche (non esegue una nuova instantanea se nulla è stato " "modificato)" -#: ../../kde4/settingsdialog.py:582 +#: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "Livello dei log" -#: ../../kde4/settingsdialog.py:597 ../../gnome/settingsdialog.glade:2366 -msgid "Expert Options" -msgstr "Opzioni per esperti" +#: ../../qt4/settingsdialog.py:656 +msgid "None" +msgstr "Nulla" -#: ../../kde4/settingsdialog.py:600 +#: ../../qt4/settingsdialog.py:658 +msgid "Changes & Errors" +msgstr "Modifica & Errori" + +#: ../../qt4/settingsdialog.py:674 msgid "Change these options only if you really know what you are doing !" msgstr "Cambiare questo opzioni solo se si sa cosa si sta facendo !" -#: ../../kde4/settingsdialog.py:608 ../../gnome/settingsdialog.glade:2133 -msgid "Run 'nice' as cron job (default: enabled)" -msgstr "Avviare 'nice' come lavoro di cron (predefinito: abilitato)" - -#: ../../kde4/settingsdialog.py:611 ../../gnome/settingsdialog.glade:2150 -msgid "Run 'ionice' as cron job (default: enabled)" -msgstr "Avviare 'ionice' come cron job (predefinito: abilitato)" +#: ../../qt4/settingsdialog.py:678 +msgid "Run 'nice':" +msgstr "Esegui 'nice':" + +#: ../../qt4/settingsdialog.py:684 ../../qt4/settingsdialog.py:696 +msgid "as cron job" +msgstr "come cron job" + +#: ../../qt4/settingsdialog.py:687 ../../qt4/settingsdialog.py:702 +#: ../../qt4/settingsdialog.py:716 +msgid "on remote host" +msgstr "sull'host remoto" + +#: ../../qt4/settingsdialog.py:690 +msgid "Run 'ionice':" +msgstr "Esegui 'ionice':" + +#: ../../qt4/settingsdialog.py:699 +msgid "when taking a manual snapshot" +msgstr "quando si prende un'istantanea manuale" + +#: ../../qt4/settingsdialog.py:706 +msgid "Run 'rsync' with 'nocache':" +msgstr "Esegui 'rsync' con 'nocache':" + +#: ../../qt4/settingsdialog.py:712 +msgid "on local machine" +msgstr "sulla macchina locale" + +#: ../../qt4/settingsdialog.py:719 +msgid "Redirect stdout to /dev/null in cronjobs." +msgstr "Redirigi stdout verso /dev/null nei cronjob" + +#: ../../qt4/settingsdialog.py:725 +msgid "Redirect stderr to /dev/null in cronjobs." +msgstr "Redirigi stderr verso /dev/null nei cronjob" -#: ../../kde4/settingsdialog.py:614 ../../gnome/settingsdialog.glade:2167 -msgid "Run 'ionice' when taking a manual snapshot (default: disabled)" -msgstr "" -"Esegui 'ionice' quando esegui un'instantanea manuale (default: disabilitata)" - -#: ../../kde4/settingsdialog.py:617 ../../gnome/settingsdialog.glade:2184 -msgid "Run 'nice' on remote host (default: disabled)" -msgstr "" - -#: ../../kde4/settingsdialog.py:620 ../../gnome/settingsdialog.glade:2201 -msgid "Run 'ionice' on remote host (default: disabled)" -msgstr "" - -#: ../../kde4/settingsdialog.py:626 ../../gnome/settingsdialog.glade:2224 +#: ../../qt4/settingsdialog.py:734 msgid "Limit rsync bandwidth usage: " -msgstr "" +msgstr "Limita la banda utilizzata da rsync: " -#: ../../kde4/settingsdialog.py:629 ../../gnome/settingsdialog.glade:2259 +#: ../../qt4/settingsdialog.py:737 msgid " KB/sec" -msgstr "" +msgstr " KB/s" -#: ../../kde4/settingsdialog.py:634 ../../gnome/settingsdialog.glade:2280 +#: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "Preserva ACL" -#: ../../kde4/settingsdialog.py:637 ../../gnome/settingsdialog.glade:2297 +#: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "Preserva attributi estesi (xattr)" -#: ../../kde4/settingsdialog.py:640 ../../gnome/settingsdialog.glade:2314 +#: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute links)" msgstr "" "Copia collegamenti non verificati (funziona sono con collegamenti assoluti)" -#: ../../kde4/settingsdialog.py:643 ../../gnome/settingsdialog.glade:2331 -msgid "Copy links (dereference symbolic links)" -msgstr "Copia collegamenti (segue i collegamenti simbolici)" - -#: ../../kde4/snapshotsdialog.py:46 ../../kde4/snapshotsdialog.py:173 -#: ../../gnome/snapshotsdialog.glade:385 -msgid "Diff Options" -msgstr "Opzioni Diff" - -#: ../../kde4/snapshotsdialog.py:56 ../../gnome/snapshotsdialog.glade:314 -msgid "Command:" -msgstr "Comando:" +#: ../../qt4/settingsdialog.py:834 +msgid "Paste additional options to rsync" +msgstr "Passa opzioni addizionali ad rsync" -#: ../../kde4/snapshotsdialog.py:60 ../../gnome/snapshotsdialog.glade:322 -msgid "Parameters:" -msgstr "Parametri:" +#: ../../qt4/settingsdialog.py:837 +msgid "" +"Options must be quoted e.g. --exclude-from=\"/path/to/my exclude file\"." +msgstr "" +"Le ozioni devono essere racchiuse tra virgolette, ad esempio --exclude-" +"from=\"/percorso/verso/il/mio file escluso\"." -#: ../../kde4/snapshotsdialog.py:64 ../../gnome/snapshotsdialog.glade:334 -msgid "Use %1 and %2 for path parameters" -msgstr "Usare %1 e %2 per i parametri del percorso" +#: ../../qt4/settingsdialog.py:847 +msgid "Add prefix to SSH commands" +msgstr "Aggiungi il prefisso ai comandi SSH" -#: ../../kde4/snapshotsdialog.py:123 ../../gnome/snapshotsdialog.glade:184 -#: ../../gnome/snapshotsdialog.glade:186 -msgid "Delete" +#: ../../qt4/settingsdialog.py:850 +#, python-format +msgid "" +"Prefix to run before every command on remote host.\n" +"Variables need to be escaped with \\$FOO.\n" +"This doesn't touch rsync. So to add a prefix\n" +"for rsync use \"%(cb_rsync_options)s\" with\n" +"%(rsync_options_value)s\n" +"\n" +"%(default)s: %(def_value)s" msgstr "" +"Prefisso da aggiungere ad ogni comando eseguito sull'host remoto.\n" +"La sequenza di escape \\$FOO dev'essere utilizzata per indicare delle " +"variabili.\n" +"Questo non si applica ad rsync. Quindi, per aggiungere un prefisso\n" +"per rsync utilizza \"%(cb_rsync_options)s\" con\n" +"%(rsync_options_value)s\n" +"\n" +"%(default)s: %(def_value)s" -#: ../../kde4/snapshotsdialog.py:128 ../../gnome/snapshotsdialog.glade:199 -#: ../../gnome/snapshotsdialog.glade:201 -msgid "Select All" +#: ../../qt4/settingsdialog.py:858 ../../qt4/settingsdialog.py:1691 +msgid "default" +msgstr "default" + +#: ../../qt4/settingsdialog.py:875 +msgid "Restore Config" +msgstr "Ripristina la configurazione" + +#: ../../qt4/settingsdialog.py:891 +msgid "" +"Full system backup can only create a snapshot to be restored to the same " +"physical disk(s) with the same disk partitioning as from the source; " +"restoring to new physical disks or the same disks with different " +"partitioning will yield a potentially broken and unusable system.\n" +"\n" +"Full system backup will override some settings that may have been " +"customized. Continue?" msgstr "" -#: ../../kde4/snapshotsdialog.py:132 ../../gnome/snapshotsdialog.glade:88 -msgid "List only different snapshots" -msgstr "Elenca solo istantanee differenti" +#: ../../qt4/settingsdialog.py:922 +msgid "New profile" +msgstr "Nuovo profilo" -#: ../../kde4/snapshotsdialog.py:139 ../../gnome/snapshotsdialog.glade:110 -msgid "List only equal snapshots to: " +#: ../../qt4/settingsdialog.py:938 +msgid "Rename profile" +msgstr "Rinomina profilo" + +#: ../../qt4/settingsdialog.py:952 +#, python-format +msgid "Are you sure you want to delete the profile \"%s\" ?" +msgstr "Sei sicuro di voler eliminare il profilo \"%s\" ?" + +#: ../../qt4/settingsdialog.py:1191 +msgid "" +"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " +"*/3 for periodic backups every 3 hours" msgstr "" +"Le ore personalizzate possono essere solo un elenco di ore separate da " +"virgola (es. 8,12,18,23) oppure */3 per backup periodici ogni 3 ore" -#: ../../kde4/snapshotsdialog.py:149 ../../gnome/snapshotsdialog.glade:146 -msgid "Deep check (more accurate, but slow)" -msgstr "Controllo approfondito (più accurato ma più lento)" +#: ../../qt4/settingsdialog.py:1489 +msgid "Exclude pattern" +msgstr "Pattern di esclusione" -#: ../../kde4/snapshotsdialog.py:174 -msgid "Go To" -msgstr "Vai a" +#: ../../qt4/settingsdialog.py:1502 +msgid "Exclude file" +msgstr "File esclusi" + +#: ../../qt4/settingsdialog.py:1506 +msgid "Exclude folder" +msgstr "Cartelle Escluse" -#: ../../gnome/logviewdialog.glade:9 -msgid "Log View" -msgstr "Visualizzazione log" +#: ../../qt4/settingsdialog.py:1525 +msgid "Include file" +msgstr "Includi il file" -#: ../../gnome/logviewdialog.glade:179 -msgid "scroll down automatic" +#: ../../qt4/settingsdialog.py:1533 ../../qt4/settingsdialog.py:1553 +#, python-format +msgid "" +"\"%s\" is a symlink. The linked target will not be backed up until you " +"include it, too.\n" +"Would you like to include the symlinks target instead?" msgstr "" +"\"%s\" è un link simbolico. La destinazione del link non sarà copiata nel " +"backup fintantoché non la includerai esplicitamente.\n" +"Vuoi piuttosto includere la destinazione del link simbolico?" -#: ../../gnome/mainwindow.glade:7 -msgid "Back In Time" -msgstr "Back in Time" +#: ../../qt4/settingsdialog.py:1545 +msgid "Include folder" +msgstr "Cartella inclusa" -#: ../../gnome/mainwindow.glade:45 -msgid "Backup Now" -msgstr "Backup adesso" +#: ../../qt4/settingsdialog.py:1572 +msgid "Are you sure you want to change snapshots folder ?" +msgstr "Cambiare veramente la cartella delle istantanee?" -#: ../../gnome/mainwindow.glade:171 -msgid "Shutdown" -msgstr "" +#: ../../qt4/settingsdialog.py:1688 +msgid "enabled" +msgstr "abilitato" + +#: ../../qt4/settingsdialog.py:1690 +msgid "disabled" +msgstr "disabilitato" -#: ../../gnome/mainwindow.glade:287 -msgid "Parent folder" -msgstr "Cartella superiore" +#: ../../qt4/settingsdialog.py:1715 +msgid "Restore Settings" +msgstr "Ripristina impostazioni" -#: ../../gnome/mainwindow.glade:327 -msgid "Hidden files" -msgstr "File Nascosti" +#: ../../qt4/settingsdialog.py:1732 +msgid " and add your user to group 'fuse'" +msgstr " ed aggiungi il tuo utente al gruppo 'fuse'" -#: ../../gnome/mainwindow.glade:451 +#: ../../qt4/settingsdialog.py:1736 +#, python-format msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" -msgstr "" -"Questa cartella non esiste\n" -"nell'istantanea corrente !" +"Please navigate to the snapshot from which you want to restore %(appName)s's " +"configuration. The path may look like: \n" +"%(samplePath)s\n" +"\n" +"If your snapshots are on a remote drive or if they are encrypted you need to " +"manually mount them first. If you use Mode SSH you also may need to set up " +"public key login to the remote host%(addFuse)s.\n" +"Take a look at 'man backintime'." +msgstr "" +"Per favore localizza l'istantanea dalla quale vuoi ripristinare la " +"configurazione di %(appName)s. Il percorso potrebbe assomigliare a:\n" +"%(samplePath)s\n" +"\n" +"Se le tue istantanee sono su un'unità remota o se sono cifrate, devi prima " +"montarle manualmente. Se usi la modalità SSH, potresti anche aver bisogno di " +"configurare l'accesso all'host remoto %(addFuse)s mediante chiave pubblica.\n" +"Dai un'occhiata a: 'man backintime'." + +#: ../../qt4/settingsdialog.py:1794 ../../qt4/settingsdialog.py:1854 +msgid "No config found" +msgstr "Configurazione non trovata" + +#: ../../qt4/snapshotsdialog.py:49 ../../qt4/snapshotsdialog.py:173 +msgid "Diff Options" +msgstr "Opzioni Diff" -#: ../../gnome/settingsdialog.glade:287 -msgid "Where to save snapshots" -msgstr "Posizione delle istantanee" +#: ../../qt4/snapshotsdialog.py:56 +msgid "Command:" +msgstr "Comando:" -#: ../../gnome/settingsdialog.glade:483 -msgid "Private key:" -msgstr "" +#: ../../qt4/snapshotsdialog.py:60 +msgid "Parameters:" +msgstr "Parametri:" -#: ../../gnome/settingsdialog.glade:534 -msgid "Advanced SSH Settings" -msgstr "" +#: ../../qt4/snapshotsdialog.py:64 +msgid "Use %1 and %2 for path parameters" +msgstr "Usare %1 e %2 per i parametri del percorso" -#: ../../gnome/settingsdialog.glade:552 -msgid "SSH Settings" -msgstr "" +#: ../../qt4/snapshotsdialog.py:106 +msgid "List only different snapshots" +msgstr "Elenca solo istantanee differenti" -#: ../../gnome/settingsdialog.glade:815 -msgid "Password" -msgstr "" +#: ../../qt4/snapshotsdialog.py:113 +msgid "List only equal snapshots to: " +msgstr "Mostra solo istantanee uguali a: " -#: ../../gnome/settingsdialog.glade:930 -msgid "Profile Id:" -msgstr "Profile Id:" +#: ../../qt4/snapshotsdialog.py:123 +msgid "Deep check (more accurate, but slow)" +msgstr "Controllo approfondito (più accurato ma più lento)" -#: ../../gnome/settingsdialog.glade:1115 -msgid "" -"hours seperate by comma ( e.g. 8,12,18,23) or */3 for periodic backups every " -"3 hours (cron style)" -msgstr "" +#: ../../qt4/snapshotsdialog.py:144 +msgid "Delete" +msgstr "Elimina" -#: ../../gnome/settingsdialog.glade:1163 -msgid "Schedule" -msgstr "Pianifica" +#: ../../qt4/snapshotsdialog.py:148 +msgid "Select All" +msgstr "Seleziona tutti" -#: ../../gnome/settingsdialog.glade:1363 -msgid "Highly recommended:" -msgstr "Fortemente raccomandato:" +#: ../../qt4/snapshotsdialog.py:161 +msgid "Diff" +msgstr "Diff" -#: ../../gnome/settingsdialog.glade:1377 -msgid "label" -msgstr "etichetta" +#: ../../qt4/snapshotsdialog.py:172 +msgid "Go To" +msgstr "Vai a" -#: ../../gnome/settingsdialog.glade:1755 -msgid "week(s)" -msgstr "settimana/e" +#: ../../qt4/snapshotsdialog.py:326 +msgid "You can't compare a snapshot to itself" +msgstr "Non è possibile confrontare un'istantanea con se stessa" -#: ../../gnome/settingsdialog.glade:2069 -msgid "Log level:" -msgstr "Livello del log:" +#: ../../qt4/snapshotsdialog.py:333 +#, python-format +msgid "Command not found: %s" +msgstr "Comando non trovato: %s" -#: ../../gnome/settingsdialog.glade:2121 +#: ../../qt4/snapshotsdialog.py:354 +#, python-format msgid "" -"Change these options only if you really know what you are doing !" -msgstr "Cambiare queste opzioni solo se si sa cosa si sta facendo !" +"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" +msgstr "" +"Vuoi veramente cancellare \"%(file)s\" nell'istantanea \"%(snapshot_id)s?\n" -#: ../../gnome/snapshotsdialog.glade:263 -msgid "Diff with" -msgstr "Diff con" +#: ../../qt4/snapshotsdialog.py:357 +#, python-format +msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +msgstr "Vuoi veramene cancellare \"%(file)s\" in %(count)d istantanee?\n" -#: ../../gnome/textinputdialog.glade:7 -msgid "Pattern" -msgstr "Modello" +#: ../../qt4/snapshotsdialog.py:359 +msgid "WARNING: This can not be revoked!" +msgstr "ATTENZIONE: l'operazione è irreversibile" -#: ../../gnome/textinputdialog.glade:70 -msgid "Text" -msgstr "" +#: ../../qt4/snapshotsdialog.py:374 +#, python-format +msgid "Exclude \"%s\" from future snapshots?" +msgstr "Escludi \"%s\" dalle istantanee future?" diff -Nru backintime-1.0.36/common/po/ja.po backintime-1.1.12/common/po/ja.po --- backintime-1.0.36/common/po/ja.po 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/po/ja.po 2016-01-11 18:07:58.000000000 +0000 @@ -7,206 +7,238 @@ msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2013-11-09 22:34+0100\n" -"PO-Revision-Date: 2010-12-28 17:16+0000\n" +"POT-Creation-Date: 2015-12-19 00:47+0100\n" +"PO-Revision-Date: 2015-09-09 21:52+0000\n" "Last-Translator: Toshiharu Kudoh \n" "Language-Team: Japanese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Launchpad-Export-Date: 2014-08-06 10:20+0000\n" -"X-Generator: Launchpad (build 17147)\n" +"X-Launchpad-Export-Date: 2016-01-11 17:52+0000\n" +"X-Generator: Launchpad (build 17881)\n" -#: ../../common/config.py:72 +#: ../../common/configfile.py:60 +#, python-format +msgid "Failed to save config: %s" +msgstr "" + +#: ../../common/configfile.py:78 +#, python-format +msgid "Failed to load config: %s" +msgstr "" + +#: ../../common/configfile.py:352 ../../common/configfile.py:414 +#, python-format +msgid "Profile \"%s\" already exists !" +msgstr "プロファイル \"%s\" はすでに存在しています!" + +#: ../../common/configfile.py:383 +msgid "You can't remove the last profile !" +msgstr "最後のプロファイルを削除することが出来ません!" + +#: ../../common/config.py:76 msgid "Disabled" msgstr "無効" -#: ../../common/config.py:73 +#: ../../common/config.py:77 msgid "At every boot/reboot" msgstr "起動/再起動毎に" -#: ../../common/config.py:74 +#: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "5分毎" -#: ../../common/config.py:75 +#: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "10分毎" -#: ../../common/config.py:76 +#: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "" -#: ../../common/config.py:77 +#: ../../common/config.py:81 msgid "Every hour" msgstr "" -#: ../../common/config.py:78 +#: ../../common/config.py:82 msgid "Every 2 hours" msgstr "" -#: ../../common/config.py:79 +#: ../../common/config.py:83 msgid "Every 4 hours" msgstr "" -#: ../../common/config.py:80 +#: ../../common/config.py:84 msgid "Every 6 hours" msgstr "" -#: ../../common/config.py:81 +#: ../../common/config.py:85 msgid "Every 12 hours" msgstr "" -#: ../../common/config.py:82 +#: ../../common/config.py:86 msgid "Custom Hours" msgstr "" -#: ../../common/config.py:83 +#: ../../common/config.py:87 msgid "Every Day" msgstr "毎日" -#: ../../common/config.py:84 -msgid "Daily (anacron)" +#: ../../common/config.py:88 +msgid "Repeatedly (anacron)" msgstr "" -#: ../../common/config.py:85 +#: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "" -#: ../../common/config.py:86 +#: ../../common/config.py:90 msgid "Every Week" msgstr "毎週" -#: ../../common/config.py:87 +#: ../../common/config.py:91 msgid "Every Month" msgstr "毎月" -#: ../../common/config.py:91 +#: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "日" -#: ../../common/config.py:92 +#: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "週" -#: ../../common/config.py:93 +#: ../../common/config.py:97 msgid "Year(s)" msgstr "年" -#: ../../common/config.py:100 +#: ../../common/config.py:101 +msgid "Hour(s)" +msgstr "" + +#: ../../common/config.py:104 +msgid "Month(s)" +msgstr "" + +#: ../../common/config.py:126 ../../qt4/settingsdialog.py:551 msgid " EXPERIMENTAL!" msgstr "" -#: ../../common/config.py:103 +#: ../../common/config.py:129 msgid "Local" msgstr "" -#: ../../common/config.py:104 +#: ../../common/config.py:130 msgid "SSH" msgstr "" -#: ../../common/config.py:104 ../../common/config.py:106 -#: ../../gnome/settingsdialog.py:475 ../../kde4/settingsdialog.py:1325 +#: ../../common/config.py:130 ../../common/config.py:132 +#: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "" -#: ../../common/config.py:105 +#: ../../common/config.py:131 msgid "Local encrypted" msgstr "" -#: ../../common/config.py:105 ../../common/config.py:106 +#: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "" -#: ../../common/config.py:106 +#: ../../common/config.py:132 msgid "SSH encrypted" msgstr "" -#: ../../common/config.py:112 +#: ../../common/config.py:135 msgid "Default" msgstr "" -#: ../../common/config.py:113 +#: ../../common/config.py:136 msgid "AES128-CTR" msgstr "" -#: ../../common/config.py:114 +#: ../../common/config.py:137 msgid "AES192-CTR" msgstr "" -#: ../../common/config.py:115 +#: ../../common/config.py:138 msgid "AES256-CTR" msgstr "" -#: ../../common/config.py:116 +#: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "" -#: ../../common/config.py:117 +#: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "" -#: ../../common/config.py:118 +#: ../../common/config.py:141 msgid "AES128-CBC" msgstr "" -#: ../../common/config.py:119 +#: ../../common/config.py:142 msgid "3DES-CBC" msgstr "" -#: ../../common/config.py:120 +#: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "" -#: ../../common/config.py:121 +#: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "" -#: ../../common/config.py:122 +#: ../../common/config.py:145 msgid "AES192-CBC" msgstr "" -#: ../../common/config.py:123 +#: ../../common/config.py:146 msgid "AES256-CBC" msgstr "" -#: ../../common/config.py:124 +#: ../../common/config.py:147 msgid "ARCFOUR" msgstr "" -#: ../../common/config.py:129 +#: ../../common/config.py:153 msgid "Main profile" msgstr "メインプロファイル" -#: ../../common/config.py:256 ../../common/config.py:275 -#: ../../common/config.py:286 ../../common/config.py:291 +#: ../../common/config.py:289 ../../common/config.py:296 +#: ../../common/config.py:307 ../../common/config.py:312 +#: ../../qt4/qt4systrayicon.py:61 #, python-format msgid "Profile: \"%s\"" msgstr "プロファイル: \"%s\"" -#: ../../common/config.py:256 +#: ../../common/config.py:289 msgid "Snapshots folder is not valid !" msgstr "スナップショットのフォルダは有効ではありません!" -#: ../../common/config.py:275 +#: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "バックアップするためには最低1つのフォルダを選択しなくてはなりません!" -#: ../../common/config.py:286 +#: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "バックアップフォルダを含むことはできません!" -#: ../../common/config.py:291 +#: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "バックアップサブフォルダを含むことはできません!" -#: ../../common/config.py:361 +#: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s はフォルダではありません!" -#: ../../common/config.py:376 ../../common/config.py:389 +#: ../../common/config.py:380 +msgid "Host/User/Profile-ID must not be empty!" +msgstr "" + +#: ../../common/config.py:388 ../../common/config.py:420 #, python-format msgid "" "Can't write to: %s\n" @@ -215,59 +247,68 @@ "%s に書き込めません。\\n\n" "書き込み権限を持っていますか?" -#: ../../common/config.py:1286 +#: ../../common/config.py:400 +#, python-format msgid "" -"Can't find crontab.\n" -"Are you sure cron is installed ?\n" -"If not you should disable all automatic backups." +"Destination filesystem for '%(path)s' is formatted with FAT which doesn't " +"support hard-links. Please use a native Linux filesystem." msgstr "" -"crontab がみつかりません。\\n\n" -"cron をインストールしてもよろしいですか?\\n\n" -"インストールしないのであれば、全ての自動バックアップは無効になります。" -#: ../../common/config.py:1338 +#: ../../common/config.py:405 #, python-format -msgid "Schedule udev doesn't work with mode %s" +msgid "" +"Destination filsystem for '%(path)s' is a SMB mounted share. Please make " +"sure the remote SMB server supports symlinks or activate '%(copyLinks)s' in " +"'%(expertOptions)s'." msgstr "" -#: ../../common/config.py:1342 -#, python-format -msgid "Couldn't find UUID for \"%s\"" -msgstr "" +#: ../../common/config.py:408 ../../qt4/settingsdialog.py:815 +msgid "Copy links (dereference symbolic links)" +msgstr "リンクをコピー(シンボリックリンクを参照)" -#: ../../common/config.py:1379 -msgid "Failed to remove udev rules" -msgstr "" +#: ../../common/config.py:409 ../../qt4/settingsdialog.py:669 +msgid "Expert Options" +msgstr "上級者向けオプション" -#: ../../common/config.py:1385 -msgid "Failed to create udev rules" +#: ../../common/config.py:411 +#, python-format +msgid "" +"Destination filesystem for '%(path)s is a sshfs mounted share. sshfs doesn't " +"support hard-links. Please use mode 'SSH' instead." msgstr "" -#: ../../common/config.py:1420 +#: ../../common/config.py:1407 msgid "" -"Can't find anacron.\n" -"Are you sure anacron is installed ?\n" -"If not you should disable daily anacron backups." +"Can't find crontab.\n" +"Are you sure cron is installed ?\n" +"If not you should disable all automatic backups." msgstr "" +"crontab がみつかりません。\\n\n" +"cron をインストールしてもよろしいですか?\\n\n" +"インストールしないのであれば、全ての自動バックアップは無効になります。" -#: ../../common/config.py:1439 -msgid "Please provide your sudo password to install the udev rule." +#: ../../common/config.py:1411 +msgid "Failed to write new crontab." msgstr "" -#: ../../common/config.py:1445 -msgid "Please provide your sudo password to remove unused udev rules." +#: ../../common/config.py:1505 +#, python-format +msgid "" +"Could not install Udev rule for profile %(profile_id)s. DBus Service " +"'%(dbus_interface)s' wasn't available" msgstr "" -#: ../../common/configfile.py:253 ../../common/configfile.py:315 +#: ../../common/config.py:1517 #, python-format -msgid "Profile \"%s\" already exists !" -msgstr "プロファイル \"%s\" はすでに存在しています!" +msgid "Schedule udev doesn't work with mode %s" +msgstr "" -#: ../../common/configfile.py:284 -msgid "You can't remove the last profile !" -msgstr "最後のプロファイルを削除することが出来ません!" +#: ../../common/config.py:1526 +#, python-format +msgid "Couldn't find UUID for \"%s\"" +msgstr "" -#: ../../common/encfstools.py:95 +#: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" @@ -275,38 +316,38 @@ "%(error)s" msgstr "" -#: ../../common/encfstools.py:105 +#: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "" -#: ../../common/encfstools.py:149 +#: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "" -#: ../../common/encfstools.py:153 +#: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" -#: ../../common/encfstools.py:154 +#: ../../common/encfstools.py:171 msgid "Cancel" msgstr "" -#: ../../common/encfstools.py:157 +#: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "" -#: ../../common/encfstools.py:161 +#: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "" -#: ../../common/encfstools.py:166 +#: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" -#: ../../common/encfstools.py:174 ../../common/sshtools.py:207 +#: ../../common/encfstools.py:196 ../../common/sshtools.py:262 #, python-format msgid "" "%(user)s is not member of group 'fuse'.\n" @@ -314,63 +355,66 @@ "Look at 'man backintime' for further instructions." msgstr "" -#: ../../common/encfstools.py:189 +#: ../../common/encfstools.py:211 msgid "" "encfs version 1.7.2 and before has a bug with option --reverse. Please " "update encfs" msgstr "" -#: ../../common/encfstools.py:453 ../../common/encfstools.py:480 -#: ../../common/snapshots.py:982 ../../common/snapshots.py:1288 -#: ../../kde4/app.py:82 ../../gnome/mainwindow.glade:43 +#: ../../common/encfstools.py:512 ../../common/snapshots.py:1131 +#: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "スナップショット取得" -#: ../../common/mount.py:195 +#: ../../common/mount.py:204 #, python-format msgid "" "Hash collision occurred in hash_id %s. Incrementing global value " "hash_collision and try again." msgstr "" -#: ../../common/mount.py:246 +#: ../../common/mount.py:259 #, python-format msgid "mountpoint %s not empty." msgstr "" -#: ../../common/mount.py:286 +#: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" -#: ../../common/password.py:425 +#: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" -#: ../../common/snapshots.py:171 ../../gnome/app.py:1127 -#: ../../kde4/app.py:1014 +#: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "現在" -#: ../../common/snapshots.py:182 ../../gnome/gnometools.py:37 +#: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "" -#: ../../common/snapshots.py:282 +#: ../../common/snapshots.py:344 msgid "" "### This log has been decoded with automatic search pattern\n" "### If some paths are not decoded you can manually decode them with:\n" msgstr "" -#: ../../common/snapshots.py:465 +#: ../../common/snapshots.py:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "" -#: ../../common/snapshots.py:564 +#: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "" -#: ../../common/snapshots.py:739 +#: ../../common/snapshots.py:752 ../../qt4/app.py:377 ../../qt4/app.py:675 +#: ../../qt4/app.py:692 ../../qt4/qt4systrayicon.py:65 +msgid "Done" +msgstr "完了" + +#: ../../common/snapshots.py:860 msgid "" "Back In Time changed its backup format.\n" "\n" @@ -380,7 +424,7 @@ "\\n\n" "あなたの古いスナップショットはこの新たなフォーマットにより変更されます。よろしいですか?" -#: ../../common/snapshots.py:749 +#: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" @@ -395,13 +439,13 @@ "\\n\n" "(プログラムでは今までどおりそれらを区別できます)" -#: ../../common/snapshots.py:752 +#: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" msgstr "プロファイルがみつかりません。まずプロファイルをアップデートしてから、 Back In Time を再起動してください" -#: ../../common/snapshots.py:803 +#: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" @@ -414,7 +458,7 @@ "cannot continue taking snapshots" msgstr "" -#: ../../common/snapshots.py:812 +#: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" @@ -424,7 +468,7 @@ "if you are done restart Back In Time to proceed" msgstr "" -#: ../../common/snapshots.py:825 +#: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" @@ -434,7 +478,7 @@ "\\n\n" "Back In Time は再度スケジュール通りスナップショットを取得し続けます" -#: ../../common/snapshots.py:830 +#: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" @@ -446,11 +490,11 @@ "If you do not, you will be asked again next time you start Back In Time." msgstr "" -#: ../../common/snapshots.py:839 +#: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "Back In Time は再度スケジュール通りスナップショットを取得し続けます" -#: ../../common/snapshots.py:841 +#: ../../common/snapshots.py:953 msgid "" "Back In Time still cannot continue taking new snapshots.\n" "Restart Back In Time to see the questions again" @@ -458,7 +502,11 @@ "Back In Time はまだ新たなスナップショットを取得できません。\\n\n" "質問を見直して Back In Time を再起動してください。" -#: ../../common/snapshots.py:913 +#: ../../common/snapshots.py:972 +msgid "Deferring backup while on battery" +msgstr "" + +#: ../../common/snapshots.py:1035 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it." @@ -466,155 +514,162 @@ "スナップショットフォルダがみつかりません。\\n\n" "もしリムーバブルドライブ上にあるのなら、接続して下さい。" -#: ../../common/snapshots.py:915 +#: ../../common/snapshots.py:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "%s 秒待っています。" -#: ../../common/snapshots.py:941 +#: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "スナップショット %s の取得に失敗しました!!!" -#: ../../common/snapshots.py:950 +#: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "ファイナライズ中" -#: ../../common/snapshots.py:1088 +#: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "フォルダ %s を作成できません" -#: ../../common/snapshots.py:1107 +#: ../../common/snapshots.py:1217 msgid "..." msgstr "…" -#: ../../common/snapshots.py:1134 +#: ../../common/snapshots.py:1238 +#, python-format +msgid "Found leftover '%s' which can be continued." +msgstr "" + +#: ../../common/snapshots.py:1250 +#, python-format +msgid "Remove leftover '%s' folder from last run" +msgstr "" + +#: ../../common/snapshots.py:1263 #, python-format msgid "Can't remove folder: %s" msgstr "フォルダ %s を削除できません" -#: ../../common/snapshots.py:1219 +#: ../../common/snapshots.py:1340 #, python-format msgid "Compare with snapshot %s" msgstr "スナップショット %s と比較" -#: ../../common/snapshots.py:1248 +#: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "ハードリンクを作成" -#: ../../common/snapshots.py:1335 +#: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "設定ファイルを保存..." -#: ../../common/snapshots.py:1341 +#: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "パーミッションを保存..." -#: ../../common/snapshots.py:1442 +#: ../../common/snapshots.py:1470 +msgid "Save permission over ssh failed. Retry normal method" +msgstr "" + +#: ../../common/snapshots.py:1521 #, python-format msgid "Can't rename %(new_path)s to %(path)s" msgstr "" -#: ../../common/snapshots.py:1562 -msgid "Remove old snapshots" -msgstr "古いスナップショットを削除" - -#: ../../common/snapshots.py:1586 ../../kde4/settingsdialog.py:501 -#: ../../gnome/settingsdialog.glade:1660 +#: ../../common/snapshots.py:1695 ../../common/snapshots.py:1728 +#: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "賢く削除" -#: ../../common/snapshots.py:1591 +#: ../../common/snapshots.py:1704 +msgid "Remove old snapshots" +msgstr "古いスナップショットを削除" + +#: ../../common/snapshots.py:1733 msgid "Try to keep min free space" msgstr "最小限のフリースペースの確保を試みる" -#: ../../common/snapshots.py:1621 +#: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" -#: ../../common/sshtools.py:106 +#: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "" -#: ../../common/sshtools.py:113 +#: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "" -#: ../../common/sshtools.py:187 -#, python-format -msgid "" -"Failed to unlock SSH private key:\n" -"Error: %s" -msgstr "" - -#: ../../common/sshtools.py:194 +#: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" -#: ../../common/sshtools.py:199 +#: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" -#: ../../common/sshtools.py:217 +#: ../../common/sshtools.py:278 #, python-format msgid "" "Password-less authentication for %(user)s@%(host)s failed. Look at 'man " "backintime' for further instructions." msgstr "" -#: ../../common/sshtools.py:229 +#: ../../common/sshtools.py:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" -#: ../../common/sshtools.py:254 +#: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" -#: ../../common/sshtools.py:274 +#: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" -#: ../../common/sshtools.py:276 +#: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:278 +#: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:280 +#: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" -#: ../../common/sshtools.py:302 +#: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" -#: ../../common/sshtools.py:325 ../../common/sshtools.py:383 +#: ../../common/sshtools.py:423 ../../common/sshtools.py:553 #, python-format msgid "" "Remote host %(host)s doesn't support '%(command)s':\n" @@ -622,7 +677,7 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:387 +#: ../../common/sshtools.py:556 #, python-format msgid "" "Check commands on host %(host)s returned unknown error:\n" @@ -630,96 +685,149 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:400 +#: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "" -#: ../../gnome/app.py:185 ../../gnome/app.py:594 ../../gnome/app.py:608 -#: ../../kde4/app.py:299 ../../kde4/app.py:570 ../../kde4/app.py:587 -msgid "Done" -msgstr "完了" +#: ../../qt4/app.py:81 +msgid "Refresh snapshots list" +msgstr "スナップショットリストを更新" + +#: ../../qt4/app.py:85 ../../qt4/app.py:890 +msgid "Snapshot Name" +msgstr "スナップショット名" + +#: ../../qt4/app.py:88 +msgid "Remove Snapshot" +msgstr "スナップショット削除" + +#: ../../qt4/app.py:91 +msgid "View Snapshot Log" +msgstr "スナップショットのログを閲覧" + +#: ../../qt4/app.py:94 +msgid "View Last Log" +msgstr "最近のログを閲覧" + +#: ../../qt4/app.py:99 ../../qt4/settingsdialog.py:51 +msgid "Settings" +msgstr "設定" + +#: ../../qt4/app.py:104 +msgid "Shutdown" +msgstr "" -#: ../../gnome/app.py:189 ../../kde4/app.py:143 ../../kde4/app.py:159 -#: ../../gnome/mainwindow.glade:225 +#: ../../qt4/app.py:105 +msgid "Shutdown system after snapshot has finished." +msgstr "" + +#: ../../qt4/app.py:111 +msgid "Exit" +msgstr "終了" + +#: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 msgid "Help" msgstr "ヘルプ" -#: ../../gnome/app.py:191 ../../kde4/app.py:146 -#: ../../gnome/mainwindow.glade:223 +#: ../../qt4/app.py:122 +msgid "Config File Help" +msgstr "" + +#: ../../qt4/app.py:125 msgid "Website" msgstr "ウェブサイト" -#: ../../gnome/app.py:192 ../../kde4/app.py:148 +#: ../../qt4/app.py:127 ../../qt4/app.py:982 +msgid "Changelog" +msgstr "" + +#: ../../qt4/app.py:129 msgid "FAQ" msgstr "" -#: ../../gnome/app.py:193 ../../kde4/app.py:150 +#: ../../qt4/app.py:131 msgid "Ask a question" msgstr "" -#: ../../gnome/app.py:194 ../../kde4/app.py:152 +#: ../../qt4/app.py:133 msgid "Report a bug" msgstr "" -#: ../../gnome/app.py:196 ../../kde4/app.py:155 +#: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "情報" -#: ../../gnome/app.py:202 ../../gnome/app.py:887 -#: ../../gnome/restoredialog.py:84 ../../gnome/snapshotsdialog.py:83 -#: ../../gnome/snapshotsdialog.py:244 ../../kde4/app.py:206 -#: ../../kde4/app.py:216 ../../kde4/restoredialog.py:68 -#: ../../kde4/snapshotsdialog.py:111 ../../kde4/snapshotsdialog.py:117 -#: ../../gnome/mainwindow.glade:350 ../../gnome/mainwindow.glade:352 -#: ../../gnome/snapshotsdialog.glade:169 ../../gnome/snapshotsdialog.glade:171 +#: ../../qt4/app.py:163 +msgid "Up" +msgstr "上層へ" + +#: ../../qt4/app.py:174 ../../qt4/settingsdialog.py:1776 +msgid "Show hidden files" +msgstr "不可視ファイルを表示" + +#: ../../qt4/app.py:184 ../../qt4/app.py:199 ../../qt4/app.py:233 +#: ../../qt4/restoredialog.py:62 ../../qt4/settingsdialog.py:1818 +#: ../../qt4/snapshotsdialog.py:134 ../../qt4/snapshotsdialog.py:139 msgid "Restore" msgstr "復元" -#: ../../gnome/app.py:203 ../../gnome/app.py:888 ../../gnome/gnometools.py:67 -#: ../../gnome/snapshotsdialog.py:84 ../../gnome/snapshotsdialog.py:245 -#: ../../kde4/app.py:208 ../../kde4/restoredialog.py:42 -#: ../../kde4/snapshotsdialog.py:113 +#: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 +#: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "" -#: ../../gnome/app.py:205 ../../gnome/app.py:896 ../../gnome/app.py:1146 -#: ../../kde4/app.py:1041 -#, python-format -msgid "Restore '%s'" +#: ../../qt4/app.py:194 +msgid "Restore and delete new files" msgstr "" -#: ../../gnome/app.py:207 ../../gnome/app.py:897 ../../gnome/app.py:1147 -#: ../../kde4/app.py:1042 +#: ../../qt4/app.py:201 #, python-format -msgid "Restore '%s' to ..." +msgid "" +"Restore selected file or folder.\n" +"If this button is grayed out this is most likely because \"%(now)s\" is " +"selected in left hand snapshots list." +msgstr "" + +#: ../../qt4/app.py:206 ../../qt4/logviewdialog.py:67 +#: ../../qt4/qt4tools.py:160 ../../qt4/snapshotsdialog.py:96 +msgid "Snapshots" +msgstr "スナップショット" + +#: ../../qt4/app.py:213 +msgid "Snapshot" +msgstr "" + +#: ../../qt4/app.py:224 +msgid "View" msgstr "" -#: ../../gnome/app.py:226 ../../kde4/app.py:235 +#: ../../qt4/app.py:277 msgid "Shortcuts" msgstr "ショートカット" -#: ../../gnome/app.py:249 -msgid "Name" -msgstr "名称" - -#: ../../gnome/app.py:260 -msgid "Size" -msgstr "サイズ" - -#: ../../gnome/app.py:267 -msgid "Date" -msgstr "日付" - -#: ../../gnome/app.py:286 ../../gnome/app.py:883 -#: ../../gnome/snapshotsdialog.py:116 ../../kde4/app.py:171 -#: ../../kde4/app.py:221 ../../kde4/snapshotsdialog.py:91 -#: ../../gnome/mainwindow.glade:366 ../../gnome/mainwindow.glade:368 -#: ../../gnome/snapshotsdialog.glade:8 -msgid "Snapshots" -msgstr "スナップショット" +#: ../../qt4/app.py:295 +msgid "" +"This folder doesn't exist\n" +"in the current selected snapshot!" +msgstr "" + +#: ../../qt4/app.py:359 +msgid "Add to Include" +msgstr "" + +#: ../../qt4/app.py:360 +msgid "Add to Exclude" +msgstr "" + +#: ../../qt4/app.py:416 +#, python-format +msgid "" +"%(appName)s is not configured. Would you like to restore a previous " +"configuration?" +msgstr "" -#: ../../gnome/app.py:348 ../../kde4/app.py:362 +#: ../../qt4/app.py:440 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it and then press OK" @@ -727,730 +835,791 @@ "スナップショットフォルダがみつかりません。\\n\n" "もしリムーバブルドライブ上にあるのなら、接続後に OK を押して下さい。" -#: ../../gnome/app.py:611 ../../kde4/app.py:590 -msgid "Done, no backup needed" -msgstr "完了、バックアップの必要はありませんでした" +#: ../../qt4/app.py:473 +msgid "" +"If you close this window Back In Time will not be able to shutdown your " +"system when the snapshot has finished.\n" +"Do you really want to close?" +msgstr "" -#: ../../gnome/app.py:619 ../../kde4/app.py:598 +#: ../../qt4/app.py:667 ../../qt4/app.py:703 msgid "Working:" msgstr "作業中:" -#: ../../gnome/app.py:623 ../../kde4/app.py:602 +#: ../../qt4/app.py:695 +msgid "Done, no backup needed" +msgstr "完了、バックアップの必要はありませんでした" + +#: ../../qt4/app.py:707 msgid "Error:" msgstr "エラー:" -#: ../../gnome/app.py:636 ../../kde4/app.py:649 +#: ../../qt4/app.py:726 ../../qt4/qt4systrayicon.py:153 +msgid "Sent:" +msgstr "" + +#: ../../qt4/app.py:727 ../../qt4/qt4systrayicon.py:154 +msgid "Speed:" +msgstr "" + +#: ../../qt4/app.py:728 ../../qt4/qt4systrayicon.py:155 +msgid "ETA:" +msgstr "" + +#: ../../qt4/app.py:777 msgid "Global" msgstr "全体" -#: ../../gnome/app.py:637 ../../kde4/app.py:650 +#: ../../qt4/app.py:778 msgid "Root" msgstr "ルート" -#: ../../gnome/app.py:638 ../../kde4/app.py:651 +#: ../../qt4/app.py:779 msgid "Home" msgstr "ホーム" -#: ../../gnome/app.py:662 -msgid "Bookmarks" -msgstr "ブックマーク" - -#: ../../gnome/app.py:675 ../../kde4/app.py:662 +#: ../../qt4/app.py:794 msgid "Backup folders" msgstr "バックアップフォルダ" -#: ../../gnome/app.py:701 ../../kde4/app.py:734 -msgid "Today" -msgstr "今日" +#: ../../qt4/app.py:849 +msgid "This is NOT a snapshot but a live view of your local files" +msgstr "" -#: ../../gnome/app.py:705 ../../kde4/app.py:738 -msgid "Yesterday" -msgstr "昨日" +#: ../../qt4/app.py:860 ../../qt4/app.py:1476 +#, python-format +msgid "Last check %s" +msgstr "" -#: ../../gnome/app.py:709 ../../kde4/app.py:742 -msgid "This week" -msgstr "今週" +#: ../../qt4/app.py:928 +#, python-format +msgid "" +"Are you sure you want to remove the snapshot:\n" +"%s" +msgstr "" +"スナップショット %s を\\n\n" +"削除してもよろしいですか" -#: ../../gnome/app.py:713 ../../kde4/app.py:746 -msgid "Last week" -msgstr "先週" +#: ../../qt4/app.py:1004 +#, python-format +msgid "" +"Backup local files before overwriting or\n" +"removing with trailing '%(suffix)s'." +msgstr "" -#: ../../gnome/app.py:764 ../../kde4/app.py:398 +#: ../../qt4/app.py:1010 msgid "" -"If you close this window Back In Time will not be able to shutdown your " -"system when the snapshot has finished.\n" -"Do you really want to close?" +"Are you sure you want to remove all newer files in your original folder?" msgstr "" -#: ../../gnome/app.py:881 ../../gnome/snapshotsdialog.py:238 -msgid "Open" -msgstr "開く" +#: ../../qt4/app.py:1014 +msgid "" +"WARNING: deleting files in filesystem root could break your whole system!!!" +msgstr "" -#: ../../gnome/app.py:1056 ../../kde4/app.py:90 ../../kde4/app.py:805 -#: ../../gnome/mainwindow.glade:73 ../../gnome/mainwindow.glade:75 -msgid "Snapshot Name" -msgstr "スナップショット名" +#: ../../qt4/app.py:1016 +msgid "Files to be restored:" +msgstr "" -#: ../../gnome/app.py:1075 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +#: ../../qt4/app.py:1031 +msgid "Do you really want to restore this files(s):" msgstr "" -"スナップショット %s を\\n\n" -"削除してもよろしいですか" -#: ../../gnome/app.py:1123 ../../kde4/app.py:1010 +#: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "スナップショット:%s" -#: ../../gnome/app.py:1124 ../../kde4/app.py:1011 +#: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "%s に作成したスナップショットを閲覧" -#: ../../gnome/app.py:1126 ../../kde4/app.py:1013 +#: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "現在のディスクの内容を閲覧" -#: ../../gnome/logviewdialog.py:106 ../../gnome/settingsdialog.py:414 -#: ../../kde4/logviewdialog.py:83 ../../kde4/settingsdialog.py:590 +#: ../../qt4/app.py:1268 +#, python-format +msgid "Restore '%s'" +msgstr "" + +#: ../../qt4/app.py:1269 +#, python-format +msgid "Restore '%s' to ..." +msgstr "" + +#: ../../qt4/app.py:1270 +#, python-format +msgid "Restore '%s' and delete new files" +msgstr "" + +#: ../../qt4/app.py:1368 ../../qt4/app.py:1385 +msgid "Authors" +msgstr "" + +#: ../../qt4/app.py:1369 ../../qt4/app.py:1388 +msgid "Translations" +msgstr "" + +#: ../../qt4/app.py:1370 ../../qt4/app.py:1391 +msgid "License" +msgstr "" + +#: ../../qt4/logviewdialog.py:49 +msgid "Last Log View" +msgstr "" + +#: ../../qt4/logviewdialog.py:51 +msgid "Snapshot Log View" +msgstr "" + +#: ../../qt4/logviewdialog.py:59 ../../qt4/settingsdialog.py:59 +#: ../../qt4/settingsdialog.py:274 ../../qt4/settingsdialog.py:1899 +msgid "Profile:" +msgstr "プロファイル:" + +#: ../../qt4/logviewdialog.py:81 +msgid "Filter:" +msgstr "フィルタ:" + +#: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 msgid "All" msgstr "全て" -#: ../../gnome/logviewdialog.py:107 ../../gnome/settingsdialog.py:412 -#: ../../kde4/logviewdialog.py:84 ../../kde4/settingsdialog.py:588 +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 +#: ../../qt4/settingsdialog.py:657 msgid "Errors" msgstr "エラー" -#: ../../gnome/logviewdialog.py:112 ../../kde4/logviewdialog.py:89 +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 msgid "Changes" msgstr "変更点" -#: ../../gnome/logviewdialog.py:115 ../../kde4/logviewdialog.py:92 +#: ../../qt4/logviewdialog.py:92 msgid "Informations" msgstr "情報" -#: ../../gnome/settingsdialog.py:235 ../../kde4/settingsdialog.py:387 -msgid "Include files and folders" -msgstr "含むファイルとフォルダ" - -#: ../../gnome/settingsdialog.py:264 -msgid "Exclude patterns, files or folders" -msgstr "ファイルやフォルダの除外パターン" - -#: ../../gnome/settingsdialog.py:411 ../../kde4/settingsdialog.py:587 -msgid "None" -msgstr "" - -#: ../../gnome/settingsdialog.py:413 ../../kde4/settingsdialog.py:589 -msgid "Changes & Errors" -msgstr "変更点とエラー" - -#: ../../gnome/settingsdialog.py:458 -msgid "Snapshots folder" -msgstr "スナップショットフォルダ" - -#: ../../gnome/settingsdialog.py:466 ../../kde4/settingsdialog.py:1314 -msgid "Are you sure you want to change snapshots folder ?" -msgstr "スナップショットフォルダを変更してよろしいですか?" - -#: ../../gnome/settingsdialog.py:901 ../../kde4/settingsdialog.py:914 -msgid "" -"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " -"*/3 for periodic backups every 3 hours" -msgstr "" - -#: ../../gnome/settingsdialog.py:1141 ../../kde4/settingsdialog.py:653 -msgid "New profile" -msgstr "新規プロファイル" - -#: ../../gnome/settingsdialog.py:1155 ../../kde4/settingsdialog.py:669 -msgid "Rename profile" -msgstr "プロファイルをリネーム" - -#: ../../gnome/settingsdialog.py:1167 ../../kde4/settingsdialog.py:683 -#, python-format -msgid "Are you sure you want to delete the profile \"%s\" ?" -msgstr "プロファイル \"%s\" を削除してよろしいですか?" - -#: ../../gnome/settingsdialog.py:1173 ../../kde4/settingsdialog.py:1292 -msgid "Include folder" -msgstr "含めるフォルダ" - -#: ../../gnome/settingsdialog.py:1193 ../../kde4/settingsdialog.py:1278 -msgid "Include file" -msgstr "含めるファイル" - -#: ../../gnome/settingsdialog.py:1235 ../../kde4/settingsdialog.py:1241 -msgid "Exclude pattern" -msgstr "除外するパターン" - -#: ../../gnome/settingsdialog.py:1240 ../../kde4/settingsdialog.py:1251 -msgid "Exclude patterns can't contain ':' char !" -msgstr "除外パターンには \":\" を含むことができません!" - -#: ../../gnome/settingsdialog.py:1246 ../../kde4/settingsdialog.py:1257 -msgid "Exclude file" -msgstr "除外するファイル" - -#: ../../gnome/settingsdialog.py:1257 ../../kde4/settingsdialog.py:1261 -msgid "Exclude folder" -msgstr "除外するフォルダ" - -#: ../../gnome/snapshotsdialog.py:240 -msgid "Jump to" -msgstr "" - -#: ../../gnome/snapshotsdialog.py:248 ../../kde4/snapshotsdialog.py:164 -msgid "Diff" -msgstr "Diff (差分)" - -#: ../../gnome/snapshotsdialog.py:277 ../../kde4/snapshotsdialog.py:339 -msgid "You can't compare a snapshot to itself" -msgstr "スナップショット自体とは比較できません" - -#: ../../gnome/snapshotsdialog.py:284 ../../kde4/snapshotsdialog.py:346 -#, python-format -msgid "Command not found: %s" -msgstr "コマンド %s がみつかりませんでした" +#: ../../qt4/logviewdialog.py:101 +msgid "[E] Error, [I] Information, [C] Change" +msgstr "[E] エラー、 [I] インフォメーション、 [C] 変更点" -#: ../../gnome/snapshotsdialog.py:307 ../../kde4/snapshotsdialog.py:367 -#, python-format -msgid "" -"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" +#: ../../qt4/logviewdialog.py:104 +msgid "decode paths" msgstr "" -#: ../../gnome/snapshotsdialog.py:310 ../../kde4/snapshotsdialog.py:370 -#, python-format -msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +#: ../../qt4/messagebox.py:56 +msgid "Error" msgstr "" -#: ../../gnome/snapshotsdialog.py:312 ../../kde4/snapshotsdialog.py:372 -msgid "WARNING: This can not be revoked!" +#: ../../qt4/messagebox.py:62 ../../qt4/messagebox.py:68 +msgid "Question" msgstr "" -#: ../../gnome/snapshotsdialog.py:317 ../../kde4/snapshotsdialog.py:377 -#, python-format -msgid "Exclude \"%s\" from future snapshots?" +#: ../../qt4/qt4systrayicon.py:69 +msgid "Start BackInTime" msgstr "" -#: ../../kde4/app.py:86 ../../gnome/mainwindow.glade:58 -#: ../../gnome/mainwindow.glade:60 -msgid "Refresh snapshots list" -msgstr "スナップショットリストを更新" +#: ../../qt4/qt4systrayicon.py:124 +msgid "Working..." +msgstr "作業中..." -#: ../../kde4/app.py:94 ../../gnome/mainwindow.glade:88 -#: ../../gnome/mainwindow.glade:90 -msgid "Remove Snapshot" -msgstr "スナップショット削除" +#: ../../qt4/qt4tools.py:178 +msgid "Today" +msgstr "今日" -#: ../../kde4/app.py:98 ../../gnome/mainwindow.glade:105 -msgid "View Snapshot Log" -msgstr "スナップショットのログを閲覧" +#: ../../qt4/qt4tools.py:183 +msgid "Yesterday" +msgstr "昨日" -#: ../../kde4/app.py:102 ../../gnome/mainwindow.glade:121 -msgid "View Last Log" -msgstr "最近のログを閲覧" +#: ../../qt4/qt4tools.py:188 +msgid "This week" +msgstr "今週" -#: ../../kde4/app.py:108 ../../kde4/settingsdialog.py:69 -#: ../../gnome/mainwindow.glade:144 ../../gnome/mainwindow.glade:146 -#: ../../gnome/settingsdialog.glade:7 -msgid "Settings" -msgstr "設定" +#: ../../qt4/qt4tools.py:193 +msgid "Last week" +msgstr "先週" -#: ../../kde4/app.py:124 ../../gnome/mainwindow.glade:169 -msgid "Shutdown system after snapshot has finished." +#: ../../qt4/restoredialog.py:75 +msgid "Show full Log" msgstr "" -#: ../../kde4/app.py:131 ../../gnome/mainwindow.glade:184 -#: ../../gnome/mainwindow.glade:186 -msgid "Exit" -msgstr "終了" - -#: ../../kde4/app.py:186 ../../gnome/mainwindow.glade:289 -msgid "Up" -msgstr "上層へ" - -#: ../../kde4/app.py:199 ../../gnome/mainwindow.glade:325 -msgid "Show hidden files" -msgstr "不可視ファイルを表示" +#: ../../qt4/settingsdialog.py:68 +msgid "Edit" +msgstr "編集" -#: ../../kde4/app.py:244 -msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +#: ../../qt4/settingsdialog.py:73 +msgid "Modify for Full System Backup" msgstr "" -"このフォルダは現在のスナップショットには\\n\n" -"存在しません!" -#: ../../kde4/app.py:839 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +#: ../../qt4/settingsdialog.py:77 ../../qt4/settingsdialog.py:451 +msgid "Add" msgstr "" -"スナップショット %s を\\n\n" -"削除してもよろしいですか" -#: ../../kde4/app.py:1140 ../../kde4/kde4systrayicon.py:117 -msgid "Working..." -msgstr "作業中..." - -#: ../../kde4/logviewdialog.py:55 -msgid "Error Log View" -msgstr "エラーログ閲覧" - -#: ../../kde4/logviewdialog.py:65 ../../kde4/settingsdialog.py:79 -#: ../../kde4/settingsdialog.py:293 ../../gnome/logviewdialog.glade:73 -#: ../../gnome/settingsdialog.glade:72 -msgid "Profile:" -msgstr "プロファイル:" - -#: ../../kde4/logviewdialog.py:77 ../../gnome/logviewdialog.glade:110 -msgid "Filter:" -msgstr "フィルタ:" - -#: ../../kde4/logviewdialog.py:100 ../../gnome/logviewdialog.glade:169 -msgid "[E] Error, [I] Information, [C] Change" -msgstr "[E] エラー、 [I] インフォメーション、 [C] 変更点" - -#: ../../kde4/logviewdialog.py:103 ../../gnome/logviewdialog.glade:195 -msgid "decode paths" +#: ../../qt4/settingsdialog.py:81 ../../qt4/settingsdialog.py:408 +#: ../../qt4/settingsdialog.py:467 +msgid "Remove" msgstr "" -#: ../../kde4/settingsdialog.py:88 -msgid "Edit" -msgstr "編集" - -#: ../../kde4/settingsdialog.py:106 ../../gnome/settingsdialog.glade:1207 +#: ../../qt4/settingsdialog.py:96 msgid "General" msgstr "一般" -#: ../../kde4/settingsdialog.py:114 ../../gnome/settingsdialog.glade:199 +#: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "" -#: ../../kde4/settingsdialog.py:127 ../../kde4/settingsdialog.py:1311 +#: ../../qt4/settingsdialog.py:119 +#, python-format +msgid "" +"Warning: %(app)s uses EncFS for encryption. A recent security audit " +"revealed several possible attack vectors for this. Please take a look at 'A " +"NOTE ON SECURITY' in 'man backintime'." +msgstr "" + +#: ../../qt4/settingsdialog.py:129 ../../qt4/settingsdialog.py:1568 msgid "Where to save snapshots" msgstr "スナップショットの保存場所" -#: ../../kde4/settingsdialog.py:146 +#: ../../qt4/settingsdialog.py:145 +msgid "Folder" +msgstr "" + +#: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" -#: ../../kde4/settingsdialog.py:158 ../../kde4/settingsdialog.py:283 -#: ../../gnome/settingsdialog.glade:323 ../../gnome/settingsdialog.glade:583 -#: ../../gnome/settingsdialog.glade:874 +#: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "ホスト:" -#: ../../kde4/settingsdialog.py:163 ../../gnome/settingsdialog.glade:350 -#: ../../gnome/settingsdialog.glade:610 +#: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "" -#: ../../kde4/settingsdialog.py:168 ../../kde4/settingsdialog.py:288 -#: ../../gnome/settingsdialog.glade:377 ../../gnome/settingsdialog.glade:637 -#: ../../gnome/settingsdialog.glade:902 +#: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "ユーザ:" -#: ../../kde4/settingsdialog.py:173 ../../gnome/settingsdialog.glade:416 +#: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" -#: ../../kde4/settingsdialog.py:178 ../../gnome/settingsdialog.glade:459 +#: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" -#: ../../kde4/settingsdialog.py:184 +#: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "" -#: ../../kde4/settingsdialog.py:228 ../../kde4/settingsdialog.py:237 -#: ../../kde4/settingsdialog.py:243 ../../gnome/settingsdialog.glade:703 -#: ../../gnome/settingsdialog.glade:743 +#: ../../qt4/settingsdialog.py:201 +msgid "Key File" +msgstr "" + +#: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 +#: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "" -#: ../../kde4/settingsdialog.py:249 ../../gnome/settingsdialog.glade:775 +#: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" -#: ../../kde4/settingsdialog.py:252 ../../gnome/settingsdialog.glade:792 +#: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" -#: ../../kde4/settingsdialog.py:264 ../../gnome/settingsdialog.glade:968 +#: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "上級設定" -#: ../../kde4/settingsdialog.py:276 ../../gnome/settingsdialog.glade:848 -msgid "Auto Host / User / Profile Id" -msgstr "自動ホスト/ユーザ/プロファイル Id" +#: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 +msgid "Full snapshot path: " +msgstr "" -#: ../../kde4/settingsdialog.py:301 +#: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "スケジュール" -#: ../../kde4/settingsdialog.py:311 ../../gnome/settingsdialog.glade:1092 +#: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "" -#: ../../kde4/settingsdialog.py:322 ../../gnome/settingsdialog.glade:1079 +#: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "" -#: ../../kde4/settingsdialog.py:333 ../../gnome/settingsdialog.glade:1066 +#: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "時:" -#: ../../kde4/settingsdialog.py:344 ../../gnome/settingsdialog.glade:1053 +#: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "" -#: ../../kde4/settingsdialog.py:353 ../../gnome/settingsdialog.glade:1014 +#: ../../qt4/settingsdialog.py:339 msgid "" -"Run Back In Time periodically with anacron. This is useful if the computer " -"is not running regular." +"Run Back In Time repeatedly. This is useful if the computer is not running " +"regular." msgstr "" -#: ../../kde4/settingsdialog.py:357 ../../gnome/settingsdialog.glade:1040 -msgid "Frequency in days:" +#: ../../qt4/settingsdialog.py:344 +msgid "Every:" msgstr "" -#: ../../kde4/settingsdialog.py:368 ../../gnome/settingsdialog.glade:1026 +#: ../../qt4/settingsdialog.py:362 msgid "" "Run Back In Time as soon as the drive is connected (only once every X " "days).\n" "You will be prompted for your sudo password." msgstr "" -#: ../../kde4/settingsdialog.py:379 ../../gnome/settingsdialog.glade:1310 +#: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "内包" -#: ../../kde4/settingsdialog.py:403 ../../kde4/settingsdialog.py:445 -#: ../../gnome/settingsdialog.glade:1411 +#: ../../qt4/settingsdialog.py:381 +msgid "Include files and folders" +msgstr "含むファイルとフォルダ" + +#: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "ファイルを追加" -#: ../../kde4/settingsdialog.py:408 ../../kde4/settingsdialog.py:450 -#: ../../gnome/settingsdialog.glade:1427 +#: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "フォルダを追加" -#: ../../kde4/settingsdialog.py:418 ../../gnome/settingsdialog.glade:1474 +#: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "除外" -#: ../../kde4/settingsdialog.py:421 ../../gnome/settingsdialog.glade:1328 +#: ../../qt4/settingsdialog.py:417 msgid "" "Warning: Wildcards ('foo*', '[fF]oo', 'fo?') will be ignored with " "mode 'SSH encrypted'.\n" "Only separate asterisk are allowed ('foo/*', 'foo/**/bar')" msgstr "" -#: ../../kde4/settingsdialog.py:430 +#: ../../qt4/settingsdialog.py:425 +msgid "Exclude patterns, files or folders" +msgstr "ファイルやフォルダの除外パターン" + +#: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "いち押し:" -#: ../../kde4/settingsdialog.py:460 ../../gnome/settingsdialog.glade:1905 +#: ../../qt4/settingsdialog.py:463 +msgid "Add default" +msgstr "" + +#: ../../qt4/settingsdialog.py:474 +msgid "Exclude files bigger than: " +msgstr "" + +#: ../../qt4/settingsdialog.py:475 +#, python-format +msgid "" +"Exclude files bigger than value in %(prefix)s.\n" +"With 'Full rsync mode' disabled this will only affect new files\n" +"because for rsync this is a transfer option, not an exclude option.\n" +"So big files that has been backed up before will remain in snapshots\n" +"even if they had changed." +msgstr "" + +#: ../../qt4/settingsdialog.py:493 msgid "Auto-remove" msgstr "自動削除" -#: ../../kde4/settingsdialog.py:464 ../../gnome/settingsdialog.glade:1608 +#: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "以下より古い場合:" -#: ../../kde4/settingsdialog.py:478 ../../gnome/settingsdialog.glade:1624 +#: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "以下より空き容量が少ない場合:" -#: ../../kde4/settingsdialog.py:490 ../../gnome/settingsdialog.glade:1642 +#: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" -#: ../../kde4/settingsdialog.py:514 ../../gnome/settingsdialog.glade:1697 +#: ../../qt4/settingsdialog.py:551 +msgid "Run in background on remote Host." +msgstr "" + +#: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "" -#: ../../kde4/settingsdialog.py:517 ../../kde4/settingsdialog.py:522 -#: ../../gnome/settingsdialog.glade:1705 ../../gnome/settingsdialog.glade:1729 +#: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "" -#: ../../kde4/settingsdialog.py:519 ../../gnome/settingsdialog.glade:1717 +#: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "" -#: ../../kde4/settingsdialog.py:524 ../../gnome/settingsdialog.glade:1743 +#: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "" -#: ../../kde4/settingsdialog.py:527 +#: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "" -#: ../../kde4/settingsdialog.py:529 ../../gnome/settingsdialog.glade:1769 +#: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "" -#: ../../kde4/settingsdialog.py:532 ../../gnome/settingsdialog.glade:1781 +#: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "" -#: ../../kde4/settingsdialog.py:534 ../../gnome/settingsdialog.glade:1795 +#: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "" -#: ../../kde4/settingsdialog.py:537 ../../gnome/settingsdialog.glade:1496 +#: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "名付けたスナップショットは削除しない" -#: ../../kde4/settingsdialog.py:546 ../../gnome/settingsdialog.glade:2104 +#: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "オプション" -#: ../../kde4/settingsdialog.py:549 ../../gnome/settingsdialog.glade:1920 +#: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "通知を有効にする" -#: ../../kde4/settingsdialog.py:552 ../../gnome/settingsdialog.glade:1937 +#: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "バッテリ駆動の際はスナップショット取得を無効化" -#: ../../kde4/settingsdialog.py:555 +#: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" msgstr "システムから電源情報が得られません" -#: ../../kde4/settingsdialog.py:558 ../../gnome/settingsdialog.glade:1955 -msgid "Backup files on restore" -msgstr "レストアの際にファイルをバックアップ" +#: ../../qt4/settingsdialog.py:611 +msgid "Run only one snapshot at a time" +msgstr "" + +#: ../../qt4/settingsdialog.py:612 +msgid "" +"Other snapshots will be blocked until the current snapshot is done.\n" +"This is a global option. So it will effect all profiles for this user.\n" +"But you need to activate this for all other users, too." +msgstr "" + +#: ../../qt4/settingsdialog.py:617 +msgid "Backup replaced files on restore" +msgstr "" + +#: ../../qt4/settingsdialog.py:618 +#, python-format +msgid "" +"Newer versions of files will be renamed with trailing '%(suffix)s' before " +"restoring.\n" +"If you don't need them anymore you can remove them with '%(cmd)s'" +msgstr "" -#: ../../kde4/settingsdialog.py:561 ../../gnome/settingsdialog.glade:1972 +#: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "エラー発生時に継続 (不完全なスナップショットをキープ)" -#: ../../kde4/settingsdialog.py:564 ../../gnome/settingsdialog.glade:1989 +#: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "変更の検出にチェックサムを使用" -#: ../../kde4/settingsdialog.py:567 ../../gnome/settingsdialog.glade:2006 +#: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "" -#: ../../kde4/settingsdialog.py:568 ../../gnome/settingsdialog.glade:2032 +#: ../../qt4/settingsdialog.py:634 msgid "" -"- snapshots are no read-only\n" -"- destination file-system must support all linux attributes (dates, rights, " +"- snapshots are not read-only\n" +"- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" -#: ../../kde4/settingsdialog.py:575 ../../gnome/settingsdialog.glade:2045 +#: ../../qt4/settingsdialog.py:641 +msgid "Take a new snapshot regardless of there were changes or not." +msgstr "" + +#: ../../qt4/settingsdialog.py:644 msgid "Check for changes (don't take a new snapshot if nothing changed)" msgstr "" -#: ../../kde4/settingsdialog.py:582 +#: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "ログレベル:" -#: ../../kde4/settingsdialog.py:597 ../../gnome/settingsdialog.glade:2366 -msgid "Expert Options" -msgstr "上級者向けオプション" +#: ../../qt4/settingsdialog.py:656 +msgid "None" +msgstr "" + +#: ../../qt4/settingsdialog.py:658 +msgid "Changes & Errors" +msgstr "変更点とエラー" -#: ../../kde4/settingsdialog.py:600 +#: ../../qt4/settingsdialog.py:674 msgid "Change these options only if you really know what you are doing !" msgstr "何をしているか本当に理解している場合に限りこれらのオプションを変更してください!" -#: ../../kde4/settingsdialog.py:608 ../../gnome/settingsdialog.glade:2133 -msgid "Run 'nice' as cron job (default: enabled)" -msgstr "cron job として \"nice\" を実行 (デフォルト:有効)" +#: ../../qt4/settingsdialog.py:678 +msgid "Run 'nice':" +msgstr "" + +#: ../../qt4/settingsdialog.py:684 ../../qt4/settingsdialog.py:696 +msgid "as cron job" +msgstr "" + +#: ../../qt4/settingsdialog.py:687 ../../qt4/settingsdialog.py:702 +#: ../../qt4/settingsdialog.py:716 +msgid "on remote host" +msgstr "" -#: ../../kde4/settingsdialog.py:611 ../../gnome/settingsdialog.glade:2150 -msgid "Run 'ionice' as cron job (default: enabled)" -msgstr "cron job として \"ionice\" を実行(デフォルト:有効)" +#: ../../qt4/settingsdialog.py:690 +msgid "Run 'ionice':" +msgstr "" -#: ../../kde4/settingsdialog.py:614 ../../gnome/settingsdialog.glade:2167 -msgid "Run 'ionice' when taking a manual snapshot (default: disabled)" +#: ../../qt4/settingsdialog.py:699 +msgid "when taking a manual snapshot" msgstr "" -#: ../../kde4/settingsdialog.py:617 ../../gnome/settingsdialog.glade:2184 -msgid "Run 'nice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:706 +msgid "Run 'rsync' with 'nocache':" msgstr "" -#: ../../kde4/settingsdialog.py:620 ../../gnome/settingsdialog.glade:2201 -msgid "Run 'ionice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:712 +msgid "on local machine" msgstr "" -#: ../../kde4/settingsdialog.py:626 ../../gnome/settingsdialog.glade:2224 +#: ../../qt4/settingsdialog.py:719 +msgid "Redirect stdout to /dev/null in cronjobs." +msgstr "" + +#: ../../qt4/settingsdialog.py:725 +msgid "Redirect stderr to /dev/null in cronjobs." +msgstr "" + +#: ../../qt4/settingsdialog.py:734 msgid "Limit rsync bandwidth usage: " msgstr "" -#: ../../kde4/settingsdialog.py:629 ../../gnome/settingsdialog.glade:2259 +#: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" -#: ../../kde4/settingsdialog.py:634 ../../gnome/settingsdialog.glade:2280 +#: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "ACL を保存" -#: ../../kde4/settingsdialog.py:637 ../../gnome/settingsdialog.glade:2297 +#: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "拡張属性を維持(xattr)" -#: ../../kde4/settingsdialog.py:640 ../../gnome/settingsdialog.glade:2314 +#: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute links)" msgstr "危険なリンクをコピー(絶対リンクに対してのみ動作)" -#: ../../kde4/settingsdialog.py:643 ../../gnome/settingsdialog.glade:2331 -msgid "Copy links (dereference symbolic links)" -msgstr "リンクをコピー(シンボリックリンクを参照)" - -#: ../../kde4/snapshotsdialog.py:46 ../../kde4/snapshotsdialog.py:173 -#: ../../gnome/snapshotsdialog.glade:385 -msgid "Diff Options" -msgstr "Diff のオプション" - -#: ../../kde4/snapshotsdialog.py:56 ../../gnome/snapshotsdialog.glade:314 -msgid "Command:" -msgstr "コマンド:" +#: ../../qt4/settingsdialog.py:834 +msgid "Paste additional options to rsync" +msgstr "" -#: ../../kde4/snapshotsdialog.py:60 ../../gnome/snapshotsdialog.glade:322 -msgid "Parameters:" -msgstr "パラメータ:" +#: ../../qt4/settingsdialog.py:837 +msgid "" +"Options must be quoted e.g. --exclude-from=\"/path/to/my exclude file\"." +msgstr "" -#: ../../kde4/snapshotsdialog.py:64 ../../gnome/snapshotsdialog.glade:334 -msgid "Use %1 and %2 for path parameters" -msgstr "パスのパラメータに %1 と %2 を使う" +#: ../../qt4/settingsdialog.py:847 +msgid "Add prefix to SSH commands" +msgstr "" -#: ../../kde4/snapshotsdialog.py:123 ../../gnome/snapshotsdialog.glade:184 -#: ../../gnome/snapshotsdialog.glade:186 -msgid "Delete" +#: ../../qt4/settingsdialog.py:850 +#, python-format +msgid "" +"Prefix to run before every command on remote host.\n" +"Variables need to be escaped with \\$FOO.\n" +"This doesn't touch rsync. So to add a prefix\n" +"for rsync use \"%(cb_rsync_options)s\" with\n" +"%(rsync_options_value)s\n" +"\n" +"%(default)s: %(def_value)s" msgstr "" -#: ../../kde4/snapshotsdialog.py:128 ../../gnome/snapshotsdialog.glade:199 -#: ../../gnome/snapshotsdialog.glade:201 -msgid "Select All" +#: ../../qt4/settingsdialog.py:858 ../../qt4/settingsdialog.py:1691 +msgid "default" msgstr "" -#: ../../kde4/snapshotsdialog.py:132 ../../gnome/snapshotsdialog.glade:88 -msgid "List only different snapshots" -msgstr "異なるスナップショットだけを列挙" +#: ../../qt4/settingsdialog.py:875 +msgid "Restore Config" +msgstr "" -#: ../../kde4/snapshotsdialog.py:139 ../../gnome/snapshotsdialog.glade:110 -msgid "List only equal snapshots to: " +#: ../../qt4/settingsdialog.py:891 +msgid "" +"Full system backup can only create a snapshot to be restored to the same " +"physical disk(s) with the same disk partitioning as from the source; " +"restoring to new physical disks or the same disks with different " +"partitioning will yield a potentially broken and unusable system.\n" +"\n" +"Full system backup will override some settings that may have been " +"customized. Continue?" msgstr "" -#: ../../kde4/snapshotsdialog.py:149 ../../gnome/snapshotsdialog.glade:146 -msgid "Deep check (more accurate, but slow)" -msgstr "ディープチェック (より正確ですが遅いです)" +#: ../../qt4/settingsdialog.py:922 +msgid "New profile" +msgstr "新規プロファイル" -#: ../../kde4/snapshotsdialog.py:174 -msgid "Go To" -msgstr "移動" +#: ../../qt4/settingsdialog.py:938 +msgid "Rename profile" +msgstr "プロファイルをリネーム" -#: ../../gnome/logviewdialog.glade:9 -msgid "Log View" -msgstr "ログ閲覧" +#: ../../qt4/settingsdialog.py:952 +#, python-format +msgid "Are you sure you want to delete the profile \"%s\" ?" +msgstr "プロファイル \"%s\" を削除してよろしいですか?" -#: ../../gnome/logviewdialog.glade:179 -msgid "scroll down automatic" +#: ../../qt4/settingsdialog.py:1191 +msgid "" +"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " +"*/3 for periodic backups every 3 hours" msgstr "" -#: ../../gnome/mainwindow.glade:7 -msgid "Back In Time" -msgstr "Back In Time" - -#: ../../gnome/mainwindow.glade:45 -msgid "Backup Now" -msgstr "すぐにバックアップ" +#: ../../qt4/settingsdialog.py:1489 +msgid "Exclude pattern" +msgstr "除外するパターン" -#: ../../gnome/mainwindow.glade:171 -msgid "Shutdown" -msgstr "" +#: ../../qt4/settingsdialog.py:1502 +msgid "Exclude file" +msgstr "除外するファイル" -#: ../../gnome/mainwindow.glade:287 -msgid "Parent folder" -msgstr "親フォルダ" +#: ../../qt4/settingsdialog.py:1506 +msgid "Exclude folder" +msgstr "除外するフォルダ" -#: ../../gnome/mainwindow.glade:327 -msgid "Hidden files" -msgstr "不可視ファイル" +#: ../../qt4/settingsdialog.py:1525 +msgid "Include file" +msgstr "含めるファイル" -#: ../../gnome/mainwindow.glade:451 +#: ../../qt4/settingsdialog.py:1533 ../../qt4/settingsdialog.py:1553 +#, python-format msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +"\"%s\" is a symlink. The linked target will not be backed up until you " +"include it, too.\n" +"Would you like to include the symlinks target instead?" msgstr "" -"このフォルダは現在のスナップショットには\\n\n" -"存在しません!" -#: ../../gnome/settingsdialog.glade:287 -msgid "Where to save snapshots" -msgstr "スナップショットの保存場所" +#: ../../qt4/settingsdialog.py:1545 +msgid "Include folder" +msgstr "含めるフォルダ" -#: ../../gnome/settingsdialog.glade:483 -msgid "Private key:" -msgstr "" +#: ../../qt4/settingsdialog.py:1572 +msgid "Are you sure you want to change snapshots folder ?" +msgstr "スナップショットフォルダを変更してよろしいですか?" -#: ../../gnome/settingsdialog.glade:534 -msgid "Advanced SSH Settings" +#: ../../qt4/settingsdialog.py:1688 +msgid "enabled" msgstr "" -#: ../../gnome/settingsdialog.glade:552 -msgid "SSH Settings" +#: ../../qt4/settingsdialog.py:1690 +msgid "disabled" msgstr "" -#: ../../gnome/settingsdialog.glade:815 -msgid "Password" +#: ../../qt4/settingsdialog.py:1715 +msgid "Restore Settings" msgstr "" -#: ../../gnome/settingsdialog.glade:930 -msgid "Profile Id:" -msgstr "プロファイルID:" +#: ../../qt4/settingsdialog.py:1732 +msgid " and add your user to group 'fuse'" +msgstr "" -#: ../../gnome/settingsdialog.glade:1115 +#: ../../qt4/settingsdialog.py:1736 +#, python-format msgid "" -"hours seperate by comma ( e.g. 8,12,18,23) or */3 for periodic backups every " -"3 hours (cron style)" +"Please navigate to the snapshot from which you want to restore %(appName)s's " +"configuration. The path may look like: \n" +"%(samplePath)s\n" +"\n" +"If your snapshots are on a remote drive or if they are encrypted you need to " +"manually mount them first. If you use Mode SSH you also may need to set up " +"public key login to the remote host%(addFuse)s.\n" +"Take a look at 'man backintime'." msgstr "" -#: ../../gnome/settingsdialog.glade:1163 -msgid "Schedule" -msgstr "予定" +#: ../../qt4/settingsdialog.py:1794 ../../qt4/settingsdialog.py:1854 +msgid "No config found" +msgstr "" + +#: ../../qt4/snapshotsdialog.py:49 ../../qt4/snapshotsdialog.py:173 +msgid "Diff Options" +msgstr "Diff のオプション" + +#: ../../qt4/snapshotsdialog.py:56 +msgid "Command:" +msgstr "コマンド:" + +#: ../../qt4/snapshotsdialog.py:60 +msgid "Parameters:" +msgstr "パラメータ:" + +#: ../../qt4/snapshotsdialog.py:64 +msgid "Use %1 and %2 for path parameters" +msgstr "パスのパラメータに %1 と %2 を使う" + +#: ../../qt4/snapshotsdialog.py:106 +msgid "List only different snapshots" +msgstr "異なるスナップショットだけを列挙" -#: ../../gnome/settingsdialog.glade:1363 -msgid "Highly recommended:" -msgstr "いち押し:" +#: ../../qt4/snapshotsdialog.py:113 +msgid "List only equal snapshots to: " +msgstr "" + +#: ../../qt4/snapshotsdialog.py:123 +msgid "Deep check (more accurate, but slow)" +msgstr "ディープチェック (より正確ですが遅いです)" -#: ../../gnome/settingsdialog.glade:1377 -msgid "label" -msgstr "ラベル" +#: ../../qt4/snapshotsdialog.py:144 +msgid "Delete" +msgstr "" -#: ../../gnome/settingsdialog.glade:1755 -msgid "week(s)" +#: ../../qt4/snapshotsdialog.py:148 +msgid "Select All" msgstr "" -#: ../../gnome/settingsdialog.glade:2069 -msgid "Log level:" -msgstr "ログレベル:" +#: ../../qt4/snapshotsdialog.py:161 +msgid "Diff" +msgstr "Diff (差分)" + +#: ../../qt4/snapshotsdialog.py:172 +msgid "Go To" +msgstr "移動" -#: ../../gnome/settingsdialog.glade:2121 +#: ../../qt4/snapshotsdialog.py:326 +msgid "You can't compare a snapshot to itself" +msgstr "スナップショット自体とは比較できません" + +#: ../../qt4/snapshotsdialog.py:333 +#, python-format +msgid "Command not found: %s" +msgstr "コマンド %s がみつかりませんでした" + +#: ../../qt4/snapshotsdialog.py:354 +#, python-format msgid "" -"Change these options only if you really know what you are doing !" -msgstr "何をしているか本当に理解している場合に限りこれらのオプションを変更してください!" +"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" +msgstr "" -#: ../../gnome/snapshotsdialog.glade:263 -msgid "Diff with" -msgstr "差分検出" +#: ../../qt4/snapshotsdialog.py:357 +#, python-format +msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +msgstr "" -#: ../../gnome/textinputdialog.glade:7 -msgid "Pattern" -msgstr "パターン" +#: ../../qt4/snapshotsdialog.py:359 +msgid "WARNING: This can not be revoked!" +msgstr "" -#: ../../gnome/textinputdialog.glade:70 -msgid "Text" +#: ../../qt4/snapshotsdialog.py:374 +#, python-format +msgid "Exclude \"%s\" from future snapshots?" msgstr "" diff -Nru backintime-1.0.36/common/po/jv.po backintime-1.1.12/common/po/jv.po --- backintime-1.0.36/common/po/jv.po 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/po/jv.po 2016-01-11 18:07:58.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2013-11-09 22:34+0100\n" +"POT-Creation-Date: 2015-12-19 00:47+0100\n" "PO-Revision-Date: 2009-04-17 14:06+0000\n" "Last-Translator: Rahman Yusri Aftian \n" "Language-Team: Javanese \n" @@ -15,254 +15,295 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 0;\n" -"X-Launchpad-Export-Date: 2014-08-06 10:20+0000\n" -"X-Generator: Launchpad (build 17147)\n" +"X-Launchpad-Export-Date: 2016-01-11 17:52+0000\n" +"X-Generator: Launchpad (build 17881)\n" -#: ../../common/config.py:72 +#: ../../common/configfile.py:60 +#, python-format +msgid "Failed to save config: %s" +msgstr "" + +#: ../../common/configfile.py:78 +#, python-format +msgid "Failed to load config: %s" +msgstr "" + +#: ../../common/configfile.py:352 ../../common/configfile.py:414 +#, python-format +msgid "Profile \"%s\" already exists !" +msgstr "" + +#: ../../common/configfile.py:383 +msgid "You can't remove the last profile !" +msgstr "" + +#: ../../common/config.py:76 msgid "Disabled" msgstr "Gak Digawe" -#: ../../common/config.py:73 +#: ../../common/config.py:77 msgid "At every boot/reboot" msgstr "" -#: ../../common/config.py:74 +#: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Sak Ben 5 Menit" -#: ../../common/config.py:75 +#: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Sak Ben 10 Menit" -#: ../../common/config.py:76 +#: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "" -#: ../../common/config.py:77 +#: ../../common/config.py:81 msgid "Every hour" msgstr "" -#: ../../common/config.py:78 +#: ../../common/config.py:82 msgid "Every 2 hours" msgstr "" -#: ../../common/config.py:79 +#: ../../common/config.py:83 msgid "Every 4 hours" msgstr "" -#: ../../common/config.py:80 +#: ../../common/config.py:84 msgid "Every 6 hours" msgstr "" -#: ../../common/config.py:81 +#: ../../common/config.py:85 msgid "Every 12 hours" msgstr "" -#: ../../common/config.py:82 +#: ../../common/config.py:86 msgid "Custom Hours" msgstr "" -#: ../../common/config.py:83 +#: ../../common/config.py:87 msgid "Every Day" msgstr "Sak Ben Dino" -#: ../../common/config.py:84 -msgid "Daily (anacron)" +#: ../../common/config.py:88 +msgid "Repeatedly (anacron)" msgstr "" -#: ../../common/config.py:85 +#: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "" -#: ../../common/config.py:86 +#: ../../common/config.py:90 msgid "Every Week" msgstr "Sak Ben Minggu" -#: ../../common/config.py:87 +#: ../../common/config.py:91 msgid "Every Month" msgstr "Sak Ben Wulan" -#: ../../common/config.py:91 +#: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "" -#: ../../common/config.py:92 +#: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "" -#: ../../common/config.py:93 +#: ../../common/config.py:97 msgid "Year(s)" msgstr "" -#: ../../common/config.py:100 +#: ../../common/config.py:101 +msgid "Hour(s)" +msgstr "" + +#: ../../common/config.py:104 +msgid "Month(s)" +msgstr "" + +#: ../../common/config.py:126 ../../qt4/settingsdialog.py:551 msgid " EXPERIMENTAL!" msgstr "" -#: ../../common/config.py:103 +#: ../../common/config.py:129 msgid "Local" msgstr "" -#: ../../common/config.py:104 +#: ../../common/config.py:130 msgid "SSH" msgstr "" -#: ../../common/config.py:104 ../../common/config.py:106 -#: ../../gnome/settingsdialog.py:475 ../../kde4/settingsdialog.py:1325 +#: ../../common/config.py:130 ../../common/config.py:132 +#: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "" -#: ../../common/config.py:105 +#: ../../common/config.py:131 msgid "Local encrypted" msgstr "" -#: ../../common/config.py:105 ../../common/config.py:106 +#: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "" -#: ../../common/config.py:106 +#: ../../common/config.py:132 msgid "SSH encrypted" msgstr "" -#: ../../common/config.py:112 +#: ../../common/config.py:135 msgid "Default" msgstr "" -#: ../../common/config.py:113 +#: ../../common/config.py:136 msgid "AES128-CTR" msgstr "" -#: ../../common/config.py:114 +#: ../../common/config.py:137 msgid "AES192-CTR" msgstr "" -#: ../../common/config.py:115 +#: ../../common/config.py:138 msgid "AES256-CTR" msgstr "" -#: ../../common/config.py:116 +#: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "" -#: ../../common/config.py:117 +#: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "" -#: ../../common/config.py:118 +#: ../../common/config.py:141 msgid "AES128-CBC" msgstr "" -#: ../../common/config.py:119 +#: ../../common/config.py:142 msgid "3DES-CBC" msgstr "" -#: ../../common/config.py:120 +#: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "" -#: ../../common/config.py:121 +#: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "" -#: ../../common/config.py:122 +#: ../../common/config.py:145 msgid "AES192-CBC" msgstr "" -#: ../../common/config.py:123 +#: ../../common/config.py:146 msgid "AES256-CBC" msgstr "" -#: ../../common/config.py:124 +#: ../../common/config.py:147 msgid "ARCFOUR" msgstr "" -#: ../../common/config.py:129 +#: ../../common/config.py:153 msgid "Main profile" msgstr "" -#: ../../common/config.py:256 ../../common/config.py:275 -#: ../../common/config.py:286 ../../common/config.py:291 +#: ../../common/config.py:289 ../../common/config.py:296 +#: ../../common/config.py:307 ../../common/config.py:312 +#: ../../qt4/qt4systrayicon.py:61 #, python-format msgid "Profile: \"%s\"" msgstr "" -#: ../../common/config.py:256 +#: ../../common/config.py:289 msgid "Snapshots folder is not valid !" msgstr "" -#: ../../common/config.py:275 +#: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "" -#: ../../common/config.py:286 +#: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "" -#: ../../common/config.py:291 +#: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "" -#: ../../common/config.py:361 +#: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "" -#: ../../common/config.py:376 ../../common/config.py:389 +#: ../../common/config.py:380 +msgid "Host/User/Profile-ID must not be empty!" +msgstr "" + +#: ../../common/config.py:388 ../../common/config.py:420 #, python-format msgid "" "Can't write to: %s\n" "Are you sure you have write access ?" msgstr "" -#: ../../common/config.py:1286 +#: ../../common/config.py:400 +#, python-format msgid "" -"Can't find crontab.\n" -"Are you sure cron is installed ?\n" -"If not you should disable all automatic backups." +"Destination filesystem for '%(path)s' is formatted with FAT which doesn't " +"support hard-links. Please use a native Linux filesystem." msgstr "" -#: ../../common/config.py:1338 +#: ../../common/config.py:405 #, python-format -msgid "Schedule udev doesn't work with mode %s" +msgid "" +"Destination filsystem for '%(path)s' is a SMB mounted share. Please make " +"sure the remote SMB server supports symlinks or activate '%(copyLinks)s' in " +"'%(expertOptions)s'." msgstr "" -#: ../../common/config.py:1342 -#, python-format -msgid "Couldn't find UUID for \"%s\"" +#: ../../common/config.py:408 ../../qt4/settingsdialog.py:815 +msgid "Copy links (dereference symbolic links)" msgstr "" -#: ../../common/config.py:1379 -msgid "Failed to remove udev rules" +#: ../../common/config.py:409 ../../qt4/settingsdialog.py:669 +msgid "Expert Options" msgstr "" -#: ../../common/config.py:1385 -msgid "Failed to create udev rules" +#: ../../common/config.py:411 +#, python-format +msgid "" +"Destination filesystem for '%(path)s is a sshfs mounted share. sshfs doesn't " +"support hard-links. Please use mode 'SSH' instead." msgstr "" -#: ../../common/config.py:1420 +#: ../../common/config.py:1407 msgid "" -"Can't find anacron.\n" -"Are you sure anacron is installed ?\n" -"If not you should disable daily anacron backups." +"Can't find crontab.\n" +"Are you sure cron is installed ?\n" +"If not you should disable all automatic backups." msgstr "" -#: ../../common/config.py:1439 -msgid "Please provide your sudo password to install the udev rule." +#: ../../common/config.py:1411 +msgid "Failed to write new crontab." msgstr "" -#: ../../common/config.py:1445 -msgid "Please provide your sudo password to remove unused udev rules." +#: ../../common/config.py:1505 +#, python-format +msgid "" +"Could not install Udev rule for profile %(profile_id)s. DBus Service " +"'%(dbus_interface)s' wasn't available" msgstr "" -#: ../../common/configfile.py:253 ../../common/configfile.py:315 +#: ../../common/config.py:1517 #, python-format -msgid "Profile \"%s\" already exists !" +msgid "Schedule udev doesn't work with mode %s" msgstr "" -#: ../../common/configfile.py:284 -msgid "You can't remove the last profile !" +#: ../../common/config.py:1526 +#, python-format +msgid "Couldn't find UUID for \"%s\"" msgstr "" -#: ../../common/encfstools.py:95 +#: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" @@ -270,38 +311,38 @@ "%(error)s" msgstr "" -#: ../../common/encfstools.py:105 +#: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "" -#: ../../common/encfstools.py:149 +#: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "" -#: ../../common/encfstools.py:153 +#: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" -#: ../../common/encfstools.py:154 +#: ../../common/encfstools.py:171 msgid "Cancel" msgstr "" -#: ../../common/encfstools.py:157 +#: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "" -#: ../../common/encfstools.py:161 +#: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "" -#: ../../common/encfstools.py:166 +#: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" -#: ../../common/encfstools.py:174 ../../common/sshtools.py:207 +#: ../../common/encfstools.py:196 ../../common/sshtools.py:262 #, python-format msgid "" "%(user)s is not member of group 'fuse'.\n" @@ -309,70 +350,73 @@ "Look at 'man backintime' for further instructions." msgstr "" -#: ../../common/encfstools.py:189 +#: ../../common/encfstools.py:211 msgid "" "encfs version 1.7.2 and before has a bug with option --reverse. Please " "update encfs" msgstr "" -#: ../../common/encfstools.py:453 ../../common/encfstools.py:480 -#: ../../common/snapshots.py:982 ../../common/snapshots.py:1288 -#: ../../kde4/app.py:82 ../../gnome/mainwindow.glade:43 +#: ../../common/encfstools.py:512 ../../common/snapshots.py:1131 +#: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "" -#: ../../common/mount.py:195 +#: ../../common/mount.py:204 #, python-format msgid "" "Hash collision occurred in hash_id %s. Incrementing global value " "hash_collision and try again." msgstr "" -#: ../../common/mount.py:246 +#: ../../common/mount.py:259 #, python-format msgid "mountpoint %s not empty." msgstr "" -#: ../../common/mount.py:286 +#: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" -#: ../../common/password.py:425 +#: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" -#: ../../common/snapshots.py:171 ../../gnome/app.py:1127 -#: ../../kde4/app.py:1014 +#: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "" -#: ../../common/snapshots.py:182 ../../gnome/gnometools.py:37 +#: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "" -#: ../../common/snapshots.py:282 +#: ../../common/snapshots.py:344 msgid "" "### This log has been decoded with automatic search pattern\n" "### If some paths are not decoded you can manually decode them with:\n" msgstr "" -#: ../../common/snapshots.py:465 +#: ../../common/snapshots.py:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "" -#: ../../common/snapshots.py:564 +#: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "" -#: ../../common/snapshots.py:739 +#: ../../common/snapshots.py:752 ../../qt4/app.py:377 ../../qt4/app.py:675 +#: ../../qt4/app.py:692 ../../qt4/qt4systrayicon.py:65 +msgid "Done" +msgstr "" + +#: ../../common/snapshots.py:860 msgid "" "Back In Time changed its backup format.\n" "\n" "Your old snapshots can be moved according to this new format. OK?" msgstr "" -#: ../../common/snapshots.py:749 +#: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" @@ -383,13 +427,13 @@ "(The program will still be able to discriminate between them)" msgstr "" -#: ../../common/snapshots.py:752 +#: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" msgstr "" -#: ../../common/snapshots.py:803 +#: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" @@ -402,7 +446,7 @@ "cannot continue taking snapshots" msgstr "" -#: ../../common/snapshots.py:812 +#: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" @@ -412,14 +456,14 @@ "if you are done restart Back In Time to proceed" msgstr "" -#: ../../common/snapshots.py:825 +#: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" msgstr "" -#: ../../common/snapshots.py:830 +#: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" @@ -431,172 +475,183 @@ "If you do not, you will be asked again next time you start Back In Time." msgstr "" -#: ../../common/snapshots.py:839 +#: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "" -#: ../../common/snapshots.py:841 +#: ../../common/snapshots.py:953 msgid "" "Back In Time still cannot continue taking new snapshots.\n" "Restart Back In Time to see the questions again" msgstr "" -#: ../../common/snapshots.py:913 +#: ../../common/snapshots.py:972 +msgid "Deferring backup while on battery" +msgstr "" + +#: ../../common/snapshots.py:1035 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it." msgstr "" -#: ../../common/snapshots.py:915 +#: ../../common/snapshots.py:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "" msgstr[1] "" -#: ../../common/snapshots.py:941 +#: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "" -#: ../../common/snapshots.py:950 +#: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "" -#: ../../common/snapshots.py:1088 +#: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "" -#: ../../common/snapshots.py:1107 +#: ../../common/snapshots.py:1217 msgid "..." msgstr "" -#: ../../common/snapshots.py:1134 +#: ../../common/snapshots.py:1238 +#, python-format +msgid "Found leftover '%s' which can be continued." +msgstr "" + +#: ../../common/snapshots.py:1250 +#, python-format +msgid "Remove leftover '%s' folder from last run" +msgstr "" + +#: ../../common/snapshots.py:1263 #, python-format msgid "Can't remove folder: %s" msgstr "" -#: ../../common/snapshots.py:1219 +#: ../../common/snapshots.py:1340 #, python-format msgid "Compare with snapshot %s" msgstr "" -#: ../../common/snapshots.py:1248 +#: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "" -#: ../../common/snapshots.py:1335 +#: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "" -#: ../../common/snapshots.py:1341 +#: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "" -#: ../../common/snapshots.py:1442 +#: ../../common/snapshots.py:1470 +msgid "Save permission over ssh failed. Retry normal method" +msgstr "" + +#: ../../common/snapshots.py:1521 #, python-format msgid "Can't rename %(new_path)s to %(path)s" msgstr "" -#: ../../common/snapshots.py:1562 -msgid "Remove old snapshots" +#: ../../common/snapshots.py:1695 ../../common/snapshots.py:1728 +#: ../../qt4/settingsdialog.py:542 +msgid "Smart remove" msgstr "" -#: ../../common/snapshots.py:1586 ../../kde4/settingsdialog.py:501 -#: ../../gnome/settingsdialog.glade:1660 -msgid "Smart remove" +#: ../../common/snapshots.py:1704 +msgid "Remove old snapshots" msgstr "" -#: ../../common/snapshots.py:1591 +#: ../../common/snapshots.py:1733 msgid "Try to keep min free space" msgstr "" -#: ../../common/snapshots.py:1621 +#: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" -#: ../../common/sshtools.py:106 +#: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "" -#: ../../common/sshtools.py:113 +#: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "" -#: ../../common/sshtools.py:187 -#, python-format -msgid "" -"Failed to unlock SSH private key:\n" -"Error: %s" -msgstr "" - -#: ../../common/sshtools.py:194 +#: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" -#: ../../common/sshtools.py:199 +#: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" -#: ../../common/sshtools.py:217 +#: ../../common/sshtools.py:278 #, python-format msgid "" "Password-less authentication for %(user)s@%(host)s failed. Look at 'man " "backintime' for further instructions." msgstr "" -#: ../../common/sshtools.py:229 +#: ../../common/sshtools.py:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" -#: ../../common/sshtools.py:254 +#: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" -#: ../../common/sshtools.py:274 +#: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" -#: ../../common/sshtools.py:276 +#: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:278 +#: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:280 +#: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" -#: ../../common/sshtools.py:302 +#: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" -#: ../../common/sshtools.py:325 ../../common/sshtools.py:383 +#: ../../common/sshtools.py:423 ../../common/sshtools.py:553 #, python-format msgid "" "Remote host %(host)s doesn't support '%(command)s':\n" @@ -604,7 +659,7 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:387 +#: ../../common/sshtools.py:556 #, python-format msgid "" "Check commands on host %(host)s returned unknown error:\n" @@ -612,817 +667,937 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:400 +#: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "" -#: ../../gnome/app.py:185 ../../gnome/app.py:594 ../../gnome/app.py:608 -#: ../../kde4/app.py:299 ../../kde4/app.py:570 ../../kde4/app.py:587 -msgid "Done" +#: ../../qt4/app.py:81 +msgid "Refresh snapshots list" msgstr "" -#: ../../gnome/app.py:189 ../../kde4/app.py:143 ../../kde4/app.py:159 -#: ../../gnome/mainwindow.glade:225 -msgid "Help" +#: ../../qt4/app.py:85 ../../qt4/app.py:890 +msgid "Snapshot Name" msgstr "" -#: ../../gnome/app.py:191 ../../kde4/app.py:146 -#: ../../gnome/mainwindow.glade:223 -msgid "Website" +#: ../../qt4/app.py:88 +msgid "Remove Snapshot" msgstr "" -#: ../../gnome/app.py:192 ../../kde4/app.py:148 -msgid "FAQ" +#: ../../qt4/app.py:91 +msgid "View Snapshot Log" msgstr "" -#: ../../gnome/app.py:193 ../../kde4/app.py:150 -msgid "Ask a question" +#: ../../qt4/app.py:94 +msgid "View Last Log" msgstr "" -#: ../../gnome/app.py:194 ../../kde4/app.py:152 -msgid "Report a bug" +#: ../../qt4/app.py:99 ../../qt4/settingsdialog.py:51 +msgid "Settings" msgstr "" -#: ../../gnome/app.py:196 ../../kde4/app.py:155 -msgid "About" +#: ../../qt4/app.py:104 +msgid "Shutdown" msgstr "" -#: ../../gnome/app.py:202 ../../gnome/app.py:887 -#: ../../gnome/restoredialog.py:84 ../../gnome/snapshotsdialog.py:83 -#: ../../gnome/snapshotsdialog.py:244 ../../kde4/app.py:206 -#: ../../kde4/app.py:216 ../../kde4/restoredialog.py:68 -#: ../../kde4/snapshotsdialog.py:111 ../../kde4/snapshotsdialog.py:117 -#: ../../gnome/mainwindow.glade:350 ../../gnome/mainwindow.glade:352 -#: ../../gnome/snapshotsdialog.glade:169 ../../gnome/snapshotsdialog.glade:171 -msgid "Restore" +#: ../../qt4/app.py:105 +msgid "Shutdown system after snapshot has finished." msgstr "" -#: ../../gnome/app.py:203 ../../gnome/app.py:888 ../../gnome/gnometools.py:67 -#: ../../gnome/snapshotsdialog.py:84 ../../gnome/snapshotsdialog.py:245 -#: ../../kde4/app.py:208 ../../kde4/restoredialog.py:42 -#: ../../kde4/snapshotsdialog.py:113 -msgid "Restore to ..." +#: ../../qt4/app.py:111 +msgid "Exit" msgstr "" -#: ../../gnome/app.py:205 ../../gnome/app.py:896 ../../gnome/app.py:1146 -#: ../../kde4/app.py:1041 -#, python-format -msgid "Restore '%s'" +#: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 +msgid "Help" msgstr "" -#: ../../gnome/app.py:207 ../../gnome/app.py:897 ../../gnome/app.py:1147 -#: ../../kde4/app.py:1042 -#, python-format -msgid "Restore '%s' to ..." +#: ../../qt4/app.py:122 +msgid "Config File Help" msgstr "" -#: ../../gnome/app.py:226 ../../kde4/app.py:235 -msgid "Shortcuts" +#: ../../qt4/app.py:125 +msgid "Website" msgstr "" -#: ../../gnome/app.py:249 -msgid "Name" +#: ../../qt4/app.py:127 ../../qt4/app.py:982 +msgid "Changelog" msgstr "" -#: ../../gnome/app.py:260 -msgid "Size" +#: ../../qt4/app.py:129 +msgid "FAQ" msgstr "" -#: ../../gnome/app.py:267 -msgid "Date" +#: ../../qt4/app.py:131 +msgid "Ask a question" msgstr "" -#: ../../gnome/app.py:286 ../../gnome/app.py:883 -#: ../../gnome/snapshotsdialog.py:116 ../../kde4/app.py:171 -#: ../../kde4/app.py:221 ../../kde4/snapshotsdialog.py:91 -#: ../../gnome/mainwindow.glade:366 ../../gnome/mainwindow.glade:368 -#: ../../gnome/snapshotsdialog.glade:8 -msgid "Snapshots" +#: ../../qt4/app.py:133 +msgid "Report a bug" msgstr "" -#: ../../gnome/app.py:348 ../../kde4/app.py:362 -msgid "" -"Can't find snapshots folder.\n" -"If it is on a removable drive please plug it and then press OK" +#: ../../qt4/app.py:136 ../../qt4/app.py:1344 +msgid "About" msgstr "" -#: ../../gnome/app.py:611 ../../kde4/app.py:590 -msgid "Done, no backup needed" +#: ../../qt4/app.py:163 +msgid "Up" msgstr "" -#: ../../gnome/app.py:619 ../../kde4/app.py:598 -msgid "Working:" +#: ../../qt4/app.py:174 ../../qt4/settingsdialog.py:1776 +msgid "Show hidden files" msgstr "" -#: ../../gnome/app.py:623 ../../kde4/app.py:602 -msgid "Error:" +#: ../../qt4/app.py:184 ../../qt4/app.py:199 ../../qt4/app.py:233 +#: ../../qt4/restoredialog.py:62 ../../qt4/settingsdialog.py:1818 +#: ../../qt4/snapshotsdialog.py:134 ../../qt4/snapshotsdialog.py:139 +msgid "Restore" msgstr "" -#: ../../gnome/app.py:636 ../../kde4/app.py:649 -msgid "Global" +#: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 +#: ../../qt4/snapshotsdialog.py:136 +msgid "Restore to ..." msgstr "" -#: ../../gnome/app.py:637 ../../kde4/app.py:650 -msgid "Root" +#: ../../qt4/app.py:194 +msgid "Restore and delete new files" msgstr "" -#: ../../gnome/app.py:638 ../../kde4/app.py:651 -msgid "Home" +#: ../../qt4/app.py:201 +#, python-format +msgid "" +"Restore selected file or folder.\n" +"If this button is grayed out this is most likely because \"%(now)s\" is " +"selected in left hand snapshots list." msgstr "" -#: ../../gnome/app.py:662 -msgid "Bookmarks" +#: ../../qt4/app.py:206 ../../qt4/logviewdialog.py:67 +#: ../../qt4/qt4tools.py:160 ../../qt4/snapshotsdialog.py:96 +msgid "Snapshots" msgstr "" -#: ../../gnome/app.py:675 ../../kde4/app.py:662 -msgid "Backup folders" +#: ../../qt4/app.py:213 +msgid "Snapshot" msgstr "" -#: ../../gnome/app.py:701 ../../kde4/app.py:734 -msgid "Today" +#: ../../qt4/app.py:224 +msgid "View" msgstr "" -#: ../../gnome/app.py:705 ../../kde4/app.py:738 -msgid "Yesterday" +#: ../../qt4/app.py:277 +msgid "Shortcuts" msgstr "" -#: ../../gnome/app.py:709 ../../kde4/app.py:742 -msgid "This week" +#: ../../qt4/app.py:295 +msgid "" +"This folder doesn't exist\n" +"in the current selected snapshot!" msgstr "" -#: ../../gnome/app.py:713 ../../kde4/app.py:746 -msgid "Last week" +#: ../../qt4/app.py:359 +msgid "Add to Include" msgstr "" -#: ../../gnome/app.py:764 ../../kde4/app.py:398 -msgid "" -"If you close this window Back In Time will not be able to shutdown your " -"system when the snapshot has finished.\n" -"Do you really want to close?" +#: ../../qt4/app.py:360 +msgid "Add to Exclude" msgstr "" -#: ../../gnome/app.py:881 ../../gnome/snapshotsdialog.py:238 -msgid "Open" +#: ../../qt4/app.py:416 +#, python-format +msgid "" +"%(appName)s is not configured. Would you like to restore a previous " +"configuration?" msgstr "" -#: ../../gnome/app.py:1056 ../../kde4/app.py:90 ../../kde4/app.py:805 -#: ../../gnome/mainwindow.glade:73 ../../gnome/mainwindow.glade:75 -msgid "Snapshot Name" +#: ../../qt4/app.py:440 +msgid "" +"Can't find snapshots folder.\n" +"If it is on a removable drive please plug it and then press OK" msgstr "" -#: ../../gnome/app.py:1075 -#, python-format +#: ../../qt4/app.py:473 msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +"If you close this window Back In Time will not be able to shutdown your " +"system when the snapshot has finished.\n" +"Do you really want to close?" msgstr "" -#: ../../gnome/app.py:1123 ../../kde4/app.py:1010 -#, python-format -msgid "Snapshot: %s" +#: ../../qt4/app.py:667 ../../qt4/app.py:703 +msgid "Working:" msgstr "" -#: ../../gnome/app.py:1124 ../../kde4/app.py:1011 -#, python-format -msgid "View the snapshot made at %s" +#: ../../qt4/app.py:695 +msgid "Done, no backup needed" msgstr "" -#: ../../gnome/app.py:1126 ../../kde4/app.py:1013 -msgid "View the current disk content" +#: ../../qt4/app.py:707 +msgid "Error:" msgstr "" -#: ../../gnome/logviewdialog.py:106 ../../gnome/settingsdialog.py:414 -#: ../../kde4/logviewdialog.py:83 ../../kde4/settingsdialog.py:590 -msgid "All" +#: ../../qt4/app.py:726 ../../qt4/qt4systrayicon.py:153 +msgid "Sent:" msgstr "" -#: ../../gnome/logviewdialog.py:107 ../../gnome/settingsdialog.py:412 -#: ../../kde4/logviewdialog.py:84 ../../kde4/settingsdialog.py:588 -msgid "Errors" +#: ../../qt4/app.py:727 ../../qt4/qt4systrayicon.py:154 +msgid "Speed:" msgstr "" -#: ../../gnome/logviewdialog.py:112 ../../kde4/logviewdialog.py:89 -msgid "Changes" +#: ../../qt4/app.py:728 ../../qt4/qt4systrayicon.py:155 +msgid "ETA:" msgstr "" -#: ../../gnome/logviewdialog.py:115 ../../kde4/logviewdialog.py:92 -msgid "Informations" +#: ../../qt4/app.py:777 +msgid "Global" msgstr "" -#: ../../gnome/settingsdialog.py:235 ../../kde4/settingsdialog.py:387 -msgid "Include files and folders" +#: ../../qt4/app.py:778 +msgid "Root" msgstr "" -#: ../../gnome/settingsdialog.py:264 -msgid "Exclude patterns, files or folders" +#: ../../qt4/app.py:779 +msgid "Home" msgstr "" -#: ../../gnome/settingsdialog.py:411 ../../kde4/settingsdialog.py:587 -msgid "None" +#: ../../qt4/app.py:794 +msgid "Backup folders" msgstr "" -#: ../../gnome/settingsdialog.py:413 ../../kde4/settingsdialog.py:589 -msgid "Changes & Errors" +#: ../../qt4/app.py:849 +msgid "This is NOT a snapshot but a live view of your local files" msgstr "" -#: ../../gnome/settingsdialog.py:458 -msgid "Snapshots folder" +#: ../../qt4/app.py:860 ../../qt4/app.py:1476 +#, python-format +msgid "Last check %s" msgstr "" -#: ../../gnome/settingsdialog.py:466 ../../kde4/settingsdialog.py:1314 -msgid "Are you sure you want to change snapshots folder ?" +#: ../../qt4/app.py:928 +#, python-format +msgid "" +"Are you sure you want to remove the snapshot:\n" +"%s" msgstr "" -#: ../../gnome/settingsdialog.py:901 ../../kde4/settingsdialog.py:914 +#: ../../qt4/app.py:1004 +#, python-format msgid "" -"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " -"*/3 for periodic backups every 3 hours" +"Backup local files before overwriting or\n" +"removing with trailing '%(suffix)s'." msgstr "" -#: ../../gnome/settingsdialog.py:1141 ../../kde4/settingsdialog.py:653 -msgid "New profile" +#: ../../qt4/app.py:1010 +msgid "" +"Are you sure you want to remove all newer files in your original folder?" msgstr "" -#: ../../gnome/settingsdialog.py:1155 ../../kde4/settingsdialog.py:669 -msgid "Rename profile" +#: ../../qt4/app.py:1014 +msgid "" +"WARNING: deleting files in filesystem root could break your whole system!!!" msgstr "" -#: ../../gnome/settingsdialog.py:1167 ../../kde4/settingsdialog.py:683 -#, python-format -msgid "Are you sure you want to delete the profile \"%s\" ?" +#: ../../qt4/app.py:1016 +msgid "Files to be restored:" msgstr "" -#: ../../gnome/settingsdialog.py:1173 ../../kde4/settingsdialog.py:1292 -msgid "Include folder" +#: ../../qt4/app.py:1031 +msgid "Do you really want to restore this files(s):" msgstr "" -#: ../../gnome/settingsdialog.py:1193 ../../kde4/settingsdialog.py:1278 -msgid "Include file" +#: ../../qt4/app.py:1226 +#, python-format +msgid "Snapshot: %s" msgstr "" -#: ../../gnome/settingsdialog.py:1235 ../../kde4/settingsdialog.py:1241 -msgid "Exclude pattern" +#: ../../qt4/app.py:1227 +#, python-format +msgid "View the snapshot made at %s" msgstr "" -#: ../../gnome/settingsdialog.py:1240 ../../kde4/settingsdialog.py:1251 -msgid "Exclude patterns can't contain ':' char !" +#: ../../qt4/app.py:1229 +msgid "View the current disk content" msgstr "" -#: ../../gnome/settingsdialog.py:1246 ../../kde4/settingsdialog.py:1257 -msgid "Exclude file" +#: ../../qt4/app.py:1268 +#, python-format +msgid "Restore '%s'" msgstr "" -#: ../../gnome/settingsdialog.py:1257 ../../kde4/settingsdialog.py:1261 -msgid "Exclude folder" +#: ../../qt4/app.py:1269 +#, python-format +msgid "Restore '%s' to ..." msgstr "" -#: ../../gnome/snapshotsdialog.py:240 -msgid "Jump to" +#: ../../qt4/app.py:1270 +#, python-format +msgid "Restore '%s' and delete new files" msgstr "" -#: ../../gnome/snapshotsdialog.py:248 ../../kde4/snapshotsdialog.py:164 -msgid "Diff" +#: ../../qt4/app.py:1368 ../../qt4/app.py:1385 +msgid "Authors" msgstr "" -#: ../../gnome/snapshotsdialog.py:277 ../../kde4/snapshotsdialog.py:339 -msgid "You can't compare a snapshot to itself" +#: ../../qt4/app.py:1369 ../../qt4/app.py:1388 +msgid "Translations" msgstr "" -#: ../../gnome/snapshotsdialog.py:284 ../../kde4/snapshotsdialog.py:346 -#, python-format -msgid "Command not found: %s" +#: ../../qt4/app.py:1370 ../../qt4/app.py:1391 +msgid "License" msgstr "" -#: ../../gnome/snapshotsdialog.py:307 ../../kde4/snapshotsdialog.py:367 -#, python-format -msgid "" -"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" +#: ../../qt4/logviewdialog.py:49 +msgid "Last Log View" msgstr "" -#: ../../gnome/snapshotsdialog.py:310 ../../kde4/snapshotsdialog.py:370 -#, python-format -msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +#: ../../qt4/logviewdialog.py:51 +msgid "Snapshot Log View" msgstr "" -#: ../../gnome/snapshotsdialog.py:312 ../../kde4/snapshotsdialog.py:372 -msgid "WARNING: This can not be revoked!" +#: ../../qt4/logviewdialog.py:59 ../../qt4/settingsdialog.py:59 +#: ../../qt4/settingsdialog.py:274 ../../qt4/settingsdialog.py:1899 +msgid "Profile:" msgstr "" -#: ../../gnome/snapshotsdialog.py:317 ../../kde4/snapshotsdialog.py:377 -#, python-format -msgid "Exclude \"%s\" from future snapshots?" +#: ../../qt4/logviewdialog.py:81 +msgid "Filter:" msgstr "" -#: ../../kde4/app.py:86 ../../gnome/mainwindow.glade:58 -#: ../../gnome/mainwindow.glade:60 -msgid "Refresh snapshots list" +#: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 +msgid "All" msgstr "" -#: ../../kde4/app.py:94 ../../gnome/mainwindow.glade:88 -#: ../../gnome/mainwindow.glade:90 -msgid "Remove Snapshot" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 +#: ../../qt4/settingsdialog.py:657 +msgid "Errors" msgstr "" -#: ../../kde4/app.py:98 ../../gnome/mainwindow.glade:105 -msgid "View Snapshot Log" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 +msgid "Changes" msgstr "" -#: ../../kde4/app.py:102 ../../gnome/mainwindow.glade:121 -msgid "View Last Log" +#: ../../qt4/logviewdialog.py:92 +msgid "Informations" msgstr "" -#: ../../kde4/app.py:108 ../../kde4/settingsdialog.py:69 -#: ../../gnome/mainwindow.glade:144 ../../gnome/mainwindow.glade:146 -#: ../../gnome/settingsdialog.glade:7 -msgid "Settings" +#: ../../qt4/logviewdialog.py:101 +msgid "[E] Error, [I] Information, [C] Change" msgstr "" -#: ../../kde4/app.py:124 ../../gnome/mainwindow.glade:169 -msgid "Shutdown system after snapshot has finished." +#: ../../qt4/logviewdialog.py:104 +msgid "decode paths" msgstr "" -#: ../../kde4/app.py:131 ../../gnome/mainwindow.glade:184 -#: ../../gnome/mainwindow.glade:186 -msgid "Exit" +#: ../../qt4/messagebox.py:56 +msgid "Error" msgstr "" -#: ../../kde4/app.py:186 ../../gnome/mainwindow.glade:289 -msgid "Up" +#: ../../qt4/messagebox.py:62 ../../qt4/messagebox.py:68 +msgid "Question" msgstr "" -#: ../../kde4/app.py:199 ../../gnome/mainwindow.glade:325 -msgid "Show hidden files" +#: ../../qt4/qt4systrayicon.py:69 +msgid "Start BackInTime" msgstr "" -#: ../../kde4/app.py:244 -msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +#: ../../qt4/qt4systrayicon.py:124 +msgid "Working..." msgstr "" -#: ../../kde4/app.py:839 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +#: ../../qt4/qt4tools.py:178 +msgid "Today" msgstr "" -#: ../../kde4/app.py:1140 ../../kde4/kde4systrayicon.py:117 -msgid "Working..." +#: ../../qt4/qt4tools.py:183 +msgid "Yesterday" msgstr "" -#: ../../kde4/logviewdialog.py:55 -msgid "Error Log View" +#: ../../qt4/qt4tools.py:188 +msgid "This week" msgstr "" -#: ../../kde4/logviewdialog.py:65 ../../kde4/settingsdialog.py:79 -#: ../../kde4/settingsdialog.py:293 ../../gnome/logviewdialog.glade:73 -#: ../../gnome/settingsdialog.glade:72 -msgid "Profile:" +#: ../../qt4/qt4tools.py:193 +msgid "Last week" msgstr "" -#: ../../kde4/logviewdialog.py:77 ../../gnome/logviewdialog.glade:110 -msgid "Filter:" +#: ../../qt4/restoredialog.py:75 +msgid "Show full Log" msgstr "" -#: ../../kde4/logviewdialog.py:100 ../../gnome/logviewdialog.glade:169 -msgid "[E] Error, [I] Information, [C] Change" +#: ../../qt4/settingsdialog.py:68 +msgid "Edit" msgstr "" -#: ../../kde4/logviewdialog.py:103 ../../gnome/logviewdialog.glade:195 -msgid "decode paths" +#: ../../qt4/settingsdialog.py:73 +msgid "Modify for Full System Backup" msgstr "" -#: ../../kde4/settingsdialog.py:88 -msgid "Edit" +#: ../../qt4/settingsdialog.py:77 ../../qt4/settingsdialog.py:451 +msgid "Add" msgstr "" -#: ../../kde4/settingsdialog.py:106 ../../gnome/settingsdialog.glade:1207 +#: ../../qt4/settingsdialog.py:81 ../../qt4/settingsdialog.py:408 +#: ../../qt4/settingsdialog.py:467 +msgid "Remove" +msgstr "" + +#: ../../qt4/settingsdialog.py:96 msgid "General" msgstr "" -#: ../../kde4/settingsdialog.py:114 ../../gnome/settingsdialog.glade:199 +#: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "" -#: ../../kde4/settingsdialog.py:127 ../../kde4/settingsdialog.py:1311 +#: ../../qt4/settingsdialog.py:119 +#, python-format +msgid "" +"Warning: %(app)s uses EncFS for encryption. A recent security audit " +"revealed several possible attack vectors for this. Please take a look at 'A " +"NOTE ON SECURITY' in 'man backintime'." +msgstr "" + +#: ../../qt4/settingsdialog.py:129 ../../qt4/settingsdialog.py:1568 msgid "Where to save snapshots" msgstr "" -#: ../../kde4/settingsdialog.py:146 +#: ../../qt4/settingsdialog.py:145 +msgid "Folder" +msgstr "" + +#: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" -#: ../../kde4/settingsdialog.py:158 ../../kde4/settingsdialog.py:283 -#: ../../gnome/settingsdialog.glade:323 ../../gnome/settingsdialog.glade:583 -#: ../../gnome/settingsdialog.glade:874 +#: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "" -#: ../../kde4/settingsdialog.py:163 ../../gnome/settingsdialog.glade:350 -#: ../../gnome/settingsdialog.glade:610 +#: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "" -#: ../../kde4/settingsdialog.py:168 ../../kde4/settingsdialog.py:288 -#: ../../gnome/settingsdialog.glade:377 ../../gnome/settingsdialog.glade:637 -#: ../../gnome/settingsdialog.glade:902 +#: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "" -#: ../../kde4/settingsdialog.py:173 ../../gnome/settingsdialog.glade:416 +#: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" -#: ../../kde4/settingsdialog.py:178 ../../gnome/settingsdialog.glade:459 +#: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" -#: ../../kde4/settingsdialog.py:184 +#: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "" -#: ../../kde4/settingsdialog.py:228 ../../kde4/settingsdialog.py:237 -#: ../../kde4/settingsdialog.py:243 ../../gnome/settingsdialog.glade:703 -#: ../../gnome/settingsdialog.glade:743 +#: ../../qt4/settingsdialog.py:201 +msgid "Key File" +msgstr "" + +#: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 +#: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "" -#: ../../kde4/settingsdialog.py:249 ../../gnome/settingsdialog.glade:775 +#: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" -#: ../../kde4/settingsdialog.py:252 ../../gnome/settingsdialog.glade:792 +#: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" -#: ../../kde4/settingsdialog.py:264 ../../gnome/settingsdialog.glade:968 +#: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "" -#: ../../kde4/settingsdialog.py:276 ../../gnome/settingsdialog.glade:848 -msgid "Auto Host / User / Profile Id" +#: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 +msgid "Full snapshot path: " msgstr "" -#: ../../kde4/settingsdialog.py:301 +#: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "" -#: ../../kde4/settingsdialog.py:311 ../../gnome/settingsdialog.glade:1092 +#: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "" -#: ../../kde4/settingsdialog.py:322 ../../gnome/settingsdialog.glade:1079 +#: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "" -#: ../../kde4/settingsdialog.py:333 ../../gnome/settingsdialog.glade:1066 +#: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "" -#: ../../kde4/settingsdialog.py:344 ../../gnome/settingsdialog.glade:1053 +#: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "" -#: ../../kde4/settingsdialog.py:353 ../../gnome/settingsdialog.glade:1014 +#: ../../qt4/settingsdialog.py:339 msgid "" -"Run Back In Time periodically with anacron. This is useful if the computer " -"is not running regular." +"Run Back In Time repeatedly. This is useful if the computer is not running " +"regular." msgstr "" -#: ../../kde4/settingsdialog.py:357 ../../gnome/settingsdialog.glade:1040 -msgid "Frequency in days:" +#: ../../qt4/settingsdialog.py:344 +msgid "Every:" msgstr "" -#: ../../kde4/settingsdialog.py:368 ../../gnome/settingsdialog.glade:1026 +#: ../../qt4/settingsdialog.py:362 msgid "" "Run Back In Time as soon as the drive is connected (only once every X " "days).\n" "You will be prompted for your sudo password." msgstr "" -#: ../../kde4/settingsdialog.py:379 ../../gnome/settingsdialog.glade:1310 +#: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "" -#: ../../kde4/settingsdialog.py:403 ../../kde4/settingsdialog.py:445 -#: ../../gnome/settingsdialog.glade:1411 +#: ../../qt4/settingsdialog.py:381 +msgid "Include files and folders" +msgstr "" + +#: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "" -#: ../../kde4/settingsdialog.py:408 ../../kde4/settingsdialog.py:450 -#: ../../gnome/settingsdialog.glade:1427 +#: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "" -#: ../../kde4/settingsdialog.py:418 ../../gnome/settingsdialog.glade:1474 +#: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "" -#: ../../kde4/settingsdialog.py:421 ../../gnome/settingsdialog.glade:1328 +#: ../../qt4/settingsdialog.py:417 msgid "" "Warning: Wildcards ('foo*', '[fF]oo', 'fo?') will be ignored with " "mode 'SSH encrypted'.\n" "Only separate asterisk are allowed ('foo/*', 'foo/**/bar')" msgstr "" -#: ../../kde4/settingsdialog.py:430 +#: ../../qt4/settingsdialog.py:425 +msgid "Exclude patterns, files or folders" +msgstr "" + +#: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "" -#: ../../kde4/settingsdialog.py:460 ../../gnome/settingsdialog.glade:1905 +#: ../../qt4/settingsdialog.py:463 +msgid "Add default" +msgstr "" + +#: ../../qt4/settingsdialog.py:474 +msgid "Exclude files bigger than: " +msgstr "" + +#: ../../qt4/settingsdialog.py:475 +#, python-format +msgid "" +"Exclude files bigger than value in %(prefix)s.\n" +"With 'Full rsync mode' disabled this will only affect new files\n" +"because for rsync this is a transfer option, not an exclude option.\n" +"So big files that has been backed up before will remain in snapshots\n" +"even if they had changed." +msgstr "" + +#: ../../qt4/settingsdialog.py:493 msgid "Auto-remove" msgstr "" -#: ../../kde4/settingsdialog.py:464 ../../gnome/settingsdialog.glade:1608 +#: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "" -#: ../../kde4/settingsdialog.py:478 ../../gnome/settingsdialog.glade:1624 +#: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "" -#: ../../kde4/settingsdialog.py:490 ../../gnome/settingsdialog.glade:1642 +#: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" -#: ../../kde4/settingsdialog.py:514 ../../gnome/settingsdialog.glade:1697 +#: ../../qt4/settingsdialog.py:551 +msgid "Run in background on remote Host." +msgstr "" + +#: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "" -#: ../../kde4/settingsdialog.py:517 ../../kde4/settingsdialog.py:522 -#: ../../gnome/settingsdialog.glade:1705 ../../gnome/settingsdialog.glade:1729 +#: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "" -#: ../../kde4/settingsdialog.py:519 ../../gnome/settingsdialog.glade:1717 +#: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "" -#: ../../kde4/settingsdialog.py:524 ../../gnome/settingsdialog.glade:1743 +#: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "" -#: ../../kde4/settingsdialog.py:527 +#: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "" -#: ../../kde4/settingsdialog.py:529 ../../gnome/settingsdialog.glade:1769 +#: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "" -#: ../../kde4/settingsdialog.py:532 ../../gnome/settingsdialog.glade:1781 +#: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "" -#: ../../kde4/settingsdialog.py:534 ../../gnome/settingsdialog.glade:1795 +#: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "" -#: ../../kde4/settingsdialog.py:537 ../../gnome/settingsdialog.glade:1496 +#: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "" -#: ../../kde4/settingsdialog.py:546 ../../gnome/settingsdialog.glade:2104 +#: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "" -#: ../../kde4/settingsdialog.py:549 ../../gnome/settingsdialog.glade:1920 +#: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "" -#: ../../kde4/settingsdialog.py:552 ../../gnome/settingsdialog.glade:1937 +#: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "" -#: ../../kde4/settingsdialog.py:555 +#: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" msgstr "" -#: ../../kde4/settingsdialog.py:558 ../../gnome/settingsdialog.glade:1955 -msgid "Backup files on restore" +#: ../../qt4/settingsdialog.py:611 +msgid "Run only one snapshot at a time" +msgstr "" + +#: ../../qt4/settingsdialog.py:612 +msgid "" +"Other snapshots will be blocked until the current snapshot is done.\n" +"This is a global option. So it will effect all profiles for this user.\n" +"But you need to activate this for all other users, too." +msgstr "" + +#: ../../qt4/settingsdialog.py:617 +msgid "Backup replaced files on restore" +msgstr "" + +#: ../../qt4/settingsdialog.py:618 +#, python-format +msgid "" +"Newer versions of files will be renamed with trailing '%(suffix)s' before " +"restoring.\n" +"If you don't need them anymore you can remove them with '%(cmd)s'" msgstr "" -#: ../../kde4/settingsdialog.py:561 ../../gnome/settingsdialog.glade:1972 +#: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "" -#: ../../kde4/settingsdialog.py:564 ../../gnome/settingsdialog.glade:1989 +#: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "" -#: ../../kde4/settingsdialog.py:567 ../../gnome/settingsdialog.glade:2006 +#: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "" -#: ../../kde4/settingsdialog.py:568 ../../gnome/settingsdialog.glade:2032 +#: ../../qt4/settingsdialog.py:634 msgid "" -"- snapshots are no read-only\n" -"- destination file-system must support all linux attributes (dates, rights, " +"- snapshots are not read-only\n" +"- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" -#: ../../kde4/settingsdialog.py:575 ../../gnome/settingsdialog.glade:2045 +#: ../../qt4/settingsdialog.py:641 +msgid "Take a new snapshot regardless of there were changes or not." +msgstr "" + +#: ../../qt4/settingsdialog.py:644 msgid "Check for changes (don't take a new snapshot if nothing changed)" msgstr "" -#: ../../kde4/settingsdialog.py:582 +#: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "" -#: ../../kde4/settingsdialog.py:597 ../../gnome/settingsdialog.glade:2366 -msgid "Expert Options" +#: ../../qt4/settingsdialog.py:656 +msgid "None" +msgstr "" + +#: ../../qt4/settingsdialog.py:658 +msgid "Changes & Errors" msgstr "" -#: ../../kde4/settingsdialog.py:600 +#: ../../qt4/settingsdialog.py:674 msgid "Change these options only if you really know what you are doing !" msgstr "" -#: ../../kde4/settingsdialog.py:608 ../../gnome/settingsdialog.glade:2133 -msgid "Run 'nice' as cron job (default: enabled)" +#: ../../qt4/settingsdialog.py:678 +msgid "Run 'nice':" +msgstr "" + +#: ../../qt4/settingsdialog.py:684 ../../qt4/settingsdialog.py:696 +msgid "as cron job" +msgstr "" + +#: ../../qt4/settingsdialog.py:687 ../../qt4/settingsdialog.py:702 +#: ../../qt4/settingsdialog.py:716 +msgid "on remote host" +msgstr "" + +#: ../../qt4/settingsdialog.py:690 +msgid "Run 'ionice':" msgstr "" -#: ../../kde4/settingsdialog.py:611 ../../gnome/settingsdialog.glade:2150 -msgid "Run 'ionice' as cron job (default: enabled)" +#: ../../qt4/settingsdialog.py:699 +msgid "when taking a manual snapshot" msgstr "" -#: ../../kde4/settingsdialog.py:614 ../../gnome/settingsdialog.glade:2167 -msgid "Run 'ionice' when taking a manual snapshot (default: disabled)" +#: ../../qt4/settingsdialog.py:706 +msgid "Run 'rsync' with 'nocache':" msgstr "" -#: ../../kde4/settingsdialog.py:617 ../../gnome/settingsdialog.glade:2184 -msgid "Run 'nice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:712 +msgid "on local machine" msgstr "" -#: ../../kde4/settingsdialog.py:620 ../../gnome/settingsdialog.glade:2201 -msgid "Run 'ionice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:719 +msgid "Redirect stdout to /dev/null in cronjobs." msgstr "" -#: ../../kde4/settingsdialog.py:626 ../../gnome/settingsdialog.glade:2224 +#: ../../qt4/settingsdialog.py:725 +msgid "Redirect stderr to /dev/null in cronjobs." +msgstr "" + +#: ../../qt4/settingsdialog.py:734 msgid "Limit rsync bandwidth usage: " msgstr "" -#: ../../kde4/settingsdialog.py:629 ../../gnome/settingsdialog.glade:2259 +#: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" -#: ../../kde4/settingsdialog.py:634 ../../gnome/settingsdialog.glade:2280 +#: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "" -#: ../../kde4/settingsdialog.py:637 ../../gnome/settingsdialog.glade:2297 +#: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "" -#: ../../kde4/settingsdialog.py:640 ../../gnome/settingsdialog.glade:2314 +#: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute links)" msgstr "" -#: ../../kde4/settingsdialog.py:643 ../../gnome/settingsdialog.glade:2331 -msgid "Copy links (dereference symbolic links)" +#: ../../qt4/settingsdialog.py:834 +msgid "Paste additional options to rsync" msgstr "" -#: ../../kde4/snapshotsdialog.py:46 ../../kde4/snapshotsdialog.py:173 -#: ../../gnome/snapshotsdialog.glade:385 -msgid "Diff Options" +#: ../../qt4/settingsdialog.py:837 +msgid "" +"Options must be quoted e.g. --exclude-from=\"/path/to/my exclude file\"." msgstr "" -#: ../../kde4/snapshotsdialog.py:56 ../../gnome/snapshotsdialog.glade:314 -msgid "Command:" +#: ../../qt4/settingsdialog.py:847 +msgid "Add prefix to SSH commands" msgstr "" -#: ../../kde4/snapshotsdialog.py:60 ../../gnome/snapshotsdialog.glade:322 -msgid "Parameters:" +#: ../../qt4/settingsdialog.py:850 +#, python-format +msgid "" +"Prefix to run before every command on remote host.\n" +"Variables need to be escaped with \\$FOO.\n" +"This doesn't touch rsync. So to add a prefix\n" +"for rsync use \"%(cb_rsync_options)s\" with\n" +"%(rsync_options_value)s\n" +"\n" +"%(default)s: %(def_value)s" msgstr "" -#: ../../kde4/snapshotsdialog.py:64 ../../gnome/snapshotsdialog.glade:334 -msgid "Use %1 and %2 for path parameters" +#: ../../qt4/settingsdialog.py:858 ../../qt4/settingsdialog.py:1691 +msgid "default" msgstr "" -#: ../../kde4/snapshotsdialog.py:123 ../../gnome/snapshotsdialog.glade:184 -#: ../../gnome/snapshotsdialog.glade:186 -msgid "Delete" +#: ../../qt4/settingsdialog.py:875 +msgid "Restore Config" msgstr "" -#: ../../kde4/snapshotsdialog.py:128 ../../gnome/snapshotsdialog.glade:199 -#: ../../gnome/snapshotsdialog.glade:201 -msgid "Select All" +#: ../../qt4/settingsdialog.py:891 +msgid "" +"Full system backup can only create a snapshot to be restored to the same " +"physical disk(s) with the same disk partitioning as from the source; " +"restoring to new physical disks or the same disks with different " +"partitioning will yield a potentially broken and unusable system.\n" +"\n" +"Full system backup will override some settings that may have been " +"customized. Continue?" msgstr "" -#: ../../kde4/snapshotsdialog.py:132 ../../gnome/snapshotsdialog.glade:88 -msgid "List only different snapshots" +#: ../../qt4/settingsdialog.py:922 +msgid "New profile" msgstr "" -#: ../../kde4/snapshotsdialog.py:139 ../../gnome/snapshotsdialog.glade:110 -msgid "List only equal snapshots to: " +#: ../../qt4/settingsdialog.py:938 +msgid "Rename profile" msgstr "" -#: ../../kde4/snapshotsdialog.py:149 ../../gnome/snapshotsdialog.glade:146 -msgid "Deep check (more accurate, but slow)" +#: ../../qt4/settingsdialog.py:952 +#, python-format +msgid "Are you sure you want to delete the profile \"%s\" ?" msgstr "" -#: ../../kde4/snapshotsdialog.py:174 -msgid "Go To" +#: ../../qt4/settingsdialog.py:1191 +msgid "" +"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " +"*/3 for periodic backups every 3 hours" +msgstr "" + +#: ../../qt4/settingsdialog.py:1489 +msgid "Exclude pattern" msgstr "" -#: ../../gnome/logviewdialog.glade:9 -msgid "Log View" +#: ../../qt4/settingsdialog.py:1502 +msgid "Exclude file" msgstr "" -#: ../../gnome/logviewdialog.glade:179 -msgid "scroll down automatic" +#: ../../qt4/settingsdialog.py:1506 +msgid "Exclude folder" msgstr "" -#: ../../gnome/mainwindow.glade:7 -msgid "Back In Time" +#: ../../qt4/settingsdialog.py:1525 +msgid "Include file" msgstr "" -#: ../../gnome/mainwindow.glade:45 -msgid "Backup Now" +#: ../../qt4/settingsdialog.py:1533 ../../qt4/settingsdialog.py:1553 +#, python-format +msgid "" +"\"%s\" is a symlink. The linked target will not be backed up until you " +"include it, too.\n" +"Would you like to include the symlinks target instead?" msgstr "" -#: ../../gnome/mainwindow.glade:171 -msgid "Shutdown" +#: ../../qt4/settingsdialog.py:1545 +msgid "Include folder" msgstr "" -#: ../../gnome/mainwindow.glade:287 -msgid "Parent folder" +#: ../../qt4/settingsdialog.py:1572 +msgid "Are you sure you want to change snapshots folder ?" +msgstr "" + +#: ../../qt4/settingsdialog.py:1688 +msgid "enabled" +msgstr "" + +#: ../../qt4/settingsdialog.py:1690 +msgid "disabled" +msgstr "" + +#: ../../qt4/settingsdialog.py:1715 +msgid "Restore Settings" msgstr "" -#: ../../gnome/mainwindow.glade:327 -msgid "Hidden files" +#: ../../qt4/settingsdialog.py:1732 +msgid " and add your user to group 'fuse'" msgstr "" -#: ../../gnome/mainwindow.glade:451 +#: ../../qt4/settingsdialog.py:1736 +#, python-format msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +"Please navigate to the snapshot from which you want to restore %(appName)s's " +"configuration. The path may look like: \n" +"%(samplePath)s\n" +"\n" +"If your snapshots are on a remote drive or if they are encrypted you need to " +"manually mount them first. If you use Mode SSH you also may need to set up " +"public key login to the remote host%(addFuse)s.\n" +"Take a look at 'man backintime'." msgstr "" -#: ../../gnome/settingsdialog.glade:287 -msgid "Where to save snapshots" +#: ../../qt4/settingsdialog.py:1794 ../../qt4/settingsdialog.py:1854 +msgid "No config found" msgstr "" -#: ../../gnome/settingsdialog.glade:483 -msgid "Private key:" +#: ../../qt4/snapshotsdialog.py:49 ../../qt4/snapshotsdialog.py:173 +msgid "Diff Options" msgstr "" -#: ../../gnome/settingsdialog.glade:534 -msgid "Advanced SSH Settings" +#: ../../qt4/snapshotsdialog.py:56 +msgid "Command:" msgstr "" -#: ../../gnome/settingsdialog.glade:552 -msgid "SSH Settings" +#: ../../qt4/snapshotsdialog.py:60 +msgid "Parameters:" msgstr "" -#: ../../gnome/settingsdialog.glade:815 -msgid "Password" +#: ../../qt4/snapshotsdialog.py:64 +msgid "Use %1 and %2 for path parameters" msgstr "" -#: ../../gnome/settingsdialog.glade:930 -msgid "Profile Id:" +#: ../../qt4/snapshotsdialog.py:106 +msgid "List only different snapshots" msgstr "" -#: ../../gnome/settingsdialog.glade:1115 -msgid "" -"hours seperate by comma ( e.g. 8,12,18,23) or */3 for periodic backups every " -"3 hours (cron style)" +#: ../../qt4/snapshotsdialog.py:113 +msgid "List only equal snapshots to: " +msgstr "" + +#: ../../qt4/snapshotsdialog.py:123 +msgid "Deep check (more accurate, but slow)" msgstr "" -#: ../../gnome/settingsdialog.glade:1163 -msgid "Schedule" +#: ../../qt4/snapshotsdialog.py:144 +msgid "Delete" msgstr "" -#: ../../gnome/settingsdialog.glade:1363 -msgid "Highly recommended:" +#: ../../qt4/snapshotsdialog.py:148 +msgid "Select All" msgstr "" -#: ../../gnome/settingsdialog.glade:1377 -msgid "label" +#: ../../qt4/snapshotsdialog.py:161 +msgid "Diff" msgstr "" -#: ../../gnome/settingsdialog.glade:1755 -msgid "week(s)" +#: ../../qt4/snapshotsdialog.py:172 +msgid "Go To" msgstr "" -#: ../../gnome/settingsdialog.glade:2069 -msgid "Log level:" +#: ../../qt4/snapshotsdialog.py:326 +msgid "You can't compare a snapshot to itself" msgstr "" -#: ../../gnome/settingsdialog.glade:2121 +#: ../../qt4/snapshotsdialog.py:333 +#, python-format +msgid "Command not found: %s" +msgstr "" + +#: ../../qt4/snapshotsdialog.py:354 +#, python-format msgid "" -"Change these options only if you really know what you are doing !" +"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" msgstr "" -#: ../../gnome/snapshotsdialog.glade:263 -msgid "Diff with" +#: ../../qt4/snapshotsdialog.py:357 +#, python-format +msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" msgstr "" -#: ../../gnome/textinputdialog.glade:7 -msgid "Pattern" +#: ../../qt4/snapshotsdialog.py:359 +msgid "WARNING: This can not be revoked!" msgstr "" -#: ../../gnome/textinputdialog.glade:70 -msgid "Text" +#: ../../qt4/snapshotsdialog.py:374 +#, python-format +msgid "Exclude \"%s\" from future snapshots?" msgstr "" diff -Nru backintime-1.0.36/common/po/ko.po backintime-1.1.12/common/po/ko.po --- backintime-1.0.36/common/po/ko.po 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/po/ko.po 2016-01-11 18:07:58.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2013-11-09 22:34+0100\n" +"POT-Creation-Date: 2015-12-19 00:47+0100\n" "PO-Revision-Date: 2014-05-27 02:30+0000\n" "Last-Translator: Hur, Seok \n" "Language-Team: Korean \n" @@ -15,198 +15,230 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Launchpad-Export-Date: 2014-08-06 10:20+0000\n" -"X-Generator: Launchpad (build 17147)\n" +"X-Launchpad-Export-Date: 2016-01-11 17:52+0000\n" +"X-Generator: Launchpad (build 17881)\n" -#: ../../common/config.py:72 +#: ../../common/configfile.py:60 +#, python-format +msgid "Failed to save config: %s" +msgstr "" + +#: ../../common/configfile.py:78 +#, python-format +msgid "Failed to load config: %s" +msgstr "" + +#: ../../common/configfile.py:352 ../../common/configfile.py:414 +#, python-format +msgid "Profile \"%s\" already exists !" +msgstr "프로파일 \"%s\"가 이미 존재합니다." + +#: ../../common/configfile.py:383 +msgid "You can't remove the last profile !" +msgstr "마지막 프로파일은 제거할 수 없습니다." + +#: ../../common/config.py:76 msgid "Disabled" msgstr "비활성화됨" -#: ../../common/config.py:73 +#: ../../common/config.py:77 msgid "At every boot/reboot" msgstr "부팅/재부팅 할 때 마다" -#: ../../common/config.py:74 +#: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "매 5분" -#: ../../common/config.py:75 +#: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "매 10분" -#: ../../common/config.py:76 +#: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "30분마다" -#: ../../common/config.py:77 +#: ../../common/config.py:81 msgid "Every hour" msgstr "1시간마다" -#: ../../common/config.py:78 +#: ../../common/config.py:82 msgid "Every 2 hours" msgstr "2시간마다" -#: ../../common/config.py:79 +#: ../../common/config.py:83 msgid "Every 4 hours" msgstr "4시간마다" -#: ../../common/config.py:80 +#: ../../common/config.py:84 msgid "Every 6 hours" msgstr "6시간마다" -#: ../../common/config.py:81 +#: ../../common/config.py:85 msgid "Every 12 hours" msgstr "12시간마다" -#: ../../common/config.py:82 +#: ../../common/config.py:86 msgid "Custom Hours" msgstr "" -#: ../../common/config.py:83 +#: ../../common/config.py:87 msgid "Every Day" msgstr "매일" -#: ../../common/config.py:84 -msgid "Daily (anacron)" +#: ../../common/config.py:88 +msgid "Repeatedly (anacron)" msgstr "" -#: ../../common/config.py:85 +#: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "" -#: ../../common/config.py:86 +#: ../../common/config.py:90 msgid "Every Week" msgstr "매주" -#: ../../common/config.py:87 +#: ../../common/config.py:91 msgid "Every Month" msgstr "매월" -#: ../../common/config.py:91 +#: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "일" -#: ../../common/config.py:92 +#: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "주" -#: ../../common/config.py:93 +#: ../../common/config.py:97 msgid "Year(s)" msgstr "년" -#: ../../common/config.py:100 +#: ../../common/config.py:101 +msgid "Hour(s)" +msgstr "" + +#: ../../common/config.py:104 +msgid "Month(s)" +msgstr "" + +#: ../../common/config.py:126 ../../qt4/settingsdialog.py:551 msgid " EXPERIMENTAL!" msgstr "" -#: ../../common/config.py:103 +#: ../../common/config.py:129 msgid "Local" msgstr "" -#: ../../common/config.py:104 +#: ../../common/config.py:130 msgid "SSH" msgstr "SSH" -#: ../../common/config.py:104 ../../common/config.py:106 -#: ../../gnome/settingsdialog.py:475 ../../kde4/settingsdialog.py:1325 +#: ../../common/config.py:130 ../../common/config.py:132 +#: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "SSH 개인키(비공개키)" -#: ../../common/config.py:105 +#: ../../common/config.py:131 msgid "Local encrypted" msgstr "" -#: ../../common/config.py:105 ../../common/config.py:106 +#: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "암호화" -#: ../../common/config.py:106 +#: ../../common/config.py:132 msgid "SSH encrypted" msgstr "" -#: ../../common/config.py:112 +#: ../../common/config.py:135 msgid "Default" msgstr "기본값" -#: ../../common/config.py:113 +#: ../../common/config.py:136 msgid "AES128-CTR" msgstr "AES128-CTR" -#: ../../common/config.py:114 +#: ../../common/config.py:137 msgid "AES192-CTR" msgstr "AES192-CTR" -#: ../../common/config.py:115 +#: ../../common/config.py:138 msgid "AES256-CTR" msgstr "AES256-CTR" -#: ../../common/config.py:116 +#: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "ARCFOUR256" -#: ../../common/config.py:117 +#: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "ARCFOUR128" -#: ../../common/config.py:118 +#: ../../common/config.py:141 msgid "AES128-CBC" msgstr "AES128-CBC" -#: ../../common/config.py:119 +#: ../../common/config.py:142 msgid "3DES-CBC" msgstr "3DES-CBC" -#: ../../common/config.py:120 +#: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "Blowfish-CBC" -#: ../../common/config.py:121 +#: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "Cast128-CBC" -#: ../../common/config.py:122 +#: ../../common/config.py:145 msgid "AES192-CBC" msgstr "AES192-CBC" -#: ../../common/config.py:123 +#: ../../common/config.py:146 msgid "AES256-CBC" msgstr "AES256-CBC" -#: ../../common/config.py:124 +#: ../../common/config.py:147 msgid "ARCFOUR" msgstr "ARCFOUR" -#: ../../common/config.py:129 +#: ../../common/config.py:153 msgid "Main profile" msgstr "메인 프로파일" -#: ../../common/config.py:256 ../../common/config.py:275 -#: ../../common/config.py:286 ../../common/config.py:291 +#: ../../common/config.py:289 ../../common/config.py:296 +#: ../../common/config.py:307 ../../common/config.py:312 +#: ../../qt4/qt4systrayicon.py:61 #, python-format msgid "Profile: \"%s\"" msgstr "프로파일: \"%s\"" -#: ../../common/config.py:256 +#: ../../common/config.py:289 msgid "Snapshots folder is not valid !" msgstr "스냅샷 폴더가 유효하지 않습니다." -#: ../../common/config.py:275 +#: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "최소한 하나의 백업할 폴더를 선택해야 합니다." -#: ../../common/config.py:286 +#: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "백업 폴더를 포함할 수는 없습니다." -#: ../../common/config.py:291 +#: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "백업 하위폴더를 포함할 수는 없습니다." -#: ../../common/config.py:361 +#: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s는 폴더가 아닙니다." -#: ../../common/config.py:376 ../../common/config.py:389 +#: ../../common/config.py:380 +msgid "Host/User/Profile-ID must not be empty!" +msgstr "" + +#: ../../common/config.py:388 ../../common/config.py:420 #, python-format msgid "" "Can't write to: %s\n" @@ -215,62 +247,68 @@ "%s에 쓰기를 할 수 없습니다.\n" "쓰기 권한이 있는지를 확인하세요." -#: ../../common/config.py:1286 +#: ../../common/config.py:400 +#, python-format msgid "" -"Can't find crontab.\n" -"Are you sure cron is installed ?\n" -"If not you should disable all automatic backups." +"Destination filesystem for '%(path)s' is formatted with FAT which doesn't " +"support hard-links. Please use a native Linux filesystem." msgstr "" -"crontab를 찾을 수 없습니다.\n" -"cron이 설치되어 있습니까?\n" -"설치되지 않았다면 모든 자동 백업을 실행불가 상태로 해야 합니다." -#: ../../common/config.py:1338 +#: ../../common/config.py:405 #, python-format -msgid "Schedule udev doesn't work with mode %s" +msgid "" +"Destination filsystem for '%(path)s' is a SMB mounted share. Please make " +"sure the remote SMB server supports symlinks or activate '%(copyLinks)s' in " +"'%(expertOptions)s'." msgstr "" -#: ../../common/config.py:1342 -#, python-format -msgid "Couldn't find UUID for \"%s\"" -msgstr "" +#: ../../common/config.py:408 ../../qt4/settingsdialog.py:815 +msgid "Copy links (dereference symbolic links)" +msgstr "링크 복사(심볼릭 링크와는 다름)" -#: ../../common/config.py:1379 -msgid "Failed to remove udev rules" -msgstr "" +#: ../../common/config.py:409 ../../qt4/settingsdialog.py:669 +msgid "Expert Options" +msgstr "고급 설정" -#: ../../common/config.py:1385 -msgid "Failed to create udev rules" +#: ../../common/config.py:411 +#, python-format +msgid "" +"Destination filesystem for '%(path)s is a sshfs mounted share. sshfs doesn't " +"support hard-links. Please use mode 'SSH' instead." msgstr "" -#: ../../common/config.py:1420 +#: ../../common/config.py:1407 msgid "" -"Can't find anacron.\n" -"Are you sure anacron is installed ?\n" -"If not you should disable daily anacron backups." +"Can't find crontab.\n" +"Are you sure cron is installed ?\n" +"If not you should disable all automatic backups." msgstr "" -"anacron을 찾을 수 없습니다.\n" -"anacron이 설치되어 있습니까?\n" -"설치되어 있지 않으면 \"daily anacron\" 백업 설정을 해제해야 합니다." +"crontab를 찾을 수 없습니다.\n" +"cron이 설치되어 있습니까?\n" +"설치되지 않았다면 모든 자동 백업을 실행불가 상태로 해야 합니다." -#: ../../common/config.py:1439 -msgid "Please provide your sudo password to install the udev rule." +#: ../../common/config.py:1411 +msgid "Failed to write new crontab." msgstr "" -#: ../../common/config.py:1445 -msgid "Please provide your sudo password to remove unused udev rules." +#: ../../common/config.py:1505 +#, python-format +msgid "" +"Could not install Udev rule for profile %(profile_id)s. DBus Service " +"'%(dbus_interface)s' wasn't available" msgstr "" -#: ../../common/configfile.py:253 ../../common/configfile.py:315 +#: ../../common/config.py:1517 #, python-format -msgid "Profile \"%s\" already exists !" -msgstr "프로파일 \"%s\"가 이미 존재합니다." +msgid "Schedule udev doesn't work with mode %s" +msgstr "" -#: ../../common/configfile.py:284 -msgid "You can't remove the last profile !" -msgstr "마지막 프로파일은 제거할 수 없습니다." +#: ../../common/config.py:1526 +#, python-format +msgid "Couldn't find UUID for \"%s\"" +msgstr "" -#: ../../common/encfstools.py:95 +#: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" @@ -278,38 +316,38 @@ "%(error)s" msgstr "" -#: ../../common/encfstools.py:105 +#: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "" -#: ../../common/encfstools.py:149 +#: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "" -#: ../../common/encfstools.py:153 +#: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" -#: ../../common/encfstools.py:154 +#: ../../common/encfstools.py:171 msgid "Cancel" msgstr "취소" -#: ../../common/encfstools.py:157 +#: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "비밀번호 다시 입력" -#: ../../common/encfstools.py:161 +#: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "비밀번호 불일치" -#: ../../common/encfstools.py:166 +#: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "encfs가 설치되지 않았습니다. 다음과 같이 설치해 주세요 'apt-get install encfs'" -#: ../../common/encfstools.py:174 ../../common/sshtools.py:207 +#: ../../common/encfstools.py:196 ../../common/sshtools.py:262 #, python-format msgid "" "%(user)s is not member of group 'fuse'.\n" @@ -317,70 +355,73 @@ "Look at 'man backintime' for further instructions." msgstr "" -#: ../../common/encfstools.py:189 +#: ../../common/encfstools.py:211 msgid "" "encfs version 1.7.2 and before has a bug with option --reverse. Please " "update encfs" msgstr "" -#: ../../common/encfstools.py:453 ../../common/encfstools.py:480 -#: ../../common/snapshots.py:982 ../../common/snapshots.py:1288 -#: ../../kde4/app.py:82 ../../gnome/mainwindow.glade:43 +#: ../../common/encfstools.py:512 ../../common/snapshots.py:1131 +#: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "스냅샷 찍기" -#: ../../common/mount.py:195 +#: ../../common/mount.py:204 #, python-format msgid "" "Hash collision occurred in hash_id %s. Incrementing global value " "hash_collision and try again." msgstr "" -#: ../../common/mount.py:246 +#: ../../common/mount.py:259 #, python-format msgid "mountpoint %s not empty." msgstr "마운트 위치(폴더) %s가 비어 있지 않습니다." -#: ../../common/mount.py:286 +#: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" -#: ../../common/password.py:425 +#: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" -#: ../../common/snapshots.py:171 ../../gnome/app.py:1127 -#: ../../kde4/app.py:1014 +#: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "현재" -#: ../../common/snapshots.py:182 ../../gnome/gnometools.py:37 +#: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "" -#: ../../common/snapshots.py:282 +#: ../../common/snapshots.py:344 msgid "" "### This log has been decoded with automatic search pattern\n" "### If some paths are not decoded you can manually decode them with:\n" msgstr "" -#: ../../common/snapshots.py:465 +#: ../../common/snapshots.py:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "실패" -#: ../../common/snapshots.py:564 +#: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "" -#: ../../common/snapshots.py:739 +#: ../../common/snapshots.py:752 ../../qt4/app.py:377 ../../qt4/app.py:675 +#: ../../qt4/app.py:692 ../../qt4/qt4systrayicon.py:65 +msgid "Done" +msgstr "완료" + +#: ../../common/snapshots.py:860 msgid "" "Back In Time changed its backup format.\n" "\n" "Your old snapshots can be moved according to this new format. OK?" msgstr "" -#: ../../common/snapshots.py:749 +#: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" @@ -396,13 +437,13 @@ "사용하시겠습니까? \n" "(프로그램 내에서는 여전히 구별됩니다.)" -#: ../../common/snapshots.py:752 +#: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" msgstr "" -#: ../../common/snapshots.py:803 +#: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" @@ -415,7 +456,7 @@ "cannot continue taking snapshots" msgstr "" -#: ../../common/snapshots.py:812 +#: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" @@ -425,14 +466,14 @@ "if you are done restart Back In Time to proceed" msgstr "" -#: ../../common/snapshots.py:825 +#: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" msgstr "" -#: ../../common/snapshots.py:830 +#: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" @@ -444,138 +485,149 @@ "If you do not, you will be asked again next time you start Back In Time." msgstr "" -#: ../../common/snapshots.py:839 +#: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "" -#: ../../common/snapshots.py:841 +#: ../../common/snapshots.py:953 msgid "" "Back In Time still cannot continue taking new snapshots.\n" "Restart Back In Time to see the questions again" msgstr "" -#: ../../common/snapshots.py:913 +#: ../../common/snapshots.py:972 +msgid "Deferring backup while on battery" +msgstr "" + +#: ../../common/snapshots.py:1035 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it." msgstr "스냅샷 폴더를 찾을 수 없습니다." -#: ../../common/snapshots.py:915 +#: ../../common/snapshots.py:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "%s초 기다리는 중" -#: ../../common/snapshots.py:941 +#: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "%s 스냅샷을 가지지 못했습니다 !!!" -#: ../../common/snapshots.py:950 +#: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "마치는 중" -#: ../../common/snapshots.py:1088 +#: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "폴더(%s)를 생성할 수 없음" -#: ../../common/snapshots.py:1107 +#: ../../common/snapshots.py:1217 msgid "..." msgstr "..." -#: ../../common/snapshots.py:1134 +#: ../../common/snapshots.py:1238 +#, python-format +msgid "Found leftover '%s' which can be continued." +msgstr "" + +#: ../../common/snapshots.py:1250 +#, python-format +msgid "Remove leftover '%s' folder from last run" +msgstr "" + +#: ../../common/snapshots.py:1263 #, python-format msgid "Can't remove folder: %s" msgstr "폴더: %s를 제거할 수 없습니다." -#: ../../common/snapshots.py:1219 +#: ../../common/snapshots.py:1340 #, python-format msgid "Compare with snapshot %s" msgstr "스냅샷 %s와 비교" -#: ../../common/snapshots.py:1248 +#: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "하드 링크를 생성합니다다" -#: ../../common/snapshots.py:1335 +#: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "설정 파일 저장 ..." -#: ../../common/snapshots.py:1341 +#: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "권한을 저장 ..." -#: ../../common/snapshots.py:1442 +#: ../../common/snapshots.py:1470 +msgid "Save permission over ssh failed. Retry normal method" +msgstr "" + +#: ../../common/snapshots.py:1521 #, python-format msgid "Can't rename %(new_path)s to %(path)s" msgstr "" -#: ../../common/snapshots.py:1562 -msgid "Remove old snapshots" -msgstr "오래된 스냅샷을 제거합니다." - -#: ../../common/snapshots.py:1586 ../../kde4/settingsdialog.py:501 -#: ../../gnome/settingsdialog.glade:1660 +#: ../../common/snapshots.py:1695 ../../common/snapshots.py:1728 +#: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "똑똑한 제거" -#: ../../common/snapshots.py:1591 +#: ../../common/snapshots.py:1704 +msgid "Remove old snapshots" +msgstr "오래된 스냅샷을 제거합니다." + +#: ../../common/snapshots.py:1733 msgid "Try to keep min free space" msgstr "최소 여유 공간을 유지합니다." -#: ../../common/snapshots.py:1621 +#: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" -#: ../../common/sshtools.py:106 +#: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "" -#: ../../common/sshtools.py:113 +#: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "" -#: ../../common/sshtools.py:187 -#, python-format -msgid "" -"Failed to unlock SSH private key:\n" -"Error: %s" -msgstr "" - -#: ../../common/sshtools.py:194 +#: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" -#: ../../common/sshtools.py:199 +#: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "sshfs가 설치되지 않았습니다. 'apt-get install sshfs'로 설치해 주세요." -#: ../../common/sshtools.py:217 +#: ../../common/sshtools.py:278 #, python-format msgid "" "Password-less authentication for %(user)s@%(host)s failed. Look at 'man " "backintime' for further instructions." msgstr "" -#: ../../common/sshtools.py:229 +#: ../../common/sshtools.py:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" -#: ../../common/sshtools.py:254 +#: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" -#: ../../common/sshtools.py:274 +#: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" @@ -584,7 +636,7 @@ "원격 패스가 있지만 디텍토리가 아닙니다.\n" " %s" -#: ../../common/sshtools.py:276 +#: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" @@ -593,7 +645,7 @@ "다음 원격 패스에 쓸 수 없습니다.\n" " %s" -#: ../../common/sshtools.py:278 +#: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" @@ -602,7 +654,7 @@ "다음 원격 패스를 실행 할 수 없습니다.\n" " %s" -#: ../../common/sshtools.py:280 +#: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" @@ -611,12 +663,12 @@ "다음 원격 패스를 만들 수 없습니다.\n" " %s" -#: ../../common/sshtools.py:302 +#: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "호스트가 다운 되었거나 잘못된 주소입니다. %s ping 실패" -#: ../../common/sshtools.py:325 ../../common/sshtools.py:383 +#: ../../common/sshtools.py:423 ../../common/sshtools.py:553 #, python-format msgid "" "Remote host %(host)s doesn't support '%(command)s':\n" @@ -624,7 +676,7 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:387 +#: ../../common/sshtools.py:556 #, python-format msgid "" "Check commands on host %(host)s returned unknown error:\n" @@ -632,96 +684,149 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:400 +#: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "원격호스트 %s가 하드링크를 지원하지 않습니다." -#: ../../gnome/app.py:185 ../../gnome/app.py:594 ../../gnome/app.py:608 -#: ../../kde4/app.py:299 ../../kde4/app.py:570 ../../kde4/app.py:587 -msgid "Done" -msgstr "완료" +#: ../../qt4/app.py:81 +msgid "Refresh snapshots list" +msgstr "" + +#: ../../qt4/app.py:85 ../../qt4/app.py:890 +msgid "Snapshot Name" +msgstr "스냅샷 이름" + +#: ../../qt4/app.py:88 +msgid "Remove Snapshot" +msgstr "스냅샷 제거" + +#: ../../qt4/app.py:91 +msgid "View Snapshot Log" +msgstr "" + +#: ../../qt4/app.py:94 +msgid "View Last Log" +msgstr "" + +#: ../../qt4/app.py:99 ../../qt4/settingsdialog.py:51 +msgid "Settings" +msgstr "설정" + +#: ../../qt4/app.py:104 +msgid "Shutdown" +msgstr "끄기" -#: ../../gnome/app.py:189 ../../kde4/app.py:143 ../../kde4/app.py:159 -#: ../../gnome/mainwindow.glade:225 +#: ../../qt4/app.py:105 +msgid "Shutdown system after snapshot has finished." +msgstr "" + +#: ../../qt4/app.py:111 +msgid "Exit" +msgstr "끝내기" + +#: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 msgid "Help" msgstr "도움말" -#: ../../gnome/app.py:191 ../../kde4/app.py:146 -#: ../../gnome/mainwindow.glade:223 +#: ../../qt4/app.py:122 +msgid "Config File Help" +msgstr "" + +#: ../../qt4/app.py:125 msgid "Website" msgstr "웹사이트" -#: ../../gnome/app.py:192 ../../kde4/app.py:148 +#: ../../qt4/app.py:127 ../../qt4/app.py:982 +msgid "Changelog" +msgstr "" + +#: ../../qt4/app.py:129 msgid "FAQ" msgstr "" -#: ../../gnome/app.py:193 ../../kde4/app.py:150 +#: ../../qt4/app.py:131 msgid "Ask a question" msgstr "" -#: ../../gnome/app.py:194 ../../kde4/app.py:152 +#: ../../qt4/app.py:133 msgid "Report a bug" msgstr "" -#: ../../gnome/app.py:196 ../../kde4/app.py:155 +#: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "정보" -#: ../../gnome/app.py:202 ../../gnome/app.py:887 -#: ../../gnome/restoredialog.py:84 ../../gnome/snapshotsdialog.py:83 -#: ../../gnome/snapshotsdialog.py:244 ../../kde4/app.py:206 -#: ../../kde4/app.py:216 ../../kde4/restoredialog.py:68 -#: ../../kde4/snapshotsdialog.py:111 ../../kde4/snapshotsdialog.py:117 -#: ../../gnome/mainwindow.glade:350 ../../gnome/mainwindow.glade:352 -#: ../../gnome/snapshotsdialog.glade:169 ../../gnome/snapshotsdialog.glade:171 +#: ../../qt4/app.py:163 +msgid "Up" +msgstr "위로" + +#: ../../qt4/app.py:174 ../../qt4/settingsdialog.py:1776 +msgid "Show hidden files" +msgstr "숨김 파일 표시" + +#: ../../qt4/app.py:184 ../../qt4/app.py:199 ../../qt4/app.py:233 +#: ../../qt4/restoredialog.py:62 ../../qt4/settingsdialog.py:1818 +#: ../../qt4/snapshotsdialog.py:134 ../../qt4/snapshotsdialog.py:139 msgid "Restore" msgstr "복원" -#: ../../gnome/app.py:203 ../../gnome/app.py:888 ../../gnome/gnometools.py:67 -#: ../../gnome/snapshotsdialog.py:84 ../../gnome/snapshotsdialog.py:245 -#: ../../kde4/app.py:208 ../../kde4/restoredialog.py:42 -#: ../../kde4/snapshotsdialog.py:113 +#: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 +#: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "다음 위치에 복원" -#: ../../gnome/app.py:205 ../../gnome/app.py:896 ../../gnome/app.py:1146 -#: ../../kde4/app.py:1041 -#, python-format -msgid "Restore '%s'" -msgstr "%s 을/를 복원" +#: ../../qt4/app.py:194 +msgid "Restore and delete new files" +msgstr "" -#: ../../gnome/app.py:207 ../../gnome/app.py:897 ../../gnome/app.py:1147 -#: ../../kde4/app.py:1042 +#: ../../qt4/app.py:201 #, python-format -msgid "Restore '%s' to ..." -msgstr "다음 위치에 %s 을/를 복원" +msgid "" +"Restore selected file or folder.\n" +"If this button is grayed out this is most likely because \"%(now)s\" is " +"selected in left hand snapshots list." +msgstr "" -#: ../../gnome/app.py:226 ../../kde4/app.py:235 +#: ../../qt4/app.py:206 ../../qt4/logviewdialog.py:67 +#: ../../qt4/qt4tools.py:160 ../../qt4/snapshotsdialog.py:96 +msgid "Snapshots" +msgstr "스냅샷" + +#: ../../qt4/app.py:213 +msgid "Snapshot" +msgstr "" + +#: ../../qt4/app.py:224 +msgid "View" +msgstr "" + +#: ../../qt4/app.py:277 msgid "Shortcuts" msgstr "바로 가기" -#: ../../gnome/app.py:249 -msgid "Name" -msgstr "파일명" - -#: ../../gnome/app.py:260 -msgid "Size" -msgstr "크기" - -#: ../../gnome/app.py:267 -msgid "Date" -msgstr "날짜" - -#: ../../gnome/app.py:286 ../../gnome/app.py:883 -#: ../../gnome/snapshotsdialog.py:116 ../../kde4/app.py:171 -#: ../../kde4/app.py:221 ../../kde4/snapshotsdialog.py:91 -#: ../../gnome/mainwindow.glade:366 ../../gnome/mainwindow.glade:368 -#: ../../gnome/snapshotsdialog.glade:8 -msgid "Snapshots" -msgstr "스냅샷" +#: ../../qt4/app.py:295 +msgid "" +"This folder doesn't exist\n" +"in the current selected snapshot!" +msgstr "" + +#: ../../qt4/app.py:359 +msgid "Add to Include" +msgstr "" + +#: ../../qt4/app.py:360 +msgid "Add to Exclude" +msgstr "" -#: ../../gnome/app.py:348 ../../kde4/app.py:362 +#: ../../qt4/app.py:416 +#, python-format +msgid "" +"%(appName)s is not configured. Would you like to restore a previous " +"configuration?" +msgstr "" + +#: ../../qt4/app.py:440 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it and then press OK" @@ -729,730 +834,791 @@ "스냅샷 폴더를 찾을 수 없습니다.\n" "만일 이동식 드라이브에 저장되었다면 연결 하신 후에 확인을 누르십시오." -#: ../../gnome/app.py:611 ../../kde4/app.py:590 -msgid "Done, no backup needed" -msgstr "완료. 백업이 필요하지 않습니다." +#: ../../qt4/app.py:473 +msgid "" +"If you close this window Back In Time will not be able to shutdown your " +"system when the snapshot has finished.\n" +"Do you really want to close?" +msgstr "" -#: ../../gnome/app.py:619 ../../kde4/app.py:598 +#: ../../qt4/app.py:667 ../../qt4/app.py:703 msgid "Working:" msgstr "진행중:" -#: ../../gnome/app.py:623 ../../kde4/app.py:602 +#: ../../qt4/app.py:695 +msgid "Done, no backup needed" +msgstr "완료. 백업이 필요하지 않습니다." + +#: ../../qt4/app.py:707 msgid "Error:" msgstr "오류:" -#: ../../gnome/app.py:636 ../../kde4/app.py:649 +#: ../../qt4/app.py:726 ../../qt4/qt4systrayicon.py:153 +msgid "Sent:" +msgstr "" + +#: ../../qt4/app.py:727 ../../qt4/qt4systrayicon.py:154 +msgid "Speed:" +msgstr "" + +#: ../../qt4/app.py:728 ../../qt4/qt4systrayicon.py:155 +msgid "ETA:" +msgstr "" + +#: ../../qt4/app.py:777 msgid "Global" msgstr "전역" -#: ../../gnome/app.py:637 ../../kde4/app.py:650 +#: ../../qt4/app.py:778 msgid "Root" msgstr "루트" -#: ../../gnome/app.py:638 ../../kde4/app.py:651 +#: ../../qt4/app.py:779 msgid "Home" msgstr "홈" -#: ../../gnome/app.py:662 -msgid "Bookmarks" -msgstr "즐겨찾기" - -#: ../../gnome/app.py:675 ../../kde4/app.py:662 +#: ../../qt4/app.py:794 msgid "Backup folders" msgstr "백업 폴더" -#: ../../gnome/app.py:701 ../../kde4/app.py:734 -msgid "Today" -msgstr "오늘" +#: ../../qt4/app.py:849 +msgid "This is NOT a snapshot but a live view of your local files" +msgstr "" -#: ../../gnome/app.py:705 ../../kde4/app.py:738 -msgid "Yesterday" -msgstr "어제" +#: ../../qt4/app.py:860 ../../qt4/app.py:1476 +#, python-format +msgid "Last check %s" +msgstr "" -#: ../../gnome/app.py:709 ../../kde4/app.py:742 -msgid "This week" -msgstr "어번 주" +#: ../../qt4/app.py:928 +#, python-format +msgid "" +"Are you sure you want to remove the snapshot:\n" +"%s" +msgstr "" +"정말 스냅샷을 제거하시겠습니까?\n" +"%s" -#: ../../gnome/app.py:713 ../../kde4/app.py:746 -msgid "Last week" -msgstr "지난 주" +#: ../../qt4/app.py:1004 +#, python-format +msgid "" +"Backup local files before overwriting or\n" +"removing with trailing '%(suffix)s'." +msgstr "" -#: ../../gnome/app.py:764 ../../kde4/app.py:398 +#: ../../qt4/app.py:1010 msgid "" -"If you close this window Back In Time will not be able to shutdown your " -"system when the snapshot has finished.\n" -"Do you really want to close?" +"Are you sure you want to remove all newer files in your original folder?" msgstr "" -#: ../../gnome/app.py:881 ../../gnome/snapshotsdialog.py:238 -msgid "Open" -msgstr "열기" +#: ../../qt4/app.py:1014 +msgid "" +"WARNING: deleting files in filesystem root could break your whole system!!!" +msgstr "" -#: ../../gnome/app.py:1056 ../../kde4/app.py:90 ../../kde4/app.py:805 -#: ../../gnome/mainwindow.glade:73 ../../gnome/mainwindow.glade:75 -msgid "Snapshot Name" -msgstr "스냅샷 이름" +#: ../../qt4/app.py:1016 +msgid "Files to be restored:" +msgstr "" -#: ../../gnome/app.py:1075 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +#: ../../qt4/app.py:1031 +msgid "Do you really want to restore this files(s):" msgstr "" -"정말 스냅샷을 제거하시겠습니까?\n" -"%s" -#: ../../gnome/app.py:1123 ../../kde4/app.py:1010 +#: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "스냅샷: %s" -#: ../../gnome/app.py:1124 ../../kde4/app.py:1011 +#: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "%s에 만들어진 스냅샷을 봅니다." -#: ../../gnome/app.py:1126 ../../kde4/app.py:1013 +#: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "현재 디스크의 내용을 봅니다." -#: ../../gnome/logviewdialog.py:106 ../../gnome/settingsdialog.py:414 -#: ../../kde4/logviewdialog.py:83 ../../kde4/settingsdialog.py:590 -msgid "All" -msgstr "" +#: ../../qt4/app.py:1268 +#, python-format +msgid "Restore '%s'" +msgstr "%s 을/를 복원" -#: ../../gnome/logviewdialog.py:107 ../../gnome/settingsdialog.py:412 -#: ../../kde4/logviewdialog.py:84 ../../kde4/settingsdialog.py:588 -msgid "Errors" -msgstr "" +#: ../../qt4/app.py:1269 +#, python-format +msgid "Restore '%s' to ..." +msgstr "다음 위치에 %s 을/를 복원" -#: ../../gnome/logviewdialog.py:112 ../../kde4/logviewdialog.py:89 -msgid "Changes" +#: ../../qt4/app.py:1270 +#, python-format +msgid "Restore '%s' and delete new files" msgstr "" -#: ../../gnome/logviewdialog.py:115 ../../kde4/logviewdialog.py:92 -msgid "Informations" +#: ../../qt4/app.py:1368 ../../qt4/app.py:1385 +msgid "Authors" msgstr "" -#: ../../gnome/settingsdialog.py:235 ../../kde4/settingsdialog.py:387 -msgid "Include files and folders" +#: ../../qt4/app.py:1369 ../../qt4/app.py:1388 +msgid "Translations" msgstr "" -#: ../../gnome/settingsdialog.py:264 -msgid "Exclude patterns, files or folders" +#: ../../qt4/app.py:1370 ../../qt4/app.py:1391 +msgid "License" msgstr "" -#: ../../gnome/settingsdialog.py:411 ../../kde4/settingsdialog.py:587 -msgid "None" +#: ../../qt4/logviewdialog.py:49 +msgid "Last Log View" msgstr "" -#: ../../gnome/settingsdialog.py:413 ../../kde4/settingsdialog.py:589 -msgid "Changes & Errors" +#: ../../qt4/logviewdialog.py:51 +msgid "Snapshot Log View" msgstr "" -#: ../../gnome/settingsdialog.py:458 -msgid "Snapshots folder" -msgstr "스냅샷 폴더" - -#: ../../gnome/settingsdialog.py:466 ../../kde4/settingsdialog.py:1314 -msgid "Are you sure you want to change snapshots folder ?" -msgstr "정말 스냅샷 폴더를 변경하시겠습니까?" +#: ../../qt4/logviewdialog.py:59 ../../qt4/settingsdialog.py:59 +#: ../../qt4/settingsdialog.py:274 ../../qt4/settingsdialog.py:1899 +msgid "Profile:" +msgstr "프로파일:" -#: ../../gnome/settingsdialog.py:901 ../../kde4/settingsdialog.py:914 -msgid "" -"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " -"*/3 for periodic backups every 3 hours" +#: ../../qt4/logviewdialog.py:81 +msgid "Filter:" msgstr "" -#: ../../gnome/settingsdialog.py:1141 ../../kde4/settingsdialog.py:653 -msgid "New profile" -msgstr "새로운 프로파일" - -#: ../../gnome/settingsdialog.py:1155 ../../kde4/settingsdialog.py:669 -msgid "Rename profile" -msgstr "프로파일명을 변경" - -#: ../../gnome/settingsdialog.py:1167 ../../kde4/settingsdialog.py:683 -#, python-format -msgid "Are you sure you want to delete the profile \"%s\" ?" -msgstr "정말 프로파일 \"%s\"을 삭제하시겠습니까?" - -#: ../../gnome/settingsdialog.py:1173 ../../kde4/settingsdialog.py:1292 -msgid "Include folder" -msgstr "폴더를 포함" - -#: ../../gnome/settingsdialog.py:1193 ../../kde4/settingsdialog.py:1278 -msgid "Include file" -msgstr "파일 포함" - -#: ../../gnome/settingsdialog.py:1235 ../../kde4/settingsdialog.py:1241 -msgid "Exclude pattern" -msgstr "제외할 패턴" - -#: ../../gnome/settingsdialog.py:1240 ../../kde4/settingsdialog.py:1251 -msgid "Exclude patterns can't contain ':' char !" -msgstr "제외할 패턴에 ':' 문자가 있으면 안됩니다." - -#: ../../gnome/settingsdialog.py:1246 ../../kde4/settingsdialog.py:1257 -msgid "Exclude file" -msgstr "제외할 파일" - -#: ../../gnome/settingsdialog.py:1257 ../../kde4/settingsdialog.py:1261 -msgid "Exclude folder" -msgstr "제외할 폴더" - -#: ../../gnome/snapshotsdialog.py:240 -msgid "Jump to" +#: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 +msgid "All" msgstr "" -#: ../../gnome/snapshotsdialog.py:248 ../../kde4/snapshotsdialog.py:164 -msgid "Diff" -msgstr "차이점" - -#: ../../gnome/snapshotsdialog.py:277 ../../kde4/snapshotsdialog.py:339 -msgid "You can't compare a snapshot to itself" -msgstr "동일한 스냅샷을 비교할 수 없습니다." - -#: ../../gnome/snapshotsdialog.py:284 ../../kde4/snapshotsdialog.py:346 -#, python-format -msgid "Command not found: %s" -msgstr "명령어를 찾을 수 없음: %s" - -#: ../../gnome/snapshotsdialog.py:307 ../../kde4/snapshotsdialog.py:367 -#, python-format -msgid "" -"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 +#: ../../qt4/settingsdialog.py:657 +msgid "Errors" msgstr "" -#: ../../gnome/snapshotsdialog.py:310 ../../kde4/snapshotsdialog.py:370 -#, python-format -msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 +msgid "Changes" msgstr "" -#: ../../gnome/snapshotsdialog.py:312 ../../kde4/snapshotsdialog.py:372 -msgid "WARNING: This can not be revoked!" +#: ../../qt4/logviewdialog.py:92 +msgid "Informations" msgstr "" -#: ../../gnome/snapshotsdialog.py:317 ../../kde4/snapshotsdialog.py:377 -#, python-format -msgid "Exclude \"%s\" from future snapshots?" +#: ../../qt4/logviewdialog.py:101 +msgid "[E] Error, [I] Information, [C] Change" msgstr "" -#: ../../kde4/app.py:86 ../../gnome/mainwindow.glade:58 -#: ../../gnome/mainwindow.glade:60 -msgid "Refresh snapshots list" +#: ../../qt4/logviewdialog.py:104 +msgid "decode paths" msgstr "" -#: ../../kde4/app.py:94 ../../gnome/mainwindow.glade:88 -#: ../../gnome/mainwindow.glade:90 -msgid "Remove Snapshot" -msgstr "스냅샷 제거" - -#: ../../kde4/app.py:98 ../../gnome/mainwindow.glade:105 -msgid "View Snapshot Log" +#: ../../qt4/messagebox.py:56 +msgid "Error" msgstr "" -#: ../../kde4/app.py:102 ../../gnome/mainwindow.glade:121 -msgid "View Last Log" +#: ../../qt4/messagebox.py:62 ../../qt4/messagebox.py:68 +msgid "Question" msgstr "" -#: ../../kde4/app.py:108 ../../kde4/settingsdialog.py:69 -#: ../../gnome/mainwindow.glade:144 ../../gnome/mainwindow.glade:146 -#: ../../gnome/settingsdialog.glade:7 -msgid "Settings" -msgstr "설정" - -#: ../../kde4/app.py:124 ../../gnome/mainwindow.glade:169 -msgid "Shutdown system after snapshot has finished." +#: ../../qt4/qt4systrayicon.py:69 +msgid "Start BackInTime" msgstr "" -#: ../../kde4/app.py:131 ../../gnome/mainwindow.glade:184 -#: ../../gnome/mainwindow.glade:186 -msgid "Exit" -msgstr "끝내기" - -#: ../../kde4/app.py:186 ../../gnome/mainwindow.glade:289 -msgid "Up" -msgstr "위로" +#: ../../qt4/qt4systrayicon.py:124 +msgid "Working..." +msgstr "동작 중..." -#: ../../kde4/app.py:199 ../../gnome/mainwindow.glade:325 -msgid "Show hidden files" -msgstr "숨김 파일 표시" +#: ../../qt4/qt4tools.py:178 +msgid "Today" +msgstr "오늘" -#: ../../kde4/app.py:244 -msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" -msgstr "" -"현재 스냅샷에서\n" -"이 폴더가 존재하지 않습니다!" +#: ../../qt4/qt4tools.py:183 +msgid "Yesterday" +msgstr "어제" -#: ../../kde4/app.py:839 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" -msgstr "" -"정말 스냅샷을 제거하시겠습니까?\n" -"%s" +#: ../../qt4/qt4tools.py:188 +msgid "This week" +msgstr "어번 주" -#: ../../kde4/app.py:1140 ../../kde4/kde4systrayicon.py:117 -msgid "Working..." -msgstr "동작 중..." +#: ../../qt4/qt4tools.py:193 +msgid "Last week" +msgstr "지난 주" -#: ../../kde4/logviewdialog.py:55 -msgid "Error Log View" +#: ../../qt4/restoredialog.py:75 +msgid "Show full Log" msgstr "" -#: ../../kde4/logviewdialog.py:65 ../../kde4/settingsdialog.py:79 -#: ../../kde4/settingsdialog.py:293 ../../gnome/logviewdialog.glade:73 -#: ../../gnome/settingsdialog.glade:72 -msgid "Profile:" -msgstr "프로파일:" +#: ../../qt4/settingsdialog.py:68 +msgid "Edit" +msgstr "편집" -#: ../../kde4/logviewdialog.py:77 ../../gnome/logviewdialog.glade:110 -msgid "Filter:" +#: ../../qt4/settingsdialog.py:73 +msgid "Modify for Full System Backup" msgstr "" -#: ../../kde4/logviewdialog.py:100 ../../gnome/logviewdialog.glade:169 -msgid "[E] Error, [I] Information, [C] Change" +#: ../../qt4/settingsdialog.py:77 ../../qt4/settingsdialog.py:451 +msgid "Add" msgstr "" -#: ../../kde4/logviewdialog.py:103 ../../gnome/logviewdialog.glade:195 -msgid "decode paths" +#: ../../qt4/settingsdialog.py:81 ../../qt4/settingsdialog.py:408 +#: ../../qt4/settingsdialog.py:467 +msgid "Remove" msgstr "" -#: ../../kde4/settingsdialog.py:88 -msgid "Edit" -msgstr "편집" - -#: ../../kde4/settingsdialog.py:106 ../../gnome/settingsdialog.glade:1207 +#: ../../qt4/settingsdialog.py:96 msgid "General" msgstr "일반" -#: ../../kde4/settingsdialog.py:114 ../../gnome/settingsdialog.glade:199 +#: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "" -#: ../../kde4/settingsdialog.py:127 ../../kde4/settingsdialog.py:1311 +#: ../../qt4/settingsdialog.py:119 +#, python-format +msgid "" +"Warning: %(app)s uses EncFS for encryption. A recent security audit " +"revealed several possible attack vectors for this. Please take a look at 'A " +"NOTE ON SECURITY' in 'man backintime'." +msgstr "" + +#: ../../qt4/settingsdialog.py:129 ../../qt4/settingsdialog.py:1568 msgid "Where to save snapshots" msgstr "스냅샷을 저장할 위치" -#: ../../kde4/settingsdialog.py:146 +#: ../../qt4/settingsdialog.py:145 +msgid "Folder" +msgstr "" + +#: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "SSH 설정" -#: ../../kde4/settingsdialog.py:158 ../../kde4/settingsdialog.py:283 -#: ../../gnome/settingsdialog.glade:323 ../../gnome/settingsdialog.glade:583 -#: ../../gnome/settingsdialog.glade:874 +#: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "" -#: ../../kde4/settingsdialog.py:163 ../../gnome/settingsdialog.glade:350 -#: ../../gnome/settingsdialog.glade:610 +#: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "" -#: ../../kde4/settingsdialog.py:168 ../../kde4/settingsdialog.py:288 -#: ../../gnome/settingsdialog.glade:377 ../../gnome/settingsdialog.glade:637 -#: ../../gnome/settingsdialog.glade:902 +#: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "" -#: ../../kde4/settingsdialog.py:173 ../../gnome/settingsdialog.glade:416 +#: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" -#: ../../kde4/settingsdialog.py:178 ../../gnome/settingsdialog.glade:459 +#: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" -#: ../../kde4/settingsdialog.py:184 +#: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "" -#: ../../kde4/settingsdialog.py:228 ../../kde4/settingsdialog.py:237 -#: ../../kde4/settingsdialog.py:243 ../../gnome/settingsdialog.glade:703 -#: ../../gnome/settingsdialog.glade:743 +#: ../../qt4/settingsdialog.py:201 +msgid "Key File" +msgstr "" + +#: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 +#: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "" -#: ../../kde4/settingsdialog.py:249 ../../gnome/settingsdialog.glade:775 +#: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" -#: ../../kde4/settingsdialog.py:252 ../../gnome/settingsdialog.glade:792 +#: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" -#: ../../kde4/settingsdialog.py:264 ../../gnome/settingsdialog.glade:968 +#: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "고급 설정" -#: ../../kde4/settingsdialog.py:276 ../../gnome/settingsdialog.glade:848 -msgid "Auto Host / User / Profile Id" +#: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 +msgid "Full snapshot path: " msgstr "" -#: ../../kde4/settingsdialog.py:301 +#: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "일정" -#: ../../kde4/settingsdialog.py:311 ../../gnome/settingsdialog.glade:1092 +#: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "" -#: ../../kde4/settingsdialog.py:322 ../../gnome/settingsdialog.glade:1079 +#: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "" -#: ../../kde4/settingsdialog.py:333 ../../gnome/settingsdialog.glade:1066 +#: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "시간:" -#: ../../kde4/settingsdialog.py:344 ../../gnome/settingsdialog.glade:1053 +#: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "" -#: ../../kde4/settingsdialog.py:353 ../../gnome/settingsdialog.glade:1014 +#: ../../qt4/settingsdialog.py:339 msgid "" -"Run Back In Time periodically with anacron. This is useful if the computer " -"is not running regular." +"Run Back In Time repeatedly. This is useful if the computer is not running " +"regular." msgstr "" -#: ../../kde4/settingsdialog.py:357 ../../gnome/settingsdialog.glade:1040 -msgid "Frequency in days:" +#: ../../qt4/settingsdialog.py:344 +msgid "Every:" msgstr "" -#: ../../kde4/settingsdialog.py:368 ../../gnome/settingsdialog.glade:1026 +#: ../../qt4/settingsdialog.py:362 msgid "" "Run Back In Time as soon as the drive is connected (only once every X " "days).\n" "You will be prompted for your sudo password." msgstr "" -#: ../../kde4/settingsdialog.py:379 ../../gnome/settingsdialog.glade:1310 +#: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "포함" -#: ../../kde4/settingsdialog.py:403 ../../kde4/settingsdialog.py:445 -#: ../../gnome/settingsdialog.glade:1411 +#: ../../qt4/settingsdialog.py:381 +msgid "Include files and folders" +msgstr "" + +#: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "파일 추가" -#: ../../kde4/settingsdialog.py:408 ../../kde4/settingsdialog.py:450 -#: ../../gnome/settingsdialog.glade:1427 +#: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "폴더 추가" -#: ../../kde4/settingsdialog.py:418 ../../gnome/settingsdialog.glade:1474 +#: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "제외" -#: ../../kde4/settingsdialog.py:421 ../../gnome/settingsdialog.glade:1328 +#: ../../qt4/settingsdialog.py:417 msgid "" "Warning: Wildcards ('foo*', '[fF]oo', 'fo?') will be ignored with " "mode 'SSH encrypted'.\n" "Only separate asterisk are allowed ('foo/*', 'foo/**/bar')" msgstr "" -#: ../../kde4/settingsdialog.py:430 +#: ../../qt4/settingsdialog.py:425 +msgid "Exclude patterns, files or folders" +msgstr "" + +#: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "" -#: ../../kde4/settingsdialog.py:460 ../../gnome/settingsdialog.glade:1905 +#: ../../qt4/settingsdialog.py:463 +msgid "Add default" +msgstr "" + +#: ../../qt4/settingsdialog.py:474 +msgid "Exclude files bigger than: " +msgstr "" + +#: ../../qt4/settingsdialog.py:475 +#, python-format +msgid "" +"Exclude files bigger than value in %(prefix)s.\n" +"With 'Full rsync mode' disabled this will only affect new files\n" +"because for rsync this is a transfer option, not an exclude option.\n" +"So big files that has been backed up before will remain in snapshots\n" +"even if they had changed." +msgstr "" + +#: ../../qt4/settingsdialog.py:493 msgid "Auto-remove" msgstr "자동 제거" -#: ../../kde4/settingsdialog.py:464 ../../gnome/settingsdialog.glade:1608 +#: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "날짜가 다음 보다 오래된 경우:" -#: ../../kde4/settingsdialog.py:478 ../../gnome/settingsdialog.glade:1624 +#: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "여유 공간이 다음보다 작은 경우:" -#: ../../kde4/settingsdialog.py:490 ../../gnome/settingsdialog.glade:1642 +#: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" -#: ../../kde4/settingsdialog.py:514 ../../gnome/settingsdialog.glade:1697 +#: ../../qt4/settingsdialog.py:551 +msgid "Run in background on remote Host." +msgstr "" + +#: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "" -#: ../../kde4/settingsdialog.py:517 ../../kde4/settingsdialog.py:522 -#: ../../gnome/settingsdialog.glade:1705 ../../gnome/settingsdialog.glade:1729 +#: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "" -#: ../../kde4/settingsdialog.py:519 ../../gnome/settingsdialog.glade:1717 +#: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "" -#: ../../kde4/settingsdialog.py:524 ../../gnome/settingsdialog.glade:1743 +#: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "" -#: ../../kde4/settingsdialog.py:527 +#: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "" -#: ../../kde4/settingsdialog.py:529 ../../gnome/settingsdialog.glade:1769 +#: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "" -#: ../../kde4/settingsdialog.py:532 ../../gnome/settingsdialog.glade:1781 +#: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "" -#: ../../kde4/settingsdialog.py:534 ../../gnome/settingsdialog.glade:1795 +#: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "" -#: ../../kde4/settingsdialog.py:537 ../../gnome/settingsdialog.glade:1496 +#: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "이름을 붙인 스냅샷은 제거하지 않습니다." -#: ../../kde4/settingsdialog.py:546 ../../gnome/settingsdialog.glade:2104 +#: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "선택 사항" -#: ../../kde4/settingsdialog.py:549 ../../gnome/settingsdialog.glade:1920 +#: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "알림 사용하기" -#: ../../kde4/settingsdialog.py:552 ../../gnome/settingsdialog.glade:1937 +#: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "배터리 사용중에는 스냅샷을 찍을 수 없습니다." -#: ../../kde4/settingsdialog.py:555 +#: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" msgstr "시스템의 전원 상태를 알 수 없습니다." -#: ../../kde4/settingsdialog.py:558 ../../gnome/settingsdialog.glade:1955 -msgid "Backup files on restore" -msgstr "백업 파일로 복원" +#: ../../qt4/settingsdialog.py:611 +msgid "Run only one snapshot at a time" +msgstr "" + +#: ../../qt4/settingsdialog.py:612 +msgid "" +"Other snapshots will be blocked until the current snapshot is done.\n" +"This is a global option. So it will effect all profiles for this user.\n" +"But you need to activate this for all other users, too." +msgstr "" + +#: ../../qt4/settingsdialog.py:617 +msgid "Backup replaced files on restore" +msgstr "" + +#: ../../qt4/settingsdialog.py:618 +#, python-format +msgid "" +"Newer versions of files will be renamed with trailing '%(suffix)s' before " +"restoring.\n" +"If you don't need them anymore you can remove them with '%(cmd)s'" +msgstr "" -#: ../../kde4/settingsdialog.py:561 ../../gnome/settingsdialog.glade:1972 +#: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "" -#: ../../kde4/settingsdialog.py:564 ../../gnome/settingsdialog.glade:1989 +#: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "" -#: ../../kde4/settingsdialog.py:567 ../../gnome/settingsdialog.glade:2006 +#: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "" -#: ../../kde4/settingsdialog.py:568 ../../gnome/settingsdialog.glade:2032 +#: ../../qt4/settingsdialog.py:634 msgid "" -"- snapshots are no read-only\n" -"- destination file-system must support all linux attributes (dates, rights, " +"- snapshots are not read-only\n" +"- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" -#: ../../kde4/settingsdialog.py:575 ../../gnome/settingsdialog.glade:2045 +#: ../../qt4/settingsdialog.py:641 +msgid "Take a new snapshot regardless of there were changes or not." +msgstr "" + +#: ../../qt4/settingsdialog.py:644 msgid "Check for changes (don't take a new snapshot if nothing changed)" msgstr "" -#: ../../kde4/settingsdialog.py:582 +#: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "기록 단계:" -#: ../../kde4/settingsdialog.py:597 ../../gnome/settingsdialog.glade:2366 -msgid "Expert Options" -msgstr "고급 설정" +#: ../../qt4/settingsdialog.py:656 +msgid "None" +msgstr "" + +#: ../../qt4/settingsdialog.py:658 +msgid "Changes & Errors" +msgstr "" -#: ../../kde4/settingsdialog.py:600 +#: ../../qt4/settingsdialog.py:674 msgid "Change these options only if you really know what you are doing !" msgstr "이 옵션들이 무엇을 의미하는지 정확하게 알 경우에만 바꾸시오!" -#: ../../kde4/settingsdialog.py:608 ../../gnome/settingsdialog.glade:2133 -msgid "Run 'nice' as cron job (default: enabled)" -msgstr "'nice'를 cron job으로 실행합니다. (기본값: 가능)" +#: ../../qt4/settingsdialog.py:678 +msgid "Run 'nice':" +msgstr "" + +#: ../../qt4/settingsdialog.py:684 ../../qt4/settingsdialog.py:696 +msgid "as cron job" +msgstr "" + +#: ../../qt4/settingsdialog.py:687 ../../qt4/settingsdialog.py:702 +#: ../../qt4/settingsdialog.py:716 +msgid "on remote host" +msgstr "" + +#: ../../qt4/settingsdialog.py:690 +msgid "Run 'ionice':" +msgstr "" + +#: ../../qt4/settingsdialog.py:699 +msgid "when taking a manual snapshot" +msgstr "" -#: ../../kde4/settingsdialog.py:611 ../../gnome/settingsdialog.glade:2150 -msgid "Run 'ionice' as cron job (default: enabled)" +#: ../../qt4/settingsdialog.py:706 +msgid "Run 'rsync' with 'nocache':" msgstr "" -#: ../../kde4/settingsdialog.py:614 ../../gnome/settingsdialog.glade:2167 -msgid "Run 'ionice' when taking a manual snapshot (default: disabled)" +#: ../../qt4/settingsdialog.py:712 +msgid "on local machine" msgstr "" -#: ../../kde4/settingsdialog.py:617 ../../gnome/settingsdialog.glade:2184 -msgid "Run 'nice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:719 +msgid "Redirect stdout to /dev/null in cronjobs." msgstr "" -#: ../../kde4/settingsdialog.py:620 ../../gnome/settingsdialog.glade:2201 -msgid "Run 'ionice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:725 +msgid "Redirect stderr to /dev/null in cronjobs." msgstr "" -#: ../../kde4/settingsdialog.py:626 ../../gnome/settingsdialog.glade:2224 +#: ../../qt4/settingsdialog.py:734 msgid "Limit rsync bandwidth usage: " msgstr "" -#: ../../kde4/settingsdialog.py:629 ../../gnome/settingsdialog.glade:2259 +#: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" -#: ../../kde4/settingsdialog.py:634 ../../gnome/settingsdialog.glade:2280 +#: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "" -#: ../../kde4/settingsdialog.py:637 ../../gnome/settingsdialog.glade:2297 +#: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "" -#: ../../kde4/settingsdialog.py:640 ../../gnome/settingsdialog.glade:2314 +#: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute links)" msgstr "" -#: ../../kde4/settingsdialog.py:643 ../../gnome/settingsdialog.glade:2331 -msgid "Copy links (dereference symbolic links)" -msgstr "링크 복사(심볼릭 링크와는 다름)" - -#: ../../kde4/snapshotsdialog.py:46 ../../kde4/snapshotsdialog.py:173 -#: ../../gnome/snapshotsdialog.glade:385 -msgid "Diff Options" -msgstr "차이점 옵션" - -#: ../../kde4/snapshotsdialog.py:56 ../../gnome/snapshotsdialog.glade:314 -msgid "Command:" -msgstr "명령:" - -#: ../../kde4/snapshotsdialog.py:60 ../../gnome/snapshotsdialog.glade:322 -msgid "Parameters:" -msgstr "매개 변수:" +#: ../../qt4/settingsdialog.py:834 +msgid "Paste additional options to rsync" +msgstr "" -#: ../../kde4/snapshotsdialog.py:64 ../../gnome/snapshotsdialog.glade:334 -msgid "Use %1 and %2 for path parameters" -msgstr "경로 매개변수로 %1과 %2를 사용" +#: ../../qt4/settingsdialog.py:837 +msgid "" +"Options must be quoted e.g. --exclude-from=\"/path/to/my exclude file\"." +msgstr "" -#: ../../kde4/snapshotsdialog.py:123 ../../gnome/snapshotsdialog.glade:184 -#: ../../gnome/snapshotsdialog.glade:186 -msgid "Delete" -msgstr "삭제" +#: ../../qt4/settingsdialog.py:847 +msgid "Add prefix to SSH commands" +msgstr "" -#: ../../kde4/snapshotsdialog.py:128 ../../gnome/snapshotsdialog.glade:199 -#: ../../gnome/snapshotsdialog.glade:201 -msgid "Select All" -msgstr "전체 선택" +#: ../../qt4/settingsdialog.py:850 +#, python-format +msgid "" +"Prefix to run before every command on remote host.\n" +"Variables need to be escaped with \\$FOO.\n" +"This doesn't touch rsync. So to add a prefix\n" +"for rsync use \"%(cb_rsync_options)s\" with\n" +"%(rsync_options_value)s\n" +"\n" +"%(default)s: %(def_value)s" +msgstr "" -#: ../../kde4/snapshotsdialog.py:132 ../../gnome/snapshotsdialog.glade:88 -msgid "List only different snapshots" +#: ../../qt4/settingsdialog.py:858 ../../qt4/settingsdialog.py:1691 +msgid "default" msgstr "" -#: ../../kde4/snapshotsdialog.py:139 ../../gnome/snapshotsdialog.glade:110 -msgid "List only equal snapshots to: " +#: ../../qt4/settingsdialog.py:875 +msgid "Restore Config" msgstr "" -#: ../../kde4/snapshotsdialog.py:149 ../../gnome/snapshotsdialog.glade:146 -msgid "Deep check (more accurate, but slow)" +#: ../../qt4/settingsdialog.py:891 +msgid "" +"Full system backup can only create a snapshot to be restored to the same " +"physical disk(s) with the same disk partitioning as from the source; " +"restoring to new physical disks or the same disks with different " +"partitioning will yield a potentially broken and unusable system.\n" +"\n" +"Full system backup will override some settings that may have been " +"customized. Continue?" msgstr "" -#: ../../kde4/snapshotsdialog.py:174 -msgid "Go To" -msgstr "이동하기" +#: ../../qt4/settingsdialog.py:922 +msgid "New profile" +msgstr "새로운 프로파일" -#: ../../gnome/logviewdialog.glade:9 -msgid "Log View" -msgstr "" +#: ../../qt4/settingsdialog.py:938 +msgid "Rename profile" +msgstr "프로파일명을 변경" -#: ../../gnome/logviewdialog.glade:179 -msgid "scroll down automatic" -msgstr "자동 스크롤" +#: ../../qt4/settingsdialog.py:952 +#, python-format +msgid "Are you sure you want to delete the profile \"%s\" ?" +msgstr "정말 프로파일 \"%s\"을 삭제하시겠습니까?" -#: ../../gnome/mainwindow.glade:7 -msgid "Back In Time" -msgstr "백 인 타임" +#: ../../qt4/settingsdialog.py:1191 +msgid "" +"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " +"*/3 for periodic backups every 3 hours" +msgstr "" -#: ../../gnome/mainwindow.glade:45 -msgid "Backup Now" -msgstr "지금 백업" +#: ../../qt4/settingsdialog.py:1489 +msgid "Exclude pattern" +msgstr "제외할 패턴" -#: ../../gnome/mainwindow.glade:171 -msgid "Shutdown" -msgstr "끄기" +#: ../../qt4/settingsdialog.py:1502 +msgid "Exclude file" +msgstr "제외할 파일" -#: ../../gnome/mainwindow.glade:287 -msgid "Parent folder" -msgstr "상위 폴더" +#: ../../qt4/settingsdialog.py:1506 +msgid "Exclude folder" +msgstr "제외할 폴더" -#: ../../gnome/mainwindow.glade:327 -msgid "Hidden files" -msgstr "숨겨진 파일" +#: ../../qt4/settingsdialog.py:1525 +msgid "Include file" +msgstr "파일 포함" -#: ../../gnome/mainwindow.glade:451 +#: ../../qt4/settingsdialog.py:1533 ../../qt4/settingsdialog.py:1553 +#, python-format msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +"\"%s\" is a symlink. The linked target will not be backed up until you " +"include it, too.\n" +"Would you like to include the symlinks target instead?" msgstr "" -"현재 스냅샷에서\n" -"이 폴더가 존재하지 않습니다!" -#: ../../gnome/settingsdialog.glade:287 -msgid "Where to save snapshots" -msgstr "스냅샷을 저장할 위치" +#: ../../qt4/settingsdialog.py:1545 +msgid "Include folder" +msgstr "폴더를 포함" -#: ../../gnome/settingsdialog.glade:483 -msgid "Private key:" -msgstr "개인키(비밀키):" +#: ../../qt4/settingsdialog.py:1572 +msgid "Are you sure you want to change snapshots folder ?" +msgstr "정말 스냅샷 폴더를 변경하시겠습니까?" -#: ../../gnome/settingsdialog.glade:534 -msgid "Advanced SSH Settings" -msgstr "고급 SSH 설정" +#: ../../qt4/settingsdialog.py:1688 +msgid "enabled" +msgstr "" -#: ../../gnome/settingsdialog.glade:552 -msgid "SSH Settings" -msgstr "SSH 설정" +#: ../../qt4/settingsdialog.py:1690 +msgid "disabled" +msgstr "" -#: ../../gnome/settingsdialog.glade:815 -msgid "Password" -msgstr "비밀번호" +#: ../../qt4/settingsdialog.py:1715 +msgid "Restore Settings" +msgstr "" -#: ../../gnome/settingsdialog.glade:930 -msgid "Profile Id:" +#: ../../qt4/settingsdialog.py:1732 +msgid " and add your user to group 'fuse'" msgstr "" -#: ../../gnome/settingsdialog.glade:1115 +#: ../../qt4/settingsdialog.py:1736 +#, python-format msgid "" -"hours seperate by comma ( e.g. 8,12,18,23) or */3 for periodic backups every " -"3 hours (cron style)" +"Please navigate to the snapshot from which you want to restore %(appName)s's " +"configuration. The path may look like: \n" +"%(samplePath)s\n" +"\n" +"If your snapshots are on a remote drive or if they are encrypted you need to " +"manually mount them first. If you use Mode SSH you also may need to set up " +"public key login to the remote host%(addFuse)s.\n" +"Take a look at 'man backintime'." msgstr "" -#: ../../gnome/settingsdialog.glade:1163 -msgid "Schedule" -msgstr "일정" +#: ../../qt4/settingsdialog.py:1794 ../../qt4/settingsdialog.py:1854 +msgid "No config found" +msgstr "" -#: ../../gnome/settingsdialog.glade:1363 -msgid "Highly recommended:" +#: ../../qt4/snapshotsdialog.py:49 ../../qt4/snapshotsdialog.py:173 +msgid "Diff Options" +msgstr "차이점 옵션" + +#: ../../qt4/snapshotsdialog.py:56 +msgid "Command:" +msgstr "명령:" + +#: ../../qt4/snapshotsdialog.py:60 +msgid "Parameters:" +msgstr "매개 변수:" + +#: ../../qt4/snapshotsdialog.py:64 +msgid "Use %1 and %2 for path parameters" +msgstr "경로 매개변수로 %1과 %2를 사용" + +#: ../../qt4/snapshotsdialog.py:106 +msgid "List only different snapshots" msgstr "" -#: ../../gnome/settingsdialog.glade:1377 -msgid "label" -msgstr "이름표" +#: ../../qt4/snapshotsdialog.py:113 +msgid "List only equal snapshots to: " +msgstr "" -#: ../../gnome/settingsdialog.glade:1755 -msgid "week(s)" -msgstr "주" +#: ../../qt4/snapshotsdialog.py:123 +msgid "Deep check (more accurate, but slow)" +msgstr "" -#: ../../gnome/settingsdialog.glade:2069 -msgid "Log level:" -msgstr "기록 단계:" +#: ../../qt4/snapshotsdialog.py:144 +msgid "Delete" +msgstr "삭제" -#: ../../gnome/settingsdialog.glade:2121 -msgid "" -"Change these options only if you really know what you are doing !" -msgstr "이 옵션들이 무엇을 의미하는지 정확하게 알 경우에만 바꾸시오!" +#: ../../qt4/snapshotsdialog.py:148 +msgid "Select All" +msgstr "전체 선택" -#: ../../gnome/snapshotsdialog.glade:263 -msgid "Diff with" +#: ../../qt4/snapshotsdialog.py:161 +msgid "Diff" msgstr "차이점" -#: ../../gnome/textinputdialog.glade:7 -msgid "Pattern" -msgstr "패턴" - -#: ../../gnome/textinputdialog.glade:70 -msgid "Text" -msgstr "내용" +#: ../../qt4/snapshotsdialog.py:172 +msgid "Go To" +msgstr "이동하기" + +#: ../../qt4/snapshotsdialog.py:326 +msgid "You can't compare a snapshot to itself" +msgstr "동일한 스냅샷을 비교할 수 없습니다." + +#: ../../qt4/snapshotsdialog.py:333 +#, python-format +msgid "Command not found: %s" +msgstr "명령어를 찾을 수 없음: %s" + +#: ../../qt4/snapshotsdialog.py:354 +#, python-format +msgid "" +"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" +msgstr "" + +#: ../../qt4/snapshotsdialog.py:357 +#, python-format +msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +msgstr "" + +#: ../../qt4/snapshotsdialog.py:359 +msgid "WARNING: This can not be revoked!" +msgstr "" + +#: ../../qt4/snapshotsdialog.py:374 +#, python-format +msgid "Exclude \"%s\" from future snapshots?" +msgstr "" diff -Nru backintime-1.0.36/common/po/lt.po backintime-1.1.12/common/po/lt.po --- backintime-1.0.36/common/po/lt.po 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/po/lt.po 2016-01-11 18:07:58.000000000 +0000 @@ -7,8 +7,8 @@ msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2013-11-09 22:34+0100\n" -"PO-Revision-Date: 2010-12-10 09:52+0000\n" +"POT-Creation-Date: 2015-12-19 00:47+0100\n" +"PO-Revision-Date: 2015-09-09 21:48+0000\n" "Last-Translator: Mantas Kriaučiūnas \n" "Language-Team: Lithuanian \n" "MIME-Version: 1.0\n" @@ -16,254 +16,295 @@ "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "(n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Launchpad-Export-Date: 2014-08-06 10:20+0000\n" -"X-Generator: Launchpad (build 17147)\n" +"X-Launchpad-Export-Date: 2016-01-11 17:52+0000\n" +"X-Generator: Launchpad (build 17881)\n" -#: ../../common/config.py:72 +#: ../../common/configfile.py:60 +#, python-format +msgid "Failed to save config: %s" +msgstr "" + +#: ../../common/configfile.py:78 +#, python-format +msgid "Failed to load config: %s" +msgstr "" + +#: ../../common/configfile.py:352 ../../common/configfile.py:414 +#, python-format +msgid "Profile \"%s\" already exists !" +msgstr "" + +#: ../../common/configfile.py:383 +msgid "You can't remove the last profile !" +msgstr "" + +#: ../../common/config.py:76 msgid "Disabled" msgstr "Išjungta" -#: ../../common/config.py:73 +#: ../../common/config.py:77 msgid "At every boot/reboot" msgstr "" -#: ../../common/config.py:74 +#: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Kas 5 minutės" -#: ../../common/config.py:75 +#: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Kas 10 minučių" -#: ../../common/config.py:76 +#: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "" -#: ../../common/config.py:77 +#: ../../common/config.py:81 msgid "Every hour" msgstr "" -#: ../../common/config.py:78 +#: ../../common/config.py:82 msgid "Every 2 hours" msgstr "" -#: ../../common/config.py:79 +#: ../../common/config.py:83 msgid "Every 4 hours" msgstr "" -#: ../../common/config.py:80 +#: ../../common/config.py:84 msgid "Every 6 hours" msgstr "" -#: ../../common/config.py:81 +#: ../../common/config.py:85 msgid "Every 12 hours" msgstr "" -#: ../../common/config.py:82 +#: ../../common/config.py:86 msgid "Custom Hours" msgstr "" -#: ../../common/config.py:83 +#: ../../common/config.py:87 msgid "Every Day" msgstr "Kasdien" -#: ../../common/config.py:84 -msgid "Daily (anacron)" +#: ../../common/config.py:88 +msgid "Repeatedly (anacron)" msgstr "" -#: ../../common/config.py:85 +#: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "" -#: ../../common/config.py:86 +#: ../../common/config.py:90 msgid "Every Week" msgstr "Kas savaitę" -#: ../../common/config.py:87 +#: ../../common/config.py:91 msgid "Every Month" msgstr "Kas mėnesį" -#: ../../common/config.py:91 +#: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Diena (os/ų)" -#: ../../common/config.py:92 +#: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Savaitė (ės/čių)" -#: ../../common/config.py:93 +#: ../../common/config.py:97 msgid "Year(s)" msgstr "Metai (-ų)" -#: ../../common/config.py:100 +#: ../../common/config.py:101 +msgid "Hour(s)" +msgstr "" + +#: ../../common/config.py:104 +msgid "Month(s)" +msgstr "" + +#: ../../common/config.py:126 ../../qt4/settingsdialog.py:551 msgid " EXPERIMENTAL!" msgstr "" -#: ../../common/config.py:103 +#: ../../common/config.py:129 msgid "Local" msgstr "" -#: ../../common/config.py:104 +#: ../../common/config.py:130 msgid "SSH" msgstr "" -#: ../../common/config.py:104 ../../common/config.py:106 -#: ../../gnome/settingsdialog.py:475 ../../kde4/settingsdialog.py:1325 +#: ../../common/config.py:130 ../../common/config.py:132 +#: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "" -#: ../../common/config.py:105 +#: ../../common/config.py:131 msgid "Local encrypted" msgstr "" -#: ../../common/config.py:105 ../../common/config.py:106 +#: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "" -#: ../../common/config.py:106 +#: ../../common/config.py:132 msgid "SSH encrypted" msgstr "" -#: ../../common/config.py:112 +#: ../../common/config.py:135 msgid "Default" msgstr "" -#: ../../common/config.py:113 +#: ../../common/config.py:136 msgid "AES128-CTR" msgstr "" -#: ../../common/config.py:114 +#: ../../common/config.py:137 msgid "AES192-CTR" msgstr "" -#: ../../common/config.py:115 +#: ../../common/config.py:138 msgid "AES256-CTR" msgstr "" -#: ../../common/config.py:116 +#: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "" -#: ../../common/config.py:117 +#: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "" -#: ../../common/config.py:118 +#: ../../common/config.py:141 msgid "AES128-CBC" msgstr "" -#: ../../common/config.py:119 +#: ../../common/config.py:142 msgid "3DES-CBC" msgstr "" -#: ../../common/config.py:120 +#: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "" -#: ../../common/config.py:121 +#: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "" -#: ../../common/config.py:122 +#: ../../common/config.py:145 msgid "AES192-CBC" msgstr "" -#: ../../common/config.py:123 +#: ../../common/config.py:146 msgid "AES256-CBC" msgstr "" -#: ../../common/config.py:124 +#: ../../common/config.py:147 msgid "ARCFOUR" msgstr "" -#: ../../common/config.py:129 +#: ../../common/config.py:153 msgid "Main profile" msgstr "" -#: ../../common/config.py:256 ../../common/config.py:275 -#: ../../common/config.py:286 ../../common/config.py:291 +#: ../../common/config.py:289 ../../common/config.py:296 +#: ../../common/config.py:307 ../../common/config.py:312 +#: ../../qt4/qt4systrayicon.py:61 #, python-format msgid "Profile: \"%s\"" msgstr "" -#: ../../common/config.py:256 +#: ../../common/config.py:289 msgid "Snapshots folder is not valid !" msgstr "" -#: ../../common/config.py:275 +#: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "" -#: ../../common/config.py:286 +#: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "Negalima įtraukti atsarginėms kopijoms skirto aplanko!" -#: ../../common/config.py:291 +#: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "Negalima įtraukti atsarginėms kopijoms skirto poaplankio!" -#: ../../common/config.py:361 +#: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s nėra aplankas!" -#: ../../common/config.py:376 ../../common/config.py:389 +#: ../../common/config.py:380 +msgid "Host/User/Profile-ID must not be empty!" +msgstr "" + +#: ../../common/config.py:388 ../../common/config.py:420 #, python-format msgid "" "Can't write to: %s\n" "Are you sure you have write access ?" msgstr "" -#: ../../common/config.py:1286 -msgid "" -"Can't find crontab.\n" -"Are you sure cron is installed ?\n" -"If not you should disable all automatic backups." -msgstr "Negaliu rasti crontab." - -#: ../../common/config.py:1338 +#: ../../common/config.py:400 #, python-format -msgid "Schedule udev doesn't work with mode %s" +msgid "" +"Destination filesystem for '%(path)s' is formatted with FAT which doesn't " +"support hard-links. Please use a native Linux filesystem." msgstr "" -#: ../../common/config.py:1342 +#: ../../common/config.py:405 #, python-format -msgid "Couldn't find UUID for \"%s\"" +msgid "" +"Destination filsystem for '%(path)s' is a SMB mounted share. Please make " +"sure the remote SMB server supports symlinks or activate '%(copyLinks)s' in " +"'%(expertOptions)s'." msgstr "" -#: ../../common/config.py:1379 -msgid "Failed to remove udev rules" +#: ../../common/config.py:408 ../../qt4/settingsdialog.py:815 +msgid "Copy links (dereference symbolic links)" msgstr "" -#: ../../common/config.py:1385 -msgid "Failed to create udev rules" -msgstr "" +#: ../../common/config.py:409 ../../qt4/settingsdialog.py:669 +msgid "Expert Options" +msgstr "Parinktys ekspertams" -#: ../../common/config.py:1420 +#: ../../common/config.py:411 +#, python-format msgid "" -"Can't find anacron.\n" -"Are you sure anacron is installed ?\n" -"If not you should disable daily anacron backups." +"Destination filesystem for '%(path)s is a sshfs mounted share. sshfs doesn't " +"support hard-links. Please use mode 'SSH' instead." msgstr "" -#: ../../common/config.py:1439 -msgid "Please provide your sudo password to install the udev rule." +#: ../../common/config.py:1407 +msgid "" +"Can't find crontab.\n" +"Are you sure cron is installed ?\n" +"If not you should disable all automatic backups." +msgstr "Negaliu rasti crontab." + +#: ../../common/config.py:1411 +msgid "Failed to write new crontab." msgstr "" -#: ../../common/config.py:1445 -msgid "Please provide your sudo password to remove unused udev rules." +#: ../../common/config.py:1505 +#, python-format +msgid "" +"Could not install Udev rule for profile %(profile_id)s. DBus Service " +"'%(dbus_interface)s' wasn't available" msgstr "" -#: ../../common/configfile.py:253 ../../common/configfile.py:315 +#: ../../common/config.py:1517 #, python-format -msgid "Profile \"%s\" already exists !" +msgid "Schedule udev doesn't work with mode %s" msgstr "" -#: ../../common/configfile.py:284 -msgid "You can't remove the last profile !" +#: ../../common/config.py:1526 +#, python-format +msgid "Couldn't find UUID for \"%s\"" msgstr "" -#: ../../common/encfstools.py:95 +#: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" @@ -271,38 +312,38 @@ "%(error)s" msgstr "" -#: ../../common/encfstools.py:105 +#: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "" -#: ../../common/encfstools.py:149 +#: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "" -#: ../../common/encfstools.py:153 +#: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" -#: ../../common/encfstools.py:154 +#: ../../common/encfstools.py:171 msgid "Cancel" msgstr "" -#: ../../common/encfstools.py:157 +#: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "" -#: ../../common/encfstools.py:161 +#: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "" -#: ../../common/encfstools.py:166 +#: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" -#: ../../common/encfstools.py:174 ../../common/sshtools.py:207 +#: ../../common/encfstools.py:196 ../../common/sshtools.py:262 #, python-format msgid "" "%(user)s is not member of group 'fuse'.\n" @@ -310,70 +351,73 @@ "Look at 'man backintime' for further instructions." msgstr "" -#: ../../common/encfstools.py:189 +#: ../../common/encfstools.py:211 msgid "" "encfs version 1.7.2 and before has a bug with option --reverse. Please " "update encfs" msgstr "" -#: ../../common/encfstools.py:453 ../../common/encfstools.py:480 -#: ../../common/snapshots.py:982 ../../common/snapshots.py:1288 -#: ../../kde4/app.py:82 ../../gnome/mainwindow.glade:43 +#: ../../common/encfstools.py:512 ../../common/snapshots.py:1131 +#: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "Priimti momentinę kopiją" -#: ../../common/mount.py:195 +#: ../../common/mount.py:204 #, python-format msgid "" "Hash collision occurred in hash_id %s. Incrementing global value " "hash_collision and try again." msgstr "" -#: ../../common/mount.py:246 +#: ../../common/mount.py:259 #, python-format msgid "mountpoint %s not empty." msgstr "" -#: ../../common/mount.py:286 +#: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" -#: ../../common/password.py:425 +#: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" -#: ../../common/snapshots.py:171 ../../gnome/app.py:1127 -#: ../../kde4/app.py:1014 +#: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Dabar" -#: ../../common/snapshots.py:182 ../../gnome/gnometools.py:37 +#: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "" -#: ../../common/snapshots.py:282 +#: ../../common/snapshots.py:344 msgid "" "### This log has been decoded with automatic search pattern\n" "### If some paths are not decoded you can manually decode them with:\n" msgstr "" -#: ../../common/snapshots.py:465 +#: ../../common/snapshots.py:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "" -#: ../../common/snapshots.py:564 +#: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "" -#: ../../common/snapshots.py:739 +#: ../../common/snapshots.py:752 ../../qt4/app.py:377 ../../qt4/app.py:675 +#: ../../qt4/app.py:692 ../../qt4/qt4systrayicon.py:65 +msgid "Done" +msgstr "Atlikta" + +#: ../../common/snapshots.py:860 msgid "" "Back In Time changed its backup format.\n" "\n" "Your old snapshots can be moved according to this new format. OK?" msgstr "" -#: ../../common/snapshots.py:749 +#: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" @@ -384,13 +428,13 @@ "(The program will still be able to discriminate between them)" msgstr "" -#: ../../common/snapshots.py:752 +#: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" msgstr "" -#: ../../common/snapshots.py:803 +#: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" @@ -403,7 +447,7 @@ "cannot continue taking snapshots" msgstr "" -#: ../../common/snapshots.py:812 +#: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" @@ -413,14 +457,14 @@ "if you are done restart Back In Time to proceed" msgstr "" -#: ../../common/snapshots.py:825 +#: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" msgstr "" -#: ../../common/snapshots.py:830 +#: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" @@ -432,23 +476,27 @@ "If you do not, you will be asked again next time you start Back In Time." msgstr "" -#: ../../common/snapshots.py:839 +#: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "" -#: ../../common/snapshots.py:841 +#: ../../common/snapshots.py:953 msgid "" "Back In Time still cannot continue taking new snapshots.\n" "Restart Back In Time to see the questions again" msgstr "" -#: ../../common/snapshots.py:913 +#: ../../common/snapshots.py:972 +msgid "Deferring backup while on battery" +msgstr "" + +#: ../../common/snapshots.py:1035 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it." msgstr "" -#: ../../common/snapshots.py:915 +#: ../../common/snapshots.py:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." @@ -456,149 +504,156 @@ msgstr[1] "Laukti %s sekundžių." msgstr[2] "Laukti %s sekundžių." -#: ../../common/snapshots.py:941 +#: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "" -#: ../../common/snapshots.py:950 +#: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "Baigiu" -#: ../../common/snapshots.py:1088 +#: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "Nepavyko sukurti aplanko: %s" -#: ../../common/snapshots.py:1107 +#: ../../common/snapshots.py:1217 msgid "..." msgstr "..." -#: ../../common/snapshots.py:1134 +#: ../../common/snapshots.py:1238 +#, python-format +msgid "Found leftover '%s' which can be continued." +msgstr "" + +#: ../../common/snapshots.py:1250 +#, python-format +msgid "Remove leftover '%s' folder from last run" +msgstr "" + +#: ../../common/snapshots.py:1263 #, python-format msgid "Can't remove folder: %s" msgstr "Nepavyko pašalinti aplanko: %s" -#: ../../common/snapshots.py:1219 +#: ../../common/snapshots.py:1340 #, python-format msgid "Compare with snapshot %s" msgstr "palyginti su momentine kopija %s" -#: ../../common/snapshots.py:1248 +#: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "Kurti hard-links" -#: ../../common/snapshots.py:1335 +#: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "Išsaugoti konfigūracijos failą..." -#: ../../common/snapshots.py:1341 +#: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "" -#: ../../common/snapshots.py:1442 +#: ../../common/snapshots.py:1470 +msgid "Save permission over ssh failed. Retry normal method" +msgstr "" + +#: ../../common/snapshots.py:1521 #, python-format msgid "Can't rename %(new_path)s to %(path)s" msgstr "" -#: ../../common/snapshots.py:1562 -msgid "Remove old snapshots" -msgstr "Pašalinti senas momentines kopijas" - -#: ../../common/snapshots.py:1586 ../../kde4/settingsdialog.py:501 -#: ../../gnome/settingsdialog.glade:1660 +#: ../../common/snapshots.py:1695 ../../common/snapshots.py:1728 +#: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "Sumanus pašalinimas" -#: ../../common/snapshots.py:1591 +#: ../../common/snapshots.py:1704 +msgid "Remove old snapshots" +msgstr "Pašalinti senas momentines kopijas" + +#: ../../common/snapshots.py:1733 msgid "Try to keep min free space" msgstr "Bandyti" -#: ../../common/snapshots.py:1621 +#: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" -#: ../../common/sshtools.py:106 +#: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "" -#: ../../common/sshtools.py:113 +#: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "" -#: ../../common/sshtools.py:187 -#, python-format -msgid "" -"Failed to unlock SSH private key:\n" -"Error: %s" -msgstr "" - -#: ../../common/sshtools.py:194 +#: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" -#: ../../common/sshtools.py:199 +#: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" -#: ../../common/sshtools.py:217 +#: ../../common/sshtools.py:278 #, python-format msgid "" "Password-less authentication for %(user)s@%(host)s failed. Look at 'man " "backintime' for further instructions." msgstr "" -#: ../../common/sshtools.py:229 +#: ../../common/sshtools.py:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" -#: ../../common/sshtools.py:254 +#: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" -#: ../../common/sshtools.py:274 +#: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" -#: ../../common/sshtools.py:276 +#: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:278 +#: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:280 +#: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" -#: ../../common/sshtools.py:302 +#: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" -#: ../../common/sshtools.py:325 ../../common/sshtools.py:383 +#: ../../common/sshtools.py:423 ../../common/sshtools.py:553 #, python-format msgid "" "Remote host %(host)s doesn't support '%(command)s':\n" @@ -606,7 +661,7 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:387 +#: ../../common/sshtools.py:556 #, python-format msgid "" "Check commands on host %(host)s returned unknown error:\n" @@ -614,821 +669,939 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:400 +#: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "" -#: ../../gnome/app.py:185 ../../gnome/app.py:594 ../../gnome/app.py:608 -#: ../../kde4/app.py:299 ../../kde4/app.py:570 ../../kde4/app.py:587 -msgid "Done" -msgstr "Atlikta" +#: ../../qt4/app.py:81 +msgid "Refresh snapshots list" +msgstr "" + +#: ../../qt4/app.py:85 ../../qt4/app.py:890 +msgid "Snapshot Name" +msgstr "Momentinės kopijos pavadinimas" + +#: ../../qt4/app.py:88 +msgid "Remove Snapshot" +msgstr "Pašalinti momentines kopijas" -#: ../../gnome/app.py:189 ../../kde4/app.py:143 ../../kde4/app.py:159 -#: ../../gnome/mainwindow.glade:225 +#: ../../qt4/app.py:91 +msgid "View Snapshot Log" +msgstr "" + +#: ../../qt4/app.py:94 +msgid "View Last Log" +msgstr "" + +#: ../../qt4/app.py:99 ../../qt4/settingsdialog.py:51 +msgid "Settings" +msgstr "Nustatymai" + +#: ../../qt4/app.py:104 +msgid "Shutdown" +msgstr "" + +#: ../../qt4/app.py:105 +msgid "Shutdown system after snapshot has finished." +msgstr "" + +#: ../../qt4/app.py:111 +msgid "Exit" +msgstr "Baigti" + +#: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 msgid "Help" msgstr "Pagalba" -#: ../../gnome/app.py:191 ../../kde4/app.py:146 -#: ../../gnome/mainwindow.glade:223 +#: ../../qt4/app.py:122 +msgid "Config File Help" +msgstr "" + +#: ../../qt4/app.py:125 msgid "Website" msgstr "Interneto svetainė" -#: ../../gnome/app.py:192 ../../kde4/app.py:148 +#: ../../qt4/app.py:127 ../../qt4/app.py:982 +msgid "Changelog" +msgstr "" + +#: ../../qt4/app.py:129 msgid "FAQ" msgstr "" -#: ../../gnome/app.py:193 ../../kde4/app.py:150 +#: ../../qt4/app.py:131 msgid "Ask a question" msgstr "" -#: ../../gnome/app.py:194 ../../kde4/app.py:152 +#: ../../qt4/app.py:133 msgid "Report a bug" msgstr "" -#: ../../gnome/app.py:196 ../../kde4/app.py:155 +#: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "Apie" -#: ../../gnome/app.py:202 ../../gnome/app.py:887 -#: ../../gnome/restoredialog.py:84 ../../gnome/snapshotsdialog.py:83 -#: ../../gnome/snapshotsdialog.py:244 ../../kde4/app.py:206 -#: ../../kde4/app.py:216 ../../kde4/restoredialog.py:68 -#: ../../kde4/snapshotsdialog.py:111 ../../kde4/snapshotsdialog.py:117 -#: ../../gnome/mainwindow.glade:350 ../../gnome/mainwindow.glade:352 -#: ../../gnome/snapshotsdialog.glade:169 ../../gnome/snapshotsdialog.glade:171 +#: ../../qt4/app.py:163 +msgid "Up" +msgstr "Aukštyn" + +#: ../../qt4/app.py:174 ../../qt4/settingsdialog.py:1776 +msgid "Show hidden files" +msgstr "Rodyti paslėptus failus" + +#: ../../qt4/app.py:184 ../../qt4/app.py:199 ../../qt4/app.py:233 +#: ../../qt4/restoredialog.py:62 ../../qt4/settingsdialog.py:1818 +#: ../../qt4/snapshotsdialog.py:134 ../../qt4/snapshotsdialog.py:139 msgid "Restore" msgstr "Atstatyti" -#: ../../gnome/app.py:203 ../../gnome/app.py:888 ../../gnome/gnometools.py:67 -#: ../../gnome/snapshotsdialog.py:84 ../../gnome/snapshotsdialog.py:245 -#: ../../kde4/app.py:208 ../../kde4/restoredialog.py:42 -#: ../../kde4/snapshotsdialog.py:113 +#: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 +#: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "" -#: ../../gnome/app.py:205 ../../gnome/app.py:896 ../../gnome/app.py:1146 -#: ../../kde4/app.py:1041 -#, python-format -msgid "Restore '%s'" +#: ../../qt4/app.py:194 +msgid "Restore and delete new files" msgstr "" -#: ../../gnome/app.py:207 ../../gnome/app.py:897 ../../gnome/app.py:1147 -#: ../../kde4/app.py:1042 +#: ../../qt4/app.py:201 #, python-format -msgid "Restore '%s' to ..." +msgid "" +"Restore selected file or folder.\n" +"If this button is grayed out this is most likely because \"%(now)s\" is " +"selected in left hand snapshots list." msgstr "" -#: ../../gnome/app.py:226 ../../kde4/app.py:235 +#: ../../qt4/app.py:206 ../../qt4/logviewdialog.py:67 +#: ../../qt4/qt4tools.py:160 ../../qt4/snapshotsdialog.py:96 +msgid "Snapshots" +msgstr "Momentinės kopijos" + +#: ../../qt4/app.py:213 +msgid "Snapshot" +msgstr "" + +#: ../../qt4/app.py:224 +msgid "View" +msgstr "" + +#: ../../qt4/app.py:277 msgid "Shortcuts" msgstr "Nuorodos" -#: ../../gnome/app.py:249 -msgid "Name" -msgstr "Pavadinimas" - -#: ../../gnome/app.py:260 -msgid "Size" -msgstr "Dydis" - -#: ../../gnome/app.py:267 -msgid "Date" -msgstr "Data" - -#: ../../gnome/app.py:286 ../../gnome/app.py:883 -#: ../../gnome/snapshotsdialog.py:116 ../../kde4/app.py:171 -#: ../../kde4/app.py:221 ../../kde4/snapshotsdialog.py:91 -#: ../../gnome/mainwindow.glade:366 ../../gnome/mainwindow.glade:368 -#: ../../gnome/snapshotsdialog.glade:8 -msgid "Snapshots" -msgstr "Momentinės kopijos" +#: ../../qt4/app.py:295 +msgid "" +"This folder doesn't exist\n" +"in the current selected snapshot!" +msgstr "" + +#: ../../qt4/app.py:359 +msgid "Add to Include" +msgstr "" -#: ../../gnome/app.py:348 ../../kde4/app.py:362 +#: ../../qt4/app.py:360 +msgid "Add to Exclude" +msgstr "" + +#: ../../qt4/app.py:416 +#, python-format +msgid "" +"%(appName)s is not configured. Would you like to restore a previous " +"configuration?" +msgstr "" + +#: ../../qt4/app.py:440 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it and then press OK" msgstr "" -#: ../../gnome/app.py:611 ../../kde4/app.py:590 -msgid "Done, no backup needed" -msgstr "Atlikta, atsarginė kopija nebūtina" +#: ../../qt4/app.py:473 +msgid "" +"If you close this window Back In Time will not be able to shutdown your " +"system when the snapshot has finished.\n" +"Do you really want to close?" +msgstr "" -#: ../../gnome/app.py:619 ../../kde4/app.py:598 +#: ../../qt4/app.py:667 ../../qt4/app.py:703 msgid "Working:" msgstr "Dirbu:" -#: ../../gnome/app.py:623 ../../kde4/app.py:602 +#: ../../qt4/app.py:695 +msgid "Done, no backup needed" +msgstr "Atlikta, atsarginė kopija nebūtina" + +#: ../../qt4/app.py:707 msgid "Error:" msgstr "Klaida:" -#: ../../gnome/app.py:636 ../../kde4/app.py:649 +#: ../../qt4/app.py:726 ../../qt4/qt4systrayicon.py:153 +msgid "Sent:" +msgstr "" + +#: ../../qt4/app.py:727 ../../qt4/qt4systrayicon.py:154 +msgid "Speed:" +msgstr "" + +#: ../../qt4/app.py:728 ../../qt4/qt4systrayicon.py:155 +msgid "ETA:" +msgstr "" + +#: ../../qt4/app.py:777 msgid "Global" msgstr "Globalus" -#: ../../gnome/app.py:637 ../../kde4/app.py:650 +#: ../../qt4/app.py:778 msgid "Root" msgstr "Root" -#: ../../gnome/app.py:638 ../../kde4/app.py:651 +#: ../../qt4/app.py:779 msgid "Home" msgstr "Pradžia" -#: ../../gnome/app.py:662 -msgid "Bookmarks" -msgstr "Žymės" - -#: ../../gnome/app.py:675 ../../kde4/app.py:662 +#: ../../qt4/app.py:794 msgid "Backup folders" msgstr "Atsarginių kopijų aplankai" -#: ../../gnome/app.py:701 ../../kde4/app.py:734 -msgid "Today" -msgstr "Šiandien" +#: ../../qt4/app.py:849 +msgid "This is NOT a snapshot but a live view of your local files" +msgstr "" -#: ../../gnome/app.py:705 ../../kde4/app.py:738 -msgid "Yesterday" -msgstr "Vakar" +#: ../../qt4/app.py:860 ../../qt4/app.py:1476 +#, python-format +msgid "Last check %s" +msgstr "" -#: ../../gnome/app.py:709 ../../kde4/app.py:742 -msgid "This week" -msgstr "Šią savaitę" +#: ../../qt4/app.py:928 +#, python-format +msgid "" +"Are you sure you want to remove the snapshot:\n" +"%s" +msgstr "" +"Ar jūs tikrai norite pašalinti momentinę kopiją:\n" +"%s" -#: ../../gnome/app.py:713 ../../kde4/app.py:746 -msgid "Last week" -msgstr "Praeitą savaitę" +#: ../../qt4/app.py:1004 +#, python-format +msgid "" +"Backup local files before overwriting or\n" +"removing with trailing '%(suffix)s'." +msgstr "" -#: ../../gnome/app.py:764 ../../kde4/app.py:398 +#: ../../qt4/app.py:1010 msgid "" -"If you close this window Back In Time will not be able to shutdown your " -"system when the snapshot has finished.\n" -"Do you really want to close?" +"Are you sure you want to remove all newer files in your original folder?" msgstr "" -#: ../../gnome/app.py:881 ../../gnome/snapshotsdialog.py:238 -msgid "Open" -msgstr "Atverti" +#: ../../qt4/app.py:1014 +msgid "" +"WARNING: deleting files in filesystem root could break your whole system!!!" +msgstr "" -#: ../../gnome/app.py:1056 ../../kde4/app.py:90 ../../kde4/app.py:805 -#: ../../gnome/mainwindow.glade:73 ../../gnome/mainwindow.glade:75 -msgid "Snapshot Name" -msgstr "Momentinės kopijos pavadinimas" +#: ../../qt4/app.py:1016 +msgid "Files to be restored:" +msgstr "" -#: ../../gnome/app.py:1075 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +#: ../../qt4/app.py:1031 +msgid "Do you really want to restore this files(s):" msgstr "" -"Ar jūs tikrai norite pašalinti momentinę kopiją:\n" -"%s" -#: ../../gnome/app.py:1123 ../../kde4/app.py:1010 +#: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "Momentinė kopija: %s" -#: ../../gnome/app.py:1124 ../../kde4/app.py:1011 +#: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "Žiūrėti momentinę kopiją, padarytą %s" -#: ../../gnome/app.py:1126 ../../kde4/app.py:1013 +#: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "Žiūrėti esamo disko turinį" -#: ../../gnome/logviewdialog.py:106 ../../gnome/settingsdialog.py:414 -#: ../../kde4/logviewdialog.py:83 ../../kde4/settingsdialog.py:590 -msgid "All" +#: ../../qt4/app.py:1268 +#, python-format +msgid "Restore '%s'" msgstr "" -#: ../../gnome/logviewdialog.py:107 ../../gnome/settingsdialog.py:412 -#: ../../kde4/logviewdialog.py:84 ../../kde4/settingsdialog.py:588 -msgid "Errors" -msgstr "Kaidos" - -#: ../../gnome/logviewdialog.py:112 ../../kde4/logviewdialog.py:89 -msgid "Changes" -msgstr "Pakeitimai" - -#: ../../gnome/logviewdialog.py:115 ../../kde4/logviewdialog.py:92 -msgid "Informations" -msgstr "Informacija" - -#: ../../gnome/settingsdialog.py:235 ../../kde4/settingsdialog.py:387 -msgid "Include files and folders" -msgstr "Įtraukti failus bei aplankus" - -#: ../../gnome/settingsdialog.py:264 -msgid "Exclude patterns, files or folders" +#: ../../qt4/app.py:1269 +#, python-format +msgid "Restore '%s' to ..." msgstr "" -#: ../../gnome/settingsdialog.py:411 ../../kde4/settingsdialog.py:587 -msgid "None" +#: ../../qt4/app.py:1270 +#, python-format +msgid "Restore '%s' and delete new files" msgstr "" -#: ../../gnome/settingsdialog.py:413 ../../kde4/settingsdialog.py:589 -msgid "Changes & Errors" -msgstr "Pakeitimai ir klaidos" - -#: ../../gnome/settingsdialog.py:458 -msgid "Snapshots folder" +#: ../../qt4/app.py:1368 ../../qt4/app.py:1385 +msgid "Authors" msgstr "" -#: ../../gnome/settingsdialog.py:466 ../../kde4/settingsdialog.py:1314 -msgid "Are you sure you want to change snapshots folder ?" +#: ../../qt4/app.py:1369 ../../qt4/app.py:1388 +msgid "Translations" msgstr "" -#: ../../gnome/settingsdialog.py:901 ../../kde4/settingsdialog.py:914 -msgid "" -"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " -"*/3 for periodic backups every 3 hours" +#: ../../qt4/app.py:1370 ../../qt4/app.py:1391 +msgid "License" msgstr "" -#: ../../gnome/settingsdialog.py:1141 ../../kde4/settingsdialog.py:653 -msgid "New profile" -msgstr "" - -#: ../../gnome/settingsdialog.py:1155 ../../kde4/settingsdialog.py:669 -msgid "Rename profile" +#: ../../qt4/logviewdialog.py:49 +msgid "Last Log View" msgstr "" -#: ../../gnome/settingsdialog.py:1167 ../../kde4/settingsdialog.py:683 -#, python-format -msgid "Are you sure you want to delete the profile \"%s\" ?" +#: ../../qt4/logviewdialog.py:51 +msgid "Snapshot Log View" msgstr "" -#: ../../gnome/settingsdialog.py:1173 ../../kde4/settingsdialog.py:1292 -msgid "Include folder" -msgstr "Įtraukti aplanką" - -#: ../../gnome/settingsdialog.py:1193 ../../kde4/settingsdialog.py:1278 -msgid "Include file" -msgstr "Įtraukti failą" - -#: ../../gnome/settingsdialog.py:1235 ../../kde4/settingsdialog.py:1241 -msgid "Exclude pattern" -msgstr "Išskirti šabloną" - -#: ../../gnome/settingsdialog.py:1240 ../../kde4/settingsdialog.py:1251 -msgid "Exclude patterns can't contain ':' char !" +#: ../../qt4/logviewdialog.py:59 ../../qt4/settingsdialog.py:59 +#: ../../qt4/settingsdialog.py:274 ../../qt4/settingsdialog.py:1899 +msgid "Profile:" msgstr "" -#: ../../gnome/settingsdialog.py:1246 ../../kde4/settingsdialog.py:1257 -msgid "Exclude file" -msgstr "Išskirti failą" - -#: ../../gnome/settingsdialog.py:1257 ../../kde4/settingsdialog.py:1261 -msgid "Exclude folder" -msgstr "Išskirti aplanką" +#: ../../qt4/logviewdialog.py:81 +msgid "Filter:" +msgstr "Filtras:" -#: ../../gnome/snapshotsdialog.py:240 -msgid "Jump to" +#: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 +msgid "All" msgstr "" -#: ../../gnome/snapshotsdialog.py:248 ../../kde4/snapshotsdialog.py:164 -msgid "Diff" -msgstr "Pasikeitimai" - -#: ../../gnome/snapshotsdialog.py:277 ../../kde4/snapshotsdialog.py:339 -msgid "You can't compare a snapshot to itself" -msgstr "Jūs negalite palyginti momentinės kopijos su ja pačia" - -#: ../../gnome/snapshotsdialog.py:284 ../../kde4/snapshotsdialog.py:346 -#, python-format -msgid "Command not found: %s" -msgstr "Komanda nerasta: %s" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 +#: ../../qt4/settingsdialog.py:657 +msgid "Errors" +msgstr "Kaidos" -#: ../../gnome/snapshotsdialog.py:307 ../../kde4/snapshotsdialog.py:367 -#, python-format -msgid "" -"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" -msgstr "" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 +msgid "Changes" +msgstr "Pakeitimai" -#: ../../gnome/snapshotsdialog.py:310 ../../kde4/snapshotsdialog.py:370 -#, python-format -msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" -msgstr "" +#: ../../qt4/logviewdialog.py:92 +msgid "Informations" +msgstr "Informacija" -#: ../../gnome/snapshotsdialog.py:312 ../../kde4/snapshotsdialog.py:372 -msgid "WARNING: This can not be revoked!" +#: ../../qt4/logviewdialog.py:101 +msgid "[E] Error, [I] Information, [C] Change" msgstr "" -#: ../../gnome/snapshotsdialog.py:317 ../../kde4/snapshotsdialog.py:377 -#, python-format -msgid "Exclude \"%s\" from future snapshots?" +#: ../../qt4/logviewdialog.py:104 +msgid "decode paths" msgstr "" -#: ../../kde4/app.py:86 ../../gnome/mainwindow.glade:58 -#: ../../gnome/mainwindow.glade:60 -msgid "Refresh snapshots list" +#: ../../qt4/messagebox.py:56 +msgid "Error" msgstr "" -#: ../../kde4/app.py:94 ../../gnome/mainwindow.glade:88 -#: ../../gnome/mainwindow.glade:90 -msgid "Remove Snapshot" -msgstr "Pašalinti momentines kopijas" - -#: ../../kde4/app.py:98 ../../gnome/mainwindow.glade:105 -msgid "View Snapshot Log" +#: ../../qt4/messagebox.py:62 ../../qt4/messagebox.py:68 +msgid "Question" msgstr "" -#: ../../kde4/app.py:102 ../../gnome/mainwindow.glade:121 -msgid "View Last Log" +#: ../../qt4/qt4systrayicon.py:69 +msgid "Start BackInTime" msgstr "" -#: ../../kde4/app.py:108 ../../kde4/settingsdialog.py:69 -#: ../../gnome/mainwindow.glade:144 ../../gnome/mainwindow.glade:146 -#: ../../gnome/settingsdialog.glade:7 -msgid "Settings" -msgstr "Nustatymai" - -#: ../../kde4/app.py:124 ../../gnome/mainwindow.glade:169 -msgid "Shutdown system after snapshot has finished." -msgstr "" +#: ../../qt4/qt4systrayicon.py:124 +msgid "Working..." +msgstr "Dirbama..." -#: ../../kde4/app.py:131 ../../gnome/mainwindow.glade:184 -#: ../../gnome/mainwindow.glade:186 -msgid "Exit" -msgstr "Baigti" +#: ../../qt4/qt4tools.py:178 +msgid "Today" +msgstr "Šiandien" -#: ../../kde4/app.py:186 ../../gnome/mainwindow.glade:289 -msgid "Up" -msgstr "Aukštyn" +#: ../../qt4/qt4tools.py:183 +msgid "Yesterday" +msgstr "Vakar" -#: ../../kde4/app.py:199 ../../gnome/mainwindow.glade:325 -msgid "Show hidden files" -msgstr "Rodyti paslėptus failus" +#: ../../qt4/qt4tools.py:188 +msgid "This week" +msgstr "Šią savaitę" -#: ../../kde4/app.py:244 -msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" -msgstr "" +#: ../../qt4/qt4tools.py:193 +msgid "Last week" +msgstr "Praeitą savaitę" -#: ../../kde4/app.py:839 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +#: ../../qt4/restoredialog.py:75 +msgid "Show full Log" msgstr "" -"Ar jūs tikrai norite pašalinti momentinę kopiją:\n" -"%s" -#: ../../kde4/app.py:1140 ../../kde4/kde4systrayicon.py:117 -msgid "Working..." -msgstr "Dirbama..." +#: ../../qt4/settingsdialog.py:68 +msgid "Edit" +msgstr "Keisti" -#: ../../kde4/logviewdialog.py:55 -msgid "Error Log View" -msgstr "Klaidų žurnalo peržiūra" - -#: ../../kde4/logviewdialog.py:65 ../../kde4/settingsdialog.py:79 -#: ../../kde4/settingsdialog.py:293 ../../gnome/logviewdialog.glade:73 -#: ../../gnome/settingsdialog.glade:72 -msgid "Profile:" +#: ../../qt4/settingsdialog.py:73 +msgid "Modify for Full System Backup" msgstr "" -#: ../../kde4/logviewdialog.py:77 ../../gnome/logviewdialog.glade:110 -msgid "Filter:" -msgstr "Filtras:" - -#: ../../kde4/logviewdialog.py:100 ../../gnome/logviewdialog.glade:169 -msgid "[E] Error, [I] Information, [C] Change" +#: ../../qt4/settingsdialog.py:77 ../../qt4/settingsdialog.py:451 +msgid "Add" msgstr "" -#: ../../kde4/logviewdialog.py:103 ../../gnome/logviewdialog.glade:195 -msgid "decode paths" +#: ../../qt4/settingsdialog.py:81 ../../qt4/settingsdialog.py:408 +#: ../../qt4/settingsdialog.py:467 +msgid "Remove" msgstr "" -#: ../../kde4/settingsdialog.py:88 -msgid "Edit" -msgstr "Keisti" - -#: ../../kde4/settingsdialog.py:106 ../../gnome/settingsdialog.glade:1207 +#: ../../qt4/settingsdialog.py:96 msgid "General" msgstr "Bendri" -#: ../../kde4/settingsdialog.py:114 ../../gnome/settingsdialog.glade:199 +#: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "" -#: ../../kde4/settingsdialog.py:127 ../../kde4/settingsdialog.py:1311 +#: ../../qt4/settingsdialog.py:119 +#, python-format +msgid "" +"Warning: %(app)s uses EncFS for encryption. A recent security audit " +"revealed several possible attack vectors for this. Please take a look at 'A " +"NOTE ON SECURITY' in 'man backintime'." +msgstr "" + +#: ../../qt4/settingsdialog.py:129 ../../qt4/settingsdialog.py:1568 msgid "Where to save snapshots" msgstr "Kur išsaugoti momentinę kopiją" -#: ../../kde4/settingsdialog.py:146 +#: ../../qt4/settingsdialog.py:145 +msgid "Folder" +msgstr "" + +#: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" -#: ../../kde4/settingsdialog.py:158 ../../kde4/settingsdialog.py:283 -#: ../../gnome/settingsdialog.glade:323 ../../gnome/settingsdialog.glade:583 -#: ../../gnome/settingsdialog.glade:874 +#: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "" -#: ../../kde4/settingsdialog.py:163 ../../gnome/settingsdialog.glade:350 -#: ../../gnome/settingsdialog.glade:610 +#: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "" -#: ../../kde4/settingsdialog.py:168 ../../kde4/settingsdialog.py:288 -#: ../../gnome/settingsdialog.glade:377 ../../gnome/settingsdialog.glade:637 -#: ../../gnome/settingsdialog.glade:902 +#: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "Naudotojas:" -#: ../../kde4/settingsdialog.py:173 ../../gnome/settingsdialog.glade:416 +#: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" -#: ../../kde4/settingsdialog.py:178 ../../gnome/settingsdialog.glade:459 +#: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" -#: ../../kde4/settingsdialog.py:184 +#: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "" -#: ../../kde4/settingsdialog.py:228 ../../kde4/settingsdialog.py:237 -#: ../../kde4/settingsdialog.py:243 ../../gnome/settingsdialog.glade:703 -#: ../../gnome/settingsdialog.glade:743 +#: ../../qt4/settingsdialog.py:201 +msgid "Key File" +msgstr "" + +#: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 +#: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "" -#: ../../kde4/settingsdialog.py:249 ../../gnome/settingsdialog.glade:775 +#: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" -#: ../../kde4/settingsdialog.py:252 ../../gnome/settingsdialog.glade:792 +#: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" -#: ../../kde4/settingsdialog.py:264 ../../gnome/settingsdialog.glade:968 +#: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "" -#: ../../kde4/settingsdialog.py:276 ../../gnome/settingsdialog.glade:848 -msgid "Auto Host / User / Profile Id" +#: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 +msgid "Full snapshot path: " msgstr "" -#: ../../kde4/settingsdialog.py:301 +#: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "Tvarkaraštis" -#: ../../kde4/settingsdialog.py:311 ../../gnome/settingsdialog.glade:1092 +#: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "" -#: ../../kde4/settingsdialog.py:322 ../../gnome/settingsdialog.glade:1079 +#: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "" -#: ../../kde4/settingsdialog.py:333 ../../gnome/settingsdialog.glade:1066 +#: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "Valanda:" -#: ../../kde4/settingsdialog.py:344 ../../gnome/settingsdialog.glade:1053 +#: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "" -#: ../../kde4/settingsdialog.py:353 ../../gnome/settingsdialog.glade:1014 +#: ../../qt4/settingsdialog.py:339 msgid "" -"Run Back In Time periodically with anacron. This is useful if the computer " -"is not running regular." +"Run Back In Time repeatedly. This is useful if the computer is not running " +"regular." msgstr "" -#: ../../kde4/settingsdialog.py:357 ../../gnome/settingsdialog.glade:1040 -msgid "Frequency in days:" +#: ../../qt4/settingsdialog.py:344 +msgid "Every:" msgstr "" -#: ../../kde4/settingsdialog.py:368 ../../gnome/settingsdialog.glade:1026 +#: ../../qt4/settingsdialog.py:362 msgid "" "Run Back In Time as soon as the drive is connected (only once every X " "days).\n" "You will be prompted for your sudo password." msgstr "" -#: ../../kde4/settingsdialog.py:379 ../../gnome/settingsdialog.glade:1310 +#: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Įtraukti" -#: ../../kde4/settingsdialog.py:403 ../../kde4/settingsdialog.py:445 -#: ../../gnome/settingsdialog.glade:1411 +#: ../../qt4/settingsdialog.py:381 +msgid "Include files and folders" +msgstr "Įtraukti failus bei aplankus" + +#: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "Pridėti failą" -#: ../../kde4/settingsdialog.py:408 ../../kde4/settingsdialog.py:450 -#: ../../gnome/settingsdialog.glade:1427 +#: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Pridėti aplanką" -#: ../../kde4/settingsdialog.py:418 ../../gnome/settingsdialog.glade:1474 +#: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Išskirti" -#: ../../kde4/settingsdialog.py:421 ../../gnome/settingsdialog.glade:1328 +#: ../../qt4/settingsdialog.py:417 msgid "" "Warning: Wildcards ('foo*', '[fF]oo', 'fo?') will be ignored with " "mode 'SSH encrypted'.\n" "Only separate asterisk are allowed ('foo/*', 'foo/**/bar')" msgstr "" -#: ../../kde4/settingsdialog.py:430 +#: ../../qt4/settingsdialog.py:425 +msgid "Exclude patterns, files or folders" +msgstr "" + +#: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "" -#: ../../kde4/settingsdialog.py:460 ../../gnome/settingsdialog.glade:1905 +#: ../../qt4/settingsdialog.py:463 +msgid "Add default" +msgstr "" + +#: ../../qt4/settingsdialog.py:474 +msgid "Exclude files bigger than: " +msgstr "" + +#: ../../qt4/settingsdialog.py:475 +#, python-format +msgid "" +"Exclude files bigger than value in %(prefix)s.\n" +"With 'Full rsync mode' disabled this will only affect new files\n" +"because for rsync this is a transfer option, not an exclude option.\n" +"So big files that has been backed up before will remain in snapshots\n" +"even if they had changed." +msgstr "" + +#: ../../qt4/settingsdialog.py:493 msgid "Auto-remove" msgstr "Pašalinti automatiškai" -#: ../../kde4/settingsdialog.py:464 ../../gnome/settingsdialog.glade:1608 +#: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "Senesni nei:" -#: ../../kde4/settingsdialog.py:478 ../../gnome/settingsdialog.glade:1624 +#: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "Jei laisvos vietos mažiau nei:" -#: ../../kde4/settingsdialog.py:490 ../../gnome/settingsdialog.glade:1642 +#: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" -#: ../../kde4/settingsdialog.py:514 ../../gnome/settingsdialog.glade:1697 +#: ../../qt4/settingsdialog.py:551 +msgid "Run in background on remote Host." +msgstr "" + +#: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "" -#: ../../kde4/settingsdialog.py:517 ../../kde4/settingsdialog.py:522 -#: ../../gnome/settingsdialog.glade:1705 ../../gnome/settingsdialog.glade:1729 +#: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "" -#: ../../kde4/settingsdialog.py:519 ../../gnome/settingsdialog.glade:1717 +#: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "" -#: ../../kde4/settingsdialog.py:524 ../../gnome/settingsdialog.glade:1743 +#: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "" -#: ../../kde4/settingsdialog.py:527 +#: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "" -#: ../../kde4/settingsdialog.py:529 ../../gnome/settingsdialog.glade:1769 +#: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "" -#: ../../kde4/settingsdialog.py:532 ../../gnome/settingsdialog.glade:1781 +#: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "" -#: ../../kde4/settingsdialog.py:534 ../../gnome/settingsdialog.glade:1795 +#: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "" -#: ../../kde4/settingsdialog.py:537 ../../gnome/settingsdialog.glade:1496 +#: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "Nešalinti momentinių kopijų, turinčių pavadinimus" -#: ../../kde4/settingsdialog.py:546 ../../gnome/settingsdialog.glade:2104 +#: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Parinktys" -#: ../../kde4/settingsdialog.py:549 ../../gnome/settingsdialog.glade:1920 +#: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Įgalinti pranešimus" -#: ../../kde4/settingsdialog.py:552 ../../gnome/settingsdialog.glade:1937 +#: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "" -#: ../../kde4/settingsdialog.py:555 +#: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" msgstr "" -#: ../../kde4/settingsdialog.py:558 ../../gnome/settingsdialog.glade:1955 -msgid "Backup files on restore" +#: ../../qt4/settingsdialog.py:611 +msgid "Run only one snapshot at a time" +msgstr "" + +#: ../../qt4/settingsdialog.py:612 +msgid "" +"Other snapshots will be blocked until the current snapshot is done.\n" +"This is a global option. So it will effect all profiles for this user.\n" +"But you need to activate this for all other users, too." +msgstr "" + +#: ../../qt4/settingsdialog.py:617 +msgid "Backup replaced files on restore" +msgstr "" + +#: ../../qt4/settingsdialog.py:618 +#, python-format +msgid "" +"Newer versions of files will be renamed with trailing '%(suffix)s' before " +"restoring.\n" +"If you don't need them anymore you can remove them with '%(cmd)s'" msgstr "" -#: ../../kde4/settingsdialog.py:561 ../../gnome/settingsdialog.glade:1972 +#: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "" -#: ../../kde4/settingsdialog.py:564 ../../gnome/settingsdialog.glade:1989 +#: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "Pasikeitimų aptikimui naudoti kontrolines sumas" -#: ../../kde4/settingsdialog.py:567 ../../gnome/settingsdialog.glade:2006 +#: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "" -#: ../../kde4/settingsdialog.py:568 ../../gnome/settingsdialog.glade:2032 +#: ../../qt4/settingsdialog.py:634 msgid "" -"- snapshots are no read-only\n" -"- destination file-system must support all linux attributes (dates, rights, " +"- snapshots are not read-only\n" +"- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" -#: ../../kde4/settingsdialog.py:575 ../../gnome/settingsdialog.glade:2045 +#: ../../qt4/settingsdialog.py:641 +msgid "Take a new snapshot regardless of there were changes or not." +msgstr "" + +#: ../../qt4/settingsdialog.py:644 msgid "Check for changes (don't take a new snapshot if nothing changed)" msgstr "" -#: ../../kde4/settingsdialog.py:582 +#: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "" -#: ../../kde4/settingsdialog.py:597 ../../gnome/settingsdialog.glade:2366 -msgid "Expert Options" -msgstr "Parinktys ekspertams" +#: ../../qt4/settingsdialog.py:656 +msgid "None" +msgstr "" + +#: ../../qt4/settingsdialog.py:658 +msgid "Changes & Errors" +msgstr "Pakeitimai ir klaidos" -#: ../../kde4/settingsdialog.py:600 +#: ../../qt4/settingsdialog.py:674 msgid "Change these options only if you really know what you are doing !" msgstr "" -#: ../../kde4/settingsdialog.py:608 ../../gnome/settingsdialog.glade:2133 -msgid "Run 'nice' as cron job (default: enabled)" +#: ../../qt4/settingsdialog.py:678 +msgid "Run 'nice':" +msgstr "" + +#: ../../qt4/settingsdialog.py:684 ../../qt4/settingsdialog.py:696 +msgid "as cron job" +msgstr "" + +#: ../../qt4/settingsdialog.py:687 ../../qt4/settingsdialog.py:702 +#: ../../qt4/settingsdialog.py:716 +msgid "on remote host" msgstr "" -#: ../../kde4/settingsdialog.py:611 ../../gnome/settingsdialog.glade:2150 -msgid "Run 'ionice' as cron job (default: enabled)" +#: ../../qt4/settingsdialog.py:690 +msgid "Run 'ionice':" msgstr "" -#: ../../kde4/settingsdialog.py:614 ../../gnome/settingsdialog.glade:2167 -msgid "Run 'ionice' when taking a manual snapshot (default: disabled)" +#: ../../qt4/settingsdialog.py:699 +msgid "when taking a manual snapshot" msgstr "" -#: ../../kde4/settingsdialog.py:617 ../../gnome/settingsdialog.glade:2184 -msgid "Run 'nice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:706 +msgid "Run 'rsync' with 'nocache':" msgstr "" -#: ../../kde4/settingsdialog.py:620 ../../gnome/settingsdialog.glade:2201 -msgid "Run 'ionice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:712 +msgid "on local machine" msgstr "" -#: ../../kde4/settingsdialog.py:626 ../../gnome/settingsdialog.glade:2224 +#: ../../qt4/settingsdialog.py:719 +msgid "Redirect stdout to /dev/null in cronjobs." +msgstr "" + +#: ../../qt4/settingsdialog.py:725 +msgid "Redirect stderr to /dev/null in cronjobs." +msgstr "" + +#: ../../qt4/settingsdialog.py:734 msgid "Limit rsync bandwidth usage: " msgstr "" -#: ../../kde4/settingsdialog.py:629 ../../gnome/settingsdialog.glade:2259 +#: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" -#: ../../kde4/settingsdialog.py:634 ../../gnome/settingsdialog.glade:2280 +#: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "" -#: ../../kde4/settingsdialog.py:637 ../../gnome/settingsdialog.glade:2297 +#: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "" -#: ../../kde4/settingsdialog.py:640 ../../gnome/settingsdialog.glade:2314 +#: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute links)" msgstr "" -#: ../../kde4/settingsdialog.py:643 ../../gnome/settingsdialog.glade:2331 -msgid "Copy links (dereference symbolic links)" +#: ../../qt4/settingsdialog.py:834 +msgid "Paste additional options to rsync" msgstr "" -#: ../../kde4/snapshotsdialog.py:46 ../../kde4/snapshotsdialog.py:173 -#: ../../gnome/snapshotsdialog.glade:385 -msgid "Diff Options" -msgstr "Pasikeitimų parinktys" - -#: ../../kde4/snapshotsdialog.py:56 ../../gnome/snapshotsdialog.glade:314 -msgid "Command:" -msgstr "Komanda:" - -#: ../../kde4/snapshotsdialog.py:60 ../../gnome/snapshotsdialog.glade:322 -msgid "Parameters:" -msgstr "Parametrai:" - -#: ../../kde4/snapshotsdialog.py:64 ../../gnome/snapshotsdialog.glade:334 -msgid "Use %1 and %2 for path parameters" -msgstr "naudoti %1 ir %2 kaip kelio parametrus" +#: ../../qt4/settingsdialog.py:837 +msgid "" +"Options must be quoted e.g. --exclude-from=\"/path/to/my exclude file\"." +msgstr "" -#: ../../kde4/snapshotsdialog.py:123 ../../gnome/snapshotsdialog.glade:184 -#: ../../gnome/snapshotsdialog.glade:186 -msgid "Delete" +#: ../../qt4/settingsdialog.py:847 +msgid "Add prefix to SSH commands" msgstr "" -#: ../../kde4/snapshotsdialog.py:128 ../../gnome/snapshotsdialog.glade:199 -#: ../../gnome/snapshotsdialog.glade:201 -msgid "Select All" +#: ../../qt4/settingsdialog.py:850 +#, python-format +msgid "" +"Prefix to run before every command on remote host.\n" +"Variables need to be escaped with \\$FOO.\n" +"This doesn't touch rsync. So to add a prefix\n" +"for rsync use \"%(cb_rsync_options)s\" with\n" +"%(rsync_options_value)s\n" +"\n" +"%(default)s: %(def_value)s" msgstr "" -#: ../../kde4/snapshotsdialog.py:132 ../../gnome/snapshotsdialog.glade:88 -msgid "List only different snapshots" +#: ../../qt4/settingsdialog.py:858 ../../qt4/settingsdialog.py:1691 +msgid "default" msgstr "" -#: ../../kde4/snapshotsdialog.py:139 ../../gnome/snapshotsdialog.glade:110 -msgid "List only equal snapshots to: " +#: ../../qt4/settingsdialog.py:875 +msgid "Restore Config" msgstr "" -#: ../../kde4/snapshotsdialog.py:149 ../../gnome/snapshotsdialog.glade:146 -msgid "Deep check (more accurate, but slow)" +#: ../../qt4/settingsdialog.py:891 +msgid "" +"Full system backup can only create a snapshot to be restored to the same " +"physical disk(s) with the same disk partitioning as from the source; " +"restoring to new physical disks or the same disks with different " +"partitioning will yield a potentially broken and unusable system.\n" +"\n" +"Full system backup will override some settings that may have been " +"customized. Continue?" msgstr "" -#: ../../kde4/snapshotsdialog.py:174 -msgid "Go To" -msgstr "Eiti į" +#: ../../qt4/settingsdialog.py:922 +msgid "New profile" +msgstr "" -#: ../../gnome/logviewdialog.glade:9 -msgid "Log View" +#: ../../qt4/settingsdialog.py:938 +msgid "Rename profile" msgstr "" -#: ../../gnome/logviewdialog.glade:179 -msgid "scroll down automatic" +#: ../../qt4/settingsdialog.py:952 +#, python-format +msgid "Are you sure you want to delete the profile \"%s\" ?" msgstr "" -#: ../../gnome/mainwindow.glade:7 -msgid "Back In Time" -msgstr "Back In Time" +#: ../../qt4/settingsdialog.py:1191 +msgid "" +"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " +"*/3 for periodic backups every 3 hours" +msgstr "" -#: ../../gnome/mainwindow.glade:45 -msgid "Backup Now" -msgstr "Daryti kopiją dabar" +#: ../../qt4/settingsdialog.py:1489 +msgid "Exclude pattern" +msgstr "Išskirti šabloną" -#: ../../gnome/mainwindow.glade:171 -msgid "Shutdown" -msgstr "" +#: ../../qt4/settingsdialog.py:1502 +msgid "Exclude file" +msgstr "Išskirti failą" -#: ../../gnome/mainwindow.glade:287 -msgid "Parent folder" -msgstr "" +#: ../../qt4/settingsdialog.py:1506 +msgid "Exclude folder" +msgstr "Išskirti aplanką" -#: ../../gnome/mainwindow.glade:327 -msgid "Hidden files" -msgstr "Paslėpti failai" +#: ../../qt4/settingsdialog.py:1525 +msgid "Include file" +msgstr "Įtraukti failą" -#: ../../gnome/mainwindow.glade:451 +#: ../../qt4/settingsdialog.py:1533 ../../qt4/settingsdialog.py:1553 +#, python-format msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +"\"%s\" is a symlink. The linked target will not be backed up until you " +"include it, too.\n" +"Would you like to include the symlinks target instead?" msgstr "" -#: ../../gnome/settingsdialog.glade:287 -msgid "Where to save snapshots" -msgstr "Kur išsaugoti momentines kopijas" +#: ../../qt4/settingsdialog.py:1545 +msgid "Include folder" +msgstr "Įtraukti aplanką" -#: ../../gnome/settingsdialog.glade:483 -msgid "Private key:" +#: ../../qt4/settingsdialog.py:1572 +msgid "Are you sure you want to change snapshots folder ?" msgstr "" -#: ../../gnome/settingsdialog.glade:534 -msgid "Advanced SSH Settings" +#: ../../qt4/settingsdialog.py:1688 +msgid "enabled" msgstr "" -#: ../../gnome/settingsdialog.glade:552 -msgid "SSH Settings" +#: ../../qt4/settingsdialog.py:1690 +msgid "disabled" msgstr "" -#: ../../gnome/settingsdialog.glade:815 -msgid "Password" +#: ../../qt4/settingsdialog.py:1715 +msgid "Restore Settings" msgstr "" -#: ../../gnome/settingsdialog.glade:930 -msgid "Profile Id:" +#: ../../qt4/settingsdialog.py:1732 +msgid " and add your user to group 'fuse'" msgstr "" -#: ../../gnome/settingsdialog.glade:1115 +#: ../../qt4/settingsdialog.py:1736 +#, python-format msgid "" -"hours seperate by comma ( e.g. 8,12,18,23) or */3 for periodic backups every " -"3 hours (cron style)" +"Please navigate to the snapshot from which you want to restore %(appName)s's " +"configuration. The path may look like: \n" +"%(samplePath)s\n" +"\n" +"If your snapshots are on a remote drive or if they are encrypted you need to " +"manually mount them first. If you use Mode SSH you also may need to set up " +"public key login to the remote host%(addFuse)s.\n" +"Take a look at 'man backintime'." +msgstr "" + +#: ../../qt4/settingsdialog.py:1794 ../../qt4/settingsdialog.py:1854 +msgid "No config found" msgstr "" -#: ../../gnome/settingsdialog.glade:1163 -msgid "Schedule" -msgstr "Tvarkaraštis" +#: ../../qt4/snapshotsdialog.py:49 ../../qt4/snapshotsdialog.py:173 +msgid "Diff Options" +msgstr "Pasikeitimų parinktys" -#: ../../gnome/settingsdialog.glade:1363 -msgid "Highly recommended:" +#: ../../qt4/snapshotsdialog.py:56 +msgid "Command:" +msgstr "Komanda:" + +#: ../../qt4/snapshotsdialog.py:60 +msgid "Parameters:" +msgstr "Parametrai:" + +#: ../../qt4/snapshotsdialog.py:64 +msgid "Use %1 and %2 for path parameters" +msgstr "naudoti %1 ir %2 kaip kelio parametrus" + +#: ../../qt4/snapshotsdialog.py:106 +msgid "List only different snapshots" +msgstr "" + +#: ../../qt4/snapshotsdialog.py:113 +msgid "List only equal snapshots to: " msgstr "" -#: ../../gnome/settingsdialog.glade:1377 -msgid "label" +#: ../../qt4/snapshotsdialog.py:123 +msgid "Deep check (more accurate, but slow)" msgstr "" -#: ../../gnome/settingsdialog.glade:1755 -msgid "week(s)" +#: ../../qt4/snapshotsdialog.py:144 +msgid "Delete" msgstr "" -#: ../../gnome/settingsdialog.glade:2069 -msgid "Log level:" +#: ../../qt4/snapshotsdialog.py:148 +msgid "Select All" msgstr "" -#: ../../gnome/settingsdialog.glade:2121 +#: ../../qt4/snapshotsdialog.py:161 +msgid "Diff" +msgstr "Pasikeitimai" + +#: ../../qt4/snapshotsdialog.py:172 +msgid "Go To" +msgstr "Eiti į" + +#: ../../qt4/snapshotsdialog.py:326 +msgid "You can't compare a snapshot to itself" +msgstr "Jūs negalite palyginti momentinės kopijos su ja pačia" + +#: ../../qt4/snapshotsdialog.py:333 +#, python-format +msgid "Command not found: %s" +msgstr "Komanda nerasta: %s" + +#: ../../qt4/snapshotsdialog.py:354 +#, python-format msgid "" -"Change these options only if you really know what you are doing !" +"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" msgstr "" -#: ../../gnome/snapshotsdialog.glade:263 -msgid "Diff with" -msgstr "Lyginti su" +#: ../../qt4/snapshotsdialog.py:357 +#, python-format +msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +msgstr "" -#: ../../gnome/textinputdialog.glade:7 -msgid "Pattern" -msgstr "Šablonas" +#: ../../qt4/snapshotsdialog.py:359 +msgid "WARNING: This can not be revoked!" +msgstr "" -#: ../../gnome/textinputdialog.glade:70 -msgid "Text" +#: ../../qt4/snapshotsdialog.py:374 +#, python-format +msgid "Exclude \"%s\" from future snapshots?" msgstr "" diff -Nru backintime-1.0.36/common/po/messages.pot backintime-1.1.12/common/po/messages.pot --- backintime-1.0.36/common/po/messages.pot 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/po/messages.pot 2016-01-11 18:07:58.000000000 +0000 @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-11-09 22:34+0100\n" +"POT-Creation-Date: 2015-12-19 00:47+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,251 +18,292 @@ "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" -#: ../../common/config.py:72 +#: ../../common/configfile.py:60 +#, python-format +msgid "Failed to save config: %s" +msgstr "" + +#: ../../common/configfile.py:78 +#, python-format +msgid "Failed to load config: %s" +msgstr "" + +#: ../../common/configfile.py:352 ../../common/configfile.py:414 +#, python-format +msgid "Profile \"%s\" already exists !" +msgstr "" + +#: ../../common/configfile.py:383 +msgid "You can't remove the last profile !" +msgstr "" + +#: ../../common/config.py:76 msgid "Disabled" msgstr "" -#: ../../common/config.py:73 +#: ../../common/config.py:77 msgid "At every boot/reboot" msgstr "" -#: ../../common/config.py:74 +#: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "" -#: ../../common/config.py:75 +#: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "" -#: ../../common/config.py:76 +#: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "" -#: ../../common/config.py:77 +#: ../../common/config.py:81 msgid "Every hour" msgstr "" -#: ../../common/config.py:78 +#: ../../common/config.py:82 msgid "Every 2 hours" msgstr "" -#: ../../common/config.py:79 +#: ../../common/config.py:83 msgid "Every 4 hours" msgstr "" -#: ../../common/config.py:80 +#: ../../common/config.py:84 msgid "Every 6 hours" msgstr "" -#: ../../common/config.py:81 +#: ../../common/config.py:85 msgid "Every 12 hours" msgstr "" -#: ../../common/config.py:82 +#: ../../common/config.py:86 msgid "Custom Hours" msgstr "" -#: ../../common/config.py:83 +#: ../../common/config.py:87 msgid "Every Day" msgstr "" -#: ../../common/config.py:84 -msgid "Daily (anacron)" +#: ../../common/config.py:88 +msgid "Repeatedly (anacron)" msgstr "" -#: ../../common/config.py:85 +#: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "" -#: ../../common/config.py:86 +#: ../../common/config.py:90 msgid "Every Week" msgstr "" -#: ../../common/config.py:87 +#: ../../common/config.py:91 msgid "Every Month" msgstr "" -#: ../../common/config.py:91 +#: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "" -#: ../../common/config.py:92 +#: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "" -#: ../../common/config.py:93 +#: ../../common/config.py:97 msgid "Year(s)" msgstr "" -#: ../../common/config.py:100 +#: ../../common/config.py:101 +msgid "Hour(s)" +msgstr "" + +#: ../../common/config.py:104 +msgid "Month(s)" +msgstr "" + +#: ../../common/config.py:126 ../../qt4/settingsdialog.py:551 msgid " EXPERIMENTAL!" msgstr "" -#: ../../common/config.py:103 +#: ../../common/config.py:129 msgid "Local" msgstr "" -#: ../../common/config.py:104 +#: ../../common/config.py:130 msgid "SSH" msgstr "" -#: ../../common/config.py:104 ../../common/config.py:106 -#: ../../gnome/settingsdialog.py:475 ../../kde4/settingsdialog.py:1325 +#: ../../common/config.py:130 ../../common/config.py:132 +#: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "" -#: ../../common/config.py:105 +#: ../../common/config.py:131 msgid "Local encrypted" msgstr "" -#: ../../common/config.py:105 ../../common/config.py:106 +#: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "" -#: ../../common/config.py:106 +#: ../../common/config.py:132 msgid "SSH encrypted" msgstr "" -#: ../../common/config.py:112 +#: ../../common/config.py:135 msgid "Default" msgstr "" -#: ../../common/config.py:113 +#: ../../common/config.py:136 msgid "AES128-CTR" msgstr "" -#: ../../common/config.py:114 +#: ../../common/config.py:137 msgid "AES192-CTR" msgstr "" -#: ../../common/config.py:115 +#: ../../common/config.py:138 msgid "AES256-CTR" msgstr "" -#: ../../common/config.py:116 +#: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "" -#: ../../common/config.py:117 +#: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "" -#: ../../common/config.py:118 +#: ../../common/config.py:141 msgid "AES128-CBC" msgstr "" -#: ../../common/config.py:119 +#: ../../common/config.py:142 msgid "3DES-CBC" msgstr "" -#: ../../common/config.py:120 +#: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "" -#: ../../common/config.py:121 +#: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "" -#: ../../common/config.py:122 +#: ../../common/config.py:145 msgid "AES192-CBC" msgstr "" -#: ../../common/config.py:123 +#: ../../common/config.py:146 msgid "AES256-CBC" msgstr "" -#: ../../common/config.py:124 +#: ../../common/config.py:147 msgid "ARCFOUR" msgstr "" -#: ../../common/config.py:129 +#: ../../common/config.py:153 msgid "Main profile" msgstr "" -#: ../../common/config.py:256 ../../common/config.py:275 -#: ../../common/config.py:286 ../../common/config.py:291 +#: ../../common/config.py:289 ../../common/config.py:296 +#: ../../common/config.py:307 ../../common/config.py:312 +#: ../../qt4/qt4systrayicon.py:61 #, python-format msgid "Profile: \"%s\"" msgstr "" -#: ../../common/config.py:256 +#: ../../common/config.py:289 msgid "Snapshots folder is not valid !" msgstr "" -#: ../../common/config.py:275 +#: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "" -#: ../../common/config.py:286 +#: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "" -#: ../../common/config.py:291 +#: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "" -#: ../../common/config.py:361 +#: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "" -#: ../../common/config.py:376 ../../common/config.py:389 +#: ../../common/config.py:380 +msgid "Host/User/Profile-ID must not be empty!" +msgstr "" + +#: ../../common/config.py:388 ../../common/config.py:420 #, python-format msgid "" "Can't write to: %s\n" "Are you sure you have write access ?" msgstr "" -#: ../../common/config.py:1286 +#: ../../common/config.py:400 +#, python-format msgid "" -"Can't find crontab.\n" -"Are you sure cron is installed ?\n" -"If not you should disable all automatic backups." +"Destination filesystem for '%(path)s' is formatted with FAT which doesn't " +"support hard-links. Please use a native Linux filesystem." msgstr "" -#: ../../common/config.py:1338 +#: ../../common/config.py:405 #, python-format -msgid "Schedule udev doesn't work with mode %s" +msgid "" +"Destination filsystem for '%(path)s' is a SMB mounted share. Please make " +"sure the remote SMB server supports symlinks or activate '%(copyLinks)s' in " +"'%(expertOptions)s'." msgstr "" -#: ../../common/config.py:1342 -#, python-format -msgid "Couldn't find UUID for \"%s\"" +#: ../../common/config.py:408 ../../qt4/settingsdialog.py:815 +msgid "Copy links (dereference symbolic links)" msgstr "" -#: ../../common/config.py:1379 -msgid "Failed to remove udev rules" +#: ../../common/config.py:409 ../../qt4/settingsdialog.py:669 +msgid "Expert Options" msgstr "" -#: ../../common/config.py:1385 -msgid "Failed to create udev rules" +#: ../../common/config.py:411 +#, python-format +msgid "" +"Destination filesystem for '%(path)s is a sshfs mounted share. sshfs doesn't " +"support hard-links. Please use mode 'SSH' instead." msgstr "" -#: ../../common/config.py:1420 +#: ../../common/config.py:1407 msgid "" -"Can't find anacron.\n" -"Are you sure anacron is installed ?\n" -"If not you should disable daily anacron backups." +"Can't find crontab.\n" +"Are you sure cron is installed ?\n" +"If not you should disable all automatic backups." msgstr "" -#: ../../common/config.py:1439 -msgid "Please provide your sudo password to install the udev rule." +#: ../../common/config.py:1411 +msgid "Failed to write new crontab." msgstr "" -#: ../../common/config.py:1445 -msgid "Please provide your sudo password to remove unused udev rules." +#: ../../common/config.py:1505 +#, python-format +msgid "" +"Could not install Udev rule for profile %(profile_id)s. DBus Service " +"'%(dbus_interface)s' wasn't available" msgstr "" -#: ../../common/configfile.py:253 ../../common/configfile.py:315 +#: ../../common/config.py:1517 #, python-format -msgid "Profile \"%s\" already exists !" +msgid "Schedule udev doesn't work with mode %s" msgstr "" -#: ../../common/configfile.py:284 -msgid "You can't remove the last profile !" +#: ../../common/config.py:1526 +#, python-format +msgid "Couldn't find UUID for \"%s\"" msgstr "" -#: ../../common/encfstools.py:95 +#: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" @@ -270,38 +311,38 @@ "%(error)s" msgstr "" -#: ../../common/encfstools.py:105 +#: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "" -#: ../../common/encfstools.py:149 +#: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "" -#: ../../common/encfstools.py:153 +#: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" -#: ../../common/encfstools.py:154 +#: ../../common/encfstools.py:171 msgid "Cancel" msgstr "" -#: ../../common/encfstools.py:157 +#: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "" -#: ../../common/encfstools.py:161 +#: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "" -#: ../../common/encfstools.py:166 +#: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" -#: ../../common/encfstools.py:174 ../../common/sshtools.py:207 +#: ../../common/encfstools.py:196 ../../common/sshtools.py:262 #, python-format msgid "" "%(user)s is not member of group 'fuse'.\n" @@ -309,70 +350,73 @@ "Look at 'man backintime' for further instructions." msgstr "" -#: ../../common/encfstools.py:189 +#: ../../common/encfstools.py:211 msgid "" "encfs version 1.7.2 and before has a bug with option --reverse. Please " "update encfs" msgstr "" -#: ../../common/encfstools.py:453 ../../common/encfstools.py:480 -#: ../../common/snapshots.py:982 ../../common/snapshots.py:1288 -#: ../../kde4/app.py:82 ../../gnome/mainwindow.glade:43 +#: ../../common/encfstools.py:512 ../../common/snapshots.py:1131 +#: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "" -#: ../../common/mount.py:195 +#: ../../common/mount.py:204 #, python-format msgid "" "Hash collision occurred in hash_id %s. Incrementing global value " "hash_collision and try again." msgstr "" -#: ../../common/mount.py:246 +#: ../../common/mount.py:259 #, python-format msgid "mountpoint %s not empty." msgstr "" -#: ../../common/mount.py:286 +#: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" -#: ../../common/password.py:425 +#: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" -#: ../../common/snapshots.py:171 ../../gnome/app.py:1127 -#: ../../kde4/app.py:1014 +#: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "" -#: ../../common/snapshots.py:182 ../../gnome/gnometools.py:37 +#: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "" -#: ../../common/snapshots.py:282 +#: ../../common/snapshots.py:344 msgid "" "### This log has been decoded with automatic search pattern\n" "### If some paths are not decoded you can manually decode them with:\n" msgstr "" -#: ../../common/snapshots.py:465 +#: ../../common/snapshots.py:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "" -#: ../../common/snapshots.py:564 +#: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "" -#: ../../common/snapshots.py:739 +#: ../../common/snapshots.py:752 ../../qt4/app.py:377 ../../qt4/app.py:675 +#: ../../qt4/app.py:692 ../../qt4/qt4systrayicon.py:65 +msgid "Done" +msgstr "" + +#: ../../common/snapshots.py:860 msgid "" "Back In Time changed its backup format.\n" "\n" "Your old snapshots can be moved according to this new format. OK?" msgstr "" -#: ../../common/snapshots.py:749 +#: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" @@ -383,13 +427,13 @@ "(The program will still be able to discriminate between them)" msgstr "" -#: ../../common/snapshots.py:752 +#: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" msgstr "" -#: ../../common/snapshots.py:803 +#: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" @@ -402,7 +446,7 @@ "cannot continue taking snapshots" msgstr "" -#: ../../common/snapshots.py:812 +#: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" @@ -412,14 +456,14 @@ "if you are done restart Back In Time to proceed" msgstr "" -#: ../../common/snapshots.py:825 +#: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" msgstr "" -#: ../../common/snapshots.py:830 +#: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" @@ -431,172 +475,183 @@ "If you do not, you will be asked again next time you start Back In Time." msgstr "" -#: ../../common/snapshots.py:839 +#: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "" -#: ../../common/snapshots.py:841 +#: ../../common/snapshots.py:953 msgid "" "Back In Time still cannot continue taking new snapshots.\n" "Restart Back In Time to see the questions again" msgstr "" -#: ../../common/snapshots.py:913 +#: ../../common/snapshots.py:972 +msgid "Deferring backup while on battery" +msgstr "" + +#: ../../common/snapshots.py:1035 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it." msgstr "" -#: ../../common/snapshots.py:915 +#: ../../common/snapshots.py:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "" msgstr[1] "" -#: ../../common/snapshots.py:941 +#: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "" -#: ../../common/snapshots.py:950 +#: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "" -#: ../../common/snapshots.py:1088 +#: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "" -#: ../../common/snapshots.py:1107 +#: ../../common/snapshots.py:1217 msgid "..." msgstr "" -#: ../../common/snapshots.py:1134 +#: ../../common/snapshots.py:1238 +#, python-format +msgid "Found leftover '%s' which can be continued." +msgstr "" + +#: ../../common/snapshots.py:1250 +#, python-format +msgid "Remove leftover '%s' folder from last run" +msgstr "" + +#: ../../common/snapshots.py:1263 #, python-format msgid "Can't remove folder: %s" msgstr "" -#: ../../common/snapshots.py:1219 +#: ../../common/snapshots.py:1340 #, python-format msgid "Compare with snapshot %s" msgstr "" -#: ../../common/snapshots.py:1248 +#: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "" -#: ../../common/snapshots.py:1335 +#: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "" -#: ../../common/snapshots.py:1341 +#: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "" -#: ../../common/snapshots.py:1442 +#: ../../common/snapshots.py:1470 +msgid "Save permission over ssh failed. Retry normal method" +msgstr "" + +#: ../../common/snapshots.py:1521 #, python-format msgid "Can't rename %(new_path)s to %(path)s" msgstr "" -#: ../../common/snapshots.py:1562 -msgid "Remove old snapshots" +#: ../../common/snapshots.py:1695 ../../common/snapshots.py:1728 +#: ../../qt4/settingsdialog.py:542 +msgid "Smart remove" msgstr "" -#: ../../common/snapshots.py:1586 ../../kde4/settingsdialog.py:501 -#: ../../gnome/settingsdialog.glade:1660 -msgid "Smart remove" +#: ../../common/snapshots.py:1704 +msgid "Remove old snapshots" msgstr "" -#: ../../common/snapshots.py:1591 +#: ../../common/snapshots.py:1733 msgid "Try to keep min free space" msgstr "" -#: ../../common/snapshots.py:1621 +#: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" -#: ../../common/sshtools.py:106 +#: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "" -#: ../../common/sshtools.py:113 +#: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "" -#: ../../common/sshtools.py:187 -#, python-format -msgid "" -"Failed to unlock SSH private key:\n" -"Error: %s" -msgstr "" - -#: ../../common/sshtools.py:194 +#: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" -#: ../../common/sshtools.py:199 +#: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" -#: ../../common/sshtools.py:217 +#: ../../common/sshtools.py:278 #, python-format msgid "" "Password-less authentication for %(user)s@%(host)s failed. Look at 'man " "backintime' for further instructions." msgstr "" -#: ../../common/sshtools.py:229 +#: ../../common/sshtools.py:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" -#: ../../common/sshtools.py:254 +#: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" -#: ../../common/sshtools.py:274 +#: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" -#: ../../common/sshtools.py:276 +#: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:278 +#: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:280 +#: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" -#: ../../common/sshtools.py:302 +#: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" -#: ../../common/sshtools.py:325 ../../common/sshtools.py:383 +#: ../../common/sshtools.py:423 ../../common/sshtools.py:553 #, python-format msgid "" "Remote host %(host)s doesn't support '%(command)s':\n" @@ -604,7 +659,7 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:387 +#: ../../common/sshtools.py:556 #, python-format msgid "" "Check commands on host %(host)s returned unknown error:\n" @@ -612,817 +667,937 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:400 +#: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "" -#: ../../gnome/app.py:185 ../../gnome/app.py:594 ../../gnome/app.py:608 -#: ../../kde4/app.py:299 ../../kde4/app.py:570 ../../kde4/app.py:587 -msgid "Done" +#: ../../qt4/app.py:81 +msgid "Refresh snapshots list" msgstr "" -#: ../../gnome/app.py:189 ../../kde4/app.py:143 ../../kde4/app.py:159 -#: ../../gnome/mainwindow.glade:225 -msgid "Help" +#: ../../qt4/app.py:85 ../../qt4/app.py:890 +msgid "Snapshot Name" msgstr "" -#: ../../gnome/app.py:191 ../../kde4/app.py:146 -#: ../../gnome/mainwindow.glade:223 -msgid "Website" +#: ../../qt4/app.py:88 +msgid "Remove Snapshot" msgstr "" -#: ../../gnome/app.py:192 ../../kde4/app.py:148 -msgid "FAQ" +#: ../../qt4/app.py:91 +msgid "View Snapshot Log" msgstr "" -#: ../../gnome/app.py:193 ../../kde4/app.py:150 -msgid "Ask a question" +#: ../../qt4/app.py:94 +msgid "View Last Log" msgstr "" -#: ../../gnome/app.py:194 ../../kde4/app.py:152 -msgid "Report a bug" +#: ../../qt4/app.py:99 ../../qt4/settingsdialog.py:51 +msgid "Settings" msgstr "" -#: ../../gnome/app.py:196 ../../kde4/app.py:155 -msgid "About" +#: ../../qt4/app.py:104 +msgid "Shutdown" msgstr "" -#: ../../gnome/app.py:202 ../../gnome/app.py:887 -#: ../../gnome/restoredialog.py:84 ../../gnome/snapshotsdialog.py:83 -#: ../../gnome/snapshotsdialog.py:244 ../../kde4/app.py:206 -#: ../../kde4/app.py:216 ../../kde4/restoredialog.py:68 -#: ../../kde4/snapshotsdialog.py:111 ../../kde4/snapshotsdialog.py:117 -#: ../../gnome/mainwindow.glade:350 ../../gnome/mainwindow.glade:352 -#: ../../gnome/snapshotsdialog.glade:169 ../../gnome/snapshotsdialog.glade:171 -msgid "Restore" +#: ../../qt4/app.py:105 +msgid "Shutdown system after snapshot has finished." msgstr "" -#: ../../gnome/app.py:203 ../../gnome/app.py:888 ../../gnome/gnometools.py:67 -#: ../../gnome/snapshotsdialog.py:84 ../../gnome/snapshotsdialog.py:245 -#: ../../kde4/app.py:208 ../../kde4/restoredialog.py:42 -#: ../../kde4/snapshotsdialog.py:113 -msgid "Restore to ..." +#: ../../qt4/app.py:111 +msgid "Exit" msgstr "" -#: ../../gnome/app.py:205 ../../gnome/app.py:896 ../../gnome/app.py:1146 -#: ../../kde4/app.py:1041 -#, python-format -msgid "Restore '%s'" +#: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 +msgid "Help" msgstr "" -#: ../../gnome/app.py:207 ../../gnome/app.py:897 ../../gnome/app.py:1147 -#: ../../kde4/app.py:1042 -#, python-format -msgid "Restore '%s' to ..." +#: ../../qt4/app.py:122 +msgid "Config File Help" msgstr "" -#: ../../gnome/app.py:226 ../../kde4/app.py:235 -msgid "Shortcuts" +#: ../../qt4/app.py:125 +msgid "Website" msgstr "" -#: ../../gnome/app.py:249 -msgid "Name" +#: ../../qt4/app.py:127 ../../qt4/app.py:982 +msgid "Changelog" msgstr "" -#: ../../gnome/app.py:260 -msgid "Size" +#: ../../qt4/app.py:129 +msgid "FAQ" msgstr "" -#: ../../gnome/app.py:267 -msgid "Date" +#: ../../qt4/app.py:131 +msgid "Ask a question" msgstr "" -#: ../../gnome/app.py:286 ../../gnome/app.py:883 -#: ../../gnome/snapshotsdialog.py:116 ../../kde4/app.py:171 -#: ../../kde4/app.py:221 ../../kde4/snapshotsdialog.py:91 -#: ../../gnome/mainwindow.glade:366 ../../gnome/mainwindow.glade:368 -#: ../../gnome/snapshotsdialog.glade:8 -msgid "Snapshots" +#: ../../qt4/app.py:133 +msgid "Report a bug" msgstr "" -#: ../../gnome/app.py:348 ../../kde4/app.py:362 -msgid "" -"Can't find snapshots folder.\n" -"If it is on a removable drive please plug it and then press OK" +#: ../../qt4/app.py:136 ../../qt4/app.py:1344 +msgid "About" msgstr "" -#: ../../gnome/app.py:611 ../../kde4/app.py:590 -msgid "Done, no backup needed" +#: ../../qt4/app.py:163 +msgid "Up" msgstr "" -#: ../../gnome/app.py:619 ../../kde4/app.py:598 -msgid "Working:" +#: ../../qt4/app.py:174 ../../qt4/settingsdialog.py:1776 +msgid "Show hidden files" msgstr "" -#: ../../gnome/app.py:623 ../../kde4/app.py:602 -msgid "Error:" +#: ../../qt4/app.py:184 ../../qt4/app.py:199 ../../qt4/app.py:233 +#: ../../qt4/restoredialog.py:62 ../../qt4/settingsdialog.py:1818 +#: ../../qt4/snapshotsdialog.py:134 ../../qt4/snapshotsdialog.py:139 +msgid "Restore" msgstr "" -#: ../../gnome/app.py:636 ../../kde4/app.py:649 -msgid "Global" +#: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 +#: ../../qt4/snapshotsdialog.py:136 +msgid "Restore to ..." msgstr "" -#: ../../gnome/app.py:637 ../../kde4/app.py:650 -msgid "Root" +#: ../../qt4/app.py:194 +msgid "Restore and delete new files" msgstr "" -#: ../../gnome/app.py:638 ../../kde4/app.py:651 -msgid "Home" +#: ../../qt4/app.py:201 +#, python-format +msgid "" +"Restore selected file or folder.\n" +"If this button is grayed out this is most likely because \"%(now)s\" is " +"selected in left hand snapshots list." msgstr "" -#: ../../gnome/app.py:662 -msgid "Bookmarks" +#: ../../qt4/app.py:206 ../../qt4/logviewdialog.py:67 +#: ../../qt4/qt4tools.py:160 ../../qt4/snapshotsdialog.py:96 +msgid "Snapshots" msgstr "" -#: ../../gnome/app.py:675 ../../kde4/app.py:662 -msgid "Backup folders" +#: ../../qt4/app.py:213 +msgid "Snapshot" msgstr "" -#: ../../gnome/app.py:701 ../../kde4/app.py:734 -msgid "Today" +#: ../../qt4/app.py:224 +msgid "View" msgstr "" -#: ../../gnome/app.py:705 ../../kde4/app.py:738 -msgid "Yesterday" +#: ../../qt4/app.py:277 +msgid "Shortcuts" msgstr "" -#: ../../gnome/app.py:709 ../../kde4/app.py:742 -msgid "This week" +#: ../../qt4/app.py:295 +msgid "" +"This folder doesn't exist\n" +"in the current selected snapshot!" msgstr "" -#: ../../gnome/app.py:713 ../../kde4/app.py:746 -msgid "Last week" +#: ../../qt4/app.py:359 +msgid "Add to Include" msgstr "" -#: ../../gnome/app.py:764 ../../kde4/app.py:398 -msgid "" -"If you close this window Back In Time will not be able to shutdown your " -"system when the snapshot has finished.\n" -"Do you really want to close?" +#: ../../qt4/app.py:360 +msgid "Add to Exclude" msgstr "" -#: ../../gnome/app.py:881 ../../gnome/snapshotsdialog.py:238 -msgid "Open" +#: ../../qt4/app.py:416 +#, python-format +msgid "" +"%(appName)s is not configured. Would you like to restore a previous " +"configuration?" msgstr "" -#: ../../gnome/app.py:1056 ../../kde4/app.py:90 ../../kde4/app.py:805 -#: ../../gnome/mainwindow.glade:73 ../../gnome/mainwindow.glade:75 -msgid "Snapshot Name" +#: ../../qt4/app.py:440 +msgid "" +"Can't find snapshots folder.\n" +"If it is on a removable drive please plug it and then press OK" msgstr "" -#: ../../gnome/app.py:1075 -#, python-format +#: ../../qt4/app.py:473 msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +"If you close this window Back In Time will not be able to shutdown your " +"system when the snapshot has finished.\n" +"Do you really want to close?" msgstr "" -#: ../../gnome/app.py:1123 ../../kde4/app.py:1010 -#, python-format -msgid "Snapshot: %s" +#: ../../qt4/app.py:667 ../../qt4/app.py:703 +msgid "Working:" msgstr "" -#: ../../gnome/app.py:1124 ../../kde4/app.py:1011 -#, python-format -msgid "View the snapshot made at %s" +#: ../../qt4/app.py:695 +msgid "Done, no backup needed" msgstr "" -#: ../../gnome/app.py:1126 ../../kde4/app.py:1013 -msgid "View the current disk content" +#: ../../qt4/app.py:707 +msgid "Error:" msgstr "" -#: ../../gnome/logviewdialog.py:106 ../../gnome/settingsdialog.py:414 -#: ../../kde4/logviewdialog.py:83 ../../kde4/settingsdialog.py:590 -msgid "All" +#: ../../qt4/app.py:726 ../../qt4/qt4systrayicon.py:153 +msgid "Sent:" msgstr "" -#: ../../gnome/logviewdialog.py:107 ../../gnome/settingsdialog.py:412 -#: ../../kde4/logviewdialog.py:84 ../../kde4/settingsdialog.py:588 -msgid "Errors" +#: ../../qt4/app.py:727 ../../qt4/qt4systrayicon.py:154 +msgid "Speed:" msgstr "" -#: ../../gnome/logviewdialog.py:112 ../../kde4/logviewdialog.py:89 -msgid "Changes" +#: ../../qt4/app.py:728 ../../qt4/qt4systrayicon.py:155 +msgid "ETA:" msgstr "" -#: ../../gnome/logviewdialog.py:115 ../../kde4/logviewdialog.py:92 -msgid "Informations" +#: ../../qt4/app.py:777 +msgid "Global" msgstr "" -#: ../../gnome/settingsdialog.py:235 ../../kde4/settingsdialog.py:387 -msgid "Include files and folders" +#: ../../qt4/app.py:778 +msgid "Root" msgstr "" -#: ../../gnome/settingsdialog.py:264 -msgid "Exclude patterns, files or folders" +#: ../../qt4/app.py:779 +msgid "Home" msgstr "" -#: ../../gnome/settingsdialog.py:411 ../../kde4/settingsdialog.py:587 -msgid "None" +#: ../../qt4/app.py:794 +msgid "Backup folders" msgstr "" -#: ../../gnome/settingsdialog.py:413 ../../kde4/settingsdialog.py:589 -msgid "Changes & Errors" +#: ../../qt4/app.py:849 +msgid "This is NOT a snapshot but a live view of your local files" msgstr "" -#: ../../gnome/settingsdialog.py:458 -msgid "Snapshots folder" +#: ../../qt4/app.py:860 ../../qt4/app.py:1476 +#, python-format +msgid "Last check %s" msgstr "" -#: ../../gnome/settingsdialog.py:466 ../../kde4/settingsdialog.py:1314 -msgid "Are you sure you want to change snapshots folder ?" +#: ../../qt4/app.py:928 +#, python-format +msgid "" +"Are you sure you want to remove the snapshot:\n" +"%s" msgstr "" -#: ../../gnome/settingsdialog.py:901 ../../kde4/settingsdialog.py:914 +#: ../../qt4/app.py:1004 +#, python-format msgid "" -"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " -"*/3 for periodic backups every 3 hours" +"Backup local files before overwriting or\n" +"removing with trailing '%(suffix)s'." msgstr "" -#: ../../gnome/settingsdialog.py:1141 ../../kde4/settingsdialog.py:653 -msgid "New profile" +#: ../../qt4/app.py:1010 +msgid "" +"Are you sure you want to remove all newer files in your original folder?" msgstr "" -#: ../../gnome/settingsdialog.py:1155 ../../kde4/settingsdialog.py:669 -msgid "Rename profile" +#: ../../qt4/app.py:1014 +msgid "" +"WARNING: deleting files in filesystem root could break your whole system!!!" msgstr "" -#: ../../gnome/settingsdialog.py:1167 ../../kde4/settingsdialog.py:683 -#, python-format -msgid "Are you sure you want to delete the profile \"%s\" ?" +#: ../../qt4/app.py:1016 +msgid "Files to be restored:" msgstr "" -#: ../../gnome/settingsdialog.py:1173 ../../kde4/settingsdialog.py:1292 -msgid "Include folder" +#: ../../qt4/app.py:1031 +msgid "Do you really want to restore this files(s):" msgstr "" -#: ../../gnome/settingsdialog.py:1193 ../../kde4/settingsdialog.py:1278 -msgid "Include file" +#: ../../qt4/app.py:1226 +#, python-format +msgid "Snapshot: %s" msgstr "" -#: ../../gnome/settingsdialog.py:1235 ../../kde4/settingsdialog.py:1241 -msgid "Exclude pattern" +#: ../../qt4/app.py:1227 +#, python-format +msgid "View the snapshot made at %s" msgstr "" -#: ../../gnome/settingsdialog.py:1240 ../../kde4/settingsdialog.py:1251 -msgid "Exclude patterns can't contain ':' char !" +#: ../../qt4/app.py:1229 +msgid "View the current disk content" msgstr "" -#: ../../gnome/settingsdialog.py:1246 ../../kde4/settingsdialog.py:1257 -msgid "Exclude file" +#: ../../qt4/app.py:1268 +#, python-format +msgid "Restore '%s'" msgstr "" -#: ../../gnome/settingsdialog.py:1257 ../../kde4/settingsdialog.py:1261 -msgid "Exclude folder" +#: ../../qt4/app.py:1269 +#, python-format +msgid "Restore '%s' to ..." msgstr "" -#: ../../gnome/snapshotsdialog.py:240 -msgid "Jump to" +#: ../../qt4/app.py:1270 +#, python-format +msgid "Restore '%s' and delete new files" msgstr "" -#: ../../gnome/snapshotsdialog.py:248 ../../kde4/snapshotsdialog.py:164 -msgid "Diff" +#: ../../qt4/app.py:1368 ../../qt4/app.py:1385 +msgid "Authors" msgstr "" -#: ../../gnome/snapshotsdialog.py:277 ../../kde4/snapshotsdialog.py:339 -msgid "You can't compare a snapshot to itself" +#: ../../qt4/app.py:1369 ../../qt4/app.py:1388 +msgid "Translations" msgstr "" -#: ../../gnome/snapshotsdialog.py:284 ../../kde4/snapshotsdialog.py:346 -#, python-format -msgid "Command not found: %s" +#: ../../qt4/app.py:1370 ../../qt4/app.py:1391 +msgid "License" msgstr "" -#: ../../gnome/snapshotsdialog.py:307 ../../kde4/snapshotsdialog.py:367 -#, python-format -msgid "" -"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" +#: ../../qt4/logviewdialog.py:49 +msgid "Last Log View" msgstr "" -#: ../../gnome/snapshotsdialog.py:310 ../../kde4/snapshotsdialog.py:370 -#, python-format -msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +#: ../../qt4/logviewdialog.py:51 +msgid "Snapshot Log View" msgstr "" -#: ../../gnome/snapshotsdialog.py:312 ../../kde4/snapshotsdialog.py:372 -msgid "WARNING: This can not be revoked!" +#: ../../qt4/logviewdialog.py:59 ../../qt4/settingsdialog.py:59 +#: ../../qt4/settingsdialog.py:274 ../../qt4/settingsdialog.py:1899 +msgid "Profile:" msgstr "" -#: ../../gnome/snapshotsdialog.py:317 ../../kde4/snapshotsdialog.py:377 -#, python-format -msgid "Exclude \"%s\" from future snapshots?" +#: ../../qt4/logviewdialog.py:81 +msgid "Filter:" msgstr "" -#: ../../kde4/app.py:86 ../../gnome/mainwindow.glade:58 -#: ../../gnome/mainwindow.glade:60 -msgid "Refresh snapshots list" +#: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 +msgid "All" msgstr "" -#: ../../kde4/app.py:94 ../../gnome/mainwindow.glade:88 -#: ../../gnome/mainwindow.glade:90 -msgid "Remove Snapshot" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 +#: ../../qt4/settingsdialog.py:657 +msgid "Errors" msgstr "" -#: ../../kde4/app.py:98 ../../gnome/mainwindow.glade:105 -msgid "View Snapshot Log" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 +msgid "Changes" msgstr "" -#: ../../kde4/app.py:102 ../../gnome/mainwindow.glade:121 -msgid "View Last Log" +#: ../../qt4/logviewdialog.py:92 +msgid "Informations" msgstr "" -#: ../../kde4/app.py:108 ../../kde4/settingsdialog.py:69 -#: ../../gnome/mainwindow.glade:144 ../../gnome/mainwindow.glade:146 -#: ../../gnome/settingsdialog.glade:7 -msgid "Settings" +#: ../../qt4/logviewdialog.py:101 +msgid "[E] Error, [I] Information, [C] Change" msgstr "" -#: ../../kde4/app.py:124 ../../gnome/mainwindow.glade:169 -msgid "Shutdown system after snapshot has finished." +#: ../../qt4/logviewdialog.py:104 +msgid "decode paths" msgstr "" -#: ../../kde4/app.py:131 ../../gnome/mainwindow.glade:184 -#: ../../gnome/mainwindow.glade:186 -msgid "Exit" +#: ../../qt4/messagebox.py:56 +msgid "Error" msgstr "" -#: ../../kde4/app.py:186 ../../gnome/mainwindow.glade:289 -msgid "Up" +#: ../../qt4/messagebox.py:62 ../../qt4/messagebox.py:68 +msgid "Question" msgstr "" -#: ../../kde4/app.py:199 ../../gnome/mainwindow.glade:325 -msgid "Show hidden files" +#: ../../qt4/qt4systrayicon.py:69 +msgid "Start BackInTime" msgstr "" -#: ../../kde4/app.py:244 -msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +#: ../../qt4/qt4systrayicon.py:124 +msgid "Working..." msgstr "" -#: ../../kde4/app.py:839 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +#: ../../qt4/qt4tools.py:178 +msgid "Today" msgstr "" -#: ../../kde4/app.py:1140 ../../kde4/kde4systrayicon.py:117 -msgid "Working..." +#: ../../qt4/qt4tools.py:183 +msgid "Yesterday" msgstr "" -#: ../../kde4/logviewdialog.py:55 -msgid "Error Log View" +#: ../../qt4/qt4tools.py:188 +msgid "This week" msgstr "" -#: ../../kde4/logviewdialog.py:65 ../../kde4/settingsdialog.py:79 -#: ../../kde4/settingsdialog.py:293 ../../gnome/logviewdialog.glade:73 -#: ../../gnome/settingsdialog.glade:72 -msgid "Profile:" +#: ../../qt4/qt4tools.py:193 +msgid "Last week" msgstr "" -#: ../../kde4/logviewdialog.py:77 ../../gnome/logviewdialog.glade:110 -msgid "Filter:" +#: ../../qt4/restoredialog.py:75 +msgid "Show full Log" msgstr "" -#: ../../kde4/logviewdialog.py:100 ../../gnome/logviewdialog.glade:169 -msgid "[E] Error, [I] Information, [C] Change" +#: ../../qt4/settingsdialog.py:68 +msgid "Edit" msgstr "" -#: ../../kde4/logviewdialog.py:103 ../../gnome/logviewdialog.glade:195 -msgid "decode paths" +#: ../../qt4/settingsdialog.py:73 +msgid "Modify for Full System Backup" msgstr "" -#: ../../kde4/settingsdialog.py:88 -msgid "Edit" +#: ../../qt4/settingsdialog.py:77 ../../qt4/settingsdialog.py:451 +msgid "Add" msgstr "" -#: ../../kde4/settingsdialog.py:106 ../../gnome/settingsdialog.glade:1207 +#: ../../qt4/settingsdialog.py:81 ../../qt4/settingsdialog.py:408 +#: ../../qt4/settingsdialog.py:467 +msgid "Remove" +msgstr "" + +#: ../../qt4/settingsdialog.py:96 msgid "General" msgstr "" -#: ../../kde4/settingsdialog.py:114 ../../gnome/settingsdialog.glade:199 +#: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "" -#: ../../kde4/settingsdialog.py:127 ../../kde4/settingsdialog.py:1311 +#: ../../qt4/settingsdialog.py:119 +#, python-format +msgid "" +"Warning: %(app)s uses EncFS for encryption. A recent security audit " +"revealed several possible attack vectors for this. Please take a look at 'A " +"NOTE ON SECURITY' in 'man backintime'." +msgstr "" + +#: ../../qt4/settingsdialog.py:129 ../../qt4/settingsdialog.py:1568 msgid "Where to save snapshots" msgstr "" -#: ../../kde4/settingsdialog.py:146 +#: ../../qt4/settingsdialog.py:145 +msgid "Folder" +msgstr "" + +#: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" -#: ../../kde4/settingsdialog.py:158 ../../kde4/settingsdialog.py:283 -#: ../../gnome/settingsdialog.glade:323 ../../gnome/settingsdialog.glade:583 -#: ../../gnome/settingsdialog.glade:874 +#: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "" -#: ../../kde4/settingsdialog.py:163 ../../gnome/settingsdialog.glade:350 -#: ../../gnome/settingsdialog.glade:610 +#: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "" -#: ../../kde4/settingsdialog.py:168 ../../kde4/settingsdialog.py:288 -#: ../../gnome/settingsdialog.glade:377 ../../gnome/settingsdialog.glade:637 -#: ../../gnome/settingsdialog.glade:902 +#: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "" -#: ../../kde4/settingsdialog.py:173 ../../gnome/settingsdialog.glade:416 +#: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" -#: ../../kde4/settingsdialog.py:178 ../../gnome/settingsdialog.glade:459 +#: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" -#: ../../kde4/settingsdialog.py:184 +#: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "" -#: ../../kde4/settingsdialog.py:228 ../../kde4/settingsdialog.py:237 -#: ../../kde4/settingsdialog.py:243 ../../gnome/settingsdialog.glade:703 -#: ../../gnome/settingsdialog.glade:743 +#: ../../qt4/settingsdialog.py:201 +msgid "Key File" +msgstr "" + +#: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 +#: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "" -#: ../../kde4/settingsdialog.py:249 ../../gnome/settingsdialog.glade:775 +#: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" -#: ../../kde4/settingsdialog.py:252 ../../gnome/settingsdialog.glade:792 +#: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" -#: ../../kde4/settingsdialog.py:264 ../../gnome/settingsdialog.glade:968 +#: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "" -#: ../../kde4/settingsdialog.py:276 ../../gnome/settingsdialog.glade:848 -msgid "Auto Host / User / Profile Id" +#: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 +msgid "Full snapshot path: " msgstr "" -#: ../../kde4/settingsdialog.py:301 +#: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "" -#: ../../kde4/settingsdialog.py:311 ../../gnome/settingsdialog.glade:1092 +#: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "" -#: ../../kde4/settingsdialog.py:322 ../../gnome/settingsdialog.glade:1079 +#: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "" -#: ../../kde4/settingsdialog.py:333 ../../gnome/settingsdialog.glade:1066 +#: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "" -#: ../../kde4/settingsdialog.py:344 ../../gnome/settingsdialog.glade:1053 +#: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "" -#: ../../kde4/settingsdialog.py:353 ../../gnome/settingsdialog.glade:1014 +#: ../../qt4/settingsdialog.py:339 msgid "" -"Run Back In Time periodically with anacron. This is useful if the computer " -"is not running regular." +"Run Back In Time repeatedly. This is useful if the computer is not running " +"regular." msgstr "" -#: ../../kde4/settingsdialog.py:357 ../../gnome/settingsdialog.glade:1040 -msgid "Frequency in days:" +#: ../../qt4/settingsdialog.py:344 +msgid "Every:" msgstr "" -#: ../../kde4/settingsdialog.py:368 ../../gnome/settingsdialog.glade:1026 +#: ../../qt4/settingsdialog.py:362 msgid "" "Run Back In Time as soon as the drive is connected (only once every X " "days).\n" "You will be prompted for your sudo password." msgstr "" -#: ../../kde4/settingsdialog.py:379 ../../gnome/settingsdialog.glade:1310 +#: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "" -#: ../../kde4/settingsdialog.py:403 ../../kde4/settingsdialog.py:445 -#: ../../gnome/settingsdialog.glade:1411 +#: ../../qt4/settingsdialog.py:381 +msgid "Include files and folders" +msgstr "" + +#: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "" -#: ../../kde4/settingsdialog.py:408 ../../kde4/settingsdialog.py:450 -#: ../../gnome/settingsdialog.glade:1427 +#: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "" -#: ../../kde4/settingsdialog.py:418 ../../gnome/settingsdialog.glade:1474 +#: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "" -#: ../../kde4/settingsdialog.py:421 ../../gnome/settingsdialog.glade:1328 +#: ../../qt4/settingsdialog.py:417 msgid "" "Warning: Wildcards ('foo*', '[fF]oo', 'fo?') will be ignored with " "mode 'SSH encrypted'.\n" "Only separate asterisk are allowed ('foo/*', 'foo/**/bar')" msgstr "" -#: ../../kde4/settingsdialog.py:430 +#: ../../qt4/settingsdialog.py:425 +msgid "Exclude patterns, files or folders" +msgstr "" + +#: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "" -#: ../../kde4/settingsdialog.py:460 ../../gnome/settingsdialog.glade:1905 +#: ../../qt4/settingsdialog.py:463 +msgid "Add default" +msgstr "" + +#: ../../qt4/settingsdialog.py:474 +msgid "Exclude files bigger than: " +msgstr "" + +#: ../../qt4/settingsdialog.py:475 +#, python-format +msgid "" +"Exclude files bigger than value in %(prefix)s.\n" +"With 'Full rsync mode' disabled this will only affect new files\n" +"because for rsync this is a transfer option, not an exclude option.\n" +"So big files that has been backed up before will remain in snapshots\n" +"even if they had changed." +msgstr "" + +#: ../../qt4/settingsdialog.py:493 msgid "Auto-remove" msgstr "" -#: ../../kde4/settingsdialog.py:464 ../../gnome/settingsdialog.glade:1608 +#: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "" -#: ../../kde4/settingsdialog.py:478 ../../gnome/settingsdialog.glade:1624 +#: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "" -#: ../../kde4/settingsdialog.py:490 ../../gnome/settingsdialog.glade:1642 +#: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" -#: ../../kde4/settingsdialog.py:514 ../../gnome/settingsdialog.glade:1697 +#: ../../qt4/settingsdialog.py:551 +msgid "Run in background on remote Host." +msgstr "" + +#: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "" -#: ../../kde4/settingsdialog.py:517 ../../kde4/settingsdialog.py:522 -#: ../../gnome/settingsdialog.glade:1705 ../../gnome/settingsdialog.glade:1729 +#: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "" -#: ../../kde4/settingsdialog.py:519 ../../gnome/settingsdialog.glade:1717 +#: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "" -#: ../../kde4/settingsdialog.py:524 ../../gnome/settingsdialog.glade:1743 +#: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "" -#: ../../kde4/settingsdialog.py:527 +#: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "" -#: ../../kde4/settingsdialog.py:529 ../../gnome/settingsdialog.glade:1769 +#: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "" -#: ../../kde4/settingsdialog.py:532 ../../gnome/settingsdialog.glade:1781 +#: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "" -#: ../../kde4/settingsdialog.py:534 ../../gnome/settingsdialog.glade:1795 +#: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "" -#: ../../kde4/settingsdialog.py:537 ../../gnome/settingsdialog.glade:1496 +#: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "" -#: ../../kde4/settingsdialog.py:546 ../../gnome/settingsdialog.glade:2104 +#: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "" -#: ../../kde4/settingsdialog.py:549 ../../gnome/settingsdialog.glade:1920 +#: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "" -#: ../../kde4/settingsdialog.py:552 ../../gnome/settingsdialog.glade:1937 +#: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "" -#: ../../kde4/settingsdialog.py:555 +#: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" msgstr "" -#: ../../kde4/settingsdialog.py:558 ../../gnome/settingsdialog.glade:1955 -msgid "Backup files on restore" +#: ../../qt4/settingsdialog.py:611 +msgid "Run only one snapshot at a time" +msgstr "" + +#: ../../qt4/settingsdialog.py:612 +msgid "" +"Other snapshots will be blocked until the current snapshot is done.\n" +"This is a global option. So it will effect all profiles for this user.\n" +"But you need to activate this for all other users, too." +msgstr "" + +#: ../../qt4/settingsdialog.py:617 +msgid "Backup replaced files on restore" +msgstr "" + +#: ../../qt4/settingsdialog.py:618 +#, python-format +msgid "" +"Newer versions of files will be renamed with trailing '%(suffix)s' before " +"restoring.\n" +"If you don't need them anymore you can remove them with '%(cmd)s'" msgstr "" -#: ../../kde4/settingsdialog.py:561 ../../gnome/settingsdialog.glade:1972 +#: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "" -#: ../../kde4/settingsdialog.py:564 ../../gnome/settingsdialog.glade:1989 +#: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "" -#: ../../kde4/settingsdialog.py:567 ../../gnome/settingsdialog.glade:2006 +#: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "" -#: ../../kde4/settingsdialog.py:568 ../../gnome/settingsdialog.glade:2032 +#: ../../qt4/settingsdialog.py:634 msgid "" -"- snapshots are no read-only\n" -"- destination file-system must support all linux attributes (dates, rights, " +"- snapshots are not read-only\n" +"- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" -#: ../../kde4/settingsdialog.py:575 ../../gnome/settingsdialog.glade:2045 +#: ../../qt4/settingsdialog.py:641 +msgid "Take a new snapshot regardless of there were changes or not." +msgstr "" + +#: ../../qt4/settingsdialog.py:644 msgid "Check for changes (don't take a new snapshot if nothing changed)" msgstr "" -#: ../../kde4/settingsdialog.py:582 +#: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "" -#: ../../kde4/settingsdialog.py:597 ../../gnome/settingsdialog.glade:2366 -msgid "Expert Options" +#: ../../qt4/settingsdialog.py:656 +msgid "None" +msgstr "" + +#: ../../qt4/settingsdialog.py:658 +msgid "Changes & Errors" msgstr "" -#: ../../kde4/settingsdialog.py:600 +#: ../../qt4/settingsdialog.py:674 msgid "Change these options only if you really know what you are doing !" msgstr "" -#: ../../kde4/settingsdialog.py:608 ../../gnome/settingsdialog.glade:2133 -msgid "Run 'nice' as cron job (default: enabled)" +#: ../../qt4/settingsdialog.py:678 +msgid "Run 'nice':" +msgstr "" + +#: ../../qt4/settingsdialog.py:684 ../../qt4/settingsdialog.py:696 +msgid "as cron job" +msgstr "" + +#: ../../qt4/settingsdialog.py:687 ../../qt4/settingsdialog.py:702 +#: ../../qt4/settingsdialog.py:716 +msgid "on remote host" +msgstr "" + +#: ../../qt4/settingsdialog.py:690 +msgid "Run 'ionice':" msgstr "" -#: ../../kde4/settingsdialog.py:611 ../../gnome/settingsdialog.glade:2150 -msgid "Run 'ionice' as cron job (default: enabled)" +#: ../../qt4/settingsdialog.py:699 +msgid "when taking a manual snapshot" msgstr "" -#: ../../kde4/settingsdialog.py:614 ../../gnome/settingsdialog.glade:2167 -msgid "Run 'ionice' when taking a manual snapshot (default: disabled)" +#: ../../qt4/settingsdialog.py:706 +msgid "Run 'rsync' with 'nocache':" msgstr "" -#: ../../kde4/settingsdialog.py:617 ../../gnome/settingsdialog.glade:2184 -msgid "Run 'nice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:712 +msgid "on local machine" msgstr "" -#: ../../kde4/settingsdialog.py:620 ../../gnome/settingsdialog.glade:2201 -msgid "Run 'ionice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:719 +msgid "Redirect stdout to /dev/null in cronjobs." msgstr "" -#: ../../kde4/settingsdialog.py:626 ../../gnome/settingsdialog.glade:2224 +#: ../../qt4/settingsdialog.py:725 +msgid "Redirect stderr to /dev/null in cronjobs." +msgstr "" + +#: ../../qt4/settingsdialog.py:734 msgid "Limit rsync bandwidth usage: " msgstr "" -#: ../../kde4/settingsdialog.py:629 ../../gnome/settingsdialog.glade:2259 +#: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" -#: ../../kde4/settingsdialog.py:634 ../../gnome/settingsdialog.glade:2280 +#: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "" -#: ../../kde4/settingsdialog.py:637 ../../gnome/settingsdialog.glade:2297 +#: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "" -#: ../../kde4/settingsdialog.py:640 ../../gnome/settingsdialog.glade:2314 +#: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute links)" msgstr "" -#: ../../kde4/settingsdialog.py:643 ../../gnome/settingsdialog.glade:2331 -msgid "Copy links (dereference symbolic links)" +#: ../../qt4/settingsdialog.py:834 +msgid "Paste additional options to rsync" msgstr "" -#: ../../kde4/snapshotsdialog.py:46 ../../kde4/snapshotsdialog.py:173 -#: ../../gnome/snapshotsdialog.glade:385 -msgid "Diff Options" +#: ../../qt4/settingsdialog.py:837 +msgid "" +"Options must be quoted e.g. --exclude-from=\"/path/to/my exclude file\"." msgstr "" -#: ../../kde4/snapshotsdialog.py:56 ../../gnome/snapshotsdialog.glade:314 -msgid "Command:" +#: ../../qt4/settingsdialog.py:847 +msgid "Add prefix to SSH commands" msgstr "" -#: ../../kde4/snapshotsdialog.py:60 ../../gnome/snapshotsdialog.glade:322 -msgid "Parameters:" +#: ../../qt4/settingsdialog.py:850 +#, python-format +msgid "" +"Prefix to run before every command on remote host.\n" +"Variables need to be escaped with \\$FOO.\n" +"This doesn't touch rsync. So to add a prefix\n" +"for rsync use \"%(cb_rsync_options)s\" with\n" +"%(rsync_options_value)s\n" +"\n" +"%(default)s: %(def_value)s" msgstr "" -#: ../../kde4/snapshotsdialog.py:64 ../../gnome/snapshotsdialog.glade:334 -msgid "Use %1 and %2 for path parameters" +#: ../../qt4/settingsdialog.py:858 ../../qt4/settingsdialog.py:1691 +msgid "default" msgstr "" -#: ../../kde4/snapshotsdialog.py:123 ../../gnome/snapshotsdialog.glade:184 -#: ../../gnome/snapshotsdialog.glade:186 -msgid "Delete" +#: ../../qt4/settingsdialog.py:875 +msgid "Restore Config" msgstr "" -#: ../../kde4/snapshotsdialog.py:128 ../../gnome/snapshotsdialog.glade:199 -#: ../../gnome/snapshotsdialog.glade:201 -msgid "Select All" +#: ../../qt4/settingsdialog.py:891 +msgid "" +"Full system backup can only create a snapshot to be restored to the same " +"physical disk(s) with the same disk partitioning as from the source; " +"restoring to new physical disks or the same disks with different " +"partitioning will yield a potentially broken and unusable system.\n" +"\n" +"Full system backup will override some settings that may have been " +"customized. Continue?" msgstr "" -#: ../../kde4/snapshotsdialog.py:132 ../../gnome/snapshotsdialog.glade:88 -msgid "List only different snapshots" +#: ../../qt4/settingsdialog.py:922 +msgid "New profile" msgstr "" -#: ../../kde4/snapshotsdialog.py:139 ../../gnome/snapshotsdialog.glade:110 -msgid "List only equal snapshots to: " +#: ../../qt4/settingsdialog.py:938 +msgid "Rename profile" msgstr "" -#: ../../kde4/snapshotsdialog.py:149 ../../gnome/snapshotsdialog.glade:146 -msgid "Deep check (more accurate, but slow)" +#: ../../qt4/settingsdialog.py:952 +#, python-format +msgid "Are you sure you want to delete the profile \"%s\" ?" msgstr "" -#: ../../kde4/snapshotsdialog.py:174 -msgid "Go To" +#: ../../qt4/settingsdialog.py:1191 +msgid "" +"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " +"*/3 for periodic backups every 3 hours" +msgstr "" + +#: ../../qt4/settingsdialog.py:1489 +msgid "Exclude pattern" msgstr "" -#: ../../gnome/logviewdialog.glade:9 -msgid "Log View" +#: ../../qt4/settingsdialog.py:1502 +msgid "Exclude file" msgstr "" -#: ../../gnome/logviewdialog.glade:179 -msgid "scroll down automatic" +#: ../../qt4/settingsdialog.py:1506 +msgid "Exclude folder" msgstr "" -#: ../../gnome/mainwindow.glade:7 -msgid "Back In Time" +#: ../../qt4/settingsdialog.py:1525 +msgid "Include file" msgstr "" -#: ../../gnome/mainwindow.glade:45 -msgid "Backup Now" +#: ../../qt4/settingsdialog.py:1533 ../../qt4/settingsdialog.py:1553 +#, python-format +msgid "" +"\"%s\" is a symlink. The linked target will not be backed up until you " +"include it, too.\n" +"Would you like to include the symlinks target instead?" msgstr "" -#: ../../gnome/mainwindow.glade:171 -msgid "Shutdown" +#: ../../qt4/settingsdialog.py:1545 +msgid "Include folder" msgstr "" -#: ../../gnome/mainwindow.glade:287 -msgid "Parent folder" +#: ../../qt4/settingsdialog.py:1572 +msgid "Are you sure you want to change snapshots folder ?" +msgstr "" + +#: ../../qt4/settingsdialog.py:1688 +msgid "enabled" +msgstr "" + +#: ../../qt4/settingsdialog.py:1690 +msgid "disabled" +msgstr "" + +#: ../../qt4/settingsdialog.py:1715 +msgid "Restore Settings" msgstr "" -#: ../../gnome/mainwindow.glade:327 -msgid "Hidden files" +#: ../../qt4/settingsdialog.py:1732 +msgid " and add your user to group 'fuse'" msgstr "" -#: ../../gnome/mainwindow.glade:451 +#: ../../qt4/settingsdialog.py:1736 +#, python-format msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +"Please navigate to the snapshot from which you want to restore %(appName)s's " +"configuration. The path may look like: \n" +"%(samplePath)s\n" +"\n" +"If your snapshots are on a remote drive or if they are encrypted you need to " +"manually mount them first. If you use Mode SSH you also may need to set up " +"public key login to the remote host%(addFuse)s.\n" +"Take a look at 'man backintime'." msgstr "" -#: ../../gnome/settingsdialog.glade:287 -msgid "Where to save snapshots" +#: ../../qt4/settingsdialog.py:1794 ../../qt4/settingsdialog.py:1854 +msgid "No config found" msgstr "" -#: ../../gnome/settingsdialog.glade:483 -msgid "Private key:" +#: ../../qt4/snapshotsdialog.py:49 ../../qt4/snapshotsdialog.py:173 +msgid "Diff Options" msgstr "" -#: ../../gnome/settingsdialog.glade:534 -msgid "Advanced SSH Settings" +#: ../../qt4/snapshotsdialog.py:56 +msgid "Command:" msgstr "" -#: ../../gnome/settingsdialog.glade:552 -msgid "SSH Settings" +#: ../../qt4/snapshotsdialog.py:60 +msgid "Parameters:" msgstr "" -#: ../../gnome/settingsdialog.glade:815 -msgid "Password" +#: ../../qt4/snapshotsdialog.py:64 +msgid "Use %1 and %2 for path parameters" msgstr "" -#: ../../gnome/settingsdialog.glade:930 -msgid "Profile Id:" +#: ../../qt4/snapshotsdialog.py:106 +msgid "List only different snapshots" msgstr "" -#: ../../gnome/settingsdialog.glade:1115 -msgid "" -"hours seperate by comma ( e.g. 8,12,18,23) or */3 for periodic backups every " -"3 hours (cron style)" +#: ../../qt4/snapshotsdialog.py:113 +msgid "List only equal snapshots to: " +msgstr "" + +#: ../../qt4/snapshotsdialog.py:123 +msgid "Deep check (more accurate, but slow)" msgstr "" -#: ../../gnome/settingsdialog.glade:1163 -msgid "Schedule" +#: ../../qt4/snapshotsdialog.py:144 +msgid "Delete" msgstr "" -#: ../../gnome/settingsdialog.glade:1363 -msgid "Highly recommended:" +#: ../../qt4/snapshotsdialog.py:148 +msgid "Select All" msgstr "" -#: ../../gnome/settingsdialog.glade:1377 -msgid "label" +#: ../../qt4/snapshotsdialog.py:161 +msgid "Diff" msgstr "" -#: ../../gnome/settingsdialog.glade:1755 -msgid "week(s)" +#: ../../qt4/snapshotsdialog.py:172 +msgid "Go To" msgstr "" -#: ../../gnome/settingsdialog.glade:2069 -msgid "Log level:" +#: ../../qt4/snapshotsdialog.py:326 +msgid "You can't compare a snapshot to itself" msgstr "" -#: ../../gnome/settingsdialog.glade:2121 +#: ../../qt4/snapshotsdialog.py:333 +#, python-format +msgid "Command not found: %s" +msgstr "" + +#: ../../qt4/snapshotsdialog.py:354 +#, python-format msgid "" -"Change these options only if you really know what you are doing !" +"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" msgstr "" -#: ../../gnome/snapshotsdialog.glade:263 -msgid "Diff with" +#: ../../qt4/snapshotsdialog.py:357 +#, python-format +msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" msgstr "" -#: ../../gnome/textinputdialog.glade:7 -msgid "Pattern" +#: ../../qt4/snapshotsdialog.py:359 +msgid "WARNING: This can not be revoked!" msgstr "" -#: ../../gnome/textinputdialog.glade:70 -msgid "Text" +#: ../../qt4/snapshotsdialog.py:374 +#, python-format +msgid "Exclude \"%s\" from future snapshots?" msgstr "" diff -Nru backintime-1.0.36/common/po/nb.po backintime-1.1.12/common/po/nb.po --- backintime-1.0.36/common/po/nb.po 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/po/nb.po 2016-01-11 18:07:58.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2013-11-09 22:34+0100\n" +"POT-Creation-Date: 2015-12-19 00:47+0100\n" "PO-Revision-Date: 2013-10-13 02:14+0000\n" "Last-Translator: Nils Herde \n" "Language-Team: Norwegian Bokmal \n" @@ -15,198 +15,230 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2014-08-06 10:20+0000\n" -"X-Generator: Launchpad (build 17147)\n" +"X-Launchpad-Export-Date: 2016-01-11 17:52+0000\n" +"X-Generator: Launchpad (build 17881)\n" -#: ../../common/config.py:72 +#: ../../common/configfile.py:60 +#, python-format +msgid "Failed to save config: %s" +msgstr "" + +#: ../../common/configfile.py:78 +#, python-format +msgid "Failed to load config: %s" +msgstr "" + +#: ../../common/configfile.py:352 ../../common/configfile.py:414 +#, python-format +msgid "Profile \"%s\" already exists !" +msgstr "Profil \"% s\" eksisterer allerede!" + +#: ../../common/configfile.py:383 +msgid "You can't remove the last profile !" +msgstr "Du kan ikke fjerne den siste profilen!" + +#: ../../common/config.py:76 msgid "Disabled" msgstr "Deaktivert" -#: ../../common/config.py:73 +#: ../../common/config.py:77 msgid "At every boot/reboot" msgstr "For hver start/omstart" -#: ../../common/config.py:74 +#: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Hvert 5. minutt" -#: ../../common/config.py:75 +#: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Hvert 10. minutt" -#: ../../common/config.py:76 +#: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "Hvert 30. minutt" -#: ../../common/config.py:77 +#: ../../common/config.py:81 msgid "Every hour" msgstr "Hver time" -#: ../../common/config.py:78 +#: ../../common/config.py:82 msgid "Every 2 hours" msgstr "Annenhver time" -#: ../../common/config.py:79 +#: ../../common/config.py:83 msgid "Every 4 hours" msgstr "Hver fjerde time" -#: ../../common/config.py:80 +#: ../../common/config.py:84 msgid "Every 6 hours" msgstr "Hver sjette time" -#: ../../common/config.py:81 +#: ../../common/config.py:85 msgid "Every 12 hours" msgstr "Hver tolvte time" -#: ../../common/config.py:82 +#: ../../common/config.py:86 msgid "Custom Hours" msgstr "Velg timer" -#: ../../common/config.py:83 +#: ../../common/config.py:87 msgid "Every Day" msgstr "" -#: ../../common/config.py:84 -msgid "Daily (anacron)" -msgstr "Daglig" +#: ../../common/config.py:88 +msgid "Repeatedly (anacron)" +msgstr "" -#: ../../common/config.py:85 +#: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "Når disken kobles til (udev)" -#: ../../common/config.py:86 +#: ../../common/config.py:90 msgid "Every Week" msgstr "Hver uke" -#: ../../common/config.py:87 +#: ../../common/config.py:91 msgid "Every Month" msgstr "Hver måned" -#: ../../common/config.py:91 +#: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Dag(er)" -#: ../../common/config.py:92 +#: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Uke(r)" -#: ../../common/config.py:93 +#: ../../common/config.py:97 msgid "Year(s)" msgstr "År" -#: ../../common/config.py:100 +#: ../../common/config.py:101 +msgid "Hour(s)" +msgstr "" + +#: ../../common/config.py:104 +msgid "Month(s)" +msgstr "" + +#: ../../common/config.py:126 ../../qt4/settingsdialog.py:551 msgid " EXPERIMENTAL!" msgstr " USTABIL!" -#: ../../common/config.py:103 +#: ../../common/config.py:129 msgid "Local" msgstr "Lokal" -#: ../../common/config.py:104 +#: ../../common/config.py:130 msgid "SSH" msgstr "SSH" -#: ../../common/config.py:104 ../../common/config.py:106 -#: ../../gnome/settingsdialog.py:475 ../../kde4/settingsdialog.py:1325 +#: ../../common/config.py:130 ../../common/config.py:132 +#: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "Privat SSH nøkkel" -#: ../../common/config.py:105 +#: ../../common/config.py:131 msgid "Local encrypted" msgstr "Lokal kryptert" -#: ../../common/config.py:105 ../../common/config.py:106 +#: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "Kryptering" -#: ../../common/config.py:106 +#: ../../common/config.py:132 msgid "SSH encrypted" msgstr "SSH kryptert" -#: ../../common/config.py:112 +#: ../../common/config.py:135 msgid "Default" msgstr "Standard" -#: ../../common/config.py:113 +#: ../../common/config.py:136 msgid "AES128-CTR" msgstr "AES128-CTR" -#: ../../common/config.py:114 +#: ../../common/config.py:137 msgid "AES192-CTR" msgstr "AES192-CTR" -#: ../../common/config.py:115 +#: ../../common/config.py:138 msgid "AES256-CTR" msgstr "AES256-CTR" -#: ../../common/config.py:116 +#: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "ARCFOUR256" -#: ../../common/config.py:117 +#: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "ARCFOUR128" -#: ../../common/config.py:118 +#: ../../common/config.py:141 msgid "AES128-CBC" msgstr "AES128-CBC" -#: ../../common/config.py:119 +#: ../../common/config.py:142 msgid "3DES-CBC" msgstr "3DES-CBC" -#: ../../common/config.py:120 +#: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "Blowfish-CBC" -#: ../../common/config.py:121 +#: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "Cast128-CBC" -#: ../../common/config.py:122 +#: ../../common/config.py:145 msgid "AES192-CBC" msgstr "AES192-CBC" -#: ../../common/config.py:123 +#: ../../common/config.py:146 msgid "AES256-CBC" msgstr "AES256-CBC" -#: ../../common/config.py:124 +#: ../../common/config.py:147 msgid "ARCFOUR" msgstr "ARCFOUR" -#: ../../common/config.py:129 +#: ../../common/config.py:153 msgid "Main profile" msgstr "Hovedprofil" -#: ../../common/config.py:256 ../../common/config.py:275 -#: ../../common/config.py:286 ../../common/config.py:291 +#: ../../common/config.py:289 ../../common/config.py:296 +#: ../../common/config.py:307 ../../common/config.py:312 +#: ../../qt4/qt4systrayicon.py:61 #, python-format msgid "Profile: \"%s\"" msgstr "Profil: \"%s\"" -#: ../../common/config.py:256 +#: ../../common/config.py:289 msgid "Snapshots folder is not valid !" msgstr "Øyeblikksbilde mappen er ikke gyldig !" -#: ../../common/config.py:275 +#: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "Du velge minst en mappe å sikkerhetskopiere !" -#: ../../common/config.py:286 +#: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "Du kan ikke inkludere sikkerhetskopi mappen !" -#: ../../common/config.py:291 +#: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "Du kan ikke inkludere en sikkerhetskopi under-mappe !" -#: ../../common/config.py:361 +#: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s er ikke en mappe !" -#: ../../common/config.py:376 ../../common/config.py:389 +#: ../../common/config.py:380 +msgid "Host/User/Profile-ID must not be empty!" +msgstr "" + +#: ../../common/config.py:388 ../../common/config.py:420 #, python-format msgid "" "Can't write to: %s\n" @@ -215,59 +247,68 @@ "Kan ikke skrive til:% s\n" "Er du sikker på at du har skrivetilgang?" -#: ../../common/config.py:1286 +#: ../../common/config.py:400 +#, python-format msgid "" -"Can't find crontab.\n" -"Are you sure cron is installed ?\n" -"If not you should disable all automatic backups." +"Destination filesystem for '%(path)s' is formatted with FAT which doesn't " +"support hard-links. Please use a native Linux filesystem." msgstr "" -"Kan ikke finne crontab.\n" -"Er du sikker på at cron er installert?\n" -"Hvis ikke bør du skru av alle automatiske sikkerhetskopier." -#: ../../common/config.py:1338 +#: ../../common/config.py:405 #, python-format -msgid "Schedule udev doesn't work with mode %s" +msgid "" +"Destination filsystem for '%(path)s' is a SMB mounted share. Please make " +"sure the remote SMB server supports symlinks or activate '%(copyLinks)s' in " +"'%(expertOptions)s'." msgstr "" -#: ../../common/config.py:1342 -#, python-format -msgid "Couldn't find UUID for \"%s\"" -msgstr "Kunne ikke finne UUID for \"%s\"" - -#: ../../common/config.py:1379 -msgid "Failed to remove udev rules" +#: ../../common/config.py:408 ../../qt4/settingsdialog.py:815 +msgid "Copy links (dereference symbolic links)" msgstr "" -#: ../../common/config.py:1385 -msgid "Failed to create udev rules" +#: ../../common/config.py:409 ../../qt4/settingsdialog.py:669 +msgid "Expert Options" +msgstr "Avanserte innstillinger" + +#: ../../common/config.py:411 +#, python-format +msgid "" +"Destination filesystem for '%(path)s is a sshfs mounted share. sshfs doesn't " +"support hard-links. Please use mode 'SSH' instead." msgstr "" -#: ../../common/config.py:1420 +#: ../../common/config.py:1407 msgid "" -"Can't find anacron.\n" -"Are you sure anacron is installed ?\n" -"If not you should disable daily anacron backups." +"Can't find crontab.\n" +"Are you sure cron is installed ?\n" +"If not you should disable all automatic backups." msgstr "" +"Kan ikke finne crontab.\n" +"Er du sikker på at cron er installert?\n" +"Hvis ikke bør du skru av alle automatiske sikkerhetskopier." -#: ../../common/config.py:1439 -msgid "Please provide your sudo password to install the udev rule." +#: ../../common/config.py:1411 +msgid "Failed to write new crontab." msgstr "" -#: ../../common/config.py:1445 -msgid "Please provide your sudo password to remove unused udev rules." +#: ../../common/config.py:1505 +#, python-format +msgid "" +"Could not install Udev rule for profile %(profile_id)s. DBus Service " +"'%(dbus_interface)s' wasn't available" msgstr "" -#: ../../common/configfile.py:253 ../../common/configfile.py:315 +#: ../../common/config.py:1517 #, python-format -msgid "Profile \"%s\" already exists !" -msgstr "Profil \"% s\" eksisterer allerede!" +msgid "Schedule udev doesn't work with mode %s" +msgstr "" -#: ../../common/configfile.py:284 -msgid "You can't remove the last profile !" -msgstr "Du kan ikke fjerne den siste profilen!" +#: ../../common/config.py:1526 +#, python-format +msgid "Couldn't find UUID for \"%s\"" +msgstr "Kunne ikke finne UUID for \"%s\"" -#: ../../common/encfstools.py:95 +#: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" @@ -275,38 +316,38 @@ "%(error)s" msgstr "" -#: ../../common/encfstools.py:105 +#: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "" -#: ../../common/encfstools.py:149 +#: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "" -#: ../../common/encfstools.py:153 +#: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" -#: ../../common/encfstools.py:154 +#: ../../common/encfstools.py:171 msgid "Cancel" msgstr "" -#: ../../common/encfstools.py:157 +#: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "" -#: ../../common/encfstools.py:161 +#: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "" -#: ../../common/encfstools.py:166 +#: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" -#: ../../common/encfstools.py:174 ../../common/sshtools.py:207 +#: ../../common/encfstools.py:196 ../../common/sshtools.py:262 #, python-format msgid "" "%(user)s is not member of group 'fuse'.\n" @@ -314,63 +355,66 @@ "Look at 'man backintime' for further instructions." msgstr "" -#: ../../common/encfstools.py:189 +#: ../../common/encfstools.py:211 msgid "" "encfs version 1.7.2 and before has a bug with option --reverse. Please " "update encfs" msgstr "" -#: ../../common/encfstools.py:453 ../../common/encfstools.py:480 -#: ../../common/snapshots.py:982 ../../common/snapshots.py:1288 -#: ../../kde4/app.py:82 ../../gnome/mainwindow.glade:43 +#: ../../common/encfstools.py:512 ../../common/snapshots.py:1131 +#: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "Ta øyeblikksbilde" -#: ../../common/mount.py:195 +#: ../../common/mount.py:204 #, python-format msgid "" "Hash collision occurred in hash_id %s. Incrementing global value " "hash_collision and try again." msgstr "" -#: ../../common/mount.py:246 +#: ../../common/mount.py:259 #, python-format msgid "mountpoint %s not empty." msgstr "" -#: ../../common/mount.py:286 +#: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" -#: ../../common/password.py:425 +#: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" -#: ../../common/snapshots.py:171 ../../gnome/app.py:1127 -#: ../../kde4/app.py:1014 +#: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Nå" -#: ../../common/snapshots.py:182 ../../gnome/gnometools.py:37 +#: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "MED FEIL !" -#: ../../common/snapshots.py:282 +#: ../../common/snapshots.py:344 msgid "" "### This log has been decoded with automatic search pattern\n" "### If some paths are not decoded you can manually decode them with:\n" msgstr "" -#: ../../common/snapshots.py:465 +#: ../../common/snapshots.py:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "" -#: ../../common/snapshots.py:564 +#: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "" -#: ../../common/snapshots.py:739 +#: ../../common/snapshots.py:752 ../../qt4/app.py:377 ../../qt4/app.py:675 +#: ../../qt4/app.py:692 ../../qt4/qt4systrayicon.py:65 +msgid "Done" +msgstr "Ferdig" + +#: ../../common/snapshots.py:860 msgid "" "Back In Time changed its backup format.\n" "\n" @@ -380,7 +424,7 @@ "\n" "Dine gamle øyeblikksbilder kan flyttes i henhold til det nye formatet. OK?" -#: ../../common/snapshots.py:749 +#: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" @@ -397,7 +441,7 @@ "\n" "(Programmet vil fortsatt kunne skille mellom dem)" -#: ../../common/snapshots.py:752 +#: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" @@ -405,7 +449,7 @@ "Ingen profiler funnet. Må oppdatere til profiler først, vennligst start Back " "In Time på nytt" -#: ../../common/snapshots.py:803 +#: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" @@ -418,7 +462,7 @@ "cannot continue taking snapshots" msgstr "" -#: ../../common/snapshots.py:812 +#: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" @@ -433,7 +477,7 @@ "Du kan manuelt flytte øyeblikksbildene, \n" "hvis du er ferdig kan du starte Back In Time på nytt for å fortsette" -#: ../../common/snapshots.py:825 +#: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" @@ -443,7 +487,7 @@ "\n" "Back In Time vil fortsette å ta øyeblikksbilder som planlagt" -#: ../../common/snapshots.py:830 +#: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" @@ -463,17 +507,21 @@ "\n" "Hvis du ikke gjør det vil du bli spurt neste gang du starter Back In Time." -#: ../../common/snapshots.py:839 +#: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "Back In Time vil fortsette å ta øyeblikksbilder som planlagt" -#: ../../common/snapshots.py:841 +#: ../../common/snapshots.py:953 msgid "" "Back In Time still cannot continue taking new snapshots.\n" "Restart Back In Time to see the questions again" msgstr "" -#: ../../common/snapshots.py:913 +#: ../../common/snapshots.py:972 +msgid "Deferring backup while on battery" +msgstr "" + +#: ../../common/snapshots.py:1035 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it." @@ -481,156 +529,163 @@ "Kan ikke finne øyeblikksbilde mappe.\n" "Hvis den er på en ekstern disk, vennligst plugg den i." -#: ../../common/snapshots.py:915 +#: ../../common/snapshots.py:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "Venter %s sekund." msgstr[1] "Venter %s sekunder." -#: ../../common/snapshots.py:941 +#: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "" -#: ../../common/snapshots.py:950 +#: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "Avslutter" -#: ../../common/snapshots.py:1088 +#: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "Kan ikke opprette mappe: %s" -#: ../../common/snapshots.py:1107 +#: ../../common/snapshots.py:1217 msgid "..." msgstr "…" -#: ../../common/snapshots.py:1134 +#: ../../common/snapshots.py:1238 +#, python-format +msgid "Found leftover '%s' which can be continued." +msgstr "" + +#: ../../common/snapshots.py:1250 +#, python-format +msgid "Remove leftover '%s' folder from last run" +msgstr "" + +#: ../../common/snapshots.py:1263 #, python-format msgid "Can't remove folder: %s" msgstr "Kan ikke fjerne mappe: %s" -#: ../../common/snapshots.py:1219 +#: ../../common/snapshots.py:1340 #, python-format msgid "Compare with snapshot %s" msgstr "Sammenlign med øyeblikksbilde %s" -#: ../../common/snapshots.py:1248 +#: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "lag ekte lenker" -#: ../../common/snapshots.py:1335 +#: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "" -#: ../../common/snapshots.py:1341 +#: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "Lagre rettighet ..." -#: ../../common/snapshots.py:1442 +#: ../../common/snapshots.py:1470 +msgid "Save permission over ssh failed. Retry normal method" +msgstr "" + +#: ../../common/snapshots.py:1521 #, python-format msgid "Can't rename %(new_path)s to %(path)s" msgstr "" -#: ../../common/snapshots.py:1562 -msgid "Remove old snapshots" -msgstr "Slett gamle øyeblikksbilder" - -#: ../../common/snapshots.py:1586 ../../kde4/settingsdialog.py:501 -#: ../../gnome/settingsdialog.glade:1660 +#: ../../common/snapshots.py:1695 ../../common/snapshots.py:1728 +#: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "Smart sletting" -#: ../../common/snapshots.py:1591 +#: ../../common/snapshots.py:1704 +msgid "Remove old snapshots" +msgstr "Slett gamle øyeblikksbilder" + +#: ../../common/snapshots.py:1733 msgid "Try to keep min free space" msgstr "Forsøk å bevare min ledig plass" -#: ../../common/snapshots.py:1621 +#: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" -#: ../../common/sshtools.py:106 +#: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "" -#: ../../common/sshtools.py:113 +#: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "" -#: ../../common/sshtools.py:187 -#, python-format -msgid "" -"Failed to unlock SSH private key:\n" -"Error: %s" -msgstr "" - -#: ../../common/sshtools.py:194 +#: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" -#: ../../common/sshtools.py:199 +#: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" -#: ../../common/sshtools.py:217 +#: ../../common/sshtools.py:278 #, python-format msgid "" "Password-less authentication for %(user)s@%(host)s failed. Look at 'man " "backintime' for further instructions." msgstr "" -#: ../../common/sshtools.py:229 +#: ../../common/sshtools.py:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" -#: ../../common/sshtools.py:254 +#: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" -#: ../../common/sshtools.py:274 +#: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" -#: ../../common/sshtools.py:276 +#: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:278 +#: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:280 +#: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" -#: ../../common/sshtools.py:302 +#: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" -#: ../../common/sshtools.py:325 ../../common/sshtools.py:383 +#: ../../common/sshtools.py:423 ../../common/sshtools.py:553 #, python-format msgid "" "Remote host %(host)s doesn't support '%(command)s':\n" @@ -638,7 +693,7 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:387 +#: ../../common/sshtools.py:556 #, python-format msgid "" "Check commands on host %(host)s returned unknown error:\n" @@ -646,96 +701,149 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:400 +#: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "" -#: ../../gnome/app.py:185 ../../gnome/app.py:594 ../../gnome/app.py:608 -#: ../../kde4/app.py:299 ../../kde4/app.py:570 ../../kde4/app.py:587 -msgid "Done" -msgstr "Ferdig" +#: ../../qt4/app.py:81 +msgid "Refresh snapshots list" +msgstr "" -#: ../../gnome/app.py:189 ../../kde4/app.py:143 ../../kde4/app.py:159 -#: ../../gnome/mainwindow.glade:225 +#: ../../qt4/app.py:85 ../../qt4/app.py:890 +msgid "Snapshot Name" +msgstr "Navn på øyeblikksbilde" + +#: ../../qt4/app.py:88 +msgid "Remove Snapshot" +msgstr "Fjern Øyeblikksbilde" + +#: ../../qt4/app.py:91 +msgid "View Snapshot Log" +msgstr "" + +#: ../../qt4/app.py:94 +msgid "View Last Log" +msgstr "" + +#: ../../qt4/app.py:99 ../../qt4/settingsdialog.py:51 +msgid "Settings" +msgstr "Innstillinger" + +#: ../../qt4/app.py:104 +msgid "Shutdown" +msgstr "" + +#: ../../qt4/app.py:105 +msgid "Shutdown system after snapshot has finished." +msgstr "" + +#: ../../qt4/app.py:111 +msgid "Exit" +msgstr "Avslutt" + +#: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 msgid "Help" msgstr "Hjelp" -#: ../../gnome/app.py:191 ../../kde4/app.py:146 -#: ../../gnome/mainwindow.glade:223 +#: ../../qt4/app.py:122 +msgid "Config File Help" +msgstr "" + +#: ../../qt4/app.py:125 msgid "Website" msgstr "Nettside" -#: ../../gnome/app.py:192 ../../kde4/app.py:148 +#: ../../qt4/app.py:127 ../../qt4/app.py:982 +msgid "Changelog" +msgstr "" + +#: ../../qt4/app.py:129 msgid "FAQ" msgstr "" -#: ../../gnome/app.py:193 ../../kde4/app.py:150 +#: ../../qt4/app.py:131 msgid "Ask a question" msgstr "" -#: ../../gnome/app.py:194 ../../kde4/app.py:152 +#: ../../qt4/app.py:133 msgid "Report a bug" msgstr "" -#: ../../gnome/app.py:196 ../../kde4/app.py:155 +#: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "Om" -#: ../../gnome/app.py:202 ../../gnome/app.py:887 -#: ../../gnome/restoredialog.py:84 ../../gnome/snapshotsdialog.py:83 -#: ../../gnome/snapshotsdialog.py:244 ../../kde4/app.py:206 -#: ../../kde4/app.py:216 ../../kde4/restoredialog.py:68 -#: ../../kde4/snapshotsdialog.py:111 ../../kde4/snapshotsdialog.py:117 -#: ../../gnome/mainwindow.glade:350 ../../gnome/mainwindow.glade:352 -#: ../../gnome/snapshotsdialog.glade:169 ../../gnome/snapshotsdialog.glade:171 +#: ../../qt4/app.py:163 +msgid "Up" +msgstr "Opp" + +#: ../../qt4/app.py:174 ../../qt4/settingsdialog.py:1776 +msgid "Show hidden files" +msgstr "Vis skjulte filer" + +#: ../../qt4/app.py:184 ../../qt4/app.py:199 ../../qt4/app.py:233 +#: ../../qt4/restoredialog.py:62 ../../qt4/settingsdialog.py:1818 +#: ../../qt4/snapshotsdialog.py:134 ../../qt4/snapshotsdialog.py:139 msgid "Restore" msgstr "Gjennopprett" -#: ../../gnome/app.py:203 ../../gnome/app.py:888 ../../gnome/gnometools.py:67 -#: ../../gnome/snapshotsdialog.py:84 ../../gnome/snapshotsdialog.py:245 -#: ../../kde4/app.py:208 ../../kde4/restoredialog.py:42 -#: ../../kde4/snapshotsdialog.py:113 +#: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 +#: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "" -#: ../../gnome/app.py:205 ../../gnome/app.py:896 ../../gnome/app.py:1146 -#: ../../kde4/app.py:1041 -#, python-format -msgid "Restore '%s'" +#: ../../qt4/app.py:194 +msgid "Restore and delete new files" msgstr "" -#: ../../gnome/app.py:207 ../../gnome/app.py:897 ../../gnome/app.py:1147 -#: ../../kde4/app.py:1042 +#: ../../qt4/app.py:201 #, python-format -msgid "Restore '%s' to ..." +msgid "" +"Restore selected file or folder.\n" +"If this button is grayed out this is most likely because \"%(now)s\" is " +"selected in left hand snapshots list." msgstr "" -#: ../../gnome/app.py:226 ../../kde4/app.py:235 +#: ../../qt4/app.py:206 ../../qt4/logviewdialog.py:67 +#: ../../qt4/qt4tools.py:160 ../../qt4/snapshotsdialog.py:96 +msgid "Snapshots" +msgstr "Øyeblikksbilder" + +#: ../../qt4/app.py:213 +msgid "Snapshot" +msgstr "" + +#: ../../qt4/app.py:224 +msgid "View" +msgstr "" + +#: ../../qt4/app.py:277 msgid "Shortcuts" msgstr "Snarveier" -#: ../../gnome/app.py:249 -msgid "Name" -msgstr "Navn" - -#: ../../gnome/app.py:260 -msgid "Size" -msgstr "Størrelse" - -#: ../../gnome/app.py:267 -msgid "Date" -msgstr "Dato" - -#: ../../gnome/app.py:286 ../../gnome/app.py:883 -#: ../../gnome/snapshotsdialog.py:116 ../../kde4/app.py:171 -#: ../../kde4/app.py:221 ../../kde4/snapshotsdialog.py:91 -#: ../../gnome/mainwindow.glade:366 ../../gnome/mainwindow.glade:368 -#: ../../gnome/snapshotsdialog.glade:8 -msgid "Snapshots" -msgstr "Øyeblikksbilder" +#: ../../qt4/app.py:295 +msgid "" +"This folder doesn't exist\n" +"in the current selected snapshot!" +msgstr "" + +#: ../../qt4/app.py:359 +msgid "Add to Include" +msgstr "" + +#: ../../qt4/app.py:360 +msgid "Add to Exclude" +msgstr "" -#: ../../gnome/app.py:348 ../../kde4/app.py:362 +#: ../../qt4/app.py:416 +#, python-format +msgid "" +"%(appName)s is not configured. Would you like to restore a previous " +"configuration?" +msgstr "" + +#: ../../qt4/app.py:440 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it and then press OK" @@ -743,728 +851,791 @@ "Kan ikke finne øyeblikksbilde mappe.\n" "Hvis den er på en ekstern disk vennligst plugg den i, deretter trykk OK" -#: ../../gnome/app.py:611 ../../kde4/app.py:590 -msgid "Done, no backup needed" -msgstr "Ferdig, sikkerhetskopiering trengs ikke" +#: ../../qt4/app.py:473 +msgid "" +"If you close this window Back In Time will not be able to shutdown your " +"system when the snapshot has finished.\n" +"Do you really want to close?" +msgstr "" -#: ../../gnome/app.py:619 ../../kde4/app.py:598 +#: ../../qt4/app.py:667 ../../qt4/app.py:703 msgid "Working:" msgstr "Arbeider:" -#: ../../gnome/app.py:623 ../../kde4/app.py:602 +#: ../../qt4/app.py:695 +msgid "Done, no backup needed" +msgstr "Ferdig, sikkerhetskopiering trengs ikke" + +#: ../../qt4/app.py:707 msgid "Error:" msgstr "" -#: ../../gnome/app.py:636 ../../kde4/app.py:649 +#: ../../qt4/app.py:726 ../../qt4/qt4systrayicon.py:153 +msgid "Sent:" +msgstr "" + +#: ../../qt4/app.py:727 ../../qt4/qt4systrayicon.py:154 +msgid "Speed:" +msgstr "" + +#: ../../qt4/app.py:728 ../../qt4/qt4systrayicon.py:155 +msgid "ETA:" +msgstr "" + +#: ../../qt4/app.py:777 msgid "Global" msgstr "Global" -#: ../../gnome/app.py:637 ../../kde4/app.py:650 +#: ../../qt4/app.py:778 msgid "Root" msgstr "Rot" -#: ../../gnome/app.py:638 ../../kde4/app.py:651 +#: ../../qt4/app.py:779 msgid "Home" msgstr "Hjem" -#: ../../gnome/app.py:662 -msgid "Bookmarks" -msgstr "Bokmerker" - -#: ../../gnome/app.py:675 ../../kde4/app.py:662 +#: ../../qt4/app.py:794 msgid "Backup folders" msgstr "Øyeblikksbilde mapper" -#: ../../gnome/app.py:701 ../../kde4/app.py:734 -msgid "Today" -msgstr "Idag" +#: ../../qt4/app.py:849 +msgid "This is NOT a snapshot but a live view of your local files" +msgstr "" -#: ../../gnome/app.py:705 ../../kde4/app.py:738 -msgid "Yesterday" -msgstr "Igår" +#: ../../qt4/app.py:860 ../../qt4/app.py:1476 +#, python-format +msgid "Last check %s" +msgstr "" -#: ../../gnome/app.py:709 ../../kde4/app.py:742 -msgid "This week" -msgstr "Denne uken" +#: ../../qt4/app.py:928 +#, python-format +msgid "" +"Are you sure you want to remove the snapshot:\n" +"%s" +msgstr "" +"Er du sikker på at du vil fjerne øyeblikksbilde:\n" +"%s" -#: ../../gnome/app.py:713 ../../kde4/app.py:746 -msgid "Last week" -msgstr "Forrige uke" +#: ../../qt4/app.py:1004 +#, python-format +msgid "" +"Backup local files before overwriting or\n" +"removing with trailing '%(suffix)s'." +msgstr "" -#: ../../gnome/app.py:764 ../../kde4/app.py:398 +#: ../../qt4/app.py:1010 msgid "" -"If you close this window Back In Time will not be able to shutdown your " -"system when the snapshot has finished.\n" -"Do you really want to close?" +"Are you sure you want to remove all newer files in your original folder?" msgstr "" -#: ../../gnome/app.py:881 ../../gnome/snapshotsdialog.py:238 -msgid "Open" -msgstr "Åpen" +#: ../../qt4/app.py:1014 +msgid "" +"WARNING: deleting files in filesystem root could break your whole system!!!" +msgstr "" -#: ../../gnome/app.py:1056 ../../kde4/app.py:90 ../../kde4/app.py:805 -#: ../../gnome/mainwindow.glade:73 ../../gnome/mainwindow.glade:75 -msgid "Snapshot Name" -msgstr "Navn på øyeblikksbilde" +#: ../../qt4/app.py:1016 +msgid "Files to be restored:" +msgstr "" -#: ../../gnome/app.py:1075 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +#: ../../qt4/app.py:1031 +msgid "Do you really want to restore this files(s):" msgstr "" -"Er du sikker på at du vil fjerne øyeblikksbilde:\n" -"%s" -#: ../../gnome/app.py:1123 ../../kde4/app.py:1010 +#: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "Øyeblikksbilde: %s" -#: ../../gnome/app.py:1124 ../../kde4/app.py:1011 +#: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "Se øyeblikksbilde laget den %s" -#: ../../gnome/app.py:1126 ../../kde4/app.py:1013 +#: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "Se nåværende stasjons innhold" -#: ../../gnome/logviewdialog.py:106 ../../gnome/settingsdialog.py:414 -#: ../../kde4/logviewdialog.py:83 ../../kde4/settingsdialog.py:590 -msgid "All" +#: ../../qt4/app.py:1268 +#, python-format +msgid "Restore '%s'" msgstr "" -#: ../../gnome/logviewdialog.py:107 ../../gnome/settingsdialog.py:412 -#: ../../kde4/logviewdialog.py:84 ../../kde4/settingsdialog.py:588 -msgid "Errors" -msgstr "Feil" - -#: ../../gnome/logviewdialog.py:112 ../../kde4/logviewdialog.py:89 -msgid "Changes" -msgstr "Endringer" - -#: ../../gnome/logviewdialog.py:115 ../../kde4/logviewdialog.py:92 -msgid "Informations" +#: ../../qt4/app.py:1269 +#, python-format +msgid "Restore '%s' to ..." msgstr "" -#: ../../gnome/settingsdialog.py:235 ../../kde4/settingsdialog.py:387 -msgid "Include files and folders" -msgstr "Inkluder filer og mapper" - -#: ../../gnome/settingsdialog.py:264 -msgid "Exclude patterns, files or folders" +#: ../../qt4/app.py:1270 +#, python-format +msgid "Restore '%s' and delete new files" msgstr "" -#: ../../gnome/settingsdialog.py:411 ../../kde4/settingsdialog.py:587 -msgid "None" +#: ../../qt4/app.py:1368 ../../qt4/app.py:1385 +msgid "Authors" msgstr "" -#: ../../gnome/settingsdialog.py:413 ../../kde4/settingsdialog.py:589 -msgid "Changes & Errors" +#: ../../qt4/app.py:1369 ../../qt4/app.py:1388 +msgid "Translations" msgstr "" -#: ../../gnome/settingsdialog.py:458 -msgid "Snapshots folder" +#: ../../qt4/app.py:1370 ../../qt4/app.py:1391 +msgid "License" msgstr "" -#: ../../gnome/settingsdialog.py:466 ../../kde4/settingsdialog.py:1314 -msgid "Are you sure you want to change snapshots folder ?" -msgstr "Er du sikker på at vil bytte øyeblikksbilder mappen ?" - -#: ../../gnome/settingsdialog.py:901 ../../kde4/settingsdialog.py:914 -msgid "" -"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " -"*/3 for periodic backups every 3 hours" +#: ../../qt4/logviewdialog.py:49 +msgid "Last Log View" msgstr "" -#: ../../gnome/settingsdialog.py:1141 ../../kde4/settingsdialog.py:653 -msgid "New profile" +#: ../../qt4/logviewdialog.py:51 +msgid "Snapshot Log View" msgstr "" -#: ../../gnome/settingsdialog.py:1155 ../../kde4/settingsdialog.py:669 -msgid "Rename profile" -msgstr "Omdøp profil" - -#: ../../gnome/settingsdialog.py:1167 ../../kde4/settingsdialog.py:683 -#, python-format -msgid "Are you sure you want to delete the profile \"%s\" ?" -msgstr "Er du sikker på at du vil slette profilen «% s\"?" - -#: ../../gnome/settingsdialog.py:1173 ../../kde4/settingsdialog.py:1292 -msgid "Include folder" -msgstr "Inkludér katalog" +#: ../../qt4/logviewdialog.py:59 ../../qt4/settingsdialog.py:59 +#: ../../qt4/settingsdialog.py:274 ../../qt4/settingsdialog.py:1899 +msgid "Profile:" +msgstr "Profil:" -#: ../../gnome/settingsdialog.py:1193 ../../kde4/settingsdialog.py:1278 -msgid "Include file" +#: ../../qt4/logviewdialog.py:81 +msgid "Filter:" msgstr "" -#: ../../gnome/settingsdialog.py:1235 ../../kde4/settingsdialog.py:1241 -msgid "Exclude pattern" -msgstr "Utelukk mønster" - -#: ../../gnome/settingsdialog.py:1240 ../../kde4/settingsdialog.py:1251 -msgid "Exclude patterns can't contain ':' char !" -msgstr "Ekskluder mønster kan ikke inneholde ':' char !" - -#: ../../gnome/settingsdialog.py:1246 ../../kde4/settingsdialog.py:1257 -msgid "Exclude file" -msgstr "Ekskluder fil" - -#: ../../gnome/settingsdialog.py:1257 ../../kde4/settingsdialog.py:1261 -msgid "Exclude folder" -msgstr "Ekskludér katalog" - -#: ../../gnome/snapshotsdialog.py:240 -msgid "Jump to" +#: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 +msgid "All" msgstr "" -#: ../../gnome/snapshotsdialog.py:248 ../../kde4/snapshotsdialog.py:164 -msgid "Diff" -msgstr "Diff" - -#: ../../gnome/snapshotsdialog.py:277 ../../kde4/snapshotsdialog.py:339 -msgid "You can't compare a snapshot to itself" -msgstr "Du kan ikke sammenlikne et øyeblikksbilde med seg selv" - -#: ../../gnome/snapshotsdialog.py:284 ../../kde4/snapshotsdialog.py:346 -#, python-format -msgid "Command not found: %s" -msgstr "Kommando ikke funnet: %s" - -#: ../../gnome/snapshotsdialog.py:307 ../../kde4/snapshotsdialog.py:367 -#, python-format -msgid "" -"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" -msgstr "" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 +#: ../../qt4/settingsdialog.py:657 +msgid "Errors" +msgstr "Feil" -#: ../../gnome/snapshotsdialog.py:310 ../../kde4/snapshotsdialog.py:370 -#, python-format -msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" -msgstr "" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 +msgid "Changes" +msgstr "Endringer" -#: ../../gnome/snapshotsdialog.py:312 ../../kde4/snapshotsdialog.py:372 -msgid "WARNING: This can not be revoked!" +#: ../../qt4/logviewdialog.py:92 +msgid "Informations" msgstr "" -#: ../../gnome/snapshotsdialog.py:317 ../../kde4/snapshotsdialog.py:377 -#, python-format -msgid "Exclude \"%s\" from future snapshots?" +#: ../../qt4/logviewdialog.py:101 +msgid "[E] Error, [I] Information, [C] Change" msgstr "" -#: ../../kde4/app.py:86 ../../gnome/mainwindow.glade:58 -#: ../../gnome/mainwindow.glade:60 -msgid "Refresh snapshots list" +#: ../../qt4/logviewdialog.py:104 +msgid "decode paths" msgstr "" -#: ../../kde4/app.py:94 ../../gnome/mainwindow.glade:88 -#: ../../gnome/mainwindow.glade:90 -msgid "Remove Snapshot" -msgstr "Fjern Øyeblikksbilde" - -#: ../../kde4/app.py:98 ../../gnome/mainwindow.glade:105 -msgid "View Snapshot Log" +#: ../../qt4/messagebox.py:56 +msgid "Error" msgstr "" -#: ../../kde4/app.py:102 ../../gnome/mainwindow.glade:121 -msgid "View Last Log" +#: ../../qt4/messagebox.py:62 ../../qt4/messagebox.py:68 +msgid "Question" msgstr "" -#: ../../kde4/app.py:108 ../../kde4/settingsdialog.py:69 -#: ../../gnome/mainwindow.glade:144 ../../gnome/mainwindow.glade:146 -#: ../../gnome/settingsdialog.glade:7 -msgid "Settings" -msgstr "Innstillinger" - -#: ../../kde4/app.py:124 ../../gnome/mainwindow.glade:169 -msgid "Shutdown system after snapshot has finished." +#: ../../qt4/qt4systrayicon.py:69 +msgid "Start BackInTime" msgstr "" -#: ../../kde4/app.py:131 ../../gnome/mainwindow.glade:184 -#: ../../gnome/mainwindow.glade:186 -msgid "Exit" -msgstr "Avslutt" - -#: ../../kde4/app.py:186 ../../gnome/mainwindow.glade:289 -msgid "Up" -msgstr "Opp" +#: ../../qt4/qt4systrayicon.py:124 +msgid "Working..." +msgstr "Arbeider …" -#: ../../kde4/app.py:199 ../../gnome/mainwindow.glade:325 -msgid "Show hidden files" -msgstr "Vis skjulte filer" +#: ../../qt4/qt4tools.py:178 +msgid "Today" +msgstr "Idag" -#: ../../kde4/app.py:244 -msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" -msgstr "" -"Denne mappen finnes ikke\n" -"i det valgte øyeblikksbilde!" +#: ../../qt4/qt4tools.py:183 +msgid "Yesterday" +msgstr "Igår" -#: ../../kde4/app.py:839 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" -msgstr "" -"Er du sikker på at du vil fjerne øyeblikksbilde:\n" -"%s" +#: ../../qt4/qt4tools.py:188 +msgid "This week" +msgstr "Denne uken" -#: ../../kde4/app.py:1140 ../../kde4/kde4systrayicon.py:117 -msgid "Working..." -msgstr "Arbeider …" +#: ../../qt4/qt4tools.py:193 +msgid "Last week" +msgstr "Forrige uke" -#: ../../kde4/logviewdialog.py:55 -msgid "Error Log View" +#: ../../qt4/restoredialog.py:75 +msgid "Show full Log" msgstr "" -#: ../../kde4/logviewdialog.py:65 ../../kde4/settingsdialog.py:79 -#: ../../kde4/settingsdialog.py:293 ../../gnome/logviewdialog.glade:73 -#: ../../gnome/settingsdialog.glade:72 -msgid "Profile:" -msgstr "Profil:" +#: ../../qt4/settingsdialog.py:68 +msgid "Edit" +msgstr "Rediger" -#: ../../kde4/logviewdialog.py:77 ../../gnome/logviewdialog.glade:110 -msgid "Filter:" +#: ../../qt4/settingsdialog.py:73 +msgid "Modify for Full System Backup" msgstr "" -#: ../../kde4/logviewdialog.py:100 ../../gnome/logviewdialog.glade:169 -msgid "[E] Error, [I] Information, [C] Change" +#: ../../qt4/settingsdialog.py:77 ../../qt4/settingsdialog.py:451 +msgid "Add" msgstr "" -#: ../../kde4/logviewdialog.py:103 ../../gnome/logviewdialog.glade:195 -msgid "decode paths" +#: ../../qt4/settingsdialog.py:81 ../../qt4/settingsdialog.py:408 +#: ../../qt4/settingsdialog.py:467 +msgid "Remove" msgstr "" -#: ../../kde4/settingsdialog.py:88 -msgid "Edit" -msgstr "Rediger" - -#: ../../kde4/settingsdialog.py:106 ../../gnome/settingsdialog.glade:1207 +#: ../../qt4/settingsdialog.py:96 msgid "General" msgstr "Generelt" -#: ../../kde4/settingsdialog.py:114 ../../gnome/settingsdialog.glade:199 +#: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "" -#: ../../kde4/settingsdialog.py:127 ../../kde4/settingsdialog.py:1311 +#: ../../qt4/settingsdialog.py:119 +#, python-format +msgid "" +"Warning: %(app)s uses EncFS for encryption. A recent security audit " +"revealed several possible attack vectors for this. Please take a look at 'A " +"NOTE ON SECURITY' in 'man backintime'." +msgstr "" + +#: ../../qt4/settingsdialog.py:129 ../../qt4/settingsdialog.py:1568 msgid "Where to save snapshots" msgstr "Hvor lagre øyeblikksbilder" -#: ../../kde4/settingsdialog.py:146 +#: ../../qt4/settingsdialog.py:145 +msgid "Folder" +msgstr "" + +#: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" -#: ../../kde4/settingsdialog.py:158 ../../kde4/settingsdialog.py:283 -#: ../../gnome/settingsdialog.glade:323 ../../gnome/settingsdialog.glade:583 -#: ../../gnome/settingsdialog.glade:874 +#: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "" -#: ../../kde4/settingsdialog.py:163 ../../gnome/settingsdialog.glade:350 -#: ../../gnome/settingsdialog.glade:610 +#: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "" -#: ../../kde4/settingsdialog.py:168 ../../kde4/settingsdialog.py:288 -#: ../../gnome/settingsdialog.glade:377 ../../gnome/settingsdialog.glade:637 -#: ../../gnome/settingsdialog.glade:902 +#: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "" -#: ../../kde4/settingsdialog.py:173 ../../gnome/settingsdialog.glade:416 +#: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" -#: ../../kde4/settingsdialog.py:178 ../../gnome/settingsdialog.glade:459 +#: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" -#: ../../kde4/settingsdialog.py:184 +#: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "" -#: ../../kde4/settingsdialog.py:228 ../../kde4/settingsdialog.py:237 -#: ../../kde4/settingsdialog.py:243 ../../gnome/settingsdialog.glade:703 -#: ../../gnome/settingsdialog.glade:743 +#: ../../qt4/settingsdialog.py:201 +msgid "Key File" +msgstr "" + +#: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 +#: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "" -#: ../../kde4/settingsdialog.py:249 ../../gnome/settingsdialog.glade:775 +#: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" -#: ../../kde4/settingsdialog.py:252 ../../gnome/settingsdialog.glade:792 +#: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" -#: ../../kde4/settingsdialog.py:264 ../../gnome/settingsdialog.glade:968 +#: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "" -#: ../../kde4/settingsdialog.py:276 ../../gnome/settingsdialog.glade:848 -msgid "Auto Host / User / Profile Id" +#: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 +msgid "Full snapshot path: " msgstr "" -#: ../../kde4/settingsdialog.py:301 +#: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "Timeplan" -#: ../../kde4/settingsdialog.py:311 ../../gnome/settingsdialog.glade:1092 +#: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "" -#: ../../kde4/settingsdialog.py:322 ../../gnome/settingsdialog.glade:1079 +#: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "" -#: ../../kde4/settingsdialog.py:333 ../../gnome/settingsdialog.glade:1066 +#: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "" -#: ../../kde4/settingsdialog.py:344 ../../gnome/settingsdialog.glade:1053 +#: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "" -#: ../../kde4/settingsdialog.py:353 ../../gnome/settingsdialog.glade:1014 +#: ../../qt4/settingsdialog.py:339 msgid "" -"Run Back In Time periodically with anacron. This is useful if the computer " -"is not running regular." +"Run Back In Time repeatedly. This is useful if the computer is not running " +"regular." msgstr "" -#: ../../kde4/settingsdialog.py:357 ../../gnome/settingsdialog.glade:1040 -msgid "Frequency in days:" +#: ../../qt4/settingsdialog.py:344 +msgid "Every:" msgstr "" -#: ../../kde4/settingsdialog.py:368 ../../gnome/settingsdialog.glade:1026 +#: ../../qt4/settingsdialog.py:362 msgid "" "Run Back In Time as soon as the drive is connected (only once every X " "days).\n" "You will be prompted for your sudo password." msgstr "" -#: ../../kde4/settingsdialog.py:379 ../../gnome/settingsdialog.glade:1310 +#: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Inkluder" -#: ../../kde4/settingsdialog.py:403 ../../kde4/settingsdialog.py:445 -#: ../../gnome/settingsdialog.glade:1411 +#: ../../qt4/settingsdialog.py:381 +msgid "Include files and folders" +msgstr "Inkluder filer og mapper" + +#: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "Legg til fil" -#: ../../kde4/settingsdialog.py:408 ../../kde4/settingsdialog.py:450 -#: ../../gnome/settingsdialog.glade:1427 +#: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Legg til katalog" -#: ../../kde4/settingsdialog.py:418 ../../gnome/settingsdialog.glade:1474 +#: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Ekskludér" -#: ../../kde4/settingsdialog.py:421 ../../gnome/settingsdialog.glade:1328 +#: ../../qt4/settingsdialog.py:417 msgid "" "Warning: Wildcards ('foo*', '[fF]oo', 'fo?') will be ignored with " "mode 'SSH encrypted'.\n" "Only separate asterisk are allowed ('foo/*', 'foo/**/bar')" msgstr "" -#: ../../kde4/settingsdialog.py:430 +#: ../../qt4/settingsdialog.py:425 +msgid "Exclude patterns, files or folders" +msgstr "" + +#: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "" -#: ../../kde4/settingsdialog.py:460 ../../gnome/settingsdialog.glade:1905 +#: ../../qt4/settingsdialog.py:463 +msgid "Add default" +msgstr "" + +#: ../../qt4/settingsdialog.py:474 +msgid "Exclude files bigger than: " +msgstr "" + +#: ../../qt4/settingsdialog.py:475 +#, python-format +msgid "" +"Exclude files bigger than value in %(prefix)s.\n" +"With 'Full rsync mode' disabled this will only affect new files\n" +"because for rsync this is a transfer option, not an exclude option.\n" +"So big files that has been backed up before will remain in snapshots\n" +"even if they had changed." +msgstr "" + +#: ../../qt4/settingsdialog.py:493 msgid "Auto-remove" msgstr "Fjern automatisk" -#: ../../kde4/settingsdialog.py:464 ../../gnome/settingsdialog.glade:1608 +#: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "Eldre enn:" -#: ../../kde4/settingsdialog.py:478 ../../gnome/settingsdialog.glade:1624 +#: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "Hvis ledig plass er mindre enn:" -#: ../../kde4/settingsdialog.py:490 ../../gnome/settingsdialog.glade:1642 +#: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" -#: ../../kde4/settingsdialog.py:514 ../../gnome/settingsdialog.glade:1697 +#: ../../qt4/settingsdialog.py:551 +msgid "Run in background on remote Host." +msgstr "" + +#: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "" -#: ../../kde4/settingsdialog.py:517 ../../kde4/settingsdialog.py:522 -#: ../../gnome/settingsdialog.glade:1705 ../../gnome/settingsdialog.glade:1729 +#: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "" -#: ../../kde4/settingsdialog.py:519 ../../gnome/settingsdialog.glade:1717 +#: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "" -#: ../../kde4/settingsdialog.py:524 ../../gnome/settingsdialog.glade:1743 +#: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "" -#: ../../kde4/settingsdialog.py:527 +#: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "" -#: ../../kde4/settingsdialog.py:529 ../../gnome/settingsdialog.glade:1769 +#: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "" -#: ../../kde4/settingsdialog.py:532 ../../gnome/settingsdialog.glade:1781 +#: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "" -#: ../../kde4/settingsdialog.py:534 ../../gnome/settingsdialog.glade:1795 +#: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "" -#: ../../kde4/settingsdialog.py:537 ../../gnome/settingsdialog.glade:1496 +#: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "Ikke fjern navngitte øyeblikksbilder" -#: ../../kde4/settingsdialog.py:546 ../../gnome/settingsdialog.glade:2104 +#: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Alternativer" -#: ../../kde4/settingsdialog.py:549 ../../gnome/settingsdialog.glade:1920 +#: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Slå på meldinger" -#: ../../kde4/settingsdialog.py:552 ../../gnome/settingsdialog.glade:1937 +#: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "Slå av funksjonen snapshot ved bateridrift" -#: ../../kde4/settingsdialog.py:555 +#: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" msgstr "" -#: ../../kde4/settingsdialog.py:558 ../../gnome/settingsdialog.glade:1955 -msgid "Backup files on restore" +#: ../../qt4/settingsdialog.py:611 +msgid "Run only one snapshot at a time" msgstr "" -#: ../../kde4/settingsdialog.py:561 ../../gnome/settingsdialog.glade:1972 +#: ../../qt4/settingsdialog.py:612 +msgid "" +"Other snapshots will be blocked until the current snapshot is done.\n" +"This is a global option. So it will effect all profiles for this user.\n" +"But you need to activate this for all other users, too." +msgstr "" + +#: ../../qt4/settingsdialog.py:617 +msgid "Backup replaced files on restore" +msgstr "" + +#: ../../qt4/settingsdialog.py:618 +#, python-format +msgid "" +"Newer versions of files will be renamed with trailing '%(suffix)s' before " +"restoring.\n" +"If you don't need them anymore you can remove them with '%(cmd)s'" +msgstr "" + +#: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "" -#: ../../kde4/settingsdialog.py:564 ../../gnome/settingsdialog.glade:1989 +#: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "" -#: ../../kde4/settingsdialog.py:567 ../../gnome/settingsdialog.glade:2006 +#: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "" -#: ../../kde4/settingsdialog.py:568 ../../gnome/settingsdialog.glade:2032 +#: ../../qt4/settingsdialog.py:634 msgid "" -"- snapshots are no read-only\n" -"- destination file-system must support all linux attributes (dates, rights, " +"- snapshots are not read-only\n" +"- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" -#: ../../kde4/settingsdialog.py:575 ../../gnome/settingsdialog.glade:2045 +#: ../../qt4/settingsdialog.py:641 +msgid "Take a new snapshot regardless of there were changes or not." +msgstr "" + +#: ../../qt4/settingsdialog.py:644 msgid "Check for changes (don't take a new snapshot if nothing changed)" msgstr "" -#: ../../kde4/settingsdialog.py:582 +#: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "" -#: ../../kde4/settingsdialog.py:597 ../../gnome/settingsdialog.glade:2366 -msgid "Expert Options" -msgstr "Avanserte innstillinger" +#: ../../qt4/settingsdialog.py:656 +msgid "None" +msgstr "" + +#: ../../qt4/settingsdialog.py:658 +msgid "Changes & Errors" +msgstr "" -#: ../../kde4/settingsdialog.py:600 +#: ../../qt4/settingsdialog.py:674 msgid "Change these options only if you really know what you are doing !" msgstr "" -#: ../../kde4/settingsdialog.py:608 ../../gnome/settingsdialog.glade:2133 -msgid "Run 'nice' as cron job (default: enabled)" -msgstr "Kjør 'nice' som cron jobb (standard: aktivert)" +#: ../../qt4/settingsdialog.py:678 +msgid "Run 'nice':" +msgstr "" + +#: ../../qt4/settingsdialog.py:684 ../../qt4/settingsdialog.py:696 +msgid "as cron job" +msgstr "" + +#: ../../qt4/settingsdialog.py:687 ../../qt4/settingsdialog.py:702 +#: ../../qt4/settingsdialog.py:716 +msgid "on remote host" +msgstr "" + +#: ../../qt4/settingsdialog.py:690 +msgid "Run 'ionice':" +msgstr "" + +#: ../../qt4/settingsdialog.py:699 +msgid "when taking a manual snapshot" +msgstr "" -#: ../../kde4/settingsdialog.py:611 ../../gnome/settingsdialog.glade:2150 -msgid "Run 'ionice' as cron job (default: enabled)" +#: ../../qt4/settingsdialog.py:706 +msgid "Run 'rsync' with 'nocache':" msgstr "" -#: ../../kde4/settingsdialog.py:614 ../../gnome/settingsdialog.glade:2167 -msgid "Run 'ionice' when taking a manual snapshot (default: disabled)" +#: ../../qt4/settingsdialog.py:712 +msgid "on local machine" msgstr "" -#: ../../kde4/settingsdialog.py:617 ../../gnome/settingsdialog.glade:2184 -msgid "Run 'nice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:719 +msgid "Redirect stdout to /dev/null in cronjobs." msgstr "" -#: ../../kde4/settingsdialog.py:620 ../../gnome/settingsdialog.glade:2201 -msgid "Run 'ionice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:725 +msgid "Redirect stderr to /dev/null in cronjobs." msgstr "" -#: ../../kde4/settingsdialog.py:626 ../../gnome/settingsdialog.glade:2224 +#: ../../qt4/settingsdialog.py:734 msgid "Limit rsync bandwidth usage: " msgstr "" -#: ../../kde4/settingsdialog.py:629 ../../gnome/settingsdialog.glade:2259 +#: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" -#: ../../kde4/settingsdialog.py:634 ../../gnome/settingsdialog.glade:2280 +#: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "" -#: ../../kde4/settingsdialog.py:637 ../../gnome/settingsdialog.glade:2297 +#: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "" -#: ../../kde4/settingsdialog.py:640 ../../gnome/settingsdialog.glade:2314 +#: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute links)" msgstr "" -#: ../../kde4/settingsdialog.py:643 ../../gnome/settingsdialog.glade:2331 -msgid "Copy links (dereference symbolic links)" +#: ../../qt4/settingsdialog.py:834 +msgid "Paste additional options to rsync" msgstr "" -#: ../../kde4/snapshotsdialog.py:46 ../../kde4/snapshotsdialog.py:173 -#: ../../gnome/snapshotsdialog.glade:385 -msgid "Diff Options" -msgstr "Diff Valg" - -#: ../../kde4/snapshotsdialog.py:56 ../../gnome/snapshotsdialog.glade:314 -msgid "Command:" -msgstr "Kommando:" - -#: ../../kde4/snapshotsdialog.py:60 ../../gnome/snapshotsdialog.glade:322 -msgid "Parameters:" -msgstr "Parametere:" - -#: ../../kde4/snapshotsdialog.py:64 ../../gnome/snapshotsdialog.glade:334 -msgid "Use %1 and %2 for path parameters" -msgstr "Bruk %1 and %2 for path parameters" - -#: ../../kde4/snapshotsdialog.py:123 ../../gnome/snapshotsdialog.glade:184 -#: ../../gnome/snapshotsdialog.glade:186 -msgid "Delete" +#: ../../qt4/settingsdialog.py:837 +msgid "" +"Options must be quoted e.g. --exclude-from=\"/path/to/my exclude file\"." msgstr "" -#: ../../kde4/snapshotsdialog.py:128 ../../gnome/snapshotsdialog.glade:199 -#: ../../gnome/snapshotsdialog.glade:201 -msgid "Select All" +#: ../../qt4/settingsdialog.py:847 +msgid "Add prefix to SSH commands" msgstr "" -#: ../../kde4/snapshotsdialog.py:132 ../../gnome/snapshotsdialog.glade:88 -msgid "List only different snapshots" +#: ../../qt4/settingsdialog.py:850 +#, python-format +msgid "" +"Prefix to run before every command on remote host.\n" +"Variables need to be escaped with \\$FOO.\n" +"This doesn't touch rsync. So to add a prefix\n" +"for rsync use \"%(cb_rsync_options)s\" with\n" +"%(rsync_options_value)s\n" +"\n" +"%(default)s: %(def_value)s" msgstr "" -#: ../../kde4/snapshotsdialog.py:139 ../../gnome/snapshotsdialog.glade:110 -msgid "List only equal snapshots to: " +#: ../../qt4/settingsdialog.py:858 ../../qt4/settingsdialog.py:1691 +msgid "default" msgstr "" -#: ../../kde4/snapshotsdialog.py:149 ../../gnome/snapshotsdialog.glade:146 -msgid "Deep check (more accurate, but slow)" +#: ../../qt4/settingsdialog.py:875 +msgid "Restore Config" msgstr "" -#: ../../kde4/snapshotsdialog.py:174 -msgid "Go To" -msgstr "Gå Til" - -#: ../../gnome/logviewdialog.glade:9 -msgid "Log View" +#: ../../qt4/settingsdialog.py:891 +msgid "" +"Full system backup can only create a snapshot to be restored to the same " +"physical disk(s) with the same disk partitioning as from the source; " +"restoring to new physical disks or the same disks with different " +"partitioning will yield a potentially broken and unusable system.\n" +"\n" +"Full system backup will override some settings that may have been " +"customized. Continue?" msgstr "" -#: ../../gnome/logviewdialog.glade:179 -msgid "scroll down automatic" +#: ../../qt4/settingsdialog.py:922 +msgid "New profile" msgstr "" -#: ../../gnome/mainwindow.glade:7 -msgid "Back In Time" -msgstr "Tilbake I Tiden" +#: ../../qt4/settingsdialog.py:938 +msgid "Rename profile" +msgstr "Omdøp profil" -#: ../../gnome/mainwindow.glade:45 -msgid "Backup Now" -msgstr "Ta sikkerhetskopi nå" +#: ../../qt4/settingsdialog.py:952 +#, python-format +msgid "Are you sure you want to delete the profile \"%s\" ?" +msgstr "Er du sikker på at du vil slette profilen «% s\"?" -#: ../../gnome/mainwindow.glade:171 -msgid "Shutdown" +#: ../../qt4/settingsdialog.py:1191 +msgid "" +"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " +"*/3 for periodic backups every 3 hours" msgstr "" -#: ../../gnome/mainwindow.glade:287 -msgid "Parent folder" -msgstr "Forelder mappe" +#: ../../qt4/settingsdialog.py:1489 +msgid "Exclude pattern" +msgstr "Utelukk mønster" + +#: ../../qt4/settingsdialog.py:1502 +msgid "Exclude file" +msgstr "Ekskluder fil" + +#: ../../qt4/settingsdialog.py:1506 +msgid "Exclude folder" +msgstr "Ekskludér katalog" -#: ../../gnome/mainwindow.glade:327 -msgid "Hidden files" -msgstr "Skjulte filer" +#: ../../qt4/settingsdialog.py:1525 +msgid "Include file" +msgstr "" -#: ../../gnome/mainwindow.glade:451 +#: ../../qt4/settingsdialog.py:1533 ../../qt4/settingsdialog.py:1553 +#, python-format msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +"\"%s\" is a symlink. The linked target will not be backed up until you " +"include it, too.\n" +"Would you like to include the symlinks target instead?" msgstr "" -#: ../../gnome/settingsdialog.glade:287 -msgid "Where to save snapshots" -msgstr "Hvor å lagre øyeblikksbilde" +#: ../../qt4/settingsdialog.py:1545 +msgid "Include folder" +msgstr "Inkludér katalog" -#: ../../gnome/settingsdialog.glade:483 -msgid "Private key:" -msgstr "" +#: ../../qt4/settingsdialog.py:1572 +msgid "Are you sure you want to change snapshots folder ?" +msgstr "Er du sikker på at vil bytte øyeblikksbilder mappen ?" -#: ../../gnome/settingsdialog.glade:534 -msgid "Advanced SSH Settings" +#: ../../qt4/settingsdialog.py:1688 +msgid "enabled" msgstr "" -#: ../../gnome/settingsdialog.glade:552 -msgid "SSH Settings" +#: ../../qt4/settingsdialog.py:1690 +msgid "disabled" msgstr "" -#: ../../gnome/settingsdialog.glade:815 -msgid "Password" +#: ../../qt4/settingsdialog.py:1715 +msgid "Restore Settings" msgstr "" -#: ../../gnome/settingsdialog.glade:930 -msgid "Profile Id:" +#: ../../qt4/settingsdialog.py:1732 +msgid " and add your user to group 'fuse'" msgstr "" -#: ../../gnome/settingsdialog.glade:1115 +#: ../../qt4/settingsdialog.py:1736 +#, python-format msgid "" -"hours seperate by comma ( e.g. 8,12,18,23) or */3 for periodic backups every " -"3 hours (cron style)" +"Please navigate to the snapshot from which you want to restore %(appName)s's " +"configuration. The path may look like: \n" +"%(samplePath)s\n" +"\n" +"If your snapshots are on a remote drive or if they are encrypted you need to " +"manually mount them first. If you use Mode SSH you also may need to set up " +"public key login to the remote host%(addFuse)s.\n" +"Take a look at 'man backintime'." msgstr "" -#: ../../gnome/settingsdialog.glade:1163 -msgid "Schedule" -msgstr "Timeplan" +#: ../../qt4/settingsdialog.py:1794 ../../qt4/settingsdialog.py:1854 +msgid "No config found" +msgstr "" + +#: ../../qt4/snapshotsdialog.py:49 ../../qt4/snapshotsdialog.py:173 +msgid "Diff Options" +msgstr "Diff Valg" + +#: ../../qt4/snapshotsdialog.py:56 +msgid "Command:" +msgstr "Kommando:" + +#: ../../qt4/snapshotsdialog.py:60 +msgid "Parameters:" +msgstr "Parametere:" + +#: ../../qt4/snapshotsdialog.py:64 +msgid "Use %1 and %2 for path parameters" +msgstr "Bruk %1 and %2 for path parameters" + +#: ../../qt4/snapshotsdialog.py:106 +msgid "List only different snapshots" +msgstr "" -#: ../../gnome/settingsdialog.glade:1363 -msgid "Highly recommended:" +#: ../../qt4/snapshotsdialog.py:113 +msgid "List only equal snapshots to: " msgstr "" -#: ../../gnome/settingsdialog.glade:1377 -msgid "label" +#: ../../qt4/snapshotsdialog.py:123 +msgid "Deep check (more accurate, but slow)" msgstr "" -#: ../../gnome/settingsdialog.glade:1755 -msgid "week(s)" +#: ../../qt4/snapshotsdialog.py:144 +msgid "Delete" msgstr "" -#: ../../gnome/settingsdialog.glade:2069 -msgid "Log level:" +#: ../../qt4/snapshotsdialog.py:148 +msgid "Select All" msgstr "" -#: ../../gnome/settingsdialog.glade:2121 +#: ../../qt4/snapshotsdialog.py:161 +msgid "Diff" +msgstr "Diff" + +#: ../../qt4/snapshotsdialog.py:172 +msgid "Go To" +msgstr "Gå Til" + +#: ../../qt4/snapshotsdialog.py:326 +msgid "You can't compare a snapshot to itself" +msgstr "Du kan ikke sammenlikne et øyeblikksbilde med seg selv" + +#: ../../qt4/snapshotsdialog.py:333 +#, python-format +msgid "Command not found: %s" +msgstr "Kommando ikke funnet: %s" + +#: ../../qt4/snapshotsdialog.py:354 +#, python-format msgid "" -"Change these options only if you really know what you are doing !" +"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" msgstr "" -#: ../../gnome/snapshotsdialog.glade:263 -msgid "Diff with" -msgstr "Diff med" +#: ../../qt4/snapshotsdialog.py:357 +#, python-format +msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +msgstr "" -#: ../../gnome/textinputdialog.glade:7 -msgid "Pattern" -msgstr "Mønster" +#: ../../qt4/snapshotsdialog.py:359 +msgid "WARNING: This can not be revoked!" +msgstr "" -#: ../../gnome/textinputdialog.glade:70 -msgid "Text" +#: ../../qt4/snapshotsdialog.py:374 +#, python-format +msgid "Exclude \"%s\" from future snapshots?" msgstr "" diff -Nru backintime-1.0.36/common/po/nl.po backintime-1.1.12/common/po/nl.po --- backintime-1.0.36/common/po/nl.po 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/po/nl.po 2016-01-11 18:07:58.000000000 +0000 @@ -7,206 +7,238 @@ msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2013-11-09 22:34+0100\n" -"PO-Revision-Date: 2014-03-28 14:08+0000\n" -"Last-Translator: JL \n" +"POT-Creation-Date: 2015-12-19 00:47+0100\n" +"PO-Revision-Date: 2015-12-28 15:44+0000\n" +"Last-Translator: rob \n" "Language-Team: Dutch \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2014-08-06 10:20+0000\n" -"X-Generator: Launchpad (build 17147)\n" +"X-Launchpad-Export-Date: 2016-01-11 17:52+0000\n" +"X-Generator: Launchpad (build 17881)\n" -#: ../../common/config.py:72 +#: ../../common/configfile.py:60 +#, python-format +msgid "Failed to save config: %s" +msgstr "Kon volgende configuratie niet opslaan: %s" + +#: ../../common/configfile.py:78 +#, python-format +msgid "Failed to load config: %s" +msgstr "Kon volgende configuratie niet laden: %s" + +#: ../../common/configfile.py:352 ../../common/configfile.py:414 +#, python-format +msgid "Profile \"%s\" already exists !" +msgstr "Profiel \"%s\" bestaat al!" + +#: ../../common/configfile.py:383 +msgid "You can't remove the last profile !" +msgstr "U kunt het laatste profiel niet verwijderen!" + +#: ../../common/config.py:76 msgid "Disabled" msgstr "Uitgeschakeld" -#: ../../common/config.py:73 +#: ../../common/config.py:77 msgid "At every boot/reboot" msgstr "Bij elke start/herstart" -#: ../../common/config.py:74 +#: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Elke 5 minuten" -#: ../../common/config.py:75 +#: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Elke 10 minuten" -#: ../../common/config.py:76 +#: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "Elke 30 minuten" -#: ../../common/config.py:77 +#: ../../common/config.py:81 msgid "Every hour" msgstr "Elk uur" -#: ../../common/config.py:78 +#: ../../common/config.py:82 msgid "Every 2 hours" msgstr "Elke 2 uren" -#: ../../common/config.py:79 +#: ../../common/config.py:83 msgid "Every 4 hours" msgstr "Elke 4 uren" -#: ../../common/config.py:80 +#: ../../common/config.py:84 msgid "Every 6 hours" msgstr "Elke 6 uren" -#: ../../common/config.py:81 +#: ../../common/config.py:85 msgid "Every 12 hours" msgstr "Elke 12 uren" -#: ../../common/config.py:82 +#: ../../common/config.py:86 msgid "Custom Hours" msgstr "Aangepaste uren" -#: ../../common/config.py:83 +#: ../../common/config.py:87 msgid "Every Day" msgstr "Elke dag" -#: ../../common/config.py:84 -msgid "Daily (anacron)" -msgstr "Dagelijks (anacron)" +#: ../../common/config.py:88 +msgid "Repeatedly (anacron)" +msgstr "Herhaaldelijk (anacron)" -#: ../../common/config.py:85 +#: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "Wanneer er een extern medium aangesloten wordt (udev)" -#: ../../common/config.py:86 +#: ../../common/config.py:90 msgid "Every Week" msgstr "Elke week" -#: ../../common/config.py:87 +#: ../../common/config.py:91 msgid "Every Month" msgstr "Elke maand" -#: ../../common/config.py:91 +#: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Dag(en)" -#: ../../common/config.py:92 +#: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Week/weken" -#: ../../common/config.py:93 +#: ../../common/config.py:97 msgid "Year(s)" msgstr "Jaar/jaren" -#: ../../common/config.py:100 +#: ../../common/config.py:101 +msgid "Hour(s)" +msgstr "Uur/uren" + +#: ../../common/config.py:104 +msgid "Month(s)" +msgstr "Maand(en)" + +#: ../../common/config.py:126 ../../qt4/settingsdialog.py:551 msgid " EXPERIMENTAL!" msgstr " EXPERIMENTEEL!" -#: ../../common/config.py:103 +#: ../../common/config.py:129 msgid "Local" msgstr "Lokaal" -#: ../../common/config.py:104 +#: ../../common/config.py:130 msgid "SSH" msgstr "SSH" -#: ../../common/config.py:104 ../../common/config.py:106 -#: ../../gnome/settingsdialog.py:475 ../../kde4/settingsdialog.py:1325 +#: ../../common/config.py:130 ../../common/config.py:132 +#: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "SSH-privésleutel" -#: ../../common/config.py:105 +#: ../../common/config.py:131 msgid "Local encrypted" msgstr "Lokaal versleuteld" -#: ../../common/config.py:105 ../../common/config.py:106 +#: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "Versleuteling" -#: ../../common/config.py:106 +#: ../../common/config.py:132 msgid "SSH encrypted" msgstr "SSH-versleuteld" -#: ../../common/config.py:112 +#: ../../common/config.py:135 msgid "Default" -msgstr "Standaard" +msgstr "Standaardwaarde" -#: ../../common/config.py:113 +#: ../../common/config.py:136 msgid "AES128-CTR" msgstr "AES128-CTR" -#: ../../common/config.py:114 +#: ../../common/config.py:137 msgid "AES192-CTR" msgstr "AES192-CTR" -#: ../../common/config.py:115 +#: ../../common/config.py:138 msgid "AES256-CTR" msgstr "AES256-CTR" -#: ../../common/config.py:116 +#: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "ARCFOUR256" -#: ../../common/config.py:117 +#: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "ARCFOUR128" -#: ../../common/config.py:118 +#: ../../common/config.py:141 msgid "AES128-CBC" msgstr "AES128-CBC" -#: ../../common/config.py:119 +#: ../../common/config.py:142 msgid "3DES-CBC" msgstr "3DES-CBC" -#: ../../common/config.py:120 +#: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "Blowfish-CBC" -#: ../../common/config.py:121 +#: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "Cast128-CBC" -#: ../../common/config.py:122 +#: ../../common/config.py:145 msgid "AES192-CBC" msgstr "AES192-CBC" -#: ../../common/config.py:123 +#: ../../common/config.py:146 msgid "AES256-CBC" msgstr "AES256-CBC" -#: ../../common/config.py:124 +#: ../../common/config.py:147 msgid "ARCFOUR" msgstr "ARCFOUR" -#: ../../common/config.py:129 +#: ../../common/config.py:153 msgid "Main profile" msgstr "Hoofdprofiel" -#: ../../common/config.py:256 ../../common/config.py:275 -#: ../../common/config.py:286 ../../common/config.py:291 +#: ../../common/config.py:289 ../../common/config.py:296 +#: ../../common/config.py:307 ../../common/config.py:312 +#: ../../qt4/qt4systrayicon.py:61 #, python-format msgid "Profile: \"%s\"" msgstr "Profiel: \"%s\"" -#: ../../common/config.py:256 +#: ../../common/config.py:289 msgid "Snapshots folder is not valid !" msgstr "Reservekopiemap is niet geldig!" -#: ../../common/config.py:275 +#: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "Selecteer tenminste één map om een reservekopie te kunnen maken !" -#: ../../common/config.py:286 +#: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "U kunt de reservekopiemap niet toevoegen!" -#: ../../common/config.py:291 +#: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "U kunt geen submap van de reservekopiemap toevoegen!" -#: ../../common/config.py:361 +#: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s is geen map!" -#: ../../common/config.py:376 ../../common/config.py:389 +#: ../../common/config.py:380 +msgid "Host/User/Profile-ID must not be empty!" +msgstr "Gastcomputer/Gebruiker/Profiel-ID mag niet leeg zijn!" + +#: ../../common/config.py:388 ../../common/config.py:420 #, python-format msgid "" "Can't write to: %s\n" @@ -215,7 +247,46 @@ "Kan niet schrijven naar: %s\n" "Heeft u schrijfrechten?" -#: ../../common/config.py:1286 +#: ../../common/config.py:400 +#, python-format +msgid "" +"Destination filesystem for '%(path)s' is formatted with FAT which doesn't " +"support hard-links. Please use a native Linux filesystem." +msgstr "" +"Doelbestandssysteem voor '%(path)s' is geformatteerd als FAT dat geen harde " +"links ondersteunt. Gebruik hiervoor in de plaats a.u.b een Linux-" +"bestandssysteem." + +#: ../../common/config.py:405 +#, python-format +msgid "" +"Destination filsystem for '%(path)s' is a SMB mounted share. Please make " +"sure the remote SMB server supports symlinks or activate '%(copyLinks)s' in " +"'%(expertOptions)s'." +msgstr "" +"Doelbestandssysteem voor '%(path)s' is een aangekoppeld SMB-netwerk. Zorg er " +"a.u.b. voor dat de SMB-server op afstand symbolische links ondersteunt of " +"activeer '%(copyLinks)s' in '%(expertOptions)s'." + +#: ../../common/config.py:408 ../../qt4/settingsdialog.py:815 +msgid "Copy links (dereference symbolic links)" +msgstr "Links kopiëren (symbolische links dereferentie)" + +#: ../../common/config.py:409 ../../qt4/settingsdialog.py:669 +msgid "Expert Options" +msgstr "Geavanceerde opties" + +#: ../../common/config.py:411 +#, python-format +msgid "" +"Destination filesystem for '%(path)s is a sshfs mounted share. sshfs doesn't " +"support hard-links. Please use mode 'SSH' instead." +msgstr "" +"Doelbestandssysteem voor '%(path)s' is een aangekoppeld sshfs-netwerk dat " +"geen harde links ondersteunt. Gebruik hiervoor in de plaats a.u.b. de 'SSH-" +"modus'." + +#: ../../common/config.py:1407 msgid "" "Can't find crontab.\n" "Are you sure cron is installed ?\n" @@ -226,56 +297,30 @@ "Indien dit niet het geval is, dient u het maken van automatische " "reservekopieën uit te schakelen." -#: ../../common/config.py:1338 +#: ../../common/config.py:1411 +msgid "Failed to write new crontab." +msgstr "Kon geen nieuwe crontab schrijven." + +#: ../../common/config.py:1505 +#, python-format +msgid "" +"Could not install Udev rule for profile %(profile_id)s. DBus Service " +"'%(dbus_interface)s' wasn't available" +msgstr "" +"Kon udev-regel voor profiel %(profile_id)s niet installeren. DBus-dienst " +"'%(dbus_interface)s' was niet beschikbaar" + +#: ../../common/config.py:1517 #, python-format msgid "Schedule udev doesn't work with mode %s" msgstr "Planning udev werkt niet bij modus %s" -#: ../../common/config.py:1342 +#: ../../common/config.py:1526 #, python-format msgid "Couldn't find UUID for \"%s\"" msgstr "Kon de unieke identificatiecode voor \"%s\" niet vinden" -#: ../../common/config.py:1379 -msgid "Failed to remove udev rules" -msgstr "Kon udev-regels niet verwijderen" - -#: ../../common/config.py:1385 -msgid "Failed to create udev rules" -msgstr "Kon udev-regels niet aanmaken" - -#: ../../common/config.py:1420 -msgid "" -"Can't find anacron.\n" -"Are you sure anacron is installed ?\n" -"If not you should disable daily anacron backups." -msgstr "" -"Kan anacron niet vinden.\n" -"Weet u zeker dat anacron geïnstalleerd is ?\n" -"Indien dit niet het geval is, dient u het maken van de dagelijkse anacron-" -"reservekopieën uit te schakelen." - -#: ../../common/config.py:1439 -msgid "Please provide your sudo password to install the udev rule." -msgstr "" -"Voer a.u.b. uw beheerderswachtwoord in om de udev-regel te installeren." - -#: ../../common/config.py:1445 -msgid "Please provide your sudo password to remove unused udev rules." -msgstr "" -"Voer a.u.b. uw beheerderswachtwoord in om ongebruikte udev-regels te " -"verwijderen." - -#: ../../common/configfile.py:253 ../../common/configfile.py:315 -#, python-format -msgid "Profile \"%s\" already exists !" -msgstr "Profiel \"%s\" bestaat al!" - -#: ../../common/configfile.py:284 -msgid "You can't remove the last profile !" -msgstr "U kunt het laatste profiel niet verwijderen!" - -#: ../../common/encfstools.py:95 +#: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" @@ -286,16 +331,16 @@ "\n" "%(error)s" -#: ../../common/encfstools.py:105 +#: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "Kan encfs-%s niet ontkoppelen" -#: ../../common/encfstools.py:149 +#: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "Configuratie voor versleutelde map niet gevonden." -#: ../../common/encfstools.py:153 +#: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" @@ -303,25 +348,25 @@ "\n" "Nieuwe versleutelde map aanmaken?" -#: ../../common/encfstools.py:154 +#: ../../common/encfstools.py:171 msgid "Cancel" msgstr "Annuleren" -#: ../../common/encfstools.py:157 +#: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "Wachtwoord bevestigen" -#: ../../common/encfstools.py:161 +#: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "Wachtwoord komt niet overeen" -#: ../../common/encfstools.py:166 +#: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" "encfs werd niet gevonden. U kunt encfs o.a. installeren door de volgende " "opdracht uit te voeren: 'apt-get install encfs'" -#: ../../common/encfstools.py:174 ../../common/sshtools.py:207 +#: ../../common/encfstools.py:196 ../../common/sshtools.py:262 #, python-format msgid "" "%(user)s is not member of group 'fuse'.\n" @@ -331,9 +376,9 @@ "%(user)s is geen lid van de groep 'fuse'.\n" " Voer de opdracht 'sudo adduser %(user)s fuse' uit. Om de wijzigingen toe te " "passen dient u zich eerst af te melden en daarna weer aan te melden.\n" -"Bekijk de 'Backintime handleiding' voor verdere instructies." +"Bekijk de 'Back In Time-handleiding' voor verdere instructies." -#: ../../common/encfstools.py:189 +#: ../../common/encfstools.py:211 msgid "" "encfs version 1.7.2 and before has a bug with option --reverse. Please " "update encfs" @@ -341,13 +386,12 @@ "encfs-versie 1.7.2 en daarvoor hebben een fout met de optie --reverse. Werk " "encfs a.u.b. bij" -#: ../../common/encfstools.py:453 ../../common/encfstools.py:480 -#: ../../common/snapshots.py:982 ../../common/snapshots.py:1288 -#: ../../kde4/app.py:82 ../../gnome/mainwindow.glade:43 +#: ../../common/encfstools.py:512 ../../common/snapshots.py:1131 +#: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "Reservekopie maken" -#: ../../common/mount.py:195 +#: ../../common/mount.py:204 #, python-format msgid "" "Hash collision occurred in hash_id %s. Incrementing global value " @@ -356,47 +400,51 @@ "Er heeft een Hash collision plaatsgevonden in hash_id %s. Vergroot de " "globale waarde voor hash_collision en probeer het opnieuw." -#: ../../common/mount.py:246 +#: ../../common/mount.py:259 #, python-format msgid "mountpoint %s not empty." msgstr "koppelpunt-%s niet leeg." -#: ../../common/mount.py:286 +#: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "Time-out aankoppelprocesvergrendeling" -#: ../../common/password.py:425 +#: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "Profiel '%(profile)s': Voer wachtwoord in voor %(mode)s: " -#: ../../common/snapshots.py:171 ../../gnome/app.py:1127 -#: ../../kde4/app.py:1014 +#: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" -msgstr "Nu" +msgstr "Huidige schijfinhoud" -#: ../../common/snapshots.py:182 ../../gnome/gnometools.py:37 +#: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "MET FOUTEN!" -#: ../../common/snapshots.py:282 +#: ../../common/snapshots.py:344 msgid "" "### This log has been decoded with automatic search pattern\n" "### If some paths are not decoded you can manually decode them with:\n" msgstr "" -"### Dit log is gedecodeerd met automatisch zoekpatroon\n" +"### Dit logboek is gedecodeerd met automatisch zoekpatroon\n" "### Als sommige paden niet gedecodeerd zijn dan kunt u deze handmatig " "decoderen met:\n" -#: ../../common/snapshots.py:465 +#: ../../common/snapshots.py:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "MISLUKT" -#: ../../common/snapshots.py:564 +#: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" -msgstr "Herstel-rechten:" +msgstr "Rechten herstellen:" + +#: ../../common/snapshots.py:752 ../../qt4/app.py:377 ../../qt4/app.py:675 +#: ../../qt4/app.py:692 ../../qt4/qt4systrayicon.py:65 +msgid "Done" +msgstr "Voltooid" -#: ../../common/snapshots.py:739 +#: ../../common/snapshots.py:860 msgid "" "Back In Time changed its backup format.\n" "\n" @@ -407,7 +455,7 @@ "Uw oude reservekopieën kunnen overgezet worden naar dit nieuwe formaat. Wilt " "u dit?" -#: ../../common/snapshots.py:749 +#: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" @@ -425,7 +473,7 @@ "\n" "(Het programma kan er nog steeds onderscheid tussen blijven maken)" -#: ../../common/snapshots.py:752 +#: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" @@ -433,7 +481,7 @@ "Geen profielen gevonden. U dient de profielen eerst bij te werken en daarna " "Back In Time te herstarten" -#: ../../common/snapshots.py:803 +#: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" @@ -455,7 +503,7 @@ "profiel herstellen, er kunnen dan echter geen reservekopieën meer gemaakt " "worden" -#: ../../common/snapshots.py:812 +#: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" @@ -470,7 +518,7 @@ "U kunt de reservekopieën handmatig verplaatsen; \n" "wanneer u klaar bent dient u Back In Time te herstarten om door te gaan" -#: ../../common/snapshots.py:825 +#: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" @@ -480,7 +528,7 @@ "\n" "Back In Time zal nu doorgaan met het maken van reservekopieën zoals gepland" -#: ../../common/snapshots.py:830 +#: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" @@ -501,12 +549,12 @@ "Zo nee, dan zullen deze vragen opnieuw gesteld worden na het openen van Back " "In Time." -#: ../../common/snapshots.py:839 +#: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "" "Back In Time zal nu doorgaan met het maken van reservekopieën zoals gepland" -#: ../../common/snapshots.py:841 +#: ../../common/snapshots.py:953 msgid "" "Back In Time still cannot continue taking new snapshots.\n" "Restart Back In Time to see the questions again" @@ -515,7 +563,11 @@ "reservekopieën.\n" "Herstart Back In Time om de vragen opnieuw te zien" -#: ../../common/snapshots.py:913 +#: ../../common/snapshots.py:972 +msgid "Deferring backup while on battery" +msgstr "Maken van reservekopieën uitstellen indien op accu" + +#: ../../common/snapshots.py:1035 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it." @@ -523,119 +575,124 @@ "Kan reservekopiemap niet vinden.\n" "Als deze op een extern medium staat, gelieve dit aan te sluiten." -#: ../../common/snapshots.py:915 +#: ../../common/snapshots.py:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "Wacht %s seconde" msgstr[1] "Wacht %s seconden" -#: ../../common/snapshots.py:941 +#: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "Kon reservekopie %s niet maken!!!" -#: ../../common/snapshots.py:950 +#: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "Voltooien" -#: ../../common/snapshots.py:1088 +#: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "Kan deze map niet aanmaken: %s" -#: ../../common/snapshots.py:1107 +#: ../../common/snapshots.py:1217 msgid "..." msgstr "..." -#: ../../common/snapshots.py:1134 +#: ../../common/snapshots.py:1238 +#, python-format +msgid "Found leftover '%s' which can be continued." +msgstr "" + +#: ../../common/snapshots.py:1250 +#, python-format +msgid "Remove leftover '%s' folder from last run" +msgstr "" + +#: ../../common/snapshots.py:1263 #, python-format msgid "Can't remove folder: %s" msgstr "Kan deze map niet verwijderen: %s" -#: ../../common/snapshots.py:1219 +#: ../../common/snapshots.py:1340 #, python-format msgid "Compare with snapshot %s" msgstr "Met reservekopie %s vergelijken" -#: ../../common/snapshots.py:1248 +#: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "Harde links aanmaken" -#: ../../common/snapshots.py:1335 +#: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "Configuratiebestand opslaan..." -#: ../../common/snapshots.py:1341 +#: ../../common/snapshots.py:1445 msgid "Save permission ..." -msgstr "Schrijfrechten opslaan..." +msgstr "Rechten opslaan..." -#: ../../common/snapshots.py:1442 +#: ../../common/snapshots.py:1470 +msgid "Save permission over ssh failed. Retry normal method" +msgstr "Opslaan ssh-rechten mislukt. Probeer a.u.b. de normale methode" + +#: ../../common/snapshots.py:1521 #, python-format msgid "Can't rename %(new_path)s to %(path)s" msgstr "Kan %(new_path)s niet hernoemen naar %(path)s" -#: ../../common/snapshots.py:1562 -msgid "Remove old snapshots" -msgstr "Oude reservekopieën verwijderen" - -#: ../../common/snapshots.py:1586 ../../kde4/settingsdialog.py:501 -#: ../../gnome/settingsdialog.glade:1660 +#: ../../common/snapshots.py:1695 ../../common/snapshots.py:1728 +#: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "Slim verwijderen" -#: ../../common/snapshots.py:1591 +#: ../../common/snapshots.py:1704 +msgid "Remove old snapshots" +msgstr "Oude reservekopieën verwijderen" + +#: ../../common/snapshots.py:1733 msgid "Try to keep min free space" msgstr "Probeer een minimum aan vrije ruimte te houden" -#: ../../common/snapshots.py:1621 +#: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "Probeer een minimum van %d%% vrije inodes te houden" -#: ../../common/sshtools.py:106 +#: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "Kan %s niet aankoppelen" -#: ../../common/sshtools.py:113 +#: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "Kan sshfs-%s niet ontkoppelen" -#: ../../common/sshtools.py:187 -#, python-format -msgid "" -"Failed to unlock SSH private key:\n" -"Error: %s" -msgstr "" -"Ontgrendelen SSH-privésleutel mislukt:\n" -"Fout: %s" - -#: ../../common/sshtools.py:194 +#: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" -"Kon SSH-privésleute niet ontgrendelen. Het wachtwoord is ongeldig of is niet " -"beschikbaar voor cron." +"Kon SSH-privésleutel niet ontgrendelen. Het wachtwoord is ongeldig of is " +"niet beschikbaar voor cron." -#: ../../common/sshtools.py:199 +#: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" "sshfs werd niet gevonden. U kunt sshfs o.a. installeren door de volgende " "opdracht uit te voeren: 'apt-get install sshfs'" -#: ../../common/sshtools.py:217 +#: ../../common/sshtools.py:278 #, python-format msgid "" "Password-less authentication for %(user)s@%(host)s failed. Look at 'man " "backintime' for further instructions." msgstr "" "Authenticatie aanmelden zonder wachtwoord voor %(user)s@%(host)s is mislukt. " -"Bekijk de 'Backintime handleiding' voor verdere instructies." +"Bekijk de 'Back In Time-handleiding' voor verdere instructies." -#: ../../common/sshtools.py:229 +#: ../../common/sshtools.py:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" @@ -644,12 +701,12 @@ "Codering %(cipher)s mislukt voor %(host)s:\n" "%(err)s" -#: ../../common/sshtools.py:254 +#: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "%s is niet gevonden in de ssh_bekende_gastcomputers." -#: ../../common/sshtools.py:274 +#: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" @@ -658,7 +715,7 @@ "Pad op afstand bestaat maar is geen map:\n" " %s" -#: ../../common/sshtools.py:276 +#: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" @@ -667,7 +724,7 @@ "Pad op afstand is niet beschrijfbaar:\n" " %s" -#: ../../common/sshtools.py:278 +#: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" @@ -676,7 +733,7 @@ "Pad op afstand is niet uitvoerbaar:\n" " %s" -#: ../../common/sshtools.py:280 +#: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" @@ -685,14 +742,14 @@ "Kon geen pad op afstand aanmaken:\n" " %s" -#: ../../common/sshtools.py:302 +#: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" "Pingen van %s is mislukt. Gastcomputer is uitgeschakeld of er is een " "verkeerd adres gebruikt." -#: ../../common/sshtools.py:325 ../../common/sshtools.py:383 +#: ../../common/sshtools.py:423 ../../common/sshtools.py:553 #, python-format msgid "" "Remote host %(host)s doesn't support '%(command)s':\n" @@ -701,9 +758,9 @@ msgstr "" "Gastcomputer op afstand %(host)s ondersteunt geen '%(command)s':\n" "%(err)s\n" -"Bekijk de 'Backintime handleiding' voor verdere instructies" +"Bekijk de 'Back In Time-handleiding' voor verdere instructies" -#: ../../common/sshtools.py:387 +#: ../../common/sshtools.py:556 #, python-format msgid "" "Check commands on host %(host)s returned unknown error:\n" @@ -713,98 +770,160 @@ "Controleer de opdrachten op de gastcomputer. %(host)s gaf een onbekende fout " "aan:\n" "%(err)s\n" -"Bekijk de 'Backintime handleiding' voor verdere instructies" +"Bekijk de 'Back In Time-handleiding' voor verdere instructies" -#: ../../common/sshtools.py:400 +#: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "Gastcomputer op afstand %s ondersteunt geen harde links" -#: ../../gnome/app.py:185 ../../gnome/app.py:594 ../../gnome/app.py:608 -#: ../../kde4/app.py:299 ../../kde4/app.py:570 ../../kde4/app.py:587 -msgid "Done" -msgstr "Voltooid" +#: ../../qt4/app.py:81 +msgid "Refresh snapshots list" +msgstr "Reservekopielijst vernieuwen" + +#: ../../qt4/app.py:85 ../../qt4/app.py:890 +msgid "Snapshot Name" +msgstr "Naam reservekopie" + +#: ../../qt4/app.py:88 +msgid "Remove Snapshot" +msgstr "Reservekopie verwijderen" + +#: ../../qt4/app.py:91 +msgid "View Snapshot Log" +msgstr "Reservekopielogboek bekijken" + +#: ../../qt4/app.py:94 +msgid "View Last Log" +msgstr "Laatste logboek bekijken" + +#: ../../qt4/app.py:99 ../../qt4/settingsdialog.py:51 +msgid "Settings" +msgstr "Instellingen" + +#: ../../qt4/app.py:104 +msgid "Shutdown" +msgstr "Uitschakelen" + +#: ../../qt4/app.py:105 +msgid "Shutdown system after snapshot has finished." +msgstr "Computer uitschakelen wanneer de reservekopie voltooid is." -#: ../../gnome/app.py:189 ../../kde4/app.py:143 ../../kde4/app.py:159 -#: ../../gnome/mainwindow.glade:225 +#: ../../qt4/app.py:111 +msgid "Exit" +msgstr "Afsluiten" + +#: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 msgid "Help" msgstr "Hulp" -#: ../../gnome/app.py:191 ../../kde4/app.py:146 -#: ../../gnome/mainwindow.glade:223 +#: ../../qt4/app.py:122 +msgid "Config File Help" +msgstr "Configuratiebestand-hulp" + +#: ../../qt4/app.py:125 msgid "Website" msgstr "Website" -#: ../../gnome/app.py:192 ../../kde4/app.py:148 +#: ../../qt4/app.py:127 ../../qt4/app.py:982 +msgid "Changelog" +msgstr "Wijzigingslogboek" + +#: ../../qt4/app.py:129 msgid "FAQ" msgstr "FAQ" -#: ../../gnome/app.py:193 ../../kde4/app.py:150 +#: ../../qt4/app.py:131 msgid "Ask a question" msgstr "Een vraag stellen" -#: ../../gnome/app.py:194 ../../kde4/app.py:152 +#: ../../qt4/app.py:133 msgid "Report a bug" msgstr "Een fout melden" -#: ../../gnome/app.py:196 ../../kde4/app.py:155 +#: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "Info" -#: ../../gnome/app.py:202 ../../gnome/app.py:887 -#: ../../gnome/restoredialog.py:84 ../../gnome/snapshotsdialog.py:83 -#: ../../gnome/snapshotsdialog.py:244 ../../kde4/app.py:206 -#: ../../kde4/app.py:216 ../../kde4/restoredialog.py:68 -#: ../../kde4/snapshotsdialog.py:111 ../../kde4/snapshotsdialog.py:117 -#: ../../gnome/mainwindow.glade:350 ../../gnome/mainwindow.glade:352 -#: ../../gnome/snapshotsdialog.glade:169 ../../gnome/snapshotsdialog.glade:171 +#: ../../qt4/app.py:163 +msgid "Up" +msgstr "Omhoog" + +#: ../../qt4/app.py:174 ../../qt4/settingsdialog.py:1776 +msgid "Show hidden files" +msgstr "Verborgen bestanden tonen" + +#: ../../qt4/app.py:184 ../../qt4/app.py:199 ../../qt4/app.py:233 +#: ../../qt4/restoredialog.py:62 ../../qt4/settingsdialog.py:1818 +#: ../../qt4/snapshotsdialog.py:134 ../../qt4/snapshotsdialog.py:139 msgid "Restore" msgstr "Herstellen" -#: ../../gnome/app.py:203 ../../gnome/app.py:888 ../../gnome/gnometools.py:67 -#: ../../gnome/snapshotsdialog.py:84 ../../gnome/snapshotsdialog.py:245 -#: ../../kde4/app.py:208 ../../kde4/restoredialog.py:42 -#: ../../kde4/snapshotsdialog.py:113 +#: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 +#: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "Herstellen naar..." -#: ../../gnome/app.py:205 ../../gnome/app.py:896 ../../gnome/app.py:1146 -#: ../../kde4/app.py:1041 -#, python-format -msgid "Restore '%s'" -msgstr "'%s' herstellen" +#: ../../qt4/app.py:194 +msgid "Restore and delete new files" +msgstr "Nieuwe bestanden herstellen en verwijderen" -#: ../../gnome/app.py:207 ../../gnome/app.py:897 ../../gnome/app.py:1147 -#: ../../kde4/app.py:1042 +#: ../../qt4/app.py:201 #, python-format -msgid "Restore '%s' to ..." -msgstr "'%s' herstellen naar..." +msgid "" +"Restore selected file or folder.\n" +"If this button is grayed out this is most likely because \"%(now)s\" is " +"selected in left hand snapshots list." +msgstr "" +"Geselecteerd bestand of map herstellen.\n" +"Wanneer deze knop grijs gedimd is komt dat hoogstwaarschijnlijk omdat " +"\"%(now)s\" is geselecteerd in de reservekopielijst aan de linkerkant.\n" +"Deze knop zal weer geactiveerd worden wanneer u op een reservekopie in deze " +"reservekopielijst klikt." + +#: ../../qt4/app.py:206 ../../qt4/logviewdialog.py:67 +#: ../../qt4/qt4tools.py:160 ../../qt4/snapshotsdialog.py:96 +msgid "Snapshots" +msgstr "Reservekopieën" -#: ../../gnome/app.py:226 ../../kde4/app.py:235 +#: ../../qt4/app.py:213 +msgid "Snapshot" +msgstr "Reservekopie" + +#: ../../qt4/app.py:224 +msgid "View" +msgstr "Beeld" + +#: ../../qt4/app.py:277 msgid "Shortcuts" msgstr "Snelkoppelingen" -#: ../../gnome/app.py:249 -msgid "Name" -msgstr "Naam" - -#: ../../gnome/app.py:260 -msgid "Size" -msgstr "Grootte" - -#: ../../gnome/app.py:267 -msgid "Date" -msgstr "Datum" - -#: ../../gnome/app.py:286 ../../gnome/app.py:883 -#: ../../gnome/snapshotsdialog.py:116 ../../kde4/app.py:171 -#: ../../kde4/app.py:221 ../../kde4/snapshotsdialog.py:91 -#: ../../gnome/mainwindow.glade:366 ../../gnome/mainwindow.glade:368 -#: ../../gnome/snapshotsdialog.glade:8 -msgid "Snapshots" -msgstr "Reservekopieën" +#: ../../qt4/app.py:295 +msgid "" +"This folder doesn't exist\n" +"in the current selected snapshot!" +msgstr "" +"Deze map bestaat niet\n" +"in de huidige geselecteerde reservekopie!" + +#: ../../qt4/app.py:359 +msgid "Add to Include" +msgstr "Toevoegen om op te nemen" -#: ../../gnome/app.py:348 ../../kde4/app.py:362 +#: ../../qt4/app.py:360 +msgid "Add to Exclude" +msgstr "Toevoegen om uit te sluiten" + +#: ../../qt4/app.py:416 +#, python-format +msgid "" +"%(appName)s is not configured. Would you like to restore a previous " +"configuration?" +msgstr "" +"%(appName)s is niet geconfigureerd. Wilt u een eerdere configuratie " +"herstellen?" + +#: ../../qt4/app.py:440 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it and then press OK" @@ -813,443 +932,389 @@ "Als deze op een extern medium staat, gelieve dit aan te sluiten en op OK te " "drukken." -#: ../../gnome/app.py:611 ../../kde4/app.py:590 -msgid "Done, no backup needed" -msgstr "Klaar, geen reservekopie nodig" +#: ../../qt4/app.py:473 +msgid "" +"If you close this window Back In Time will not be able to shutdown your " +"system when the snapshot has finished.\n" +"Do you really want to close?" +msgstr "" +"Als u dit venster sluit, zal Back In Time de computer niet uit kunnen " +"schakelen wanneer de reservekopie voltooid is.\n" +"Weet u zeker dat u het wilt sluiten?" -#: ../../gnome/app.py:619 ../../kde4/app.py:598 +#: ../../qt4/app.py:667 ../../qt4/app.py:703 msgid "Working:" msgstr "Bezig met:" -#: ../../gnome/app.py:623 ../../kde4/app.py:602 +#: ../../qt4/app.py:695 +msgid "Done, no backup needed" +msgstr "Klaar, geen reservekopie nodig" + +#: ../../qt4/app.py:707 msgid "Error:" msgstr "Fout:" -#: ../../gnome/app.py:636 ../../kde4/app.py:649 +#: ../../qt4/app.py:726 ../../qt4/qt4systrayicon.py:153 +msgid "Sent:" +msgstr "Verzonden:" + +#: ../../qt4/app.py:727 ../../qt4/qt4systrayicon.py:154 +msgid "Speed:" +msgstr "Snelheid:" + +#: ../../qt4/app.py:728 ../../qt4/qt4systrayicon.py:155 +msgid "ETA:" +msgstr "Geschatte aankomsttijd:" + +#: ../../qt4/app.py:777 msgid "Global" msgstr "Algemeen" -#: ../../gnome/app.py:637 ../../kde4/app.py:650 +#: ../../qt4/app.py:778 msgid "Root" -msgstr "Root" +msgstr "Hoofdmap" -#: ../../gnome/app.py:638 ../../kde4/app.py:651 +#: ../../qt4/app.py:779 msgid "Home" msgstr "Persoonlijke map" -#: ../../gnome/app.py:662 -msgid "Bookmarks" -msgstr "Bladwijzers" - -#: ../../gnome/app.py:675 ../../kde4/app.py:662 +#: ../../qt4/app.py:794 msgid "Backup folders" msgstr "Mappen om reservekopie van te maken" -#: ../../gnome/app.py:701 ../../kde4/app.py:734 -msgid "Today" -msgstr "Vandaag" +#: ../../qt4/app.py:849 +msgid "This is NOT a snapshot but a live view of your local files" +msgstr "" +"Dit is GEEN reservekopie maar een actuele weergave van uw lokale bestanden" -#: ../../gnome/app.py:705 ../../kde4/app.py:738 -msgid "Yesterday" -msgstr "Gisteren" +#: ../../qt4/app.py:860 ../../qt4/app.py:1476 +#, python-format +msgid "Last check %s" +msgstr "Laatste controle %s" -#: ../../gnome/app.py:709 ../../kde4/app.py:742 -msgid "This week" -msgstr "Deze week" +#: ../../qt4/app.py:928 +#, python-format +msgid "" +"Are you sure you want to remove the snapshot:\n" +"%s" +msgstr "" +"Weet u zeker dat u de volgende reservekopie wilt verwijderen?\n" +"%s" -#: ../../gnome/app.py:713 ../../kde4/app.py:746 -msgid "Last week" -msgstr "Afgelopen week" +#: ../../qt4/app.py:1004 +#, python-format +msgid "" +"Backup local files before overwriting or\n" +"removing with trailing '%(suffix)s'." +msgstr "" +"Maak reservekopie van lokale bestanden voordat u ze overschrijft of\n" +"verwijdert d.m.v. het plaatsen van '%(suffix)s' erachter." -#: ../../gnome/app.py:764 ../../kde4/app.py:398 +#: ../../qt4/app.py:1010 msgid "" -"If you close this window Back In Time will not be able to shutdown your " -"system when the snapshot has finished.\n" -"Do you really want to close?" +"Are you sure you want to remove all newer files in your original folder?" msgstr "" -"Als u dit venster sluit, zal Back In Time de computer niet uit kunnen " -"schakelen wanneer de reservekopie voltooid is.\n" -"Weet u zeker dat u het wilt sluiten?" +"Weet u zeker dat u alle nieuwere bestanden in de oorspronkelijke map wilt " +"verwijderen?" -#: ../../gnome/app.py:881 ../../gnome/snapshotsdialog.py:238 -msgid "Open" -msgstr "Openen..." +#: ../../qt4/app.py:1014 +msgid "" +"WARNING: deleting files in filesystem root could break your whole system!!!" +msgstr "" +"WAARSCHUWING: het verwijderen van bestanden uit de hoofdmap kan uw hele " +"systeem ruïneren!!!" -#: ../../gnome/app.py:1056 ../../kde4/app.py:90 ../../kde4/app.py:805 -#: ../../gnome/mainwindow.glade:73 ../../gnome/mainwindow.glade:75 -msgid "Snapshot Name" -msgstr "Naam reservekopie" +#: ../../qt4/app.py:1016 +msgid "Files to be restored:" +msgstr "Bestanden om te herstellen:" -#: ../../gnome/app.py:1075 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +#: ../../qt4/app.py:1031 +msgid "Do you really want to restore this files(s):" msgstr "" -"Weet u zeker dat u deze reservekopie wilt verwijderen?\n" -"%s" +"Weet u zeker dat u het volgende bestand of bestanden wilt herstellen:" -#: ../../gnome/app.py:1123 ../../kde4/app.py:1010 +#: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "Reservekopie: %s" -#: ../../gnome/app.py:1124 ../../kde4/app.py:1011 +#: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "Reservekopie gemaakt op %s bekijken" -#: ../../gnome/app.py:1126 ../../kde4/app.py:1013 +#: ../../qt4/app.py:1229 msgid "View the current disk content" -msgstr "Huidige schijfinhoud bekijken" +msgstr "Overzicht huidige schijfinhoud" + +#: ../../qt4/app.py:1268 +#, python-format +msgid "Restore '%s'" +msgstr "'%s' herstellen" + +#: ../../qt4/app.py:1269 +#, python-format +msgid "Restore '%s' to ..." +msgstr "'%s' herstellen naar..." + +#: ../../qt4/app.py:1270 +#, python-format +msgid "Restore '%s' and delete new files" +msgstr "'%s' herstellen en nieuwe bestanden verwijderen" + +#: ../../qt4/app.py:1368 ../../qt4/app.py:1385 +msgid "Authors" +msgstr "Schrijvers" -#: ../../gnome/logviewdialog.py:106 ../../gnome/settingsdialog.py:414 -#: ../../kde4/logviewdialog.py:83 ../../kde4/settingsdialog.py:590 +#: ../../qt4/app.py:1369 ../../qt4/app.py:1388 +msgid "Translations" +msgstr "Vertalingen" + +#: ../../qt4/app.py:1370 ../../qt4/app.py:1391 +msgid "License" +msgstr "Licentie" + +#: ../../qt4/logviewdialog.py:49 +msgid "Last Log View" +msgstr "Laatste logboekweergave" + +#: ../../qt4/logviewdialog.py:51 +msgid "Snapshot Log View" +msgstr "Reservekopielogboekweergave" + +#: ../../qt4/logviewdialog.py:59 ../../qt4/settingsdialog.py:59 +#: ../../qt4/settingsdialog.py:274 ../../qt4/settingsdialog.py:1899 +msgid "Profile:" +msgstr "Profiel:" + +#: ../../qt4/logviewdialog.py:81 +msgid "Filter:" +msgstr "Filter:" + +#: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 msgid "All" msgstr "Alles" -#: ../../gnome/logviewdialog.py:107 ../../gnome/settingsdialog.py:412 -#: ../../kde4/logviewdialog.py:84 ../../kde4/settingsdialog.py:588 +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 +#: ../../qt4/settingsdialog.py:657 msgid "Errors" msgstr "Fouten" -#: ../../gnome/logviewdialog.py:112 ../../kde4/logviewdialog.py:89 +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 msgid "Changes" msgstr "Wijzigingen" -#: ../../gnome/logviewdialog.py:115 ../../kde4/logviewdialog.py:92 +#: ../../qt4/logviewdialog.py:92 msgid "Informations" msgstr "Informatie" -#: ../../gnome/settingsdialog.py:235 ../../kde4/settingsdialog.py:387 -msgid "Include files and folders" -msgstr "Bestanden en mappen opnemen" +#: ../../qt4/logviewdialog.py:101 +msgid "[E] Error, [I] Information, [C] Change" +msgstr "[E] Fout, [I] Informatie, [C] Wijziging" -#: ../../gnome/settingsdialog.py:264 -msgid "Exclude patterns, files or folders" -msgstr "Patronen, bestanden en mappen uitsluiten" +#: ../../qt4/logviewdialog.py:104 +msgid "decode paths" +msgstr "decodeerpaden" -#: ../../gnome/settingsdialog.py:411 ../../kde4/settingsdialog.py:587 -msgid "None" -msgstr "Geen" +#: ../../qt4/messagebox.py:56 +msgid "Error" +msgstr "Fout" + +#: ../../qt4/messagebox.py:62 ../../qt4/messagebox.py:68 +msgid "Question" +msgstr "Vraag" + +#: ../../qt4/qt4systrayicon.py:69 +msgid "Start BackInTime" +msgstr "Back InTime starten" -#: ../../gnome/settingsdialog.py:413 ../../kde4/settingsdialog.py:589 -msgid "Changes & Errors" -msgstr "Wijzigingen & fouten" +#: ../../qt4/qt4systrayicon.py:124 +msgid "Working..." +msgstr "Bezig met..." -#: ../../gnome/settingsdialog.py:458 -msgid "Snapshots folder" -msgstr "Reservekopiemap" +#: ../../qt4/qt4tools.py:178 +msgid "Today" +msgstr "Vandaag" -#: ../../gnome/settingsdialog.py:466 ../../kde4/settingsdialog.py:1314 -msgid "Are you sure you want to change snapshots folder ?" -msgstr "Weet u zeker dat u de reservekopiemap wilt wijzigen?" +#: ../../qt4/qt4tools.py:183 +msgid "Yesterday" +msgstr "Gisteren" -#: ../../gnome/settingsdialog.py:901 ../../kde4/settingsdialog.py:914 -msgid "" -"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " -"*/3 for periodic backups every 3 hours" -msgstr "" -"Aangepaste uren kunnen alleen een door een komma gescheiden lijst met uren " -"zijn (b.v. 8,12,18,23) of */3 om elke 3 uren een periodieke reservekopie te " -"maken" - -#: ../../gnome/settingsdialog.py:1141 ../../kde4/settingsdialog.py:653 -msgid "New profile" -msgstr "Nieuw profiel" - -#: ../../gnome/settingsdialog.py:1155 ../../kde4/settingsdialog.py:669 -msgid "Rename profile" -msgstr "Profiel hernoemen" - -#: ../../gnome/settingsdialog.py:1167 ../../kde4/settingsdialog.py:683 -#, python-format -msgid "Are you sure you want to delete the profile \"%s\" ?" -msgstr "Weet u zeker dat u het profiel \"%s\" wilt verwijderen ?" - -#: ../../gnome/settingsdialog.py:1173 ../../kde4/settingsdialog.py:1292 -msgid "Include folder" -msgstr "Volgende map opnemen" - -#: ../../gnome/settingsdialog.py:1193 ../../kde4/settingsdialog.py:1278 -msgid "Include file" -msgstr "Bestand opnemen" - -#: ../../gnome/settingsdialog.py:1235 ../../kde4/settingsdialog.py:1241 -msgid "Exclude pattern" -msgstr "Uit te sluiten patroon" - -#: ../../gnome/settingsdialog.py:1240 ../../kde4/settingsdialog.py:1251 -msgid "Exclude patterns can't contain ':' char !" -msgstr "Uit te sluiten patronen mogen geen ':' teken bevatten!" - -#: ../../gnome/settingsdialog.py:1246 ../../kde4/settingsdialog.py:1257 -msgid "Exclude file" -msgstr "Selecteer een bestand om uit te sluiten van de reservekopie" - -#: ../../gnome/settingsdialog.py:1257 ../../kde4/settingsdialog.py:1261 -msgid "Exclude folder" -msgstr "Selecteer een map om uit te sluiten van de reservekopie" - -#: ../../gnome/snapshotsdialog.py:240 -msgid "Jump to" -msgstr "Ga naar" - -#: ../../gnome/snapshotsdialog.py:248 ../../kde4/snapshotsdialog.py:164 -msgid "Diff" -msgstr "Verschil" - -#: ../../gnome/snapshotsdialog.py:277 ../../kde4/snapshotsdialog.py:339 -msgid "You can't compare a snapshot to itself" -msgstr "U kunt een reservekopie niet met zichzelf vergelijken" - -#: ../../gnome/snapshotsdialog.py:284 ../../kde4/snapshotsdialog.py:346 -#, python-format -msgid "Command not found: %s" -msgstr "Opdracht niet gevonden: %s" - -#: ../../gnome/snapshotsdialog.py:307 ../../kde4/snapshotsdialog.py:367 -#, python-format -msgid "" -"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" -msgstr "" -"Weet u zeker dat u \"%(file)s\" uit reservekopie \"%(snapshot_id)s wilt " -"verwijderen?\n" - -#: ../../gnome/snapshotsdialog.py:310 ../../kde4/snapshotsdialog.py:370 -#, python-format -msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" -msgstr "" -"Weet u zeker dat u \"%(file)s\" uit %(count)d reservekopieën wilt " -"verwijderen?\n" - -#: ../../gnome/snapshotsdialog.py:312 ../../kde4/snapshotsdialog.py:372 -msgid "WARNING: This can not be revoked!" -msgstr "WAARSCHUWING: Dit kan niet ongedaan worden gemaakt!" - -#: ../../gnome/snapshotsdialog.py:317 ../../kde4/snapshotsdialog.py:377 -#, python-format -msgid "Exclude \"%s\" from future snapshots?" -msgstr "\"%s\" uitsluiten van toekomstige reservekopieën?" - -#: ../../kde4/app.py:86 ../../gnome/mainwindow.glade:58 -#: ../../gnome/mainwindow.glade:60 -msgid "Refresh snapshots list" -msgstr "Reservekopielijst vernieuwen" - -#: ../../kde4/app.py:94 ../../gnome/mainwindow.glade:88 -#: ../../gnome/mainwindow.glade:90 -msgid "Remove Snapshot" -msgstr "Reservekopie verwijderen" - -#: ../../kde4/app.py:98 ../../gnome/mainwindow.glade:105 -msgid "View Snapshot Log" -msgstr "Reservekopielogboek bekijken" - -#: ../../kde4/app.py:102 ../../gnome/mainwindow.glade:121 -msgid "View Last Log" -msgstr "Laatste logboek bekijken" - -#: ../../kde4/app.py:108 ../../kde4/settingsdialog.py:69 -#: ../../gnome/mainwindow.glade:144 ../../gnome/mainwindow.glade:146 -#: ../../gnome/settingsdialog.glade:7 -msgid "Settings" -msgstr "Instellingen" - -#: ../../kde4/app.py:124 ../../gnome/mainwindow.glade:169 -msgid "Shutdown system after snapshot has finished." -msgstr "Computer uitschakelen wanneer de reservekopie voltooid is." - -#: ../../kde4/app.py:131 ../../gnome/mainwindow.glade:184 -#: ../../gnome/mainwindow.glade:186 -msgid "Exit" -msgstr "Afsluiten" - -#: ../../kde4/app.py:186 ../../gnome/mainwindow.glade:289 -msgid "Up" -msgstr "Omhoog" - -#: ../../kde4/app.py:199 ../../gnome/mainwindow.glade:325 -msgid "Show hidden files" -msgstr "Verborgen bestanden weergeven" - -#: ../../kde4/app.py:244 -msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" -msgstr "" -"Deze map bestaat niet\n" -"in de huidige reservekopie !" - -#: ../../kde4/app.py:839 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" -msgstr "" -"Weet u zeker dat u de volgende reservekopie wilt verwijderen?\n" -"%s" - -#: ../../kde4/app.py:1140 ../../kde4/kde4systrayicon.py:117 -msgid "Working..." -msgstr "Bezig met..." - -#: ../../kde4/logviewdialog.py:55 -msgid "Error Log View" -msgstr "Foutenlogboekweergave" - -#: ../../kde4/logviewdialog.py:65 ../../kde4/settingsdialog.py:79 -#: ../../kde4/settingsdialog.py:293 ../../gnome/logviewdialog.glade:73 -#: ../../gnome/settingsdialog.glade:72 -msgid "Profile:" -msgstr "Profiel:" - -#: ../../kde4/logviewdialog.py:77 ../../gnome/logviewdialog.glade:110 -msgid "Filter:" -msgstr "Filter:" +#: ../../qt4/qt4tools.py:188 +msgid "This week" +msgstr "Deze week" -#: ../../kde4/logviewdialog.py:100 ../../gnome/logviewdialog.glade:169 -msgid "[E] Error, [I] Information, [C] Change" -msgstr "[E] Fout, [I] Informatie, [C] Wijziging" +#: ../../qt4/qt4tools.py:193 +msgid "Last week" +msgstr "Afgelopen week" -#: ../../kde4/logviewdialog.py:103 ../../gnome/logviewdialog.glade:195 -msgid "decode paths" -msgstr "decodeerpaden" +#: ../../qt4/restoredialog.py:75 +msgid "Show full Log" +msgstr "Volledig logboek tonen" -#: ../../kde4/settingsdialog.py:88 +#: ../../qt4/settingsdialog.py:68 msgid "Edit" msgstr "Bewerken" -#: ../../kde4/settingsdialog.py:106 ../../gnome/settingsdialog.glade:1207 +#: ../../qt4/settingsdialog.py:73 +msgid "Modify for Full System Backup" +msgstr "Aanpassen voor volledige systeemreservekopie" + +#: ../../qt4/settingsdialog.py:77 ../../qt4/settingsdialog.py:451 +msgid "Add" +msgstr "Toevoegen" + +#: ../../qt4/settingsdialog.py:81 ../../qt4/settingsdialog.py:408 +#: ../../qt4/settingsdialog.py:467 +msgid "Remove" +msgstr "Verwijderen" + +#: ../../qt4/settingsdialog.py:96 msgid "General" msgstr "Algemeen" -#: ../../kde4/settingsdialog.py:114 ../../gnome/settingsdialog.glade:199 +#: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "Modus:" -#: ../../kde4/settingsdialog.py:127 ../../kde4/settingsdialog.py:1311 +#: ../../qt4/settingsdialog.py:119 +#, python-format +msgid "" +"Warning: %(app)s uses EncFS for encryption. A recent security audit " +"revealed several possible attack vectors for this. Please take a look at 'A " +"NOTE ON SECURITY' in 'man backintime'." +msgstr "" +"Waarschuwing: %(app)s gebruikt EncFS voor versleuteling. Na een " +"recente veiligheidscontrole is gebleken dat er diverse kwetsbaarheden in " +"EncFS zitten. Bekijk a.u.b. de 'Back In Time-handleiding' over 'A NOTE ON " +"SECURITY'." + +#: ../../qt4/settingsdialog.py:129 ../../qt4/settingsdialog.py:1568 msgid "Where to save snapshots" msgstr "Waar wilt u de reservekopieën opslaan" -#: ../../kde4/settingsdialog.py:146 +#: ../../qt4/settingsdialog.py:145 +msgid "Folder" +msgstr "Map" + +#: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "SSH-instellingen" -#: ../../kde4/settingsdialog.py:158 ../../kde4/settingsdialog.py:283 -#: ../../gnome/settingsdialog.glade:323 ../../gnome/settingsdialog.glade:583 -#: ../../gnome/settingsdialog.glade:874 +#: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "Gastcomputer:" -#: ../../kde4/settingsdialog.py:163 ../../gnome/settingsdialog.glade:350 -#: ../../gnome/settingsdialog.glade:610 +#: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "Poort:" -#: ../../kde4/settingsdialog.py:168 ../../kde4/settingsdialog.py:288 -#: ../../gnome/settingsdialog.glade:377 ../../gnome/settingsdialog.glade:637 -#: ../../gnome/settingsdialog.glade:902 +#: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "Gebruiker:" -#: ../../kde4/settingsdialog.py:173 ../../gnome/settingsdialog.glade:416 +#: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "Pad:" -#: ../../kde4/settingsdialog.py:178 ../../gnome/settingsdialog.glade:459 +#: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "Codering:" -#: ../../kde4/settingsdialog.py:184 +#: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "Privésleutel:" -#: ../../kde4/settingsdialog.py:228 ../../kde4/settingsdialog.py:237 -#: ../../kde4/settingsdialog.py:243 ../../gnome/settingsdialog.glade:703 -#: ../../gnome/settingsdialog.glade:743 +#: ../../qt4/settingsdialog.py:201 +msgid "Key File" +msgstr "Sleutelbestand" + +#: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 +#: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "Wachtwoord" -#: ../../kde4/settingsdialog.py:249 ../../gnome/settingsdialog.glade:775 +#: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "Wachtwoord toevoegen aan sleutelbos" -#: ../../kde4/settingsdialog.py:252 ../../gnome/settingsdialog.glade:792 +#: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" -"Wachtwoordbuffergeheugen voor Cron (Veiligheidskwestie: root kan wachtwoord " -"lezen)" +"Wachtwoordbuffergeheugen voor Cron (Veiligheidskwestie: beheerder kan " +"wachtwoord lezen)" -#: ../../kde4/settingsdialog.py:264 ../../gnome/settingsdialog.glade:968 +#: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "Geavanceerd" -#: ../../kde4/settingsdialog.py:276 ../../gnome/settingsdialog.glade:848 -msgid "Auto Host / User / Profile Id" -msgstr "Auto gastcomputer / Gebruiker / Profiel-ID" +#: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 +msgid "Full snapshot path: " +msgstr "Volledige reservekopiepad: " -#: ../../kde4/settingsdialog.py:301 +#: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "Planning" -#: ../../kde4/settingsdialog.py:311 ../../gnome/settingsdialog.glade:1092 +#: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "Dag:" -#: ../../kde4/settingsdialog.py:322 ../../gnome/settingsdialog.glade:1079 +#: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "Dag van de week:" -#: ../../kde4/settingsdialog.py:333 ../../gnome/settingsdialog.glade:1066 +#: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "Uur:" -#: ../../kde4/settingsdialog.py:344 ../../gnome/settingsdialog.glade:1053 +#: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "Uren:" -#: ../../kde4/settingsdialog.py:353 ../../gnome/settingsdialog.glade:1014 +#: ../../qt4/settingsdialog.py:339 msgid "" -"Run Back In Time periodically with anacron. This is useful if the computer " -"is not running regular." +"Run Back In Time repeatedly. This is useful if the computer is not running " +"regular." msgstr "" -"Laat Back In Time periodiek een back-up maken met anacron. Dit is vooral " +"Laat Back In Time herhaaldelijk een reservekopie maken. Dit is vooral " "bruikbaar wanneer de computer niet regelmatig wordt gebruikt." -#: ../../kde4/settingsdialog.py:357 ../../gnome/settingsdialog.glade:1040 -msgid "Frequency in days:" -msgstr "Aantal in dagen:" +#: ../../qt4/settingsdialog.py:344 +msgid "Every:" +msgstr "Elke:" -#: ../../kde4/settingsdialog.py:368 ../../gnome/settingsdialog.glade:1026 +#: ../../qt4/settingsdialog.py:362 msgid "" "Run Back In Time as soon as the drive is connected (only once every X " "days).\n" "You will be prompted for your sudo password." msgstr "" -"Laat Back In Time een back-up maken zodra er een extern medium aangesloten " -"wordt (alleen om de X dagen).\n" +"Laat Back In Time een reservekopie maken zodra er een extern medium " +"aangesloten wordt (alleen om de X dagen).\n" "Er zal om uw beheerderswachtwoord gevraagd worden." -#: ../../kde4/settingsdialog.py:379 ../../gnome/settingsdialog.glade:1310 +#: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Opnemen" -#: ../../kde4/settingsdialog.py:403 ../../kde4/settingsdialog.py:445 -#: ../../gnome/settingsdialog.glade:1411 +#: ../../qt4/settingsdialog.py:381 +msgid "Include files and folders" +msgstr "Bestanden en mappen opnemen" + +#: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "Bestand toevoegen" -#: ../../kde4/settingsdialog.py:408 ../../kde4/settingsdialog.py:450 -#: ../../gnome/settingsdialog.glade:1427 +#: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Map toevoegen" -#: ../../kde4/settingsdialog.py:418 ../../gnome/settingsdialog.glade:1474 +#: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Uitsluiten" -#: ../../kde4/settingsdialog.py:421 ../../gnome/settingsdialog.glade:1328 +#: ../../qt4/settingsdialog.py:417 msgid "" "Warning: Wildcards ('foo*', '[fF]oo', 'fo?') will be ignored with " "mode 'SSH encrypted'.\n" @@ -1260,316 +1325,482 @@ "Alleen ster-tekens (*) die gescheiden zijn zijn toegestaan ('foo/*', " "'foo/**/bar')" -#: ../../kde4/settingsdialog.py:430 +#: ../../qt4/settingsdialog.py:425 +msgid "Exclude patterns, files or folders" +msgstr "Patronen, bestanden en mappen uitsluiten" + +#: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "Zeer aanbevolen:" -#: ../../kde4/settingsdialog.py:460 ../../gnome/settingsdialog.glade:1905 +#: ../../qt4/settingsdialog.py:463 +msgid "Add default" +msgstr "Standaardwaarde toevoegen" + +#: ../../qt4/settingsdialog.py:474 +msgid "Exclude files bigger than: " +msgstr "Bestanden uitsluiten die groter zijn dan: " + +#: ../../qt4/settingsdialog.py:475 +#, python-format +msgid "" +"Exclude files bigger than value in %(prefix)s.\n" +"With 'Full rsync mode' disabled this will only affect new files\n" +"because for rsync this is a transfer option, not an exclude option.\n" +"So big files that has been backed up before will remain in snapshots\n" +"even if they had changed." +msgstr "" +"Sluit bestanden uit die groter zijn dan de waarde in %(prefix)s.\n" +"Indien de 'Volledige rsync-modus' uitgeschakeld wordt zal dit alleen gelden " +"voor nieuwe bestanden\n" +"omdat voor rsync dit een optie is voor verplaatsen en niet voor uitsluiten.\n" +"Dus grote bestanden waar reeds een reservekopie van bestond zullen behouden " +"blijven\n" +"zelfs bij een eventuele wijziging." + +#: ../../qt4/settingsdialog.py:493 msgid "Auto-remove" msgstr "Automatisch verwijderen" -#: ../../kde4/settingsdialog.py:464 ../../gnome/settingsdialog.glade:1608 +#: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "Ouder dan:" -#: ../../kde4/settingsdialog.py:478 ../../gnome/settingsdialog.glade:1624 +#: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "Indien de vrije ruimte kleiner is dan:" -#: ../../kde4/settingsdialog.py:490 ../../gnome/settingsdialog.glade:1642 +#: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "Indien de vrije inodes kleiner zijn dan:" -#: ../../kde4/settingsdialog.py:514 ../../gnome/settingsdialog.glade:1697 +#: ../../qt4/settingsdialog.py:551 +msgid "Run in background on remote Host." +msgstr "Op de achtergrond uitvoeren op gastcomputer op afstand." + +#: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "Behoud alle reservekopieën van de afgelopen" -#: ../../kde4/settingsdialog.py:517 ../../kde4/settingsdialog.py:522 -#: ../../gnome/settingsdialog.glade:1705 ../../gnome/settingsdialog.glade:1729 +#: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "dag(en)" -#: ../../kde4/settingsdialog.py:519 ../../gnome/settingsdialog.glade:1717 +#: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "Behoud één reservekopie per dag van de afgelopen" -#: ../../kde4/settingsdialog.py:524 ../../gnome/settingsdialog.glade:1743 +#: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "Behoud één reservekopie per week van de afgelopen" -#: ../../kde4/settingsdialog.py:527 +#: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" -msgstr "week/weeken" +msgstr "week/weken" -#: ../../kde4/settingsdialog.py:529 ../../gnome/settingsdialog.glade:1769 +#: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "Behoud één reservekopie per maand van de afgelopen" -#: ../../kde4/settingsdialog.py:532 ../../gnome/settingsdialog.glade:1781 +#: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "maand(en)" -#: ../../kde4/settingsdialog.py:534 ../../gnome/settingsdialog.glade:1795 +#: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "Behoud één reservekopie per jaar van alle jaren" -#: ../../kde4/settingsdialog.py:537 ../../gnome/settingsdialog.glade:1496 +#: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "Geen hernoemde reservekopieën verwijderen" -#: ../../kde4/settingsdialog.py:546 ../../gnome/settingsdialog.glade:2104 +#: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Opties" -#: ../../kde4/settingsdialog.py:549 ../../gnome/settingsdialog.glade:1920 +#: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Meldingen activeren" -#: ../../kde4/settingsdialog.py:552 ../../gnome/settingsdialog.glade:1937 +#: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "Maken van reservekopieën uitschakelen indien op accu" -#: ../../kde4/settingsdialog.py:555 +#: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" msgstr "Status stroomvoorziening niet beschikbaar vanuit systeem" -#: ../../kde4/settingsdialog.py:558 ../../gnome/settingsdialog.glade:1955 -msgid "Backup files on restore" -msgstr "Reservekopie maken van bestanden bij het herstellen" +#: ../../qt4/settingsdialog.py:611 +msgid "Run only one snapshot at a time" +msgstr "Alleen maar één reservekopie tegelijk maken" + +#: ../../qt4/settingsdialog.py:612 +msgid "" +"Other snapshots will be blocked until the current snapshot is done.\n" +"This is a global option. So it will effect all profiles for this user.\n" +"But you need to activate this for all other users, too." +msgstr "" +"Andere reservekopieën zullen geblokkeerd worden totdat de huidige is " +"voltooid.\n" +"Dit is een algemene optie en zal daarom effect hebben op alle profielen van " +"deze gebruiker.\n" +"U moet dit echter wel nog instellen voor alle andere gebruikers." + +#: ../../qt4/settingsdialog.py:617 +msgid "Backup replaced files on restore" +msgstr "Reservekopie maken van vervangen bestanden bij het herstellen" + +#: ../../qt4/settingsdialog.py:618 +#, python-format +msgid "" +"Newer versions of files will be renamed with trailing '%(suffix)s' before " +"restoring.\n" +"If you don't need them anymore you can remove them with '%(cmd)s'" +msgstr "" +"Nieuwere versies van bestanden zullen hernoemd worden met een '%(suffix)s' " +"erachter voordat deze hersteld worden.\n" +"Indien u deze niet meer nodig heeft kunt u ze verwijderen d.m.v. '%(cmd)s'" -#: ../../kde4/settingsdialog.py:561 ../../gnome/settingsdialog.glade:1972 +#: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "Doorgaan op fouten (incomplete reservekopieën behouden)" -#: ../../kde4/settingsdialog.py:564 ../../gnome/settingsdialog.glade:1989 +#: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "Gebruik controlesom om wijzigingen op te sporen" -#: ../../kde4/settingsdialog.py:567 ../../gnome/settingsdialog.glade:2006 +#: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "Volledige rsync-modus. Mag dan sneller zijn maar:" -#: ../../kde4/settingsdialog.py:568 ../../gnome/settingsdialog.glade:2032 +#: ../../qt4/settingsdialog.py:634 msgid "" -"- snapshots are no read-only\n" -"- destination file-system must support all linux attributes (dates, rights, " +"- snapshots are not read-only\n" +"- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" "- reservekopieën zijn niet ´alleen-lezen´\n" "- doelbestandssysteem moet alle Linux-attributen ondersteunen (datums, " "rechten, gebruiker, groep ...)" -#: ../../kde4/settingsdialog.py:575 ../../gnome/settingsdialog.glade:2045 +#: ../../qt4/settingsdialog.py:641 +msgid "Take a new snapshot regardless of there were changes or not." +msgstr "Maak ook een nieuwe reservekopie als er niets gewijzigd is." + +#: ../../qt4/settingsdialog.py:644 msgid "Check for changes (don't take a new snapshot if nothing changed)" msgstr "" "Controleer op wijzigingen (geen nieuwe reservekopie maken, indien niets " "gewijzigd is)" -#: ../../kde4/settingsdialog.py:582 +#: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "Logboekniveau:" -#: ../../kde4/settingsdialog.py:597 ../../gnome/settingsdialog.glade:2366 -msgid "Expert Options" -msgstr "Geavanceerde opties" +#: ../../qt4/settingsdialog.py:656 +msgid "None" +msgstr "Geen" + +#: ../../qt4/settingsdialog.py:658 +msgid "Changes & Errors" +msgstr "Wijzigingen & fouten" -#: ../../kde4/settingsdialog.py:600 +#: ../../qt4/settingsdialog.py:674 msgid "Change these options only if you really know what you are doing !" msgstr "Wijzig deze opties alleen als u zeker weet wat u doet!" -#: ../../kde4/settingsdialog.py:608 ../../gnome/settingsdialog.glade:2133 -msgid "Run 'nice' as cron job (default: enabled)" -msgstr "'nice' als cron job uitvoeren (standaardwaarde: ingeschakeld)" - -#: ../../kde4/settingsdialog.py:611 ../../gnome/settingsdialog.glade:2150 -msgid "Run 'ionice' as cron job (default: enabled)" -msgstr "'ionice' als cron job uitvoeren (standaardwaarde: ingeschakeld)" - -#: ../../kde4/settingsdialog.py:614 ../../gnome/settingsdialog.glade:2167 -msgid "Run 'ionice' when taking a manual snapshot (default: disabled)" -msgstr "" -"'ionice' uitvoeren bij het maken van een handmatige reservekopie " -"(standaardwaarde: uitgeschakeld)" - -#: ../../kde4/settingsdialog.py:617 ../../gnome/settingsdialog.glade:2184 -msgid "Run 'nice' on remote host (default: disabled)" -msgstr "" -"'nice' uitvoeren op gastcomputer op afstand (standaardwaarde: uitgeschakeld)" - -#: ../../kde4/settingsdialog.py:620 ../../gnome/settingsdialog.glade:2201 -msgid "Run 'ionice' on remote host (default: disabled)" -msgstr "" -"'ionice' uitvoeren op gastcomputer op afstand (standaardwaarde: " -"uitgeschakeld)" +#: ../../qt4/settingsdialog.py:678 +msgid "Run 'nice':" +msgstr "'nice' uitvoeren:" + +#: ../../qt4/settingsdialog.py:684 ../../qt4/settingsdialog.py:696 +msgid "as cron job" +msgstr "als cron job" + +#: ../../qt4/settingsdialog.py:687 ../../qt4/settingsdialog.py:702 +#: ../../qt4/settingsdialog.py:716 +msgid "on remote host" +msgstr "op gastcomputer op afstand" + +#: ../../qt4/settingsdialog.py:690 +msgid "Run 'ionice':" +msgstr "'ionice' uitvoeren:" + +#: ../../qt4/settingsdialog.py:699 +msgid "when taking a manual snapshot" +msgstr "bij het maken van een handmatige reservekopie" + +#: ../../qt4/settingsdialog.py:706 +msgid "Run 'rsync' with 'nocache':" +msgstr "'rsync' uitvoeren met 'nocache':" + +#: ../../qt4/settingsdialog.py:712 +msgid "on local machine" +msgstr "op lokale machine" + +#: ../../qt4/settingsdialog.py:719 +msgid "Redirect stdout to /dev/null in cronjobs." +msgstr "stdout omleiden naar /dev/null in cronjobs." + +#: ../../qt4/settingsdialog.py:725 +msgid "Redirect stderr to /dev/null in cronjobs." +msgstr "stderr omleiden naar /dev/null in cronjobs." -#: ../../kde4/settingsdialog.py:626 ../../gnome/settingsdialog.glade:2224 +#: ../../qt4/settingsdialog.py:734 msgid "Limit rsync bandwidth usage: " msgstr "rsync-bandbreedteverbruik limiteren: " -#: ../../kde4/settingsdialog.py:629 ../../gnome/settingsdialog.glade:2259 +#: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr " KB/sec" -#: ../../kde4/settingsdialog.py:634 ../../gnome/settingsdialog.glade:2280 +#: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "ACL bewaren" -#: ../../kde4/settingsdialog.py:637 ../../gnome/settingsdialog.glade:2297 +#: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "Uitgebreide attributen (xattr) bewaren" -#: ../../kde4/settingsdialog.py:640 ../../gnome/settingsdialog.glade:2314 +#: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute links)" msgstr "Onveilige links kopiëren (werkt alleen met absolute links)" -#: ../../kde4/settingsdialog.py:643 ../../gnome/settingsdialog.glade:2331 -msgid "Copy links (dereference symbolic links)" -msgstr "Links kopiëren (symbolische links dereferentie)" +#: ../../qt4/settingsdialog.py:834 +msgid "Paste additional options to rsync" +msgstr "Extra opties aan rsync plakken" -#: ../../kde4/snapshotsdialog.py:46 ../../kde4/snapshotsdialog.py:173 -#: ../../gnome/snapshotsdialog.glade:385 -msgid "Diff Options" -msgstr "Vergelijkopties" +#: ../../qt4/settingsdialog.py:837 +msgid "" +"Options must be quoted e.g. --exclude-from=\"/path/to/my exclude file\"." +msgstr "" +"Opties moeten tussen aanhalingstekens staan b.v. --exclude-" +"from=\"/path/to/my exclude file\"." -#: ../../kde4/snapshotsdialog.py:56 ../../gnome/snapshotsdialog.glade:314 -msgid "Command:" -msgstr "Opdracht:" +#: ../../qt4/settingsdialog.py:847 +msgid "Add prefix to SSH commands" +msgstr "Voorvoegsel aan SSH-opdrachten toevoegen" -#: ../../kde4/snapshotsdialog.py:60 ../../gnome/snapshotsdialog.glade:322 -msgid "Parameters:" -msgstr "Parameters:" +#: ../../qt4/settingsdialog.py:850 +#, python-format +msgid "" +"Prefix to run before every command on remote host.\n" +"Variables need to be escaped with \\$FOO.\n" +"This doesn't touch rsync. So to add a prefix\n" +"for rsync use \"%(cb_rsync_options)s\" with\n" +"%(rsync_options_value)s\n" +"\n" +"%(default)s: %(def_value)s" +msgstr "" +"Voorvoegsel om uit te voeren vooraf aan elke opdracht op gastcomputer op " +"afstand.\n" +"Voor variabelen dient u \\$FOO te gebruiken.\n" +"Dit heeft geen invloed op rsync. Dus om een voorvoegsel\n" +"toe te voegen voor rsync gebruikt u \"%(cb_rsync_options)s\" met\n" +"%(rsync_options_value)s\n" +"\n" +"%(default)s: %(def_value)s" -#: ../../kde4/snapshotsdialog.py:64 ../../gnome/snapshotsdialog.glade:334 -msgid "Use %1 and %2 for path parameters" -msgstr "%1 en %2 voor padparameters gebruiken" +#: ../../qt4/settingsdialog.py:858 ../../qt4/settingsdialog.py:1691 +msgid "default" +msgstr "standaardwaarde" -#: ../../kde4/snapshotsdialog.py:123 ../../gnome/snapshotsdialog.glade:184 -#: ../../gnome/snapshotsdialog.glade:186 -msgid "Delete" -msgstr "Verwijderen" +#: ../../qt4/settingsdialog.py:875 +msgid "Restore Config" +msgstr "Configuratie herstellen" -#: ../../kde4/snapshotsdialog.py:128 ../../gnome/snapshotsdialog.glade:199 -#: ../../gnome/snapshotsdialog.glade:201 -msgid "Select All" -msgstr "Alles selecteren" +#: ../../qt4/settingsdialog.py:891 +msgid "" +"Full system backup can only create a snapshot to be restored to the same " +"physical disk(s) with the same disk partitioning as from the source; " +"restoring to new physical disks or the same disks with different " +"partitioning will yield a potentially broken and unusable system.\n" +"\n" +"Full system backup will override some settings that may have been " +"customized. Continue?" +msgstr "" +"Wanneer u met Volledige systeemreservekopie een reservekopie gaat maken zal " +"deze alleen werken wanneer u deze herstelt naar dezelfde schijf/schijven en " +"met dezelfde schijfpartitionering als de bron waar de reservekopie van wordt " +"gemaakt; herstellen naar een andere schijf of dezelfde schijf maar met een " +"andere partitionering zal mogelijk een gebroken en onbruikbaar systeem als " +"gevolg hebben.\n" +"\n" +"Volledige systeemreservekopie zal enige instellingen die mogelijk aangepast " +"zijn opheffen. Wilt u doorgaan?" -#: ../../kde4/snapshotsdialog.py:132 ../../gnome/snapshotsdialog.glade:88 -msgid "List only different snapshots" -msgstr "Alleen reservekopieën tonen die verschillen" +#: ../../qt4/settingsdialog.py:922 +msgid "New profile" +msgstr "Nieuw profiel" -#: ../../kde4/snapshotsdialog.py:139 ../../gnome/snapshotsdialog.glade:110 -msgid "List only equal snapshots to: " -msgstr "Alleen soorgelijke reservekopieën tonen als: " +#: ../../qt4/settingsdialog.py:938 +msgid "Rename profile" +msgstr "Profiel hernoemen" -#: ../../kde4/snapshotsdialog.py:149 ../../gnome/snapshotsdialog.glade:146 -msgid "Deep check (more accurate, but slow)" -msgstr "Diepe controle (nauwkeuriger, maar langzaam)" +#: ../../qt4/settingsdialog.py:952 +#, python-format +msgid "Are you sure you want to delete the profile \"%s\" ?" +msgstr "Weet u zeker dat u het profiel \"%s\" wilt verwijderen ?" -#: ../../kde4/snapshotsdialog.py:174 -msgid "Go To" -msgstr "Gaan naar" +#: ../../qt4/settingsdialog.py:1191 +msgid "" +"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " +"*/3 for periodic backups every 3 hours" +msgstr "" +"Aangepaste uren kunnen alleen een door een komma gescheiden lijst met uren " +"zijn (b.v. 8,12,18,23) of */3 om elke 3 uren een periodieke reservekopie te " +"maken" -#: ../../gnome/logviewdialog.glade:9 -msgid "Log View" -msgstr "Logboekweergave" - -#: ../../gnome/logviewdialog.glade:179 -msgid "scroll down automatic" -msgstr "automatisch omlaag scrollen" - -#: ../../gnome/mainwindow.glade:7 -msgid "Back In Time" -msgstr "Terug in de tijd" - -#: ../../gnome/mainwindow.glade:45 -msgid "Backup Now" -msgstr "Nu reservekopie maken" +#: ../../qt4/settingsdialog.py:1489 +msgid "Exclude pattern" +msgstr "Uit te sluiten patroon" -#: ../../gnome/mainwindow.glade:171 -msgid "Shutdown" -msgstr "Uitschakelen" +#: ../../qt4/settingsdialog.py:1502 +msgid "Exclude file" +msgstr "Selecteer een bestand om uit te sluiten van de reservekopie" -#: ../../gnome/mainwindow.glade:287 -msgid "Parent folder" -msgstr "Bovenliggende map" +#: ../../qt4/settingsdialog.py:1506 +msgid "Exclude folder" +msgstr "Selecteer een map om uit te sluiten van de reservekopie" -#: ../../gnome/mainwindow.glade:327 -msgid "Hidden files" -msgstr "Verborgen bestanden" +#: ../../qt4/settingsdialog.py:1525 +msgid "Include file" +msgstr "Bestand opnemen" -#: ../../gnome/mainwindow.glade:451 +#: ../../qt4/settingsdialog.py:1533 ../../qt4/settingsdialog.py:1553 +#, python-format msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +"\"%s\" is a symlink. The linked target will not be backed up until you " +"include it, too.\n" +"Would you like to include the symlinks target instead?" msgstr "" -"Deze map bestaat niet\n" -"in de huidige reservekopie !" +"\"%s\" is een symbolische link. Er zal geen reservekopie gemaakt worden van " +"het gekoppelde doel totdat u het doel zelf ook opneemt.\n" +"Wilt u i.p.v. de symbolische link het doel zelf opnemen in de reservekopie?" -#: ../../gnome/settingsdialog.glade:287 -msgid "Where to save snapshots" -msgstr "Waar wilt u de reservekopieën opslaan" +#: ../../qt4/settingsdialog.py:1545 +msgid "Include folder" +msgstr "Volgende map opnemen" -#: ../../gnome/settingsdialog.glade:483 -msgid "Private key:" -msgstr "Privésleutel:" +#: ../../qt4/settingsdialog.py:1572 +msgid "Are you sure you want to change snapshots folder ?" +msgstr "Weet u zeker dat u de reservekopiemap wilt wijzigen?" -#: ../../gnome/settingsdialog.glade:534 -msgid "Advanced SSH Settings" -msgstr "Geavanceerde SSH-instellingen" +#: ../../qt4/settingsdialog.py:1688 +msgid "enabled" +msgstr "ingeschakeld" -#: ../../gnome/settingsdialog.glade:552 -msgid "SSH Settings" -msgstr "SSH-instellingen" +#: ../../qt4/settingsdialog.py:1690 +msgid "disabled" +msgstr "uitgeschakeld" -#: ../../gnome/settingsdialog.glade:815 -msgid "Password" -msgstr "Wachtwoord" +#: ../../qt4/settingsdialog.py:1715 +msgid "Restore Settings" +msgstr "Instellingen herstellen" -#: ../../gnome/settingsdialog.glade:930 -msgid "Profile Id:" -msgstr "Profiel-ID:" +#: ../../qt4/settingsdialog.py:1732 +msgid " and add your user to group 'fuse'" +msgstr " en uw gebruiker toe te voegen aan de groep 'fuse'" -#: ../../gnome/settingsdialog.glade:1115 +#: ../../qt4/settingsdialog.py:1736 +#, python-format msgid "" -"hours seperate by comma ( e.g. 8,12,18,23) or */3 for periodic backups every " -"3 hours (cron style)" +"Please navigate to the snapshot from which you want to restore %(appName)s's " +"configuration. The path may look like: \n" +"%(samplePath)s\n" +"\n" +"If your snapshots are on a remote drive or if they are encrypted you need to " +"manually mount them first. If you use Mode SSH you also may need to set up " +"public key login to the remote host%(addFuse)s.\n" +"Take a look at 'man backintime'." msgstr "" -"uren gescheiden door een komma (b.v. 8,12,18,23) of */3 om elke 3 uren een " -"periodieke reservekopie te maken (cron-stijl)" +"Navigeer a.u.b. naar de reservekopie waarvan u de %(appName)s's configuratie " +"wilt herstellen. Het pad kan er mogelijk zo uitzien: \n" +"%(samplePath)s\n" +"\n" +"Als deze reservekopieën op een extern medium staan of versleuteld zijn dient " +"u deze eerst handmatig aan te koppelen. Wanneer u SSH-versleuteling gebruikt " +"dient u het aanmelden met een publieke sleutel op de gastcomputer op afstand " +"in te stellen %(addFuse)s.\n" +"Bekijk de 'Back In Time-handleiding'." -#: ../../gnome/settingsdialog.glade:1163 -msgid "Schedule" -msgstr "Planning" +#: ../../qt4/settingsdialog.py:1794 ../../qt4/settingsdialog.py:1854 +msgid "No config found" +msgstr "Geen configuratie gevonden" -#: ../../gnome/settingsdialog.glade:1363 -msgid "Highly recommended:" -msgstr "Zeer aanbevolen:" +#: ../../qt4/snapshotsdialog.py:49 ../../qt4/snapshotsdialog.py:173 +msgid "Diff Options" +msgstr "Vergelijkopties" -#: ../../gnome/settingsdialog.glade:1377 -msgid "label" -msgstr "label" +#: ../../qt4/snapshotsdialog.py:56 +msgid "Command:" +msgstr "Opdracht:" -#: ../../gnome/settingsdialog.glade:1755 -msgid "week(s)" -msgstr "week/weken" +#: ../../qt4/snapshotsdialog.py:60 +msgid "Parameters:" +msgstr "Parameters:" -#: ../../gnome/settingsdialog.glade:2069 -msgid "Log level:" -msgstr "Logboekniveau:" +#: ../../qt4/snapshotsdialog.py:64 +msgid "Use %1 and %2 for path parameters" +msgstr "%1 en %2 voor padparameters gebruiken" -#: ../../gnome/settingsdialog.glade:2121 -msgid "" -"Change these options only if you really know what you are doing !" -msgstr "Wijzig deze opties alleen als u zeker weet wat u doet !" +#: ../../qt4/snapshotsdialog.py:106 +msgid "List only different snapshots" +msgstr "Alleen reservekopieën tonen die verschillen" -#: ../../gnome/snapshotsdialog.glade:263 -msgid "Diff with" +#: ../../qt4/snapshotsdialog.py:113 +msgid "List only equal snapshots to: " +msgstr "Alleen soorgelijke reservekopieën tonen als: " + +#: ../../qt4/snapshotsdialog.py:123 +msgid "Deep check (more accurate, but slow)" +msgstr "Diepe controle (nauwkeuriger, maar langzaam)" + +#: ../../qt4/snapshotsdialog.py:144 +msgid "Delete" +msgstr "Verwijderen" + +#: ../../qt4/snapshotsdialog.py:148 +msgid "Select All" +msgstr "Alles selecteren" + +#: ../../qt4/snapshotsdialog.py:161 +msgid "Diff" msgstr "Vergelijken met" -#: ../../gnome/textinputdialog.glade:7 -msgid "Pattern" -msgstr "Patroon" - -#: ../../gnome/textinputdialog.glade:70 -msgid "Text" -msgstr "Tekst" +#: ../../qt4/snapshotsdialog.py:172 +msgid "Go To" +msgstr "Gaan naar" + +#: ../../qt4/snapshotsdialog.py:326 +msgid "You can't compare a snapshot to itself" +msgstr "U kunt een reservekopie niet met zichzelf vergelijken" + +#: ../../qt4/snapshotsdialog.py:333 +#, python-format +msgid "Command not found: %s" +msgstr "Opdracht niet gevonden: %s" + +#: ../../qt4/snapshotsdialog.py:354 +#, python-format +msgid "" +"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" +msgstr "" +"Weet u zeker dat u \"%(file)s\" uit reservekopie \"%(snapshot_id)s wilt " +"verwijderen?\n" + +#: ../../qt4/snapshotsdialog.py:357 +#, python-format +msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +msgstr "" +"Weet u zeker dat u \"%(file)s\" uit %(count)d reservekopieën wilt " +"verwijderen?\n" + +#: ../../qt4/snapshotsdialog.py:359 +msgid "WARNING: This can not be revoked!" +msgstr "WAARSCHUWING: Dit kan niet ongedaan worden gemaakt!" + +#: ../../qt4/snapshotsdialog.py:374 +#, python-format +msgid "Exclude \"%s\" from future snapshots?" +msgstr "\"%s\" uitsluiten van toekomstige reservekopieën?" diff -Nru backintime-1.0.36/common/po/nn.po backintime-1.1.12/common/po/nn.po --- backintime-1.0.36/common/po/nn.po 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/po/nn.po 2016-01-11 18:07:58.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2013-11-09 22:34+0100\n" +"POT-Creation-Date: 2015-12-19 00:47+0100\n" "PO-Revision-Date: 2010-01-24 14:50+0000\n" "Last-Translator: Yngve Spjeld Landro \n" "Language-Team: Norwegian Nynorsk \n" @@ -15,198 +15,230 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2014-08-06 10:20+0000\n" -"X-Generator: Launchpad (build 17147)\n" +"X-Launchpad-Export-Date: 2016-01-11 17:52+0000\n" +"X-Generator: Launchpad (build 17881)\n" -#: ../../common/config.py:72 +#: ../../common/configfile.py:60 +#, python-format +msgid "Failed to save config: %s" +msgstr "" + +#: ../../common/configfile.py:78 +#, python-format +msgid "Failed to load config: %s" +msgstr "" + +#: ../../common/configfile.py:352 ../../common/configfile.py:414 +#, python-format +msgid "Profile \"%s\" already exists !" +msgstr "Profilen \"%s\" finst allereie." + +#: ../../common/configfile.py:383 +msgid "You can't remove the last profile !" +msgstr "Du kan ikkje fjerna den siste profilen." + +#: ../../common/config.py:76 msgid "Disabled" msgstr "Slått av" -#: ../../common/config.py:73 +#: ../../common/config.py:77 msgid "At every boot/reboot" msgstr "" -#: ../../common/config.py:74 +#: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Kvart 5. minutt" -#: ../../common/config.py:75 +#: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Kvart 10. minutt" -#: ../../common/config.py:76 +#: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "" -#: ../../common/config.py:77 +#: ../../common/config.py:81 msgid "Every hour" msgstr "" -#: ../../common/config.py:78 +#: ../../common/config.py:82 msgid "Every 2 hours" msgstr "" -#: ../../common/config.py:79 +#: ../../common/config.py:83 msgid "Every 4 hours" msgstr "" -#: ../../common/config.py:80 +#: ../../common/config.py:84 msgid "Every 6 hours" msgstr "" -#: ../../common/config.py:81 +#: ../../common/config.py:85 msgid "Every 12 hours" msgstr "" -#: ../../common/config.py:82 +#: ../../common/config.py:86 msgid "Custom Hours" msgstr "" -#: ../../common/config.py:83 +#: ../../common/config.py:87 msgid "Every Day" msgstr "Kvar dag" -#: ../../common/config.py:84 -msgid "Daily (anacron)" +#: ../../common/config.py:88 +msgid "Repeatedly (anacron)" msgstr "" -#: ../../common/config.py:85 +#: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "" -#: ../../common/config.py:86 +#: ../../common/config.py:90 msgid "Every Week" msgstr "Kvar veke" -#: ../../common/config.py:87 +#: ../../common/config.py:91 msgid "Every Month" msgstr "Kvar månad" -#: ../../common/config.py:91 +#: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Dag(ar)" -#: ../../common/config.py:92 +#: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Veke(r)" -#: ../../common/config.py:93 +#: ../../common/config.py:97 msgid "Year(s)" msgstr "År" -#: ../../common/config.py:100 +#: ../../common/config.py:101 +msgid "Hour(s)" +msgstr "" + +#: ../../common/config.py:104 +msgid "Month(s)" +msgstr "" + +#: ../../common/config.py:126 ../../qt4/settingsdialog.py:551 msgid " EXPERIMENTAL!" msgstr "" -#: ../../common/config.py:103 +#: ../../common/config.py:129 msgid "Local" msgstr "" -#: ../../common/config.py:104 +#: ../../common/config.py:130 msgid "SSH" msgstr "" -#: ../../common/config.py:104 ../../common/config.py:106 -#: ../../gnome/settingsdialog.py:475 ../../kde4/settingsdialog.py:1325 +#: ../../common/config.py:130 ../../common/config.py:132 +#: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "" -#: ../../common/config.py:105 +#: ../../common/config.py:131 msgid "Local encrypted" msgstr "" -#: ../../common/config.py:105 ../../common/config.py:106 +#: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "" -#: ../../common/config.py:106 +#: ../../common/config.py:132 msgid "SSH encrypted" msgstr "" -#: ../../common/config.py:112 +#: ../../common/config.py:135 msgid "Default" msgstr "" -#: ../../common/config.py:113 +#: ../../common/config.py:136 msgid "AES128-CTR" msgstr "" -#: ../../common/config.py:114 +#: ../../common/config.py:137 msgid "AES192-CTR" msgstr "" -#: ../../common/config.py:115 +#: ../../common/config.py:138 msgid "AES256-CTR" msgstr "" -#: ../../common/config.py:116 +#: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "" -#: ../../common/config.py:117 +#: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "" -#: ../../common/config.py:118 +#: ../../common/config.py:141 msgid "AES128-CBC" msgstr "" -#: ../../common/config.py:119 +#: ../../common/config.py:142 msgid "3DES-CBC" msgstr "" -#: ../../common/config.py:120 +#: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "" -#: ../../common/config.py:121 +#: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "" -#: ../../common/config.py:122 +#: ../../common/config.py:145 msgid "AES192-CBC" msgstr "" -#: ../../common/config.py:123 +#: ../../common/config.py:146 msgid "AES256-CBC" msgstr "" -#: ../../common/config.py:124 +#: ../../common/config.py:147 msgid "ARCFOUR" msgstr "" -#: ../../common/config.py:129 +#: ../../common/config.py:153 msgid "Main profile" msgstr "Hovudprofil" -#: ../../common/config.py:256 ../../common/config.py:275 -#: ../../common/config.py:286 ../../common/config.py:291 +#: ../../common/config.py:289 ../../common/config.py:296 +#: ../../common/config.py:307 ../../common/config.py:312 +#: ../../qt4/qt4systrayicon.py:61 #, python-format msgid "Profile: \"%s\"" msgstr "Profil: \"%s\"" -#: ../../common/config.py:256 +#: ../../common/config.py:289 msgid "Snapshots folder is not valid !" msgstr "Mappa for augneblinksbileta er ugyldig." -#: ../../common/config.py:275 +#: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "Du må velja minst éi mappe for kopiering" -#: ../../common/config.py:286 +#: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "Tryggleikskopimappa kan ikkje vera med." -#: ../../common/config.py:291 +#: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "Undermapper til tryggleikskopimappa kan ikkje vera med." -#: ../../common/config.py:361 +#: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s er ikkje ei mappe." -#: ../../common/config.py:376 ../../common/config.py:389 +#: ../../common/config.py:380 +msgid "Host/User/Profile-ID must not be empty!" +msgstr "" + +#: ../../common/config.py:388 ../../common/config.py:420 #, python-format msgid "" "Can't write to: %s\n" @@ -215,59 +247,68 @@ "Klarer ikkje å skriva til: %s\n" "Er du sikker på at du har skrivetilgang?" -#: ../../common/config.py:1286 +#: ../../common/config.py:400 +#, python-format msgid "" -"Can't find crontab.\n" -"Are you sure cron is installed ?\n" -"If not you should disable all automatic backups." +"Destination filesystem for '%(path)s' is formatted with FAT which doesn't " +"support hard-links. Please use a native Linux filesystem." msgstr "" -"Finn ikkje crontab.\n" -"Er du sikker på at cron er installert?\n" -"Dersom ikkje, skru av alle automatiske tryggleikskopijobbar." -#: ../../common/config.py:1338 +#: ../../common/config.py:405 #, python-format -msgid "Schedule udev doesn't work with mode %s" +msgid "" +"Destination filsystem for '%(path)s' is a SMB mounted share. Please make " +"sure the remote SMB server supports symlinks or activate '%(copyLinks)s' in " +"'%(expertOptions)s'." msgstr "" -#: ../../common/config.py:1342 -#, python-format -msgid "Couldn't find UUID for \"%s\"" +#: ../../common/config.py:408 ../../qt4/settingsdialog.py:815 +msgid "Copy links (dereference symbolic links)" msgstr "" -#: ../../common/config.py:1379 -msgid "Failed to remove udev rules" +#: ../../common/config.py:409 ../../qt4/settingsdialog.py:669 +msgid "Expert Options" msgstr "" -#: ../../common/config.py:1385 -msgid "Failed to create udev rules" +#: ../../common/config.py:411 +#, python-format +msgid "" +"Destination filesystem for '%(path)s is a sshfs mounted share. sshfs doesn't " +"support hard-links. Please use mode 'SSH' instead." msgstr "" -#: ../../common/config.py:1420 +#: ../../common/config.py:1407 msgid "" -"Can't find anacron.\n" -"Are you sure anacron is installed ?\n" -"If not you should disable daily anacron backups." +"Can't find crontab.\n" +"Are you sure cron is installed ?\n" +"If not you should disable all automatic backups." msgstr "" +"Finn ikkje crontab.\n" +"Er du sikker på at cron er installert?\n" +"Dersom ikkje, skru av alle automatiske tryggleikskopijobbar." -#: ../../common/config.py:1439 -msgid "Please provide your sudo password to install the udev rule." +#: ../../common/config.py:1411 +msgid "Failed to write new crontab." msgstr "" -#: ../../common/config.py:1445 -msgid "Please provide your sudo password to remove unused udev rules." +#: ../../common/config.py:1505 +#, python-format +msgid "" +"Could not install Udev rule for profile %(profile_id)s. DBus Service " +"'%(dbus_interface)s' wasn't available" msgstr "" -#: ../../common/configfile.py:253 ../../common/configfile.py:315 +#: ../../common/config.py:1517 #, python-format -msgid "Profile \"%s\" already exists !" -msgstr "Profilen \"%s\" finst allereie." +msgid "Schedule udev doesn't work with mode %s" +msgstr "" -#: ../../common/configfile.py:284 -msgid "You can't remove the last profile !" -msgstr "Du kan ikkje fjerna den siste profilen." +#: ../../common/config.py:1526 +#, python-format +msgid "Couldn't find UUID for \"%s\"" +msgstr "" -#: ../../common/encfstools.py:95 +#: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" @@ -275,38 +316,38 @@ "%(error)s" msgstr "" -#: ../../common/encfstools.py:105 +#: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "" -#: ../../common/encfstools.py:149 +#: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "" -#: ../../common/encfstools.py:153 +#: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" -#: ../../common/encfstools.py:154 +#: ../../common/encfstools.py:171 msgid "Cancel" msgstr "" -#: ../../common/encfstools.py:157 +#: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "" -#: ../../common/encfstools.py:161 +#: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "" -#: ../../common/encfstools.py:166 +#: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" -#: ../../common/encfstools.py:174 ../../common/sshtools.py:207 +#: ../../common/encfstools.py:196 ../../common/sshtools.py:262 #, python-format msgid "" "%(user)s is not member of group 'fuse'.\n" @@ -314,70 +355,73 @@ "Look at 'man backintime' for further instructions." msgstr "" -#: ../../common/encfstools.py:189 +#: ../../common/encfstools.py:211 msgid "" "encfs version 1.7.2 and before has a bug with option --reverse. Please " "update encfs" msgstr "" -#: ../../common/encfstools.py:453 ../../common/encfstools.py:480 -#: ../../common/snapshots.py:982 ../../common/snapshots.py:1288 -#: ../../kde4/app.py:82 ../../gnome/mainwindow.glade:43 +#: ../../common/encfstools.py:512 ../../common/snapshots.py:1131 +#: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "Ta augneblinksbilete" -#: ../../common/mount.py:195 +#: ../../common/mount.py:204 #, python-format msgid "" "Hash collision occurred in hash_id %s. Incrementing global value " "hash_collision and try again." msgstr "" -#: ../../common/mount.py:246 +#: ../../common/mount.py:259 #, python-format msgid "mountpoint %s not empty." msgstr "" -#: ../../common/mount.py:286 +#: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" -#: ../../common/password.py:425 +#: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" -#: ../../common/snapshots.py:171 ../../gnome/app.py:1127 -#: ../../kde4/app.py:1014 +#: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "No" -#: ../../common/snapshots.py:182 ../../gnome/gnometools.py:37 +#: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "" -#: ../../common/snapshots.py:282 +#: ../../common/snapshots.py:344 msgid "" "### This log has been decoded with automatic search pattern\n" "### If some paths are not decoded you can manually decode them with:\n" msgstr "" -#: ../../common/snapshots.py:465 +#: ../../common/snapshots.py:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "" -#: ../../common/snapshots.py:564 +#: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "" -#: ../../common/snapshots.py:739 +#: ../../common/snapshots.py:752 ../../qt4/app.py:377 ../../qt4/app.py:675 +#: ../../qt4/app.py:692 ../../qt4/qt4systrayicon.py:65 +msgid "Done" +msgstr "Fullført" + +#: ../../common/snapshots.py:860 msgid "" "Back In Time changed its backup format.\n" "\n" "Your old snapshots can be moved according to this new format. OK?" msgstr "" -#: ../../common/snapshots.py:749 +#: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" @@ -394,13 +438,13 @@ "\n" "(Programmet er i stand til å skilja mellom dei)" -#: ../../common/snapshots.py:752 +#: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" msgstr "" -#: ../../common/snapshots.py:803 +#: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" @@ -413,7 +457,7 @@ "cannot continue taking snapshots" msgstr "" -#: ../../common/snapshots.py:812 +#: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" @@ -423,14 +467,14 @@ "if you are done restart Back In Time to proceed" msgstr "" -#: ../../common/snapshots.py:825 +#: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" msgstr "" -#: ../../common/snapshots.py:830 +#: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" @@ -442,17 +486,21 @@ "If you do not, you will be asked again next time you start Back In Time." msgstr "" -#: ../../common/snapshots.py:839 +#: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "" -#: ../../common/snapshots.py:841 +#: ../../common/snapshots.py:953 msgid "" "Back In Time still cannot continue taking new snapshots.\n" "Restart Back In Time to see the questions again" msgstr "" -#: ../../common/snapshots.py:913 +#: ../../common/snapshots.py:972 +msgid "Deferring backup while on battery" +msgstr "" + +#: ../../common/snapshots.py:1035 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it." @@ -460,156 +508,163 @@ "Finn ikkje augneblinksmappa.\n" "Dersom ho er på ei ekstern lagringseining, plugg ho i." -#: ../../common/snapshots.py:915 +#: ../../common/snapshots.py:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "Venter %s sekund." msgstr[1] "Ventar %s sekund." -#: ../../common/snapshots.py:941 +#: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "" -#: ../../common/snapshots.py:950 +#: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "Sluttfører" -#: ../../common/snapshots.py:1088 +#: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "Klarer ikkje å laga mappa: %s" -#: ../../common/snapshots.py:1107 +#: ../../common/snapshots.py:1217 msgid "..." msgstr "…" -#: ../../common/snapshots.py:1134 +#: ../../common/snapshots.py:1238 +#, python-format +msgid "Found leftover '%s' which can be continued." +msgstr "" + +#: ../../common/snapshots.py:1250 +#, python-format +msgid "Remove leftover '%s' folder from last run" +msgstr "" + +#: ../../common/snapshots.py:1263 #, python-format msgid "Can't remove folder: %s" msgstr "Klarer ikkje å fjerna mappa: %s" -#: ../../common/snapshots.py:1219 +#: ../../common/snapshots.py:1340 #, python-format msgid "Compare with snapshot %s" msgstr "Samanlikna med biletet %s" -#: ../../common/snapshots.py:1248 +#: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "Lag harde lenkjer" -#: ../../common/snapshots.py:1335 +#: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "Lagra innstillingsfila …" -#: ../../common/snapshots.py:1341 +#: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "Lagra løyve …" -#: ../../common/snapshots.py:1442 +#: ../../common/snapshots.py:1470 +msgid "Save permission over ssh failed. Retry normal method" +msgstr "" + +#: ../../common/snapshots.py:1521 #, python-format msgid "Can't rename %(new_path)s to %(path)s" msgstr "" -#: ../../common/snapshots.py:1562 -msgid "Remove old snapshots" -msgstr "Fjern gamle augneblinksbilete" - -#: ../../common/snapshots.py:1586 ../../kde4/settingsdialog.py:501 -#: ../../gnome/settingsdialog.glade:1660 +#: ../../common/snapshots.py:1695 ../../common/snapshots.py:1728 +#: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "Smart-sletting" -#: ../../common/snapshots.py:1591 +#: ../../common/snapshots.py:1704 +msgid "Remove old snapshots" +msgstr "Fjern gamle augneblinksbilete" + +#: ../../common/snapshots.py:1733 msgid "Try to keep min free space" msgstr "" -#: ../../common/snapshots.py:1621 +#: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" -#: ../../common/sshtools.py:106 +#: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "" -#: ../../common/sshtools.py:113 +#: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "" -#: ../../common/sshtools.py:187 -#, python-format -msgid "" -"Failed to unlock SSH private key:\n" -"Error: %s" -msgstr "" - -#: ../../common/sshtools.py:194 +#: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" -#: ../../common/sshtools.py:199 +#: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" -#: ../../common/sshtools.py:217 +#: ../../common/sshtools.py:278 #, python-format msgid "" "Password-less authentication for %(user)s@%(host)s failed. Look at 'man " "backintime' for further instructions." msgstr "" -#: ../../common/sshtools.py:229 +#: ../../common/sshtools.py:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" -#: ../../common/sshtools.py:254 +#: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" -#: ../../common/sshtools.py:274 +#: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" -#: ../../common/sshtools.py:276 +#: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:278 +#: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:280 +#: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" -#: ../../common/sshtools.py:302 +#: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" -#: ../../common/sshtools.py:325 ../../common/sshtools.py:383 +#: ../../common/sshtools.py:423 ../../common/sshtools.py:553 #, python-format msgid "" "Remote host %(host)s doesn't support '%(command)s':\n" @@ -617,7 +672,7 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:387 +#: ../../common/sshtools.py:556 #, python-format msgid "" "Check commands on host %(host)s returned unknown error:\n" @@ -625,96 +680,149 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:400 +#: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "" -#: ../../gnome/app.py:185 ../../gnome/app.py:594 ../../gnome/app.py:608 -#: ../../kde4/app.py:299 ../../kde4/app.py:570 ../../kde4/app.py:587 -msgid "Done" -msgstr "Fullført" +#: ../../qt4/app.py:81 +msgid "Refresh snapshots list" +msgstr "" + +#: ../../qt4/app.py:85 ../../qt4/app.py:890 +msgid "Snapshot Name" +msgstr "Biletnamn" -#: ../../gnome/app.py:189 ../../kde4/app.py:143 ../../kde4/app.py:159 -#: ../../gnome/mainwindow.glade:225 +#: ../../qt4/app.py:88 +msgid "Remove Snapshot" +msgstr "Fjern augneblinksbiletet" + +#: ../../qt4/app.py:91 +msgid "View Snapshot Log" +msgstr "" + +#: ../../qt4/app.py:94 +msgid "View Last Log" +msgstr "" + +#: ../../qt4/app.py:99 ../../qt4/settingsdialog.py:51 +msgid "Settings" +msgstr "Innstillingar" + +#: ../../qt4/app.py:104 +msgid "Shutdown" +msgstr "" + +#: ../../qt4/app.py:105 +msgid "Shutdown system after snapshot has finished." +msgstr "" + +#: ../../qt4/app.py:111 +msgid "Exit" +msgstr "Avslutt" + +#: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 msgid "Help" msgstr "Hjelp" -#: ../../gnome/app.py:191 ../../kde4/app.py:146 -#: ../../gnome/mainwindow.glade:223 +#: ../../qt4/app.py:122 +msgid "Config File Help" +msgstr "" + +#: ../../qt4/app.py:125 msgid "Website" msgstr "" -#: ../../gnome/app.py:192 ../../kde4/app.py:148 +#: ../../qt4/app.py:127 ../../qt4/app.py:982 +msgid "Changelog" +msgstr "" + +#: ../../qt4/app.py:129 msgid "FAQ" msgstr "" -#: ../../gnome/app.py:193 ../../kde4/app.py:150 +#: ../../qt4/app.py:131 msgid "Ask a question" msgstr "" -#: ../../gnome/app.py:194 ../../kde4/app.py:152 +#: ../../qt4/app.py:133 msgid "Report a bug" msgstr "" -#: ../../gnome/app.py:196 ../../kde4/app.py:155 +#: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "Om" -#: ../../gnome/app.py:202 ../../gnome/app.py:887 -#: ../../gnome/restoredialog.py:84 ../../gnome/snapshotsdialog.py:83 -#: ../../gnome/snapshotsdialog.py:244 ../../kde4/app.py:206 -#: ../../kde4/app.py:216 ../../kde4/restoredialog.py:68 -#: ../../kde4/snapshotsdialog.py:111 ../../kde4/snapshotsdialog.py:117 -#: ../../gnome/mainwindow.glade:350 ../../gnome/mainwindow.glade:352 -#: ../../gnome/snapshotsdialog.glade:169 ../../gnome/snapshotsdialog.glade:171 +#: ../../qt4/app.py:163 +msgid "Up" +msgstr "Opp" + +#: ../../qt4/app.py:174 ../../qt4/settingsdialog.py:1776 +msgid "Show hidden files" +msgstr "Vis gøymde filer" + +#: ../../qt4/app.py:184 ../../qt4/app.py:199 ../../qt4/app.py:233 +#: ../../qt4/restoredialog.py:62 ../../qt4/settingsdialog.py:1818 +#: ../../qt4/snapshotsdialog.py:134 ../../qt4/snapshotsdialog.py:139 msgid "Restore" msgstr "Før tilbake" -#: ../../gnome/app.py:203 ../../gnome/app.py:888 ../../gnome/gnometools.py:67 -#: ../../gnome/snapshotsdialog.py:84 ../../gnome/snapshotsdialog.py:245 -#: ../../kde4/app.py:208 ../../kde4/restoredialog.py:42 -#: ../../kde4/snapshotsdialog.py:113 +#: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 +#: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "" -#: ../../gnome/app.py:205 ../../gnome/app.py:896 ../../gnome/app.py:1146 -#: ../../kde4/app.py:1041 -#, python-format -msgid "Restore '%s'" +#: ../../qt4/app.py:194 +msgid "Restore and delete new files" msgstr "" -#: ../../gnome/app.py:207 ../../gnome/app.py:897 ../../gnome/app.py:1147 -#: ../../kde4/app.py:1042 +#: ../../qt4/app.py:201 #, python-format -msgid "Restore '%s' to ..." +msgid "" +"Restore selected file or folder.\n" +"If this button is grayed out this is most likely because \"%(now)s\" is " +"selected in left hand snapshots list." msgstr "" -#: ../../gnome/app.py:226 ../../kde4/app.py:235 +#: ../../qt4/app.py:206 ../../qt4/logviewdialog.py:67 +#: ../../qt4/qt4tools.py:160 ../../qt4/snapshotsdialog.py:96 +msgid "Snapshots" +msgstr "Augneblinksbilete" + +#: ../../qt4/app.py:213 +msgid "Snapshot" +msgstr "" + +#: ../../qt4/app.py:224 +msgid "View" +msgstr "" + +#: ../../qt4/app.py:277 msgid "Shortcuts" msgstr "Snarvegar" -#: ../../gnome/app.py:249 -msgid "Name" -msgstr "Namn" - -#: ../../gnome/app.py:260 -msgid "Size" -msgstr "Storleik" - -#: ../../gnome/app.py:267 -msgid "Date" -msgstr "Dato" - -#: ../../gnome/app.py:286 ../../gnome/app.py:883 -#: ../../gnome/snapshotsdialog.py:116 ../../kde4/app.py:171 -#: ../../kde4/app.py:221 ../../kde4/snapshotsdialog.py:91 -#: ../../gnome/mainwindow.glade:366 ../../gnome/mainwindow.glade:368 -#: ../../gnome/snapshotsdialog.glade:8 -msgid "Snapshots" -msgstr "Augneblinksbilete" +#: ../../qt4/app.py:295 +msgid "" +"This folder doesn't exist\n" +"in the current selected snapshot!" +msgstr "" + +#: ../../qt4/app.py:359 +msgid "Add to Include" +msgstr "" + +#: ../../qt4/app.py:360 +msgid "Add to Exclude" +msgstr "" -#: ../../gnome/app.py:348 ../../kde4/app.py:362 +#: ../../qt4/app.py:416 +#, python-format +msgid "" +"%(appName)s is not configured. Would you like to restore a previous " +"configuration?" +msgstr "" + +#: ../../qt4/app.py:440 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it and then press OK" @@ -722,725 +830,789 @@ "Finn ikkje augneblinksbiletmappa.\n" "Dersom ho er på ei ekstern lagringseining, plugg eininga i og trykk OK" -#: ../../gnome/app.py:611 ../../kde4/app.py:590 -msgid "Done, no backup needed" -msgstr "Ferdig, trong ikkje tryggleikskopiera" +#: ../../qt4/app.py:473 +msgid "" +"If you close this window Back In Time will not be able to shutdown your " +"system when the snapshot has finished.\n" +"Do you really want to close?" +msgstr "" -#: ../../gnome/app.py:619 ../../kde4/app.py:598 +#: ../../qt4/app.py:667 ../../qt4/app.py:703 msgid "Working:" msgstr "Arbeider:" -#: ../../gnome/app.py:623 ../../kde4/app.py:602 +#: ../../qt4/app.py:695 +msgid "Done, no backup needed" +msgstr "Ferdig, trong ikkje tryggleikskopiera" + +#: ../../qt4/app.py:707 msgid "Error:" msgstr "" -#: ../../gnome/app.py:636 ../../kde4/app.py:649 +#: ../../qt4/app.py:726 ../../qt4/qt4systrayicon.py:153 +msgid "Sent:" +msgstr "" + +#: ../../qt4/app.py:727 ../../qt4/qt4systrayicon.py:154 +msgid "Speed:" +msgstr "" + +#: ../../qt4/app.py:728 ../../qt4/qt4systrayicon.py:155 +msgid "ETA:" +msgstr "" + +#: ../../qt4/app.py:777 msgid "Global" msgstr "Globalt" -#: ../../gnome/app.py:637 ../../kde4/app.py:650 +#: ../../qt4/app.py:778 msgid "Root" msgstr "Root" -#: ../../gnome/app.py:638 ../../kde4/app.py:651 +#: ../../qt4/app.py:779 msgid "Home" msgstr "Heim" -#: ../../gnome/app.py:662 -msgid "Bookmarks" -msgstr "Bokmerke" - -#: ../../gnome/app.py:675 ../../kde4/app.py:662 +#: ../../qt4/app.py:794 msgid "Backup folders" msgstr "Kopieringsmapper" -#: ../../gnome/app.py:701 ../../kde4/app.py:734 -msgid "Today" -msgstr "I dag" +#: ../../qt4/app.py:849 +msgid "This is NOT a snapshot but a live view of your local files" +msgstr "" -#: ../../gnome/app.py:705 ../../kde4/app.py:738 -msgid "Yesterday" -msgstr "I går" +#: ../../qt4/app.py:860 ../../qt4/app.py:1476 +#, python-format +msgid "Last check %s" +msgstr "" -#: ../../gnome/app.py:709 ../../kde4/app.py:742 -msgid "This week" -msgstr "Denne veka" +#: ../../qt4/app.py:928 +#, python-format +msgid "" +"Are you sure you want to remove the snapshot:\n" +"%s" +msgstr "" -#: ../../gnome/app.py:713 ../../kde4/app.py:746 -msgid "Last week" -msgstr "Førre veke" +#: ../../qt4/app.py:1004 +#, python-format +msgid "" +"Backup local files before overwriting or\n" +"removing with trailing '%(suffix)s'." +msgstr "" -#: ../../gnome/app.py:764 ../../kde4/app.py:398 +#: ../../qt4/app.py:1010 msgid "" -"If you close this window Back In Time will not be able to shutdown your " -"system when the snapshot has finished.\n" -"Do you really want to close?" +"Are you sure you want to remove all newer files in your original folder?" msgstr "" -#: ../../gnome/app.py:881 ../../gnome/snapshotsdialog.py:238 -msgid "Open" +#: ../../qt4/app.py:1014 +msgid "" +"WARNING: deleting files in filesystem root could break your whole system!!!" msgstr "" -#: ../../gnome/app.py:1056 ../../kde4/app.py:90 ../../kde4/app.py:805 -#: ../../gnome/mainwindow.glade:73 ../../gnome/mainwindow.glade:75 -msgid "Snapshot Name" -msgstr "Biletnamn" +#: ../../qt4/app.py:1016 +msgid "Files to be restored:" +msgstr "" -#: ../../gnome/app.py:1075 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +#: ../../qt4/app.py:1031 +msgid "Do you really want to restore this files(s):" msgstr "" -"Vil du verkeleg fjerna augneblinksbiletet:\n" -"\n" -"%s" -#: ../../gnome/app.py:1123 ../../kde4/app.py:1010 +#: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "Augneblinksbilete: %s" -#: ../../gnome/app.py:1124 ../../kde4/app.py:1011 +#: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "Sjå på augneblinksbiletet som blei laga %s" -#: ../../gnome/app.py:1126 ../../kde4/app.py:1013 +#: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "Sjå på innhaldet til det gjeldande lageret" -#: ../../gnome/logviewdialog.py:106 ../../gnome/settingsdialog.py:414 -#: ../../kde4/logviewdialog.py:83 ../../kde4/settingsdialog.py:590 -msgid "All" +#: ../../qt4/app.py:1268 +#, python-format +msgid "Restore '%s'" msgstr "" -#: ../../gnome/logviewdialog.py:107 ../../gnome/settingsdialog.py:412 -#: ../../kde4/logviewdialog.py:84 ../../kde4/settingsdialog.py:588 -msgid "Errors" +#: ../../qt4/app.py:1269 +#, python-format +msgid "Restore '%s' to ..." msgstr "" -#: ../../gnome/logviewdialog.py:112 ../../kde4/logviewdialog.py:89 -msgid "Changes" +#: ../../qt4/app.py:1270 +#, python-format +msgid "Restore '%s' and delete new files" msgstr "" -#: ../../gnome/logviewdialog.py:115 ../../kde4/logviewdialog.py:92 -msgid "Informations" +#: ../../qt4/app.py:1368 ../../qt4/app.py:1385 +msgid "Authors" msgstr "" -#: ../../gnome/settingsdialog.py:235 ../../kde4/settingsdialog.py:387 -msgid "Include files and folders" +#: ../../qt4/app.py:1369 ../../qt4/app.py:1388 +msgid "Translations" msgstr "" -#: ../../gnome/settingsdialog.py:264 -msgid "Exclude patterns, files or folders" +#: ../../qt4/app.py:1370 ../../qt4/app.py:1391 +msgid "License" msgstr "" -#: ../../gnome/settingsdialog.py:411 ../../kde4/settingsdialog.py:587 -msgid "None" +#: ../../qt4/logviewdialog.py:49 +msgid "Last Log View" msgstr "" -#: ../../gnome/settingsdialog.py:413 ../../kde4/settingsdialog.py:589 -msgid "Changes & Errors" +#: ../../qt4/logviewdialog.py:51 +msgid "Snapshot Log View" msgstr "" -#: ../../gnome/settingsdialog.py:458 -msgid "Snapshots folder" -msgstr "Mappe for augneblinksbileta" - -#: ../../gnome/settingsdialog.py:466 ../../kde4/settingsdialog.py:1314 -msgid "Are you sure you want to change snapshots folder ?" -msgstr "Vil du verkeleg endra biletmappa?" - -#: ../../gnome/settingsdialog.py:901 ../../kde4/settingsdialog.py:914 -msgid "" -"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " -"*/3 for periodic backups every 3 hours" -msgstr "" - -#: ../../gnome/settingsdialog.py:1141 ../../kde4/settingsdialog.py:653 -msgid "New profile" -msgstr "Ny profil" - -#: ../../gnome/settingsdialog.py:1155 ../../kde4/settingsdialog.py:669 -msgid "Rename profile" -msgstr "Gje profilen nytt namn" - -#: ../../gnome/settingsdialog.py:1167 ../../kde4/settingsdialog.py:683 -#, python-format -msgid "Are you sure you want to delete the profile \"%s\" ?" -msgstr "Vil du verkeleg sletta profilen \"%s\"?" - -#: ../../gnome/settingsdialog.py:1173 ../../kde4/settingsdialog.py:1292 -msgid "Include folder" -msgstr "Inkluder mappe" +#: ../../qt4/logviewdialog.py:59 ../../qt4/settingsdialog.py:59 +#: ../../qt4/settingsdialog.py:274 ../../qt4/settingsdialog.py:1899 +msgid "Profile:" +msgstr "Profil:" -#: ../../gnome/settingsdialog.py:1193 ../../kde4/settingsdialog.py:1278 -msgid "Include file" +#: ../../qt4/logviewdialog.py:81 +msgid "Filter:" msgstr "" -#: ../../gnome/settingsdialog.py:1235 ../../kde4/settingsdialog.py:1241 -msgid "Exclude pattern" -msgstr "Ekskluder mønster" - -#: ../../gnome/settingsdialog.py:1240 ../../kde4/settingsdialog.py:1251 -msgid "Exclude patterns can't contain ':' char !" -msgstr "Ekskluderingsmønsteret kan ikkje innehalda ':'-teiknet" - -#: ../../gnome/settingsdialog.py:1246 ../../kde4/settingsdialog.py:1257 -msgid "Exclude file" -msgstr "Ekskluder fil" - -#: ../../gnome/settingsdialog.py:1257 ../../kde4/settingsdialog.py:1261 -msgid "Exclude folder" -msgstr "Ekskluder mappe" - -#: ../../gnome/snapshotsdialog.py:240 -msgid "Jump to" +#: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 +msgid "All" msgstr "" -#: ../../gnome/snapshotsdialog.py:248 ../../kde4/snapshotsdialog.py:164 -msgid "Diff" -msgstr "Diff" - -#: ../../gnome/snapshotsdialog.py:277 ../../kde4/snapshotsdialog.py:339 -msgid "You can't compare a snapshot to itself" -msgstr "Du kan ikke samanlikna eit augneblinksbilete med seg sjølv" - -#: ../../gnome/snapshotsdialog.py:284 ../../kde4/snapshotsdialog.py:346 -#, python-format -msgid "Command not found: %s" -msgstr "Fann ikkje kommandoen: %s" - -#: ../../gnome/snapshotsdialog.py:307 ../../kde4/snapshotsdialog.py:367 -#, python-format -msgid "" -"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 +#: ../../qt4/settingsdialog.py:657 +msgid "Errors" msgstr "" -#: ../../gnome/snapshotsdialog.py:310 ../../kde4/snapshotsdialog.py:370 -#, python-format -msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 +msgid "Changes" msgstr "" -#: ../../gnome/snapshotsdialog.py:312 ../../kde4/snapshotsdialog.py:372 -msgid "WARNING: This can not be revoked!" +#: ../../qt4/logviewdialog.py:92 +msgid "Informations" msgstr "" -#: ../../gnome/snapshotsdialog.py:317 ../../kde4/snapshotsdialog.py:377 -#, python-format -msgid "Exclude \"%s\" from future snapshots?" +#: ../../qt4/logviewdialog.py:101 +msgid "[E] Error, [I] Information, [C] Change" msgstr "" -#: ../../kde4/app.py:86 ../../gnome/mainwindow.glade:58 -#: ../../gnome/mainwindow.glade:60 -msgid "Refresh snapshots list" +#: ../../qt4/logviewdialog.py:104 +msgid "decode paths" msgstr "" -#: ../../kde4/app.py:94 ../../gnome/mainwindow.glade:88 -#: ../../gnome/mainwindow.glade:90 -msgid "Remove Snapshot" -msgstr "Fjern augneblinksbiletet" - -#: ../../kde4/app.py:98 ../../gnome/mainwindow.glade:105 -msgid "View Snapshot Log" +#: ../../qt4/messagebox.py:56 +msgid "Error" msgstr "" -#: ../../kde4/app.py:102 ../../gnome/mainwindow.glade:121 -msgid "View Last Log" +#: ../../qt4/messagebox.py:62 ../../qt4/messagebox.py:68 +msgid "Question" msgstr "" -#: ../../kde4/app.py:108 ../../kde4/settingsdialog.py:69 -#: ../../gnome/mainwindow.glade:144 ../../gnome/mainwindow.glade:146 -#: ../../gnome/settingsdialog.glade:7 -msgid "Settings" -msgstr "Innstillingar" - -#: ../../kde4/app.py:124 ../../gnome/mainwindow.glade:169 -msgid "Shutdown system after snapshot has finished." +#: ../../qt4/qt4systrayicon.py:69 +msgid "Start BackInTime" msgstr "" -#: ../../kde4/app.py:131 ../../gnome/mainwindow.glade:184 -#: ../../gnome/mainwindow.glade:186 -msgid "Exit" -msgstr "Avslutt" - -#: ../../kde4/app.py:186 ../../gnome/mainwindow.glade:289 -msgid "Up" -msgstr "Opp" +#: ../../qt4/qt4systrayicon.py:124 +msgid "Working..." +msgstr "Arbeider …" -#: ../../kde4/app.py:199 ../../gnome/mainwindow.glade:325 -msgid "Show hidden files" -msgstr "Vis gøymde filer" +#: ../../qt4/qt4tools.py:178 +msgid "Today" +msgstr "I dag" -#: ../../kde4/app.py:244 -msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" -msgstr "" +#: ../../qt4/qt4tools.py:183 +msgid "Yesterday" +msgstr "I går" -#: ../../kde4/app.py:839 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" -msgstr "" +#: ../../qt4/qt4tools.py:188 +msgid "This week" +msgstr "Denne veka" -#: ../../kde4/app.py:1140 ../../kde4/kde4systrayicon.py:117 -msgid "Working..." -msgstr "Arbeider …" +#: ../../qt4/qt4tools.py:193 +msgid "Last week" +msgstr "Førre veke" -#: ../../kde4/logviewdialog.py:55 -msgid "Error Log View" +#: ../../qt4/restoredialog.py:75 +msgid "Show full Log" msgstr "" -#: ../../kde4/logviewdialog.py:65 ../../kde4/settingsdialog.py:79 -#: ../../kde4/settingsdialog.py:293 ../../gnome/logviewdialog.glade:73 -#: ../../gnome/settingsdialog.glade:72 -msgid "Profile:" -msgstr "Profil:" +#: ../../qt4/settingsdialog.py:68 +msgid "Edit" +msgstr "Endra" -#: ../../kde4/logviewdialog.py:77 ../../gnome/logviewdialog.glade:110 -msgid "Filter:" +#: ../../qt4/settingsdialog.py:73 +msgid "Modify for Full System Backup" msgstr "" -#: ../../kde4/logviewdialog.py:100 ../../gnome/logviewdialog.glade:169 -msgid "[E] Error, [I] Information, [C] Change" +#: ../../qt4/settingsdialog.py:77 ../../qt4/settingsdialog.py:451 +msgid "Add" msgstr "" -#: ../../kde4/logviewdialog.py:103 ../../gnome/logviewdialog.glade:195 -msgid "decode paths" +#: ../../qt4/settingsdialog.py:81 ../../qt4/settingsdialog.py:408 +#: ../../qt4/settingsdialog.py:467 +msgid "Remove" msgstr "" -#: ../../kde4/settingsdialog.py:88 -msgid "Edit" -msgstr "Endra" - -#: ../../kde4/settingsdialog.py:106 ../../gnome/settingsdialog.glade:1207 +#: ../../qt4/settingsdialog.py:96 msgid "General" msgstr "" -#: ../../kde4/settingsdialog.py:114 ../../gnome/settingsdialog.glade:199 +#: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "" -#: ../../kde4/settingsdialog.py:127 ../../kde4/settingsdialog.py:1311 +#: ../../qt4/settingsdialog.py:119 +#, python-format +msgid "" +"Warning: %(app)s uses EncFS for encryption. A recent security audit " +"revealed several possible attack vectors for this. Please take a look at 'A " +"NOTE ON SECURITY' in 'man backintime'." +msgstr "" + +#: ../../qt4/settingsdialog.py:129 ../../qt4/settingsdialog.py:1568 msgid "Where to save snapshots" msgstr "" -#: ../../kde4/settingsdialog.py:146 +#: ../../qt4/settingsdialog.py:145 +msgid "Folder" +msgstr "" + +#: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" -#: ../../kde4/settingsdialog.py:158 ../../kde4/settingsdialog.py:283 -#: ../../gnome/settingsdialog.glade:323 ../../gnome/settingsdialog.glade:583 -#: ../../gnome/settingsdialog.glade:874 +#: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "" -#: ../../kde4/settingsdialog.py:163 ../../gnome/settingsdialog.glade:350 -#: ../../gnome/settingsdialog.glade:610 +#: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "" -#: ../../kde4/settingsdialog.py:168 ../../kde4/settingsdialog.py:288 -#: ../../gnome/settingsdialog.glade:377 ../../gnome/settingsdialog.glade:637 -#: ../../gnome/settingsdialog.glade:902 +#: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "" -#: ../../kde4/settingsdialog.py:173 ../../gnome/settingsdialog.glade:416 +#: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" -#: ../../kde4/settingsdialog.py:178 ../../gnome/settingsdialog.glade:459 +#: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" -#: ../../kde4/settingsdialog.py:184 +#: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "" -#: ../../kde4/settingsdialog.py:228 ../../kde4/settingsdialog.py:237 -#: ../../kde4/settingsdialog.py:243 ../../gnome/settingsdialog.glade:703 -#: ../../gnome/settingsdialog.glade:743 +#: ../../qt4/settingsdialog.py:201 +msgid "Key File" +msgstr "" + +#: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 +#: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "" -#: ../../kde4/settingsdialog.py:249 ../../gnome/settingsdialog.glade:775 +#: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" -#: ../../kde4/settingsdialog.py:252 ../../gnome/settingsdialog.glade:792 +#: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" -#: ../../kde4/settingsdialog.py:264 ../../gnome/settingsdialog.glade:968 +#: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "" -#: ../../kde4/settingsdialog.py:276 ../../gnome/settingsdialog.glade:848 -msgid "Auto Host / User / Profile Id" +#: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 +msgid "Full snapshot path: " msgstr "" -#: ../../kde4/settingsdialog.py:301 +#: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "" -#: ../../kde4/settingsdialog.py:311 ../../gnome/settingsdialog.glade:1092 +#: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "" -#: ../../kde4/settingsdialog.py:322 ../../gnome/settingsdialog.glade:1079 +#: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "" -#: ../../kde4/settingsdialog.py:333 ../../gnome/settingsdialog.glade:1066 +#: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "" -#: ../../kde4/settingsdialog.py:344 ../../gnome/settingsdialog.glade:1053 +#: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "" -#: ../../kde4/settingsdialog.py:353 ../../gnome/settingsdialog.glade:1014 +#: ../../qt4/settingsdialog.py:339 msgid "" -"Run Back In Time periodically with anacron. This is useful if the computer " -"is not running regular." +"Run Back In Time repeatedly. This is useful if the computer is not running " +"regular." msgstr "" -#: ../../kde4/settingsdialog.py:357 ../../gnome/settingsdialog.glade:1040 -msgid "Frequency in days:" +#: ../../qt4/settingsdialog.py:344 +msgid "Every:" msgstr "" -#: ../../kde4/settingsdialog.py:368 ../../gnome/settingsdialog.glade:1026 +#: ../../qt4/settingsdialog.py:362 msgid "" "Run Back In Time as soon as the drive is connected (only once every X " "days).\n" "You will be prompted for your sudo password." msgstr "" -#: ../../kde4/settingsdialog.py:379 ../../gnome/settingsdialog.glade:1310 +#: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "" -#: ../../kde4/settingsdialog.py:403 ../../kde4/settingsdialog.py:445 -#: ../../gnome/settingsdialog.glade:1411 +#: ../../qt4/settingsdialog.py:381 +msgid "Include files and folders" +msgstr "" + +#: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "" -#: ../../kde4/settingsdialog.py:408 ../../kde4/settingsdialog.py:450 -#: ../../gnome/settingsdialog.glade:1427 +#: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "" -#: ../../kde4/settingsdialog.py:418 ../../gnome/settingsdialog.glade:1474 +#: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "" -#: ../../kde4/settingsdialog.py:421 ../../gnome/settingsdialog.glade:1328 +#: ../../qt4/settingsdialog.py:417 msgid "" "Warning: Wildcards ('foo*', '[fF]oo', 'fo?') will be ignored with " "mode 'SSH encrypted'.\n" "Only separate asterisk are allowed ('foo/*', 'foo/**/bar')" msgstr "" -#: ../../kde4/settingsdialog.py:430 +#: ../../qt4/settingsdialog.py:425 +msgid "Exclude patterns, files or folders" +msgstr "" + +#: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "" -#: ../../kde4/settingsdialog.py:460 ../../gnome/settingsdialog.glade:1905 +#: ../../qt4/settingsdialog.py:463 +msgid "Add default" +msgstr "" + +#: ../../qt4/settingsdialog.py:474 +msgid "Exclude files bigger than: " +msgstr "" + +#: ../../qt4/settingsdialog.py:475 +#, python-format +msgid "" +"Exclude files bigger than value in %(prefix)s.\n" +"With 'Full rsync mode' disabled this will only affect new files\n" +"because for rsync this is a transfer option, not an exclude option.\n" +"So big files that has been backed up before will remain in snapshots\n" +"even if they had changed." +msgstr "" + +#: ../../qt4/settingsdialog.py:493 msgid "Auto-remove" msgstr "" -#: ../../kde4/settingsdialog.py:464 ../../gnome/settingsdialog.glade:1608 +#: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "" -#: ../../kde4/settingsdialog.py:478 ../../gnome/settingsdialog.glade:1624 +#: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "" -#: ../../kde4/settingsdialog.py:490 ../../gnome/settingsdialog.glade:1642 +#: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" -#: ../../kde4/settingsdialog.py:514 ../../gnome/settingsdialog.glade:1697 +#: ../../qt4/settingsdialog.py:551 +msgid "Run in background on remote Host." +msgstr "" + +#: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "" -#: ../../kde4/settingsdialog.py:517 ../../kde4/settingsdialog.py:522 -#: ../../gnome/settingsdialog.glade:1705 ../../gnome/settingsdialog.glade:1729 +#: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "" -#: ../../kde4/settingsdialog.py:519 ../../gnome/settingsdialog.glade:1717 +#: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "" -#: ../../kde4/settingsdialog.py:524 ../../gnome/settingsdialog.glade:1743 +#: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "" -#: ../../kde4/settingsdialog.py:527 +#: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "" -#: ../../kde4/settingsdialog.py:529 ../../gnome/settingsdialog.glade:1769 +#: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "" -#: ../../kde4/settingsdialog.py:532 ../../gnome/settingsdialog.glade:1781 +#: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "" -#: ../../kde4/settingsdialog.py:534 ../../gnome/settingsdialog.glade:1795 +#: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "" -#: ../../kde4/settingsdialog.py:537 ../../gnome/settingsdialog.glade:1496 +#: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "" -#: ../../kde4/settingsdialog.py:546 ../../gnome/settingsdialog.glade:2104 +#: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "" -#: ../../kde4/settingsdialog.py:549 ../../gnome/settingsdialog.glade:1920 +#: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "" -#: ../../kde4/settingsdialog.py:552 ../../gnome/settingsdialog.glade:1937 +#: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "" -#: ../../kde4/settingsdialog.py:555 +#: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" msgstr "" -#: ../../kde4/settingsdialog.py:558 ../../gnome/settingsdialog.glade:1955 -msgid "Backup files on restore" +#: ../../qt4/settingsdialog.py:611 +msgid "Run only one snapshot at a time" msgstr "" -#: ../../kde4/settingsdialog.py:561 ../../gnome/settingsdialog.glade:1972 +#: ../../qt4/settingsdialog.py:612 +msgid "" +"Other snapshots will be blocked until the current snapshot is done.\n" +"This is a global option. So it will effect all profiles for this user.\n" +"But you need to activate this for all other users, too." +msgstr "" + +#: ../../qt4/settingsdialog.py:617 +msgid "Backup replaced files on restore" +msgstr "" + +#: ../../qt4/settingsdialog.py:618 +#, python-format +msgid "" +"Newer versions of files will be renamed with trailing '%(suffix)s' before " +"restoring.\n" +"If you don't need them anymore you can remove them with '%(cmd)s'" +msgstr "" + +#: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "" -#: ../../kde4/settingsdialog.py:564 ../../gnome/settingsdialog.glade:1989 +#: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "" -#: ../../kde4/settingsdialog.py:567 ../../gnome/settingsdialog.glade:2006 +#: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "" -#: ../../kde4/settingsdialog.py:568 ../../gnome/settingsdialog.glade:2032 +#: ../../qt4/settingsdialog.py:634 msgid "" -"- snapshots are no read-only\n" -"- destination file-system must support all linux attributes (dates, rights, " +"- snapshots are not read-only\n" +"- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" -#: ../../kde4/settingsdialog.py:575 ../../gnome/settingsdialog.glade:2045 +#: ../../qt4/settingsdialog.py:641 +msgid "Take a new snapshot regardless of there were changes or not." +msgstr "" + +#: ../../qt4/settingsdialog.py:644 msgid "Check for changes (don't take a new snapshot if nothing changed)" msgstr "" -#: ../../kde4/settingsdialog.py:582 +#: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "" -#: ../../kde4/settingsdialog.py:597 ../../gnome/settingsdialog.glade:2366 -msgid "Expert Options" +#: ../../qt4/settingsdialog.py:656 +msgid "None" +msgstr "" + +#: ../../qt4/settingsdialog.py:658 +msgid "Changes & Errors" msgstr "" -#: ../../kde4/settingsdialog.py:600 +#: ../../qt4/settingsdialog.py:674 msgid "Change these options only if you really know what you are doing !" msgstr "" -#: ../../kde4/settingsdialog.py:608 ../../gnome/settingsdialog.glade:2133 -msgid "Run 'nice' as cron job (default: enabled)" +#: ../../qt4/settingsdialog.py:678 +msgid "Run 'nice':" msgstr "" -#: ../../kde4/settingsdialog.py:611 ../../gnome/settingsdialog.glade:2150 -msgid "Run 'ionice' as cron job (default: enabled)" +#: ../../qt4/settingsdialog.py:684 ../../qt4/settingsdialog.py:696 +msgid "as cron job" msgstr "" -#: ../../kde4/settingsdialog.py:614 ../../gnome/settingsdialog.glade:2167 -msgid "Run 'ionice' when taking a manual snapshot (default: disabled)" +#: ../../qt4/settingsdialog.py:687 ../../qt4/settingsdialog.py:702 +#: ../../qt4/settingsdialog.py:716 +msgid "on remote host" msgstr "" -#: ../../kde4/settingsdialog.py:617 ../../gnome/settingsdialog.glade:2184 -msgid "Run 'nice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:690 +msgid "Run 'ionice':" msgstr "" -#: ../../kde4/settingsdialog.py:620 ../../gnome/settingsdialog.glade:2201 -msgid "Run 'ionice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:699 +msgid "when taking a manual snapshot" msgstr "" -#: ../../kde4/settingsdialog.py:626 ../../gnome/settingsdialog.glade:2224 +#: ../../qt4/settingsdialog.py:706 +msgid "Run 'rsync' with 'nocache':" +msgstr "" + +#: ../../qt4/settingsdialog.py:712 +msgid "on local machine" +msgstr "" + +#: ../../qt4/settingsdialog.py:719 +msgid "Redirect stdout to /dev/null in cronjobs." +msgstr "" + +#: ../../qt4/settingsdialog.py:725 +msgid "Redirect stderr to /dev/null in cronjobs." +msgstr "" + +#: ../../qt4/settingsdialog.py:734 msgid "Limit rsync bandwidth usage: " msgstr "" -#: ../../kde4/settingsdialog.py:629 ../../gnome/settingsdialog.glade:2259 +#: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" -#: ../../kde4/settingsdialog.py:634 ../../gnome/settingsdialog.glade:2280 +#: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "" -#: ../../kde4/settingsdialog.py:637 ../../gnome/settingsdialog.glade:2297 +#: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "" -#: ../../kde4/settingsdialog.py:640 ../../gnome/settingsdialog.glade:2314 +#: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute links)" msgstr "" -#: ../../kde4/settingsdialog.py:643 ../../gnome/settingsdialog.glade:2331 -msgid "Copy links (dereference symbolic links)" +#: ../../qt4/settingsdialog.py:834 +msgid "Paste additional options to rsync" msgstr "" -#: ../../kde4/snapshotsdialog.py:46 ../../kde4/snapshotsdialog.py:173 -#: ../../gnome/snapshotsdialog.glade:385 -msgid "Diff Options" +#: ../../qt4/settingsdialog.py:837 +msgid "" +"Options must be quoted e.g. --exclude-from=\"/path/to/my exclude file\"." msgstr "" -#: ../../kde4/snapshotsdialog.py:56 ../../gnome/snapshotsdialog.glade:314 -msgid "Command:" +#: ../../qt4/settingsdialog.py:847 +msgid "Add prefix to SSH commands" msgstr "" -#: ../../kde4/snapshotsdialog.py:60 ../../gnome/snapshotsdialog.glade:322 -msgid "Parameters:" +#: ../../qt4/settingsdialog.py:850 +#, python-format +msgid "" +"Prefix to run before every command on remote host.\n" +"Variables need to be escaped with \\$FOO.\n" +"This doesn't touch rsync. So to add a prefix\n" +"for rsync use \"%(cb_rsync_options)s\" with\n" +"%(rsync_options_value)s\n" +"\n" +"%(default)s: %(def_value)s" msgstr "" -#: ../../kde4/snapshotsdialog.py:64 ../../gnome/snapshotsdialog.glade:334 -msgid "Use %1 and %2 for path parameters" +#: ../../qt4/settingsdialog.py:858 ../../qt4/settingsdialog.py:1691 +msgid "default" msgstr "" -#: ../../kde4/snapshotsdialog.py:123 ../../gnome/snapshotsdialog.glade:184 -#: ../../gnome/snapshotsdialog.glade:186 -msgid "Delete" +#: ../../qt4/settingsdialog.py:875 +msgid "Restore Config" msgstr "" -#: ../../kde4/snapshotsdialog.py:128 ../../gnome/snapshotsdialog.glade:199 -#: ../../gnome/snapshotsdialog.glade:201 -msgid "Select All" +#: ../../qt4/settingsdialog.py:891 +msgid "" +"Full system backup can only create a snapshot to be restored to the same " +"physical disk(s) with the same disk partitioning as from the source; " +"restoring to new physical disks or the same disks with different " +"partitioning will yield a potentially broken and unusable system.\n" +"\n" +"Full system backup will override some settings that may have been " +"customized. Continue?" msgstr "" -#: ../../kde4/snapshotsdialog.py:132 ../../gnome/snapshotsdialog.glade:88 -msgid "List only different snapshots" -msgstr "" +#: ../../qt4/settingsdialog.py:922 +msgid "New profile" +msgstr "Ny profil" -#: ../../kde4/snapshotsdialog.py:139 ../../gnome/snapshotsdialog.glade:110 -msgid "List only equal snapshots to: " -msgstr "" +#: ../../qt4/settingsdialog.py:938 +msgid "Rename profile" +msgstr "Gje profilen nytt namn" -#: ../../kde4/snapshotsdialog.py:149 ../../gnome/snapshotsdialog.glade:146 -msgid "Deep check (more accurate, but slow)" -msgstr "" +#: ../../qt4/settingsdialog.py:952 +#, python-format +msgid "Are you sure you want to delete the profile \"%s\" ?" +msgstr "Vil du verkeleg sletta profilen \"%s\"?" -#: ../../kde4/snapshotsdialog.py:174 -msgid "Go To" +#: ../../qt4/settingsdialog.py:1191 +msgid "" +"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " +"*/3 for periodic backups every 3 hours" msgstr "" -#: ../../gnome/logviewdialog.glade:9 -msgid "Log View" -msgstr "" +#: ../../qt4/settingsdialog.py:1489 +msgid "Exclude pattern" +msgstr "Ekskluder mønster" + +#: ../../qt4/settingsdialog.py:1502 +msgid "Exclude file" +msgstr "Ekskluder fil" -#: ../../gnome/logviewdialog.glade:179 -msgid "scroll down automatic" +#: ../../qt4/settingsdialog.py:1506 +msgid "Exclude folder" +msgstr "Ekskluder mappe" + +#: ../../qt4/settingsdialog.py:1525 +msgid "Include file" msgstr "" -#: ../../gnome/mainwindow.glade:7 -msgid "Back In Time" +#: ../../qt4/settingsdialog.py:1533 ../../qt4/settingsdialog.py:1553 +#, python-format +msgid "" +"\"%s\" is a symlink. The linked target will not be backed up until you " +"include it, too.\n" +"Would you like to include the symlinks target instead?" msgstr "" -#: ../../gnome/mainwindow.glade:45 -msgid "Backup Now" +#: ../../qt4/settingsdialog.py:1545 +msgid "Include folder" +msgstr "Inkluder mappe" + +#: ../../qt4/settingsdialog.py:1572 +msgid "Are you sure you want to change snapshots folder ?" +msgstr "Vil du verkeleg endra biletmappa?" + +#: ../../qt4/settingsdialog.py:1688 +msgid "enabled" msgstr "" -#: ../../gnome/mainwindow.glade:171 -msgid "Shutdown" +#: ../../qt4/settingsdialog.py:1690 +msgid "disabled" msgstr "" -#: ../../gnome/mainwindow.glade:287 -msgid "Parent folder" +#: ../../qt4/settingsdialog.py:1715 +msgid "Restore Settings" msgstr "" -#: ../../gnome/mainwindow.glade:327 -msgid "Hidden files" +#: ../../qt4/settingsdialog.py:1732 +msgid " and add your user to group 'fuse'" msgstr "" -#: ../../gnome/mainwindow.glade:451 +#: ../../qt4/settingsdialog.py:1736 +#, python-format msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +"Please navigate to the snapshot from which you want to restore %(appName)s's " +"configuration. The path may look like: \n" +"%(samplePath)s\n" +"\n" +"If your snapshots are on a remote drive or if they are encrypted you need to " +"manually mount them first. If you use Mode SSH you also may need to set up " +"public key login to the remote host%(addFuse)s.\n" +"Take a look at 'man backintime'." msgstr "" -#: ../../gnome/settingsdialog.glade:287 -msgid "Where to save snapshots" +#: ../../qt4/settingsdialog.py:1794 ../../qt4/settingsdialog.py:1854 +msgid "No config found" msgstr "" -#: ../../gnome/settingsdialog.glade:483 -msgid "Private key:" +#: ../../qt4/snapshotsdialog.py:49 ../../qt4/snapshotsdialog.py:173 +msgid "Diff Options" msgstr "" -#: ../../gnome/settingsdialog.glade:534 -msgid "Advanced SSH Settings" +#: ../../qt4/snapshotsdialog.py:56 +msgid "Command:" msgstr "" -#: ../../gnome/settingsdialog.glade:552 -msgid "SSH Settings" +#: ../../qt4/snapshotsdialog.py:60 +msgid "Parameters:" msgstr "" -#: ../../gnome/settingsdialog.glade:815 -msgid "Password" +#: ../../qt4/snapshotsdialog.py:64 +msgid "Use %1 and %2 for path parameters" msgstr "" -#: ../../gnome/settingsdialog.glade:930 -msgid "Profile Id:" +#: ../../qt4/snapshotsdialog.py:106 +msgid "List only different snapshots" msgstr "" -#: ../../gnome/settingsdialog.glade:1115 -msgid "" -"hours seperate by comma ( e.g. 8,12,18,23) or */3 for periodic backups every " -"3 hours (cron style)" +#: ../../qt4/snapshotsdialog.py:113 +msgid "List only equal snapshots to: " msgstr "" -#: ../../gnome/settingsdialog.glade:1163 -msgid "Schedule" +#: ../../qt4/snapshotsdialog.py:123 +msgid "Deep check (more accurate, but slow)" msgstr "" -#: ../../gnome/settingsdialog.glade:1363 -msgid "Highly recommended:" +#: ../../qt4/snapshotsdialog.py:144 +msgid "Delete" msgstr "" -#: ../../gnome/settingsdialog.glade:1377 -msgid "label" +#: ../../qt4/snapshotsdialog.py:148 +msgid "Select All" msgstr "" -#: ../../gnome/settingsdialog.glade:1755 -msgid "week(s)" -msgstr "" +#: ../../qt4/snapshotsdialog.py:161 +msgid "Diff" +msgstr "Diff" -#: ../../gnome/settingsdialog.glade:2069 -msgid "Log level:" +#: ../../qt4/snapshotsdialog.py:172 +msgid "Go To" msgstr "" -#: ../../gnome/settingsdialog.glade:2121 +#: ../../qt4/snapshotsdialog.py:326 +msgid "You can't compare a snapshot to itself" +msgstr "Du kan ikke samanlikna eit augneblinksbilete med seg sjølv" + +#: ../../qt4/snapshotsdialog.py:333 +#, python-format +msgid "Command not found: %s" +msgstr "Fann ikkje kommandoen: %s" + +#: ../../qt4/snapshotsdialog.py:354 +#, python-format msgid "" -"Change these options only if you really know what you are doing !" +"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" msgstr "" -#: ../../gnome/snapshotsdialog.glade:263 -msgid "Diff with" +#: ../../qt4/snapshotsdialog.py:357 +#, python-format +msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" msgstr "" -#: ../../gnome/textinputdialog.glade:7 -msgid "Pattern" +#: ../../qt4/snapshotsdialog.py:359 +msgid "WARNING: This can not be revoked!" msgstr "" -#: ../../gnome/textinputdialog.glade:70 -msgid "Text" +#: ../../qt4/snapshotsdialog.py:374 +#, python-format +msgid "Exclude \"%s\" from future snapshots?" msgstr "" diff -Nru backintime-1.0.36/common/po/pl.po backintime-1.1.12/common/po/pl.po --- backintime-1.0.36/common/po/pl.po 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/po/pl.po 2016-01-11 18:07:58.000000000 +0000 @@ -7,208 +7,240 @@ msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2013-11-09 22:34+0100\n" -"PO-Revision-Date: 2012-03-23 12:48+0000\n" -"Last-Translator: Damian Giebas \n" +"POT-Creation-Date: 2015-12-19 00:47+0100\n" +"PO-Revision-Date: 2015-12-10 11:34+0000\n" +"Last-Translator: Piotr Strębski \n" "Language-Team: Polish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2;\n" -"X-Launchpad-Export-Date: 2014-08-06 10:20+0000\n" -"X-Generator: Launchpad (build 17147)\n" +"X-Launchpad-Export-Date: 2016-01-11 17:52+0000\n" +"X-Generator: Launchpad (build 17881)\n" -#: ../../common/config.py:72 +#: ../../common/configfile.py:60 +#, python-format +msgid "Failed to save config: %s" +msgstr "" + +#: ../../common/configfile.py:78 +#, python-format +msgid "Failed to load config: %s" +msgstr "" + +#: ../../common/configfile.py:352 ../../common/configfile.py:414 +#, python-format +msgid "Profile \"%s\" already exists !" +msgstr "Profil \"%s\" już istnieje!" + +#: ../../common/configfile.py:383 +msgid "You can't remove the last profile !" +msgstr "Nie możesz usunąć ostatniego profilu!" + +#: ../../common/config.py:76 msgid "Disabled" msgstr "Zablokowane" -#: ../../common/config.py:73 +#: ../../common/config.py:77 msgid "At every boot/reboot" msgstr "Przy każdym uruchomieniu / restarcie" -#: ../../common/config.py:74 +#: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Co 5 minut" -#: ../../common/config.py:75 +#: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Co 10 minut" -#: ../../common/config.py:76 +#: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "" -#: ../../common/config.py:77 +#: ../../common/config.py:81 msgid "Every hour" msgstr "" -#: ../../common/config.py:78 +#: ../../common/config.py:82 msgid "Every 2 hours" msgstr "" -#: ../../common/config.py:79 +#: ../../common/config.py:83 msgid "Every 4 hours" msgstr "" -#: ../../common/config.py:80 +#: ../../common/config.py:84 msgid "Every 6 hours" msgstr "" -#: ../../common/config.py:81 +#: ../../common/config.py:85 msgid "Every 12 hours" msgstr "" -#: ../../common/config.py:82 +#: ../../common/config.py:86 msgid "Custom Hours" msgstr "" -#: ../../common/config.py:83 +#: ../../common/config.py:87 msgid "Every Day" msgstr "Codziennie" -#: ../../common/config.py:84 -msgid "Daily (anacron)" +#: ../../common/config.py:88 +msgid "Repeatedly (anacron)" msgstr "" -#: ../../common/config.py:85 +#: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "" -#: ../../common/config.py:86 +#: ../../common/config.py:90 msgid "Every Week" msgstr "Co tydzień" -#: ../../common/config.py:87 +#: ../../common/config.py:91 msgid "Every Month" msgstr "Co miesiąc" -#: ../../common/config.py:91 +#: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Dni" -#: ../../common/config.py:92 +#: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Tygodni" -#: ../../common/config.py:93 +#: ../../common/config.py:97 msgid "Year(s)" msgstr "Lat" -#: ../../common/config.py:100 +#: ../../common/config.py:101 +msgid "Hour(s)" +msgstr "" + +#: ../../common/config.py:104 +msgid "Month(s)" +msgstr "" + +#: ../../common/config.py:126 ../../qt4/settingsdialog.py:551 msgid " EXPERIMENTAL!" msgstr "" -#: ../../common/config.py:103 +#: ../../common/config.py:129 msgid "Local" msgstr "" -#: ../../common/config.py:104 +#: ../../common/config.py:130 msgid "SSH" msgstr "" -#: ../../common/config.py:104 ../../common/config.py:106 -#: ../../gnome/settingsdialog.py:475 ../../kde4/settingsdialog.py:1325 +#: ../../common/config.py:130 ../../common/config.py:132 +#: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "" -#: ../../common/config.py:105 +#: ../../common/config.py:131 msgid "Local encrypted" msgstr "" -#: ../../common/config.py:105 ../../common/config.py:106 +#: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "" -#: ../../common/config.py:106 +#: ../../common/config.py:132 msgid "SSH encrypted" msgstr "" -#: ../../common/config.py:112 +#: ../../common/config.py:135 msgid "Default" msgstr "" -#: ../../common/config.py:113 +#: ../../common/config.py:136 msgid "AES128-CTR" msgstr "" -#: ../../common/config.py:114 +#: ../../common/config.py:137 msgid "AES192-CTR" msgstr "" -#: ../../common/config.py:115 +#: ../../common/config.py:138 msgid "AES256-CTR" msgstr "" -#: ../../common/config.py:116 +#: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "" -#: ../../common/config.py:117 +#: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "" -#: ../../common/config.py:118 +#: ../../common/config.py:141 msgid "AES128-CBC" msgstr "" -#: ../../common/config.py:119 +#: ../../common/config.py:142 msgid "3DES-CBC" msgstr "" -#: ../../common/config.py:120 +#: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "" -#: ../../common/config.py:121 +#: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "" -#: ../../common/config.py:122 +#: ../../common/config.py:145 msgid "AES192-CBC" msgstr "" -#: ../../common/config.py:123 +#: ../../common/config.py:146 msgid "AES256-CBC" msgstr "" -#: ../../common/config.py:124 +#: ../../common/config.py:147 msgid "ARCFOUR" msgstr "" -#: ../../common/config.py:129 +#: ../../common/config.py:153 msgid "Main profile" msgstr "Profil główny" -#: ../../common/config.py:256 ../../common/config.py:275 -#: ../../common/config.py:286 ../../common/config.py:291 +#: ../../common/config.py:289 ../../common/config.py:296 +#: ../../common/config.py:307 ../../common/config.py:312 +#: ../../qt4/qt4systrayicon.py:61 #, python-format msgid "Profile: \"%s\"" msgstr "Profil: \"%s\"" -#: ../../common/config.py:256 +#: ../../common/config.py:289 msgid "Snapshots folder is not valid !" -msgstr "Folder migawek nie jest prawidłowy!" +msgstr "Katalog migawek jest nieprawidłowy!" -#: ../../common/config.py:275 +#: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "" "Musisz wybrać co najmniej jeden katalog do wykonania kopii zapasowej!" -#: ../../common/config.py:286 +#: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "Nie możesz dołączyć katalogu z kopią zapasową!" -#: ../../common/config.py:291 +#: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "Nie można dołączyć podkatalogu backup!" -#: ../../common/config.py:361 +#: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s nie jest katalogiem!" -#: ../../common/config.py:376 ../../common/config.py:389 +#: ../../common/config.py:380 +msgid "Host/User/Profile-ID must not be empty!" +msgstr "" + +#: ../../common/config.py:388 ../../common/config.py:420 #, python-format msgid "" "Can't write to: %s\n" @@ -217,59 +249,68 @@ "Nie mogę zapisać do: %s\n" "Jesteś pewien, że posiadasz uprawnienia do jego zapisu?" -#: ../../common/config.py:1286 +#: ../../common/config.py:400 +#, python-format msgid "" -"Can't find crontab.\n" -"Are you sure cron is installed ?\n" -"If not you should disable all automatic backups." +"Destination filesystem for '%(path)s' is formatted with FAT which doesn't " +"support hard-links. Please use a native Linux filesystem." msgstr "" -"Nie można odnaleźć tablicy cron.\n" -"Czy cron jest zainstalowany ?\n" -"Jeżeli nie, wszystkie automatyczne kopie zapasowe powinny zostać wyłączone." -#: ../../common/config.py:1338 +#: ../../common/config.py:405 #, python-format -msgid "Schedule udev doesn't work with mode %s" +msgid "" +"Destination filsystem for '%(path)s' is a SMB mounted share. Please make " +"sure the remote SMB server supports symlinks or activate '%(copyLinks)s' in " +"'%(expertOptions)s'." msgstr "" -#: ../../common/config.py:1342 -#, python-format -msgid "Couldn't find UUID for \"%s\"" -msgstr "" +#: ../../common/config.py:408 ../../qt4/settingsdialog.py:815 +msgid "Copy links (dereference symbolic links)" +msgstr "Kopiowanie linków (odwołanie linków symbolicznych)" -#: ../../common/config.py:1379 -msgid "Failed to remove udev rules" -msgstr "" +#: ../../common/config.py:409 ../../qt4/settingsdialog.py:669 +msgid "Expert Options" +msgstr "Opcje zaawansowane" -#: ../../common/config.py:1385 -msgid "Failed to create udev rules" +#: ../../common/config.py:411 +#, python-format +msgid "" +"Destination filesystem for '%(path)s is a sshfs mounted share. sshfs doesn't " +"support hard-links. Please use mode 'SSH' instead." msgstr "" -#: ../../common/config.py:1420 +#: ../../common/config.py:1407 msgid "" -"Can't find anacron.\n" -"Are you sure anacron is installed ?\n" -"If not you should disable daily anacron backups." +"Can't find crontab.\n" +"Are you sure cron is installed ?\n" +"If not you should disable all automatic backups." msgstr "" +"Nie można odnaleźć tablicy cron.\n" +"Czy cron jest zainstalowany ?\n" +"Jeżeli nie, wszystkie automatyczne kopie zapasowe powinny zostać wyłączone." -#: ../../common/config.py:1439 -msgid "Please provide your sudo password to install the udev rule." +#: ../../common/config.py:1411 +msgid "Failed to write new crontab." msgstr "" -#: ../../common/config.py:1445 -msgid "Please provide your sudo password to remove unused udev rules." +#: ../../common/config.py:1505 +#, python-format +msgid "" +"Could not install Udev rule for profile %(profile_id)s. DBus Service " +"'%(dbus_interface)s' wasn't available" msgstr "" -#: ../../common/configfile.py:253 ../../common/configfile.py:315 +#: ../../common/config.py:1517 #, python-format -msgid "Profile \"%s\" already exists !" -msgstr "Profil \"%s\" już istnieje!" +msgid "Schedule udev doesn't work with mode %s" +msgstr "" -#: ../../common/configfile.py:284 -msgid "You can't remove the last profile !" -msgstr "Nie możesz usunąć ostatniego profilu!" +#: ../../common/config.py:1526 +#, python-format +msgid "Couldn't find UUID for \"%s\"" +msgstr "" -#: ../../common/encfstools.py:95 +#: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" @@ -277,38 +318,38 @@ "%(error)s" msgstr "" -#: ../../common/encfstools.py:105 +#: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "" -#: ../../common/encfstools.py:149 +#: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "" -#: ../../common/encfstools.py:153 +#: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" -#: ../../common/encfstools.py:154 +#: ../../common/encfstools.py:171 msgid "Cancel" msgstr "" -#: ../../common/encfstools.py:157 +#: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "" -#: ../../common/encfstools.py:161 +#: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "" -#: ../../common/encfstools.py:166 +#: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" -#: ../../common/encfstools.py:174 ../../common/sshtools.py:207 +#: ../../common/encfstools.py:196 ../../common/sshtools.py:262 #, python-format msgid "" "%(user)s is not member of group 'fuse'.\n" @@ -316,63 +357,66 @@ "Look at 'man backintime' for further instructions." msgstr "" -#: ../../common/encfstools.py:189 +#: ../../common/encfstools.py:211 msgid "" "encfs version 1.7.2 and before has a bug with option --reverse. Please " "update encfs" msgstr "" -#: ../../common/encfstools.py:453 ../../common/encfstools.py:480 -#: ../../common/snapshots.py:982 ../../common/snapshots.py:1288 -#: ../../kde4/app.py:82 ../../gnome/mainwindow.glade:43 +#: ../../common/encfstools.py:512 ../../common/snapshots.py:1131 +#: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "Utwórz migawkę" -#: ../../common/mount.py:195 +#: ../../common/mount.py:204 #, python-format msgid "" "Hash collision occurred in hash_id %s. Incrementing global value " "hash_collision and try again." msgstr "" -#: ../../common/mount.py:246 +#: ../../common/mount.py:259 #, python-format msgid "mountpoint %s not empty." msgstr "" -#: ../../common/mount.py:286 +#: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" -#: ../../common/password.py:425 +#: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" -#: ../../common/snapshots.py:171 ../../gnome/app.py:1127 -#: ../../kde4/app.py:1014 +#: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Teraz" -#: ../../common/snapshots.py:182 ../../gnome/gnometools.py:37 +#: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "Z BŁĘDAMI!" -#: ../../common/snapshots.py:282 +#: ../../common/snapshots.py:344 msgid "" "### This log has been decoded with automatic search pattern\n" "### If some paths are not decoded you can manually decode them with:\n" msgstr "" -#: ../../common/snapshots.py:465 +#: ../../common/snapshots.py:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "NIEPOWODZENIE" -#: ../../common/snapshots.py:564 +#: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "Przywracanie uprawnień" -#: ../../common/snapshots.py:739 +#: ../../common/snapshots.py:752 ../../qt4/app.py:377 ../../qt4/app.py:675 +#: ../../qt4/app.py:692 ../../qt4/qt4systrayicon.py:65 +msgid "Done" +msgstr "Gotowe" + +#: ../../common/snapshots.py:860 msgid "" "Back In Time changed its backup format.\n" "\n" @@ -382,7 +426,7 @@ "\n" "Przystosować poprzednie migawki do nowego formatu?" -#: ../../common/snapshots.py:749 +#: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" @@ -399,7 +443,7 @@ "\n" "(Program nadal będzie w stanie odróżnić profile i użytkowników)" -#: ../../common/snapshots.py:752 +#: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" @@ -407,7 +451,7 @@ "Nie znaleziono profili. Należy zaktualizować profile, proszę ponownie " "uruchomić Back In Time" -#: ../../common/snapshots.py:803 +#: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" @@ -420,7 +464,7 @@ "cannot continue taking snapshots" msgstr "" -#: ../../common/snapshots.py:812 +#: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" @@ -435,7 +479,7 @@ "Można ręcznie przenieść migawki, \n" "po zakończonej operacji uruchom ponownie Back In Time" -#: ../../common/snapshots.py:825 +#: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" @@ -445,7 +489,7 @@ "\n" "Back In Time będzie kontynuował wykonywanie migawek zgodnie z harmonogramem" -#: ../../common/snapshots.py:830 +#: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" @@ -466,12 +510,12 @@ "Jeżeli nie, te pytanie ponownie zostanie wyświetlone przy następnym " "uruchomieniu Back In Time." -#: ../../common/snapshots.py:839 +#: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "" "Back In Time będzie kontynuował wykonywanie migawek zgodnie z harmonogramem" -#: ../../common/snapshots.py:841 +#: ../../common/snapshots.py:953 msgid "" "Back In Time still cannot continue taking new snapshots.\n" "Restart Back In Time to see the questions again" @@ -479,7 +523,11 @@ "Back In Time nadal nie może wykonywać nowych migawek.\n" "Uruchom ponownie Back In Time, aby ponownie wyświetlić pytania" -#: ../../common/snapshots.py:913 +#: ../../common/snapshots.py:972 +msgid "Deferring backup while on battery" +msgstr "" + +#: ../../common/snapshots.py:1035 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it." @@ -487,7 +535,7 @@ "Nie można odnaleźć katalogu migawek.\n" "Jeżeli katalog znajduje się na dysku wymiennym proszę go podłączyć." -#: ../../common/snapshots.py:915 +#: ../../common/snapshots.py:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." @@ -495,149 +543,156 @@ msgstr[1] "Pozostały %s sekundy." msgstr[2] "Pozostało %s sekund." -#: ../../common/snapshots.py:941 +#: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "Nie udało się wykonać migawki %s!!!" -#: ../../common/snapshots.py:950 +#: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "Finalizuję" -#: ../../common/snapshots.py:1088 +#: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "Nie mogę stworzyć katalogu: %s" -#: ../../common/snapshots.py:1107 +#: ../../common/snapshots.py:1217 msgid "..." msgstr "…" -#: ../../common/snapshots.py:1134 +#: ../../common/snapshots.py:1238 +#, python-format +msgid "Found leftover '%s' which can be continued." +msgstr "" + +#: ../../common/snapshots.py:1250 +#, python-format +msgid "Remove leftover '%s' folder from last run" +msgstr "" + +#: ../../common/snapshots.py:1263 #, python-format msgid "Can't remove folder: %s" msgstr "Nie mogę usunąć katalogu: %s" -#: ../../common/snapshots.py:1219 +#: ../../common/snapshots.py:1340 #, python-format msgid "Compare with snapshot %s" msgstr "Porównanie z migawką %s" -#: ../../common/snapshots.py:1248 +#: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "Stwórz twarde dowiązanie" -#: ../../common/snapshots.py:1335 +#: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "Zapisz plik konfiguracyjny ..." -#: ../../common/snapshots.py:1341 +#: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "Zapis uprawnień ..." -#: ../../common/snapshots.py:1442 +#: ../../common/snapshots.py:1470 +msgid "Save permission over ssh failed. Retry normal method" +msgstr "" + +#: ../../common/snapshots.py:1521 #, python-format msgid "Can't rename %(new_path)s to %(path)s" msgstr "" -#: ../../common/snapshots.py:1562 -msgid "Remove old snapshots" -msgstr "Usuwanie poprzednich migawek" - -#: ../../common/snapshots.py:1586 ../../kde4/settingsdialog.py:501 -#: ../../gnome/settingsdialog.glade:1660 +#: ../../common/snapshots.py:1695 ../../common/snapshots.py:1728 +#: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "Sprytne usuwanie" -#: ../../common/snapshots.py:1591 +#: ../../common/snapshots.py:1704 +msgid "Remove old snapshots" +msgstr "Usuwanie poprzednich migawek" + +#: ../../common/snapshots.py:1733 msgid "Try to keep min free space" msgstr "Spróbuj utrzymać minimalną ilość wolnego miejsca" -#: ../../common/snapshots.py:1621 +#: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" -#: ../../common/sshtools.py:106 +#: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "" -#: ../../common/sshtools.py:113 +#: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "" -#: ../../common/sshtools.py:187 -#, python-format -msgid "" -"Failed to unlock SSH private key:\n" -"Error: %s" -msgstr "" - -#: ../../common/sshtools.py:194 +#: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" -#: ../../common/sshtools.py:199 +#: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" -#: ../../common/sshtools.py:217 +#: ../../common/sshtools.py:278 #, python-format msgid "" "Password-less authentication for %(user)s@%(host)s failed. Look at 'man " "backintime' for further instructions." msgstr "" -#: ../../common/sshtools.py:229 +#: ../../common/sshtools.py:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" -#: ../../common/sshtools.py:254 +#: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" -#: ../../common/sshtools.py:274 +#: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" -#: ../../common/sshtools.py:276 +#: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:278 +#: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:280 +#: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" -#: ../../common/sshtools.py:302 +#: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" -#: ../../common/sshtools.py:325 ../../common/sshtools.py:383 +#: ../../common/sshtools.py:423 ../../common/sshtools.py:553 #, python-format msgid "" "Remote host %(host)s doesn't support '%(command)s':\n" @@ -645,7 +700,7 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:387 +#: ../../common/sshtools.py:556 #, python-format msgid "" "Check commands on host %(host)s returned unknown error:\n" @@ -653,96 +708,149 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:400 +#: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "" -#: ../../gnome/app.py:185 ../../gnome/app.py:594 ../../gnome/app.py:608 -#: ../../kde4/app.py:299 ../../kde4/app.py:570 ../../kde4/app.py:587 -msgid "Done" -msgstr "Gotowe" +#: ../../qt4/app.py:81 +msgid "Refresh snapshots list" +msgstr "Odśwież listę migawek" + +#: ../../qt4/app.py:85 ../../qt4/app.py:890 +msgid "Snapshot Name" +msgstr "Nazwa migawki" + +#: ../../qt4/app.py:88 +msgid "Remove Snapshot" +msgstr "Usuń migawkę" + +#: ../../qt4/app.py:91 +msgid "View Snapshot Log" +msgstr "Podgląd dziennika migawki" + +#: ../../qt4/app.py:94 +msgid "View Last Log" +msgstr "Podgląd ostatniego dziennika" + +#: ../../qt4/app.py:99 ../../qt4/settingsdialog.py:51 +msgid "Settings" +msgstr "Ustawienia" + +#: ../../qt4/app.py:104 +msgid "Shutdown" +msgstr "" -#: ../../gnome/app.py:189 ../../kde4/app.py:143 ../../kde4/app.py:159 -#: ../../gnome/mainwindow.glade:225 +#: ../../qt4/app.py:105 +msgid "Shutdown system after snapshot has finished." +msgstr "" + +#: ../../qt4/app.py:111 +msgid "Exit" +msgstr "Wyjście" + +#: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 msgid "Help" msgstr "Pomoc" -#: ../../gnome/app.py:191 ../../kde4/app.py:146 -#: ../../gnome/mainwindow.glade:223 +#: ../../qt4/app.py:122 +msgid "Config File Help" +msgstr "" + +#: ../../qt4/app.py:125 msgid "Website" msgstr "Strona WWW" -#: ../../gnome/app.py:192 ../../kde4/app.py:148 +#: ../../qt4/app.py:127 ../../qt4/app.py:982 +msgid "Changelog" +msgstr "" + +#: ../../qt4/app.py:129 msgid "FAQ" msgstr "" -#: ../../gnome/app.py:193 ../../kde4/app.py:150 +#: ../../qt4/app.py:131 msgid "Ask a question" msgstr "" -#: ../../gnome/app.py:194 ../../kde4/app.py:152 +#: ../../qt4/app.py:133 msgid "Report a bug" msgstr "" -#: ../../gnome/app.py:196 ../../kde4/app.py:155 +#: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "O programie" -#: ../../gnome/app.py:202 ../../gnome/app.py:887 -#: ../../gnome/restoredialog.py:84 ../../gnome/snapshotsdialog.py:83 -#: ../../gnome/snapshotsdialog.py:244 ../../kde4/app.py:206 -#: ../../kde4/app.py:216 ../../kde4/restoredialog.py:68 -#: ../../kde4/snapshotsdialog.py:111 ../../kde4/snapshotsdialog.py:117 -#: ../../gnome/mainwindow.glade:350 ../../gnome/mainwindow.glade:352 -#: ../../gnome/snapshotsdialog.glade:169 ../../gnome/snapshotsdialog.glade:171 +#: ../../qt4/app.py:163 +msgid "Up" +msgstr "Do góry" + +#: ../../qt4/app.py:174 ../../qt4/settingsdialog.py:1776 +msgid "Show hidden files" +msgstr "Pokaż ukryte pliki" + +#: ../../qt4/app.py:184 ../../qt4/app.py:199 ../../qt4/app.py:233 +#: ../../qt4/restoredialog.py:62 ../../qt4/settingsdialog.py:1818 +#: ../../qt4/snapshotsdialog.py:134 ../../qt4/snapshotsdialog.py:139 msgid "Restore" msgstr "Przywróć" -#: ../../gnome/app.py:203 ../../gnome/app.py:888 ../../gnome/gnometools.py:67 -#: ../../gnome/snapshotsdialog.py:84 ../../gnome/snapshotsdialog.py:245 -#: ../../kde4/app.py:208 ../../kde4/restoredialog.py:42 -#: ../../kde4/snapshotsdialog.py:113 +#: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 +#: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "Przywróć do ..." -#: ../../gnome/app.py:205 ../../gnome/app.py:896 ../../gnome/app.py:1146 -#: ../../kde4/app.py:1041 -#, python-format -msgid "Restore '%s'" -msgstr "Przywróć '%s'" +#: ../../qt4/app.py:194 +msgid "Restore and delete new files" +msgstr "" -#: ../../gnome/app.py:207 ../../gnome/app.py:897 ../../gnome/app.py:1147 -#: ../../kde4/app.py:1042 +#: ../../qt4/app.py:201 #, python-format -msgid "Restore '%s' to ..." -msgstr "Przywróć '%s' do ..." +msgid "" +"Restore selected file or folder.\n" +"If this button is grayed out this is most likely because \"%(now)s\" is " +"selected in left hand snapshots list." +msgstr "" -#: ../../gnome/app.py:226 ../../kde4/app.py:235 +#: ../../qt4/app.py:206 ../../qt4/logviewdialog.py:67 +#: ../../qt4/qt4tools.py:160 ../../qt4/snapshotsdialog.py:96 +msgid "Snapshots" +msgstr "Migawki" + +#: ../../qt4/app.py:213 +msgid "Snapshot" +msgstr "" + +#: ../../qt4/app.py:224 +msgid "View" +msgstr "" + +#: ../../qt4/app.py:277 msgid "Shortcuts" msgstr "Skróty" -#: ../../gnome/app.py:249 -msgid "Name" -msgstr "Nazwa" - -#: ../../gnome/app.py:260 -msgid "Size" -msgstr "Rozmiar" - -#: ../../gnome/app.py:267 -msgid "Date" -msgstr "Data" - -#: ../../gnome/app.py:286 ../../gnome/app.py:883 -#: ../../gnome/snapshotsdialog.py:116 ../../kde4/app.py:171 -#: ../../kde4/app.py:221 ../../kde4/snapshotsdialog.py:91 -#: ../../gnome/mainwindow.glade:366 ../../gnome/mainwindow.glade:368 -#: ../../gnome/snapshotsdialog.glade:8 -msgid "Snapshots" -msgstr "Migawki" +#: ../../qt4/app.py:295 +msgid "" +"This folder doesn't exist\n" +"in the current selected snapshot!" +msgstr "" + +#: ../../qt4/app.py:359 +msgid "Add to Include" +msgstr "" + +#: ../../qt4/app.py:360 +msgid "Add to Exclude" +msgstr "" -#: ../../gnome/app.py:348 ../../kde4/app.py:362 +#: ../../qt4/app.py:416 +#, python-format +msgid "" +"%(appName)s is not configured. Would you like to restore a previous " +"configuration?" +msgstr "" + +#: ../../qt4/app.py:440 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it and then press OK" @@ -751,732 +859,793 @@ "Jeżeli katalog znajduje się na dysku wymiennym proszę go podłączyć i wcisnąć " "OK" -#: ../../gnome/app.py:611 ../../kde4/app.py:590 -msgid "Done, no backup needed" -msgstr "Gotowe, archiwizacja niepotrzebna" +#: ../../qt4/app.py:473 +msgid "" +"If you close this window Back In Time will not be able to shutdown your " +"system when the snapshot has finished.\n" +"Do you really want to close?" +msgstr "" -#: ../../gnome/app.py:619 ../../kde4/app.py:598 +#: ../../qt4/app.py:667 ../../qt4/app.py:703 msgid "Working:" msgstr "Pracuje:" -#: ../../gnome/app.py:623 ../../kde4/app.py:602 +#: ../../qt4/app.py:695 +msgid "Done, no backup needed" +msgstr "Gotowe, archiwizacja niepotrzebna" + +#: ../../qt4/app.py:707 msgid "Error:" msgstr "Błąd:" -#: ../../gnome/app.py:636 ../../kde4/app.py:649 +#: ../../qt4/app.py:726 ../../qt4/qt4systrayicon.py:153 +msgid "Sent:" +msgstr "" + +#: ../../qt4/app.py:727 ../../qt4/qt4systrayicon.py:154 +msgid "Speed:" +msgstr "" + +#: ../../qt4/app.py:728 ../../qt4/qt4systrayicon.py:155 +msgid "ETA:" +msgstr "" + +#: ../../qt4/app.py:777 msgid "Global" msgstr "Globalne" -#: ../../gnome/app.py:637 ../../kde4/app.py:650 +#: ../../qt4/app.py:778 msgid "Root" msgstr "Root" -#: ../../gnome/app.py:638 ../../kde4/app.py:651 +#: ../../qt4/app.py:779 msgid "Home" msgstr "Start" -#: ../../gnome/app.py:662 -msgid "Bookmarks" -msgstr "Zakładki" - -#: ../../gnome/app.py:675 ../../kde4/app.py:662 +#: ../../qt4/app.py:794 msgid "Backup folders" msgstr "Katalogi kopii zapasowej" -#: ../../gnome/app.py:701 ../../kde4/app.py:734 -msgid "Today" -msgstr "Dziś" +#: ../../qt4/app.py:849 +msgid "This is NOT a snapshot but a live view of your local files" +msgstr "" -#: ../../gnome/app.py:705 ../../kde4/app.py:738 -msgid "Yesterday" -msgstr "Wczoraj" +#: ../../qt4/app.py:860 ../../qt4/app.py:1476 +#, python-format +msgid "Last check %s" +msgstr "" -#: ../../gnome/app.py:709 ../../kde4/app.py:742 -msgid "This week" -msgstr "Ten tydzień" +#: ../../qt4/app.py:928 +#, python-format +msgid "" +"Are you sure you want to remove the snapshot:\n" +"%s" +msgstr "" +"Czy na pewno usunąć migawkę:\n" +"%s" -#: ../../gnome/app.py:713 ../../kde4/app.py:746 -msgid "Last week" -msgstr "Poprzedni tydzień" +#: ../../qt4/app.py:1004 +#, python-format +msgid "" +"Backup local files before overwriting or\n" +"removing with trailing '%(suffix)s'." +msgstr "" -#: ../../gnome/app.py:764 ../../kde4/app.py:398 +#: ../../qt4/app.py:1010 msgid "" -"If you close this window Back In Time will not be able to shutdown your " -"system when the snapshot has finished.\n" -"Do you really want to close?" +"Are you sure you want to remove all newer files in your original folder?" msgstr "" -#: ../../gnome/app.py:881 ../../gnome/snapshotsdialog.py:238 -msgid "Open" -msgstr "Otwórz" +#: ../../qt4/app.py:1014 +msgid "" +"WARNING: deleting files in filesystem root could break your whole system!!!" +msgstr "" -#: ../../gnome/app.py:1056 ../../kde4/app.py:90 ../../kde4/app.py:805 -#: ../../gnome/mainwindow.glade:73 ../../gnome/mainwindow.glade:75 -msgid "Snapshot Name" -msgstr "Nazwa migawki" +#: ../../qt4/app.py:1016 +msgid "Files to be restored:" +msgstr "" -#: ../../gnome/app.py:1075 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +#: ../../qt4/app.py:1031 +msgid "Do you really want to restore this files(s):" msgstr "" -"Czy na pewno usunąć migawkę:\n" -"%s" -#: ../../gnome/app.py:1123 ../../kde4/app.py:1010 +#: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "Migawka: %s" -#: ../../gnome/app.py:1124 ../../kde4/app.py:1011 +#: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "Zobacz migawkę wykonaną %s" -#: ../../gnome/app.py:1126 ../../kde4/app.py:1013 +#: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "Pokaż obecną zawartość dysku" -#: ../../gnome/logviewdialog.py:106 ../../gnome/settingsdialog.py:414 -#: ../../kde4/logviewdialog.py:83 ../../kde4/settingsdialog.py:590 -msgid "All" -msgstr "Wszystkie" +#: ../../qt4/app.py:1268 +#, python-format +msgid "Restore '%s'" +msgstr "Przywróć '%s'" -#: ../../gnome/logviewdialog.py:107 ../../gnome/settingsdialog.py:412 -#: ../../kde4/logviewdialog.py:84 ../../kde4/settingsdialog.py:588 -msgid "Errors" -msgstr "Błędy" +#: ../../qt4/app.py:1269 +#, python-format +msgid "Restore '%s' to ..." +msgstr "Przywróć '%s' do ..." -#: ../../gnome/logviewdialog.py:112 ../../kde4/logviewdialog.py:89 -msgid "Changes" -msgstr "Zmiany" +#: ../../qt4/app.py:1270 +#, python-format +msgid "Restore '%s' and delete new files" +msgstr "" -#: ../../gnome/logviewdialog.py:115 ../../kde4/logviewdialog.py:92 -msgid "Informations" -msgstr "Informacje" +#: ../../qt4/app.py:1368 ../../qt4/app.py:1385 +msgid "Authors" +msgstr "" -#: ../../gnome/settingsdialog.py:235 ../../kde4/settingsdialog.py:387 -msgid "Include files and folders" -msgstr "Dołącz pliki i katalogi" +#: ../../qt4/app.py:1369 ../../qt4/app.py:1388 +msgid "Translations" +msgstr "" -#: ../../gnome/settingsdialog.py:264 -msgid "Exclude patterns, files or folders" -msgstr "Wyklucz ścieżki, pliki lub katalogi" +#: ../../qt4/app.py:1370 ../../qt4/app.py:1391 +msgid "License" +msgstr "" -#: ../../gnome/settingsdialog.py:411 ../../kde4/settingsdialog.py:587 -msgid "None" -msgstr "Brak" +#: ../../qt4/logviewdialog.py:49 +msgid "Last Log View" +msgstr "" -#: ../../gnome/settingsdialog.py:413 ../../kde4/settingsdialog.py:589 -msgid "Changes & Errors" -msgstr "Zmiany i błędy" - -#: ../../gnome/settingsdialog.py:458 -msgid "Snapshots folder" -msgstr "Katalog migawek" - -#: ../../gnome/settingsdialog.py:466 ../../kde4/settingsdialog.py:1314 -msgid "Are you sure you want to change snapshots folder ?" -msgstr "Na pewno zmienić katalog migawek?" - -#: ../../gnome/settingsdialog.py:901 ../../kde4/settingsdialog.py:914 -msgid "" -"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " -"*/3 for periodic backups every 3 hours" +#: ../../qt4/logviewdialog.py:51 +msgid "Snapshot Log View" msgstr "" -#: ../../gnome/settingsdialog.py:1141 ../../kde4/settingsdialog.py:653 -msgid "New profile" -msgstr "Nowy profil" - -#: ../../gnome/settingsdialog.py:1155 ../../kde4/settingsdialog.py:669 -msgid "Rename profile" -msgstr "Zmień nazwę profilu" - -#: ../../gnome/settingsdialog.py:1167 ../../kde4/settingsdialog.py:683 -#, python-format -msgid "Are you sure you want to delete the profile \"%s\" ?" -msgstr "Na pewno usunąć profil \"%s\"?" - -#: ../../gnome/settingsdialog.py:1173 ../../kde4/settingsdialog.py:1292 -msgid "Include folder" -msgstr "Uwzględnij katalog" - -#: ../../gnome/settingsdialog.py:1193 ../../kde4/settingsdialog.py:1278 -msgid "Include file" -msgstr "Dołącz plik" - -#: ../../gnome/settingsdialog.py:1235 ../../kde4/settingsdialog.py:1241 -msgid "Exclude pattern" -msgstr "Wzór wykluczenia" - -#: ../../gnome/settingsdialog.py:1240 ../../kde4/settingsdialog.py:1251 -msgid "Exclude patterns can't contain ':' char !" -msgstr "Wzór wykluczenia nie może zawierać znaku ':'!" +#: ../../qt4/logviewdialog.py:59 ../../qt4/settingsdialog.py:59 +#: ../../qt4/settingsdialog.py:274 ../../qt4/settingsdialog.py:1899 +msgid "Profile:" +msgstr "Profil:" -#: ../../gnome/settingsdialog.py:1246 ../../kde4/settingsdialog.py:1257 -msgid "Exclude file" -msgstr "Wyklucz plik" +#: ../../qt4/logviewdialog.py:81 +msgid "Filter:" +msgstr "Filtr:" -#: ../../gnome/settingsdialog.py:1257 ../../kde4/settingsdialog.py:1261 -msgid "Exclude folder" -msgstr "Wyklucz katalog" +#: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 +msgid "All" +msgstr "Wszystkie" -#: ../../gnome/snapshotsdialog.py:240 -msgid "Jump to" -msgstr "Przejdź do" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 +#: ../../qt4/settingsdialog.py:657 +msgid "Errors" +msgstr "Błędy" -#: ../../gnome/snapshotsdialog.py:248 ../../kde4/snapshotsdialog.py:164 -msgid "Diff" -msgstr "Różnice" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 +msgid "Changes" +msgstr "Zmiany" -#: ../../gnome/snapshotsdialog.py:277 ../../kde4/snapshotsdialog.py:339 -msgid "You can't compare a snapshot to itself" -msgstr "Nie możesz porównywać migawki samej ze sobą" +#: ../../qt4/logviewdialog.py:92 +msgid "Informations" +msgstr "Informacje" -#: ../../gnome/snapshotsdialog.py:284 ../../kde4/snapshotsdialog.py:346 -#, python-format -msgid "Command not found: %s" -msgstr "Polecenie nie znalezione: %s" +#: ../../qt4/logviewdialog.py:101 +msgid "[E] Error, [I] Information, [C] Change" +msgstr "[E] Błąd, [I] Informacja, [C] Zmiana" -#: ../../gnome/snapshotsdialog.py:307 ../../kde4/snapshotsdialog.py:367 -#, python-format -msgid "" -"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" +#: ../../qt4/logviewdialog.py:104 +msgid "decode paths" msgstr "" -#: ../../gnome/snapshotsdialog.py:310 ../../kde4/snapshotsdialog.py:370 -#, python-format -msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +#: ../../qt4/messagebox.py:56 +msgid "Error" msgstr "" -#: ../../gnome/snapshotsdialog.py:312 ../../kde4/snapshotsdialog.py:372 -msgid "WARNING: This can not be revoked!" +#: ../../qt4/messagebox.py:62 ../../qt4/messagebox.py:68 +msgid "Question" msgstr "" -#: ../../gnome/snapshotsdialog.py:317 ../../kde4/snapshotsdialog.py:377 -#, python-format -msgid "Exclude \"%s\" from future snapshots?" +#: ../../qt4/qt4systrayicon.py:69 +msgid "Start BackInTime" msgstr "" -#: ../../kde4/app.py:86 ../../gnome/mainwindow.glade:58 -#: ../../gnome/mainwindow.glade:60 -msgid "Refresh snapshots list" -msgstr "Odśwież listę migawek" +#: ../../qt4/qt4systrayicon.py:124 +msgid "Working..." +msgstr "Pracuję..." -#: ../../kde4/app.py:94 ../../gnome/mainwindow.glade:88 -#: ../../gnome/mainwindow.glade:90 -msgid "Remove Snapshot" -msgstr "Usuń migawkę" +#: ../../qt4/qt4tools.py:178 +msgid "Today" +msgstr "Dziś" -#: ../../kde4/app.py:98 ../../gnome/mainwindow.glade:105 -msgid "View Snapshot Log" -msgstr "Podgląd dziennika migawki" +#: ../../qt4/qt4tools.py:183 +msgid "Yesterday" +msgstr "Wczoraj" -#: ../../kde4/app.py:102 ../../gnome/mainwindow.glade:121 -msgid "View Last Log" -msgstr "Podgląd ostatniego dziennika" +#: ../../qt4/qt4tools.py:188 +msgid "This week" +msgstr "Ten tydzień" -#: ../../kde4/app.py:108 ../../kde4/settingsdialog.py:69 -#: ../../gnome/mainwindow.glade:144 ../../gnome/mainwindow.glade:146 -#: ../../gnome/settingsdialog.glade:7 -msgid "Settings" -msgstr "Ustawienia" +#: ../../qt4/qt4tools.py:193 +msgid "Last week" +msgstr "Poprzedni tydzień" -#: ../../kde4/app.py:124 ../../gnome/mainwindow.glade:169 -msgid "Shutdown system after snapshot has finished." +#: ../../qt4/restoredialog.py:75 +msgid "Show full Log" msgstr "" -#: ../../kde4/app.py:131 ../../gnome/mainwindow.glade:184 -#: ../../gnome/mainwindow.glade:186 -msgid "Exit" -msgstr "Wyjście" - -#: ../../kde4/app.py:186 ../../gnome/mainwindow.glade:289 -msgid "Up" -msgstr "Do góry" - -#: ../../kde4/app.py:199 ../../gnome/mainwindow.glade:325 -msgid "Show hidden files" -msgstr "Pokaż ukryte pliki" +#: ../../qt4/settingsdialog.py:68 +msgid "Edit" +msgstr "Edycja" -#: ../../kde4/app.py:244 -msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +#: ../../qt4/settingsdialog.py:73 +msgid "Modify for Full System Backup" msgstr "" -"Ten katalog nie istnieje\n" -"w aktualnej migawce!" -#: ../../kde4/app.py:839 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +#: ../../qt4/settingsdialog.py:77 ../../qt4/settingsdialog.py:451 +msgid "Add" msgstr "" -"Czy na pewno usunąć migawkę:\n" -"%s" - -#: ../../kde4/app.py:1140 ../../kde4/kde4systrayicon.py:117 -msgid "Working..." -msgstr "Pracuję..." -#: ../../kde4/logviewdialog.py:55 -msgid "Error Log View" -msgstr "Podgląd dziennika błędów" - -#: ../../kde4/logviewdialog.py:65 ../../kde4/settingsdialog.py:79 -#: ../../kde4/settingsdialog.py:293 ../../gnome/logviewdialog.glade:73 -#: ../../gnome/settingsdialog.glade:72 -msgid "Profile:" -msgstr "Profil:" - -#: ../../kde4/logviewdialog.py:77 ../../gnome/logviewdialog.glade:110 -msgid "Filter:" -msgstr "Filtr:" - -#: ../../kde4/logviewdialog.py:100 ../../gnome/logviewdialog.glade:169 -msgid "[E] Error, [I] Information, [C] Change" -msgstr "[E] Błąd, [I] Informacja, [C] Zmiana" - -#: ../../kde4/logviewdialog.py:103 ../../gnome/logviewdialog.glade:195 -msgid "decode paths" +#: ../../qt4/settingsdialog.py:81 ../../qt4/settingsdialog.py:408 +#: ../../qt4/settingsdialog.py:467 +msgid "Remove" msgstr "" -#: ../../kde4/settingsdialog.py:88 -msgid "Edit" -msgstr "Edycja" - -#: ../../kde4/settingsdialog.py:106 ../../gnome/settingsdialog.glade:1207 +#: ../../qt4/settingsdialog.py:96 msgid "General" msgstr "Główne" -#: ../../kde4/settingsdialog.py:114 ../../gnome/settingsdialog.glade:199 +#: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "" -#: ../../kde4/settingsdialog.py:127 ../../kde4/settingsdialog.py:1311 +#: ../../qt4/settingsdialog.py:119 +#, python-format +msgid "" +"Warning: %(app)s uses EncFS for encryption. A recent security audit " +"revealed several possible attack vectors for this. Please take a look at 'A " +"NOTE ON SECURITY' in 'man backintime'." +msgstr "" + +#: ../../qt4/settingsdialog.py:129 ../../qt4/settingsdialog.py:1568 msgid "Where to save snapshots" msgstr "Gdzie zapisać migawki" -#: ../../kde4/settingsdialog.py:146 +#: ../../qt4/settingsdialog.py:145 +msgid "Folder" +msgstr "Katalog" + +#: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" -#: ../../kde4/settingsdialog.py:158 ../../kde4/settingsdialog.py:283 -#: ../../gnome/settingsdialog.glade:323 ../../gnome/settingsdialog.glade:583 -#: ../../gnome/settingsdialog.glade:874 +#: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "Host:" -#: ../../kde4/settingsdialog.py:163 ../../gnome/settingsdialog.glade:350 -#: ../../gnome/settingsdialog.glade:610 +#: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "" -#: ../../kde4/settingsdialog.py:168 ../../kde4/settingsdialog.py:288 -#: ../../gnome/settingsdialog.glade:377 ../../gnome/settingsdialog.glade:637 -#: ../../gnome/settingsdialog.glade:902 +#: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "Użytkownik:" -#: ../../kde4/settingsdialog.py:173 ../../gnome/settingsdialog.glade:416 +#: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" -#: ../../kde4/settingsdialog.py:178 ../../gnome/settingsdialog.glade:459 +#: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" -#: ../../kde4/settingsdialog.py:184 +#: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "" -#: ../../kde4/settingsdialog.py:228 ../../kde4/settingsdialog.py:237 -#: ../../kde4/settingsdialog.py:243 ../../gnome/settingsdialog.glade:703 -#: ../../gnome/settingsdialog.glade:743 +#: ../../qt4/settingsdialog.py:201 +msgid "Key File" +msgstr "" + +#: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 +#: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "" -#: ../../kde4/settingsdialog.py:249 ../../gnome/settingsdialog.glade:775 +#: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" -#: ../../kde4/settingsdialog.py:252 ../../gnome/settingsdialog.glade:792 +#: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" -#: ../../kde4/settingsdialog.py:264 ../../gnome/settingsdialog.glade:968 +#: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "Zaawansowane" -#: ../../kde4/settingsdialog.py:276 ../../gnome/settingsdialog.glade:848 -msgid "Auto Host / User / Profile Id" -msgstr "Auto Host / Użytkownik / Profil Id" +#: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 +msgid "Full snapshot path: " +msgstr "" -#: ../../kde4/settingsdialog.py:301 +#: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "Harmonogram" -#: ../../kde4/settingsdialog.py:311 ../../gnome/settingsdialog.glade:1092 +#: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "Dzień:" -#: ../../kde4/settingsdialog.py:322 ../../gnome/settingsdialog.glade:1079 +#: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "Dzień powszedni" -#: ../../kde4/settingsdialog.py:333 ../../gnome/settingsdialog.glade:1066 +#: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "Godzina:" -#: ../../kde4/settingsdialog.py:344 ../../gnome/settingsdialog.glade:1053 +#: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "" -#: ../../kde4/settingsdialog.py:353 ../../gnome/settingsdialog.glade:1014 +#: ../../qt4/settingsdialog.py:339 msgid "" -"Run Back In Time periodically with anacron. This is useful if the computer " -"is not running regular." +"Run Back In Time repeatedly. This is useful if the computer is not running " +"regular." msgstr "" -#: ../../kde4/settingsdialog.py:357 ../../gnome/settingsdialog.glade:1040 -msgid "Frequency in days:" +#: ../../qt4/settingsdialog.py:344 +msgid "Every:" msgstr "" -#: ../../kde4/settingsdialog.py:368 ../../gnome/settingsdialog.glade:1026 +#: ../../qt4/settingsdialog.py:362 msgid "" "Run Back In Time as soon as the drive is connected (only once every X " "days).\n" "You will be prompted for your sudo password." msgstr "" -#: ../../kde4/settingsdialog.py:379 ../../gnome/settingsdialog.glade:1310 +#: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Dołącz" -#: ../../kde4/settingsdialog.py:403 ../../kde4/settingsdialog.py:445 -#: ../../gnome/settingsdialog.glade:1411 +#: ../../qt4/settingsdialog.py:381 +msgid "Include files and folders" +msgstr "Dołącz pliki i katalogi" + +#: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "Dodaj plik" -#: ../../kde4/settingsdialog.py:408 ../../kde4/settingsdialog.py:450 -#: ../../gnome/settingsdialog.glade:1427 +#: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Dodaj katalog" -#: ../../kde4/settingsdialog.py:418 ../../gnome/settingsdialog.glade:1474 +#: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Wyklucz" -#: ../../kde4/settingsdialog.py:421 ../../gnome/settingsdialog.glade:1328 +#: ../../qt4/settingsdialog.py:417 msgid "" "Warning: Wildcards ('foo*', '[fF]oo', 'fo?') will be ignored with " "mode 'SSH encrypted'.\n" "Only separate asterisk are allowed ('foo/*', 'foo/**/bar')" msgstr "" -#: ../../kde4/settingsdialog.py:430 +#: ../../qt4/settingsdialog.py:425 +msgid "Exclude patterns, files or folders" +msgstr "Wyklucz ścieżki, pliki lub katalogi" + +#: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "Bardzo zalecane:" -#: ../../kde4/settingsdialog.py:460 ../../gnome/settingsdialog.glade:1905 +#: ../../qt4/settingsdialog.py:463 +msgid "Add default" +msgstr "" + +#: ../../qt4/settingsdialog.py:474 +msgid "Exclude files bigger than: " +msgstr "" + +#: ../../qt4/settingsdialog.py:475 +#, python-format +msgid "" +"Exclude files bigger than value in %(prefix)s.\n" +"With 'Full rsync mode' disabled this will only affect new files\n" +"because for rsync this is a transfer option, not an exclude option.\n" +"So big files that has been backed up before will remain in snapshots\n" +"even if they had changed." +msgstr "" + +#: ../../qt4/settingsdialog.py:493 msgid "Auto-remove" msgstr "Autousuwanie" -#: ../../kde4/settingsdialog.py:464 ../../gnome/settingsdialog.glade:1608 +#: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "Starsze niż:" -#: ../../kde4/settingsdialog.py:478 ../../gnome/settingsdialog.glade:1624 +#: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "Jeżeli wolnej przestrzeni na dysku jest mniej niż:" -#: ../../kde4/settingsdialog.py:490 ../../gnome/settingsdialog.glade:1642 +#: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" -#: ../../kde4/settingsdialog.py:514 ../../gnome/settingsdialog.glade:1697 +#: ../../qt4/settingsdialog.py:551 +msgid "Run in background on remote Host." +msgstr "" + +#: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "Zachowaj wszystkie migawki bez ostatniej" -#: ../../kde4/settingsdialog.py:517 ../../kde4/settingsdialog.py:522 -#: ../../gnome/settingsdialog.glade:1705 ../../gnome/settingsdialog.glade:1729 +#: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "dni" -#: ../../kde4/settingsdialog.py:519 ../../gnome/settingsdialog.glade:1717 +#: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "Przechowaj jedną migawkę na dzień" -#: ../../kde4/settingsdialog.py:524 ../../gnome/settingsdialog.glade:1743 +#: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "Przechowaj jedną migawkę na tydzień" -#: ../../kde4/settingsdialog.py:527 +#: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "tygodni" -#: ../../kde4/settingsdialog.py:529 ../../gnome/settingsdialog.glade:1769 +#: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "Przechowaj jedną migawkę na miesiąc" -#: ../../kde4/settingsdialog.py:532 ../../gnome/settingsdialog.glade:1781 +#: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "miesięcy" -#: ../../kde4/settingsdialog.py:534 ../../gnome/settingsdialog.glade:1795 +#: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "Przechowój jedną migawkę na rok przez wszystkie lata" -#: ../../kde4/settingsdialog.py:537 ../../gnome/settingsdialog.glade:1496 +#: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "Nie usuwaj nazwanych migawek" -#: ../../kde4/settingsdialog.py:546 ../../gnome/settingsdialog.glade:2104 +#: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Ustawienia" -#: ../../kde4/settingsdialog.py:549 ../../gnome/settingsdialog.glade:1920 +#: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Włącz powiadomienia" -#: ../../kde4/settingsdialog.py:552 ../../gnome/settingsdialog.glade:1937 +#: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "Wyłącz migawki podczas zasilania z baterii" -#: ../../kde4/settingsdialog.py:555 +#: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" msgstr "Status zasilania niedostępny w systemie" -#: ../../kde4/settingsdialog.py:558 ../../gnome/settingsdialog.glade:1955 -msgid "Backup files on restore" -msgstr "Utwórz kopię plików podczas przywracania" +#: ../../qt4/settingsdialog.py:611 +msgid "Run only one snapshot at a time" +msgstr "" + +#: ../../qt4/settingsdialog.py:612 +msgid "" +"Other snapshots will be blocked until the current snapshot is done.\n" +"This is a global option. So it will effect all profiles for this user.\n" +"But you need to activate this for all other users, too." +msgstr "" + +#: ../../qt4/settingsdialog.py:617 +msgid "Backup replaced files on restore" +msgstr "" + +#: ../../qt4/settingsdialog.py:618 +#, python-format +msgid "" +"Newer versions of files will be renamed with trailing '%(suffix)s' before " +"restoring.\n" +"If you don't need them anymore you can remove them with '%(cmd)s'" +msgstr "" -#: ../../kde4/settingsdialog.py:561 ../../gnome/settingsdialog.glade:1972 +#: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "Kontynuuj przy błędach (pozwól na niekompletne migawki)" -#: ../../kde4/settingsdialog.py:564 ../../gnome/settingsdialog.glade:1989 +#: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "Używaj sum kontrolnych do wykrywania zmian" -#: ../../kde4/settingsdialog.py:567 ../../gnome/settingsdialog.glade:2006 +#: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "" -#: ../../kde4/settingsdialog.py:568 ../../gnome/settingsdialog.glade:2032 +#: ../../qt4/settingsdialog.py:634 msgid "" -"- snapshots are no read-only\n" -"- destination file-system must support all linux attributes (dates, rights, " +"- snapshots are not read-only\n" +"- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" -#: ../../kde4/settingsdialog.py:575 ../../gnome/settingsdialog.glade:2045 +#: ../../qt4/settingsdialog.py:641 +msgid "Take a new snapshot regardless of there were changes or not." +msgstr "" + +#: ../../qt4/settingsdialog.py:644 msgid "Check for changes (don't take a new snapshot if nothing changed)" msgstr "" "Sprawdź zamiany (nie twórz nowej migawki jeśli nie nastąpiły zmiany )" -#: ../../kde4/settingsdialog.py:582 +#: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "Poziom dziennika:" -#: ../../kde4/settingsdialog.py:597 ../../gnome/settingsdialog.glade:2366 -msgid "Expert Options" -msgstr "Opcje zaawansowane" +#: ../../qt4/settingsdialog.py:656 +msgid "None" +msgstr "Brak" -#: ../../kde4/settingsdialog.py:600 +#: ../../qt4/settingsdialog.py:658 +msgid "Changes & Errors" +msgstr "Zmiany i błędy" + +#: ../../qt4/settingsdialog.py:674 msgid "Change these options only if you really know what you are doing !" msgstr "Zmień te ustawienia tylko jeżeli dobrze wiesz co robisz!" -#: ../../kde4/settingsdialog.py:608 ../../gnome/settingsdialog.glade:2133 -msgid "Run 'nice' as cron job (default: enabled)" -msgstr "Uruchom 'nice' jako zadanie cron (domyślnie włączone)" +#: ../../qt4/settingsdialog.py:678 +msgid "Run 'nice':" +msgstr "" -#: ../../kde4/settingsdialog.py:611 ../../gnome/settingsdialog.glade:2150 -msgid "Run 'ionice' as cron job (default: enabled)" -msgstr "Uruchom 'ionice' jako zadanie cron (domyślnie włączone)" +#: ../../qt4/settingsdialog.py:684 ../../qt4/settingsdialog.py:696 +msgid "as cron job" +msgstr "" + +#: ../../qt4/settingsdialog.py:687 ../../qt4/settingsdialog.py:702 +#: ../../qt4/settingsdialog.py:716 +msgid "on remote host" +msgstr "" -#: ../../kde4/settingsdialog.py:614 ../../gnome/settingsdialog.glade:2167 -msgid "Run 'ionice' when taking a manual snapshot (default: disabled)" +#: ../../qt4/settingsdialog.py:690 +msgid "Run 'ionice':" msgstr "" -#: ../../kde4/settingsdialog.py:617 ../../gnome/settingsdialog.glade:2184 -msgid "Run 'nice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:699 +msgid "when taking a manual snapshot" msgstr "" -#: ../../kde4/settingsdialog.py:620 ../../gnome/settingsdialog.glade:2201 -msgid "Run 'ionice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:706 +msgid "Run 'rsync' with 'nocache':" msgstr "" -#: ../../kde4/settingsdialog.py:626 ../../gnome/settingsdialog.glade:2224 +#: ../../qt4/settingsdialog.py:712 +msgid "on local machine" +msgstr "" + +#: ../../qt4/settingsdialog.py:719 +msgid "Redirect stdout to /dev/null in cronjobs." +msgstr "" + +#: ../../qt4/settingsdialog.py:725 +msgid "Redirect stderr to /dev/null in cronjobs." +msgstr "" + +#: ../../qt4/settingsdialog.py:734 msgid "Limit rsync bandwidth usage: " msgstr "" -#: ../../kde4/settingsdialog.py:629 ../../gnome/settingsdialog.glade:2259 +#: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" -#: ../../kde4/settingsdialog.py:634 ../../gnome/settingsdialog.glade:2280 +#: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "Zachowaj ACL" -#: ../../kde4/settingsdialog.py:637 ../../gnome/settingsdialog.glade:2297 +#: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "Zachowaj rozszerzone atrybuty (xattr)" -#: ../../kde4/settingsdialog.py:640 ../../gnome/settingsdialog.glade:2314 +#: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute links)" msgstr "" "Kopiowanie niebezpiecznych linków (działa tylko z linkami bezwzględnymi)" -#: ../../kde4/settingsdialog.py:643 ../../gnome/settingsdialog.glade:2331 -msgid "Copy links (dereference symbolic links)" -msgstr "Kopiowanie linków (odwołanie linków symbolicznych)" - -#: ../../kde4/snapshotsdialog.py:46 ../../kde4/snapshotsdialog.py:173 -#: ../../gnome/snapshotsdialog.glade:385 -msgid "Diff Options" -msgstr "Opcje diff" - -#: ../../kde4/snapshotsdialog.py:56 ../../gnome/snapshotsdialog.glade:314 -msgid "Command:" -msgstr "Polecenie:" +#: ../../qt4/settingsdialog.py:834 +msgid "Paste additional options to rsync" +msgstr "" -#: ../../kde4/snapshotsdialog.py:60 ../../gnome/snapshotsdialog.glade:322 -msgid "Parameters:" -msgstr "Parametry:" +#: ../../qt4/settingsdialog.py:837 +msgid "" +"Options must be quoted e.g. --exclude-from=\"/path/to/my exclude file\"." +msgstr "" -#: ../../kde4/snapshotsdialog.py:64 ../../gnome/snapshotsdialog.glade:334 -msgid "Use %1 and %2 for path parameters" -msgstr "Użyj %1 i %2 dla ścieżki parametrów" +#: ../../qt4/settingsdialog.py:847 +msgid "Add prefix to SSH commands" +msgstr "" -#: ../../kde4/snapshotsdialog.py:123 ../../gnome/snapshotsdialog.glade:184 -#: ../../gnome/snapshotsdialog.glade:186 -msgid "Delete" +#: ../../qt4/settingsdialog.py:850 +#, python-format +msgid "" +"Prefix to run before every command on remote host.\n" +"Variables need to be escaped with \\$FOO.\n" +"This doesn't touch rsync. So to add a prefix\n" +"for rsync use \"%(cb_rsync_options)s\" with\n" +"%(rsync_options_value)s\n" +"\n" +"%(default)s: %(def_value)s" msgstr "" -#: ../../kde4/snapshotsdialog.py:128 ../../gnome/snapshotsdialog.glade:199 -#: ../../gnome/snapshotsdialog.glade:201 -msgid "Select All" +#: ../../qt4/settingsdialog.py:858 ../../qt4/settingsdialog.py:1691 +msgid "default" msgstr "" -#: ../../kde4/snapshotsdialog.py:132 ../../gnome/snapshotsdialog.glade:88 -msgid "List only different snapshots" -msgstr "Wyświetl tylko różne migawki" +#: ../../qt4/settingsdialog.py:875 +msgid "Restore Config" +msgstr "" -#: ../../kde4/snapshotsdialog.py:139 ../../gnome/snapshotsdialog.glade:110 -msgid "List only equal snapshots to: " +#: ../../qt4/settingsdialog.py:891 +msgid "" +"Full system backup can only create a snapshot to be restored to the same " +"physical disk(s) with the same disk partitioning as from the source; " +"restoring to new physical disks or the same disks with different " +"partitioning will yield a potentially broken and unusable system.\n" +"\n" +"Full system backup will override some settings that may have been " +"customized. Continue?" msgstr "" -#: ../../kde4/snapshotsdialog.py:149 ../../gnome/snapshotsdialog.glade:146 -msgid "Deep check (more accurate, but slow)" -msgstr "Szczegółowa analiza (dokładniejsza, ale bardziej czasochłonna)" +#: ../../qt4/settingsdialog.py:922 +msgid "New profile" +msgstr "Nowy profil" -#: ../../kde4/snapshotsdialog.py:174 -msgid "Go To" -msgstr "Idź do" +#: ../../qt4/settingsdialog.py:938 +msgid "Rename profile" +msgstr "Zmień nazwę profilu" -#: ../../gnome/logviewdialog.glade:9 -msgid "Log View" -msgstr "Podgląd dziennika" +#: ../../qt4/settingsdialog.py:952 +#, python-format +msgid "Are you sure you want to delete the profile \"%s\" ?" +msgstr "Na pewno usunąć profil \"%s\"?" -#: ../../gnome/logviewdialog.glade:179 -msgid "scroll down automatic" +#: ../../qt4/settingsdialog.py:1191 +msgid "" +"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " +"*/3 for periodic backups every 3 hours" msgstr "" -#: ../../gnome/mainwindow.glade:7 -msgid "Back In Time" -msgstr "Back In Time" +#: ../../qt4/settingsdialog.py:1489 +msgid "Exclude pattern" +msgstr "Wzór wykluczenia" -#: ../../gnome/mainwindow.glade:45 -msgid "Backup Now" -msgstr "Archiwizuj teraz" +#: ../../qt4/settingsdialog.py:1502 +msgid "Exclude file" +msgstr "Wyklucz plik" -#: ../../gnome/mainwindow.glade:171 -msgid "Shutdown" +#: ../../qt4/settingsdialog.py:1506 +msgid "Exclude folder" +msgstr "Wyklucz katalog" + +#: ../../qt4/settingsdialog.py:1525 +msgid "Include file" +msgstr "Dołącz plik" + +#: ../../qt4/settingsdialog.py:1533 ../../qt4/settingsdialog.py:1553 +#, python-format +msgid "" +"\"%s\" is a symlink. The linked target will not be backed up until you " +"include it, too.\n" +"Would you like to include the symlinks target instead?" msgstr "" -#: ../../gnome/mainwindow.glade:287 -msgid "Parent folder" -msgstr "Katalog nadrzędny" +#: ../../qt4/settingsdialog.py:1545 +msgid "Include folder" +msgstr "Uwzględnij katalog" -#: ../../gnome/mainwindow.glade:327 -msgid "Hidden files" -msgstr "Ukryte pliki" +#: ../../qt4/settingsdialog.py:1572 +msgid "Are you sure you want to change snapshots folder ?" +msgstr "Na pewno zmienić katalog migawek?" -#: ../../gnome/mainwindow.glade:451 -msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +#: ../../qt4/settingsdialog.py:1688 +msgid "enabled" msgstr "" -"Ten katalog nie istnieje\n" -" w bieżącej migawce!" -#: ../../gnome/settingsdialog.glade:287 -msgid "Where to save snapshots" -msgstr "Gdzie zapisać migawki" +#: ../../qt4/settingsdialog.py:1690 +msgid "disabled" +msgstr "" -#: ../../gnome/settingsdialog.glade:483 -msgid "Private key:" +#: ../../qt4/settingsdialog.py:1715 +msgid "Restore Settings" msgstr "" -#: ../../gnome/settingsdialog.glade:534 -msgid "Advanced SSH Settings" +#: ../../qt4/settingsdialog.py:1732 +msgid " and add your user to group 'fuse'" msgstr "" -#: ../../gnome/settingsdialog.glade:552 -msgid "SSH Settings" +#: ../../qt4/settingsdialog.py:1736 +#, python-format +msgid "" +"Please navigate to the snapshot from which you want to restore %(appName)s's " +"configuration. The path may look like: \n" +"%(samplePath)s\n" +"\n" +"If your snapshots are on a remote drive or if they are encrypted you need to " +"manually mount them first. If you use Mode SSH you also may need to set up " +"public key login to the remote host%(addFuse)s.\n" +"Take a look at 'man backintime'." msgstr "" -#: ../../gnome/settingsdialog.glade:815 -msgid "Password" +#: ../../qt4/settingsdialog.py:1794 ../../qt4/settingsdialog.py:1854 +msgid "No config found" msgstr "" -#: ../../gnome/settingsdialog.glade:930 -msgid "Profile Id:" -msgstr "Id profilu:" +#: ../../qt4/snapshotsdialog.py:49 ../../qt4/snapshotsdialog.py:173 +msgid "Diff Options" +msgstr "Opcje diff" -#: ../../gnome/settingsdialog.glade:1115 -msgid "" -"hours seperate by comma ( e.g. 8,12,18,23) or */3 for periodic backups every " -"3 hours (cron style)" +#: ../../qt4/snapshotsdialog.py:56 +msgid "Command:" +msgstr "Polecenie:" + +#: ../../qt4/snapshotsdialog.py:60 +msgid "Parameters:" +msgstr "Parametry:" + +#: ../../qt4/snapshotsdialog.py:64 +msgid "Use %1 and %2 for path parameters" +msgstr "Użyj %1 i %2 dla ścieżki parametrów" + +#: ../../qt4/snapshotsdialog.py:106 +msgid "List only different snapshots" +msgstr "Wyświetl tylko różne migawki" + +#: ../../qt4/snapshotsdialog.py:113 +msgid "List only equal snapshots to: " msgstr "" -#: ../../gnome/settingsdialog.glade:1163 -msgid "Schedule" -msgstr "Harmonogram" +#: ../../qt4/snapshotsdialog.py:123 +msgid "Deep check (more accurate, but slow)" +msgstr "Szczegółowa analiza (dokładniejsza, ale bardziej czasochłonna)" -#: ../../gnome/settingsdialog.glade:1363 -msgid "Highly recommended:" -msgstr "Bardzo zalecane:" +#: ../../qt4/snapshotsdialog.py:144 +msgid "Delete" +msgstr "" -#: ../../gnome/settingsdialog.glade:1377 -msgid "label" -msgstr "etykieta" +#: ../../qt4/snapshotsdialog.py:148 +msgid "Select All" +msgstr "" -#: ../../gnome/settingsdialog.glade:1755 -msgid "week(s)" -msgstr "tygodnie" +#: ../../qt4/snapshotsdialog.py:161 +msgid "Diff" +msgstr "Różnice" -#: ../../gnome/settingsdialog.glade:2069 -msgid "Log level:" -msgstr "Poziom dziennika:" +#: ../../qt4/snapshotsdialog.py:172 +msgid "Go To" +msgstr "Idź do" -#: ../../gnome/settingsdialog.glade:2121 +#: ../../qt4/snapshotsdialog.py:326 +msgid "You can't compare a snapshot to itself" +msgstr "Nie możesz porównywać migawki samej ze sobą" + +#: ../../qt4/snapshotsdialog.py:333 +#, python-format +msgid "Command not found: %s" +msgstr "Polecenie nie znalezione: %s" + +#: ../../qt4/snapshotsdialog.py:354 +#, python-format msgid "" -"Change these options only if you really know what you are doing !" -msgstr "Zmień te ustawienia tylko jeśli dobrze wiesz co robisz!" +"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" +msgstr "" -#: ../../gnome/snapshotsdialog.glade:263 -msgid "Diff with" -msgstr "Porównaj z" +#: ../../qt4/snapshotsdialog.py:357 +#, python-format +msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +msgstr "" -#: ../../gnome/textinputdialog.glade:7 -msgid "Pattern" -msgstr "Wzór" +#: ../../qt4/snapshotsdialog.py:359 +msgid "WARNING: This can not be revoked!" +msgstr "" -#: ../../gnome/textinputdialog.glade:70 -msgid "Text" +#: ../../qt4/snapshotsdialog.py:374 +#, python-format +msgid "Exclude \"%s\" from future snapshots?" msgstr "" diff -Nru backintime-1.0.36/common/po/pt_BR.po backintime-1.1.12/common/po/pt_BR.po --- backintime-1.0.36/common/po/pt_BR.po 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/po/pt_BR.po 2016-01-11 18:07:58.000000000 +0000 @@ -7,206 +7,238 @@ msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2013-11-09 22:34+0100\n" -"PO-Revision-Date: 2014-03-15 19:36+0000\n" -"Last-Translator: Paulo Sant'Ana \n" +"POT-Creation-Date: 2015-12-19 00:47+0100\n" +"PO-Revision-Date: 2016-01-11 02:04+0000\n" +"Last-Translator: Ronan Arraes Jardim Chagas \n" "Language-Team: Brazilian Portuguese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Launchpad-Export-Date: 2014-08-06 10:20+0000\n" -"X-Generator: Launchpad (build 17147)\n" +"X-Launchpad-Export-Date: 2016-01-11 17:52+0000\n" +"X-Generator: Launchpad (build 17881)\n" -#: ../../common/config.py:72 +#: ../../common/configfile.py:60 +#, python-format +msgid "Failed to save config: %s" +msgstr "Falha ao salvar o arquivo de configuração: %s" + +#: ../../common/configfile.py:78 +#, python-format +msgid "Failed to load config: %s" +msgstr "Falha ao carregar o arquivo de configuração: %s" + +#: ../../common/configfile.py:352 ../../common/configfile.py:414 +#, python-format +msgid "Profile \"%s\" already exists !" +msgstr "O perfil \"%s\" já existe!" + +#: ../../common/configfile.py:383 +msgid "You can't remove the last profile !" +msgstr "Você não pode remover o último perfil!" + +#: ../../common/config.py:76 msgid "Disabled" msgstr "Desabilitado" -#: ../../common/config.py:73 +#: ../../common/config.py:77 msgid "At every boot/reboot" msgstr "Em cada início/reinício" -#: ../../common/config.py:74 +#: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "A cada 5 minutos" -#: ../../common/config.py:75 +#: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "A cada 10 minutos" -#: ../../common/config.py:76 +#: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "A cada 30 minutos" -#: ../../common/config.py:77 +#: ../../common/config.py:81 msgid "Every hour" msgstr "A cada hora" -#: ../../common/config.py:78 +#: ../../common/config.py:82 msgid "Every 2 hours" msgstr "A cada 2 horas" -#: ../../common/config.py:79 +#: ../../common/config.py:83 msgid "Every 4 hours" msgstr "A cada 4 horas" -#: ../../common/config.py:80 +#: ../../common/config.py:84 msgid "Every 6 hours" msgstr "A cada 6 horas" -#: ../../common/config.py:81 +#: ../../common/config.py:85 msgid "Every 12 hours" msgstr "A cada 12 horas" -#: ../../common/config.py:82 +#: ../../common/config.py:86 msgid "Custom Hours" msgstr "Horas customizadas" -#: ../../common/config.py:83 +#: ../../common/config.py:87 msgid "Every Day" msgstr "A cada Dia" -#: ../../common/config.py:84 -msgid "Daily (anacron)" -msgstr "Diariamente (anacron)" +#: ../../common/config.py:88 +msgid "Repeatedly (anacron)" +msgstr "Repetidamente (anacron)" -#: ../../common/config.py:85 +#: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "Quando o drive for conectado (udev)" -#: ../../common/config.py:86 +#: ../../common/config.py:90 msgid "Every Week" msgstr "A cada semana" -#: ../../common/config.py:87 +#: ../../common/config.py:91 msgid "Every Month" msgstr "A cada mês" -#: ../../common/config.py:91 +#: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Dia(s)" -#: ../../common/config.py:92 +#: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Semana(s)" -#: ../../common/config.py:93 +#: ../../common/config.py:97 msgid "Year(s)" msgstr "Ano(s)" -#: ../../common/config.py:100 +#: ../../common/config.py:101 +msgid "Hour(s)" +msgstr "Hora(s)" + +#: ../../common/config.py:104 +msgid "Month(s)" +msgstr "Mês(es)" + +#: ../../common/config.py:126 ../../qt4/settingsdialog.py:551 msgid " EXPERIMENTAL!" msgstr " EXPERIMENTAL!" -#: ../../common/config.py:103 +#: ../../common/config.py:129 msgid "Local" msgstr "Local" -#: ../../common/config.py:104 +#: ../../common/config.py:130 msgid "SSH" -msgstr "" +msgstr "SSH" -#: ../../common/config.py:104 ../../common/config.py:106 -#: ../../gnome/settingsdialog.py:475 ../../kde4/settingsdialog.py:1325 +#: ../../common/config.py:130 ../../common/config.py:132 +#: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "Chave privada SSH" -#: ../../common/config.py:105 +#: ../../common/config.py:131 msgid "Local encrypted" msgstr "Local ebcriptado" -#: ../../common/config.py:105 ../../common/config.py:106 +#: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" -msgstr "" +msgstr "Criptografia" -#: ../../common/config.py:106 +#: ../../common/config.py:132 msgid "SSH encrypted" msgstr "SSH criptografado" -#: ../../common/config.py:112 +#: ../../common/config.py:135 msgid "Default" msgstr "Padrão" -#: ../../common/config.py:113 +#: ../../common/config.py:136 msgid "AES128-CTR" -msgstr "" +msgstr "AES128-CTR" -#: ../../common/config.py:114 +#: ../../common/config.py:137 msgid "AES192-CTR" -msgstr "" +msgstr "AES192-CTR" -#: ../../common/config.py:115 +#: ../../common/config.py:138 msgid "AES256-CTR" msgstr "AES256-CTR" -#: ../../common/config.py:116 +#: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "ARCFOUR256" -#: ../../common/config.py:117 +#: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "ARCFOUR128" -#: ../../common/config.py:118 +#: ../../common/config.py:141 msgid "AES128-CBC" msgstr "AES128-CBC" -#: ../../common/config.py:119 +#: ../../common/config.py:142 msgid "3DES-CBC" msgstr "3DES-CBC" -#: ../../common/config.py:120 +#: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "Blowfish-CBC" -#: ../../common/config.py:121 +#: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "Cast128-CBC" -#: ../../common/config.py:122 +#: ../../common/config.py:145 msgid "AES192-CBC" msgstr "AES192-CBC" -#: ../../common/config.py:123 +#: ../../common/config.py:146 msgid "AES256-CBC" msgstr "AES256-CBC" -#: ../../common/config.py:124 +#: ../../common/config.py:147 msgid "ARCFOUR" msgstr "ARCFOUR" -#: ../../common/config.py:129 +#: ../../common/config.py:153 msgid "Main profile" msgstr "Perfil principal" -#: ../../common/config.py:256 ../../common/config.py:275 -#: ../../common/config.py:286 ../../common/config.py:291 +#: ../../common/config.py:289 ../../common/config.py:296 +#: ../../common/config.py:307 ../../common/config.py:312 +#: ../../qt4/qt4systrayicon.py:61 #, python-format msgid "Profile: \"%s\"" msgstr "Perfil: \"%s\"" -#: ../../common/config.py:256 +#: ../../common/config.py:289 msgid "Snapshots folder is not valid !" msgstr "Pasta para Snapshots não é válida !" -#: ../../common/config.py:275 +#: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "Você deve selecionar pelo menos uma pasta para backup !" -#: ../../common/config.py:286 +#: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "Você não pode incluir uma pasta de backup !" -#: ../../common/config.py:291 +#: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "Você não pode incluir uma sub-pasta de backup !" -#: ../../common/config.py:361 +#: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s não é uma pasta !" -#: ../../common/config.py:376 ../../common/config.py:389 +#: ../../common/config.py:380 +msgid "Host/User/Profile-ID must not be empty!" +msgstr "Host/Usuário/Perfil não podem estar vazios!" + +#: ../../common/config.py:388 ../../common/config.py:420 #, python-format msgid "" "Can't write to: %s\n" @@ -215,59 +247,79 @@ "Não é possível escrever para: %s\n" "Tem certeza de que tem acesso para gravação ?" -#: ../../common/config.py:1286 +#: ../../common/config.py:400 +#, python-format msgid "" -"Can't find crontab.\n" -"Are you sure cron is installed ?\n" -"If not you should disable all automatic backups." +"Destination filesystem for '%(path)s' is formatted with FAT which doesn't " +"support hard-links. Please use a native Linux filesystem." msgstr "" -"Não é possível localizar crontab.\n" -"Você tem certeza se o cron está instalado ?\n" -"Se não você deve desabilitar todos os backups automáticos." - -#: ../../common/config.py:1338 -#, python-format -msgid "Schedule udev doesn't work with mode %s" -msgstr "Agendamento udev não funcionou com modo %s" +"O sistema de arquivos de destino em '%(path)s' está formatado com FAT que " +"não suporta hard-links. Por favor, utilize um sistema de arquivos nativo do " +"Linux." -#: ../../common/config.py:1342 +#: ../../common/config.py:405 #, python-format -msgid "Couldn't find UUID for \"%s\"" -msgstr "Não foi possível encontrar UUID para \"%s\"" +msgid "" +"Destination filsystem for '%(path)s' is a SMB mounted share. Please make " +"sure the remote SMB server supports symlinks or activate '%(copyLinks)s' in " +"'%(expertOptions)s'." +msgstr "" +"O sistema de arquivos de destino em '%(path)s' é um compartilhamento SMB " +"montado. Por favor, tenha certeza que o servidor SMB remoto suporta symlinks " +"ou ative a opção '%(copyLinks)s' em '%(expertOptions)s'." -#: ../../common/config.py:1379 -msgid "Failed to remove udev rules" -msgstr "Falhou ao remover regras udev" +#: ../../common/config.py:408 ../../qt4/settingsdialog.py:815 +msgid "Copy links (dereference symbolic links)" +msgstr "Copiar links (criar links simbólicos)" -#: ../../common/config.py:1385 -msgid "Failed to create udev rules" -msgstr "Falha ao criar regras udev" +#: ../../common/config.py:409 ../../qt4/settingsdialog.py:669 +msgid "Expert Options" +msgstr "Opções avançadas" -#: ../../common/config.py:1420 +#: ../../common/config.py:411 +#, python-format msgid "" -"Can't find anacron.\n" -"Are you sure anacron is installed ?\n" -"If not you should disable daily anacron backups." +"Destination filesystem for '%(path)s is a sshfs mounted share. sshfs doesn't " +"support hard-links. Please use mode 'SSH' instead." msgstr "" +"O sistema de arquivos de destino em '%(path)s' é um compartilhamento sshfs " +"montado. O sshfs não suporta hard-links. Por favor, utilize o modo 'SSH' " +"como alternativa." -#: ../../common/config.py:1439 -msgid "Please provide your sudo password to install the udev rule." +#: ../../common/config.py:1407 +msgid "" +"Can't find crontab.\n" +"Are you sure cron is installed ?\n" +"If not you should disable all automatic backups." msgstr "" +"Não é possível localizar crontab.\n" +"Você tem certeza se o cron está instalado ?\n" +"Se não você deve desabilitar todos os backups automáticos." -#: ../../common/config.py:1445 -msgid "Please provide your sudo password to remove unused udev rules." +#: ../../common/config.py:1411 +msgid "Failed to write new crontab." +msgstr "Falha ao escrever um novo crontab." + +#: ../../common/config.py:1505 +#, python-format +msgid "" +"Could not install Udev rule for profile %(profile_id)s. DBus Service " +"'%(dbus_interface)s' wasn't available" msgstr "" +"Não foi possível instalar a regra Udev para o perfil %(profile_id)s. O " +"serviço DBus '%(dbus_interface)s' não está disponível" -#: ../../common/configfile.py:253 ../../common/configfile.py:315 +#: ../../common/config.py:1517 #, python-format -msgid "Profile \"%s\" already exists !" -msgstr "Perfil \"%s\" já existe !" +msgid "Schedule udev doesn't work with mode %s" +msgstr "Agendamento udev não funcionou com modo %s" -#: ../../common/configfile.py:284 -msgid "You can't remove the last profile !" -msgstr "Você não pode remover o último perfil!" +#: ../../common/config.py:1526 +#, python-format +msgid "Couldn't find UUID for \"%s\"" +msgstr "Não foi possível encontrar UUID para \"%s\"" -#: ../../common/encfstools.py:95 +#: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" @@ -278,16 +330,16 @@ "\n" "%(error)s" -#: ../../common/encfstools.py:105 +#: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "Não pude desmontar encfs %s" -#: ../../common/encfstools.py:149 +#: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "Configuração para pasta encriptada não foi encontrada." -#: ../../common/encfstools.py:153 +#: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" @@ -295,87 +347,98 @@ "\n" "Criar uma nova pasta encriptada?" -#: ../../common/encfstools.py:154 +#: ../../common/encfstools.py:171 msgid "Cancel" -msgstr "" +msgstr "Cancelar" -#: ../../common/encfstools.py:157 +#: ../../common/encfstools.py:174 msgid "Please confirm password" -msgstr "" +msgstr "Por favor, confirme o password" -#: ../../common/encfstools.py:161 +#: ../../common/encfstools.py:178 msgid "Password doesn't match" -msgstr "" +msgstr "Password não corresponde" -#: ../../common/encfstools.py:166 +#: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" -msgstr "" +msgstr "encfs não encontrado. Por favor, instale-o." -#: ../../common/encfstools.py:174 ../../common/sshtools.py:207 +#: ../../common/encfstools.py:196 ../../common/sshtools.py:262 #, python-format msgid "" "%(user)s is not member of group 'fuse'.\n" " Run 'sudo adduser %(user)s fuse'. To apply changes logout and login again.\n" "Look at 'man backintime' for further instructions." msgstr "" +"%(user)s não é membro do grupo 'fuse'.\n" +" Execute 'sudo adduser %(user)s fuse'. Para aplicar as alterações, execute " +"um logout e logue novamente.\n" +"Veja o manual em 'man backintime' para instruções adicionais." -#: ../../common/encfstools.py:189 +#: ../../common/encfstools.py:211 msgid "" "encfs version 1.7.2 and before has a bug with option --reverse. Please " "update encfs" msgstr "" +"As versões até 1.7.2 do encfs possuem um bug com a opção --reverse. Por " +"favor, atualize o encfs." -#: ../../common/encfstools.py:453 ../../common/encfstools.py:480 -#: ../../common/snapshots.py:982 ../../common/snapshots.py:1288 -#: ../../kde4/app.py:82 ../../gnome/mainwindow.glade:43 +#: ../../common/encfstools.py:512 ../../common/snapshots.py:1131 +#: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "Tirar snapshot" -#: ../../common/mount.py:195 +#: ../../common/mount.py:204 #, python-format msgid "" "Hash collision occurred in hash_id %s. Incrementing global value " "hash_collision and try again." msgstr "" +"Colisão de hash ocorreu em hash_id %s. Incrementando o valor global " +"hash_collision e tentando de novo." -#: ../../common/mount.py:246 +#: ../../common/mount.py:259 #, python-format msgid "mountpoint %s not empty." -msgstr "" +msgstr "O ponto de montagem %s não está vazio." -#: ../../common/mount.py:286 +#: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" -#: ../../common/password.py:425 +#: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " -msgstr "" +msgstr "Perfil '%(profile)s': Digite o password para %(mode)s: " -#: ../../common/snapshots.py:171 ../../gnome/app.py:1127 -#: ../../kde4/app.py:1014 +#: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Agora" -#: ../../common/snapshots.py:182 ../../gnome/gnometools.py:37 +#: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "COM ERROS !" -#: ../../common/snapshots.py:282 +#: ../../common/snapshots.py:344 msgid "" "### This log has been decoded with automatic search pattern\n" "### If some paths are not decoded you can manually decode them with:\n" msgstr "" -#: ../../common/snapshots.py:465 +#: ../../common/snapshots.py:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "FALHOU" -#: ../../common/snapshots.py:564 +#: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "Permissões de restauração:" -#: ../../common/snapshots.py:739 +#: ../../common/snapshots.py:752 ../../qt4/app.py:377 ../../qt4/app.py:675 +#: ../../qt4/app.py:692 ../../qt4/qt4systrayicon.py:65 +msgid "Done" +msgstr "Pronto" + +#: ../../common/snapshots.py:860 msgid "" "Back In Time changed its backup format.\n" "\n" @@ -385,7 +448,7 @@ "\n" "Seus snapshots antigos serão movidos para esse novo formato. OK?" -#: ../../common/snapshots.py:749 +#: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" @@ -402,7 +465,7 @@ "\n" "(O programa ainda será capaz de discriminar entre eles)" -#: ../../common/snapshots.py:752 +#: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" @@ -410,7 +473,7 @@ "Nenhum perfil encontrado. Tem de atualizar a lista de perfis primeiro, por " "favor reinicie o Back In Time" -#: ../../common/snapshots.py:803 +#: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" @@ -423,7 +486,7 @@ "cannot continue taking snapshots" msgstr "" -#: ../../common/snapshots.py:812 +#: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" @@ -438,7 +501,7 @@ "Você pode mover manualmente os snapshots, \n" "se você estiver pronto reinicie o Back In Time para continuar" -#: ../../common/snapshots.py:825 +#: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" @@ -448,7 +511,7 @@ "\n" "Back In Time continuará a fazer snapshots de novo conforme programado" -#: ../../common/snapshots.py:830 +#: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" @@ -468,12 +531,12 @@ "\n" "If you do not, you will be asked again next time you start Back In Time." -#: ../../common/snapshots.py:839 +#: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "" "Back In Time continuará a fazer snapshots de novo conforme programado" -#: ../../common/snapshots.py:841 +#: ../../common/snapshots.py:953 msgid "" "Back In Time still cannot continue taking new snapshots.\n" "Restart Back In Time to see the questions again" @@ -481,7 +544,11 @@ "Back In Time não pode continuar a fazer novos snapshots.\n" "Reinicie o Back In Time para ver as questões novamente" -#: ../../common/snapshots.py:913 +#: ../../common/snapshots.py:972 +msgid "Deferring backup while on battery" +msgstr "Adiando o backup enquanto estiver na bateria" + +#: ../../common/snapshots.py:1035 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it." @@ -489,261 +556,342 @@ "Não é possível localizar pasta de instantâneos.\n" "Se ele estiver em uma unidade removível, por favor conecte-a." -#: ../../common/snapshots.py:915 +#: ../../common/snapshots.py:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "Esperando %s segundo." msgstr[1] "Esperando % segundos." -#: ../../common/snapshots.py:941 +#: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "Falha ao fazer snapshot %s !!!" -#: ../../common/snapshots.py:950 +#: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "Finalizando" -#: ../../common/snapshots.py:1088 +#: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "Não é possível criar a pasta: %s" -#: ../../common/snapshots.py:1107 +#: ../../common/snapshots.py:1217 msgid "..." msgstr "..." -#: ../../common/snapshots.py:1134 +#: ../../common/snapshots.py:1238 +#, python-format +msgid "Found leftover '%s' which can be continued." +msgstr "" + +#: ../../common/snapshots.py:1250 +#, python-format +msgid "Remove leftover '%s' folder from last run" +msgstr "" + +#: ../../common/snapshots.py:1263 #, python-format msgid "Can't remove folder: %s" msgstr "Não é possível remover pasta: %s" -#: ../../common/snapshots.py:1219 +#: ../../common/snapshots.py:1340 #, python-format msgid "Compare with snapshot %s" msgstr "Comparar com snapshot %s" -#: ../../common/snapshots.py:1248 +#: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "Criar hard-links" -#: ../../common/snapshots.py:1335 +#: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "Salvar arquivo de configuração ..." -#: ../../common/snapshots.py:1341 +#: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "Salvar permissão ..." -#: ../../common/snapshots.py:1442 -#, python-format -msgid "Can't rename %(new_path)s to %(path)s" +#: ../../common/snapshots.py:1470 +msgid "Save permission over ssh failed. Retry normal method" msgstr "" +"Gravação de permissão através de ssh falhou. Tentar novamente com o método " +"normal" -#: ../../common/snapshots.py:1562 -msgid "Remove old snapshots" -msgstr "Remover snapshots antigos" +#: ../../common/snapshots.py:1521 +#, python-format +msgid "Can't rename %(new_path)s to %(path)s" +msgstr "Não foi possível renomear %(new_path)s para %(path)s" -#: ../../common/snapshots.py:1586 ../../kde4/settingsdialog.py:501 -#: ../../gnome/settingsdialog.glade:1660 +#: ../../common/snapshots.py:1695 ../../common/snapshots.py:1728 +#: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "Remoção Inteligente" -#: ../../common/snapshots.py:1591 +#: ../../common/snapshots.py:1704 +msgid "Remove old snapshots" +msgstr "Remover snapshots antigos" + +#: ../../common/snapshots.py:1733 msgid "Try to keep min free space" msgstr "Tentar manter o mínimo espaço livre" -#: ../../common/snapshots.py:1621 +#: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" -msgstr "" +msgstr "Tente manter no mínimo %d%% de inodes livres" -#: ../../common/sshtools.py:106 +#: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" -msgstr "" +msgstr "Não foi possível montar %s" -#: ../../common/sshtools.py:113 +#: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" -msgstr "" - -#: ../../common/sshtools.py:187 -#, python-format -msgid "" -"Failed to unlock SSH private key:\n" -"Error: %s" -msgstr "" +msgstr "Não foi possível desmontar o sshfs %s" -#: ../../common/sshtools.py:194 +#: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" +"Não foi possível destravar a chave privada ssh. O password está errado ou " +"não está disponível para o cron." -#: ../../common/sshtools.py:199 +#: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" -msgstr "" +msgstr "sshfs não encontrado. Por favor, instale-o." -#: ../../common/sshtools.py:217 +#: ../../common/sshtools.py:278 #, python-format msgid "" "Password-less authentication for %(user)s@%(host)s failed. Look at 'man " "backintime' for further instructions." msgstr "" +"A autenticação sem password para %(user)s@%(host)s falhou. Veja 'man " +"backintime' para instruções adicionais." -#: ../../common/sshtools.py:229 +#: ../../common/sshtools.py:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" -#: ../../common/sshtools.py:254 +#: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." -msgstr "" +msgstr "%s não encontrado em ssh_known_hosts." -#: ../../common/sshtools.py:274 +#: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" +"O caminho remoto existe mas não é um diretório:\n" +" %s" -#: ../../common/sshtools.py:276 +#: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" +"O caminho remoto não é gravável:\n" +" %s" -#: ../../common/sshtools.py:278 +#: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" +"O caminho remoto não é executável:\n" +" %s" -#: ../../common/sshtools.py:280 +#: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" +"Não foi possível criar o caminho remoto:\n" +" %s" -#: ../../common/sshtools.py:302 +#: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." -msgstr "" +msgstr "Ping %s falhou. O host está inativo ou o endereço está errado." -#: ../../common/sshtools.py:325 ../../common/sshtools.py:383 +#: ../../common/sshtools.py:423 ../../common/sshtools.py:553 #, python-format msgid "" "Remote host %(host)s doesn't support '%(command)s':\n" "%(err)s\n" "Look at 'man backintime' for further instructions" msgstr "" +"O host remoto %(host)s não suporta '%(command)s':\n" +"%(err)s\n" +"Veja 'man backintime' para instruções adicionais." -#: ../../common/sshtools.py:387 +#: ../../common/sshtools.py:556 #, python-format msgid "" "Check commands on host %(host)s returned unknown error:\n" "%(err)s\n" "Look at 'man backintime' for further instructions" msgstr "" +"Os comandos de verificação no host %(host)s retornaram um erro " +"desconhecido:\n" +"%(err)s\n" +"Veja 'man backintime' para instruções adicionais." -#: ../../common/sshtools.py:400 +#: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" -msgstr "" +msgstr "O host remoto %s não suporta hardlinks" -#: ../../gnome/app.py:185 ../../gnome/app.py:594 ../../gnome/app.py:608 -#: ../../kde4/app.py:299 ../../kde4/app.py:570 ../../kde4/app.py:587 -msgid "Done" -msgstr "Pronto" +#: ../../qt4/app.py:81 +msgid "Refresh snapshots list" +msgstr "Atualizar lista de snapshots" + +#: ../../qt4/app.py:85 ../../qt4/app.py:890 +msgid "Snapshot Name" +msgstr "Nome do Snapshot" + +#: ../../qt4/app.py:88 +msgid "Remove Snapshot" +msgstr "Remover snapshot" + +#: ../../qt4/app.py:91 +msgid "View Snapshot Log" +msgstr "Ver log dos snapshots" + +#: ../../qt4/app.py:94 +msgid "View Last Log" +msgstr "Ver último log" + +#: ../../qt4/app.py:99 ../../qt4/settingsdialog.py:51 +msgid "Settings" +msgstr "Configurações" -#: ../../gnome/app.py:189 ../../kde4/app.py:143 ../../kde4/app.py:159 -#: ../../gnome/mainwindow.glade:225 +#: ../../qt4/app.py:104 +msgid "Shutdown" +msgstr "Desligar" + +#: ../../qt4/app.py:105 +msgid "Shutdown system after snapshot has finished." +msgstr "Desligar o sistema após a finalização do snapshot." + +#: ../../qt4/app.py:111 +msgid "Exit" +msgstr "Sair" + +#: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 msgid "Help" msgstr "Ajuda" -#: ../../gnome/app.py:191 ../../kde4/app.py:146 -#: ../../gnome/mainwindow.glade:223 +#: ../../qt4/app.py:122 +msgid "Config File Help" +msgstr "" + +#: ../../qt4/app.py:125 msgid "Website" msgstr "Website" -#: ../../gnome/app.py:192 ../../kde4/app.py:148 +#: ../../qt4/app.py:127 ../../qt4/app.py:982 +msgid "Changelog" +msgstr "Registro de alterações" + +#: ../../qt4/app.py:129 msgid "FAQ" -msgstr "" +msgstr "FAQ (perguntas mais freqüentes)" -#: ../../gnome/app.py:193 ../../kde4/app.py:150 +#: ../../qt4/app.py:131 msgid "Ask a question" -msgstr "" +msgstr "Fazer uma pergunta" -#: ../../gnome/app.py:194 ../../kde4/app.py:152 +#: ../../qt4/app.py:133 msgid "Report a bug" -msgstr "" +msgstr "Relatar um problema (bug)" -#: ../../gnome/app.py:196 ../../kde4/app.py:155 +#: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "Sobre" -#: ../../gnome/app.py:202 ../../gnome/app.py:887 -#: ../../gnome/restoredialog.py:84 ../../gnome/snapshotsdialog.py:83 -#: ../../gnome/snapshotsdialog.py:244 ../../kde4/app.py:206 -#: ../../kde4/app.py:216 ../../kde4/restoredialog.py:68 -#: ../../kde4/snapshotsdialog.py:111 ../../kde4/snapshotsdialog.py:117 -#: ../../gnome/mainwindow.glade:350 ../../gnome/mainwindow.glade:352 -#: ../../gnome/snapshotsdialog.glade:169 ../../gnome/snapshotsdialog.glade:171 +#: ../../qt4/app.py:163 +msgid "Up" +msgstr "Para cima" + +#: ../../qt4/app.py:174 ../../qt4/settingsdialog.py:1776 +msgid "Show hidden files" +msgstr "Mostrar arquivos ocultos" + +#: ../../qt4/app.py:184 ../../qt4/app.py:199 ../../qt4/app.py:233 +#: ../../qt4/restoredialog.py:62 ../../qt4/settingsdialog.py:1818 +#: ../../qt4/snapshotsdialog.py:134 ../../qt4/snapshotsdialog.py:139 msgid "Restore" msgstr "Restaurar" -#: ../../gnome/app.py:203 ../../gnome/app.py:888 ../../gnome/gnometools.py:67 -#: ../../gnome/snapshotsdialog.py:84 ../../gnome/snapshotsdialog.py:245 -#: ../../kde4/app.py:208 ../../kde4/restoredialog.py:42 -#: ../../kde4/snapshotsdialog.py:113 +#: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 +#: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "Restaurar para ..." -#: ../../gnome/app.py:205 ../../gnome/app.py:896 ../../gnome/app.py:1146 -#: ../../kde4/app.py:1041 -#, python-format -msgid "Restore '%s'" -msgstr "Restaurar '%s'" +#: ../../qt4/app.py:194 +msgid "Restore and delete new files" +msgstr "Restaurar e apagar novos arquivos" -#: ../../gnome/app.py:207 ../../gnome/app.py:897 ../../gnome/app.py:1147 -#: ../../kde4/app.py:1042 +#: ../../qt4/app.py:201 #, python-format -msgid "Restore '%s' to ..." -msgstr "Restaurar '%s' para ..." +msgid "" +"Restore selected file or folder.\n" +"If this button is grayed out this is most likely because \"%(now)s\" is " +"selected in left hand snapshots list." +msgstr "" + +#: ../../qt4/app.py:206 ../../qt4/logviewdialog.py:67 +#: ../../qt4/qt4tools.py:160 ../../qt4/snapshotsdialog.py:96 +msgid "Snapshots" +msgstr "Snapshots" + +#: ../../qt4/app.py:213 +msgid "Snapshot" +msgstr "Snapshot" + +#: ../../qt4/app.py:224 +msgid "View" +msgstr "Exibir" -#: ../../gnome/app.py:226 ../../kde4/app.py:235 +#: ../../qt4/app.py:277 msgid "Shortcuts" msgstr "Atalhos" -#: ../../gnome/app.py:249 -msgid "Name" -msgstr "Nome" - -#: ../../gnome/app.py:260 -msgid "Size" -msgstr "Tamanho" - -#: ../../gnome/app.py:267 -msgid "Date" -msgstr "Data" - -#: ../../gnome/app.py:286 ../../gnome/app.py:883 -#: ../../gnome/snapshotsdialog.py:116 ../../kde4/app.py:171 -#: ../../kde4/app.py:221 ../../kde4/snapshotsdialog.py:91 -#: ../../gnome/mainwindow.glade:366 ../../gnome/mainwindow.glade:368 -#: ../../gnome/snapshotsdialog.glade:8 -msgid "Snapshots" -msgstr "Snapshots" +#: ../../qt4/app.py:295 +msgid "" +"This folder doesn't exist\n" +"in the current selected snapshot!" +msgstr "" + +#: ../../qt4/app.py:359 +msgid "Add to Include" +msgstr "" + +#: ../../qt4/app.py:360 +msgid "Add to Exclude" +msgstr "" + +#: ../../qt4/app.py:416 +#, python-format +msgid "" +"%(appName)s is not configured. Would you like to restore a previous " +"configuration?" +msgstr "" -#: ../../gnome/app.py:348 ../../kde4/app.py:362 +#: ../../qt4/app.py:440 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it and then press OK" @@ -751,734 +899,794 @@ "Não é possível localizar pasta de snapshots.\n" "Se ele estiver em uma unidade removível, por favor conecte-a e pressione OK" -#: ../../gnome/app.py:611 ../../kde4/app.py:590 -msgid "Done, no backup needed" -msgstr "Concluído, backup não necessário" +#: ../../qt4/app.py:473 +msgid "" +"If you close this window Back In Time will not be able to shutdown your " +"system when the snapshot has finished.\n" +"Do you really want to close?" +msgstr "" -#: ../../gnome/app.py:619 ../../kde4/app.py:598 +#: ../../qt4/app.py:667 ../../qt4/app.py:703 msgid "Working:" msgstr "Trabalhando:" -#: ../../gnome/app.py:623 ../../kde4/app.py:602 +#: ../../qt4/app.py:695 +msgid "Done, no backup needed" +msgstr "Concluído, backup não necessário" + +#: ../../qt4/app.py:707 msgid "Error:" msgstr "Erro:" -#: ../../gnome/app.py:636 ../../kde4/app.py:649 +#: ../../qt4/app.py:726 ../../qt4/qt4systrayicon.py:153 +msgid "Sent:" +msgstr "Enviado:" + +#: ../../qt4/app.py:727 ../../qt4/qt4systrayicon.py:154 +msgid "Speed:" +msgstr "Velocidade:" + +#: ../../qt4/app.py:728 ../../qt4/qt4systrayicon.py:155 +msgid "ETA:" +msgstr "ETA:" + +#: ../../qt4/app.py:777 msgid "Global" msgstr "Global" -#: ../../gnome/app.py:637 ../../kde4/app.py:650 +#: ../../qt4/app.py:778 msgid "Root" msgstr "Root" -#: ../../gnome/app.py:638 ../../kde4/app.py:651 +#: ../../qt4/app.py:779 msgid "Home" msgstr "Home" -#: ../../gnome/app.py:662 -msgid "Bookmarks" -msgstr "Favoritos" - -#: ../../gnome/app.py:675 ../../kde4/app.py:662 +#: ../../qt4/app.py:794 msgid "Backup folders" msgstr "Pastas de backup" -#: ../../gnome/app.py:701 ../../kde4/app.py:734 -msgid "Today" -msgstr "Hoje" +#: ../../qt4/app.py:849 +msgid "This is NOT a snapshot but a live view of your local files" +msgstr "" -#: ../../gnome/app.py:705 ../../kde4/app.py:738 -msgid "Yesterday" -msgstr "Ontem" +#: ../../qt4/app.py:860 ../../qt4/app.py:1476 +#, python-format +msgid "Last check %s" +msgstr "" -#: ../../gnome/app.py:709 ../../kde4/app.py:742 -msgid "This week" -msgstr "Esta semana" +#: ../../qt4/app.py:928 +#, python-format +msgid "" +"Are you sure you want to remove the snapshot:\n" +"%s" +msgstr "" +"Tem certeza de que deseja remover o snapshot:\n" +"%s" -#: ../../gnome/app.py:713 ../../kde4/app.py:746 -msgid "Last week" -msgstr "Semana passada" +#: ../../qt4/app.py:1004 +#, python-format +msgid "" +"Backup local files before overwriting or\n" +"removing with trailing '%(suffix)s'." +msgstr "" -#: ../../gnome/app.py:764 ../../kde4/app.py:398 +#: ../../qt4/app.py:1010 msgid "" -"If you close this window Back In Time will not be able to shutdown your " -"system when the snapshot has finished.\n" -"Do you really want to close?" +"Are you sure you want to remove all newer files in your original folder?" msgstr "" -#: ../../gnome/app.py:881 ../../gnome/snapshotsdialog.py:238 -msgid "Open" -msgstr "Abrir" +#: ../../qt4/app.py:1014 +msgid "" +"WARNING: deleting files in filesystem root could break your whole system!!!" +msgstr "" -#: ../../gnome/app.py:1056 ../../kde4/app.py:90 ../../kde4/app.py:805 -#: ../../gnome/mainwindow.glade:73 ../../gnome/mainwindow.glade:75 -msgid "Snapshot Name" -msgstr "Nome do Snapshot" +#: ../../qt4/app.py:1016 +msgid "Files to be restored:" +msgstr "" -#: ../../gnome/app.py:1075 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +#: ../../qt4/app.py:1031 +msgid "Do you really want to restore this files(s):" msgstr "" -"Você tem certeza que deseja remover o snapshot:\n" -"%s" -#: ../../gnome/app.py:1123 ../../kde4/app.py:1010 +#: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "Snapshot: %s" -#: ../../gnome/app.py:1124 ../../kde4/app.py:1011 +#: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "Ver o snapshot feito em %s" -#: ../../gnome/app.py:1126 ../../kde4/app.py:1013 +#: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "Visualizar o conteúdo atual do disco" -#: ../../gnome/logviewdialog.py:106 ../../gnome/settingsdialog.py:414 -#: ../../kde4/logviewdialog.py:83 ../../kde4/settingsdialog.py:590 -msgid "All" -msgstr "Todos" +#: ../../qt4/app.py:1268 +#, python-format +msgid "Restore '%s'" +msgstr "Restaurar '%s'" -#: ../../gnome/logviewdialog.py:107 ../../gnome/settingsdialog.py:412 -#: ../../kde4/logviewdialog.py:84 ../../kde4/settingsdialog.py:588 -msgid "Errors" -msgstr "Erros" +#: ../../qt4/app.py:1269 +#, python-format +msgid "Restore '%s' to ..." +msgstr "Restaurar '%s' para ..." -#: ../../gnome/logviewdialog.py:112 ../../kde4/logviewdialog.py:89 -msgid "Changes" -msgstr "Alterações" +#: ../../qt4/app.py:1270 +#, python-format +msgid "Restore '%s' and delete new files" +msgstr "" -#: ../../gnome/logviewdialog.py:115 ../../kde4/logviewdialog.py:92 -msgid "Informations" -msgstr "Informações" +#: ../../qt4/app.py:1368 ../../qt4/app.py:1385 +msgid "Authors" +msgstr "Autores" -#: ../../gnome/settingsdialog.py:235 ../../kde4/settingsdialog.py:387 -msgid "Include files and folders" -msgstr "Incluir arquivos e pastas" - -#: ../../gnome/settingsdialog.py:264 -msgid "Exclude patterns, files or folders" -msgstr "Excluir padrões, arquivos e pastas" - -#: ../../gnome/settingsdialog.py:411 ../../kde4/settingsdialog.py:587 -msgid "None" -msgstr "Nenhum" - -#: ../../gnome/settingsdialog.py:413 ../../kde4/settingsdialog.py:589 -msgid "Changes & Errors" -msgstr "Alterações & Erros" +#: ../../qt4/app.py:1369 ../../qt4/app.py:1388 +msgid "Translations" +msgstr "Traduções" -#: ../../gnome/settingsdialog.py:458 -msgid "Snapshots folder" -msgstr "Pasta de snapshots" +#: ../../qt4/app.py:1370 ../../qt4/app.py:1391 +msgid "License" +msgstr "Licença" -#: ../../gnome/settingsdialog.py:466 ../../kde4/settingsdialog.py:1314 -msgid "Are you sure you want to change snapshots folder ?" -msgstr "Deseja realmente mudar a pasta de snapshots ?" - -#: ../../gnome/settingsdialog.py:901 ../../kde4/settingsdialog.py:914 -msgid "" -"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " -"*/3 for periodic backups every 3 hours" +#: ../../qt4/logviewdialog.py:49 +msgid "Last Log View" msgstr "" -#: ../../gnome/settingsdialog.py:1141 ../../kde4/settingsdialog.py:653 -msgid "New profile" -msgstr "Novo perfil" - -#: ../../gnome/settingsdialog.py:1155 ../../kde4/settingsdialog.py:669 -msgid "Rename profile" -msgstr "Renomear perfil" - -#: ../../gnome/settingsdialog.py:1167 ../../kde4/settingsdialog.py:683 -#, python-format -msgid "Are you sure you want to delete the profile \"%s\" ?" -msgstr "Você tem certeza que deseja excluir este perfil \"%s\" ?" - -#: ../../gnome/settingsdialog.py:1173 ../../kde4/settingsdialog.py:1292 -msgid "Include folder" -msgstr "Incluir pasta" - -#: ../../gnome/settingsdialog.py:1193 ../../kde4/settingsdialog.py:1278 -msgid "Include file" -msgstr "Incluir arquivo" - -#: ../../gnome/settingsdialog.py:1235 ../../kde4/settingsdialog.py:1241 -msgid "Exclude pattern" -msgstr "Excluir modelos" - -#: ../../gnome/settingsdialog.py:1240 ../../kde4/settingsdialog.py:1251 -msgid "Exclude patterns can't contain ':' char !" -msgstr "Os modelos excluídos não podem conter o caractere ':' !" - -#: ../../gnome/settingsdialog.py:1246 ../../kde4/settingsdialog.py:1257 -msgid "Exclude file" -msgstr "Excluir arquivo" - -#: ../../gnome/settingsdialog.py:1257 ../../kde4/settingsdialog.py:1261 -msgid "Exclude folder" -msgstr "Excluir pasta" - -#: ../../gnome/snapshotsdialog.py:240 -msgid "Jump to" -msgstr "Pular para" - -#: ../../gnome/snapshotsdialog.py:248 ../../kde4/snapshotsdialog.py:164 -msgid "Diff" -msgstr "Diferença" - -#: ../../gnome/snapshotsdialog.py:277 ../../kde4/snapshotsdialog.py:339 -msgid "You can't compare a snapshot to itself" -msgstr "Você não pode comparar um snapshot com ele mesmo" - -#: ../../gnome/snapshotsdialog.py:284 ../../kde4/snapshotsdialog.py:346 -#, python-format -msgid "Command not found: %s" -msgstr "Comando não encontrado: %s" - -#: ../../gnome/snapshotsdialog.py:307 ../../kde4/snapshotsdialog.py:367 -#, python-format -msgid "" -"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" -msgstr "" - -#: ../../gnome/snapshotsdialog.py:310 ../../kde4/snapshotsdialog.py:370 -#, python-format -msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +#: ../../qt4/logviewdialog.py:51 +msgid "Snapshot Log View" msgstr "" -#: ../../gnome/snapshotsdialog.py:312 ../../kde4/snapshotsdialog.py:372 -msgid "WARNING: This can not be revoked!" -msgstr "" +#: ../../qt4/logviewdialog.py:59 ../../qt4/settingsdialog.py:59 +#: ../../qt4/settingsdialog.py:274 ../../qt4/settingsdialog.py:1899 +msgid "Profile:" +msgstr "Perfil:" -#: ../../gnome/snapshotsdialog.py:317 ../../kde4/snapshotsdialog.py:377 -#, python-format -msgid "Exclude \"%s\" from future snapshots?" -msgstr "" +#: ../../qt4/logviewdialog.py:81 +msgid "Filter:" +msgstr "Filtrar:" -#: ../../kde4/app.py:86 ../../gnome/mainwindow.glade:58 -#: ../../gnome/mainwindow.glade:60 -msgid "Refresh snapshots list" -msgstr "Atualizar lista de snapshots" +#: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 +msgid "All" +msgstr "Todos" -#: ../../kde4/app.py:94 ../../gnome/mainwindow.glade:88 -#: ../../gnome/mainwindow.glade:90 -msgid "Remove Snapshot" -msgstr "Remover snapshot" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 +#: ../../qt4/settingsdialog.py:657 +msgid "Errors" +msgstr "Erros" -#: ../../kde4/app.py:98 ../../gnome/mainwindow.glade:105 -msgid "View Snapshot Log" -msgstr "Ver log dos snapshots" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 +msgid "Changes" +msgstr "Alterações" -#: ../../kde4/app.py:102 ../../gnome/mainwindow.glade:121 -msgid "View Last Log" -msgstr "Ver último log" +#: ../../qt4/logviewdialog.py:92 +msgid "Informations" +msgstr "Informações" -#: ../../kde4/app.py:108 ../../kde4/settingsdialog.py:69 -#: ../../gnome/mainwindow.glade:144 ../../gnome/mainwindow.glade:146 -#: ../../gnome/settingsdialog.glade:7 -msgid "Settings" -msgstr "Configurações" +#: ../../qt4/logviewdialog.py:101 +msgid "[E] Error, [I] Information, [C] Change" +msgstr "[E] Erro, [I] Informação, [C] Mudar" -#: ../../kde4/app.py:124 ../../gnome/mainwindow.glade:169 -msgid "Shutdown system after snapshot has finished." +#: ../../qt4/logviewdialog.py:104 +msgid "decode paths" msgstr "" -#: ../../kde4/app.py:131 ../../gnome/mainwindow.glade:184 -#: ../../gnome/mainwindow.glade:186 -msgid "Exit" -msgstr "Sair" +#: ../../qt4/messagebox.py:56 +msgid "Error" +msgstr "Erro" -#: ../../kde4/app.py:186 ../../gnome/mainwindow.glade:289 -msgid "Up" -msgstr "Para cima" - -#: ../../kde4/app.py:199 ../../gnome/mainwindow.glade:325 -msgid "Show hidden files" -msgstr "Mostrar arquivos ocultos" - -#: ../../kde4/app.py:244 -msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" -msgstr "" -"Esta pasta não existe\n" -"no snapshot atual !" +#: ../../qt4/messagebox.py:62 ../../qt4/messagebox.py:68 +msgid "Question" +msgstr "Pergunta" -#: ../../kde4/app.py:839 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +#: ../../qt4/qt4systrayicon.py:69 +msgid "Start BackInTime" msgstr "" -"Tem certeza de que deseja remover o snapshot:\n" -"%s" -#: ../../kde4/app.py:1140 ../../kde4/kde4systrayicon.py:117 +#: ../../qt4/qt4systrayicon.py:124 msgid "Working..." msgstr "Trabalhando..." -#: ../../kde4/logviewdialog.py:55 -msgid "Error Log View" -msgstr "Ver log de erros" - -#: ../../kde4/logviewdialog.py:65 ../../kde4/settingsdialog.py:79 -#: ../../kde4/settingsdialog.py:293 ../../gnome/logviewdialog.glade:73 -#: ../../gnome/settingsdialog.glade:72 -msgid "Profile:" -msgstr "Perfil:" +#: ../../qt4/qt4tools.py:178 +msgid "Today" +msgstr "Hoje" -#: ../../kde4/logviewdialog.py:77 ../../gnome/logviewdialog.glade:110 -msgid "Filter:" -msgstr "Filtrar:" +#: ../../qt4/qt4tools.py:183 +msgid "Yesterday" +msgstr "Ontem" -#: ../../kde4/logviewdialog.py:100 ../../gnome/logviewdialog.glade:169 -msgid "[E] Error, [I] Information, [C] Change" -msgstr "[E] Erro, [I] Informação, [C] Mudar" +#: ../../qt4/qt4tools.py:188 +msgid "This week" +msgstr "Esta semana" -#: ../../kde4/logviewdialog.py:103 ../../gnome/logviewdialog.glade:195 -msgid "decode paths" +#: ../../qt4/qt4tools.py:193 +msgid "Last week" +msgstr "Semana passada" + +#: ../../qt4/restoredialog.py:75 +msgid "Show full Log" msgstr "" -#: ../../kde4/settingsdialog.py:88 +#: ../../qt4/settingsdialog.py:68 msgid "Edit" msgstr "Editar" -#: ../../kde4/settingsdialog.py:106 ../../gnome/settingsdialog.glade:1207 +#: ../../qt4/settingsdialog.py:73 +msgid "Modify for Full System Backup" +msgstr "" + +#: ../../qt4/settingsdialog.py:77 ../../qt4/settingsdialog.py:451 +msgid "Add" +msgstr "Adicionar" + +#: ../../qt4/settingsdialog.py:81 ../../qt4/settingsdialog.py:408 +#: ../../qt4/settingsdialog.py:467 +msgid "Remove" +msgstr "Excluir" + +#: ../../qt4/settingsdialog.py:96 msgid "General" msgstr "Geral" -#: ../../kde4/settingsdialog.py:114 ../../gnome/settingsdialog.glade:199 +#: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" +msgstr "Modo:" + +#: ../../qt4/settingsdialog.py:119 +#, python-format +msgid "" +"Warning: %(app)s uses EncFS for encryption. A recent security audit " +"revealed several possible attack vectors for this. Please take a look at 'A " +"NOTE ON SECURITY' in 'man backintime'." msgstr "" -#: ../../kde4/settingsdialog.py:127 ../../kde4/settingsdialog.py:1311 +#: ../../qt4/settingsdialog.py:129 ../../qt4/settingsdialog.py:1568 msgid "Where to save snapshots" msgstr "Onde salvar os snapshots" -#: ../../kde4/settingsdialog.py:146 +#: ../../qt4/settingsdialog.py:145 +msgid "Folder" +msgstr "Pasta" + +#: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" -#: ../../kde4/settingsdialog.py:158 ../../kde4/settingsdialog.py:283 -#: ../../gnome/settingsdialog.glade:323 ../../gnome/settingsdialog.glade:583 -#: ../../gnome/settingsdialog.glade:874 +#: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "Host:" -#: ../../kde4/settingsdialog.py:163 ../../gnome/settingsdialog.glade:350 -#: ../../gnome/settingsdialog.glade:610 +#: ../../qt4/settingsdialog.py:170 msgid "Port:" -msgstr "" +msgstr "Porta:" -#: ../../kde4/settingsdialog.py:168 ../../kde4/settingsdialog.py:288 -#: ../../gnome/settingsdialog.glade:377 ../../gnome/settingsdialog.glade:637 -#: ../../gnome/settingsdialog.glade:902 +#: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "Usuário:" -#: ../../kde4/settingsdialog.py:173 ../../gnome/settingsdialog.glade:416 +#: ../../qt4/settingsdialog.py:180 msgid "Path:" -msgstr "" +msgstr "Caminho:" -#: ../../kde4/settingsdialog.py:178 ../../gnome/settingsdialog.glade:459 +#: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" -#: ../../kde4/settingsdialog.py:184 +#: ../../qt4/settingsdialog.py:192 msgid "Private Key:" +msgstr "Chave privada:" + +#: ../../qt4/settingsdialog.py:201 +msgid "Key File" msgstr "" -#: ../../kde4/settingsdialog.py:228 ../../kde4/settingsdialog.py:237 -#: ../../kde4/settingsdialog.py:243 ../../gnome/settingsdialog.glade:703 -#: ../../gnome/settingsdialog.glade:743 +#: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 +#: ../../qt4/settingsdialog.py:229 msgid "Password" -msgstr "" +msgstr "Password" -#: ../../kde4/settingsdialog.py:249 ../../gnome/settingsdialog.glade:775 +#: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" -#: ../../kde4/settingsdialog.py:252 ../../gnome/settingsdialog.glade:792 +#: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" -#: ../../kde4/settingsdialog.py:264 ../../gnome/settingsdialog.glade:968 +#: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "Avançado" -#: ../../kde4/settingsdialog.py:276 ../../gnome/settingsdialog.glade:848 -msgid "Auto Host / User / Profile Id" -msgstr "Identificação de Host / Usuário / Perfil Automático" +#: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 +msgid "Full snapshot path: " +msgstr "" -#: ../../kde4/settingsdialog.py:301 +#: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "Agendar" -#: ../../kde4/settingsdialog.py:311 ../../gnome/settingsdialog.glade:1092 +#: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "Dia:" -#: ../../kde4/settingsdialog.py:322 ../../gnome/settingsdialog.glade:1079 +#: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "Dia da Semana" -#: ../../kde4/settingsdialog.py:333 ../../gnome/settingsdialog.glade:1066 +#: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "Hora:" -#: ../../kde4/settingsdialog.py:344 ../../gnome/settingsdialog.glade:1053 +#: ../../qt4/settingsdialog.py:330 msgid "Hours:" -msgstr "" +msgstr "Horas:" -#: ../../kde4/settingsdialog.py:353 ../../gnome/settingsdialog.glade:1014 +#: ../../qt4/settingsdialog.py:339 msgid "" -"Run Back In Time periodically with anacron. This is useful if the computer " -"is not running regular." +"Run Back In Time repeatedly. This is useful if the computer is not running " +"regular." msgstr "" -#: ../../kde4/settingsdialog.py:357 ../../gnome/settingsdialog.glade:1040 -msgid "Frequency in days:" +#: ../../qt4/settingsdialog.py:344 +msgid "Every:" msgstr "" -#: ../../kde4/settingsdialog.py:368 ../../gnome/settingsdialog.glade:1026 +#: ../../qt4/settingsdialog.py:362 msgid "" "Run Back In Time as soon as the drive is connected (only once every X " "days).\n" "You will be prompted for your sudo password." msgstr "" -#: ../../kde4/settingsdialog.py:379 ../../gnome/settingsdialog.glade:1310 +#: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Incluir" -#: ../../kde4/settingsdialog.py:403 ../../kde4/settingsdialog.py:445 -#: ../../gnome/settingsdialog.glade:1411 +#: ../../qt4/settingsdialog.py:381 +msgid "Include files and folders" +msgstr "Incluir arquivos e pastas" + +#: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "Adicionar arquivo" -#: ../../kde4/settingsdialog.py:408 ../../kde4/settingsdialog.py:450 -#: ../../gnome/settingsdialog.glade:1427 +#: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Adicionar pasta" -#: ../../kde4/settingsdialog.py:418 ../../gnome/settingsdialog.glade:1474 +#: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Excluir" -#: ../../kde4/settingsdialog.py:421 ../../gnome/settingsdialog.glade:1328 +#: ../../qt4/settingsdialog.py:417 msgid "" "Warning: Wildcards ('foo*', '[fF]oo', 'fo?') will be ignored with " "mode 'SSH encrypted'.\n" "Only separate asterisk are allowed ('foo/*', 'foo/**/bar')" msgstr "" -#: ../../kde4/settingsdialog.py:430 +#: ../../qt4/settingsdialog.py:425 +msgid "Exclude patterns, files or folders" +msgstr "Excluir padrões, arquivos e pastas" + +#: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "Altamente recomendado:" -#: ../../kde4/settingsdialog.py:460 ../../gnome/settingsdialog.glade:1905 +#: ../../qt4/settingsdialog.py:463 +msgid "Add default" +msgstr "" + +#: ../../qt4/settingsdialog.py:474 +msgid "Exclude files bigger than: " +msgstr "" + +#: ../../qt4/settingsdialog.py:475 +#, python-format +msgid "" +"Exclude files bigger than value in %(prefix)s.\n" +"With 'Full rsync mode' disabled this will only affect new files\n" +"because for rsync this is a transfer option, not an exclude option.\n" +"So big files that has been backed up before will remain in snapshots\n" +"even if they had changed." +msgstr "" + +#: ../../qt4/settingsdialog.py:493 msgid "Auto-remove" msgstr "Remoção-automatica" -#: ../../kde4/settingsdialog.py:464 ../../gnome/settingsdialog.glade:1608 +#: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "Antigo quanto:" -#: ../../kde4/settingsdialog.py:478 ../../gnome/settingsdialog.glade:1624 +#: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "Se o espaço livre for menor do que:" -#: ../../kde4/settingsdialog.py:490 ../../gnome/settingsdialog.glade:1642 +#: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" -#: ../../kde4/settingsdialog.py:514 ../../gnome/settingsdialog.glade:1697 +#: ../../qt4/settingsdialog.py:551 +msgid "Run in background on remote Host." +msgstr "" + +#: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "Manter snapshots pelos últimos" -#: ../../kde4/settingsdialog.py:517 ../../kde4/settingsdialog.py:522 -#: ../../gnome/settingsdialog.glade:1705 ../../gnome/settingsdialog.glade:1729 +#: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "dia(s)" -#: ../../kde4/settingsdialog.py:519 ../../gnome/settingsdialog.glade:1717 +#: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "Manter um snapshot por dia pelos últimos" -#: ../../kde4/settingsdialog.py:524 ../../gnome/settingsdialog.glade:1743 +#: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "Manter um snapshot por semana pelos últimos" -#: ../../kde4/settingsdialog.py:527 +#: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "semana(s)" -#: ../../kde4/settingsdialog.py:529 ../../gnome/settingsdialog.glade:1769 +#: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "Manter um instantâneo por mês pelos últimos" -#: ../../kde4/settingsdialog.py:532 ../../gnome/settingsdialog.glade:1781 +#: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "mês(es)" -#: ../../kde4/settingsdialog.py:534 ../../gnome/settingsdialog.glade:1795 +#: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "Manter um snapshot por ano por todos os anos" -#: ../../kde4/settingsdialog.py:537 ../../gnome/settingsdialog.glade:1496 +#: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "Não remover os snapshots nomeados" -#: ../../kde4/settingsdialog.py:546 ../../gnome/settingsdialog.glade:2104 +#: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Opções" -#: ../../kde4/settingsdialog.py:549 ../../gnome/settingsdialog.glade:1920 +#: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Habilitar notifiações" -#: ../../kde4/settingsdialog.py:552 ../../gnome/settingsdialog.glade:1937 +#: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "Desativar snapshot quando na bateria" -#: ../../kde4/settingsdialog.py:555 +#: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" msgstr "Estado da energia não está disponível a partir do sistema" -#: ../../kde4/settingsdialog.py:558 ../../gnome/settingsdialog.glade:1955 -msgid "Backup files on restore" -msgstr "Fazer backup dos arquivos na restauração" +#: ../../qt4/settingsdialog.py:611 +msgid "Run only one snapshot at a time" +msgstr "" + +#: ../../qt4/settingsdialog.py:612 +msgid "" +"Other snapshots will be blocked until the current snapshot is done.\n" +"This is a global option. So it will effect all profiles for this user.\n" +"But you need to activate this for all other users, too." +msgstr "" + +#: ../../qt4/settingsdialog.py:617 +msgid "Backup replaced files on restore" +msgstr "" + +#: ../../qt4/settingsdialog.py:618 +#, python-format +msgid "" +"Newer versions of files will be renamed with trailing '%(suffix)s' before " +"restoring.\n" +"If you don't need them anymore you can remove them with '%(cmd)s'" +msgstr "" -#: ../../kde4/settingsdialog.py:561 ../../gnome/settingsdialog.glade:1972 +#: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "Continuar em caso de erros (manter snapshots incompletos)" -#: ../../kde4/settingsdialog.py:564 ../../gnome/settingsdialog.glade:1989 +#: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "Usar checksum para detectar mudanças" -#: ../../kde4/settingsdialog.py:567 ../../gnome/settingsdialog.glade:2006 +#: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "Modo de resincronismo total. Pode ser mais rápido mas:" -#: ../../kde4/settingsdialog.py:568 ../../gnome/settingsdialog.glade:2032 +#: ../../qt4/settingsdialog.py:634 msgid "" -"- snapshots are no read-only\n" -"- destination file-system must support all linux attributes (dates, rights, " +"- snapshots are not read-only\n" +"- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" "- Snapshots não são somente-leitura\n" "- o sistema de arquivos de destino deve suportar todos os atributos do linux " "(datas, direitos, usuário, grupo ...)" -#: ../../kde4/settingsdialog.py:575 ../../gnome/settingsdialog.glade:2045 +#: ../../qt4/settingsdialog.py:641 +msgid "Take a new snapshot regardless of there were changes or not." +msgstr "" + +#: ../../qt4/settingsdialog.py:644 msgid "Check for changes (don't take a new snapshot if nothing changed)" msgstr "Verificar alterações (não criar um novo snapshot se nada mudou)" -#: ../../kde4/settingsdialog.py:582 +#: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "Nível de registro:" -#: ../../kde4/settingsdialog.py:597 ../../gnome/settingsdialog.glade:2366 -msgid "Expert Options" -msgstr "Opções avançadas" +#: ../../qt4/settingsdialog.py:656 +msgid "None" +msgstr "Nenhum" + +#: ../../qt4/settingsdialog.py:658 +msgid "Changes & Errors" +msgstr "Alterações & Erros" -#: ../../kde4/settingsdialog.py:600 +#: ../../qt4/settingsdialog.py:674 msgid "Change these options only if you really know what you are doing !" msgstr "Mudar essas opções só se você souber o que está fazendo!" -#: ../../kde4/settingsdialog.py:608 ../../gnome/settingsdialog.glade:2133 -msgid "Run 'nice' as cron job (default: enabled)" -msgstr "Executar o 'nice' como um trabalho do cron (padrão: ativado)" +#: ../../qt4/settingsdialog.py:678 +msgid "Run 'nice':" +msgstr "" -#: ../../kde4/settingsdialog.py:611 ../../gnome/settingsdialog.glade:2150 -msgid "Run 'ionice' as cron job (default: enabled)" -msgstr "Executar o 'ionice' como um trabalho do cron (padrão: ativado)" +#: ../../qt4/settingsdialog.py:684 ../../qt4/settingsdialog.py:696 +msgid "as cron job" +msgstr "" -#: ../../kde4/settingsdialog.py:614 ../../gnome/settingsdialog.glade:2167 -msgid "Run 'ionice' when taking a manual snapshot (default: disabled)" +#: ../../qt4/settingsdialog.py:687 ../../qt4/settingsdialog.py:702 +#: ../../qt4/settingsdialog.py:716 +msgid "on remote host" msgstr "" -"Rodar o 'ionice' ao criar um snapshot manualmente (padrão: desabilitado)" -#: ../../kde4/settingsdialog.py:617 ../../gnome/settingsdialog.glade:2184 -msgid "Run 'nice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:690 +msgid "Run 'ionice':" msgstr "" -#: ../../kde4/settingsdialog.py:620 ../../gnome/settingsdialog.glade:2201 -msgid "Run 'ionice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:699 +msgid "when taking a manual snapshot" msgstr "" -#: ../../kde4/settingsdialog.py:626 ../../gnome/settingsdialog.glade:2224 +#: ../../qt4/settingsdialog.py:706 +msgid "Run 'rsync' with 'nocache':" +msgstr "" + +#: ../../qt4/settingsdialog.py:712 +msgid "on local machine" +msgstr "" + +#: ../../qt4/settingsdialog.py:719 +msgid "Redirect stdout to /dev/null in cronjobs." +msgstr "" + +#: ../../qt4/settingsdialog.py:725 +msgid "Redirect stderr to /dev/null in cronjobs." +msgstr "" + +#: ../../qt4/settingsdialog.py:734 msgid "Limit rsync bandwidth usage: " msgstr "" -#: ../../kde4/settingsdialog.py:629 ../../gnome/settingsdialog.glade:2259 +#: ../../qt4/settingsdialog.py:737 msgid " KB/sec" -msgstr "" +msgstr " KB/sec" -#: ../../kde4/settingsdialog.py:634 ../../gnome/settingsdialog.glade:2280 +#: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "Preservar ACL" -#: ../../kde4/settingsdialog.py:637 ../../gnome/settingsdialog.glade:2297 +#: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "Preservar atributos extendidos (xattr)" -#: ../../kde4/settingsdialog.py:640 ../../gnome/settingsdialog.glade:2314 +#: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute links)" msgstr "Copiar links inseguros (funciona apenas com hard links)" -#: ../../kde4/settingsdialog.py:643 ../../gnome/settingsdialog.glade:2331 -msgid "Copy links (dereference symbolic links)" -msgstr "Copiar links (criar links simbólicos)" +#: ../../qt4/settingsdialog.py:834 +msgid "Paste additional options to rsync" +msgstr "" -#: ../../kde4/snapshotsdialog.py:46 ../../kde4/snapshotsdialog.py:173 -#: ../../gnome/snapshotsdialog.glade:385 -msgid "Diff Options" -msgstr "Opções do Diff" +#: ../../qt4/settingsdialog.py:837 +msgid "" +"Options must be quoted e.g. --exclude-from=\"/path/to/my exclude file\"." +msgstr "" -#: ../../kde4/snapshotsdialog.py:56 ../../gnome/snapshotsdialog.glade:314 -msgid "Command:" -msgstr "Comando:" +#: ../../qt4/settingsdialog.py:847 +msgid "Add prefix to SSH commands" +msgstr "" -#: ../../kde4/snapshotsdialog.py:60 ../../gnome/snapshotsdialog.glade:322 -msgid "Parameters:" -msgstr "Parâmetros:" +#: ../../qt4/settingsdialog.py:850 +#, python-format +msgid "" +"Prefix to run before every command on remote host.\n" +"Variables need to be escaped with \\$FOO.\n" +"This doesn't touch rsync. So to add a prefix\n" +"for rsync use \"%(cb_rsync_options)s\" with\n" +"%(rsync_options_value)s\n" +"\n" +"%(default)s: %(def_value)s" +msgstr "" -#: ../../kde4/snapshotsdialog.py:64 ../../gnome/snapshotsdialog.glade:334 -msgid "Use %1 and %2 for path parameters" -msgstr "Use %1 e %2 para os parâmetros de caminho" +#: ../../qt4/settingsdialog.py:858 ../../qt4/settingsdialog.py:1691 +msgid "default" +msgstr "padrão" -#: ../../kde4/snapshotsdialog.py:123 ../../gnome/snapshotsdialog.glade:184 -#: ../../gnome/snapshotsdialog.glade:186 -msgid "Delete" +#: ../../qt4/settingsdialog.py:875 +msgid "Restore Config" msgstr "" -#: ../../kde4/snapshotsdialog.py:128 ../../gnome/snapshotsdialog.glade:199 -#: ../../gnome/snapshotsdialog.glade:201 -msgid "Select All" +#: ../../qt4/settingsdialog.py:891 +msgid "" +"Full system backup can only create a snapshot to be restored to the same " +"physical disk(s) with the same disk partitioning as from the source; " +"restoring to new physical disks or the same disks with different " +"partitioning will yield a potentially broken and unusable system.\n" +"\n" +"Full system backup will override some settings that may have been " +"customized. Continue?" msgstr "" -#: ../../kde4/snapshotsdialog.py:132 ../../gnome/snapshotsdialog.glade:88 -msgid "List only different snapshots" -msgstr "Listar apenas snapshots diferentes" +#: ../../qt4/settingsdialog.py:922 +msgid "New profile" +msgstr "Novo perfil" -#: ../../kde4/snapshotsdialog.py:139 ../../gnome/snapshotsdialog.glade:110 -msgid "List only equal snapshots to: " -msgstr "" +#: ../../qt4/settingsdialog.py:938 +msgid "Rename profile" +msgstr "Renomear perfil" -#: ../../kde4/snapshotsdialog.py:149 ../../gnome/snapshotsdialog.glade:146 -msgid "Deep check (more accurate, but slow)" -msgstr "Checagem profunda (mais preciso, mas lento)" +#: ../../qt4/settingsdialog.py:952 +#, python-format +msgid "Are you sure you want to delete the profile \"%s\" ?" +msgstr "Você tem certeza que deseja excluir este perfil \"%s\" ?" -#: ../../kde4/snapshotsdialog.py:174 -msgid "Go To" -msgstr "Ir para" +#: ../../qt4/settingsdialog.py:1191 +msgid "" +"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " +"*/3 for periodic backups every 3 hours" +msgstr "" -#: ../../gnome/logviewdialog.glade:9 -msgid "Log View" -msgstr "Ver log" +#: ../../qt4/settingsdialog.py:1489 +msgid "Exclude pattern" +msgstr "Excluir modelos" -#: ../../gnome/logviewdialog.glade:179 -msgid "scroll down automatic" -msgstr "" +#: ../../qt4/settingsdialog.py:1502 +msgid "Exclude file" +msgstr "Excluir arquivo" -#: ../../gnome/mainwindow.glade:7 -msgid "Back In Time" -msgstr "Back In Time" +#: ../../qt4/settingsdialog.py:1506 +msgid "Exclude folder" +msgstr "Excluir pasta" -#: ../../gnome/mainwindow.glade:45 -msgid "Backup Now" -msgstr "Fazer backup agora" +#: ../../qt4/settingsdialog.py:1525 +msgid "Include file" +msgstr "Incluir arquivo" -#: ../../gnome/mainwindow.glade:171 -msgid "Shutdown" +#: ../../qt4/settingsdialog.py:1533 ../../qt4/settingsdialog.py:1553 +#, python-format +msgid "" +"\"%s\" is a symlink. The linked target will not be backed up until you " +"include it, too.\n" +"Would you like to include the symlinks target instead?" msgstr "" -#: ../../gnome/mainwindow.glade:287 -msgid "Parent folder" -msgstr "Pasta Pai" +#: ../../qt4/settingsdialog.py:1545 +msgid "Include folder" +msgstr "Incluir pasta" -#: ../../gnome/mainwindow.glade:327 -msgid "Hidden files" -msgstr "Arquivos ocultos" +#: ../../qt4/settingsdialog.py:1572 +msgid "Are you sure you want to change snapshots folder ?" +msgstr "Deseja realmente mudar a pasta de snapshots ?" -#: ../../gnome/mainwindow.glade:451 -msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" -msgstr "" -"Esta pasta não existe\n" -"no snapshot atual !" +#: ../../qt4/settingsdialog.py:1688 +msgid "enabled" +msgstr "ativado" -#: ../../gnome/settingsdialog.glade:287 -msgid "Where to save snapshots" -msgstr "Onde salvar os snapshots" +#: ../../qt4/settingsdialog.py:1690 +msgid "disabled" +msgstr "desativado" -#: ../../gnome/settingsdialog.glade:483 -msgid "Private key:" -msgstr "" +#: ../../qt4/settingsdialog.py:1715 +msgid "Restore Settings" +msgstr "Restaurar Configurações" -#: ../../gnome/settingsdialog.glade:534 -msgid "Advanced SSH Settings" +#: ../../qt4/settingsdialog.py:1732 +msgid " and add your user to group 'fuse'" msgstr "" -#: ../../gnome/settingsdialog.glade:552 -msgid "SSH Settings" +#: ../../qt4/settingsdialog.py:1736 +#, python-format +msgid "" +"Please navigate to the snapshot from which you want to restore %(appName)s's " +"configuration. The path may look like: \n" +"%(samplePath)s\n" +"\n" +"If your snapshots are on a remote drive or if they are encrypted you need to " +"manually mount them first. If you use Mode SSH you also may need to set up " +"public key login to the remote host%(addFuse)s.\n" +"Take a look at 'man backintime'." msgstr "" -#: ../../gnome/settingsdialog.glade:815 -msgid "Password" +#: ../../qt4/settingsdialog.py:1794 ../../qt4/settingsdialog.py:1854 +msgid "No config found" msgstr "" -#: ../../gnome/settingsdialog.glade:930 -msgid "Profile Id:" -msgstr "Identificação do Perfil:" +#: ../../qt4/snapshotsdialog.py:49 ../../qt4/snapshotsdialog.py:173 +msgid "Diff Options" +msgstr "Opções do Diff" -#: ../../gnome/settingsdialog.glade:1115 -msgid "" -"hours seperate by comma ( e.g. 8,12,18,23) or */3 for periodic backups every " -"3 hours (cron style)" +#: ../../qt4/snapshotsdialog.py:56 +msgid "Command:" +msgstr "Comando:" + +#: ../../qt4/snapshotsdialog.py:60 +msgid "Parameters:" +msgstr "Parâmetros:" + +#: ../../qt4/snapshotsdialog.py:64 +msgid "Use %1 and %2 for path parameters" +msgstr "Use %1 e %2 para os parâmetros de caminho" + +#: ../../qt4/snapshotsdialog.py:106 +msgid "List only different snapshots" +msgstr "Listar apenas snapshots diferentes" + +#: ../../qt4/snapshotsdialog.py:113 +msgid "List only equal snapshots to: " msgstr "" -#: ../../gnome/settingsdialog.glade:1163 -msgid "Schedule" -msgstr "Agenda" +#: ../../qt4/snapshotsdialog.py:123 +msgid "Deep check (more accurate, but slow)" +msgstr "Checagem profunda (mais preciso, mas lento)" + +#: ../../qt4/snapshotsdialog.py:144 +msgid "Delete" +msgstr "Excluir" -#: ../../gnome/settingsdialog.glade:1363 -msgid "Highly recommended:" -msgstr "Altamente recomendado:" +#: ../../qt4/snapshotsdialog.py:148 +msgid "Select All" +msgstr "Selecionar Tudo" -#: ../../gnome/settingsdialog.glade:1377 -msgid "label" -msgstr "rótulo" +#: ../../qt4/snapshotsdialog.py:161 +msgid "Diff" +msgstr "Diferença" -#: ../../gnome/settingsdialog.glade:1755 -msgid "week(s)" -msgstr "semana(s)" +#: ../../qt4/snapshotsdialog.py:172 +msgid "Go To" +msgstr "Ir para" -#: ../../gnome/settingsdialog.glade:2069 -msgid "Log level:" -msgstr "Nível do registro:" +#: ../../qt4/snapshotsdialog.py:326 +msgid "You can't compare a snapshot to itself" +msgstr "Você não pode comparar um snapshot com ele mesmo" -#: ../../gnome/settingsdialog.glade:2121 +#: ../../qt4/snapshotsdialog.py:333 +#, python-format +msgid "Command not found: %s" +msgstr "Comando não encontrado: %s" + +#: ../../qt4/snapshotsdialog.py:354 +#, python-format msgid "" -"Change these options only if you really know what you are doing !" -msgstr "Mude essas opções somente se você souber o que está fazendo!" +"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" +msgstr "" -#: ../../gnome/snapshotsdialog.glade:263 -msgid "Diff with" -msgstr "Diff com" +#: ../../qt4/snapshotsdialog.py:357 +#, python-format +msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +msgstr "" -#: ../../gnome/textinputdialog.glade:7 -msgid "Pattern" -msgstr "Padrão" +#: ../../qt4/snapshotsdialog.py:359 +msgid "WARNING: This can not be revoked!" +msgstr "" -#: ../../gnome/textinputdialog.glade:70 -msgid "Text" +#: ../../qt4/snapshotsdialog.py:374 +#, python-format +msgid "Exclude \"%s\" from future snapshots?" msgstr "" diff -Nru backintime-1.0.36/common/po/pt.po backintime-1.1.12/common/po/pt.po --- backintime-1.0.36/common/po/pt.po 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/po/pt.po 2016-01-11 18:07:58.000000000 +0000 @@ -7,208 +7,240 @@ msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2013-11-09 22:34+0100\n" -"PO-Revision-Date: 2013-05-02 16:25+0000\n" -"Last-Translator: Fabiano Nunes \n" +"POT-Creation-Date: 2015-12-19 00:47+0100\n" +"PO-Revision-Date: 2015-11-24 15:59+0000\n" +"Last-Translator: Ivo Xavier \n" "Language-Team: Portuguese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2014-08-06 10:20+0000\n" -"X-Generator: Launchpad (build 17147)\n" +"X-Launchpad-Export-Date: 2016-01-11 17:52+0000\n" +"X-Generator: Launchpad (build 17881)\n" -#: ../../common/config.py:72 +#: ../../common/configfile.py:60 +#, python-format +msgid "Failed to save config: %s" +msgstr "" + +#: ../../common/configfile.py:78 +#, python-format +msgid "Failed to load config: %s" +msgstr "" + +#: ../../common/configfile.py:352 ../../common/configfile.py:414 +#, python-format +msgid "Profile \"%s\" already exists !" +msgstr "O perfil \"%s\" já existe!" + +#: ../../common/configfile.py:383 +msgid "You can't remove the last profile !" +msgstr "Não pode remover o último perfil!" + +#: ../../common/config.py:76 msgid "Disabled" msgstr "Desactivado" -#: ../../common/config.py:73 +#: ../../common/config.py:77 msgid "At every boot/reboot" msgstr "A cada arranque/reinício" -#: ../../common/config.py:74 +#: ../../common/config.py:78 msgid "Every 5 minutes" -msgstr "Cada 5 minutos" +msgstr "A cada 5 minutos" -#: ../../common/config.py:75 +#: ../../common/config.py:79 msgid "Every 10 minutes" -msgstr "Cada 10 minutos" +msgstr "A cada 10 minutos" -#: ../../common/config.py:76 +#: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "A cada 30 minutos" -#: ../../common/config.py:77 +#: ../../common/config.py:81 msgid "Every hour" msgstr "A cada hora" -#: ../../common/config.py:78 +#: ../../common/config.py:82 msgid "Every 2 hours" msgstr "A cada duas horas" -#: ../../common/config.py:79 +#: ../../common/config.py:83 msgid "Every 4 hours" msgstr "A cada quatro horas" -#: ../../common/config.py:80 +#: ../../common/config.py:84 msgid "Every 6 hours" msgstr "A cada 6 horas" -#: ../../common/config.py:81 +#: ../../common/config.py:85 msgid "Every 12 hours" msgstr "A cada 12 horas" -#: ../../common/config.py:82 +#: ../../common/config.py:86 msgid "Custom Hours" -msgstr "" +msgstr "A Horas Definidas" -#: ../../common/config.py:83 +#: ../../common/config.py:87 msgid "Every Day" msgstr "Diariamente" -#: ../../common/config.py:84 -msgid "Daily (anacron)" -msgstr "" +#: ../../common/config.py:88 +msgid "Repeatedly (anacron)" +msgstr "Repetidamente (anacron)" -#: ../../common/config.py:85 +#: ../../common/config.py:89 msgid "When drive get connected (udev)" -msgstr "" +msgstr "Qunado o dispositifo for conectado (udev)" -#: ../../common/config.py:86 +#: ../../common/config.py:90 msgid "Every Week" msgstr "Semanalmente" -#: ../../common/config.py:87 +#: ../../common/config.py:91 msgid "Every Month" msgstr "Mensalmente" -#: ../../common/config.py:91 +#: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Dia(s)" -#: ../../common/config.py:92 +#: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Semana(s)" -#: ../../common/config.py:93 +#: ../../common/config.py:97 msgid "Year(s)" msgstr "Ano(s)" -#: ../../common/config.py:100 +#: ../../common/config.py:101 +msgid "Hour(s)" +msgstr "Hora(s)" + +#: ../../common/config.py:104 +msgid "Month(s)" +msgstr "Mês/Meses" + +#: ../../common/config.py:126 ../../qt4/settingsdialog.py:551 msgid " EXPERIMENTAL!" -msgstr "" +msgstr " EXPERIMENTAL!" -#: ../../common/config.py:103 +#: ../../common/config.py:129 msgid "Local" -msgstr "" +msgstr "Local" -#: ../../common/config.py:104 +#: ../../common/config.py:130 msgid "SSH" msgstr "SSH" -#: ../../common/config.py:104 ../../common/config.py:106 -#: ../../gnome/settingsdialog.py:475 ../../kde4/settingsdialog.py:1325 +#: ../../common/config.py:130 ../../common/config.py:132 +#: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" -msgstr "" +msgstr "Chave privada SSH" -#: ../../common/config.py:105 +#: ../../common/config.py:131 msgid "Local encrypted" -msgstr "" +msgstr "Local encriptado" -#: ../../common/config.py:105 ../../common/config.py:106 +#: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" -msgstr "" +msgstr "Encriptação" -#: ../../common/config.py:106 +#: ../../common/config.py:132 msgid "SSH encrypted" -msgstr "" +msgstr "SSH encriptado" -#: ../../common/config.py:112 +#: ../../common/config.py:135 msgid "Default" msgstr "Padrão" -#: ../../common/config.py:113 +#: ../../common/config.py:136 msgid "AES128-CTR" msgstr "AES128-CTR" -#: ../../common/config.py:114 +#: ../../common/config.py:137 msgid "AES192-CTR" msgstr "AES192-CTR" -#: ../../common/config.py:115 +#: ../../common/config.py:138 msgid "AES256-CTR" -msgstr "" +msgstr "AES256-CTR" -#: ../../common/config.py:116 +#: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "ARCFOUR256" -#: ../../common/config.py:117 +#: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "ARCFOUR128" -#: ../../common/config.py:118 +#: ../../common/config.py:141 msgid "AES128-CBC" msgstr "AES128-CBC" -#: ../../common/config.py:119 +#: ../../common/config.py:142 msgid "3DES-CBC" msgstr "3DES-CBC" -#: ../../common/config.py:120 +#: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "Blowfish-CBC" -#: ../../common/config.py:121 +#: ../../common/config.py:144 msgid "Cast128-CBC" -msgstr "" +msgstr "Cast128-CBC" -#: ../../common/config.py:122 +#: ../../common/config.py:145 msgid "AES192-CBC" -msgstr "" +msgstr "AES192-CBC" -#: ../../common/config.py:123 +#: ../../common/config.py:146 msgid "AES256-CBC" msgstr "AES256-CBC" -#: ../../common/config.py:124 +#: ../../common/config.py:147 msgid "ARCFOUR" msgstr "ARCFOUR" -#: ../../common/config.py:129 +#: ../../common/config.py:153 msgid "Main profile" msgstr "Perfil Principal" -#: ../../common/config.py:256 ../../common/config.py:275 -#: ../../common/config.py:286 ../../common/config.py:291 +#: ../../common/config.py:289 ../../common/config.py:296 +#: ../../common/config.py:307 ../../common/config.py:312 +#: ../../qt4/qt4systrayicon.py:61 #, python-format msgid "Profile: \"%s\"" msgstr "Perfil: \"%s\"" -#: ../../common/config.py:256 +#: ../../common/config.py:289 msgid "Snapshots folder is not valid !" msgstr "A pasta dos Snapshots não é valida !" -#: ../../common/config.py:275 +#: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "" "Tem de selecionar pelo menos uma directoria para realizar a cópia de " "segurança !" -#: ../../common/config.py:286 +#: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "Não pode incluir a directoria de backup !" -#: ../../common/config.py:291 +#: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "Não pode incluir a sub-directoria de backup !" -#: ../../common/config.py:361 +#: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s não é uma directoria !" -#: ../../common/config.py:376 ../../common/config.py:389 +#: ../../common/config.py:380 +msgid "Host/User/Profile-ID must not be empty!" +msgstr "" + +#: ../../common/config.py:388 ../../common/config.py:420 #, python-format msgid "" "Can't write to: %s\n" @@ -217,169 +249,201 @@ "Impossível escrever em : %s\n" "Verifique se tem acesso ." -#: ../../common/config.py:1286 +#: ../../common/config.py:400 +#, python-format msgid "" -"Can't find crontab.\n" -"Are you sure cron is installed ?\n" -"If not you should disable all automatic backups." +"Destination filesystem for '%(path)s' is formatted with FAT which doesn't " +"support hard-links. Please use a native Linux filesystem." msgstr "" -"crontab não encontrado.\n" -"Confirme de tem o cron instalado.\n" -"Caso não esteja deverá desactivar todas as cópias de segurança automáticas." -#: ../../common/config.py:1338 +#: ../../common/config.py:405 #, python-format -msgid "Schedule udev doesn't work with mode %s" +msgid "" +"Destination filsystem for '%(path)s' is a SMB mounted share. Please make " +"sure the remote SMB server supports symlinks or activate '%(copyLinks)s' in " +"'%(expertOptions)s'." msgstr "" -#: ../../common/config.py:1342 -#, python-format -msgid "Couldn't find UUID for \"%s\"" +#: ../../common/config.py:408 ../../qt4/settingsdialog.py:815 +msgid "Copy links (dereference symbolic links)" msgstr "" -#: ../../common/config.py:1379 -msgid "Failed to remove udev rules" -msgstr "" +#: ../../common/config.py:409 ../../qt4/settingsdialog.py:669 +msgid "Expert Options" +msgstr "Opções Avançadas" -#: ../../common/config.py:1385 -msgid "Failed to create udev rules" +#: ../../common/config.py:411 +#, python-format +msgid "" +"Destination filesystem for '%(path)s is a sshfs mounted share. sshfs doesn't " +"support hard-links. Please use mode 'SSH' instead." msgstr "" -#: ../../common/config.py:1420 +#: ../../common/config.py:1407 msgid "" -"Can't find anacron.\n" -"Are you sure anacron is installed ?\n" -"If not you should disable daily anacron backups." +"Can't find crontab.\n" +"Are you sure cron is installed ?\n" +"If not you should disable all automatic backups." msgstr "" +"Crontab não encontrado.\n" +"Confirme que tem o cron instalado.\n" +"Caso não esteja, deverá desactivar todas as cópias de segurança automáticas." -#: ../../common/config.py:1439 -msgid "Please provide your sudo password to install the udev rule." +#: ../../common/config.py:1411 +msgid "Failed to write new crontab." msgstr "" -#: ../../common/config.py:1445 -msgid "Please provide your sudo password to remove unused udev rules." +#: ../../common/config.py:1505 +#, python-format +msgid "" +"Could not install Udev rule for profile %(profile_id)s. DBus Service " +"'%(dbus_interface)s' wasn't available" msgstr "" -#: ../../common/configfile.py:253 ../../common/configfile.py:315 +#: ../../common/config.py:1517 #, python-format -msgid "Profile \"%s\" already exists !" -msgstr "O perfil \"%s\" já existe!" +msgid "Schedule udev doesn't work with mode %s" +msgstr "Calendarização udev não funciona com o perfil %s" -#: ../../common/configfile.py:284 -msgid "You can't remove the last profile !" -msgstr "Não pode remover o último perfil!" +#: ../../common/config.py:1526 +#, python-format +msgid "Couldn't find UUID for \"%s\"" +msgstr "Impossível encontrar UUID para %s" -#: ../../common/encfstools.py:95 +#: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" "\n" "%(error)s" msgstr "" +"Impossível montar '%(command)s':\n" +"\n" +"%(error)s" -#: ../../common/encfstools.py:105 +#: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" -msgstr "" +msgstr "Impossível desmontar encfs %s" -#: ../../common/encfstools.py:149 +#: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." -msgstr "" +msgstr "Configuração para pasta encriptada não encontrada" -#: ../../common/encfstools.py:153 +#: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" +"\n" +"Criar uma nova pasta encriptada?" -#: ../../common/encfstools.py:154 +#: ../../common/encfstools.py:171 msgid "Cancel" -msgstr "" +msgstr "Cancelar" -#: ../../common/encfstools.py:157 +#: ../../common/encfstools.py:174 msgid "Please confirm password" -msgstr "" +msgstr "Por favor, confirmar password" -#: ../../common/encfstools.py:161 +#: ../../common/encfstools.py:178 msgid "Password doesn't match" -msgstr "" +msgstr "Password não coincide" -#: ../../common/encfstools.py:166 +#: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" +"encfs não encontrado. Por favor, instale usando p. ex. 'apt-get install " +"encfs'" -#: ../../common/encfstools.py:174 ../../common/sshtools.py:207 +#: ../../common/encfstools.py:196 ../../common/sshtools.py:262 #, python-format msgid "" "%(user)s is not member of group 'fuse'.\n" " Run 'sudo adduser %(user)s fuse'. To apply changes logout and login again.\n" "Look at 'man backintime' for further instructions." msgstr "" +"%(user)s não é membro do grupo 'fuse'.\n" +" Executar 'sudo adduser %(user)s fuse'. Para aplicar as alterações faça " +"logout e login.\n" +"Leia 'man backintime' para mais informações." -#: ../../common/encfstools.py:189 +#: ../../common/encfstools.py:211 msgid "" "encfs version 1.7.2 and before has a bug with option --reverse. Please " "update encfs" msgstr "" +"A versão 1.7.2 de encfs tem um erro com a opção --reverse. Por favor, " +"actualize encfs" -#: ../../common/encfstools.py:453 ../../common/encfstools.py:480 -#: ../../common/snapshots.py:982 ../../common/snapshots.py:1288 -#: ../../kde4/app.py:82 ../../gnome/mainwindow.glade:43 +#: ../../common/encfstools.py:512 ../../common/snapshots.py:1131 +#: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "Tirar snapshot" -#: ../../common/mount.py:195 +#: ../../common/mount.py:204 #, python-format msgid "" "Hash collision occurred in hash_id %s. Incrementing global value " "hash_collision and try again." msgstr "" -#: ../../common/mount.py:246 +#: ../../common/mount.py:259 #, python-format msgid "mountpoint %s not empty." -msgstr "" +msgstr "Ponto de montagem %s não está vazio" -#: ../../common/mount.py:286 +#: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" -#: ../../common/password.py:425 +#: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " -msgstr "" +msgstr "Perfil '%(profile)s': Insira password for %(mode)s: " -#: ../../common/snapshots.py:171 ../../gnome/app.py:1127 -#: ../../kde4/app.py:1014 +#: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Agora" -#: ../../common/snapshots.py:182 ../../gnome/gnometools.py:37 +#: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "COM ERROS !" -#: ../../common/snapshots.py:282 +#: ../../common/snapshots.py:344 msgid "" "### This log has been decoded with automatic search pattern\n" "### If some paths are not decoded you can manually decode them with:\n" msgstr "" +"### Este ficheiro log foi descodificado com os padrões automáticos de " +"pesquisa\n" +"### Se alguns caminhos não estão descodificados pode descodifica-los " +"manualmente com:\n" -#: ../../common/snapshots.py:465 +#: ../../common/snapshots.py:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "ERRO" -#: ../../common/snapshots.py:564 +#: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "Restaurar permissões" -#: ../../common/snapshots.py:739 +#: ../../common/snapshots.py:752 ../../qt4/app.py:377 ../../qt4/app.py:675 +#: ../../qt4/app.py:692 ../../qt4/qt4systrayicon.py:65 +msgid "Done" +msgstr "Concluído" + +#: ../../common/snapshots.py:860 msgid "" "Back In Time changed its backup format.\n" "\n" "Your old snapshots can be moved according to this new format. OK?" msgstr "" +"Back in Time modificou os formatos de cópia de segurança.\n" +"\n" +"As suas snapshots antigas podem ser movidas de acordo com o novo formato. Ok?" -#: ../../common/snapshots.py:749 +#: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" @@ -396,13 +460,15 @@ "\n" "(O programa será capaz de os diferenciar posteriormente.)" -#: ../../common/snapshots.py:752 +#: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" msgstr "" +"Nenhum perfil encontrado. Precisa, primeiro, de actualizar os perfis, " +"reinicie o Back In Time" -#: ../../common/snapshots.py:803 +#: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" @@ -414,8 +480,16 @@ "If not Back In Time will restore former settings for this profile, however " "cannot continue taking snapshots" msgstr "" +"%(snapshots_left)s\n" +"do perfil %(profile_id)s não foram movidos para a nova localização\n" +"Quer continuar?\n" +"(Back In Time pode continuar a tirar snapshots, contudo as restantes " +"snapshots não serão consideradas para remoção automática)\n" +"\n" +"Se escolher não continuar o Back In Time retomará as definições anteriores " +"para este perfil, mas não pode continuar a tirar snapshots" -#: ../../common/snapshots.py:812 +#: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" @@ -424,15 +498,23 @@ "You can manually move the snapshots, \n" "if you are done restart Back In Time to proceed" msgstr "" +"Definições antigas do perfil %s retomadas.\n" +"Back In Time não pode continuar a tirar snapshots.\n" +"\n" +"Pode manualmente mover estas snapshots, \n" +"se tiver concluído pode reiniciar o Back In Time para continuar" -#: ../../common/snapshots.py:825 +#: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" msgstr "" +"Actualização bem sucedida!!\n" +"\n" +"Back In Time will continuará a tirar as snapshots de novo como calendarizado" -#: ../../common/snapshots.py:830 +#: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" @@ -443,22 +525,33 @@ "\n" "If you do not, you will be asked again next time you start Back In Time." msgstr "" +"Tem a certeza que quer mover as suas snapshots antigas?\n" +"\n" +"\n" +"Se o fizer, não verá estas perguntas da próxima vez, Back In Time will " +"continuará a fazer as snapshots, mas a remoção inteligente não considerará " +"as suas snapshots antigas!\n" +"\n" +"Se não o fizer, ser-lhe-á novamente perguntado quando iniciar o Back In Time." -#: ../../common/snapshots.py:839 +#: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "" -"Back In Time vai novamente continuar a fazer capturas de ecrã conforme " -"agendado" +"Back In Time vai novamente continuar a fazer snapshots conforme agendado" -#: ../../common/snapshots.py:841 +#: ../../common/snapshots.py:953 msgid "" "Back In Time still cannot continue taking new snapshots.\n" "Restart Back In Time to see the questions again" msgstr "" -"Back In Time ainda não pode continuar a fazer novas capturas de ecrã.\n" +"Back In Time ainda não pode continuar a fazer novas sanpshots.\n" "Reinicie Back In Time para ver as perguntas novamente" -#: ../../common/snapshots.py:913 +#: ../../common/snapshots.py:972 +msgid "Deferring backup while on battery" +msgstr "Adiar o backup se estiver a usar bateria" + +#: ../../common/snapshots.py:1035 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it." @@ -466,156 +559,163 @@ "Não foi possível encontrar a pasta dos snapshots.\n" "Se estiver numa drive amovível, ligue-a por favor." -#: ../../common/snapshots.py:915 +#: ../../common/snapshots.py:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "Aguardar %s segundo." msgstr[1] "Aguardar %s segundos." -#: ../../common/snapshots.py:941 +#: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "Falhou a criação da snapshot %s !!!" -#: ../../common/snapshots.py:950 +#: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "A finalizar" -#: ../../common/snapshots.py:1088 +#: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" -msgstr "Impossível criar directoria: %s" +msgstr "Impossível criar pasta: %s" -#: ../../common/snapshots.py:1107 +#: ../../common/snapshots.py:1217 msgid "..." msgstr "..." -#: ../../common/snapshots.py:1134 +#: ../../common/snapshots.py:1238 +#, python-format +msgid "Found leftover '%s' which can be continued." +msgstr "" + +#: ../../common/snapshots.py:1250 +#, python-format +msgid "Remove leftover '%s' folder from last run" +msgstr "" + +#: ../../common/snapshots.py:1263 #, python-format msgid "Can't remove folder: %s" -msgstr "Impossível remover directoria: %s" +msgstr "Impossível remover pasta: %s" -#: ../../common/snapshots.py:1219 +#: ../../common/snapshots.py:1340 #, python-format msgid "Compare with snapshot %s" -msgstr "Compare com a captura de ecrã %s" +msgstr "Compare com a snapshot %s" -#: ../../common/snapshots.py:1248 +#: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "Criar hard-links" -#: ../../common/snapshots.py:1335 +#: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "Gravar ficheiro de configuração ..." -#: ../../common/snapshots.py:1341 +#: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "Gravar permissões ..." -#: ../../common/snapshots.py:1442 +#: ../../common/snapshots.py:1470 +msgid "Save permission over ssh failed. Retry normal method" +msgstr "Guardar permissões através de ssh falhou. Tentar com método normal." + +#: ../../common/snapshots.py:1521 #, python-format msgid "Can't rename %(new_path)s to %(path)s" -msgstr "" +msgstr "Impossível renomear %(new_path)s para %(path)s" -#: ../../common/snapshots.py:1562 -msgid "Remove old snapshots" -msgstr "" - -#: ../../common/snapshots.py:1586 ../../kde4/settingsdialog.py:501 -#: ../../gnome/settingsdialog.glade:1660 +#: ../../common/snapshots.py:1695 ../../common/snapshots.py:1728 +#: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "Remoção inteligente" -#: ../../common/snapshots.py:1591 +#: ../../common/snapshots.py:1704 +msgid "Remove old snapshots" +msgstr "Remover snapshots antigas" + +#: ../../common/snapshots.py:1733 msgid "Try to keep min free space" -msgstr "" +msgstr "Tentar manter" -#: ../../common/snapshots.py:1621 +#: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" -#: ../../common/sshtools.py:106 +#: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" -msgstr "" +msgstr "Não foi possível montar %s" -#: ../../common/sshtools.py:113 +#: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "" -#: ../../common/sshtools.py:187 -#, python-format -msgid "" -"Failed to unlock SSH private key:\n" -"Error: %s" -msgstr "" - -#: ../../common/sshtools.py:194 +#: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" -#: ../../common/sshtools.py:199 +#: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" -#: ../../common/sshtools.py:217 +#: ../../common/sshtools.py:278 #, python-format msgid "" "Password-less authentication for %(user)s@%(host)s failed. Look at 'man " "backintime' for further instructions." msgstr "" -#: ../../common/sshtools.py:229 +#: ../../common/sshtools.py:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" -#: ../../common/sshtools.py:254 +#: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" -#: ../../common/sshtools.py:274 +#: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" -#: ../../common/sshtools.py:276 +#: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:278 +#: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:280 +#: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" -#: ../../common/sshtools.py:302 +#: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" -#: ../../common/sshtools.py:325 ../../common/sshtools.py:383 +#: ../../common/sshtools.py:423 ../../common/sshtools.py:553 #, python-format msgid "" "Remote host %(host)s doesn't support '%(command)s':\n" @@ -623,7 +723,7 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:387 +#: ../../common/sshtools.py:556 #, python-format msgid "" "Check commands on host %(host)s returned unknown error:\n" @@ -631,817 +731,937 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:400 +#: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "" -#: ../../gnome/app.py:185 ../../gnome/app.py:594 ../../gnome/app.py:608 -#: ../../kde4/app.py:299 ../../kde4/app.py:570 ../../kde4/app.py:587 -msgid "Done" -msgstr "Concluído" +#: ../../qt4/app.py:81 +msgid "Refresh snapshots list" +msgstr "" + +#: ../../qt4/app.py:85 ../../qt4/app.py:890 +msgid "Snapshot Name" +msgstr "" + +#: ../../qt4/app.py:88 +msgid "Remove Snapshot" +msgstr "" -#: ../../gnome/app.py:189 ../../kde4/app.py:143 ../../kde4/app.py:159 -#: ../../gnome/mainwindow.glade:225 +#: ../../qt4/app.py:91 +msgid "View Snapshot Log" +msgstr "" + +#: ../../qt4/app.py:94 +msgid "View Last Log" +msgstr "" + +#: ../../qt4/app.py:99 ../../qt4/settingsdialog.py:51 +msgid "Settings" +msgstr "Configurações" + +#: ../../qt4/app.py:104 +msgid "Shutdown" +msgstr "" + +#: ../../qt4/app.py:105 +msgid "Shutdown system after snapshot has finished." +msgstr "" + +#: ../../qt4/app.py:111 +msgid "Exit" +msgstr "Sair" + +#: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 msgid "Help" msgstr "Ajuda" -#: ../../gnome/app.py:191 ../../kde4/app.py:146 -#: ../../gnome/mainwindow.glade:223 +#: ../../qt4/app.py:122 +msgid "Config File Help" +msgstr "" + +#: ../../qt4/app.py:125 msgid "Website" msgstr "Página Web" -#: ../../gnome/app.py:192 ../../kde4/app.py:148 +#: ../../qt4/app.py:127 ../../qt4/app.py:982 +msgid "Changelog" +msgstr "" + +#: ../../qt4/app.py:129 msgid "FAQ" msgstr "" -#: ../../gnome/app.py:193 ../../kde4/app.py:150 +#: ../../qt4/app.py:131 msgid "Ask a question" msgstr "" -#: ../../gnome/app.py:194 ../../kde4/app.py:152 +#: ../../qt4/app.py:133 msgid "Report a bug" msgstr "" -#: ../../gnome/app.py:196 ../../kde4/app.py:155 +#: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "Sobre" -#: ../../gnome/app.py:202 ../../gnome/app.py:887 -#: ../../gnome/restoredialog.py:84 ../../gnome/snapshotsdialog.py:83 -#: ../../gnome/snapshotsdialog.py:244 ../../kde4/app.py:206 -#: ../../kde4/app.py:216 ../../kde4/restoredialog.py:68 -#: ../../kde4/snapshotsdialog.py:111 ../../kde4/snapshotsdialog.py:117 -#: ../../gnome/mainwindow.glade:350 ../../gnome/mainwindow.glade:352 -#: ../../gnome/snapshotsdialog.glade:169 ../../gnome/snapshotsdialog.glade:171 +#: ../../qt4/app.py:163 +msgid "Up" +msgstr "Subir" + +#: ../../qt4/app.py:174 ../../qt4/settingsdialog.py:1776 +msgid "Show hidden files" +msgstr "Mostrar ficheiros escondidos" + +#: ../../qt4/app.py:184 ../../qt4/app.py:199 ../../qt4/app.py:233 +#: ../../qt4/restoredialog.py:62 ../../qt4/settingsdialog.py:1818 +#: ../../qt4/snapshotsdialog.py:134 ../../qt4/snapshotsdialog.py:139 msgid "Restore" msgstr "Restaurar" -#: ../../gnome/app.py:203 ../../gnome/app.py:888 ../../gnome/gnometools.py:67 -#: ../../gnome/snapshotsdialog.py:84 ../../gnome/snapshotsdialog.py:245 -#: ../../kde4/app.py:208 ../../kde4/restoredialog.py:42 -#: ../../kde4/snapshotsdialog.py:113 +#: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 +#: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "" -#: ../../gnome/app.py:205 ../../gnome/app.py:896 ../../gnome/app.py:1146 -#: ../../kde4/app.py:1041 -#, python-format -msgid "Restore '%s'" +#: ../../qt4/app.py:194 +msgid "Restore and delete new files" msgstr "" -#: ../../gnome/app.py:207 ../../gnome/app.py:897 ../../gnome/app.py:1147 -#: ../../kde4/app.py:1042 +#: ../../qt4/app.py:201 #, python-format -msgid "Restore '%s' to ..." +msgid "" +"Restore selected file or folder.\n" +"If this button is grayed out this is most likely because \"%(now)s\" is " +"selected in left hand snapshots list." msgstr "" -#: ../../gnome/app.py:226 ../../kde4/app.py:235 +#: ../../qt4/app.py:206 ../../qt4/logviewdialog.py:67 +#: ../../qt4/qt4tools.py:160 ../../qt4/snapshotsdialog.py:96 +msgid "Snapshots" +msgstr "Capturas de ecrã" + +#: ../../qt4/app.py:213 +msgid "Snapshot" +msgstr "" + +#: ../../qt4/app.py:224 +msgid "View" +msgstr "" + +#: ../../qt4/app.py:277 msgid "Shortcuts" msgstr "Atalhos" -#: ../../gnome/app.py:249 -msgid "Name" -msgstr "Nome" - -#: ../../gnome/app.py:260 -msgid "Size" -msgstr "Tamanho" - -#: ../../gnome/app.py:267 -msgid "Date" -msgstr "Data" - -#: ../../gnome/app.py:286 ../../gnome/app.py:883 -#: ../../gnome/snapshotsdialog.py:116 ../../kde4/app.py:171 -#: ../../kde4/app.py:221 ../../kde4/snapshotsdialog.py:91 -#: ../../gnome/mainwindow.glade:366 ../../gnome/mainwindow.glade:368 -#: ../../gnome/snapshotsdialog.glade:8 -msgid "Snapshots" -msgstr "Capturas de ecrã" +#: ../../qt4/app.py:295 +msgid "" +"This folder doesn't exist\n" +"in the current selected snapshot!" +msgstr "" + +#: ../../qt4/app.py:359 +msgid "Add to Include" +msgstr "" + +#: ../../qt4/app.py:360 +msgid "Add to Exclude" +msgstr "" + +#: ../../qt4/app.py:416 +#, python-format +msgid "" +"%(appName)s is not configured. Would you like to restore a previous " +"configuration?" +msgstr "" -#: ../../gnome/app.py:348 ../../kde4/app.py:362 +#: ../../qt4/app.py:440 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it and then press OK" msgstr "" -#: ../../gnome/app.py:611 ../../kde4/app.py:590 -msgid "Done, no backup needed" -msgstr "Concluído, cópia de segurança desnecessária" +#: ../../qt4/app.py:473 +msgid "" +"If you close this window Back In Time will not be able to shutdown your " +"system when the snapshot has finished.\n" +"Do you really want to close?" +msgstr "" -#: ../../gnome/app.py:619 ../../kde4/app.py:598 +#: ../../qt4/app.py:667 ../../qt4/app.py:703 msgid "Working:" msgstr "A processar:" -#: ../../gnome/app.py:623 ../../kde4/app.py:602 +#: ../../qt4/app.py:695 +msgid "Done, no backup needed" +msgstr "Concluído, cópia de segurança desnecessária" + +#: ../../qt4/app.py:707 msgid "Error:" msgstr "Erro:" -#: ../../gnome/app.py:636 ../../kde4/app.py:649 +#: ../../qt4/app.py:726 ../../qt4/qt4systrayicon.py:153 +msgid "Sent:" +msgstr "" + +#: ../../qt4/app.py:727 ../../qt4/qt4systrayicon.py:154 +msgid "Speed:" +msgstr "" + +#: ../../qt4/app.py:728 ../../qt4/qt4systrayicon.py:155 +msgid "ETA:" +msgstr "" + +#: ../../qt4/app.py:777 msgid "Global" msgstr "Global" -#: ../../gnome/app.py:637 ../../kde4/app.py:650 +#: ../../qt4/app.py:778 msgid "Root" msgstr "Raiz" -#: ../../gnome/app.py:638 ../../kde4/app.py:651 +#: ../../qt4/app.py:779 msgid "Home" msgstr "Pasta Pessoal" -#: ../../gnome/app.py:662 -msgid "Bookmarks" -msgstr "Favoritos" - -#: ../../gnome/app.py:675 ../../kde4/app.py:662 +#: ../../qt4/app.py:794 msgid "Backup folders" msgstr "Directorias de backup" -#: ../../gnome/app.py:701 ../../kde4/app.py:734 -msgid "Today" -msgstr "Hoje" - -#: ../../gnome/app.py:705 ../../kde4/app.py:738 -msgid "Yesterday" -msgstr "Ontem" - -#: ../../gnome/app.py:709 ../../kde4/app.py:742 -msgid "This week" -msgstr "Esta semana" - -#: ../../gnome/app.py:713 ../../kde4/app.py:746 -msgid "Last week" -msgstr "Semana passada" - -#: ../../gnome/app.py:764 ../../kde4/app.py:398 -msgid "" -"If you close this window Back In Time will not be able to shutdown your " -"system when the snapshot has finished.\n" -"Do you really want to close?" +#: ../../qt4/app.py:849 +msgid "This is NOT a snapshot but a live view of your local files" msgstr "" -#: ../../gnome/app.py:881 ../../gnome/snapshotsdialog.py:238 -msgid "Open" -msgstr "Abrir" - -#: ../../gnome/app.py:1056 ../../kde4/app.py:90 ../../kde4/app.py:805 -#: ../../gnome/mainwindow.glade:73 ../../gnome/mainwindow.glade:75 -msgid "Snapshot Name" +#: ../../qt4/app.py:860 ../../qt4/app.py:1476 +#, python-format +msgid "Last check %s" msgstr "" -#: ../../gnome/app.py:1075 +#: ../../qt4/app.py:928 #, python-format msgid "" "Are you sure you want to remove the snapshot:\n" -"%s" +"%s" msgstr "" -#: ../../gnome/app.py:1123 ../../kde4/app.py:1010 +#: ../../qt4/app.py:1004 #, python-format -msgid "Snapshot: %s" +msgid "" +"Backup local files before overwriting or\n" +"removing with trailing '%(suffix)s'." msgstr "" -#: ../../gnome/app.py:1124 ../../kde4/app.py:1011 -#, python-format -msgid "View the snapshot made at %s" +#: ../../qt4/app.py:1010 +msgid "" +"Are you sure you want to remove all newer files in your original folder?" msgstr "" -#: ../../gnome/app.py:1126 ../../kde4/app.py:1013 -msgid "View the current disk content" -msgstr "Ver conteúdo actual do disco" - -#: ../../gnome/logviewdialog.py:106 ../../gnome/settingsdialog.py:414 -#: ../../kde4/logviewdialog.py:83 ../../kde4/settingsdialog.py:590 -msgid "All" +#: ../../qt4/app.py:1014 +msgid "" +"WARNING: deleting files in filesystem root could break your whole system!!!" msgstr "" -#: ../../gnome/logviewdialog.py:107 ../../gnome/settingsdialog.py:412 -#: ../../kde4/logviewdialog.py:84 ../../kde4/settingsdialog.py:588 -msgid "Errors" -msgstr "Erros" - -#: ../../gnome/logviewdialog.py:112 ../../kde4/logviewdialog.py:89 -msgid "Changes" -msgstr "Alterações" - -#: ../../gnome/logviewdialog.py:115 ../../kde4/logviewdialog.py:92 -msgid "Informations" -msgstr "Informações" - -#: ../../gnome/settingsdialog.py:235 ../../kde4/settingsdialog.py:387 -msgid "Include files and folders" +#: ../../qt4/app.py:1016 +msgid "Files to be restored:" msgstr "" -#: ../../gnome/settingsdialog.py:264 -msgid "Exclude patterns, files or folders" +#: ../../qt4/app.py:1031 +msgid "Do you really want to restore this files(s):" msgstr "" -#: ../../gnome/settingsdialog.py:411 ../../kde4/settingsdialog.py:587 -msgid "None" +#: ../../qt4/app.py:1226 +#, python-format +msgid "Snapshot: %s" msgstr "" -#: ../../gnome/settingsdialog.py:413 ../../kde4/settingsdialog.py:589 -msgid "Changes & Errors" -msgstr "Alterações & Erros" - -#: ../../gnome/settingsdialog.py:458 -msgid "Snapshots folder" +#: ../../qt4/app.py:1227 +#, python-format +msgid "View the snapshot made at %s" msgstr "" -#: ../../gnome/settingsdialog.py:466 ../../kde4/settingsdialog.py:1314 -msgid "Are you sure you want to change snapshots folder ?" -msgstr "" +#: ../../qt4/app.py:1229 +msgid "View the current disk content" +msgstr "Ver conteúdo actual do disco" -#: ../../gnome/settingsdialog.py:901 ../../kde4/settingsdialog.py:914 -msgid "" -"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " -"*/3 for periodic backups every 3 hours" +#: ../../qt4/app.py:1268 +#, python-format +msgid "Restore '%s'" msgstr "" -#: ../../gnome/settingsdialog.py:1141 ../../kde4/settingsdialog.py:653 -msgid "New profile" -msgstr "Novo perfil" - -#: ../../gnome/settingsdialog.py:1155 ../../kde4/settingsdialog.py:669 -msgid "Rename profile" -msgstr "Renomear perfil" - -#: ../../gnome/settingsdialog.py:1167 ../../kde4/settingsdialog.py:683 +#: ../../qt4/app.py:1269 #, python-format -msgid "Are you sure you want to delete the profile \"%s\" ?" -msgstr "Tem a certeza que desja remover este perfil \"%s\" ?" - -#: ../../gnome/settingsdialog.py:1173 ../../kde4/settingsdialog.py:1292 -msgid "Include folder" -msgstr "Incluir pasta" - -#: ../../gnome/settingsdialog.py:1193 ../../kde4/settingsdialog.py:1278 -msgid "Include file" +msgid "Restore '%s' to ..." msgstr "" -#: ../../gnome/settingsdialog.py:1235 ../../kde4/settingsdialog.py:1241 -msgid "Exclude pattern" +#: ../../qt4/app.py:1270 +#, python-format +msgid "Restore '%s' and delete new files" msgstr "" -#: ../../gnome/settingsdialog.py:1240 ../../kde4/settingsdialog.py:1251 -msgid "Exclude patterns can't contain ':' char !" -msgstr "Os padrões de exclusão não podem conter o caractere ':' !" - -#: ../../gnome/settingsdialog.py:1246 ../../kde4/settingsdialog.py:1257 -msgid "Exclude file" -msgstr "Excluir ficheiro" +#: ../../qt4/app.py:1368 ../../qt4/app.py:1385 +msgid "Authors" +msgstr "" -#: ../../gnome/settingsdialog.py:1257 ../../kde4/settingsdialog.py:1261 -msgid "Exclude folder" -msgstr "Excluir pasta" +#: ../../qt4/app.py:1369 ../../qt4/app.py:1388 +msgid "Translations" +msgstr "" -#: ../../gnome/snapshotsdialog.py:240 -msgid "Jump to" +#: ../../qt4/app.py:1370 ../../qt4/app.py:1391 +msgid "License" msgstr "" -#: ../../gnome/snapshotsdialog.py:248 ../../kde4/snapshotsdialog.py:164 -msgid "Diff" +#: ../../qt4/logviewdialog.py:49 +msgid "Last Log View" msgstr "" -#: ../../gnome/snapshotsdialog.py:277 ../../kde4/snapshotsdialog.py:339 -msgid "You can't compare a snapshot to itself" +#: ../../qt4/logviewdialog.py:51 +msgid "Snapshot Log View" msgstr "" -#: ../../gnome/snapshotsdialog.py:284 ../../kde4/snapshotsdialog.py:346 -#, python-format -msgid "Command not found: %s" -msgstr "Comando não encontrado: %s" +#: ../../qt4/logviewdialog.py:59 ../../qt4/settingsdialog.py:59 +#: ../../qt4/settingsdialog.py:274 ../../qt4/settingsdialog.py:1899 +msgid "Profile:" +msgstr "Perfil:" -#: ../../gnome/snapshotsdialog.py:307 ../../kde4/snapshotsdialog.py:367 -#, python-format -msgid "" -"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" +#: ../../qt4/logviewdialog.py:81 +msgid "Filter:" msgstr "" -#: ../../gnome/snapshotsdialog.py:310 ../../kde4/snapshotsdialog.py:370 -#, python-format -msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +#: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 +msgid "All" msgstr "" -#: ../../gnome/snapshotsdialog.py:312 ../../kde4/snapshotsdialog.py:372 -msgid "WARNING: This can not be revoked!" -msgstr "" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 +#: ../../qt4/settingsdialog.py:657 +msgid "Errors" +msgstr "Erros" -#: ../../gnome/snapshotsdialog.py:317 ../../kde4/snapshotsdialog.py:377 -#, python-format -msgid "Exclude \"%s\" from future snapshots?" -msgstr "" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 +msgid "Changes" +msgstr "Alterações" -#: ../../kde4/app.py:86 ../../gnome/mainwindow.glade:58 -#: ../../gnome/mainwindow.glade:60 -msgid "Refresh snapshots list" -msgstr "" +#: ../../qt4/logviewdialog.py:92 +msgid "Informations" +msgstr "Informações" -#: ../../kde4/app.py:94 ../../gnome/mainwindow.glade:88 -#: ../../gnome/mainwindow.glade:90 -msgid "Remove Snapshot" +#: ../../qt4/logviewdialog.py:101 +msgid "[E] Error, [I] Information, [C] Change" msgstr "" -#: ../../kde4/app.py:98 ../../gnome/mainwindow.glade:105 -msgid "View Snapshot Log" +#: ../../qt4/logviewdialog.py:104 +msgid "decode paths" msgstr "" -#: ../../kde4/app.py:102 ../../gnome/mainwindow.glade:121 -msgid "View Last Log" +#: ../../qt4/messagebox.py:56 +msgid "Error" msgstr "" -#: ../../kde4/app.py:108 ../../kde4/settingsdialog.py:69 -#: ../../gnome/mainwindow.glade:144 ../../gnome/mainwindow.glade:146 -#: ../../gnome/settingsdialog.glade:7 -msgid "Settings" -msgstr "Configurações" - -#: ../../kde4/app.py:124 ../../gnome/mainwindow.glade:169 -msgid "Shutdown system after snapshot has finished." +#: ../../qt4/messagebox.py:62 ../../qt4/messagebox.py:68 +msgid "Question" msgstr "" -#: ../../kde4/app.py:131 ../../gnome/mainwindow.glade:184 -#: ../../gnome/mainwindow.glade:186 -msgid "Exit" -msgstr "Sair" +#: ../../qt4/qt4systrayicon.py:69 +msgid "Start BackInTime" +msgstr "" -#: ../../kde4/app.py:186 ../../gnome/mainwindow.glade:289 -msgid "Up" -msgstr "Subir" +#: ../../qt4/qt4systrayicon.py:124 +msgid "Working..." +msgstr "A Processar..." -#: ../../kde4/app.py:199 ../../gnome/mainwindow.glade:325 -msgid "Show hidden files" -msgstr "Mostrar ficheiros escondidos" +#: ../../qt4/qt4tools.py:178 +msgid "Today" +msgstr "Hoje" -#: ../../kde4/app.py:244 -msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" -msgstr "" +#: ../../qt4/qt4tools.py:183 +msgid "Yesterday" +msgstr "Ontem" -#: ../../kde4/app.py:839 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" -msgstr "" +#: ../../qt4/qt4tools.py:188 +msgid "This week" +msgstr "Esta semana" -#: ../../kde4/app.py:1140 ../../kde4/kde4systrayicon.py:117 -msgid "Working..." -msgstr "A Processar..." +#: ../../qt4/qt4tools.py:193 +msgid "Last week" +msgstr "Semana passada" -#: ../../kde4/logviewdialog.py:55 -msgid "Error Log View" +#: ../../qt4/restoredialog.py:75 +msgid "Show full Log" msgstr "" -#: ../../kde4/logviewdialog.py:65 ../../kde4/settingsdialog.py:79 -#: ../../kde4/settingsdialog.py:293 ../../gnome/logviewdialog.glade:73 -#: ../../gnome/settingsdialog.glade:72 -msgid "Profile:" -msgstr "Perfil:" +#: ../../qt4/settingsdialog.py:68 +msgid "Edit" +msgstr "Editar" -#: ../../kde4/logviewdialog.py:77 ../../gnome/logviewdialog.glade:110 -msgid "Filter:" +#: ../../qt4/settingsdialog.py:73 +msgid "Modify for Full System Backup" msgstr "" -#: ../../kde4/logviewdialog.py:100 ../../gnome/logviewdialog.glade:169 -msgid "[E] Error, [I] Information, [C] Change" +#: ../../qt4/settingsdialog.py:77 ../../qt4/settingsdialog.py:451 +msgid "Add" msgstr "" -#: ../../kde4/logviewdialog.py:103 ../../gnome/logviewdialog.glade:195 -msgid "decode paths" +#: ../../qt4/settingsdialog.py:81 ../../qt4/settingsdialog.py:408 +#: ../../qt4/settingsdialog.py:467 +msgid "Remove" msgstr "" -#: ../../kde4/settingsdialog.py:88 -msgid "Edit" -msgstr "Editar" - -#: ../../kde4/settingsdialog.py:106 ../../gnome/settingsdialog.glade:1207 +#: ../../qt4/settingsdialog.py:96 msgid "General" msgstr "Geral" -#: ../../kde4/settingsdialog.py:114 ../../gnome/settingsdialog.glade:199 +#: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "" -#: ../../kde4/settingsdialog.py:127 ../../kde4/settingsdialog.py:1311 +#: ../../qt4/settingsdialog.py:119 +#, python-format +msgid "" +"Warning: %(app)s uses EncFS for encryption. A recent security audit " +"revealed several possible attack vectors for this. Please take a look at 'A " +"NOTE ON SECURITY' in 'man backintime'." +msgstr "" + +#: ../../qt4/settingsdialog.py:129 ../../qt4/settingsdialog.py:1568 msgid "Where to save snapshots" msgstr "Onde guardar as snapshots" -#: ../../kde4/settingsdialog.py:146 +#: ../../qt4/settingsdialog.py:145 +msgid "Folder" +msgstr "" + +#: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" -#: ../../kde4/settingsdialog.py:158 ../../kde4/settingsdialog.py:283 -#: ../../gnome/settingsdialog.glade:323 ../../gnome/settingsdialog.glade:583 -#: ../../gnome/settingsdialog.glade:874 +#: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "Servidor:" -#: ../../kde4/settingsdialog.py:163 ../../gnome/settingsdialog.glade:350 -#: ../../gnome/settingsdialog.glade:610 +#: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "" -#: ../../kde4/settingsdialog.py:168 ../../kde4/settingsdialog.py:288 -#: ../../gnome/settingsdialog.glade:377 ../../gnome/settingsdialog.glade:637 -#: ../../gnome/settingsdialog.glade:902 +#: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "Utilizador:" -#: ../../kde4/settingsdialog.py:173 ../../gnome/settingsdialog.glade:416 +#: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" -#: ../../kde4/settingsdialog.py:178 ../../gnome/settingsdialog.glade:459 +#: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" -#: ../../kde4/settingsdialog.py:184 +#: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "" -#: ../../kde4/settingsdialog.py:228 ../../kde4/settingsdialog.py:237 -#: ../../kde4/settingsdialog.py:243 ../../gnome/settingsdialog.glade:703 -#: ../../gnome/settingsdialog.glade:743 +#: ../../qt4/settingsdialog.py:201 +msgid "Key File" +msgstr "" + +#: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 +#: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "" -#: ../../kde4/settingsdialog.py:249 ../../gnome/settingsdialog.glade:775 +#: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" -#: ../../kde4/settingsdialog.py:252 ../../gnome/settingsdialog.glade:792 +#: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" -#: ../../kde4/settingsdialog.py:264 ../../gnome/settingsdialog.glade:968 +#: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "" -#: ../../kde4/settingsdialog.py:276 ../../gnome/settingsdialog.glade:848 -msgid "Auto Host / User / Profile Id" +#: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 +msgid "Full snapshot path: " msgstr "" -#: ../../kde4/settingsdialog.py:301 +#: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "Agenda" -#: ../../kde4/settingsdialog.py:311 ../../gnome/settingsdialog.glade:1092 +#: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "" -#: ../../kde4/settingsdialog.py:322 ../../gnome/settingsdialog.glade:1079 +#: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "" -#: ../../kde4/settingsdialog.py:333 ../../gnome/settingsdialog.glade:1066 +#: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "Hora:" -#: ../../kde4/settingsdialog.py:344 ../../gnome/settingsdialog.glade:1053 +#: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "" -#: ../../kde4/settingsdialog.py:353 ../../gnome/settingsdialog.glade:1014 +#: ../../qt4/settingsdialog.py:339 msgid "" -"Run Back In Time periodically with anacron. This is useful if the computer " -"is not running regular." +"Run Back In Time repeatedly. This is useful if the computer is not running " +"regular." msgstr "" -#: ../../kde4/settingsdialog.py:357 ../../gnome/settingsdialog.glade:1040 -msgid "Frequency in days:" +#: ../../qt4/settingsdialog.py:344 +msgid "Every:" msgstr "" -#: ../../kde4/settingsdialog.py:368 ../../gnome/settingsdialog.glade:1026 +#: ../../qt4/settingsdialog.py:362 msgid "" "Run Back In Time as soon as the drive is connected (only once every X " "days).\n" "You will be prompted for your sudo password." msgstr "" -#: ../../kde4/settingsdialog.py:379 ../../gnome/settingsdialog.glade:1310 +#: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Incluir" -#: ../../kde4/settingsdialog.py:403 ../../kde4/settingsdialog.py:445 -#: ../../gnome/settingsdialog.glade:1411 +#: ../../qt4/settingsdialog.py:381 +msgid "Include files and folders" +msgstr "" + +#: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "Adicionar um ficheiro" -#: ../../kde4/settingsdialog.py:408 ../../kde4/settingsdialog.py:450 -#: ../../gnome/settingsdialog.glade:1427 +#: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Adicionar pasta ..." -#: ../../kde4/settingsdialog.py:418 ../../gnome/settingsdialog.glade:1474 +#: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Excluir" -#: ../../kde4/settingsdialog.py:421 ../../gnome/settingsdialog.glade:1328 +#: ../../qt4/settingsdialog.py:417 msgid "" "Warning: Wildcards ('foo*', '[fF]oo', 'fo?') will be ignored with " "mode 'SSH encrypted'.\n" "Only separate asterisk are allowed ('foo/*', 'foo/**/bar')" msgstr "" -#: ../../kde4/settingsdialog.py:430 +#: ../../qt4/settingsdialog.py:425 +msgid "Exclude patterns, files or folders" +msgstr "" + +#: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "Altamente recomendado:" -#: ../../kde4/settingsdialog.py:460 ../../gnome/settingsdialog.glade:1905 +#: ../../qt4/settingsdialog.py:463 +msgid "Add default" +msgstr "" + +#: ../../qt4/settingsdialog.py:474 +msgid "Exclude files bigger than: " +msgstr "" + +#: ../../qt4/settingsdialog.py:475 +#, python-format +msgid "" +"Exclude files bigger than value in %(prefix)s.\n" +"With 'Full rsync mode' disabled this will only affect new files\n" +"because for rsync this is a transfer option, not an exclude option.\n" +"So big files that has been backed up before will remain in snapshots\n" +"even if they had changed." +msgstr "" + +#: ../../qt4/settingsdialog.py:493 msgid "Auto-remove" msgstr "Auto-remoção" -#: ../../kde4/settingsdialog.py:464 ../../gnome/settingsdialog.glade:1608 +#: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "Mais antigo do que:" -#: ../../kde4/settingsdialog.py:478 ../../gnome/settingsdialog.glade:1624 +#: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "Se espaço livre é inferior a:" -#: ../../kde4/settingsdialog.py:490 ../../gnome/settingsdialog.glade:1642 +#: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" -#: ../../kde4/settingsdialog.py:514 ../../gnome/settingsdialog.glade:1697 +#: ../../qt4/settingsdialog.py:551 +msgid "Run in background on remote Host." +msgstr "" + +#: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "" -#: ../../kde4/settingsdialog.py:517 ../../kde4/settingsdialog.py:522 -#: ../../gnome/settingsdialog.glade:1705 ../../gnome/settingsdialog.glade:1729 +#: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "" -#: ../../kde4/settingsdialog.py:519 ../../gnome/settingsdialog.glade:1717 +#: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "" -#: ../../kde4/settingsdialog.py:524 ../../gnome/settingsdialog.glade:1743 +#: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "" -#: ../../kde4/settingsdialog.py:527 +#: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "" -#: ../../kde4/settingsdialog.py:529 ../../gnome/settingsdialog.glade:1769 +#: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "" -#: ../../kde4/settingsdialog.py:532 ../../gnome/settingsdialog.glade:1781 +#: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "" -#: ../../kde4/settingsdialog.py:534 ../../gnome/settingsdialog.glade:1795 +#: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "" -#: ../../kde4/settingsdialog.py:537 ../../gnome/settingsdialog.glade:1496 +#: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "Não remover snapshots nomeadas" -#: ../../kde4/settingsdialog.py:546 ../../gnome/settingsdialog.glade:2104 +#: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Opções" -#: ../../kde4/settingsdialog.py:549 ../../gnome/settingsdialog.glade:1920 +#: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Activar as notificações" -#: ../../kde4/settingsdialog.py:552 ../../gnome/settingsdialog.glade:1937 +#: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "" -#: ../../kde4/settingsdialog.py:555 +#: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" msgstr "" -#: ../../kde4/settingsdialog.py:558 ../../gnome/settingsdialog.glade:1955 -msgid "Backup files on restore" +#: ../../qt4/settingsdialog.py:611 +msgid "Run only one snapshot at a time" +msgstr "" + +#: ../../qt4/settingsdialog.py:612 +msgid "" +"Other snapshots will be blocked until the current snapshot is done.\n" +"This is a global option. So it will effect all profiles for this user.\n" +"But you need to activate this for all other users, too." +msgstr "" + +#: ../../qt4/settingsdialog.py:617 +msgid "Backup replaced files on restore" msgstr "" -#: ../../kde4/settingsdialog.py:561 ../../gnome/settingsdialog.glade:1972 +#: ../../qt4/settingsdialog.py:618 +#, python-format +msgid "" +"Newer versions of files will be renamed with trailing '%(suffix)s' before " +"restoring.\n" +"If you don't need them anymore you can remove them with '%(cmd)s'" +msgstr "" + +#: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "" -#: ../../kde4/settingsdialog.py:564 ../../gnome/settingsdialog.glade:1989 +#: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "Use a soma de verificação para detectar mudanças" -#: ../../kde4/settingsdialog.py:567 ../../gnome/settingsdialog.glade:2006 +#: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "" -#: ../../kde4/settingsdialog.py:568 ../../gnome/settingsdialog.glade:2032 +#: ../../qt4/settingsdialog.py:634 msgid "" -"- snapshots are no read-only\n" -"- destination file-system must support all linux attributes (dates, rights, " +"- snapshots are not read-only\n" +"- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" -#: ../../kde4/settingsdialog.py:575 ../../gnome/settingsdialog.glade:2045 +#: ../../qt4/settingsdialog.py:641 +msgid "Take a new snapshot regardless of there were changes or not." +msgstr "" + +#: ../../qt4/settingsdialog.py:644 msgid "Check for changes (don't take a new snapshot if nothing changed)" msgstr "" -#: ../../kde4/settingsdialog.py:582 +#: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "" -#: ../../kde4/settingsdialog.py:597 ../../gnome/settingsdialog.glade:2366 -msgid "Expert Options" -msgstr "Opções Avançadas" +#: ../../qt4/settingsdialog.py:656 +msgid "None" +msgstr "" + +#: ../../qt4/settingsdialog.py:658 +msgid "Changes & Errors" +msgstr "Alterações & Erros" -#: ../../kde4/settingsdialog.py:600 +#: ../../qt4/settingsdialog.py:674 msgid "Change these options only if you really know what you are doing !" msgstr "" -#: ../../kde4/settingsdialog.py:608 ../../gnome/settingsdialog.glade:2133 -msgid "Run 'nice' as cron job (default: enabled)" +#: ../../qt4/settingsdialog.py:678 +msgid "Run 'nice':" +msgstr "" + +#: ../../qt4/settingsdialog.py:684 ../../qt4/settingsdialog.py:696 +msgid "as cron job" msgstr "" -#: ../../kde4/settingsdialog.py:611 ../../gnome/settingsdialog.glade:2150 -msgid "Run 'ionice' as cron job (default: enabled)" +#: ../../qt4/settingsdialog.py:687 ../../qt4/settingsdialog.py:702 +#: ../../qt4/settingsdialog.py:716 +msgid "on remote host" msgstr "" -#: ../../kde4/settingsdialog.py:614 ../../gnome/settingsdialog.glade:2167 -msgid "Run 'ionice' when taking a manual snapshot (default: disabled)" +#: ../../qt4/settingsdialog.py:690 +msgid "Run 'ionice':" msgstr "" -#: ../../kde4/settingsdialog.py:617 ../../gnome/settingsdialog.glade:2184 -msgid "Run 'nice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:699 +msgid "when taking a manual snapshot" msgstr "" -#: ../../kde4/settingsdialog.py:620 ../../gnome/settingsdialog.glade:2201 -msgid "Run 'ionice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:706 +msgid "Run 'rsync' with 'nocache':" msgstr "" -#: ../../kde4/settingsdialog.py:626 ../../gnome/settingsdialog.glade:2224 +#: ../../qt4/settingsdialog.py:712 +msgid "on local machine" +msgstr "" + +#: ../../qt4/settingsdialog.py:719 +msgid "Redirect stdout to /dev/null in cronjobs." +msgstr "" + +#: ../../qt4/settingsdialog.py:725 +msgid "Redirect stderr to /dev/null in cronjobs." +msgstr "" + +#: ../../qt4/settingsdialog.py:734 msgid "Limit rsync bandwidth usage: " msgstr "" -#: ../../kde4/settingsdialog.py:629 ../../gnome/settingsdialog.glade:2259 +#: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" -#: ../../kde4/settingsdialog.py:634 ../../gnome/settingsdialog.glade:2280 +#: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "" -#: ../../kde4/settingsdialog.py:637 ../../gnome/settingsdialog.glade:2297 +#: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "" -#: ../../kde4/settingsdialog.py:640 ../../gnome/settingsdialog.glade:2314 +#: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute links)" msgstr "" -#: ../../kde4/settingsdialog.py:643 ../../gnome/settingsdialog.glade:2331 -msgid "Copy links (dereference symbolic links)" +#: ../../qt4/settingsdialog.py:834 +msgid "Paste additional options to rsync" msgstr "" -#: ../../kde4/snapshotsdialog.py:46 ../../kde4/snapshotsdialog.py:173 -#: ../../gnome/snapshotsdialog.glade:385 -msgid "Diff Options" +#: ../../qt4/settingsdialog.py:837 +msgid "" +"Options must be quoted e.g. --exclude-from=\"/path/to/my exclude file\"." msgstr "" -#: ../../kde4/snapshotsdialog.py:56 ../../gnome/snapshotsdialog.glade:314 -msgid "Command:" -msgstr "Comando:" - -#: ../../kde4/snapshotsdialog.py:60 ../../gnome/snapshotsdialog.glade:322 -msgid "Parameters:" -msgstr "Parâmetros:" +#: ../../qt4/settingsdialog.py:847 +msgid "Add prefix to SSH commands" +msgstr "" -#: ../../kde4/snapshotsdialog.py:64 ../../gnome/snapshotsdialog.glade:334 -msgid "Use %1 and %2 for path parameters" +#: ../../qt4/settingsdialog.py:850 +#, python-format +msgid "" +"Prefix to run before every command on remote host.\n" +"Variables need to be escaped with \\$FOO.\n" +"This doesn't touch rsync. So to add a prefix\n" +"for rsync use \"%(cb_rsync_options)s\" with\n" +"%(rsync_options_value)s\n" +"\n" +"%(default)s: %(def_value)s" msgstr "" -#: ../../kde4/snapshotsdialog.py:123 ../../gnome/snapshotsdialog.glade:184 -#: ../../gnome/snapshotsdialog.glade:186 -msgid "Delete" +#: ../../qt4/settingsdialog.py:858 ../../qt4/settingsdialog.py:1691 +msgid "default" msgstr "" -#: ../../kde4/snapshotsdialog.py:128 ../../gnome/snapshotsdialog.glade:199 -#: ../../gnome/snapshotsdialog.glade:201 -msgid "Select All" +#: ../../qt4/settingsdialog.py:875 +msgid "Restore Config" msgstr "" -#: ../../kde4/snapshotsdialog.py:132 ../../gnome/snapshotsdialog.glade:88 -msgid "List only different snapshots" +#: ../../qt4/settingsdialog.py:891 +msgid "" +"Full system backup can only create a snapshot to be restored to the same " +"physical disk(s) with the same disk partitioning as from the source; " +"restoring to new physical disks or the same disks with different " +"partitioning will yield a potentially broken and unusable system.\n" +"\n" +"Full system backup will override some settings that may have been " +"customized. Continue?" msgstr "" -#: ../../kde4/snapshotsdialog.py:139 ../../gnome/snapshotsdialog.glade:110 -msgid "List only equal snapshots to: " +#: ../../qt4/settingsdialog.py:922 +msgid "New profile" +msgstr "Novo perfil" + +#: ../../qt4/settingsdialog.py:938 +msgid "Rename profile" +msgstr "Renomear perfil" + +#: ../../qt4/settingsdialog.py:952 +#, python-format +msgid "Are you sure you want to delete the profile \"%s\" ?" +msgstr "Tem a certeza que desja remover este perfil \"%s\" ?" + +#: ../../qt4/settingsdialog.py:1191 +msgid "" +"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " +"*/3 for periodic backups every 3 hours" msgstr "" -#: ../../kde4/snapshotsdialog.py:149 ../../gnome/snapshotsdialog.glade:146 -msgid "Deep check (more accurate, but slow)" +#: ../../qt4/settingsdialog.py:1489 +msgid "Exclude pattern" msgstr "" -#: ../../kde4/snapshotsdialog.py:174 -msgid "Go To" -msgstr "Ir para" +#: ../../qt4/settingsdialog.py:1502 +msgid "Exclude file" +msgstr "Excluir ficheiro" -#: ../../gnome/logviewdialog.glade:9 -msgid "Log View" -msgstr "" +#: ../../qt4/settingsdialog.py:1506 +msgid "Exclude folder" +msgstr "Excluir pasta" -#: ../../gnome/logviewdialog.glade:179 -msgid "scroll down automatic" +#: ../../qt4/settingsdialog.py:1525 +msgid "Include file" msgstr "" -#: ../../gnome/mainwindow.glade:7 -msgid "Back In Time" -msgstr "Back In Time" +#: ../../qt4/settingsdialog.py:1533 ../../qt4/settingsdialog.py:1553 +#, python-format +msgid "" +"\"%s\" is a symlink. The linked target will not be backed up until you " +"include it, too.\n" +"Would you like to include the symlinks target instead?" +msgstr "" -#: ../../gnome/mainwindow.glade:45 -msgid "Backup Now" -msgstr "Criar cópia de segurança agora" +#: ../../qt4/settingsdialog.py:1545 +msgid "Include folder" +msgstr "Incluir pasta" -#: ../../gnome/mainwindow.glade:171 -msgid "Shutdown" +#: ../../qt4/settingsdialog.py:1572 +msgid "Are you sure you want to change snapshots folder ?" msgstr "" -#: ../../gnome/mainwindow.glade:287 -msgid "Parent folder" -msgstr "Directoria anterior" +#: ../../qt4/settingsdialog.py:1688 +msgid "enabled" +msgstr "" -#: ../../gnome/mainwindow.glade:327 -msgid "Hidden files" -msgstr "Ficheiros ocultos" +#: ../../qt4/settingsdialog.py:1690 +msgid "disabled" +msgstr "" -#: ../../gnome/mainwindow.glade:451 -msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +#: ../../qt4/settingsdialog.py:1715 +msgid "Restore Settings" msgstr "" -#: ../../gnome/settingsdialog.glade:287 -msgid "Where to save snapshots" +#: ../../qt4/settingsdialog.py:1732 +msgid " and add your user to group 'fuse'" msgstr "" -#: ../../gnome/settingsdialog.glade:483 -msgid "Private key:" +#: ../../qt4/settingsdialog.py:1736 +#, python-format +msgid "" +"Please navigate to the snapshot from which you want to restore %(appName)s's " +"configuration. The path may look like: \n" +"%(samplePath)s\n" +"\n" +"If your snapshots are on a remote drive or if they are encrypted you need to " +"manually mount them first. If you use Mode SSH you also may need to set up " +"public key login to the remote host%(addFuse)s.\n" +"Take a look at 'man backintime'." msgstr "" -#: ../../gnome/settingsdialog.glade:534 -msgid "Advanced SSH Settings" +#: ../../qt4/settingsdialog.py:1794 ../../qt4/settingsdialog.py:1854 +msgid "No config found" msgstr "" -#: ../../gnome/settingsdialog.glade:552 -msgid "SSH Settings" +#: ../../qt4/snapshotsdialog.py:49 ../../qt4/snapshotsdialog.py:173 +msgid "Diff Options" msgstr "" -#: ../../gnome/settingsdialog.glade:815 -msgid "Password" +#: ../../qt4/snapshotsdialog.py:56 +msgid "Command:" +msgstr "Comando:" + +#: ../../qt4/snapshotsdialog.py:60 +msgid "Parameters:" +msgstr "Parâmetros:" + +#: ../../qt4/snapshotsdialog.py:64 +msgid "Use %1 and %2 for path parameters" msgstr "" -#: ../../gnome/settingsdialog.glade:930 -msgid "Profile Id:" +#: ../../qt4/snapshotsdialog.py:106 +msgid "List only different snapshots" msgstr "" -#: ../../gnome/settingsdialog.glade:1115 -msgid "" -"hours seperate by comma ( e.g. 8,12,18,23) or */3 for periodic backups every " -"3 hours (cron style)" +#: ../../qt4/snapshotsdialog.py:113 +msgid "List only equal snapshots to: " msgstr "" -#: ../../gnome/settingsdialog.glade:1163 -msgid "Schedule" -msgstr "Agenda" +#: ../../qt4/snapshotsdialog.py:123 +msgid "Deep check (more accurate, but slow)" +msgstr "" -#: ../../gnome/settingsdialog.glade:1363 -msgid "Highly recommended:" +#: ../../qt4/snapshotsdialog.py:144 +msgid "Delete" msgstr "" -#: ../../gnome/settingsdialog.glade:1377 -msgid "label" +#: ../../qt4/snapshotsdialog.py:148 +msgid "Select All" msgstr "" -#: ../../gnome/settingsdialog.glade:1755 -msgid "week(s)" +#: ../../qt4/snapshotsdialog.py:161 +msgid "Diff" msgstr "" -#: ../../gnome/settingsdialog.glade:2069 -msgid "Log level:" +#: ../../qt4/snapshotsdialog.py:172 +msgid "Go To" +msgstr "Ir para" + +#: ../../qt4/snapshotsdialog.py:326 +msgid "You can't compare a snapshot to itself" msgstr "" -#: ../../gnome/settingsdialog.glade:2121 +#: ../../qt4/snapshotsdialog.py:333 +#, python-format +msgid "Command not found: %s" +msgstr "Comando não encontrado: %s" + +#: ../../qt4/snapshotsdialog.py:354 +#, python-format msgid "" -"Change these options only if you really know what you are doing !" +"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" msgstr "" -#: ../../gnome/snapshotsdialog.glade:263 -msgid "Diff with" +#: ../../qt4/snapshotsdialog.py:357 +#, python-format +msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" msgstr "" -#: ../../gnome/textinputdialog.glade:7 -msgid "Pattern" -msgstr "Padrão" +#: ../../qt4/snapshotsdialog.py:359 +msgid "WARNING: This can not be revoked!" +msgstr "" -#: ../../gnome/textinputdialog.glade:70 -msgid "Text" +#: ../../qt4/snapshotsdialog.py:374 +#, python-format +msgid "Exclude \"%s\" from future snapshots?" msgstr "" diff -Nru backintime-1.0.36/common/po/ro.po backintime-1.1.12/common/po/ro.po --- backintime-1.0.36/common/po/ro.po 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/po/ro.po 2016-01-11 18:07:58.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2013-11-09 22:34+0100\n" +"POT-Creation-Date: 2015-12-19 00:47+0100\n" "PO-Revision-Date: 2012-01-08 00:47+0000\n" "Last-Translator: mariusshh@gmail.com \n" "Language-Team: Romanian \n" @@ -16,254 +16,295 @@ "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n == 1 ? 0: (((n % 100 > 19) || ((n % 100 " "== 0) && (n != 0))) ? 2: 1));\n" -"X-Launchpad-Export-Date: 2014-08-06 10:20+0000\n" -"X-Generator: Launchpad (build 17147)\n" +"X-Launchpad-Export-Date: 2016-01-11 17:52+0000\n" +"X-Generator: Launchpad (build 17881)\n" -#: ../../common/config.py:72 +#: ../../common/configfile.py:60 +#, python-format +msgid "Failed to save config: %s" +msgstr "" + +#: ../../common/configfile.py:78 +#, python-format +msgid "Failed to load config: %s" +msgstr "" + +#: ../../common/configfile.py:352 ../../common/configfile.py:414 +#, python-format +msgid "Profile \"%s\" already exists !" +msgstr "Profilul „%s” există deja !" + +#: ../../common/configfile.py:383 +msgid "You can't remove the last profile !" +msgstr "Nu puteți șterge ultimul profil !" + +#: ../../common/config.py:76 msgid "Disabled" msgstr "Dezactivat" -#: ../../common/config.py:73 +#: ../../common/config.py:77 msgid "At every boot/reboot" msgstr "La fiecare pornire/restart" -#: ../../common/config.py:74 +#: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "La fiecare 5 minute" -#: ../../common/config.py:75 +#: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "La fiecare 10 minute" -#: ../../common/config.py:76 +#: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "" -#: ../../common/config.py:77 +#: ../../common/config.py:81 msgid "Every hour" msgstr "" -#: ../../common/config.py:78 +#: ../../common/config.py:82 msgid "Every 2 hours" msgstr "" -#: ../../common/config.py:79 +#: ../../common/config.py:83 msgid "Every 4 hours" msgstr "" -#: ../../common/config.py:80 +#: ../../common/config.py:84 msgid "Every 6 hours" msgstr "" -#: ../../common/config.py:81 +#: ../../common/config.py:85 msgid "Every 12 hours" msgstr "" -#: ../../common/config.py:82 +#: ../../common/config.py:86 msgid "Custom Hours" msgstr "" -#: ../../common/config.py:83 +#: ../../common/config.py:87 msgid "Every Day" msgstr "Zilnic" -#: ../../common/config.py:84 -msgid "Daily (anacron)" +#: ../../common/config.py:88 +msgid "Repeatedly (anacron)" msgstr "" -#: ../../common/config.py:85 +#: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "" -#: ../../common/config.py:86 +#: ../../common/config.py:90 msgid "Every Week" msgstr "Săptămânal" -#: ../../common/config.py:87 +#: ../../common/config.py:91 msgid "Every Month" msgstr "Lunar" -#: ../../common/config.py:91 +#: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Zi (zile)" -#: ../../common/config.py:92 +#: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Săptămâni" -#: ../../common/config.py:93 +#: ../../common/config.py:97 msgid "Year(s)" msgstr "Ani" -#: ../../common/config.py:100 +#: ../../common/config.py:101 +msgid "Hour(s)" +msgstr "" + +#: ../../common/config.py:104 +msgid "Month(s)" +msgstr "" + +#: ../../common/config.py:126 ../../qt4/settingsdialog.py:551 msgid " EXPERIMENTAL!" msgstr "" -#: ../../common/config.py:103 +#: ../../common/config.py:129 msgid "Local" msgstr "" -#: ../../common/config.py:104 +#: ../../common/config.py:130 msgid "SSH" msgstr "" -#: ../../common/config.py:104 ../../common/config.py:106 -#: ../../gnome/settingsdialog.py:475 ../../kde4/settingsdialog.py:1325 +#: ../../common/config.py:130 ../../common/config.py:132 +#: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "" -#: ../../common/config.py:105 +#: ../../common/config.py:131 msgid "Local encrypted" msgstr "" -#: ../../common/config.py:105 ../../common/config.py:106 +#: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "" -#: ../../common/config.py:106 +#: ../../common/config.py:132 msgid "SSH encrypted" msgstr "" -#: ../../common/config.py:112 +#: ../../common/config.py:135 msgid "Default" msgstr "" -#: ../../common/config.py:113 +#: ../../common/config.py:136 msgid "AES128-CTR" msgstr "" -#: ../../common/config.py:114 +#: ../../common/config.py:137 msgid "AES192-CTR" msgstr "" -#: ../../common/config.py:115 +#: ../../common/config.py:138 msgid "AES256-CTR" msgstr "" -#: ../../common/config.py:116 +#: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "" -#: ../../common/config.py:117 +#: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "" -#: ../../common/config.py:118 +#: ../../common/config.py:141 msgid "AES128-CBC" msgstr "" -#: ../../common/config.py:119 +#: ../../common/config.py:142 msgid "3DES-CBC" msgstr "" -#: ../../common/config.py:120 +#: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "" -#: ../../common/config.py:121 +#: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "" -#: ../../common/config.py:122 +#: ../../common/config.py:145 msgid "AES192-CBC" msgstr "" -#: ../../common/config.py:123 +#: ../../common/config.py:146 msgid "AES256-CBC" msgstr "" -#: ../../common/config.py:124 +#: ../../common/config.py:147 msgid "ARCFOUR" msgstr "" -#: ../../common/config.py:129 +#: ../../common/config.py:153 msgid "Main profile" msgstr "Profil principal" -#: ../../common/config.py:256 ../../common/config.py:275 -#: ../../common/config.py:286 ../../common/config.py:291 +#: ../../common/config.py:289 ../../common/config.py:296 +#: ../../common/config.py:307 ../../common/config.py:312 +#: ../../qt4/qt4systrayicon.py:61 #, python-format msgid "Profile: \"%s\"" msgstr "Profil: „%s”" -#: ../../common/config.py:256 +#: ../../common/config.py:289 msgid "Snapshots folder is not valid !" msgstr "Folderul pentru instantaneu nu este valid!" -#: ../../common/config.py:275 +#: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "Trebuie să selectați măcar un director pentru copia de rezervă !" -#: ../../common/config.py:286 +#: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "Nu poți include directorul de backup !" -#: ../../common/config.py:291 +#: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "Nu poti include un sub-folder de backup" -#: ../../common/config.py:361 +#: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s nu este un director !" -#: ../../common/config.py:376 ../../common/config.py:389 +#: ../../common/config.py:380 +msgid "Host/User/Profile-ID must not be empty!" +msgstr "" + +#: ../../common/config.py:388 ../../common/config.py:420 #, python-format msgid "" "Can't write to: %s\n" "Are you sure you have write access ?" msgstr "" -#: ../../common/config.py:1286 +#: ../../common/config.py:400 +#, python-format msgid "" -"Can't find crontab.\n" -"Are you sure cron is installed ?\n" -"If not you should disable all automatic backups." +"Destination filesystem for '%(path)s' is formatted with FAT which doesn't " +"support hard-links. Please use a native Linux filesystem." msgstr "" -#: ../../common/config.py:1338 +#: ../../common/config.py:405 #, python-format -msgid "Schedule udev doesn't work with mode %s" +msgid "" +"Destination filsystem for '%(path)s' is a SMB mounted share. Please make " +"sure the remote SMB server supports symlinks or activate '%(copyLinks)s' in " +"'%(expertOptions)s'." msgstr "" -#: ../../common/config.py:1342 -#, python-format -msgid "Couldn't find UUID for \"%s\"" +#: ../../common/config.py:408 ../../qt4/settingsdialog.py:815 +msgid "Copy links (dereference symbolic links)" msgstr "" -#: ../../common/config.py:1379 -msgid "Failed to remove udev rules" -msgstr "" +#: ../../common/config.py:409 ../../qt4/settingsdialog.py:669 +msgid "Expert Options" +msgstr "Opțiuni expert" -#: ../../common/config.py:1385 -msgid "Failed to create udev rules" +#: ../../common/config.py:411 +#, python-format +msgid "" +"Destination filesystem for '%(path)s is a sshfs mounted share. sshfs doesn't " +"support hard-links. Please use mode 'SSH' instead." msgstr "" -#: ../../common/config.py:1420 +#: ../../common/config.py:1407 msgid "" -"Can't find anacron.\n" -"Are you sure anacron is installed ?\n" -"If not you should disable daily anacron backups." +"Can't find crontab.\n" +"Are you sure cron is installed ?\n" +"If not you should disable all automatic backups." msgstr "" -#: ../../common/config.py:1439 -msgid "Please provide your sudo password to install the udev rule." +#: ../../common/config.py:1411 +msgid "Failed to write new crontab." msgstr "" -#: ../../common/config.py:1445 -msgid "Please provide your sudo password to remove unused udev rules." +#: ../../common/config.py:1505 +#, python-format +msgid "" +"Could not install Udev rule for profile %(profile_id)s. DBus Service " +"'%(dbus_interface)s' wasn't available" msgstr "" -#: ../../common/configfile.py:253 ../../common/configfile.py:315 +#: ../../common/config.py:1517 #, python-format -msgid "Profile \"%s\" already exists !" -msgstr "Profilul „%s” există deja !" +msgid "Schedule udev doesn't work with mode %s" +msgstr "" -#: ../../common/configfile.py:284 -msgid "You can't remove the last profile !" -msgstr "Nu puteți șterge ultimul profil !" +#: ../../common/config.py:1526 +#, python-format +msgid "Couldn't find UUID for \"%s\"" +msgstr "" -#: ../../common/encfstools.py:95 +#: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" @@ -271,38 +312,38 @@ "%(error)s" msgstr "" -#: ../../common/encfstools.py:105 +#: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "" -#: ../../common/encfstools.py:149 +#: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "" -#: ../../common/encfstools.py:153 +#: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" -#: ../../common/encfstools.py:154 +#: ../../common/encfstools.py:171 msgid "Cancel" msgstr "" -#: ../../common/encfstools.py:157 +#: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "" -#: ../../common/encfstools.py:161 +#: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "" -#: ../../common/encfstools.py:166 +#: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" -#: ../../common/encfstools.py:174 ../../common/sshtools.py:207 +#: ../../common/encfstools.py:196 ../../common/sshtools.py:262 #, python-format msgid "" "%(user)s is not member of group 'fuse'.\n" @@ -310,70 +351,73 @@ "Look at 'man backintime' for further instructions." msgstr "" -#: ../../common/encfstools.py:189 +#: ../../common/encfstools.py:211 msgid "" "encfs version 1.7.2 and before has a bug with option --reverse. Please " "update encfs" msgstr "" -#: ../../common/encfstools.py:453 ../../common/encfstools.py:480 -#: ../../common/snapshots.py:982 ../../common/snapshots.py:1288 -#: ../../kde4/app.py:82 ../../gnome/mainwindow.glade:43 +#: ../../common/encfstools.py:512 ../../common/snapshots.py:1131 +#: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "" -#: ../../common/mount.py:195 +#: ../../common/mount.py:204 #, python-format msgid "" "Hash collision occurred in hash_id %s. Incrementing global value " "hash_collision and try again." msgstr "" -#: ../../common/mount.py:246 +#: ../../common/mount.py:259 #, python-format msgid "mountpoint %s not empty." msgstr "" -#: ../../common/mount.py:286 +#: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" -#: ../../common/password.py:425 +#: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" -#: ../../common/snapshots.py:171 ../../gnome/app.py:1127 -#: ../../kde4/app.py:1014 +#: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Acum" -#: ../../common/snapshots.py:182 ../../gnome/gnometools.py:37 +#: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "CU ERORI !" -#: ../../common/snapshots.py:282 +#: ../../common/snapshots.py:344 msgid "" "### This log has been decoded with automatic search pattern\n" "### If some paths are not decoded you can manually decode them with:\n" msgstr "" -#: ../../common/snapshots.py:465 +#: ../../common/snapshots.py:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "" -#: ../../common/snapshots.py:564 +#: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "" -#: ../../common/snapshots.py:739 +#: ../../common/snapshots.py:752 ../../qt4/app.py:377 ../../qt4/app.py:675 +#: ../../qt4/app.py:692 ../../qt4/qt4systrayicon.py:65 +msgid "Done" +msgstr "Gata" + +#: ../../common/snapshots.py:860 msgid "" "Back In Time changed its backup format.\n" "\n" "Your old snapshots can be moved according to this new format. OK?" msgstr "" -#: ../../common/snapshots.py:749 +#: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" @@ -384,13 +428,13 @@ "(The program will still be able to discriminate between them)" msgstr "" -#: ../../common/snapshots.py:752 +#: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" msgstr "" -#: ../../common/snapshots.py:803 +#: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" @@ -403,7 +447,7 @@ "cannot continue taking snapshots" msgstr "" -#: ../../common/snapshots.py:812 +#: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" @@ -413,14 +457,14 @@ "if you are done restart Back In Time to proceed" msgstr "" -#: ../../common/snapshots.py:825 +#: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" msgstr "" -#: ../../common/snapshots.py:830 +#: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" @@ -432,172 +476,183 @@ "If you do not, you will be asked again next time you start Back In Time." msgstr "" -#: ../../common/snapshots.py:839 +#: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "" -#: ../../common/snapshots.py:841 +#: ../../common/snapshots.py:953 msgid "" "Back In Time still cannot continue taking new snapshots.\n" "Restart Back In Time to see the questions again" msgstr "" -#: ../../common/snapshots.py:913 +#: ../../common/snapshots.py:972 +msgid "Deferring backup while on battery" +msgstr "" + +#: ../../common/snapshots.py:1035 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it." msgstr "" -#: ../../common/snapshots.py:915 +#: ../../common/snapshots.py:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "" msgstr[1] "" -#: ../../common/snapshots.py:941 +#: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "" -#: ../../common/snapshots.py:950 +#: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "Se finalizează" -#: ../../common/snapshots.py:1088 +#: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "Nu se poate crea directorul: %s" -#: ../../common/snapshots.py:1107 +#: ../../common/snapshots.py:1217 msgid "..." msgstr "..." -#: ../../common/snapshots.py:1134 +#: ../../common/snapshots.py:1238 +#, python-format +msgid "Found leftover '%s' which can be continued." +msgstr "" + +#: ../../common/snapshots.py:1250 +#, python-format +msgid "Remove leftover '%s' folder from last run" +msgstr "" + +#: ../../common/snapshots.py:1263 #, python-format msgid "Can't remove folder: %s" msgstr "Nu se poate elimina directorul: %s" -#: ../../common/snapshots.py:1219 +#: ../../common/snapshots.py:1340 #, python-format msgid "Compare with snapshot %s" msgstr "" -#: ../../common/snapshots.py:1248 +#: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "" -#: ../../common/snapshots.py:1335 +#: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "" -#: ../../common/snapshots.py:1341 +#: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "" -#: ../../common/snapshots.py:1442 -#, python-format -msgid "Can't rename %(new_path)s to %(path)s" +#: ../../common/snapshots.py:1470 +msgid "Save permission over ssh failed. Retry normal method" msgstr "" -#: ../../common/snapshots.py:1562 -msgid "Remove old snapshots" +#: ../../common/snapshots.py:1521 +#, python-format +msgid "Can't rename %(new_path)s to %(path)s" msgstr "" -#: ../../common/snapshots.py:1586 ../../kde4/settingsdialog.py:501 -#: ../../gnome/settingsdialog.glade:1660 +#: ../../common/snapshots.py:1695 ../../common/snapshots.py:1728 +#: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "Eliminare inteligentă" -#: ../../common/snapshots.py:1591 +#: ../../common/snapshots.py:1704 +msgid "Remove old snapshots" +msgstr "" + +#: ../../common/snapshots.py:1733 msgid "Try to keep min free space" msgstr "" -#: ../../common/snapshots.py:1621 +#: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" -#: ../../common/sshtools.py:106 +#: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "" -#: ../../common/sshtools.py:113 +#: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "" -#: ../../common/sshtools.py:187 -#, python-format -msgid "" -"Failed to unlock SSH private key:\n" -"Error: %s" -msgstr "" - -#: ../../common/sshtools.py:194 +#: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" -#: ../../common/sshtools.py:199 +#: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" -#: ../../common/sshtools.py:217 +#: ../../common/sshtools.py:278 #, python-format msgid "" "Password-less authentication for %(user)s@%(host)s failed. Look at 'man " "backintime' for further instructions." msgstr "" -#: ../../common/sshtools.py:229 +#: ../../common/sshtools.py:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" -#: ../../common/sshtools.py:254 +#: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" -#: ../../common/sshtools.py:274 +#: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" -#: ../../common/sshtools.py:276 +#: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:278 +#: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:280 +#: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" -#: ../../common/sshtools.py:302 +#: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" -#: ../../common/sshtools.py:325 ../../common/sshtools.py:383 +#: ../../common/sshtools.py:423 ../../common/sshtools.py:553 #, python-format msgid "" "Remote host %(host)s doesn't support '%(command)s':\n" @@ -605,7 +660,7 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:387 +#: ../../common/sshtools.py:556 #, python-format msgid "" "Check commands on host %(host)s returned unknown error:\n" @@ -613,817 +668,937 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:400 +#: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "" -#: ../../gnome/app.py:185 ../../gnome/app.py:594 ../../gnome/app.py:608 -#: ../../kde4/app.py:299 ../../kde4/app.py:570 ../../kde4/app.py:587 -msgid "Done" -msgstr "Gata" +#: ../../qt4/app.py:81 +msgid "Refresh snapshots list" +msgstr "" + +#: ../../qt4/app.py:85 ../../qt4/app.py:890 +msgid "Snapshot Name" +msgstr "" + +#: ../../qt4/app.py:88 +msgid "Remove Snapshot" +msgstr "" -#: ../../gnome/app.py:189 ../../kde4/app.py:143 ../../kde4/app.py:159 -#: ../../gnome/mainwindow.glade:225 +#: ../../qt4/app.py:91 +msgid "View Snapshot Log" +msgstr "" + +#: ../../qt4/app.py:94 +msgid "View Last Log" +msgstr "" + +#: ../../qt4/app.py:99 ../../qt4/settingsdialog.py:51 +msgid "Settings" +msgstr "Setări" + +#: ../../qt4/app.py:104 +msgid "Shutdown" +msgstr "" + +#: ../../qt4/app.py:105 +msgid "Shutdown system after snapshot has finished." +msgstr "" + +#: ../../qt4/app.py:111 +msgid "Exit" +msgstr "Ieșire" + +#: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 msgid "Help" msgstr "Ajutor" -#: ../../gnome/app.py:191 ../../kde4/app.py:146 -#: ../../gnome/mainwindow.glade:223 +#: ../../qt4/app.py:122 +msgid "Config File Help" +msgstr "" + +#: ../../qt4/app.py:125 msgid "Website" msgstr "Pagină web" -#: ../../gnome/app.py:192 ../../kde4/app.py:148 +#: ../../qt4/app.py:127 ../../qt4/app.py:982 +msgid "Changelog" +msgstr "" + +#: ../../qt4/app.py:129 msgid "FAQ" msgstr "" -#: ../../gnome/app.py:193 ../../kde4/app.py:150 +#: ../../qt4/app.py:131 msgid "Ask a question" msgstr "" -#: ../../gnome/app.py:194 ../../kde4/app.py:152 +#: ../../qt4/app.py:133 msgid "Report a bug" msgstr "" -#: ../../gnome/app.py:196 ../../kde4/app.py:155 +#: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "Despre" -#: ../../gnome/app.py:202 ../../gnome/app.py:887 -#: ../../gnome/restoredialog.py:84 ../../gnome/snapshotsdialog.py:83 -#: ../../gnome/snapshotsdialog.py:244 ../../kde4/app.py:206 -#: ../../kde4/app.py:216 ../../kde4/restoredialog.py:68 -#: ../../kde4/snapshotsdialog.py:111 ../../kde4/snapshotsdialog.py:117 -#: ../../gnome/mainwindow.glade:350 ../../gnome/mainwindow.glade:352 -#: ../../gnome/snapshotsdialog.glade:169 ../../gnome/snapshotsdialog.glade:171 +#: ../../qt4/app.py:163 +msgid "Up" +msgstr "Sus" + +#: ../../qt4/app.py:174 ../../qt4/settingsdialog.py:1776 +msgid "Show hidden files" +msgstr "Arată fișierele ascunse" + +#: ../../qt4/app.py:184 ../../qt4/app.py:199 ../../qt4/app.py:233 +#: ../../qt4/restoredialog.py:62 ../../qt4/settingsdialog.py:1818 +#: ../../qt4/snapshotsdialog.py:134 ../../qt4/snapshotsdialog.py:139 msgid "Restore" msgstr "Restaurează" -#: ../../gnome/app.py:203 ../../gnome/app.py:888 ../../gnome/gnometools.py:67 -#: ../../gnome/snapshotsdialog.py:84 ../../gnome/snapshotsdialog.py:245 -#: ../../kde4/app.py:208 ../../kde4/restoredialog.py:42 -#: ../../kde4/snapshotsdialog.py:113 +#: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 +#: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "" -#: ../../gnome/app.py:205 ../../gnome/app.py:896 ../../gnome/app.py:1146 -#: ../../kde4/app.py:1041 -#, python-format -msgid "Restore '%s'" +#: ../../qt4/app.py:194 +msgid "Restore and delete new files" msgstr "" -#: ../../gnome/app.py:207 ../../gnome/app.py:897 ../../gnome/app.py:1147 -#: ../../kde4/app.py:1042 +#: ../../qt4/app.py:201 #, python-format -msgid "Restore '%s' to ..." +msgid "" +"Restore selected file or folder.\n" +"If this button is grayed out this is most likely because \"%(now)s\" is " +"selected in left hand snapshots list." +msgstr "" + +#: ../../qt4/app.py:206 ../../qt4/logviewdialog.py:67 +#: ../../qt4/qt4tools.py:160 ../../qt4/snapshotsdialog.py:96 +msgid "Snapshots" +msgstr "" + +#: ../../qt4/app.py:213 +msgid "Snapshot" msgstr "" -#: ../../gnome/app.py:226 ../../kde4/app.py:235 +#: ../../qt4/app.py:224 +msgid "View" +msgstr "" + +#: ../../qt4/app.py:277 msgid "Shortcuts" msgstr "Scurtături" -#: ../../gnome/app.py:249 -msgid "Name" -msgstr "Nume" - -#: ../../gnome/app.py:260 -msgid "Size" -msgstr "Mărime" - -#: ../../gnome/app.py:267 -msgid "Date" -msgstr "Dată" - -#: ../../gnome/app.py:286 ../../gnome/app.py:883 -#: ../../gnome/snapshotsdialog.py:116 ../../kde4/app.py:171 -#: ../../kde4/app.py:221 ../../kde4/snapshotsdialog.py:91 -#: ../../gnome/mainwindow.glade:366 ../../gnome/mainwindow.glade:368 -#: ../../gnome/snapshotsdialog.glade:8 -msgid "Snapshots" +#: ../../qt4/app.py:295 +msgid "" +"This folder doesn't exist\n" +"in the current selected snapshot!" +msgstr "" + +#: ../../qt4/app.py:359 +msgid "Add to Include" msgstr "" -#: ../../gnome/app.py:348 ../../kde4/app.py:362 +#: ../../qt4/app.py:360 +msgid "Add to Exclude" +msgstr "" + +#: ../../qt4/app.py:416 +#, python-format +msgid "" +"%(appName)s is not configured. Would you like to restore a previous " +"configuration?" +msgstr "" + +#: ../../qt4/app.py:440 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it and then press OK" msgstr "" -#: ../../gnome/app.py:611 ../../kde4/app.py:590 -msgid "Done, no backup needed" +#: ../../qt4/app.py:473 +msgid "" +"If you close this window Back In Time will not be able to shutdown your " +"system when the snapshot has finished.\n" +"Do you really want to close?" msgstr "" -#: ../../gnome/app.py:619 ../../kde4/app.py:598 +#: ../../qt4/app.py:667 ../../qt4/app.py:703 msgid "Working:" msgstr "Se lucrează:" -#: ../../gnome/app.py:623 ../../kde4/app.py:602 +#: ../../qt4/app.py:695 +msgid "Done, no backup needed" +msgstr "" + +#: ../../qt4/app.py:707 msgid "Error:" msgstr "" -#: ../../gnome/app.py:636 ../../kde4/app.py:649 +#: ../../qt4/app.py:726 ../../qt4/qt4systrayicon.py:153 +msgid "Sent:" +msgstr "" + +#: ../../qt4/app.py:727 ../../qt4/qt4systrayicon.py:154 +msgid "Speed:" +msgstr "" + +#: ../../qt4/app.py:728 ../../qt4/qt4systrayicon.py:155 +msgid "ETA:" +msgstr "" + +#: ../../qt4/app.py:777 msgid "Global" msgstr "Global" -#: ../../gnome/app.py:637 ../../kde4/app.py:650 +#: ../../qt4/app.py:778 msgid "Root" msgstr "Rădăcină" -#: ../../gnome/app.py:638 ../../kde4/app.py:651 +#: ../../qt4/app.py:779 msgid "Home" msgstr "Acasă" -#: ../../gnome/app.py:662 -msgid "Bookmarks" -msgstr "Semne de carte" - -#: ../../gnome/app.py:675 ../../kde4/app.py:662 +#: ../../qt4/app.py:794 msgid "Backup folders" msgstr "" -#: ../../gnome/app.py:701 ../../kde4/app.py:734 -msgid "Today" -msgstr "Astăzi" - -#: ../../gnome/app.py:705 ../../kde4/app.py:738 -msgid "Yesterday" -msgstr "Ieri" - -#: ../../gnome/app.py:709 ../../kde4/app.py:742 -msgid "This week" -msgstr "Săptămâna aceasta" - -#: ../../gnome/app.py:713 ../../kde4/app.py:746 -msgid "Last week" -msgstr "Săptămâna trecută" - -#: ../../gnome/app.py:764 ../../kde4/app.py:398 -msgid "" -"If you close this window Back In Time will not be able to shutdown your " -"system when the snapshot has finished.\n" -"Do you really want to close?" +#: ../../qt4/app.py:849 +msgid "This is NOT a snapshot but a live view of your local files" msgstr "" -#: ../../gnome/app.py:881 ../../gnome/snapshotsdialog.py:238 -msgid "Open" -msgstr "Deschide" - -#: ../../gnome/app.py:1056 ../../kde4/app.py:90 ../../kde4/app.py:805 -#: ../../gnome/mainwindow.glade:73 ../../gnome/mainwindow.glade:75 -msgid "Snapshot Name" +#: ../../qt4/app.py:860 ../../qt4/app.py:1476 +#, python-format +msgid "Last check %s" msgstr "" -#: ../../gnome/app.py:1075 +#: ../../qt4/app.py:928 #, python-format msgid "" "Are you sure you want to remove the snapshot:\n" -"%s" +"%s" msgstr "" -#: ../../gnome/app.py:1123 ../../kde4/app.py:1010 +#: ../../qt4/app.py:1004 #, python-format -msgid "Snapshot: %s" +msgid "" +"Backup local files before overwriting or\n" +"removing with trailing '%(suffix)s'." msgstr "" -#: ../../gnome/app.py:1124 ../../kde4/app.py:1011 -#, python-format -msgid "View the snapshot made at %s" +#: ../../qt4/app.py:1010 +msgid "" +"Are you sure you want to remove all newer files in your original folder?" msgstr "" -#: ../../gnome/app.py:1126 ../../kde4/app.py:1013 -msgid "View the current disk content" +#: ../../qt4/app.py:1014 +msgid "" +"WARNING: deleting files in filesystem root could break your whole system!!!" msgstr "" -#: ../../gnome/logviewdialog.py:106 ../../gnome/settingsdialog.py:414 -#: ../../kde4/logviewdialog.py:83 ../../kde4/settingsdialog.py:590 -msgid "All" +#: ../../qt4/app.py:1016 +msgid "Files to be restored:" msgstr "" -#: ../../gnome/logviewdialog.py:107 ../../gnome/settingsdialog.py:412 -#: ../../kde4/logviewdialog.py:84 ../../kde4/settingsdialog.py:588 -msgid "Errors" +#: ../../qt4/app.py:1031 +msgid "Do you really want to restore this files(s):" msgstr "" -#: ../../gnome/logviewdialog.py:112 ../../kde4/logviewdialog.py:89 -msgid "Changes" +#: ../../qt4/app.py:1226 +#, python-format +msgid "Snapshot: %s" msgstr "" -#: ../../gnome/logviewdialog.py:115 ../../kde4/logviewdialog.py:92 -msgid "Informations" +#: ../../qt4/app.py:1227 +#, python-format +msgid "View the snapshot made at %s" msgstr "" -#: ../../gnome/settingsdialog.py:235 ../../kde4/settingsdialog.py:387 -msgid "Include files and folders" +#: ../../qt4/app.py:1229 +msgid "View the current disk content" msgstr "" -#: ../../gnome/settingsdialog.py:264 -msgid "Exclude patterns, files or folders" +#: ../../qt4/app.py:1268 +#, python-format +msgid "Restore '%s'" msgstr "" -#: ../../gnome/settingsdialog.py:411 ../../kde4/settingsdialog.py:587 -msgid "None" +#: ../../qt4/app.py:1269 +#, python-format +msgid "Restore '%s' to ..." msgstr "" -#: ../../gnome/settingsdialog.py:413 ../../kde4/settingsdialog.py:589 -msgid "Changes & Errors" +#: ../../qt4/app.py:1270 +#, python-format +msgid "Restore '%s' and delete new files" msgstr "" -#: ../../gnome/settingsdialog.py:458 -msgid "Snapshots folder" +#: ../../qt4/app.py:1368 ../../qt4/app.py:1385 +msgid "Authors" msgstr "" -#: ../../gnome/settingsdialog.py:466 ../../kde4/settingsdialog.py:1314 -msgid "Are you sure you want to change snapshots folder ?" +#: ../../qt4/app.py:1369 ../../qt4/app.py:1388 +msgid "Translations" msgstr "" -#: ../../gnome/settingsdialog.py:901 ../../kde4/settingsdialog.py:914 -msgid "" -"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " -"*/3 for periodic backups every 3 hours" +#: ../../qt4/app.py:1370 ../../qt4/app.py:1391 +msgid "License" msgstr "" -#: ../../gnome/settingsdialog.py:1141 ../../kde4/settingsdialog.py:653 -msgid "New profile" -msgstr "Profil nou" - -#: ../../gnome/settingsdialog.py:1155 ../../kde4/settingsdialog.py:669 -msgid "Rename profile" -msgstr "Redenumește profil" - -#: ../../gnome/settingsdialog.py:1167 ../../kde4/settingsdialog.py:683 -#, python-format -msgid "Are you sure you want to delete the profile \"%s\" ?" -msgstr "Sigur doriți să ștergeți profilul „%s” ?" - -#: ../../gnome/settingsdialog.py:1173 ../../kde4/settingsdialog.py:1292 -msgid "Include folder" -msgstr "Include director" - -#: ../../gnome/settingsdialog.py:1193 ../../kde4/settingsdialog.py:1278 -msgid "Include file" +#: ../../qt4/logviewdialog.py:49 +msgid "Last Log View" msgstr "" -#: ../../gnome/settingsdialog.py:1235 ../../kde4/settingsdialog.py:1241 -msgid "Exclude pattern" +#: ../../qt4/logviewdialog.py:51 +msgid "Snapshot Log View" msgstr "" -#: ../../gnome/settingsdialog.py:1240 ../../kde4/settingsdialog.py:1251 -msgid "Exclude patterns can't contain ':' char !" -msgstr "" - -#: ../../gnome/settingsdialog.py:1246 ../../kde4/settingsdialog.py:1257 -msgid "Exclude file" -msgstr "Exclude fișier" - -#: ../../gnome/settingsdialog.py:1257 ../../kde4/settingsdialog.py:1261 -msgid "Exclude folder" -msgstr "Exclude director" - -#: ../../gnome/snapshotsdialog.py:240 -msgid "Jump to" -msgstr "" - -#: ../../gnome/snapshotsdialog.py:248 ../../kde4/snapshotsdialog.py:164 -msgid "Diff" -msgstr "Diff" +#: ../../qt4/logviewdialog.py:59 ../../qt4/settingsdialog.py:59 +#: ../../qt4/settingsdialog.py:274 ../../qt4/settingsdialog.py:1899 +msgid "Profile:" +msgstr "Profil:" -#: ../../gnome/snapshotsdialog.py:277 ../../kde4/snapshotsdialog.py:339 -msgid "You can't compare a snapshot to itself" +#: ../../qt4/logviewdialog.py:81 +msgid "Filter:" msgstr "" -#: ../../gnome/snapshotsdialog.py:284 ../../kde4/snapshotsdialog.py:346 -#, python-format -msgid "Command not found: %s" -msgstr "Comandă negăsită: %s" - -#: ../../gnome/snapshotsdialog.py:307 ../../kde4/snapshotsdialog.py:367 -#, python-format -msgid "" -"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" +#: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 +msgid "All" msgstr "" -#: ../../gnome/snapshotsdialog.py:310 ../../kde4/snapshotsdialog.py:370 -#, python-format -msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 +#: ../../qt4/settingsdialog.py:657 +msgid "Errors" msgstr "" -#: ../../gnome/snapshotsdialog.py:312 ../../kde4/snapshotsdialog.py:372 -msgid "WARNING: This can not be revoked!" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 +msgid "Changes" msgstr "" -#: ../../gnome/snapshotsdialog.py:317 ../../kde4/snapshotsdialog.py:377 -#, python-format -msgid "Exclude \"%s\" from future snapshots?" +#: ../../qt4/logviewdialog.py:92 +msgid "Informations" msgstr "" -#: ../../kde4/app.py:86 ../../gnome/mainwindow.glade:58 -#: ../../gnome/mainwindow.glade:60 -msgid "Refresh snapshots list" +#: ../../qt4/logviewdialog.py:101 +msgid "[E] Error, [I] Information, [C] Change" msgstr "" -#: ../../kde4/app.py:94 ../../gnome/mainwindow.glade:88 -#: ../../gnome/mainwindow.glade:90 -msgid "Remove Snapshot" +#: ../../qt4/logviewdialog.py:104 +msgid "decode paths" msgstr "" -#: ../../kde4/app.py:98 ../../gnome/mainwindow.glade:105 -msgid "View Snapshot Log" +#: ../../qt4/messagebox.py:56 +msgid "Error" msgstr "" -#: ../../kde4/app.py:102 ../../gnome/mainwindow.glade:121 -msgid "View Last Log" +#: ../../qt4/messagebox.py:62 ../../qt4/messagebox.py:68 +msgid "Question" msgstr "" -#: ../../kde4/app.py:108 ../../kde4/settingsdialog.py:69 -#: ../../gnome/mainwindow.glade:144 ../../gnome/mainwindow.glade:146 -#: ../../gnome/settingsdialog.glade:7 -msgid "Settings" -msgstr "Setări" - -#: ../../kde4/app.py:124 ../../gnome/mainwindow.glade:169 -msgid "Shutdown system after snapshot has finished." +#: ../../qt4/qt4systrayicon.py:69 +msgid "Start BackInTime" msgstr "" -#: ../../kde4/app.py:131 ../../gnome/mainwindow.glade:184 -#: ../../gnome/mainwindow.glade:186 -msgid "Exit" -msgstr "Ieșire" - -#: ../../kde4/app.py:186 ../../gnome/mainwindow.glade:289 -msgid "Up" -msgstr "Sus" +#: ../../qt4/qt4systrayicon.py:124 +msgid "Working..." +msgstr "Se lucrează..." -#: ../../kde4/app.py:199 ../../gnome/mainwindow.glade:325 -msgid "Show hidden files" -msgstr "Arată fișierele ascunse" +#: ../../qt4/qt4tools.py:178 +msgid "Today" +msgstr "Astăzi" -#: ../../kde4/app.py:244 -msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" -msgstr "" +#: ../../qt4/qt4tools.py:183 +msgid "Yesterday" +msgstr "Ieri" -#: ../../kde4/app.py:839 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" -msgstr "" +#: ../../qt4/qt4tools.py:188 +msgid "This week" +msgstr "Săptămâna aceasta" -#: ../../kde4/app.py:1140 ../../kde4/kde4systrayicon.py:117 -msgid "Working..." -msgstr "Se lucrează..." +#: ../../qt4/qt4tools.py:193 +msgid "Last week" +msgstr "Săptămâna trecută" -#: ../../kde4/logviewdialog.py:55 -msgid "Error Log View" +#: ../../qt4/restoredialog.py:75 +msgid "Show full Log" msgstr "" -#: ../../kde4/logviewdialog.py:65 ../../kde4/settingsdialog.py:79 -#: ../../kde4/settingsdialog.py:293 ../../gnome/logviewdialog.glade:73 -#: ../../gnome/settingsdialog.glade:72 -msgid "Profile:" -msgstr "Profil:" +#: ../../qt4/settingsdialog.py:68 +msgid "Edit" +msgstr "Modifică" -#: ../../kde4/logviewdialog.py:77 ../../gnome/logviewdialog.glade:110 -msgid "Filter:" +#: ../../qt4/settingsdialog.py:73 +msgid "Modify for Full System Backup" msgstr "" -#: ../../kde4/logviewdialog.py:100 ../../gnome/logviewdialog.glade:169 -msgid "[E] Error, [I] Information, [C] Change" +#: ../../qt4/settingsdialog.py:77 ../../qt4/settingsdialog.py:451 +msgid "Add" msgstr "" -#: ../../kde4/logviewdialog.py:103 ../../gnome/logviewdialog.glade:195 -msgid "decode paths" +#: ../../qt4/settingsdialog.py:81 ../../qt4/settingsdialog.py:408 +#: ../../qt4/settingsdialog.py:467 +msgid "Remove" msgstr "" -#: ../../kde4/settingsdialog.py:88 -msgid "Edit" -msgstr "Modifică" - -#: ../../kde4/settingsdialog.py:106 ../../gnome/settingsdialog.glade:1207 +#: ../../qt4/settingsdialog.py:96 msgid "General" msgstr "" -#: ../../kde4/settingsdialog.py:114 ../../gnome/settingsdialog.glade:199 +#: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "" -#: ../../kde4/settingsdialog.py:127 ../../kde4/settingsdialog.py:1311 +#: ../../qt4/settingsdialog.py:119 +#, python-format +msgid "" +"Warning: %(app)s uses EncFS for encryption. A recent security audit " +"revealed several possible attack vectors for this. Please take a look at 'A " +"NOTE ON SECURITY' in 'man backintime'." +msgstr "" + +#: ../../qt4/settingsdialog.py:129 ../../qt4/settingsdialog.py:1568 msgid "Where to save snapshots" msgstr "" -#: ../../kde4/settingsdialog.py:146 +#: ../../qt4/settingsdialog.py:145 +msgid "Folder" +msgstr "" + +#: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" -#: ../../kde4/settingsdialog.py:158 ../../kde4/settingsdialog.py:283 -#: ../../gnome/settingsdialog.glade:323 ../../gnome/settingsdialog.glade:583 -#: ../../gnome/settingsdialog.glade:874 +#: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "" -#: ../../kde4/settingsdialog.py:163 ../../gnome/settingsdialog.glade:350 -#: ../../gnome/settingsdialog.glade:610 +#: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "" -#: ../../kde4/settingsdialog.py:168 ../../kde4/settingsdialog.py:288 -#: ../../gnome/settingsdialog.glade:377 ../../gnome/settingsdialog.glade:637 -#: ../../gnome/settingsdialog.glade:902 +#: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "" -#: ../../kde4/settingsdialog.py:173 ../../gnome/settingsdialog.glade:416 +#: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" -#: ../../kde4/settingsdialog.py:178 ../../gnome/settingsdialog.glade:459 +#: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" -#: ../../kde4/settingsdialog.py:184 +#: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "" -#: ../../kde4/settingsdialog.py:228 ../../kde4/settingsdialog.py:237 -#: ../../kde4/settingsdialog.py:243 ../../gnome/settingsdialog.glade:703 -#: ../../gnome/settingsdialog.glade:743 +#: ../../qt4/settingsdialog.py:201 +msgid "Key File" +msgstr "" + +#: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 +#: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "" -#: ../../kde4/settingsdialog.py:249 ../../gnome/settingsdialog.glade:775 +#: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" -#: ../../kde4/settingsdialog.py:252 ../../gnome/settingsdialog.glade:792 +#: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" -#: ../../kde4/settingsdialog.py:264 ../../gnome/settingsdialog.glade:968 +#: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "" -#: ../../kde4/settingsdialog.py:276 ../../gnome/settingsdialog.glade:848 -msgid "Auto Host / User / Profile Id" +#: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 +msgid "Full snapshot path: " msgstr "" -#: ../../kde4/settingsdialog.py:301 +#: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "Orar" -#: ../../kde4/settingsdialog.py:311 ../../gnome/settingsdialog.glade:1092 +#: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "" -#: ../../kde4/settingsdialog.py:322 ../../gnome/settingsdialog.glade:1079 +#: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "" -#: ../../kde4/settingsdialog.py:333 ../../gnome/settingsdialog.glade:1066 +#: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "" -#: ../../kde4/settingsdialog.py:344 ../../gnome/settingsdialog.glade:1053 +#: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "" -#: ../../kde4/settingsdialog.py:353 ../../gnome/settingsdialog.glade:1014 +#: ../../qt4/settingsdialog.py:339 msgid "" -"Run Back In Time periodically with anacron. This is useful if the computer " -"is not running regular." +"Run Back In Time repeatedly. This is useful if the computer is not running " +"regular." msgstr "" -#: ../../kde4/settingsdialog.py:357 ../../gnome/settingsdialog.glade:1040 -msgid "Frequency in days:" +#: ../../qt4/settingsdialog.py:344 +msgid "Every:" msgstr "" -#: ../../kde4/settingsdialog.py:368 ../../gnome/settingsdialog.glade:1026 +#: ../../qt4/settingsdialog.py:362 msgid "" "Run Back In Time as soon as the drive is connected (only once every X " "days).\n" "You will be prompted for your sudo password." msgstr "" -#: ../../kde4/settingsdialog.py:379 ../../gnome/settingsdialog.glade:1310 +#: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Include" -#: ../../kde4/settingsdialog.py:403 ../../kde4/settingsdialog.py:445 -#: ../../gnome/settingsdialog.glade:1411 +#: ../../qt4/settingsdialog.py:381 +msgid "Include files and folders" +msgstr "" + +#: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "Adaugă fișier" -#: ../../kde4/settingsdialog.py:408 ../../kde4/settingsdialog.py:450 -#: ../../gnome/settingsdialog.glade:1427 +#: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Adaugă director" -#: ../../kde4/settingsdialog.py:418 ../../gnome/settingsdialog.glade:1474 +#: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Exclude" -#: ../../kde4/settingsdialog.py:421 ../../gnome/settingsdialog.glade:1328 +#: ../../qt4/settingsdialog.py:417 msgid "" "Warning: Wildcards ('foo*', '[fF]oo', 'fo?') will be ignored with " "mode 'SSH encrypted'.\n" "Only separate asterisk are allowed ('foo/*', 'foo/**/bar')" msgstr "" -#: ../../kde4/settingsdialog.py:430 +#: ../../qt4/settingsdialog.py:425 +msgid "Exclude patterns, files or folders" +msgstr "" + +#: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "" -#: ../../kde4/settingsdialog.py:460 ../../gnome/settingsdialog.glade:1905 +#: ../../qt4/settingsdialog.py:463 +msgid "Add default" +msgstr "" + +#: ../../qt4/settingsdialog.py:474 +msgid "Exclude files bigger than: " +msgstr "" + +#: ../../qt4/settingsdialog.py:475 +#, python-format +msgid "" +"Exclude files bigger than value in %(prefix)s.\n" +"With 'Full rsync mode' disabled this will only affect new files\n" +"because for rsync this is a transfer option, not an exclude option.\n" +"So big files that has been backed up before will remain in snapshots\n" +"even if they had changed." +msgstr "" + +#: ../../qt4/settingsdialog.py:493 msgid "Auto-remove" msgstr "" -#: ../../kde4/settingsdialog.py:464 ../../gnome/settingsdialog.glade:1608 +#: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "Mai vechi de:" -#: ../../kde4/settingsdialog.py:478 ../../gnome/settingsdialog.glade:1624 +#: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "Dacă spațiul disponibil este mai mic de:" -#: ../../kde4/settingsdialog.py:490 ../../gnome/settingsdialog.glade:1642 +#: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" -#: ../../kde4/settingsdialog.py:514 ../../gnome/settingsdialog.glade:1697 +#: ../../qt4/settingsdialog.py:551 +msgid "Run in background on remote Host." +msgstr "" + +#: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "" -#: ../../kde4/settingsdialog.py:517 ../../kde4/settingsdialog.py:522 -#: ../../gnome/settingsdialog.glade:1705 ../../gnome/settingsdialog.glade:1729 +#: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "" -#: ../../kde4/settingsdialog.py:519 ../../gnome/settingsdialog.glade:1717 +#: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "" -#: ../../kde4/settingsdialog.py:524 ../../gnome/settingsdialog.glade:1743 +#: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "" -#: ../../kde4/settingsdialog.py:527 +#: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "" -#: ../../kde4/settingsdialog.py:529 ../../gnome/settingsdialog.glade:1769 +#: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "" -#: ../../kde4/settingsdialog.py:532 ../../gnome/settingsdialog.glade:1781 +#: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "" -#: ../../kde4/settingsdialog.py:534 ../../gnome/settingsdialog.glade:1795 +#: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "" -#: ../../kde4/settingsdialog.py:537 ../../gnome/settingsdialog.glade:1496 +#: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "" -#: ../../kde4/settingsdialog.py:546 ../../gnome/settingsdialog.glade:2104 +#: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Opțiuni" -#: ../../kde4/settingsdialog.py:549 ../../gnome/settingsdialog.glade:1920 +#: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Activează notificările" -#: ../../kde4/settingsdialog.py:552 ../../gnome/settingsdialog.glade:1937 +#: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "" -#: ../../kde4/settingsdialog.py:555 +#: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" msgstr "" -#: ../../kde4/settingsdialog.py:558 ../../gnome/settingsdialog.glade:1955 -msgid "Backup files on restore" +#: ../../qt4/settingsdialog.py:611 +msgid "Run only one snapshot at a time" +msgstr "" + +#: ../../qt4/settingsdialog.py:612 +msgid "" +"Other snapshots will be blocked until the current snapshot is done.\n" +"This is a global option. So it will effect all profiles for this user.\n" +"But you need to activate this for all other users, too." +msgstr "" + +#: ../../qt4/settingsdialog.py:617 +msgid "Backup replaced files on restore" msgstr "" -#: ../../kde4/settingsdialog.py:561 ../../gnome/settingsdialog.glade:1972 +#: ../../qt4/settingsdialog.py:618 +#, python-format +msgid "" +"Newer versions of files will be renamed with trailing '%(suffix)s' before " +"restoring.\n" +"If you don't need them anymore you can remove them with '%(cmd)s'" +msgstr "" + +#: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "" -#: ../../kde4/settingsdialog.py:564 ../../gnome/settingsdialog.glade:1989 +#: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "" -#: ../../kde4/settingsdialog.py:567 ../../gnome/settingsdialog.glade:2006 +#: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "" -#: ../../kde4/settingsdialog.py:568 ../../gnome/settingsdialog.glade:2032 +#: ../../qt4/settingsdialog.py:634 msgid "" -"- snapshots are no read-only\n" -"- destination file-system must support all linux attributes (dates, rights, " +"- snapshots are not read-only\n" +"- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" -#: ../../kde4/settingsdialog.py:575 ../../gnome/settingsdialog.glade:2045 +#: ../../qt4/settingsdialog.py:641 +msgid "Take a new snapshot regardless of there were changes or not." +msgstr "" + +#: ../../qt4/settingsdialog.py:644 msgid "Check for changes (don't take a new snapshot if nothing changed)" msgstr "" -#: ../../kde4/settingsdialog.py:582 +#: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "" -#: ../../kde4/settingsdialog.py:597 ../../gnome/settingsdialog.glade:2366 -msgid "Expert Options" -msgstr "Opțiuni expert" +#: ../../qt4/settingsdialog.py:656 +msgid "None" +msgstr "" -#: ../../kde4/settingsdialog.py:600 +#: ../../qt4/settingsdialog.py:658 +msgid "Changes & Errors" +msgstr "" + +#: ../../qt4/settingsdialog.py:674 msgid "Change these options only if you really know what you are doing !" msgstr "" -#: ../../kde4/settingsdialog.py:608 ../../gnome/settingsdialog.glade:2133 -msgid "Run 'nice' as cron job (default: enabled)" +#: ../../qt4/settingsdialog.py:678 +msgid "Run 'nice':" +msgstr "" + +#: ../../qt4/settingsdialog.py:684 ../../qt4/settingsdialog.py:696 +msgid "as cron job" msgstr "" -#: ../../kde4/settingsdialog.py:611 ../../gnome/settingsdialog.glade:2150 -msgid "Run 'ionice' as cron job (default: enabled)" +#: ../../qt4/settingsdialog.py:687 ../../qt4/settingsdialog.py:702 +#: ../../qt4/settingsdialog.py:716 +msgid "on remote host" msgstr "" -#: ../../kde4/settingsdialog.py:614 ../../gnome/settingsdialog.glade:2167 -msgid "Run 'ionice' when taking a manual snapshot (default: disabled)" +#: ../../qt4/settingsdialog.py:690 +msgid "Run 'ionice':" msgstr "" -#: ../../kde4/settingsdialog.py:617 ../../gnome/settingsdialog.glade:2184 -msgid "Run 'nice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:699 +msgid "when taking a manual snapshot" msgstr "" -#: ../../kde4/settingsdialog.py:620 ../../gnome/settingsdialog.glade:2201 -msgid "Run 'ionice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:706 +msgid "Run 'rsync' with 'nocache':" msgstr "" -#: ../../kde4/settingsdialog.py:626 ../../gnome/settingsdialog.glade:2224 +#: ../../qt4/settingsdialog.py:712 +msgid "on local machine" +msgstr "" + +#: ../../qt4/settingsdialog.py:719 +msgid "Redirect stdout to /dev/null in cronjobs." +msgstr "" + +#: ../../qt4/settingsdialog.py:725 +msgid "Redirect stderr to /dev/null in cronjobs." +msgstr "" + +#: ../../qt4/settingsdialog.py:734 msgid "Limit rsync bandwidth usage: " msgstr "" -#: ../../kde4/settingsdialog.py:629 ../../gnome/settingsdialog.glade:2259 +#: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" -#: ../../kde4/settingsdialog.py:634 ../../gnome/settingsdialog.glade:2280 +#: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "" -#: ../../kde4/settingsdialog.py:637 ../../gnome/settingsdialog.glade:2297 +#: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "" -#: ../../kde4/settingsdialog.py:640 ../../gnome/settingsdialog.glade:2314 +#: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute links)" msgstr "" -#: ../../kde4/settingsdialog.py:643 ../../gnome/settingsdialog.glade:2331 -msgid "Copy links (dereference symbolic links)" +#: ../../qt4/settingsdialog.py:834 +msgid "Paste additional options to rsync" msgstr "" -#: ../../kde4/snapshotsdialog.py:46 ../../kde4/snapshotsdialog.py:173 -#: ../../gnome/snapshotsdialog.glade:385 -msgid "Diff Options" +#: ../../qt4/settingsdialog.py:837 +msgid "" +"Options must be quoted e.g. --exclude-from=\"/path/to/my exclude file\"." msgstr "" -#: ../../kde4/snapshotsdialog.py:56 ../../gnome/snapshotsdialog.glade:314 -msgid "Command:" -msgstr "Comandă:" - -#: ../../kde4/snapshotsdialog.py:60 ../../gnome/snapshotsdialog.glade:322 -msgid "Parameters:" -msgstr "Parametri:" +#: ../../qt4/settingsdialog.py:847 +msgid "Add prefix to SSH commands" +msgstr "" -#: ../../kde4/snapshotsdialog.py:64 ../../gnome/snapshotsdialog.glade:334 -msgid "Use %1 and %2 for path parameters" +#: ../../qt4/settingsdialog.py:850 +#, python-format +msgid "" +"Prefix to run before every command on remote host.\n" +"Variables need to be escaped with \\$FOO.\n" +"This doesn't touch rsync. So to add a prefix\n" +"for rsync use \"%(cb_rsync_options)s\" with\n" +"%(rsync_options_value)s\n" +"\n" +"%(default)s: %(def_value)s" msgstr "" -#: ../../kde4/snapshotsdialog.py:123 ../../gnome/snapshotsdialog.glade:184 -#: ../../gnome/snapshotsdialog.glade:186 -msgid "Delete" +#: ../../qt4/settingsdialog.py:858 ../../qt4/settingsdialog.py:1691 +msgid "default" msgstr "" -#: ../../kde4/snapshotsdialog.py:128 ../../gnome/snapshotsdialog.glade:199 -#: ../../gnome/snapshotsdialog.glade:201 -msgid "Select All" +#: ../../qt4/settingsdialog.py:875 +msgid "Restore Config" msgstr "" -#: ../../kde4/snapshotsdialog.py:132 ../../gnome/snapshotsdialog.glade:88 -msgid "List only different snapshots" +#: ../../qt4/settingsdialog.py:891 +msgid "" +"Full system backup can only create a snapshot to be restored to the same " +"physical disk(s) with the same disk partitioning as from the source; " +"restoring to new physical disks or the same disks with different " +"partitioning will yield a potentially broken and unusable system.\n" +"\n" +"Full system backup will override some settings that may have been " +"customized. Continue?" msgstr "" -#: ../../kde4/snapshotsdialog.py:139 ../../gnome/snapshotsdialog.glade:110 -msgid "List only equal snapshots to: " +#: ../../qt4/settingsdialog.py:922 +msgid "New profile" +msgstr "Profil nou" + +#: ../../qt4/settingsdialog.py:938 +msgid "Rename profile" +msgstr "Redenumește profil" + +#: ../../qt4/settingsdialog.py:952 +#, python-format +msgid "Are you sure you want to delete the profile \"%s\" ?" +msgstr "Sigur doriți să ștergeți profilul „%s” ?" + +#: ../../qt4/settingsdialog.py:1191 +msgid "" +"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " +"*/3 for periodic backups every 3 hours" msgstr "" -#: ../../kde4/snapshotsdialog.py:149 ../../gnome/snapshotsdialog.glade:146 -msgid "Deep check (more accurate, but slow)" +#: ../../qt4/settingsdialog.py:1489 +msgid "Exclude pattern" msgstr "" -#: ../../kde4/snapshotsdialog.py:174 -msgid "Go To" -msgstr "Mergi la" +#: ../../qt4/settingsdialog.py:1502 +msgid "Exclude file" +msgstr "Exclude fișier" -#: ../../gnome/logviewdialog.glade:9 -msgid "Log View" +#: ../../qt4/settingsdialog.py:1506 +msgid "Exclude folder" +msgstr "Exclude director" + +#: ../../qt4/settingsdialog.py:1525 +msgid "Include file" msgstr "" -#: ../../gnome/logviewdialog.glade:179 -msgid "scroll down automatic" +#: ../../qt4/settingsdialog.py:1533 ../../qt4/settingsdialog.py:1553 +#, python-format +msgid "" +"\"%s\" is a symlink. The linked target will not be backed up until you " +"include it, too.\n" +"Would you like to include the symlinks target instead?" msgstr "" -#: ../../gnome/mainwindow.glade:7 -msgid "Back In Time" +#: ../../qt4/settingsdialog.py:1545 +msgid "Include folder" +msgstr "Include director" + +#: ../../qt4/settingsdialog.py:1572 +msgid "Are you sure you want to change snapshots folder ?" msgstr "" -#: ../../gnome/mainwindow.glade:45 -msgid "Backup Now" +#: ../../qt4/settingsdialog.py:1688 +msgid "enabled" msgstr "" -#: ../../gnome/mainwindow.glade:171 -msgid "Shutdown" +#: ../../qt4/settingsdialog.py:1690 +msgid "disabled" msgstr "" -#: ../../gnome/mainwindow.glade:287 -msgid "Parent folder" -msgstr "Director părinte" +#: ../../qt4/settingsdialog.py:1715 +msgid "Restore Settings" +msgstr "" -#: ../../gnome/mainwindow.glade:327 -msgid "Hidden files" -msgstr "Fișiere ascunse" +#: ../../qt4/settingsdialog.py:1732 +msgid " and add your user to group 'fuse'" +msgstr "" -#: ../../gnome/mainwindow.glade:451 +#: ../../qt4/settingsdialog.py:1736 +#, python-format msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +"Please navigate to the snapshot from which you want to restore %(appName)s's " +"configuration. The path may look like: \n" +"%(samplePath)s\n" +"\n" +"If your snapshots are on a remote drive or if they are encrypted you need to " +"manually mount them first. If you use Mode SSH you also may need to set up " +"public key login to the remote host%(addFuse)s.\n" +"Take a look at 'man backintime'." msgstr "" -#: ../../gnome/settingsdialog.glade:287 -msgid "Where to save snapshots" +#: ../../qt4/settingsdialog.py:1794 ../../qt4/settingsdialog.py:1854 +msgid "No config found" msgstr "" -#: ../../gnome/settingsdialog.glade:483 -msgid "Private key:" +#: ../../qt4/snapshotsdialog.py:49 ../../qt4/snapshotsdialog.py:173 +msgid "Diff Options" msgstr "" -#: ../../gnome/settingsdialog.glade:534 -msgid "Advanced SSH Settings" -msgstr "" +#: ../../qt4/snapshotsdialog.py:56 +msgid "Command:" +msgstr "Comandă:" -#: ../../gnome/settingsdialog.glade:552 -msgid "SSH Settings" -msgstr "" +#: ../../qt4/snapshotsdialog.py:60 +msgid "Parameters:" +msgstr "Parametri:" -#: ../../gnome/settingsdialog.glade:815 -msgid "Password" +#: ../../qt4/snapshotsdialog.py:64 +msgid "Use %1 and %2 for path parameters" msgstr "" -#: ../../gnome/settingsdialog.glade:930 -msgid "Profile Id:" +#: ../../qt4/snapshotsdialog.py:106 +msgid "List only different snapshots" msgstr "" -#: ../../gnome/settingsdialog.glade:1115 -msgid "" -"hours seperate by comma ( e.g. 8,12,18,23) or */3 for periodic backups every " -"3 hours (cron style)" +#: ../../qt4/snapshotsdialog.py:113 +msgid "List only equal snapshots to: " msgstr "" -#: ../../gnome/settingsdialog.glade:1163 -msgid "Schedule" -msgstr "Orar" - -#: ../../gnome/settingsdialog.glade:1363 -msgid "Highly recommended:" +#: ../../qt4/snapshotsdialog.py:123 +msgid "Deep check (more accurate, but slow)" msgstr "" -#: ../../gnome/settingsdialog.glade:1377 -msgid "label" +#: ../../qt4/snapshotsdialog.py:144 +msgid "Delete" msgstr "" -#: ../../gnome/settingsdialog.glade:1755 -msgid "week(s)" +#: ../../qt4/snapshotsdialog.py:148 +msgid "Select All" msgstr "" -#: ../../gnome/settingsdialog.glade:2069 -msgid "Log level:" +#: ../../qt4/snapshotsdialog.py:161 +msgid "Diff" +msgstr "Diff" + +#: ../../qt4/snapshotsdialog.py:172 +msgid "Go To" +msgstr "Mergi la" + +#: ../../qt4/snapshotsdialog.py:326 +msgid "You can't compare a snapshot to itself" msgstr "" -#: ../../gnome/settingsdialog.glade:2121 +#: ../../qt4/snapshotsdialog.py:333 +#, python-format +msgid "Command not found: %s" +msgstr "Comandă negăsită: %s" + +#: ../../qt4/snapshotsdialog.py:354 +#, python-format msgid "" -"Change these options only if you really know what you are doing !" +"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" msgstr "" -#: ../../gnome/snapshotsdialog.glade:263 -msgid "Diff with" +#: ../../qt4/snapshotsdialog.py:357 +#, python-format +msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" msgstr "" -#: ../../gnome/textinputdialog.glade:7 -msgid "Pattern" -msgstr "Șablon" +#: ../../qt4/snapshotsdialog.py:359 +msgid "WARNING: This can not be revoked!" +msgstr "" -#: ../../gnome/textinputdialog.glade:70 -msgid "Text" +#: ../../qt4/snapshotsdialog.py:374 +#, python-format +msgid "Exclude \"%s\" from future snapshots?" msgstr "" diff -Nru backintime-1.0.36/common/po/ru.po backintime-1.1.12/common/po/ru.po --- backintime-1.0.36/common/po/ru.po 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/po/ru.po 2016-01-11 18:07:58.000000000 +0000 @@ -7,8 +7,8 @@ msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2013-11-09 22:34+0100\n" -"PO-Revision-Date: 2014-03-02 09:15+0000\n" +"POT-Creation-Date: 2015-12-19 00:47+0100\n" +"PO-Revision-Date: 2015-09-09 21:51+0000\n" "Last-Translator: vti \n" "Language-Team: Russian \n" "MIME-Version: 1.0\n" @@ -16,219 +16,250 @@ "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Launchpad-Export-Date: 2014-08-06 10:19+0000\n" -"X-Generator: Launchpad (build 17147)\n" +"X-Launchpad-Export-Date: 2016-01-11 17:52+0000\n" +"X-Generator: Launchpad (build 17881)\n" -#: ../../gnome/app.py:1126 ../../kde4/app.py:1013 +#: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "Просмотр содержимого текущего диска" -#: ../../gnome/settingsdialog.py:1173 ../../kde4/settingsdialog.py:1292 -msgid "Include folder" -msgstr "Включить каталог" - -#: ../../gnome/settingsdialog.py:1257 ../../kde4/settingsdialog.py:1261 -msgid "Exclude folder" -msgstr "Исключить каталог" - -#: ../../kde4/settingsdialog.py:408 ../../kde4/settingsdialog.py:450 -#: ../../gnome/settingsdialog.glade:1427 +#: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Добавить каталог" -#: ../../kde4/settingsdialog.py:460 ../../gnome/settingsdialog.glade:1905 +#: ../../qt4/settingsdialog.py:493 msgid "Auto-remove" msgstr "Автоматическое удаление" -#: ../../common/config.py:72 +#: ../../qt4/settingsdialog.py:1506 +msgid "Exclude folder" +msgstr "Исключить каталог" + +#: ../../qt4/settingsdialog.py:1545 +msgid "Include folder" +msgstr "Включить каталог" + +#: ../../common/configfile.py:60 +#, python-format +msgid "Failed to save config: %s" +msgstr "" + +#: ../../common/configfile.py:78 +#, python-format +msgid "Failed to load config: %s" +msgstr "" + +#: ../../common/configfile.py:352 ../../common/configfile.py:414 +#, python-format +msgid "Profile \"%s\" already exists !" +msgstr "Профиль \"%s\" уже существует!" + +#: ../../common/configfile.py:383 +msgid "You can't remove the last profile !" +msgstr "Невозможно удалить последний профиль!" + +#: ../../common/config.py:76 msgid "Disabled" msgstr "Отключён" -#: ../../common/config.py:73 +#: ../../common/config.py:77 msgid "At every boot/reboot" msgstr "При каждой загрузке системы" -#: ../../common/config.py:74 +#: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Каждые 5 минут" -#: ../../common/config.py:75 +#: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Каждые 10 минут" -#: ../../common/config.py:76 +#: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "Каждые 30 минут" -#: ../../common/config.py:77 +#: ../../common/config.py:81 msgid "Every hour" msgstr "Каждый час" -#: ../../common/config.py:78 +#: ../../common/config.py:82 msgid "Every 2 hours" msgstr "Каждые 2 часа" -#: ../../common/config.py:79 +#: ../../common/config.py:83 msgid "Every 4 hours" msgstr "Каждые 4 часа" -#: ../../common/config.py:80 +#: ../../common/config.py:84 msgid "Every 6 hours" msgstr "Каждые 6 часов" -#: ../../common/config.py:81 +#: ../../common/config.py:85 msgid "Every 12 hours" msgstr "Каждые 12 часов" -#: ../../common/config.py:82 +#: ../../common/config.py:86 msgid "Custom Hours" msgstr "Ручная настройка периодизации" -#: ../../common/config.py:83 +#: ../../common/config.py:87 msgid "Every Day" msgstr "Ежедневно" -#: ../../common/config.py:84 -msgid "Daily (anacron)" -msgstr "Ежедневно (anacron)" +#: ../../common/config.py:88 +msgid "Repeatedly (anacron)" +msgstr "" -#: ../../common/config.py:85 +#: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "Когда подключено устройство (udev)" -#: ../../common/config.py:86 +#: ../../common/config.py:90 msgid "Every Week" msgstr "Каждую неделю" -#: ../../common/config.py:87 +#: ../../common/config.py:91 msgid "Every Month" msgstr "Каждый месяц" -#: ../../common/config.py:91 +#: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Дней (Дня)" -#: ../../common/config.py:92 +#: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "недель" -#: ../../common/config.py:93 +#: ../../common/config.py:97 msgid "Year(s)" msgstr "Лет (Года)" -#: ../../common/config.py:100 +#: ../../common/config.py:101 +msgid "Hour(s)" +msgstr "" + +#: ../../common/config.py:104 +msgid "Month(s)" +msgstr "" + +#: ../../common/config.py:126 ../../qt4/settingsdialog.py:551 msgid " EXPERIMENTAL!" msgstr " ЭКСПЕРИМЕНТАЛЬНО!" -#: ../../common/config.py:103 +#: ../../common/config.py:129 msgid "Local" msgstr "Локально" -#: ../../common/config.py:104 +#: ../../common/config.py:130 msgid "SSH" msgstr "SSH" -#: ../../common/config.py:104 ../../common/config.py:106 -#: ../../gnome/settingsdialog.py:475 ../../kde4/settingsdialog.py:1325 +#: ../../common/config.py:130 ../../common/config.py:132 +#: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "личный ключ SSH" -#: ../../common/config.py:105 +#: ../../common/config.py:131 msgid "Local encrypted" msgstr "Локально с шифрованием" -#: ../../common/config.py:105 ../../common/config.py:106 +#: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "Шифрование" -#: ../../common/config.py:106 +#: ../../common/config.py:132 msgid "SSH encrypted" msgstr "SSH зашифровано" -#: ../../common/config.py:112 +#: ../../common/config.py:135 msgid "Default" msgstr "По умолчанию" -#: ../../common/config.py:113 +#: ../../common/config.py:136 msgid "AES128-CTR" msgstr "AES128-CTR" -#: ../../common/config.py:114 +#: ../../common/config.py:137 msgid "AES192-CTR" msgstr "AES192-CTR" -#: ../../common/config.py:115 +#: ../../common/config.py:138 msgid "AES256-CTR" msgstr "AES256-CTR" -#: ../../common/config.py:116 +#: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "ARCFOUR256" -#: ../../common/config.py:117 +#: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "ARCFOUR128" -#: ../../common/config.py:118 +#: ../../common/config.py:141 msgid "AES128-CBC" msgstr "AES128-CBC" -#: ../../common/config.py:119 +#: ../../common/config.py:142 msgid "3DES-CBC" msgstr "3DES-CBC" -#: ../../common/config.py:120 +#: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "Blowfish-CBC" -#: ../../common/config.py:121 +#: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "Cast128-CBC" -#: ../../common/config.py:122 +#: ../../common/config.py:145 msgid "AES192-CBC" msgstr "AES192-CBC" -#: ../../common/config.py:123 +#: ../../common/config.py:146 msgid "AES256-CBC" msgstr "AES256-CBC" -#: ../../common/config.py:124 +#: ../../common/config.py:147 msgid "ARCFOUR" msgstr "ARCFOUR" -#: ../../common/config.py:129 +#: ../../common/config.py:153 msgid "Main profile" msgstr "Основной профиль" -#: ../../common/config.py:256 ../../common/config.py:275 -#: ../../common/config.py:286 ../../common/config.py:291 +#: ../../common/config.py:289 ../../common/config.py:296 +#: ../../common/config.py:307 ../../common/config.py:312 +#: ../../qt4/qt4systrayicon.py:61 #, python-format msgid "Profile: \"%s\"" msgstr "Профиль: \"%s\"" -#: ../../common/config.py:256 +#: ../../common/config.py:289 msgid "Snapshots folder is not valid !" msgstr "Каталог резервных копий задан неверно!" -#: ../../common/config.py:275 +#: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "Вы должны выбрать хотя бы одну папку для резервного копирования!" -#: ../../common/config.py:286 +#: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "Вы не можете добавить папку для резервного копирования!" -#: ../../common/config.py:291 +#: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "Вы не можете включить в архив вложенные каталоги" -#: ../../common/config.py:361 +#: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s не папка !" -#: ../../common/config.py:376 ../../common/config.py:389 +#: ../../common/config.py:380 +msgid "Host/User/Profile-ID must not be empty!" +msgstr "" + +#: ../../common/config.py:388 ../../common/config.py:420 #, python-format msgid "" "Can't write to: %s\n" @@ -237,7 +268,37 @@ "Не удаётся произвести запись в: %s\n" "Вы уверены, что имеете право на запись?" -#: ../../common/config.py:1286 +#: ../../common/config.py:400 +#, python-format +msgid "" +"Destination filesystem for '%(path)s' is formatted with FAT which doesn't " +"support hard-links. Please use a native Linux filesystem." +msgstr "" + +#: ../../common/config.py:405 +#, python-format +msgid "" +"Destination filsystem for '%(path)s' is a SMB mounted share. Please make " +"sure the remote SMB server supports symlinks or activate '%(copyLinks)s' in " +"'%(expertOptions)s'." +msgstr "" + +#: ../../common/config.py:408 ../../qt4/settingsdialog.py:815 +msgid "Copy links (dereference symbolic links)" +msgstr "Копировать ссылки (разыменование символических ссылок)" + +#: ../../common/config.py:409 ../../qt4/settingsdialog.py:669 +msgid "Expert Options" +msgstr "Расширенные настройки" + +#: ../../common/config.py:411 +#, python-format +msgid "" +"Destination filesystem for '%(path)s is a sshfs mounted share. sshfs doesn't " +"support hard-links. Please use mode 'SSH' instead." +msgstr "" + +#: ../../common/config.py:1407 msgid "" "Can't find crontab.\n" "Are you sure cron is installed ?\n" @@ -247,53 +308,28 @@ "Вы уверены, что cron установлен?\n" "Если не установлен, вы должны отключить автоматическое резервное копирование." -#: ../../common/config.py:1338 -#, python-format -msgid "Schedule udev doesn't work with mode %s" +#: ../../common/config.py:1411 +msgid "Failed to write new crontab." msgstr "" -#: ../../common/config.py:1342 +#: ../../common/config.py:1505 #, python-format -msgid "Couldn't find UUID for \"%s\"" -msgstr "Не удалось найти UUID для \"%s\"" - -#: ../../common/config.py:1379 -msgid "Failed to remove udev rules" -msgstr "Не удалось удалить правила udev" - -#: ../../common/config.py:1385 -msgid "Failed to create udev rules" -msgstr "Не удалось создать правила udev" - -#: ../../common/config.py:1420 msgid "" -"Can't find anacron.\n" -"Are you sure anacron is installed ?\n" -"If not you should disable daily anacron backups." +"Could not install Udev rule for profile %(profile_id)s. DBus Service " +"'%(dbus_interface)s' wasn't available" msgstr "" -"Невозможно найти anacron.\n" -"Он установлен?\n" -"Если нет уверенности, стоит отключить ежедневные копии через anacron." - -#: ../../common/config.py:1439 -msgid "Please provide your sudo password to install the udev rule." -msgstr "Пожалуйста, укажите sudo-пароль для установки правил udev." -#: ../../common/config.py:1445 -msgid "Please provide your sudo password to remove unused udev rules." +#: ../../common/config.py:1517 +#, python-format +msgid "Schedule udev doesn't work with mode %s" msgstr "" -"Пожалуйста, укажите sudo-пароль для удаления неиспользуемых правил udev." -#: ../../common/configfile.py:253 ../../common/configfile.py:315 +#: ../../common/config.py:1526 #, python-format -msgid "Profile \"%s\" already exists !" -msgstr "Профиль \"%s\" уже существует!" - -#: ../../common/configfile.py:284 -msgid "You can't remove the last profile !" -msgstr "Невозможно удалить последний профиль!" +msgid "Couldn't find UUID for \"%s\"" +msgstr "Не удалось найти UUID для \"%s\"" -#: ../../common/encfstools.py:95 +#: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" @@ -304,16 +340,16 @@ "\n" "%(error)s" -#: ../../common/encfstools.py:105 +#: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "Не могу отмонтировать encfs %s" -#: ../../common/encfstools.py:149 +#: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "Не найдена конфигурация для зашифрованной директории." -#: ../../common/encfstools.py:153 +#: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" @@ -321,25 +357,25 @@ "\n" "Создать новую зашифрованную папку?" -#: ../../common/encfstools.py:154 +#: ../../common/encfstools.py:171 msgid "Cancel" msgstr "Отмена" -#: ../../common/encfstools.py:157 +#: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "Пожалуйста, подтвердите пароль" -#: ../../common/encfstools.py:161 +#: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "Пароль не подходит" -#: ../../common/encfstools.py:166 +#: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" "encfs не найдена. Вы можете её установить, набрав в консоли 'apt-get install " "encfs'" -#: ../../common/encfstools.py:174 ../../common/sshtools.py:207 +#: ../../common/encfstools.py:196 ../../common/sshtools.py:262 #, python-format msgid "" "%(user)s is not member of group 'fuse'.\n" @@ -351,7 +387,7 @@ "и войдите снова.\n" "Выполните 'man backintime' для дальнейших инструкций." -#: ../../common/encfstools.py:189 +#: ../../common/encfstools.py:211 msgid "" "encfs version 1.7.2 and before has a bug with option --reverse. Please " "update encfs" @@ -359,13 +395,12 @@ "encfs версии 1.7.2 и ранние имеют баг с опцией --reverse. Пожалуйста, " "обновите encfs." -#: ../../common/encfstools.py:453 ../../common/encfstools.py:480 -#: ../../common/snapshots.py:982 ../../common/snapshots.py:1288 -#: ../../kde4/app.py:82 ../../gnome/mainwindow.glade:43 +#: ../../common/encfstools.py:512 ../../common/snapshots.py:1131 +#: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "Сделать резервную копию" -#: ../../common/mount.py:195 +#: ../../common/mount.py:204 #, python-format msgid "" "Hash collision occurred in hash_id %s. Incrementing global value " @@ -374,44 +409,48 @@ "В hash_id %s возникла хеш-коллизия. Увеличьте глобальную переменую " "hash_collision и попробуйте снова." -#: ../../common/mount.py:246 +#: ../../common/mount.py:259 #, python-format msgid "mountpoint %s not empty." msgstr "точка монтирования %s не пустая." -#: ../../common/mount.py:286 +#: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" -#: ../../common/password.py:425 +#: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "Профиль '%(profile)s': Введите пароль для %(mode)s: " -#: ../../common/snapshots.py:171 ../../gnome/app.py:1127 -#: ../../kde4/app.py:1014 +#: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Сейчас" -#: ../../common/snapshots.py:182 ../../gnome/gnometools.py:37 +#: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "С ОШИБКАМИ!" -#: ../../common/snapshots.py:282 +#: ../../common/snapshots.py:344 msgid "" "### This log has been decoded with automatic search pattern\n" "### If some paths are not decoded you can manually decode them with:\n" msgstr "" -#: ../../common/snapshots.py:465 +#: ../../common/snapshots.py:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "НЕУСПЕШНО" -#: ../../common/snapshots.py:564 +#: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "" -#: ../../common/snapshots.py:739 +#: ../../common/snapshots.py:752 ../../qt4/app.py:377 ../../qt4/app.py:675 +#: ../../qt4/app.py:692 ../../qt4/qt4systrayicon.py:65 +msgid "Done" +msgstr "Готово" + +#: ../../common/snapshots.py:860 msgid "" "Back In Time changed its backup format.\n" "\n" @@ -422,7 +461,7 @@ "Ваши старые снимки могут быть преобразованы в соответствии с новым форматом. " "Преобразовать?" -#: ../../common/snapshots.py:749 +#: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" @@ -439,7 +478,7 @@ "для обоих пользователей?\n" "(Программа сможет различать профили)" -#: ../../common/snapshots.py:752 +#: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" @@ -447,7 +486,7 @@ "Профили не найдены. Необходимо сначала обновить профили, пожалуйста, " "перезапустите Back In Time" -#: ../../common/snapshots.py:803 +#: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" @@ -460,7 +499,7 @@ "cannot continue taking snapshots" msgstr "" -#: ../../common/snapshots.py:812 +#: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" @@ -475,7 +514,7 @@ "Вы можете вручную переместить снимки, \n" "если вы сделали, что хотели, то перезапустите Back In Time, чтобы продолжить." -#: ../../common/snapshots.py:825 +#: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" @@ -485,7 +524,7 @@ "\n" "Back In Time продолжит выполнять резервное копирование по расписанию" -#: ../../common/snapshots.py:830 +#: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" @@ -505,11 +544,11 @@ "\n" "Если не уверены, Back In Time повторно спросит Вас при следующем запуске." -#: ../../common/snapshots.py:839 +#: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "Back In Time продолжит выполнять резервное копирование по расписанию" -#: ../../common/snapshots.py:841 +#: ../../common/snapshots.py:953 msgid "" "Back In Time still cannot continue taking new snapshots.\n" "Restart Back In Time to see the questions again" @@ -517,7 +556,11 @@ "Back In Time все еще не может продолжить создание новых снимков.\n" "Перезапустите Back In Time для повторения вопросов" -#: ../../common/snapshots.py:913 +#: ../../common/snapshots.py:972 +msgid "Deferring backup while on battery" +msgstr "" + +#: ../../common/snapshots.py:1035 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it." @@ -525,7 +568,7 @@ "Невозможно найти каталог резервных копий!\n" "Если он находится на съёмном диске, пожалуйста, подключите его." -#: ../../common/snapshots.py:915 +#: ../../common/snapshots.py:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." @@ -533,149 +576,156 @@ msgstr[1] "Ждать %s сек." msgstr[2] "Ждать %s сек." -#: ../../common/snapshots.py:941 +#: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "Не удалось создать резервную копию %s !!!" -#: ../../common/snapshots.py:950 +#: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "Окончание" -#: ../../common/snapshots.py:1088 +#: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "Не могу создать каталог: %s" -#: ../../common/snapshots.py:1107 +#: ../../common/snapshots.py:1217 msgid "..." msgstr "..." -#: ../../common/snapshots.py:1134 +#: ../../common/snapshots.py:1238 +#, python-format +msgid "Found leftover '%s' which can be continued." +msgstr "" + +#: ../../common/snapshots.py:1250 +#, python-format +msgid "Remove leftover '%s' folder from last run" +msgstr "" + +#: ../../common/snapshots.py:1263 #, python-format msgid "Can't remove folder: %s" msgstr "Не могу удалить каталог: %s" -#: ../../common/snapshots.py:1219 +#: ../../common/snapshots.py:1340 #, python-format msgid "Compare with snapshot %s" msgstr "Сравнить с резервной копией %s" -#: ../../common/snapshots.py:1248 +#: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "Создать жёсткие ссылки" -#: ../../common/snapshots.py:1335 +#: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "Сохранить конфигурационный файл..." -#: ../../common/snapshots.py:1341 +#: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "Сохранить разрешение ..." -#: ../../common/snapshots.py:1442 +#: ../../common/snapshots.py:1470 +msgid "Save permission over ssh failed. Retry normal method" +msgstr "" + +#: ../../common/snapshots.py:1521 #, python-format msgid "Can't rename %(new_path)s to %(path)s" msgstr "" -#: ../../common/snapshots.py:1562 -msgid "Remove old snapshots" -msgstr "Удалить старые резервные копии" - -#: ../../common/snapshots.py:1586 ../../kde4/settingsdialog.py:501 -#: ../../gnome/settingsdialog.glade:1660 +#: ../../common/snapshots.py:1695 ../../common/snapshots.py:1728 +#: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "Умное удаление" -#: ../../common/snapshots.py:1591 +#: ../../common/snapshots.py:1704 +msgid "Remove old snapshots" +msgstr "Удалить старые резервные копии" + +#: ../../common/snapshots.py:1733 msgid "Try to keep min free space" msgstr "Стараться сохранять минимальное свободное место" -#: ../../common/snapshots.py:1621 +#: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" -#: ../../common/sshtools.py:106 +#: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "Не могу смонтировать %s" -#: ../../common/sshtools.py:113 +#: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "Не могу отмонтировать sshfs %s" -#: ../../common/sshtools.py:187 -#, python-format -msgid "" -"Failed to unlock SSH private key:\n" -"Error: %s" -msgstr "" - -#: ../../common/sshtools.py:194 +#: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" -#: ../../common/sshtools.py:199 +#: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" -#: ../../common/sshtools.py:217 +#: ../../common/sshtools.py:278 #, python-format msgid "" "Password-less authentication for %(user)s@%(host)s failed. Look at 'man " "backintime' for further instructions." msgstr "" -#: ../../common/sshtools.py:229 +#: ../../common/sshtools.py:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" -#: ../../common/sshtools.py:254 +#: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "%s не найдено в ssh_known_hosts." -#: ../../common/sshtools.py:274 +#: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" -#: ../../common/sshtools.py:276 +#: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:278 +#: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:280 +#: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" -#: ../../common/sshtools.py:302 +#: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" -#: ../../common/sshtools.py:325 ../../common/sshtools.py:383 +#: ../../common/sshtools.py:423 ../../common/sshtools.py:553 #, python-format msgid "" "Remote host %(host)s doesn't support '%(command)s':\n" @@ -683,7 +733,7 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:387 +#: ../../common/sshtools.py:556 #, python-format msgid "" "Check commands on host %(host)s returned unknown error:\n" @@ -691,96 +741,149 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:400 +#: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "" -#: ../../gnome/app.py:185 ../../gnome/app.py:594 ../../gnome/app.py:608 -#: ../../kde4/app.py:299 ../../kde4/app.py:570 ../../kde4/app.py:587 -msgid "Done" -msgstr "Готово" +#: ../../qt4/app.py:81 +msgid "Refresh snapshots list" +msgstr "Обновить список резервных копий" + +#: ../../qt4/app.py:85 ../../qt4/app.py:890 +msgid "Snapshot Name" +msgstr "Название резервной копии" + +#: ../../qt4/app.py:88 +msgid "Remove Snapshot" +msgstr "Удалить резервную копию" + +#: ../../qt4/app.py:91 +msgid "View Snapshot Log" +msgstr "Просмотр журнала снимков состояния" + +#: ../../qt4/app.py:94 +msgid "View Last Log" +msgstr "Просмотреть последний журнал" + +#: ../../qt4/app.py:99 ../../qt4/settingsdialog.py:51 +msgid "Settings" +msgstr "Настройки" + +#: ../../qt4/app.py:104 +msgid "Shutdown" +msgstr "" + +#: ../../qt4/app.py:105 +msgid "Shutdown system after snapshot has finished." +msgstr "" + +#: ../../qt4/app.py:111 +msgid "Exit" +msgstr "Выйти" -#: ../../gnome/app.py:189 ../../kde4/app.py:143 ../../kde4/app.py:159 -#: ../../gnome/mainwindow.glade:225 +#: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 msgid "Help" msgstr "Справка" -#: ../../gnome/app.py:191 ../../kde4/app.py:146 -#: ../../gnome/mainwindow.glade:223 +#: ../../qt4/app.py:122 +msgid "Config File Help" +msgstr "" + +#: ../../qt4/app.py:125 msgid "Website" msgstr "Сайт" -#: ../../gnome/app.py:192 ../../kde4/app.py:148 +#: ../../qt4/app.py:127 ../../qt4/app.py:982 +msgid "Changelog" +msgstr "" + +#: ../../qt4/app.py:129 msgid "FAQ" msgstr "" -#: ../../gnome/app.py:193 ../../kde4/app.py:150 +#: ../../qt4/app.py:131 msgid "Ask a question" msgstr "Задать вопрос" -#: ../../gnome/app.py:194 ../../kde4/app.py:152 +#: ../../qt4/app.py:133 msgid "Report a bug" msgstr "Сообщить об ошибке" -#: ../../gnome/app.py:196 ../../kde4/app.py:155 +#: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "О программе" -#: ../../gnome/app.py:202 ../../gnome/app.py:887 -#: ../../gnome/restoredialog.py:84 ../../gnome/snapshotsdialog.py:83 -#: ../../gnome/snapshotsdialog.py:244 ../../kde4/app.py:206 -#: ../../kde4/app.py:216 ../../kde4/restoredialog.py:68 -#: ../../kde4/snapshotsdialog.py:111 ../../kde4/snapshotsdialog.py:117 -#: ../../gnome/mainwindow.glade:350 ../../gnome/mainwindow.glade:352 -#: ../../gnome/snapshotsdialog.glade:169 ../../gnome/snapshotsdialog.glade:171 +#: ../../qt4/app.py:163 +msgid "Up" +msgstr "Вверх" + +#: ../../qt4/app.py:174 ../../qt4/settingsdialog.py:1776 +msgid "Show hidden files" +msgstr "Показать скрытые файлы" + +#: ../../qt4/app.py:184 ../../qt4/app.py:199 ../../qt4/app.py:233 +#: ../../qt4/restoredialog.py:62 ../../qt4/settingsdialog.py:1818 +#: ../../qt4/snapshotsdialog.py:134 ../../qt4/snapshotsdialog.py:139 msgid "Restore" msgstr "Восстановить" -#: ../../gnome/app.py:203 ../../gnome/app.py:888 ../../gnome/gnometools.py:67 -#: ../../gnome/snapshotsdialog.py:84 ../../gnome/snapshotsdialog.py:245 -#: ../../kde4/app.py:208 ../../kde4/restoredialog.py:42 -#: ../../kde4/snapshotsdialog.py:113 +#: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 +#: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "" -#: ../../gnome/app.py:205 ../../gnome/app.py:896 ../../gnome/app.py:1146 -#: ../../kde4/app.py:1041 -#, python-format -msgid "Restore '%s'" +#: ../../qt4/app.py:194 +msgid "Restore and delete new files" msgstr "" -#: ../../gnome/app.py:207 ../../gnome/app.py:897 ../../gnome/app.py:1147 -#: ../../kde4/app.py:1042 +#: ../../qt4/app.py:201 #, python-format -msgid "Restore '%s' to ..." +msgid "" +"Restore selected file or folder.\n" +"If this button is grayed out this is most likely because \"%(now)s\" is " +"selected in left hand snapshots list." msgstr "" -#: ../../gnome/app.py:226 ../../kde4/app.py:235 +#: ../../qt4/app.py:206 ../../qt4/logviewdialog.py:67 +#: ../../qt4/qt4tools.py:160 ../../qt4/snapshotsdialog.py:96 +msgid "Snapshots" +msgstr "Резервные копии" + +#: ../../qt4/app.py:213 +msgid "Snapshot" +msgstr "" + +#: ../../qt4/app.py:224 +msgid "View" +msgstr "" + +#: ../../qt4/app.py:277 msgid "Shortcuts" msgstr "Ярлыки" -#: ../../gnome/app.py:249 -msgid "Name" -msgstr "Название" - -#: ../../gnome/app.py:260 -msgid "Size" -msgstr "Размер" - -#: ../../gnome/app.py:267 -msgid "Date" -msgstr "Дата" - -#: ../../gnome/app.py:286 ../../gnome/app.py:883 -#: ../../gnome/snapshotsdialog.py:116 ../../kde4/app.py:171 -#: ../../kde4/app.py:221 ../../kde4/snapshotsdialog.py:91 -#: ../../gnome/mainwindow.glade:366 ../../gnome/mainwindow.glade:368 -#: ../../gnome/snapshotsdialog.glade:8 -msgid "Snapshots" -msgstr "Резервные копии" +#: ../../qt4/app.py:295 +msgid "" +"This folder doesn't exist\n" +"in the current selected snapshot!" +msgstr "" + +#: ../../qt4/app.py:359 +msgid "Add to Include" +msgstr "" + +#: ../../qt4/app.py:360 +msgid "Add to Exclude" +msgstr "" -#: ../../gnome/app.py:348 ../../kde4/app.py:362 +#: ../../qt4/app.py:416 +#, python-format +msgid "" +"%(appName)s is not configured. Would you like to restore a previous " +"configuration?" +msgstr "" + +#: ../../qt4/app.py:440 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it and then press OK" @@ -788,392 +891,336 @@ "Невозможно найти каталог резервных копий!\n" "Если он находится на съёмном диске, пожалуйста, подключите его и нажмите ОК" -#: ../../gnome/app.py:611 ../../kde4/app.py:590 -msgid "Done, no backup needed" -msgstr "Всё сделано, сохранять ничего не надо" +#: ../../qt4/app.py:473 +msgid "" +"If you close this window Back In Time will not be able to shutdown your " +"system when the snapshot has finished.\n" +"Do you really want to close?" +msgstr "" -#: ../../gnome/app.py:619 ../../kde4/app.py:598 +#: ../../qt4/app.py:667 ../../qt4/app.py:703 msgid "Working:" msgstr "Работаю:" -#: ../../gnome/app.py:623 ../../kde4/app.py:602 +#: ../../qt4/app.py:695 +msgid "Done, no backup needed" +msgstr "Всё сделано, сохранять ничего не надо" + +#: ../../qt4/app.py:707 msgid "Error:" msgstr "Ошибка:" -#: ../../gnome/app.py:636 ../../kde4/app.py:649 +#: ../../qt4/app.py:726 ../../qt4/qt4systrayicon.py:153 +msgid "Sent:" +msgstr "" + +#: ../../qt4/app.py:727 ../../qt4/qt4systrayicon.py:154 +msgid "Speed:" +msgstr "" + +#: ../../qt4/app.py:728 ../../qt4/qt4systrayicon.py:155 +msgid "ETA:" +msgstr "" + +#: ../../qt4/app.py:777 msgid "Global" msgstr "Общее" -#: ../../gnome/app.py:637 ../../kde4/app.py:650 +#: ../../qt4/app.py:778 msgid "Root" msgstr "Корневой каталог" -#: ../../gnome/app.py:638 ../../kde4/app.py:651 +#: ../../qt4/app.py:779 msgid "Home" msgstr "Домашний каталог" -#: ../../gnome/app.py:662 -msgid "Bookmarks" -msgstr "Закладки" - -#: ../../gnome/app.py:675 ../../kde4/app.py:662 +#: ../../qt4/app.py:794 msgid "Backup folders" msgstr "Резервные директории" -#: ../../gnome/app.py:701 ../../kde4/app.py:734 -msgid "Today" -msgstr "Сегодня" +#: ../../qt4/app.py:849 +msgid "This is NOT a snapshot but a live view of your local files" +msgstr "" -#: ../../gnome/app.py:705 ../../kde4/app.py:738 -msgid "Yesterday" -msgstr "Вчера" +#: ../../qt4/app.py:860 ../../qt4/app.py:1476 +#, python-format +msgid "Last check %s" +msgstr "" -#: ../../gnome/app.py:709 ../../kde4/app.py:742 -msgid "This week" -msgstr "Эта неделя" +#: ../../qt4/app.py:928 +#, python-format +msgid "" +"Are you sure you want to remove the snapshot:\n" +"%s" +msgstr "" +"Вы уверены что вы хотите удалить резервную копию:\n" +"%s" -#: ../../gnome/app.py:713 ../../kde4/app.py:746 -msgid "Last week" -msgstr "На прошлой неделе" +#: ../../qt4/app.py:1004 +#, python-format +msgid "" +"Backup local files before overwriting or\n" +"removing with trailing '%(suffix)s'." +msgstr "" -#: ../../gnome/app.py:764 ../../kde4/app.py:398 +#: ../../qt4/app.py:1010 msgid "" -"If you close this window Back In Time will not be able to shutdown your " -"system when the snapshot has finished.\n" -"Do you really want to close?" +"Are you sure you want to remove all newer files in your original folder?" msgstr "" -#: ../../gnome/app.py:881 ../../gnome/snapshotsdialog.py:238 -msgid "Open" -msgstr "Открыть" +#: ../../qt4/app.py:1014 +msgid "" +"WARNING: deleting files in filesystem root could break your whole system!!!" +msgstr "" -#: ../../gnome/app.py:1056 ../../kde4/app.py:90 ../../kde4/app.py:805 -#: ../../gnome/mainwindow.glade:73 ../../gnome/mainwindow.glade:75 -msgid "Snapshot Name" -msgstr "Название резервной копии" +#: ../../qt4/app.py:1016 +msgid "Files to be restored:" +msgstr "" -#: ../../gnome/app.py:1075 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +#: ../../qt4/app.py:1031 +msgid "Do you really want to restore this files(s):" msgstr "" -"Вы уверены в том, что хотите удалить резервную копию:\n" -"%s" -#: ../../gnome/app.py:1123 ../../kde4/app.py:1010 +#: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "Резервная копия: %s" -#: ../../gnome/app.py:1124 ../../kde4/app.py:1011 +#: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "Посмотреть резервную копию, которая сделана %s" -#: ../../gnome/logviewdialog.py:106 ../../gnome/settingsdialog.py:414 -#: ../../kde4/logviewdialog.py:83 ../../kde4/settingsdialog.py:590 -msgid "All" -msgstr "Все" +#: ../../qt4/app.py:1268 +#, python-format +msgid "Restore '%s'" +msgstr "" -#: ../../gnome/logviewdialog.py:107 ../../gnome/settingsdialog.py:412 -#: ../../kde4/logviewdialog.py:84 ../../kde4/settingsdialog.py:588 -msgid "Errors" -msgstr "Ошибки" +#: ../../qt4/app.py:1269 +#, python-format +msgid "Restore '%s' to ..." +msgstr "" -#: ../../gnome/logviewdialog.py:112 ../../kde4/logviewdialog.py:89 -msgid "Changes" -msgstr "Изменения" +#: ../../qt4/app.py:1270 +#, python-format +msgid "Restore '%s' and delete new files" +msgstr "" -#: ../../gnome/logviewdialog.py:115 ../../kde4/logviewdialog.py:92 -msgid "Informations" -msgstr "Оповещения" +#: ../../qt4/app.py:1368 ../../qt4/app.py:1385 +msgid "Authors" +msgstr "" -#: ../../gnome/settingsdialog.py:235 ../../kde4/settingsdialog.py:387 -msgid "Include files and folders" -msgstr "Включить файлы и папки" - -#: ../../gnome/settingsdialog.py:264 -msgid "Exclude patterns, files or folders" -msgstr "Исключить шаблоны, файлы или папки" - -#: ../../gnome/settingsdialog.py:411 ../../kde4/settingsdialog.py:587 -msgid "None" -msgstr "Нет" - -#: ../../gnome/settingsdialog.py:413 ../../kde4/settingsdialog.py:589 -msgid "Changes & Errors" -msgstr "Изменения и ошибки" - -#: ../../gnome/settingsdialog.py:458 -msgid "Snapshots folder" -msgstr "Каталог резервных копий" - -#: ../../gnome/settingsdialog.py:466 ../../kde4/settingsdialog.py:1314 -msgid "Are you sure you want to change snapshots folder ?" +#: ../../qt4/app.py:1369 ../../qt4/app.py:1388 +msgid "Translations" msgstr "" -"Вы уверены, что хотите изменить каталог для хранения резервных копий?" -#: ../../gnome/settingsdialog.py:901 ../../kde4/settingsdialog.py:914 -msgid "" -"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " -"*/3 for periodic backups every 3 hours" +#: ../../qt4/app.py:1370 ../../qt4/app.py:1391 +msgid "License" msgstr "" -#: ../../gnome/settingsdialog.py:1141 ../../kde4/settingsdialog.py:653 -msgid "New profile" -msgstr "Новый профиль" - -#: ../../gnome/settingsdialog.py:1155 ../../kde4/settingsdialog.py:669 -msgid "Rename profile" -msgstr "Переименовать профиль" - -#: ../../gnome/settingsdialog.py:1167 ../../kde4/settingsdialog.py:683 -#, python-format -msgid "Are you sure you want to delete the profile \"%s\" ?" -msgstr "Вы действительно хотите удалить профиль \"%s\"?" +#: ../../qt4/logviewdialog.py:49 +msgid "Last Log View" +msgstr "" -#: ../../gnome/settingsdialog.py:1193 ../../kde4/settingsdialog.py:1278 -msgid "Include file" -msgstr "Включить файл" +#: ../../qt4/logviewdialog.py:51 +msgid "Snapshot Log View" +msgstr "" -#: ../../gnome/settingsdialog.py:1235 ../../kde4/settingsdialog.py:1241 -msgid "Exclude pattern" -msgstr "Исключать папку по шаблону" +#: ../../qt4/logviewdialog.py:59 ../../qt4/settingsdialog.py:59 +#: ../../qt4/settingsdialog.py:274 ../../qt4/settingsdialog.py:1899 +msgid "Profile:" +msgstr "Профиль:" -#: ../../gnome/settingsdialog.py:1240 ../../kde4/settingsdialog.py:1251 -msgid "Exclude patterns can't contain ':' char !" -msgstr "Исключение. Шаблоны не могут содержать символ ':' !" +#: ../../qt4/logviewdialog.py:81 +msgid "Filter:" +msgstr "Фильтр:" -#: ../../gnome/settingsdialog.py:1246 ../../kde4/settingsdialog.py:1257 -msgid "Exclude file" -msgstr "Исключая файл" +#: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 +msgid "All" +msgstr "Все" -#: ../../gnome/snapshotsdialog.py:240 -msgid "Jump to" -msgstr "Перейти к" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 +#: ../../qt4/settingsdialog.py:657 +msgid "Errors" +msgstr "Ошибки" -#: ../../gnome/snapshotsdialog.py:248 ../../kde4/snapshotsdialog.py:164 -msgid "Diff" -msgstr "Различие" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 +msgid "Changes" +msgstr "Изменения" -#: ../../gnome/snapshotsdialog.py:277 ../../kde4/snapshotsdialog.py:339 -msgid "You can't compare a snapshot to itself" -msgstr "Нельзя сравнивать резервную копию с саму с собой" +#: ../../qt4/logviewdialog.py:92 +msgid "Informations" +msgstr "Оповещения" -#: ../../gnome/snapshotsdialog.py:284 ../../kde4/snapshotsdialog.py:346 -#, python-format -msgid "Command not found: %s" -msgstr "Команда не найдена: %s" +#: ../../qt4/logviewdialog.py:101 +msgid "[E] Error, [I] Information, [C] Change" +msgstr "[E] Ошибка, [I] Информация, [C] Изменение" -#: ../../gnome/snapshotsdialog.py:307 ../../kde4/snapshotsdialog.py:367 -#, python-format -msgid "" -"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" +#: ../../qt4/logviewdialog.py:104 +msgid "decode paths" msgstr "" -#: ../../gnome/snapshotsdialog.py:310 ../../kde4/snapshotsdialog.py:370 -#, python-format -msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +#: ../../qt4/messagebox.py:56 +msgid "Error" msgstr "" -#: ../../gnome/snapshotsdialog.py:312 ../../kde4/snapshotsdialog.py:372 -msgid "WARNING: This can not be revoked!" +#: ../../qt4/messagebox.py:62 ../../qt4/messagebox.py:68 +msgid "Question" msgstr "" -#: ../../gnome/snapshotsdialog.py:317 ../../kde4/snapshotsdialog.py:377 -#, python-format -msgid "Exclude \"%s\" from future snapshots?" +#: ../../qt4/qt4systrayicon.py:69 +msgid "Start BackInTime" msgstr "" -#: ../../kde4/app.py:86 ../../gnome/mainwindow.glade:58 -#: ../../gnome/mainwindow.glade:60 -msgid "Refresh snapshots list" -msgstr "Обновить список резервных копий" +#: ../../qt4/qt4systrayicon.py:124 +msgid "Working..." +msgstr "Выполняется..." -#: ../../kde4/app.py:94 ../../gnome/mainwindow.glade:88 -#: ../../gnome/mainwindow.glade:90 -msgid "Remove Snapshot" -msgstr "Удалить резервную копию" +#: ../../qt4/qt4tools.py:178 +msgid "Today" +msgstr "Сегодня" -#: ../../kde4/app.py:98 ../../gnome/mainwindow.glade:105 -msgid "View Snapshot Log" -msgstr "Просмотр журнала снимков состояния" +#: ../../qt4/qt4tools.py:183 +msgid "Yesterday" +msgstr "Вчера" -#: ../../kde4/app.py:102 ../../gnome/mainwindow.glade:121 -msgid "View Last Log" -msgstr "Просмотреть последний журнал" +#: ../../qt4/qt4tools.py:188 +msgid "This week" +msgstr "Эта неделя" -#: ../../kde4/app.py:108 ../../kde4/settingsdialog.py:69 -#: ../../gnome/mainwindow.glade:144 ../../gnome/mainwindow.glade:146 -#: ../../gnome/settingsdialog.glade:7 -msgid "Settings" -msgstr "Настройки" +#: ../../qt4/qt4tools.py:193 +msgid "Last week" +msgstr "На прошлой неделе" -#: ../../kde4/app.py:124 ../../gnome/mainwindow.glade:169 -msgid "Shutdown system after snapshot has finished." +#: ../../qt4/restoredialog.py:75 +msgid "Show full Log" msgstr "" -#: ../../kde4/app.py:131 ../../gnome/mainwindow.glade:184 -#: ../../gnome/mainwindow.glade:186 -msgid "Exit" -msgstr "Выйти" - -#: ../../kde4/app.py:186 ../../gnome/mainwindow.glade:289 -msgid "Up" -msgstr "Вверх" - -#: ../../kde4/app.py:199 ../../gnome/mainwindow.glade:325 -msgid "Show hidden files" -msgstr "Показать скрытые файлы" +#: ../../qt4/settingsdialog.py:68 +msgid "Edit" +msgstr "Изменить" -#: ../../kde4/app.py:244 -msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +#: ../../qt4/settingsdialog.py:73 +msgid "Modify for Full System Backup" msgstr "" -"Эта папка не существует\n" -"в данном снимке!" -#: ../../kde4/app.py:839 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +#: ../../qt4/settingsdialog.py:77 ../../qt4/settingsdialog.py:451 +msgid "Add" msgstr "" -"Вы уверены что вы хотите удалить резервную копию:\n" -"%s" - -#: ../../kde4/app.py:1140 ../../kde4/kde4systrayicon.py:117 -msgid "Working..." -msgstr "Выполняется..." -#: ../../kde4/logviewdialog.py:55 -msgid "Error Log View" -msgstr "Просмотр журнала ошибок" - -#: ../../kde4/logviewdialog.py:65 ../../kde4/settingsdialog.py:79 -#: ../../kde4/settingsdialog.py:293 ../../gnome/logviewdialog.glade:73 -#: ../../gnome/settingsdialog.glade:72 -msgid "Profile:" -msgstr "Профиль:" - -#: ../../kde4/logviewdialog.py:77 ../../gnome/logviewdialog.glade:110 -msgid "Filter:" -msgstr "Фильтр:" - -#: ../../kde4/logviewdialog.py:100 ../../gnome/logviewdialog.glade:169 -msgid "[E] Error, [I] Information, [C] Change" -msgstr "[E] Ошибка, [I] Информация, [C] Изменение" - -#: ../../kde4/logviewdialog.py:103 ../../gnome/logviewdialog.glade:195 -msgid "decode paths" +#: ../../qt4/settingsdialog.py:81 ../../qt4/settingsdialog.py:408 +#: ../../qt4/settingsdialog.py:467 +msgid "Remove" msgstr "" -#: ../../kde4/settingsdialog.py:88 -msgid "Edit" -msgstr "Изменить" - -#: ../../kde4/settingsdialog.py:106 ../../gnome/settingsdialog.glade:1207 +#: ../../qt4/settingsdialog.py:96 msgid "General" msgstr "Общие" -#: ../../kde4/settingsdialog.py:114 ../../gnome/settingsdialog.glade:199 +#: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "Режим:" -#: ../../kde4/settingsdialog.py:127 ../../kde4/settingsdialog.py:1311 +#: ../../qt4/settingsdialog.py:119 +#, python-format +msgid "" +"Warning: %(app)s uses EncFS for encryption. A recent security audit " +"revealed several possible attack vectors for this. Please take a look at 'A " +"NOTE ON SECURITY' in 'man backintime'." +msgstr "" + +#: ../../qt4/settingsdialog.py:129 ../../qt4/settingsdialog.py:1568 msgid "Where to save snapshots" msgstr "Место для сохранения резервных копий" -#: ../../kde4/settingsdialog.py:146 +#: ../../qt4/settingsdialog.py:145 +msgid "Folder" +msgstr "" + +#: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "Найстроки SSH" -#: ../../kde4/settingsdialog.py:158 ../../kde4/settingsdialog.py:283 -#: ../../gnome/settingsdialog.glade:323 ../../gnome/settingsdialog.glade:583 -#: ../../gnome/settingsdialog.glade:874 +#: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "Хост:" -#: ../../kde4/settingsdialog.py:163 ../../gnome/settingsdialog.glade:350 -#: ../../gnome/settingsdialog.glade:610 +#: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "Порт:" -#: ../../kde4/settingsdialog.py:168 ../../kde4/settingsdialog.py:288 -#: ../../gnome/settingsdialog.glade:377 ../../gnome/settingsdialog.glade:637 -#: ../../gnome/settingsdialog.glade:902 +#: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "Пользователь:" -#: ../../kde4/settingsdialog.py:173 ../../gnome/settingsdialog.glade:416 +#: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "Путь:" -#: ../../kde4/settingsdialog.py:178 ../../gnome/settingsdialog.glade:459 +#: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" -#: ../../kde4/settingsdialog.py:184 +#: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "Приватный ключ:" -#: ../../kde4/settingsdialog.py:228 ../../kde4/settingsdialog.py:237 -#: ../../kde4/settingsdialog.py:243 ../../gnome/settingsdialog.glade:703 -#: ../../gnome/settingsdialog.glade:743 +#: ../../qt4/settingsdialog.py:201 +msgid "Key File" +msgstr "" + +#: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 +#: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "Пароль" -#: ../../kde4/settingsdialog.py:249 ../../gnome/settingsdialog.glade:775 +#: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" -#: ../../kde4/settingsdialog.py:252 ../../gnome/settingsdialog.glade:792 +#: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" -#: ../../kde4/settingsdialog.py:264 ../../gnome/settingsdialog.glade:968 +#: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "Дополнительно" -#: ../../kde4/settingsdialog.py:276 ../../gnome/settingsdialog.glade:848 -msgid "Auto Host / User / Profile Id" -msgstr "Автоматическая идентификация Компьютера / Пользователя / Профиля" +#: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 +msgid "Full snapshot path: " +msgstr "" -#: ../../kde4/settingsdialog.py:301 +#: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "Расписание" -#: ../../kde4/settingsdialog.py:311 ../../gnome/settingsdialog.glade:1092 +#: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "День:" -#: ../../kde4/settingsdialog.py:322 ../../gnome/settingsdialog.glade:1079 +#: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "День недели:" -#: ../../kde4/settingsdialog.py:333 ../../gnome/settingsdialog.glade:1066 +#: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "Часы:" -#: ../../kde4/settingsdialog.py:344 ../../gnome/settingsdialog.glade:1053 +#: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "Часы:" -#: ../../kde4/settingsdialog.py:353 ../../gnome/settingsdialog.glade:1014 +#: ../../qt4/settingsdialog.py:339 msgid "" -"Run Back In Time periodically with anacron. This is useful if the computer " -"is not running regular." +"Run Back In Time repeatedly. This is useful if the computer is not running " +"regular." msgstr "" -"Периодически запускать Back In Time через anacron. Подходит, если компьютер " -"не постоянно включен." -#: ../../kde4/settingsdialog.py:357 ../../gnome/settingsdialog.glade:1040 -msgid "Frequency in days:" -msgstr "Частота в днях:" +#: ../../qt4/settingsdialog.py:344 +msgid "Every:" +msgstr "" -#: ../../kde4/settingsdialog.py:368 ../../gnome/settingsdialog.glade:1026 +#: ../../qt4/settingsdialog.py:362 msgid "" "Run Back In Time as soon as the drive is connected (only once every X " "days).\n" @@ -1183,322 +1230,437 @@ "несколько дней).\n" "Будет запрошен sudo-пароль." -#: ../../kde4/settingsdialog.py:379 ../../gnome/settingsdialog.glade:1310 +#: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Включить" -#: ../../kde4/settingsdialog.py:403 ../../kde4/settingsdialog.py:445 -#: ../../gnome/settingsdialog.glade:1411 +#: ../../qt4/settingsdialog.py:381 +msgid "Include files and folders" +msgstr "Включить файлы и папки" + +#: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "Добавить файл" -#: ../../kde4/settingsdialog.py:418 ../../gnome/settingsdialog.glade:1474 +#: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Исключить" -#: ../../kde4/settingsdialog.py:421 ../../gnome/settingsdialog.glade:1328 +#: ../../qt4/settingsdialog.py:417 msgid "" "Warning: Wildcards ('foo*', '[fF]oo', 'fo?') will be ignored with " "mode 'SSH encrypted'.\n" "Only separate asterisk are allowed ('foo/*', 'foo/**/bar')" msgstr "" -#: ../../kde4/settingsdialog.py:430 +#: ../../qt4/settingsdialog.py:425 +msgid "Exclude patterns, files or folders" +msgstr "Исключить шаблоны, файлы или папки" + +#: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "Очень рекомендуется:" -#: ../../kde4/settingsdialog.py:464 ../../gnome/settingsdialog.glade:1608 +#: ../../qt4/settingsdialog.py:463 +msgid "Add default" +msgstr "" + +#: ../../qt4/settingsdialog.py:474 +msgid "Exclude files bigger than: " +msgstr "" + +#: ../../qt4/settingsdialog.py:475 +#, python-format +msgid "" +"Exclude files bigger than value in %(prefix)s.\n" +"With 'Full rsync mode' disabled this will only affect new files\n" +"because for rsync this is a transfer option, not an exclude option.\n" +"So big files that has been backed up before will remain in snapshots\n" +"even if they had changed." +msgstr "" + +#: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "Старее чем:" -#: ../../kde4/settingsdialog.py:478 ../../gnome/settingsdialog.glade:1624 +#: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "Если свободного места меньше чем:" -#: ../../kde4/settingsdialog.py:490 ../../gnome/settingsdialog.glade:1642 +#: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" -#: ../../kde4/settingsdialog.py:514 ../../gnome/settingsdialog.glade:1697 +#: ../../qt4/settingsdialog.py:551 +msgid "Run in background on remote Host." +msgstr "" + +#: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "" -#: ../../kde4/settingsdialog.py:517 ../../kde4/settingsdialog.py:522 -#: ../../gnome/settingsdialog.glade:1705 ../../gnome/settingsdialog.glade:1729 +#: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "" -#: ../../kde4/settingsdialog.py:519 ../../gnome/settingsdialog.glade:1717 +#: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "" -#: ../../kde4/settingsdialog.py:524 ../../gnome/settingsdialog.glade:1743 +#: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "" -#: ../../kde4/settingsdialog.py:527 +#: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "" -#: ../../kde4/settingsdialog.py:529 ../../gnome/settingsdialog.glade:1769 +#: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "" -#: ../../kde4/settingsdialog.py:532 ../../gnome/settingsdialog.glade:1781 +#: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "" -#: ../../kde4/settingsdialog.py:534 ../../gnome/settingsdialog.glade:1795 +#: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "" -#: ../../kde4/settingsdialog.py:537 ../../gnome/settingsdialog.glade:1496 +#: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "Не удалять переименованные резервные копии" -#: ../../kde4/settingsdialog.py:546 ../../gnome/settingsdialog.glade:2104 +#: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Опции" -#: ../../kde4/settingsdialog.py:549 ../../gnome/settingsdialog.glade:1920 +#: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Включить уведомления" -#: ../../kde4/settingsdialog.py:552 ../../gnome/settingsdialog.glade:1937 +#: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "Отключить создание резервных копий при работе от батареи" -#: ../../kde4/settingsdialog.py:555 +#: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" msgstr "Статус питания недоступен." -#: ../../kde4/settingsdialog.py:558 ../../gnome/settingsdialog.glade:1955 -msgid "Backup files on restore" -msgstr "Сохранять файлы во время восстановления" +#: ../../qt4/settingsdialog.py:611 +msgid "Run only one snapshot at a time" +msgstr "" + +#: ../../qt4/settingsdialog.py:612 +msgid "" +"Other snapshots will be blocked until the current snapshot is done.\n" +"This is a global option. So it will effect all profiles for this user.\n" +"But you need to activate this for all other users, too." +msgstr "" + +#: ../../qt4/settingsdialog.py:617 +msgid "Backup replaced files on restore" +msgstr "" + +#: ../../qt4/settingsdialog.py:618 +#, python-format +msgid "" +"Newer versions of files will be renamed with trailing '%(suffix)s' before " +"restoring.\n" +"If you don't need them anymore you can remove them with '%(cmd)s'" +msgstr "" -#: ../../kde4/settingsdialog.py:561 ../../gnome/settingsdialog.glade:1972 +#: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "Игнорировать ошибки (сохранять незавершенные копии)" -#: ../../kde4/settingsdialog.py:564 ../../gnome/settingsdialog.glade:1989 +#: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "Использовать контрольную сумму для обнаружения изменений" -#: ../../kde4/settingsdialog.py:567 ../../gnome/settingsdialog.glade:2006 +#: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "" -#: ../../kde4/settingsdialog.py:568 ../../gnome/settingsdialog.glade:2032 +#: ../../qt4/settingsdialog.py:634 msgid "" -"- snapshots are no read-only\n" -"- destination file-system must support all linux attributes (dates, rights, " +"- snapshots are not read-only\n" +"- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" -#: ../../kde4/settingsdialog.py:575 ../../gnome/settingsdialog.glade:2045 +#: ../../qt4/settingsdialog.py:641 +msgid "Take a new snapshot regardless of there were changes or not." +msgstr "" + +#: ../../qt4/settingsdialog.py:644 msgid "Check for changes (don't take a new snapshot if nothing changed)" msgstr "" -#: ../../kde4/settingsdialog.py:582 +#: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "Уровень журналирования" -#: ../../kde4/settingsdialog.py:597 ../../gnome/settingsdialog.glade:2366 -msgid "Expert Options" -msgstr "Расширенные настройки" +#: ../../qt4/settingsdialog.py:656 +msgid "None" +msgstr "Нет" + +#: ../../qt4/settingsdialog.py:658 +msgid "Changes & Errors" +msgstr "Изменения и ошибки" -#: ../../kde4/settingsdialog.py:600 +#: ../../qt4/settingsdialog.py:674 msgid "Change these options only if you really know what you are doing !" msgstr "Изменяйте эти параметры, только если вы точно знаете, что делаете!" -#: ../../kde4/settingsdialog.py:608 ../../gnome/settingsdialog.glade:2133 -msgid "Run 'nice' as cron job (default: enabled)" -msgstr "Запустить 'nice' как задание cron (по умолчанию: включено)" +#: ../../qt4/settingsdialog.py:678 +msgid "Run 'nice':" +msgstr "" -#: ../../kde4/settingsdialog.py:611 ../../gnome/settingsdialog.glade:2150 -msgid "Run 'ionice' as cron job (default: enabled)" -msgstr "Запустить 'ionice' как задачу в кроне (по умолчанию: отключено)" +#: ../../qt4/settingsdialog.py:684 ../../qt4/settingsdialog.py:696 +msgid "as cron job" +msgstr "" -#: ../../kde4/settingsdialog.py:614 ../../gnome/settingsdialog.glade:2167 -msgid "Run 'ionice' when taking a manual snapshot (default: disabled)" +#: ../../qt4/settingsdialog.py:687 ../../qt4/settingsdialog.py:702 +#: ../../qt4/settingsdialog.py:716 +msgid "on remote host" msgstr "" -#: ../../kde4/settingsdialog.py:617 ../../gnome/settingsdialog.glade:2184 -msgid "Run 'nice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:690 +msgid "Run 'ionice':" msgstr "" -#: ../../kde4/settingsdialog.py:620 ../../gnome/settingsdialog.glade:2201 -msgid "Run 'ionice' on remote host (default: disabled)" -msgstr "Запускать 'ionice' на удаленном узле (по умолчанию: отключено)" +#: ../../qt4/settingsdialog.py:699 +msgid "when taking a manual snapshot" +msgstr "" -#: ../../kde4/settingsdialog.py:626 ../../gnome/settingsdialog.glade:2224 +#: ../../qt4/settingsdialog.py:706 +msgid "Run 'rsync' with 'nocache':" +msgstr "" + +#: ../../qt4/settingsdialog.py:712 +msgid "on local machine" +msgstr "" + +#: ../../qt4/settingsdialog.py:719 +msgid "Redirect stdout to /dev/null in cronjobs." +msgstr "" + +#: ../../qt4/settingsdialog.py:725 +msgid "Redirect stderr to /dev/null in cronjobs." +msgstr "" + +#: ../../qt4/settingsdialog.py:734 msgid "Limit rsync bandwidth usage: " msgstr "" -#: ../../kde4/settingsdialog.py:629 ../../gnome/settingsdialog.glade:2259 +#: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" -#: ../../kde4/settingsdialog.py:634 ../../gnome/settingsdialog.glade:2280 +#: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "Сохранять ACL" -#: ../../kde4/settingsdialog.py:637 ../../gnome/settingsdialog.glade:2297 +#: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "Сохранять дополнительные атрибуты (xattr)" -#: ../../kde4/settingsdialog.py:640 ../../gnome/settingsdialog.glade:2314 +#: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute links)" msgstr "" "Копировать небезопасные ссылки (работает только с абсолютными ссылками)" -#: ../../kde4/settingsdialog.py:643 ../../gnome/settingsdialog.glade:2331 -msgid "Copy links (dereference symbolic links)" -msgstr "Копировать ссылки (разыменование символических ссылок)" - -#: ../../kde4/snapshotsdialog.py:46 ../../kde4/snapshotsdialog.py:173 -#: ../../gnome/snapshotsdialog.glade:385 -msgid "Diff Options" -msgstr "Параметры сравнения" - -#: ../../kde4/snapshotsdialog.py:56 ../../gnome/snapshotsdialog.glade:314 -msgid "Command:" -msgstr "Команда:" +#: ../../qt4/settingsdialog.py:834 +msgid "Paste additional options to rsync" +msgstr "" -#: ../../kde4/snapshotsdialog.py:60 ../../gnome/snapshotsdialog.glade:322 -msgid "Parameters:" -msgstr "Параметры:" +#: ../../qt4/settingsdialog.py:837 +msgid "" +"Options must be quoted e.g. --exclude-from=\"/path/to/my exclude file\"." +msgstr "" -#: ../../kde4/snapshotsdialog.py:64 ../../gnome/snapshotsdialog.glade:334 -msgid "Use %1 and %2 for path parameters" -msgstr "Использовать %1 и %2 для комманды" +#: ../../qt4/settingsdialog.py:847 +msgid "Add prefix to SSH commands" +msgstr "" -#: ../../kde4/snapshotsdialog.py:123 ../../gnome/snapshotsdialog.glade:184 -#: ../../gnome/snapshotsdialog.glade:186 -msgid "Delete" -msgstr "Удалить" +#: ../../qt4/settingsdialog.py:850 +#, python-format +msgid "" +"Prefix to run before every command on remote host.\n" +"Variables need to be escaped with \\$FOO.\n" +"This doesn't touch rsync. So to add a prefix\n" +"for rsync use \"%(cb_rsync_options)s\" with\n" +"%(rsync_options_value)s\n" +"\n" +"%(default)s: %(def_value)s" +msgstr "" -#: ../../kde4/snapshotsdialog.py:128 ../../gnome/snapshotsdialog.glade:199 -#: ../../gnome/snapshotsdialog.glade:201 -msgid "Select All" -msgstr "Выделить всё" +#: ../../qt4/settingsdialog.py:858 ../../qt4/settingsdialog.py:1691 +msgid "default" +msgstr "" -#: ../../kde4/snapshotsdialog.py:132 ../../gnome/snapshotsdialog.glade:88 -msgid "List only different snapshots" -msgstr "Показать только различающиеся снимки состояния" +#: ../../qt4/settingsdialog.py:875 +msgid "Restore Config" +msgstr "" -#: ../../kde4/snapshotsdialog.py:139 ../../gnome/snapshotsdialog.glade:110 -msgid "List only equal snapshots to: " +#: ../../qt4/settingsdialog.py:891 +msgid "" +"Full system backup can only create a snapshot to be restored to the same " +"physical disk(s) with the same disk partitioning as from the source; " +"restoring to new physical disks or the same disks with different " +"partitioning will yield a potentially broken and unusable system.\n" +"\n" +"Full system backup will override some settings that may have been " +"customized. Continue?" msgstr "" -#: ../../kde4/snapshotsdialog.py:149 ../../gnome/snapshotsdialog.glade:146 -msgid "Deep check (more accurate, but slow)" -msgstr "Глубокая проверка (более точная, но медленная)" +#: ../../qt4/settingsdialog.py:922 +msgid "New profile" +msgstr "Новый профиль" -#: ../../kde4/snapshotsdialog.py:174 -msgid "Go To" -msgstr "Перейти к" +#: ../../qt4/settingsdialog.py:938 +msgid "Rename profile" +msgstr "Переименовать профиль" -#: ../../gnome/logviewdialog.glade:9 -msgid "Log View" -msgstr "Просмотр журнала" - -#: ../../gnome/logviewdialog.glade:179 -msgid "scroll down automatic" -msgstr "автоматически прокручивать вниз" - -#: ../../gnome/mainwindow.glade:7 -msgid "Back In Time" -msgstr "Back In Time" - -#: ../../gnome/mainwindow.glade:45 -msgid "Backup Now" -msgstr "Создать резервную копию сейчас" +#: ../../qt4/settingsdialog.py:952 +#, python-format +msgid "Are you sure you want to delete the profile \"%s\" ?" +msgstr "Вы действительно хотите удалить профиль \"%s\"?" -#: ../../gnome/mainwindow.glade:171 -msgid "Shutdown" +#: ../../qt4/settingsdialog.py:1191 +msgid "" +"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " +"*/3 for periodic backups every 3 hours" msgstr "" -#: ../../gnome/mainwindow.glade:287 -msgid "Parent folder" -msgstr "Родительский каталог" +#: ../../qt4/settingsdialog.py:1489 +msgid "Exclude pattern" +msgstr "Исключать папку по шаблону" -#: ../../gnome/mainwindow.glade:327 -msgid "Hidden files" -msgstr "Скрытые файлы" +#: ../../qt4/settingsdialog.py:1502 +msgid "Exclude file" +msgstr "Исключая файл" -#: ../../gnome/mainwindow.glade:451 +#: ../../qt4/settingsdialog.py:1525 +msgid "Include file" +msgstr "Включить файл" + +#: ../../qt4/settingsdialog.py:1533 ../../qt4/settingsdialog.py:1553 +#, python-format msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +"\"%s\" is a symlink. The linked target will not be backed up until you " +"include it, too.\n" +"Would you like to include the symlinks target instead?" msgstr "" -"Эта папка не существует\n" -"в данном снимке!" -#: ../../gnome/settingsdialog.glade:287 -msgid "Where to save snapshots" -msgstr "Куда сохранить резервные копии" - -#: ../../gnome/settingsdialog.glade:483 -msgid "Private key:" +#: ../../qt4/settingsdialog.py:1572 +msgid "Are you sure you want to change snapshots folder ?" msgstr "" +"Вы уверены, что хотите изменить каталог для хранения резервных копий?" -#: ../../gnome/settingsdialog.glade:534 -msgid "Advanced SSH Settings" +#: ../../qt4/settingsdialog.py:1688 +msgid "enabled" msgstr "" -#: ../../gnome/settingsdialog.glade:552 -msgid "SSH Settings" +#: ../../qt4/settingsdialog.py:1690 +msgid "disabled" msgstr "" -#: ../../gnome/settingsdialog.glade:815 -msgid "Password" +#: ../../qt4/settingsdialog.py:1715 +msgid "Restore Settings" msgstr "" -#: ../../gnome/settingsdialog.glade:930 -msgid "Profile Id:" -msgstr "ID профиля:" +#: ../../qt4/settingsdialog.py:1732 +msgid " and add your user to group 'fuse'" +msgstr "" -#: ../../gnome/settingsdialog.glade:1115 +#: ../../qt4/settingsdialog.py:1736 +#, python-format msgid "" -"hours seperate by comma ( e.g. 8,12,18,23) or */3 for periodic backups every " -"3 hours (cron style)" +"Please navigate to the snapshot from which you want to restore %(appName)s's " +"configuration. The path may look like: \n" +"%(samplePath)s\n" +"\n" +"If your snapshots are on a remote drive or if they are encrypted you need to " +"manually mount them first. If you use Mode SSH you also may need to set up " +"public key login to the remote host%(addFuse)s.\n" +"Take a look at 'man backintime'." msgstr "" -#: ../../gnome/settingsdialog.glade:1163 -msgid "Schedule" -msgstr "Расписание" +#: ../../qt4/settingsdialog.py:1794 ../../qt4/settingsdialog.py:1854 +msgid "No config found" +msgstr "" -#: ../../gnome/settingsdialog.glade:1363 -msgid "Highly recommended:" -msgstr "Очень рекомендуется:" +#: ../../qt4/snapshotsdialog.py:49 ../../qt4/snapshotsdialog.py:173 +msgid "Diff Options" +msgstr "Параметры сравнения" + +#: ../../qt4/snapshotsdialog.py:56 +msgid "Command:" +msgstr "Команда:" + +#: ../../qt4/snapshotsdialog.py:60 +msgid "Parameters:" +msgstr "Параметры:" + +#: ../../qt4/snapshotsdialog.py:64 +msgid "Use %1 and %2 for path parameters" +msgstr "Использовать %1 и %2 для комманды" -#: ../../gnome/settingsdialog.glade:1377 -msgid "label" -msgstr "метка" +#: ../../qt4/snapshotsdialog.py:106 +msgid "List only different snapshots" +msgstr "Показать только различающиеся снимки состояния" -#: ../../gnome/settingsdialog.glade:1755 -msgid "week(s)" +#: ../../qt4/snapshotsdialog.py:113 +msgid "List only equal snapshots to: " msgstr "" -#: ../../gnome/settingsdialog.glade:2069 -msgid "Log level:" -msgstr "Уровень журналирования:" +#: ../../qt4/snapshotsdialog.py:123 +msgid "Deep check (more accurate, but slow)" +msgstr "Глубокая проверка (более точная, но медленная)" + +#: ../../qt4/snapshotsdialog.py:144 +msgid "Delete" +msgstr "Удалить" + +#: ../../qt4/snapshotsdialog.py:148 +msgid "Select All" +msgstr "Выделить всё" + +#: ../../qt4/snapshotsdialog.py:161 +msgid "Diff" +msgstr "Различие" + +#: ../../qt4/snapshotsdialog.py:172 +msgid "Go To" +msgstr "Перейти к" -#: ../../gnome/settingsdialog.glade:2121 +#: ../../qt4/snapshotsdialog.py:326 +msgid "You can't compare a snapshot to itself" +msgstr "Нельзя сравнивать резервную копию с саму с собой" + +#: ../../qt4/snapshotsdialog.py:333 +#, python-format +msgid "Command not found: %s" +msgstr "Команда не найдена: %s" + +#: ../../qt4/snapshotsdialog.py:354 +#, python-format msgid "" -"Change these options only if you really know what you are doing !" +"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" msgstr "" -"Изменяйте эти параметры, только если вы точно знаете, что делаете!" -#: ../../gnome/snapshotsdialog.glade:263 -msgid "Diff with" -msgstr "Сравнивать с" +#: ../../qt4/snapshotsdialog.py:357 +#, python-format +msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +msgstr "" -#: ../../gnome/textinputdialog.glade:7 -msgid "Pattern" -msgstr "Шаблон" +#: ../../qt4/snapshotsdialog.py:359 +msgid "WARNING: This can not be revoked!" +msgstr "" -#: ../../gnome/textinputdialog.glade:70 -msgid "Text" -msgstr "Текст" +#: ../../qt4/snapshotsdialog.py:374 +#, python-format +msgid "Exclude \"%s\" from future snapshots?" +msgstr "" diff -Nru backintime-1.0.36/common/po/sk.po backintime-1.1.12/common/po/sk.po --- backintime-1.0.36/common/po/sk.po 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/po/sk.po 2016-01-11 18:07:58.000000000 +0000 @@ -7,208 +7,240 @@ msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-11-09 22:34+0100\n" -"PO-Revision-Date: 2012-01-04 07:43+0000\n" -"Last-Translator: Tomáš Vadina \n" +"POT-Creation-Date: 2015-12-19 00:47+0100\n" +"PO-Revision-Date: 2015-09-09 21:50+0000\n" +"Last-Translator: Back In Time Team \n" "Language-Team: Tomáš Vadina \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 1 : (n>=2 && n<=4) ? 2 : 0;\n" -"X-Launchpad-Export-Date: 2014-08-06 10:20+0000\n" -"X-Generator: Launchpad (build 17147)\n" +"X-Launchpad-Export-Date: 2016-01-11 17:52+0000\n" +"X-Generator: Launchpad (build 17881)\n" "X-Poedit-Country: SLOVAKIA\n" "X-Poedit-Language: Slovak\n" -#: ../../common/config.py:72 +#: ../../common/configfile.py:60 +#, python-format +msgid "Failed to save config: %s" +msgstr "" + +#: ../../common/configfile.py:78 +#, python-format +msgid "Failed to load config: %s" +msgstr "" + +#: ../../common/configfile.py:352 ../../common/configfile.py:414 +#, python-format +msgid "Profile \"%s\" already exists !" +msgstr "Profil \"%s\" už existuje !" + +#: ../../common/configfile.py:383 +msgid "You can't remove the last profile !" +msgstr "Nemôžete odstrániť posledný profil !" + +#: ../../common/config.py:76 msgid "Disabled" msgstr "Zakázané" -#: ../../common/config.py:73 +#: ../../common/config.py:77 msgid "At every boot/reboot" msgstr "Pri každom štarte/reštartu" -#: ../../common/config.py:74 +#: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Každých 5 minút" -#: ../../common/config.py:75 +#: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Každých 10 minút" -#: ../../common/config.py:76 +#: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "" -#: ../../common/config.py:77 +#: ../../common/config.py:81 msgid "Every hour" msgstr "" -#: ../../common/config.py:78 +#: ../../common/config.py:82 msgid "Every 2 hours" msgstr "" -#: ../../common/config.py:79 +#: ../../common/config.py:83 msgid "Every 4 hours" msgstr "" -#: ../../common/config.py:80 +#: ../../common/config.py:84 msgid "Every 6 hours" msgstr "" -#: ../../common/config.py:81 +#: ../../common/config.py:85 msgid "Every 12 hours" msgstr "" -#: ../../common/config.py:82 +#: ../../common/config.py:86 msgid "Custom Hours" msgstr "" -#: ../../common/config.py:83 +#: ../../common/config.py:87 msgid "Every Day" msgstr "Každý deň" -#: ../../common/config.py:84 -msgid "Daily (anacron)" +#: ../../common/config.py:88 +msgid "Repeatedly (anacron)" msgstr "" -#: ../../common/config.py:85 +#: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "" -#: ../../common/config.py:86 +#: ../../common/config.py:90 msgid "Every Week" msgstr "Každý týždeň" -#: ../../common/config.py:87 +#: ../../common/config.py:91 msgid "Every Month" msgstr "Každý mesiac" -#: ../../common/config.py:91 +#: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Dni" -#: ../../common/config.py:92 +#: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Týždne" -#: ../../common/config.py:93 +#: ../../common/config.py:97 msgid "Year(s)" msgstr "Roky" -#: ../../common/config.py:100 +#: ../../common/config.py:101 +msgid "Hour(s)" +msgstr "" + +#: ../../common/config.py:104 +msgid "Month(s)" +msgstr "" + +#: ../../common/config.py:126 ../../qt4/settingsdialog.py:551 msgid " EXPERIMENTAL!" msgstr "" -#: ../../common/config.py:103 +#: ../../common/config.py:129 msgid "Local" msgstr "" -#: ../../common/config.py:104 +#: ../../common/config.py:130 msgid "SSH" msgstr "" -#: ../../common/config.py:104 ../../common/config.py:106 -#: ../../gnome/settingsdialog.py:475 ../../kde4/settingsdialog.py:1325 +#: ../../common/config.py:130 ../../common/config.py:132 +#: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "" -#: ../../common/config.py:105 +#: ../../common/config.py:131 msgid "Local encrypted" msgstr "" -#: ../../common/config.py:105 ../../common/config.py:106 +#: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "" -#: ../../common/config.py:106 +#: ../../common/config.py:132 msgid "SSH encrypted" msgstr "" -#: ../../common/config.py:112 +#: ../../common/config.py:135 msgid "Default" msgstr "" -#: ../../common/config.py:113 +#: ../../common/config.py:136 msgid "AES128-CTR" msgstr "" -#: ../../common/config.py:114 +#: ../../common/config.py:137 msgid "AES192-CTR" msgstr "" -#: ../../common/config.py:115 +#: ../../common/config.py:138 msgid "AES256-CTR" msgstr "" -#: ../../common/config.py:116 +#: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "" -#: ../../common/config.py:117 +#: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "" -#: ../../common/config.py:118 +#: ../../common/config.py:141 msgid "AES128-CBC" msgstr "" -#: ../../common/config.py:119 +#: ../../common/config.py:142 msgid "3DES-CBC" msgstr "" -#: ../../common/config.py:120 +#: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "" -#: ../../common/config.py:121 +#: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "" -#: ../../common/config.py:122 +#: ../../common/config.py:145 msgid "AES192-CBC" msgstr "" -#: ../../common/config.py:123 +#: ../../common/config.py:146 msgid "AES256-CBC" msgstr "" -#: ../../common/config.py:124 +#: ../../common/config.py:147 msgid "ARCFOUR" msgstr "" -#: ../../common/config.py:129 +#: ../../common/config.py:153 msgid "Main profile" msgstr "Hlavný profil" -#: ../../common/config.py:256 ../../common/config.py:275 -#: ../../common/config.py:286 ../../common/config.py:291 +#: ../../common/config.py:289 ../../common/config.py:296 +#: ../../common/config.py:307 ../../common/config.py:312 +#: ../../qt4/qt4systrayicon.py:61 #, python-format msgid "Profile: \"%s\"" msgstr "Profil: \"%s\"" -#: ../../common/config.py:256 +#: ../../common/config.py:289 msgid "Snapshots folder is not valid !" msgstr "Priečinok snímok nie je platný !" -#: ../../common/config.py:275 +#: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "Musíte vybrať aspoň jeden priečinok pre zálohovanie!" -#: ../../common/config.py:286 +#: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "Nemožno zahrnúť priečinok zálohy !" -#: ../../common/config.py:291 +#: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "Nemožno zahrnúť podpriečinok zálohy !" -#: ../../common/config.py:361 +#: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s nie je priečinok !" -#: ../../common/config.py:376 ../../common/config.py:389 +#: ../../common/config.py:380 +msgid "Host/User/Profile-ID must not be empty!" +msgstr "" + +#: ../../common/config.py:388 ../../common/config.py:420 #, python-format msgid "" "Can't write to: %s\n" @@ -217,59 +249,68 @@ "Nie je možné zapisovať do: %s\n" "Určite máte právo na zápis ?" -#: ../../common/config.py:1286 +#: ../../common/config.py:400 +#, python-format msgid "" -"Can't find crontab.\n" -"Are you sure cron is installed ?\n" -"If not you should disable all automatic backups." +"Destination filesystem for '%(path)s' is formatted with FAT which doesn't " +"support hard-links. Please use a native Linux filesystem." msgstr "" -"Nemožno nájsť crontab.\n" -"Ste si istí, že je nainštalovaný ?\n" -"Ak nie, mali by ste vypnúť všetky automatické zálohovania." -#: ../../common/config.py:1338 +#: ../../common/config.py:405 #, python-format -msgid "Schedule udev doesn't work with mode %s" +msgid "" +"Destination filsystem for '%(path)s' is a SMB mounted share. Please make " +"sure the remote SMB server supports symlinks or activate '%(copyLinks)s' in " +"'%(expertOptions)s'." msgstr "" -#: ../../common/config.py:1342 -#, python-format -msgid "Couldn't find UUID for \"%s\"" -msgstr "" +#: ../../common/config.py:408 ../../qt4/settingsdialog.py:815 +msgid "Copy links (dereference symbolic links)" +msgstr "Kopírovať odkazy (znefunkční symbolické odkazy)" -#: ../../common/config.py:1379 -msgid "Failed to remove udev rules" -msgstr "" +#: ../../common/config.py:409 ../../qt4/settingsdialog.py:669 +msgid "Expert Options" +msgstr "Možnosti expertov" -#: ../../common/config.py:1385 -msgid "Failed to create udev rules" +#: ../../common/config.py:411 +#, python-format +msgid "" +"Destination filesystem for '%(path)s is a sshfs mounted share. sshfs doesn't " +"support hard-links. Please use mode 'SSH' instead." msgstr "" -#: ../../common/config.py:1420 +#: ../../common/config.py:1407 msgid "" -"Can't find anacron.\n" -"Are you sure anacron is installed ?\n" -"If not you should disable daily anacron backups." +"Can't find crontab.\n" +"Are you sure cron is installed ?\n" +"If not you should disable all automatic backups." msgstr "" +"Nemožno nájsť crontab.\n" +"Ste si istí, že je nainštalovaný ?\n" +"Ak nie, mali by ste vypnúť všetky automatické zálohovania." -#: ../../common/config.py:1439 -msgid "Please provide your sudo password to install the udev rule." +#: ../../common/config.py:1411 +msgid "Failed to write new crontab." msgstr "" -#: ../../common/config.py:1445 -msgid "Please provide your sudo password to remove unused udev rules." +#: ../../common/config.py:1505 +#, python-format +msgid "" +"Could not install Udev rule for profile %(profile_id)s. DBus Service " +"'%(dbus_interface)s' wasn't available" msgstr "" -#: ../../common/configfile.py:253 ../../common/configfile.py:315 +#: ../../common/config.py:1517 #, python-format -msgid "Profile \"%s\" already exists !" -msgstr "Profil \"%s\" už existuje !" +msgid "Schedule udev doesn't work with mode %s" +msgstr "" -#: ../../common/configfile.py:284 -msgid "You can't remove the last profile !" -msgstr "Nemôžete odstrániť posledný profil !" +#: ../../common/config.py:1526 +#, python-format +msgid "Couldn't find UUID for \"%s\"" +msgstr "" -#: ../../common/encfstools.py:95 +#: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" @@ -277,38 +318,38 @@ "%(error)s" msgstr "" -#: ../../common/encfstools.py:105 +#: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "" -#: ../../common/encfstools.py:149 +#: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "" -#: ../../common/encfstools.py:153 +#: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" -#: ../../common/encfstools.py:154 +#: ../../common/encfstools.py:171 msgid "Cancel" msgstr "" -#: ../../common/encfstools.py:157 +#: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "" -#: ../../common/encfstools.py:161 +#: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "" -#: ../../common/encfstools.py:166 +#: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" -#: ../../common/encfstools.py:174 ../../common/sshtools.py:207 +#: ../../common/encfstools.py:196 ../../common/sshtools.py:262 #, python-format msgid "" "%(user)s is not member of group 'fuse'.\n" @@ -316,63 +357,66 @@ "Look at 'man backintime' for further instructions." msgstr "" -#: ../../common/encfstools.py:189 +#: ../../common/encfstools.py:211 msgid "" "encfs version 1.7.2 and before has a bug with option --reverse. Please " "update encfs" msgstr "" -#: ../../common/encfstools.py:453 ../../common/encfstools.py:480 -#: ../../common/snapshots.py:982 ../../common/snapshots.py:1288 -#: ../../kde4/app.py:82 ../../gnome/mainwindow.glade:43 +#: ../../common/encfstools.py:512 ../../common/snapshots.py:1131 +#: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "Urobiť snímku" -#: ../../common/mount.py:195 +#: ../../common/mount.py:204 #, python-format msgid "" "Hash collision occurred in hash_id %s. Incrementing global value " "hash_collision and try again." msgstr "" -#: ../../common/mount.py:246 +#: ../../common/mount.py:259 #, python-format msgid "mountpoint %s not empty." msgstr "" -#: ../../common/mount.py:286 +#: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" -#: ../../common/password.py:425 +#: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" -#: ../../common/snapshots.py:171 ../../gnome/app.py:1127 -#: ../../kde4/app.py:1014 +#: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Teraz" -#: ../../common/snapshots.py:182 ../../gnome/gnometools.py:37 +#: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "S CHYBAMI!" -#: ../../common/snapshots.py:282 +#: ../../common/snapshots.py:344 msgid "" "### This log has been decoded with automatic search pattern\n" "### If some paths are not decoded you can manually decode them with:\n" msgstr "" -#: ../../common/snapshots.py:465 +#: ../../common/snapshots.py:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "" -#: ../../common/snapshots.py:564 +#: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "" -#: ../../common/snapshots.py:739 +#: ../../common/snapshots.py:752 ../../qt4/app.py:377 ../../qt4/app.py:675 +#: ../../qt4/app.py:692 ../../qt4/qt4systrayicon.py:65 +msgid "Done" +msgstr "Dokončené" + +#: ../../common/snapshots.py:860 msgid "" "Back In Time changed its backup format.\n" "\n" @@ -382,7 +426,7 @@ "\n" "Vaše staré snímky môžu byť presunuté do tohto nového formátu. OK?" -#: ../../common/snapshots.py:749 +#: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" @@ -400,7 +444,7 @@ "\n" "(Program bude naďalej rozlišovať medzi nimi)" -#: ../../common/snapshots.py:752 +#: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" @@ -408,7 +452,7 @@ "Nebol nájdený profil. Bude najprv aktualizovaný profil, prosím reštartujte " "Back In Time" -#: ../../common/snapshots.py:803 +#: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" @@ -421,7 +465,7 @@ "cannot continue taking snapshots" msgstr "" -#: ../../common/snapshots.py:812 +#: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" @@ -436,7 +480,7 @@ "Môžete manuálne premiestňovať snímky, \n" "pokiaľ ste dokončili reštart Back In Time." -#: ../../common/snapshots.py:825 +#: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" @@ -445,7 +489,7 @@ "Aktualizácia bola dokončená!\n" "Back In Time bude znova pokračovať vo vytváraní snímok podľa plánu" -#: ../../common/snapshots.py:830 +#: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" @@ -465,11 +509,11 @@ "\n" "Ak nie, program sa spýta nabudúce znovu po štarte Back In Time." -#: ../../common/snapshots.py:839 +#: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "Back In Time bude znova pokračovať vo vytváraní snímok podľa plánu" -#: ../../common/snapshots.py:841 +#: ../../common/snapshots.py:953 msgid "" "Back In Time still cannot continue taking new snapshots.\n" "Restart Back In Time to see the questions again" @@ -477,7 +521,11 @@ "Back In Time stále nemôže pokračovať vo vytváraní nových snímok.\n" "Reštartujte Back In Time pre opätovné zobrazenie otázky" -#: ../../common/snapshots.py:913 +#: ../../common/snapshots.py:972 +msgid "Deferring backup while on battery" +msgstr "" + +#: ../../common/snapshots.py:1035 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it." @@ -485,7 +533,7 @@ "Nie je možné nájsť priečinok snímok.\n" "Ak je na prenosnom médiu prosím vložte ho." -#: ../../common/snapshots.py:915 +#: ../../common/snapshots.py:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." @@ -493,149 +541,156 @@ msgstr[1] "Čakajte %s sekundu." msgstr[2] "Čakajte %s sekundy." -#: ../../common/snapshots.py:941 +#: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "Zlyhalo vytváranie snímky %s !!!" -#: ../../common/snapshots.py:950 +#: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "Dokončovanie" -#: ../../common/snapshots.py:1088 +#: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "Nemožno vytvoriť priečinok: %s" -#: ../../common/snapshots.py:1107 +#: ../../common/snapshots.py:1217 msgid "..." msgstr "..." -#: ../../common/snapshots.py:1134 +#: ../../common/snapshots.py:1238 +#, python-format +msgid "Found leftover '%s' which can be continued." +msgstr "" + +#: ../../common/snapshots.py:1250 +#, python-format +msgid "Remove leftover '%s' folder from last run" +msgstr "" + +#: ../../common/snapshots.py:1263 #, python-format msgid "Can't remove folder: %s" msgstr "Nemožno odstrániť priečinok: %s" -#: ../../common/snapshots.py:1219 +#: ../../common/snapshots.py:1340 #, python-format msgid "Compare with snapshot %s" msgstr "Porovnať so snímkou %s" -#: ../../common/snapshots.py:1248 +#: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "Vytvoriť hard-linky" -#: ../../common/snapshots.py:1335 +#: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "Uložiť konfiguračný súbor" -#: ../../common/snapshots.py:1341 +#: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "Uložiť práva ..." -#: ../../common/snapshots.py:1442 +#: ../../common/snapshots.py:1470 +msgid "Save permission over ssh failed. Retry normal method" +msgstr "" + +#: ../../common/snapshots.py:1521 #, python-format msgid "Can't rename %(new_path)s to %(path)s" msgstr "" -#: ../../common/snapshots.py:1562 -msgid "Remove old snapshots" -msgstr "Odstrániť staré snímky" - -#: ../../common/snapshots.py:1586 ../../kde4/settingsdialog.py:501 -#: ../../gnome/settingsdialog.glade:1660 +#: ../../common/snapshots.py:1695 ../../common/snapshots.py:1728 +#: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "Šikovné odstránenie" -#: ../../common/snapshots.py:1591 +#: ../../common/snapshots.py:1704 +msgid "Remove old snapshots" +msgstr "Odstrániť staré snímky" + +#: ../../common/snapshots.py:1733 msgid "Try to keep min free space" msgstr "Snažiť sa udržať minimálne voĺné miesto" -#: ../../common/snapshots.py:1621 +#: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" -#: ../../common/sshtools.py:106 +#: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "" -#: ../../common/sshtools.py:113 +#: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "" -#: ../../common/sshtools.py:187 -#, python-format -msgid "" -"Failed to unlock SSH private key:\n" -"Error: %s" -msgstr "" - -#: ../../common/sshtools.py:194 +#: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" -#: ../../common/sshtools.py:199 +#: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" -#: ../../common/sshtools.py:217 +#: ../../common/sshtools.py:278 #, python-format msgid "" "Password-less authentication for %(user)s@%(host)s failed. Look at 'man " "backintime' for further instructions." msgstr "" -#: ../../common/sshtools.py:229 +#: ../../common/sshtools.py:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" -#: ../../common/sshtools.py:254 +#: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" -#: ../../common/sshtools.py:274 +#: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" -#: ../../common/sshtools.py:276 +#: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:278 +#: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:280 +#: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" -#: ../../common/sshtools.py:302 +#: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" -#: ../../common/sshtools.py:325 ../../common/sshtools.py:383 +#: ../../common/sshtools.py:423 ../../common/sshtools.py:553 #, python-format msgid "" "Remote host %(host)s doesn't support '%(command)s':\n" @@ -643,7 +698,7 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:387 +#: ../../common/sshtools.py:556 #, python-format msgid "" "Check commands on host %(host)s returned unknown error:\n" @@ -651,96 +706,149 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:400 +#: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "" -#: ../../gnome/app.py:185 ../../gnome/app.py:594 ../../gnome/app.py:608 -#: ../../kde4/app.py:299 ../../kde4/app.py:570 ../../kde4/app.py:587 -msgid "Done" -msgstr "Dokončené" +#: ../../qt4/app.py:81 +msgid "Refresh snapshots list" +msgstr "Obnoviť zoznam snímok" + +#: ../../qt4/app.py:85 ../../qt4/app.py:890 +msgid "Snapshot Name" +msgstr "Názov snímky" + +#: ../../qt4/app.py:88 +msgid "Remove Snapshot" +msgstr "Odstrániť snímku" + +#: ../../qt4/app.py:91 +msgid "View Snapshot Log" +msgstr "Zobraziť záznam snímok" + +#: ../../qt4/app.py:94 +msgid "View Last Log" +msgstr "Zobraziť posledný log" + +#: ../../qt4/app.py:99 ../../qt4/settingsdialog.py:51 +msgid "Settings" +msgstr "Nastavenia" + +#: ../../qt4/app.py:104 +msgid "Shutdown" +msgstr "" -#: ../../gnome/app.py:189 ../../kde4/app.py:143 ../../kde4/app.py:159 -#: ../../gnome/mainwindow.glade:225 +#: ../../qt4/app.py:105 +msgid "Shutdown system after snapshot has finished." +msgstr "" + +#: ../../qt4/app.py:111 +msgid "Exit" +msgstr "Ukončiť" + +#: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 msgid "Help" msgstr "Pomocník" -#: ../../gnome/app.py:191 ../../kde4/app.py:146 -#: ../../gnome/mainwindow.glade:223 +#: ../../qt4/app.py:122 +msgid "Config File Help" +msgstr "" + +#: ../../qt4/app.py:125 msgid "Website" msgstr "Webová stránka" -#: ../../gnome/app.py:192 ../../kde4/app.py:148 +#: ../../qt4/app.py:127 ../../qt4/app.py:982 +msgid "Changelog" +msgstr "" + +#: ../../qt4/app.py:129 msgid "FAQ" msgstr "" -#: ../../gnome/app.py:193 ../../kde4/app.py:150 +#: ../../qt4/app.py:131 msgid "Ask a question" msgstr "" -#: ../../gnome/app.py:194 ../../kde4/app.py:152 +#: ../../qt4/app.py:133 msgid "Report a bug" msgstr "" -#: ../../gnome/app.py:196 ../../kde4/app.py:155 +#: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "O programe" -#: ../../gnome/app.py:202 ../../gnome/app.py:887 -#: ../../gnome/restoredialog.py:84 ../../gnome/snapshotsdialog.py:83 -#: ../../gnome/snapshotsdialog.py:244 ../../kde4/app.py:206 -#: ../../kde4/app.py:216 ../../kde4/restoredialog.py:68 -#: ../../kde4/snapshotsdialog.py:111 ../../kde4/snapshotsdialog.py:117 -#: ../../gnome/mainwindow.glade:350 ../../gnome/mainwindow.glade:352 -#: ../../gnome/snapshotsdialog.glade:169 ../../gnome/snapshotsdialog.glade:171 +#: ../../qt4/app.py:163 +msgid "Up" +msgstr "Hore" + +#: ../../qt4/app.py:174 ../../qt4/settingsdialog.py:1776 +msgid "Show hidden files" +msgstr "Ukázať skryté súbory" + +#: ../../qt4/app.py:184 ../../qt4/app.py:199 ../../qt4/app.py:233 +#: ../../qt4/restoredialog.py:62 ../../qt4/settingsdialog.py:1818 +#: ../../qt4/snapshotsdialog.py:134 ../../qt4/snapshotsdialog.py:139 msgid "Restore" msgstr "Obnoviť" -#: ../../gnome/app.py:203 ../../gnome/app.py:888 ../../gnome/gnometools.py:67 -#: ../../gnome/snapshotsdialog.py:84 ../../gnome/snapshotsdialog.py:245 -#: ../../kde4/app.py:208 ../../kde4/restoredialog.py:42 -#: ../../kde4/snapshotsdialog.py:113 +#: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 +#: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "" -#: ../../gnome/app.py:205 ../../gnome/app.py:896 ../../gnome/app.py:1146 -#: ../../kde4/app.py:1041 -#, python-format -msgid "Restore '%s'" +#: ../../qt4/app.py:194 +msgid "Restore and delete new files" msgstr "" -#: ../../gnome/app.py:207 ../../gnome/app.py:897 ../../gnome/app.py:1147 -#: ../../kde4/app.py:1042 +#: ../../qt4/app.py:201 #, python-format -msgid "Restore '%s' to ..." +msgid "" +"Restore selected file or folder.\n" +"If this button is grayed out this is most likely because \"%(now)s\" is " +"selected in left hand snapshots list." +msgstr "" + +#: ../../qt4/app.py:206 ../../qt4/logviewdialog.py:67 +#: ../../qt4/qt4tools.py:160 ../../qt4/snapshotsdialog.py:96 +msgid "Snapshots" +msgstr "Snímky" + +#: ../../qt4/app.py:213 +msgid "Snapshot" +msgstr "" + +#: ../../qt4/app.py:224 +msgid "View" msgstr "" -#: ../../gnome/app.py:226 ../../kde4/app.py:235 +#: ../../qt4/app.py:277 msgid "Shortcuts" msgstr "Skratky" -#: ../../gnome/app.py:249 -msgid "Name" -msgstr "Názov" - -#: ../../gnome/app.py:260 -msgid "Size" -msgstr "Veľkosť" - -#: ../../gnome/app.py:267 -msgid "Date" -msgstr "Dátum" - -#: ../../gnome/app.py:286 ../../gnome/app.py:883 -#: ../../gnome/snapshotsdialog.py:116 ../../kde4/app.py:171 -#: ../../kde4/app.py:221 ../../kde4/snapshotsdialog.py:91 -#: ../../gnome/mainwindow.glade:366 ../../gnome/mainwindow.glade:368 -#: ../../gnome/snapshotsdialog.glade:8 -msgid "Snapshots" -msgstr "Snímky" +#: ../../qt4/app.py:295 +msgid "" +"This folder doesn't exist\n" +"in the current selected snapshot!" +msgstr "" + +#: ../../qt4/app.py:359 +msgid "Add to Include" +msgstr "" + +#: ../../qt4/app.py:360 +msgid "Add to Exclude" +msgstr "" + +#: ../../qt4/app.py:416 +#, python-format +msgid "" +"%(appName)s is not configured. Would you like to restore a previous " +"configuration?" +msgstr "" -#: ../../gnome/app.py:348 ../../kde4/app.py:362 +#: ../../qt4/app.py:440 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it and then press OK" @@ -748,730 +856,791 @@ "Nie je možné nájsť priečinok snímok.\n" "Ak je na prenosnom médiu prosím vložte ho a potom stlačte OK" -#: ../../gnome/app.py:611 ../../kde4/app.py:590 -msgid "Done, no backup needed" -msgstr "Dokončené, záloha nie je potrebná" +#: ../../qt4/app.py:473 +msgid "" +"If you close this window Back In Time will not be able to shutdown your " +"system when the snapshot has finished.\n" +"Do you really want to close?" +msgstr "" -#: ../../gnome/app.py:619 ../../kde4/app.py:598 +#: ../../qt4/app.py:667 ../../qt4/app.py:703 msgid "Working:" msgstr "Prebieha:" -#: ../../gnome/app.py:623 ../../kde4/app.py:602 +#: ../../qt4/app.py:695 +msgid "Done, no backup needed" +msgstr "Dokončené, záloha nie je potrebná" + +#: ../../qt4/app.py:707 msgid "Error:" msgstr "Chyba:" -#: ../../gnome/app.py:636 ../../kde4/app.py:649 +#: ../../qt4/app.py:726 ../../qt4/qt4systrayicon.py:153 +msgid "Sent:" +msgstr "" + +#: ../../qt4/app.py:727 ../../qt4/qt4systrayicon.py:154 +msgid "Speed:" +msgstr "" + +#: ../../qt4/app.py:728 ../../qt4/qt4systrayicon.py:155 +msgid "ETA:" +msgstr "" + +#: ../../qt4/app.py:777 msgid "Global" msgstr "Globálne" -#: ../../gnome/app.py:637 ../../kde4/app.py:650 +#: ../../qt4/app.py:778 msgid "Root" msgstr "Koreňový priečinok" -#: ../../gnome/app.py:638 ../../kde4/app.py:651 +#: ../../qt4/app.py:779 msgid "Home" msgstr "Domovský priečinok" -#: ../../gnome/app.py:662 -msgid "Bookmarks" -msgstr "Záložky" - -#: ../../gnome/app.py:675 ../../kde4/app.py:662 +#: ../../qt4/app.py:794 msgid "Backup folders" msgstr "Priečinky zálohy" -#: ../../gnome/app.py:701 ../../kde4/app.py:734 -msgid "Today" -msgstr "Dnes" +#: ../../qt4/app.py:849 +msgid "This is NOT a snapshot but a live view of your local files" +msgstr "" -#: ../../gnome/app.py:705 ../../kde4/app.py:738 -msgid "Yesterday" -msgstr "Včera" +#: ../../qt4/app.py:860 ../../qt4/app.py:1476 +#, python-format +msgid "Last check %s" +msgstr "" -#: ../../gnome/app.py:709 ../../kde4/app.py:742 -msgid "This week" -msgstr "Tento týždeň" +#: ../../qt4/app.py:928 +#, python-format +msgid "" +"Are you sure you want to remove the snapshot:\n" +"%s" +msgstr "" +"Ste si istí, že chcete odstrániť snímku:\n" +"%s" -#: ../../gnome/app.py:713 ../../kde4/app.py:746 -msgid "Last week" -msgstr "Minulý týždeň" +#: ../../qt4/app.py:1004 +#, python-format +msgid "" +"Backup local files before overwriting or\n" +"removing with trailing '%(suffix)s'." +msgstr "" -#: ../../gnome/app.py:764 ../../kde4/app.py:398 +#: ../../qt4/app.py:1010 msgid "" -"If you close this window Back In Time will not be able to shutdown your " -"system when the snapshot has finished.\n" -"Do you really want to close?" +"Are you sure you want to remove all newer files in your original folder?" msgstr "" -#: ../../gnome/app.py:881 ../../gnome/snapshotsdialog.py:238 -msgid "Open" -msgstr "Otvoriť" +#: ../../qt4/app.py:1014 +msgid "" +"WARNING: deleting files in filesystem root could break your whole system!!!" +msgstr "" -#: ../../gnome/app.py:1056 ../../kde4/app.py:90 ../../kde4/app.py:805 -#: ../../gnome/mainwindow.glade:73 ../../gnome/mainwindow.glade:75 -msgid "Snapshot Name" -msgstr "Názov snímky" +#: ../../qt4/app.py:1016 +msgid "Files to be restored:" +msgstr "" -#: ../../gnome/app.py:1075 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +#: ../../qt4/app.py:1031 +msgid "Do you really want to restore this files(s):" msgstr "" -"Ste si istý, že chcete odstrániť snímku:\n" -"%s" -#: ../../gnome/app.py:1123 ../../kde4/app.py:1010 +#: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "Snímka: %s" -#: ../../gnome/app.py:1124 ../../kde4/app.py:1011 +#: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "Zobraziť snímku vytvorenú %s" -#: ../../gnome/app.py:1126 ../../kde4/app.py:1013 +#: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "Zobraziť aktuálny obsah disku" -#: ../../gnome/logviewdialog.py:106 ../../gnome/settingsdialog.py:414 -#: ../../kde4/logviewdialog.py:83 ../../kde4/settingsdialog.py:590 +#: ../../qt4/app.py:1268 +#, python-format +msgid "Restore '%s'" +msgstr "" + +#: ../../qt4/app.py:1269 +#, python-format +msgid "Restore '%s' to ..." +msgstr "" + +#: ../../qt4/app.py:1270 +#, python-format +msgid "Restore '%s' and delete new files" +msgstr "" + +#: ../../qt4/app.py:1368 ../../qt4/app.py:1385 +msgid "Authors" +msgstr "" + +#: ../../qt4/app.py:1369 ../../qt4/app.py:1388 +msgid "Translations" +msgstr "" + +#: ../../qt4/app.py:1370 ../../qt4/app.py:1391 +msgid "License" +msgstr "" + +#: ../../qt4/logviewdialog.py:49 +msgid "Last Log View" +msgstr "" + +#: ../../qt4/logviewdialog.py:51 +msgid "Snapshot Log View" +msgstr "" + +#: ../../qt4/logviewdialog.py:59 ../../qt4/settingsdialog.py:59 +#: ../../qt4/settingsdialog.py:274 ../../qt4/settingsdialog.py:1899 +msgid "Profile:" +msgstr "Profil:" + +#: ../../qt4/logviewdialog.py:81 +msgid "Filter:" +msgstr "Filter:" + +#: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 msgid "All" msgstr "Všetko" -#: ../../gnome/logviewdialog.py:107 ../../gnome/settingsdialog.py:412 -#: ../../kde4/logviewdialog.py:84 ../../kde4/settingsdialog.py:588 +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 +#: ../../qt4/settingsdialog.py:657 msgid "Errors" msgstr "Chyby" -#: ../../gnome/logviewdialog.py:112 ../../kde4/logviewdialog.py:89 +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 msgid "Changes" msgstr "Zmeny" -#: ../../gnome/logviewdialog.py:115 ../../kde4/logviewdialog.py:92 +#: ../../qt4/logviewdialog.py:92 msgid "Informations" msgstr "Informácie" -#: ../../gnome/settingsdialog.py:235 ../../kde4/settingsdialog.py:387 -msgid "Include files and folders" -msgstr "Zahrňuje súbory a priečinky" +#: ../../qt4/logviewdialog.py:101 +msgid "[E] Error, [I] Information, [C] Change" +msgstr "[E] Chyba, [I] Informácia, [C] Zmena" -#: ../../gnome/settingsdialog.py:264 -msgid "Exclude patterns, files or folders" -msgstr "Nazahrňovať vzory, súbory alebo priečinky" - -#: ../../gnome/settingsdialog.py:411 ../../kde4/settingsdialog.py:587 -msgid "None" -msgstr "Žiadne" - -#: ../../gnome/settingsdialog.py:413 ../../kde4/settingsdialog.py:589 -msgid "Changes & Errors" -msgstr "Zmeny a chyby" - -#: ../../gnome/settingsdialog.py:458 -msgid "Snapshots folder" -msgstr "Priečinok snímok" - -#: ../../gnome/settingsdialog.py:466 ../../kde4/settingsdialog.py:1314 -msgid "Are you sure you want to change snapshots folder ?" -msgstr "Ste si istí, že chcete zmeniť priečinok snímok?" - -#: ../../gnome/settingsdialog.py:901 ../../kde4/settingsdialog.py:914 -msgid "" -"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " -"*/3 for periodic backups every 3 hours" -msgstr "" - -#: ../../gnome/settingsdialog.py:1141 ../../kde4/settingsdialog.py:653 -msgid "New profile" -msgstr "Nový profil" - -#: ../../gnome/settingsdialog.py:1155 ../../kde4/settingsdialog.py:669 -msgid "Rename profile" -msgstr "Premenovať profil" - -#: ../../gnome/settingsdialog.py:1167 ../../kde4/settingsdialog.py:683 -#, python-format -msgid "Are you sure you want to delete the profile \"%s\" ?" -msgstr "Určite chcete vymazať profil \"%s\" ?" - -#: ../../gnome/settingsdialog.py:1173 ../../kde4/settingsdialog.py:1292 -msgid "Include folder" -msgstr "Zahrnúť priečinok" - -#: ../../gnome/settingsdialog.py:1193 ../../kde4/settingsdialog.py:1278 -msgid "Include file" -msgstr "Zahrnúť súbor" - -#: ../../gnome/settingsdialog.py:1235 ../../kde4/settingsdialog.py:1241 -msgid "Exclude pattern" -msgstr "Vylúčiť vzor" - -#: ../../gnome/settingsdialog.py:1240 ../../kde4/settingsdialog.py:1251 -msgid "Exclude patterns can't contain ':' char !" -msgstr "Vylúčiť vzory obsahujúce znak ':' !" - -#: ../../gnome/settingsdialog.py:1246 ../../kde4/settingsdialog.py:1257 -msgid "Exclude file" -msgstr "Vylúčiť súbor" - -#: ../../gnome/settingsdialog.py:1257 ../../kde4/settingsdialog.py:1261 -msgid "Exclude folder" -msgstr "Vylúčiť priečinok" - -#: ../../gnome/snapshotsdialog.py:240 -msgid "Jump to" -msgstr "" - -#: ../../gnome/snapshotsdialog.py:248 ../../kde4/snapshotsdialog.py:164 -msgid "Diff" -msgstr "Rozdiel" - -#: ../../gnome/snapshotsdialog.py:277 ../../kde4/snapshotsdialog.py:339 -msgid "You can't compare a snapshot to itself" -msgstr "Nemôžete porovnávať snímku s ňou samou" - -#: ../../gnome/snapshotsdialog.py:284 ../../kde4/snapshotsdialog.py:346 -#, python-format -msgid "Command not found: %s" -msgstr "Príkaz nenájdený: %s" - -#: ../../gnome/snapshotsdialog.py:307 ../../kde4/snapshotsdialog.py:367 -#, python-format -msgid "" -"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" +#: ../../qt4/logviewdialog.py:104 +msgid "decode paths" msgstr "" -#: ../../gnome/snapshotsdialog.py:310 ../../kde4/snapshotsdialog.py:370 -#, python-format -msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +#: ../../qt4/messagebox.py:56 +msgid "Error" msgstr "" -#: ../../gnome/snapshotsdialog.py:312 ../../kde4/snapshotsdialog.py:372 -msgid "WARNING: This can not be revoked!" +#: ../../qt4/messagebox.py:62 ../../qt4/messagebox.py:68 +msgid "Question" msgstr "" -#: ../../gnome/snapshotsdialog.py:317 ../../kde4/snapshotsdialog.py:377 -#, python-format -msgid "Exclude \"%s\" from future snapshots?" +#: ../../qt4/qt4systrayicon.py:69 +msgid "Start BackInTime" msgstr "" -#: ../../kde4/app.py:86 ../../gnome/mainwindow.glade:58 -#: ../../gnome/mainwindow.glade:60 -msgid "Refresh snapshots list" -msgstr "Obnoviť zoznam snímok" +#: ../../qt4/qt4systrayicon.py:124 +msgid "Working..." +msgstr "Prebieha..." -#: ../../kde4/app.py:94 ../../gnome/mainwindow.glade:88 -#: ../../gnome/mainwindow.glade:90 -msgid "Remove Snapshot" -msgstr "Odstrániť snímku" +#: ../../qt4/qt4tools.py:178 +msgid "Today" +msgstr "Dnes" -#: ../../kde4/app.py:98 ../../gnome/mainwindow.glade:105 -msgid "View Snapshot Log" -msgstr "Zobraziť záznam snímok" +#: ../../qt4/qt4tools.py:183 +msgid "Yesterday" +msgstr "Včera" -#: ../../kde4/app.py:102 ../../gnome/mainwindow.glade:121 -msgid "View Last Log" -msgstr "Zobraziť posledný log" +#: ../../qt4/qt4tools.py:188 +msgid "This week" +msgstr "Tento týždeň" -#: ../../kde4/app.py:108 ../../kde4/settingsdialog.py:69 -#: ../../gnome/mainwindow.glade:144 ../../gnome/mainwindow.glade:146 -#: ../../gnome/settingsdialog.glade:7 -msgid "Settings" -msgstr "Nastavenia" +#: ../../qt4/qt4tools.py:193 +msgid "Last week" +msgstr "Minulý týždeň" -#: ../../kde4/app.py:124 ../../gnome/mainwindow.glade:169 -msgid "Shutdown system after snapshot has finished." +#: ../../qt4/restoredialog.py:75 +msgid "Show full Log" msgstr "" -#: ../../kde4/app.py:131 ../../gnome/mainwindow.glade:184 -#: ../../gnome/mainwindow.glade:186 -msgid "Exit" -msgstr "Ukončiť" - -#: ../../kde4/app.py:186 ../../gnome/mainwindow.glade:289 -msgid "Up" -msgstr "Hore" - -#: ../../kde4/app.py:199 ../../gnome/mainwindow.glade:325 -msgid "Show hidden files" -msgstr "Ukázať skryté súbory" +#: ../../qt4/settingsdialog.py:68 +msgid "Edit" +msgstr "Editovať" -#: ../../kde4/app.py:244 -msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +#: ../../qt4/settingsdialog.py:73 +msgid "Modify for Full System Backup" msgstr "" -"Tento priečinok neexistuje\n" -"v aktuálnej snímke !" -#: ../../kde4/app.py:839 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +#: ../../qt4/settingsdialog.py:77 ../../qt4/settingsdialog.py:451 +msgid "Add" msgstr "" -"Ste si istí, že chcete odstrániť snímku:\n" -"%s" - -#: ../../kde4/app.py:1140 ../../kde4/kde4systrayicon.py:117 -msgid "Working..." -msgstr "Prebieha..." -#: ../../kde4/logviewdialog.py:55 -msgid "Error Log View" -msgstr "Zobrazenie chybového logu" - -#: ../../kde4/logviewdialog.py:65 ../../kde4/settingsdialog.py:79 -#: ../../kde4/settingsdialog.py:293 ../../gnome/logviewdialog.glade:73 -#: ../../gnome/settingsdialog.glade:72 -msgid "Profile:" -msgstr "Profil:" - -#: ../../kde4/logviewdialog.py:77 ../../gnome/logviewdialog.glade:110 -msgid "Filter:" -msgstr "Filter:" - -#: ../../kde4/logviewdialog.py:100 ../../gnome/logviewdialog.glade:169 -msgid "[E] Error, [I] Information, [C] Change" -msgstr "[E] Chyba, [I] Informácia, [C] Zmena" - -#: ../../kde4/logviewdialog.py:103 ../../gnome/logviewdialog.glade:195 -msgid "decode paths" +#: ../../qt4/settingsdialog.py:81 ../../qt4/settingsdialog.py:408 +#: ../../qt4/settingsdialog.py:467 +msgid "Remove" msgstr "" -#: ../../kde4/settingsdialog.py:88 -msgid "Edit" -msgstr "Editovať" - -#: ../../kde4/settingsdialog.py:106 ../../gnome/settingsdialog.glade:1207 +#: ../../qt4/settingsdialog.py:96 msgid "General" msgstr "Hlavné" -#: ../../kde4/settingsdialog.py:114 ../../gnome/settingsdialog.glade:199 +#: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "" -#: ../../kde4/settingsdialog.py:127 ../../kde4/settingsdialog.py:1311 +#: ../../qt4/settingsdialog.py:119 +#, python-format +msgid "" +"Warning: %(app)s uses EncFS for encryption. A recent security audit " +"revealed several possible attack vectors for this. Please take a look at 'A " +"NOTE ON SECURITY' in 'man backintime'." +msgstr "" + +#: ../../qt4/settingsdialog.py:129 ../../qt4/settingsdialog.py:1568 msgid "Where to save snapshots" msgstr "Kam uložiť snímky" -#: ../../kde4/settingsdialog.py:146 +#: ../../qt4/settingsdialog.py:145 +msgid "Folder" +msgstr "" + +#: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" -#: ../../kde4/settingsdialog.py:158 ../../kde4/settingsdialog.py:283 -#: ../../gnome/settingsdialog.glade:323 ../../gnome/settingsdialog.glade:583 -#: ../../gnome/settingsdialog.glade:874 +#: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "Server:" -#: ../../kde4/settingsdialog.py:163 ../../gnome/settingsdialog.glade:350 -#: ../../gnome/settingsdialog.glade:610 +#: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "" -#: ../../kde4/settingsdialog.py:168 ../../kde4/settingsdialog.py:288 -#: ../../gnome/settingsdialog.glade:377 ../../gnome/settingsdialog.glade:637 -#: ../../gnome/settingsdialog.glade:902 +#: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "Používateľ" -#: ../../kde4/settingsdialog.py:173 ../../gnome/settingsdialog.glade:416 +#: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" -#: ../../kde4/settingsdialog.py:178 ../../gnome/settingsdialog.glade:459 +#: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" -#: ../../kde4/settingsdialog.py:184 +#: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "" -#: ../../kde4/settingsdialog.py:228 ../../kde4/settingsdialog.py:237 -#: ../../kde4/settingsdialog.py:243 ../../gnome/settingsdialog.glade:703 -#: ../../gnome/settingsdialog.glade:743 +#: ../../qt4/settingsdialog.py:201 +msgid "Key File" +msgstr "" + +#: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 +#: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "" -#: ../../kde4/settingsdialog.py:249 ../../gnome/settingsdialog.glade:775 +#: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" -#: ../../kde4/settingsdialog.py:252 ../../gnome/settingsdialog.glade:792 +#: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" -#: ../../kde4/settingsdialog.py:264 ../../gnome/settingsdialog.glade:968 +#: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "Rozšírené" -#: ../../kde4/settingsdialog.py:276 ../../gnome/settingsdialog.glade:848 -msgid "Auto Host / User / Profile Id" -msgstr "Auto hostiteľ / Používateľ / ID Profilu" +#: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 +msgid "Full snapshot path: " +msgstr "" -#: ../../kde4/settingsdialog.py:301 +#: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "Plánovanie" -#: ../../kde4/settingsdialog.py:311 ../../gnome/settingsdialog.glade:1092 +#: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "" -#: ../../kde4/settingsdialog.py:322 ../../gnome/settingsdialog.glade:1079 +#: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "" -#: ../../kde4/settingsdialog.py:333 ../../gnome/settingsdialog.glade:1066 +#: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "Hodina:" -#: ../../kde4/settingsdialog.py:344 ../../gnome/settingsdialog.glade:1053 +#: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "" -#: ../../kde4/settingsdialog.py:353 ../../gnome/settingsdialog.glade:1014 +#: ../../qt4/settingsdialog.py:339 msgid "" -"Run Back In Time periodically with anacron. This is useful if the computer " -"is not running regular." +"Run Back In Time repeatedly. This is useful if the computer is not running " +"regular." msgstr "" -#: ../../kde4/settingsdialog.py:357 ../../gnome/settingsdialog.glade:1040 -msgid "Frequency in days:" +#: ../../qt4/settingsdialog.py:344 +msgid "Every:" msgstr "" -#: ../../kde4/settingsdialog.py:368 ../../gnome/settingsdialog.glade:1026 +#: ../../qt4/settingsdialog.py:362 msgid "" "Run Back In Time as soon as the drive is connected (only once every X " "days).\n" "You will be prompted for your sudo password." msgstr "" -#: ../../kde4/settingsdialog.py:379 ../../gnome/settingsdialog.glade:1310 +#: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Zahrnúť" -#: ../../kde4/settingsdialog.py:403 ../../kde4/settingsdialog.py:445 -#: ../../gnome/settingsdialog.glade:1411 +#: ../../qt4/settingsdialog.py:381 +msgid "Include files and folders" +msgstr "Zahrňuje súbory a priečinky" + +#: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "Pridať súbor" -#: ../../kde4/settingsdialog.py:408 ../../kde4/settingsdialog.py:450 -#: ../../gnome/settingsdialog.glade:1427 +#: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Pridať priečinok" -#: ../../kde4/settingsdialog.py:418 ../../gnome/settingsdialog.glade:1474 +#: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Vylúčiť" -#: ../../kde4/settingsdialog.py:421 ../../gnome/settingsdialog.glade:1328 +#: ../../qt4/settingsdialog.py:417 msgid "" "Warning: Wildcards ('foo*', '[fF]oo', 'fo?') will be ignored with " "mode 'SSH encrypted'.\n" "Only separate asterisk are allowed ('foo/*', 'foo/**/bar')" msgstr "" -#: ../../kde4/settingsdialog.py:430 +#: ../../qt4/settingsdialog.py:425 +msgid "Exclude patterns, files or folders" +msgstr "Nazahrňovať vzory, súbory alebo priečinky" + +#: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "Vysoko odporúčané:" -#: ../../kde4/settingsdialog.py:460 ../../gnome/settingsdialog.glade:1905 +#: ../../qt4/settingsdialog.py:463 +msgid "Add default" +msgstr "" + +#: ../../qt4/settingsdialog.py:474 +msgid "Exclude files bigger than: " +msgstr "" + +#: ../../qt4/settingsdialog.py:475 +#, python-format +msgid "" +"Exclude files bigger than value in %(prefix)s.\n" +"With 'Full rsync mode' disabled this will only affect new files\n" +"because for rsync this is a transfer option, not an exclude option.\n" +"So big files that has been backed up before will remain in snapshots\n" +"even if they had changed." +msgstr "" + +#: ../../qt4/settingsdialog.py:493 msgid "Auto-remove" msgstr "Automatické odstránenie" -#: ../../kde4/settingsdialog.py:464 ../../gnome/settingsdialog.glade:1608 +#: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "Staršie ako:" -#: ../../kde4/settingsdialog.py:478 ../../gnome/settingsdialog.glade:1624 +#: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "Ak je voľné miesto menšie než:" -#: ../../kde4/settingsdialog.py:490 ../../gnome/settingsdialog.glade:1642 +#: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" -#: ../../kde4/settingsdialog.py:514 ../../gnome/settingsdialog.glade:1697 +#: ../../qt4/settingsdialog.py:551 +msgid "Run in background on remote Host." +msgstr "" + +#: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "" -#: ../../kde4/settingsdialog.py:517 ../../kde4/settingsdialog.py:522 -#: ../../gnome/settingsdialog.glade:1705 ../../gnome/settingsdialog.glade:1729 +#: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "" -#: ../../kde4/settingsdialog.py:519 ../../gnome/settingsdialog.glade:1717 +#: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "" -#: ../../kde4/settingsdialog.py:524 ../../gnome/settingsdialog.glade:1743 +#: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "" -#: ../../kde4/settingsdialog.py:527 +#: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "" -#: ../../kde4/settingsdialog.py:529 ../../gnome/settingsdialog.glade:1769 +#: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "" -#: ../../kde4/settingsdialog.py:532 ../../gnome/settingsdialog.glade:1781 +#: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "" -#: ../../kde4/settingsdialog.py:534 ../../gnome/settingsdialog.glade:1795 +#: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "" -#: ../../kde4/settingsdialog.py:537 ../../gnome/settingsdialog.glade:1496 +#: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "Neodstraňovať pomenované snímky" -#: ../../kde4/settingsdialog.py:546 ../../gnome/settingsdialog.glade:2104 +#: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Možnosti" -#: ../../kde4/settingsdialog.py:549 ../../gnome/settingsdialog.glade:1920 +#: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Povoliť upozornenia" -#: ../../kde4/settingsdialog.py:552 ../../gnome/settingsdialog.glade:1937 +#: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "Nevytvárať snímky pokiaľ systém beží na batérie" -#: ../../kde4/settingsdialog.py:555 +#: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" msgstr "Nie je možné zistiť stav napájania" -#: ../../kde4/settingsdialog.py:558 ../../gnome/settingsdialog.glade:1955 -msgid "Backup files on restore" -msgstr "Zálohovať súbory pri obnove" +#: ../../qt4/settingsdialog.py:611 +msgid "Run only one snapshot at a time" +msgstr "" + +#: ../../qt4/settingsdialog.py:612 +msgid "" +"Other snapshots will be blocked until the current snapshot is done.\n" +"This is a global option. So it will effect all profiles for this user.\n" +"But you need to activate this for all other users, too." +msgstr "" + +#: ../../qt4/settingsdialog.py:617 +msgid "Backup replaced files on restore" +msgstr "" + +#: ../../qt4/settingsdialog.py:618 +#, python-format +msgid "" +"Newer versions of files will be renamed with trailing '%(suffix)s' before " +"restoring.\n" +"If you don't need them anymore you can remove them with '%(cmd)s'" +msgstr "" -#: ../../kde4/settingsdialog.py:561 ../../gnome/settingsdialog.glade:1972 +#: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "Pokračovať pri chybách (zachovať nekompletné snímky)" -#: ../../kde4/settingsdialog.py:564 ../../gnome/settingsdialog.glade:1989 +#: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "Použiť kontrolný súčet pre zistenie zmien" -#: ../../kde4/settingsdialog.py:567 ../../gnome/settingsdialog.glade:2006 +#: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "" -#: ../../kde4/settingsdialog.py:568 ../../gnome/settingsdialog.glade:2032 +#: ../../qt4/settingsdialog.py:634 msgid "" -"- snapshots are no read-only\n" -"- destination file-system must support all linux attributes (dates, rights, " +"- snapshots are not read-only\n" +"- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" -#: ../../kde4/settingsdialog.py:575 ../../gnome/settingsdialog.glade:2045 +#: ../../qt4/settingsdialog.py:641 +msgid "Take a new snapshot regardless of there were changes or not." +msgstr "" + +#: ../../qt4/settingsdialog.py:644 msgid "Check for changes (don't take a new snapshot if nothing changed)" msgstr "" -#: ../../kde4/settingsdialog.py:582 +#: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "Úroveň záznamu:" -#: ../../kde4/settingsdialog.py:597 ../../gnome/settingsdialog.glade:2366 -msgid "Expert Options" -msgstr "Možnosti expertov" +#: ../../qt4/settingsdialog.py:656 +msgid "None" +msgstr "Žiadne" -#: ../../kde4/settingsdialog.py:600 +#: ../../qt4/settingsdialog.py:658 +msgid "Changes & Errors" +msgstr "Zmeny a chyby" + +#: ../../qt4/settingsdialog.py:674 msgid "Change these options only if you really know what you are doing !" msgstr "Meňte tieto možnosti len pokiaľ naozaj viete, čo robíte!" -#: ../../kde4/settingsdialog.py:608 ../../gnome/settingsdialog.glade:2133 -msgid "Run 'nice' as cron job (default: enabled)" -msgstr "Spustiť 'nice' ako úlohu cronu (predvolené: povoliť)" +#: ../../qt4/settingsdialog.py:678 +msgid "Run 'nice':" +msgstr "" + +#: ../../qt4/settingsdialog.py:684 ../../qt4/settingsdialog.py:696 +msgid "as cron job" +msgstr "" + +#: ../../qt4/settingsdialog.py:687 ../../qt4/settingsdialog.py:702 +#: ../../qt4/settingsdialog.py:716 +msgid "on remote host" +msgstr "" + +#: ../../qt4/settingsdialog.py:690 +msgid "Run 'ionice':" +msgstr "" -#: ../../kde4/settingsdialog.py:611 ../../gnome/settingsdialog.glade:2150 -msgid "Run 'ionice' as cron job (default: enabled)" -msgstr "Spusti 'ionice' ako job cronu (predvolené: povolené)" +#: ../../qt4/settingsdialog.py:699 +msgid "when taking a manual snapshot" +msgstr "" + +#: ../../qt4/settingsdialog.py:706 +msgid "Run 'rsync' with 'nocache':" +msgstr "" -#: ../../kde4/settingsdialog.py:614 ../../gnome/settingsdialog.glade:2167 -msgid "Run 'ionice' when taking a manual snapshot (default: disabled)" +#: ../../qt4/settingsdialog.py:712 +msgid "on local machine" msgstr "" -#: ../../kde4/settingsdialog.py:617 ../../gnome/settingsdialog.glade:2184 -msgid "Run 'nice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:719 +msgid "Redirect stdout to /dev/null in cronjobs." msgstr "" -#: ../../kde4/settingsdialog.py:620 ../../gnome/settingsdialog.glade:2201 -msgid "Run 'ionice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:725 +msgid "Redirect stderr to /dev/null in cronjobs." msgstr "" -#: ../../kde4/settingsdialog.py:626 ../../gnome/settingsdialog.glade:2224 +#: ../../qt4/settingsdialog.py:734 msgid "Limit rsync bandwidth usage: " msgstr "" -#: ../../kde4/settingsdialog.py:629 ../../gnome/settingsdialog.glade:2259 +#: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" -#: ../../kde4/settingsdialog.py:634 ../../gnome/settingsdialog.glade:2280 +#: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "Zachovať ACL" -#: ../../kde4/settingsdialog.py:637 ../../gnome/settingsdialog.glade:2297 +#: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "Zachovať rozšírené atribúty (xattr)" -#: ../../kde4/settingsdialog.py:640 ../../gnome/settingsdialog.glade:2314 +#: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute links)" msgstr "Kopírovať nezabezpečené odkazy (funguje len s absolútnymi odkazmi)" -#: ../../kde4/settingsdialog.py:643 ../../gnome/settingsdialog.glade:2331 -msgid "Copy links (dereference symbolic links)" -msgstr "Kopírovať odkazy (znefunkční symbolické odkazy)" - -#: ../../kde4/snapshotsdialog.py:46 ../../kde4/snapshotsdialog.py:173 -#: ../../gnome/snapshotsdialog.glade:385 -msgid "Diff Options" -msgstr "Možnosti rozdielov" - -#: ../../kde4/snapshotsdialog.py:56 ../../gnome/snapshotsdialog.glade:314 -msgid "Command:" -msgstr "Príkaz:" +#: ../../qt4/settingsdialog.py:834 +msgid "Paste additional options to rsync" +msgstr "" -#: ../../kde4/snapshotsdialog.py:60 ../../gnome/snapshotsdialog.glade:322 -msgid "Parameters:" -msgstr "Parametre:" +#: ../../qt4/settingsdialog.py:837 +msgid "" +"Options must be quoted e.g. --exclude-from=\"/path/to/my exclude file\"." +msgstr "" -#: ../../kde4/snapshotsdialog.py:64 ../../gnome/snapshotsdialog.glade:334 -msgid "Use %1 and %2 for path parameters" -msgstr "Použiť %1 a %2 parametre cesty" +#: ../../qt4/settingsdialog.py:847 +msgid "Add prefix to SSH commands" +msgstr "" -#: ../../kde4/snapshotsdialog.py:123 ../../gnome/snapshotsdialog.glade:184 -#: ../../gnome/snapshotsdialog.glade:186 -msgid "Delete" +#: ../../qt4/settingsdialog.py:850 +#, python-format +msgid "" +"Prefix to run before every command on remote host.\n" +"Variables need to be escaped with \\$FOO.\n" +"This doesn't touch rsync. So to add a prefix\n" +"for rsync use \"%(cb_rsync_options)s\" with\n" +"%(rsync_options_value)s\n" +"\n" +"%(default)s: %(def_value)s" msgstr "" -#: ../../kde4/snapshotsdialog.py:128 ../../gnome/snapshotsdialog.glade:199 -#: ../../gnome/snapshotsdialog.glade:201 -msgid "Select All" +#: ../../qt4/settingsdialog.py:858 ../../qt4/settingsdialog.py:1691 +msgid "default" msgstr "" -#: ../../kde4/snapshotsdialog.py:132 ../../gnome/snapshotsdialog.glade:88 -msgid "List only different snapshots" -msgstr "Zoznam iba rozdielnych snímok" +#: ../../qt4/settingsdialog.py:875 +msgid "Restore Config" +msgstr "" -#: ../../kde4/snapshotsdialog.py:139 ../../gnome/snapshotsdialog.glade:110 -msgid "List only equal snapshots to: " +#: ../../qt4/settingsdialog.py:891 +msgid "" +"Full system backup can only create a snapshot to be restored to the same " +"physical disk(s) with the same disk partitioning as from the source; " +"restoring to new physical disks or the same disks with different " +"partitioning will yield a potentially broken and unusable system.\n" +"\n" +"Full system backup will override some settings that may have been " +"customized. Continue?" msgstr "" -#: ../../kde4/snapshotsdialog.py:149 ../../gnome/snapshotsdialog.glade:146 -msgid "Deep check (more accurate, but slow)" -msgstr "Hĺbková kontrola (presnejšia, ale pomalšia)" +#: ../../qt4/settingsdialog.py:922 +msgid "New profile" +msgstr "Nový profil" -#: ../../kde4/snapshotsdialog.py:174 -msgid "Go To" -msgstr "Ísť na" +#: ../../qt4/settingsdialog.py:938 +msgid "Rename profile" +msgstr "Premenovať profil" -#: ../../gnome/logviewdialog.glade:9 -msgid "Log View" -msgstr "Zobraziť protokol" +#: ../../qt4/settingsdialog.py:952 +#, python-format +msgid "Are you sure you want to delete the profile \"%s\" ?" +msgstr "Určite chcete vymazať profil \"%s\" ?" -#: ../../gnome/logviewdialog.glade:179 -msgid "scroll down automatic" +#: ../../qt4/settingsdialog.py:1191 +msgid "" +"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " +"*/3 for periodic backups every 3 hours" msgstr "" -#: ../../gnome/mainwindow.glade:7 -msgid "Back In Time" -msgstr "Back In Time" - -#: ../../gnome/mainwindow.glade:45 -msgid "Backup Now" -msgstr "Zálohovať teraz" +#: ../../qt4/settingsdialog.py:1489 +msgid "Exclude pattern" +msgstr "Vylúčiť vzor" -#: ../../gnome/mainwindow.glade:171 -msgid "Shutdown" -msgstr "" +#: ../../qt4/settingsdialog.py:1502 +msgid "Exclude file" +msgstr "Vylúčiť súbor" -#: ../../gnome/mainwindow.glade:287 -msgid "Parent folder" -msgstr "Zdrojový priečinok" +#: ../../qt4/settingsdialog.py:1506 +msgid "Exclude folder" +msgstr "Vylúčiť priečinok" -#: ../../gnome/mainwindow.glade:327 -msgid "Hidden files" -msgstr "Ukázať skryté súbory" +#: ../../qt4/settingsdialog.py:1525 +msgid "Include file" +msgstr "Zahrnúť súbor" -#: ../../gnome/mainwindow.glade:451 +#: ../../qt4/settingsdialog.py:1533 ../../qt4/settingsdialog.py:1553 +#, python-format msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +"\"%s\" is a symlink. The linked target will not be backed up until you " +"include it, too.\n" +"Would you like to include the symlinks target instead?" msgstr "" -"Tento priečinok neexistuje\n" -"v aktuálnej snímke!" -#: ../../gnome/settingsdialog.glade:287 -msgid "Where to save snapshots" -msgstr "Kam uložiť snímky" +#: ../../qt4/settingsdialog.py:1545 +msgid "Include folder" +msgstr "Zahrnúť priečinok" -#: ../../gnome/settingsdialog.glade:483 -msgid "Private key:" -msgstr "" +#: ../../qt4/settingsdialog.py:1572 +msgid "Are you sure you want to change snapshots folder ?" +msgstr "Ste si istí, že chcete zmeniť priečinok snímok?" -#: ../../gnome/settingsdialog.glade:534 -msgid "Advanced SSH Settings" +#: ../../qt4/settingsdialog.py:1688 +msgid "enabled" msgstr "" -#: ../../gnome/settingsdialog.glade:552 -msgid "SSH Settings" +#: ../../qt4/settingsdialog.py:1690 +msgid "disabled" msgstr "" -#: ../../gnome/settingsdialog.glade:815 -msgid "Password" +#: ../../qt4/settingsdialog.py:1715 +msgid "Restore Settings" msgstr "" -#: ../../gnome/settingsdialog.glade:930 -msgid "Profile Id:" -msgstr "ID profilu:" +#: ../../qt4/settingsdialog.py:1732 +msgid " and add your user to group 'fuse'" +msgstr "" -#: ../../gnome/settingsdialog.glade:1115 +#: ../../qt4/settingsdialog.py:1736 +#, python-format msgid "" -"hours seperate by comma ( e.g. 8,12,18,23) or */3 for periodic backups every " -"3 hours (cron style)" +"Please navigate to the snapshot from which you want to restore %(appName)s's " +"configuration. The path may look like: \n" +"%(samplePath)s\n" +"\n" +"If your snapshots are on a remote drive or if they are encrypted you need to " +"manually mount them first. If you use Mode SSH you also may need to set up " +"public key login to the remote host%(addFuse)s.\n" +"Take a look at 'man backintime'." msgstr "" -#: ../../gnome/settingsdialog.glade:1163 -msgid "Schedule" -msgstr "Plánovanie" +#: ../../qt4/settingsdialog.py:1794 ../../qt4/settingsdialog.py:1854 +msgid "No config found" +msgstr "" + +#: ../../qt4/snapshotsdialog.py:49 ../../qt4/snapshotsdialog.py:173 +msgid "Diff Options" +msgstr "Možnosti rozdielov" + +#: ../../qt4/snapshotsdialog.py:56 +msgid "Command:" +msgstr "Príkaz:" + +#: ../../qt4/snapshotsdialog.py:60 +msgid "Parameters:" +msgstr "Parametre:" + +#: ../../qt4/snapshotsdialog.py:64 +msgid "Use %1 and %2 for path parameters" +msgstr "Použiť %1 a %2 parametre cesty" + +#: ../../qt4/snapshotsdialog.py:106 +msgid "List only different snapshots" +msgstr "Zoznam iba rozdielnych snímok" -#: ../../gnome/settingsdialog.glade:1363 -msgid "Highly recommended:" -msgstr "Vysoko odporúčané:" +#: ../../qt4/snapshotsdialog.py:113 +msgid "List only equal snapshots to: " +msgstr "" + +#: ../../qt4/snapshotsdialog.py:123 +msgid "Deep check (more accurate, but slow)" +msgstr "Hĺbková kontrola (presnejšia, ale pomalšia)" -#: ../../gnome/settingsdialog.glade:1377 -msgid "label" -msgstr "popis" +#: ../../qt4/snapshotsdialog.py:144 +msgid "Delete" +msgstr "" -#: ../../gnome/settingsdialog.glade:1755 -msgid "week(s)" +#: ../../qt4/snapshotsdialog.py:148 +msgid "Select All" msgstr "" -#: ../../gnome/settingsdialog.glade:2069 -msgid "Log level:" -msgstr "Úroveň záznamu:" +#: ../../qt4/snapshotsdialog.py:161 +msgid "Diff" +msgstr "Rozdiel" + +#: ../../qt4/snapshotsdialog.py:172 +msgid "Go To" +msgstr "Ísť na" -#: ../../gnome/settingsdialog.glade:2121 +#: ../../qt4/snapshotsdialog.py:326 +msgid "You can't compare a snapshot to itself" +msgstr "Nemôžete porovnávať snímku s ňou samou" + +#: ../../qt4/snapshotsdialog.py:333 +#, python-format +msgid "Command not found: %s" +msgstr "Príkaz nenájdený: %s" + +#: ../../qt4/snapshotsdialog.py:354 +#, python-format msgid "" -"Change these options only if you really know what you are doing !" -msgstr "Tieto nastavenia mente len ak viete, čo robíte !" +"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" +msgstr "" -#: ../../gnome/snapshotsdialog.glade:263 -msgid "Diff with" -msgstr "Porovnať s" +#: ../../qt4/snapshotsdialog.py:357 +#, python-format +msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +msgstr "" -#: ../../gnome/textinputdialog.glade:7 -msgid "Pattern" -msgstr "Vzor" +#: ../../qt4/snapshotsdialog.py:359 +msgid "WARNING: This can not be revoked!" +msgstr "" -#: ../../gnome/textinputdialog.glade:70 -msgid "Text" +#: ../../qt4/snapshotsdialog.py:374 +#, python-format +msgid "Exclude \"%s\" from future snapshots?" msgstr "" diff -Nru backintime-1.0.36/common/po/sl.po backintime-1.1.12/common/po/sl.po --- backintime-1.0.36/common/po/sl.po 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/po/sl.po 2016-01-11 18:07:58.000000000 +0000 @@ -2,7 +2,7 @@ msgstr "" "Project-Id-Version: Back In Time 0.9.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-11-09 22:34+0100\n" +"POT-Creation-Date: 2015-12-19 00:47+0100\n" "PO-Revision-Date: 2010-11-13 22:06+0000\n" "Last-Translator: Klemen Meglic \n" "Language-Team: \n" @@ -11,256 +11,297 @@ "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || " "n%100==4 ? 3 : 0);\n" -"X-Launchpad-Export-Date: 2014-08-06 10:20+0000\n" -"X-Generator: Launchpad (build 17147)\n" +"X-Launchpad-Export-Date: 2016-01-11 17:52+0000\n" +"X-Generator: Launchpad (build 17881)\n" "X-Poedit-Country: SLOVENIA\n" "X-Poedit-Language: Slovenian\n" -#: ../../common/config.py:72 +#: ../../common/configfile.py:60 +#, python-format +msgid "Failed to save config: %s" +msgstr "" + +#: ../../common/configfile.py:78 +#, python-format +msgid "Failed to load config: %s" +msgstr "" + +#: ../../common/configfile.py:352 ../../common/configfile.py:414 +#, python-format +msgid "Profile \"%s\" already exists !" +msgstr "Profil \"%s\" Že obstaja !" + +#: ../../common/configfile.py:383 +msgid "You can't remove the last profile !" +msgstr "" + +#: ../../common/config.py:76 msgid "Disabled" msgstr "Onemogočeno" -#: ../../common/config.py:73 +#: ../../common/config.py:77 msgid "At every boot/reboot" msgstr "Ob vsakem zagonu/ponovnem zagonu" -#: ../../common/config.py:74 +#: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Vsakih 5 minut" -#: ../../common/config.py:75 +#: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Vsakih 10 minut" -#: ../../common/config.py:76 +#: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "" -#: ../../common/config.py:77 +#: ../../common/config.py:81 msgid "Every hour" msgstr "" -#: ../../common/config.py:78 +#: ../../common/config.py:82 msgid "Every 2 hours" msgstr "" -#: ../../common/config.py:79 +#: ../../common/config.py:83 msgid "Every 4 hours" msgstr "" -#: ../../common/config.py:80 +#: ../../common/config.py:84 msgid "Every 6 hours" msgstr "" -#: ../../common/config.py:81 +#: ../../common/config.py:85 msgid "Every 12 hours" msgstr "" -#: ../../common/config.py:82 +#: ../../common/config.py:86 msgid "Custom Hours" msgstr "" -#: ../../common/config.py:83 +#: ../../common/config.py:87 msgid "Every Day" msgstr "Vsak dan" -#: ../../common/config.py:84 -msgid "Daily (anacron)" +#: ../../common/config.py:88 +msgid "Repeatedly (anacron)" msgstr "" -#: ../../common/config.py:85 +#: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "" -#: ../../common/config.py:86 +#: ../../common/config.py:90 msgid "Every Week" msgstr "Vsak teden" -#: ../../common/config.py:87 +#: ../../common/config.py:91 msgid "Every Month" msgstr "Vsak mesec" -#: ../../common/config.py:91 +#: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Dni" -#: ../../common/config.py:92 +#: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Tednov" -#: ../../common/config.py:93 +#: ../../common/config.py:97 msgid "Year(s)" msgstr "Let" -#: ../../common/config.py:100 +#: ../../common/config.py:101 +msgid "Hour(s)" +msgstr "" + +#: ../../common/config.py:104 +msgid "Month(s)" +msgstr "" + +#: ../../common/config.py:126 ../../qt4/settingsdialog.py:551 msgid " EXPERIMENTAL!" msgstr "" -#: ../../common/config.py:103 +#: ../../common/config.py:129 msgid "Local" msgstr "" -#: ../../common/config.py:104 +#: ../../common/config.py:130 msgid "SSH" msgstr "" -#: ../../common/config.py:104 ../../common/config.py:106 -#: ../../gnome/settingsdialog.py:475 ../../kde4/settingsdialog.py:1325 +#: ../../common/config.py:130 ../../common/config.py:132 +#: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "" -#: ../../common/config.py:105 +#: ../../common/config.py:131 msgid "Local encrypted" msgstr "" -#: ../../common/config.py:105 ../../common/config.py:106 +#: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "" -#: ../../common/config.py:106 +#: ../../common/config.py:132 msgid "SSH encrypted" msgstr "" -#: ../../common/config.py:112 +#: ../../common/config.py:135 msgid "Default" msgstr "" -#: ../../common/config.py:113 +#: ../../common/config.py:136 msgid "AES128-CTR" msgstr "" -#: ../../common/config.py:114 +#: ../../common/config.py:137 msgid "AES192-CTR" msgstr "" -#: ../../common/config.py:115 +#: ../../common/config.py:138 msgid "AES256-CTR" msgstr "" -#: ../../common/config.py:116 +#: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "" -#: ../../common/config.py:117 +#: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "" -#: ../../common/config.py:118 +#: ../../common/config.py:141 msgid "AES128-CBC" msgstr "" -#: ../../common/config.py:119 +#: ../../common/config.py:142 msgid "3DES-CBC" msgstr "" -#: ../../common/config.py:120 +#: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "" -#: ../../common/config.py:121 +#: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "" -#: ../../common/config.py:122 +#: ../../common/config.py:145 msgid "AES192-CBC" msgstr "" -#: ../../common/config.py:123 +#: ../../common/config.py:146 msgid "AES256-CBC" msgstr "" -#: ../../common/config.py:124 +#: ../../common/config.py:147 msgid "ARCFOUR" msgstr "" -#: ../../common/config.py:129 +#: ../../common/config.py:153 msgid "Main profile" msgstr "Glavni profil" -#: ../../common/config.py:256 ../../common/config.py:275 -#: ../../common/config.py:286 ../../common/config.py:291 +#: ../../common/config.py:289 ../../common/config.py:296 +#: ../../common/config.py:307 ../../common/config.py:312 +#: ../../qt4/qt4systrayicon.py:61 #, python-format msgid "Profile: \"%s\"" msgstr "Profil: \"%s\"" -#: ../../common/config.py:256 +#: ../../common/config.py:289 msgid "Snapshots folder is not valid !" msgstr "" -#: ../../common/config.py:275 +#: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "" -#: ../../common/config.py:286 +#: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "" -#: ../../common/config.py:291 +#: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "" -#: ../../common/config.py:361 +#: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s ni mapa !" -#: ../../common/config.py:376 ../../common/config.py:389 +#: ../../common/config.py:380 +msgid "Host/User/Profile-ID must not be empty!" +msgstr "" + +#: ../../common/config.py:388 ../../common/config.py:420 #, python-format msgid "" "Can't write to: %s\n" "Are you sure you have write access ?" msgstr "" -#: ../../common/config.py:1286 +#: ../../common/config.py:400 +#, python-format msgid "" -"Can't find crontab.\n" -"Are you sure cron is installed ?\n" -"If not you should disable all automatic backups." +"Destination filesystem for '%(path)s' is formatted with FAT which doesn't " +"support hard-links. Please use a native Linux filesystem." msgstr "" -#: ../../common/config.py:1338 +#: ../../common/config.py:405 #, python-format -msgid "Schedule udev doesn't work with mode %s" +msgid "" +"Destination filsystem for '%(path)s' is a SMB mounted share. Please make " +"sure the remote SMB server supports symlinks or activate '%(copyLinks)s' in " +"'%(expertOptions)s'." msgstr "" -#: ../../common/config.py:1342 -#, python-format -msgid "Couldn't find UUID for \"%s\"" +#: ../../common/config.py:408 ../../qt4/settingsdialog.py:815 +msgid "Copy links (dereference symbolic links)" msgstr "" -#: ../../common/config.py:1379 -msgid "Failed to remove udev rules" +#: ../../common/config.py:409 ../../qt4/settingsdialog.py:669 +msgid "Expert Options" msgstr "" -#: ../../common/config.py:1385 -msgid "Failed to create udev rules" +#: ../../common/config.py:411 +#, python-format +msgid "" +"Destination filesystem for '%(path)s is a sshfs mounted share. sshfs doesn't " +"support hard-links. Please use mode 'SSH' instead." msgstr "" -#: ../../common/config.py:1420 +#: ../../common/config.py:1407 msgid "" -"Can't find anacron.\n" -"Are you sure anacron is installed ?\n" -"If not you should disable daily anacron backups." +"Can't find crontab.\n" +"Are you sure cron is installed ?\n" +"If not you should disable all automatic backups." msgstr "" -#: ../../common/config.py:1439 -msgid "Please provide your sudo password to install the udev rule." +#: ../../common/config.py:1411 +msgid "Failed to write new crontab." msgstr "" -#: ../../common/config.py:1445 -msgid "Please provide your sudo password to remove unused udev rules." +#: ../../common/config.py:1505 +#, python-format +msgid "" +"Could not install Udev rule for profile %(profile_id)s. DBus Service " +"'%(dbus_interface)s' wasn't available" msgstr "" -#: ../../common/configfile.py:253 ../../common/configfile.py:315 +#: ../../common/config.py:1517 #, python-format -msgid "Profile \"%s\" already exists !" -msgstr "Profil \"%s\" Že obstaja !" +msgid "Schedule udev doesn't work with mode %s" +msgstr "" -#: ../../common/configfile.py:284 -msgid "You can't remove the last profile !" +#: ../../common/config.py:1526 +#, python-format +msgid "Couldn't find UUID for \"%s\"" msgstr "" -#: ../../common/encfstools.py:95 +#: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" @@ -268,38 +309,38 @@ "%(error)s" msgstr "" -#: ../../common/encfstools.py:105 +#: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "" -#: ../../common/encfstools.py:149 +#: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "" -#: ../../common/encfstools.py:153 +#: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" -#: ../../common/encfstools.py:154 +#: ../../common/encfstools.py:171 msgid "Cancel" msgstr "" -#: ../../common/encfstools.py:157 +#: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "" -#: ../../common/encfstools.py:161 +#: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "" -#: ../../common/encfstools.py:166 +#: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" -#: ../../common/encfstools.py:174 ../../common/sshtools.py:207 +#: ../../common/encfstools.py:196 ../../common/sshtools.py:262 #, python-format msgid "" "%(user)s is not member of group 'fuse'.\n" @@ -307,70 +348,73 @@ "Look at 'man backintime' for further instructions." msgstr "" -#: ../../common/encfstools.py:189 +#: ../../common/encfstools.py:211 msgid "" "encfs version 1.7.2 and before has a bug with option --reverse. Please " "update encfs" msgstr "" -#: ../../common/encfstools.py:453 ../../common/encfstools.py:480 -#: ../../common/snapshots.py:982 ../../common/snapshots.py:1288 -#: ../../kde4/app.py:82 ../../gnome/mainwindow.glade:43 +#: ../../common/encfstools.py:512 ../../common/snapshots.py:1131 +#: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "Naredi posnetek" -#: ../../common/mount.py:195 +#: ../../common/mount.py:204 #, python-format msgid "" "Hash collision occurred in hash_id %s. Incrementing global value " "hash_collision and try again." msgstr "" -#: ../../common/mount.py:246 +#: ../../common/mount.py:259 #, python-format msgid "mountpoint %s not empty." msgstr "" -#: ../../common/mount.py:286 +#: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" -#: ../../common/password.py:425 +#: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" -#: ../../common/snapshots.py:171 ../../gnome/app.py:1127 -#: ../../kde4/app.py:1014 +#: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Zdaj" -#: ../../common/snapshots.py:182 ../../gnome/gnometools.py:37 +#: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "" -#: ../../common/snapshots.py:282 +#: ../../common/snapshots.py:344 msgid "" "### This log has been decoded with automatic search pattern\n" "### If some paths are not decoded you can manually decode them with:\n" msgstr "" -#: ../../common/snapshots.py:465 +#: ../../common/snapshots.py:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "" -#: ../../common/snapshots.py:564 +#: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "" -#: ../../common/snapshots.py:739 +#: ../../common/snapshots.py:752 ../../qt4/app.py:377 ../../qt4/app.py:675 +#: ../../qt4/app.py:692 ../../qt4/qt4systrayicon.py:65 +msgid "Done" +msgstr "Narejeno" + +#: ../../common/snapshots.py:860 msgid "" "Back In Time changed its backup format.\n" "\n" "Your old snapshots can be moved according to this new format. OK?" msgstr "" -#: ../../common/snapshots.py:749 +#: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" @@ -381,13 +425,13 @@ "(The program will still be able to discriminate between them)" msgstr "" -#: ../../common/snapshots.py:752 +#: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" msgstr "" -#: ../../common/snapshots.py:803 +#: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" @@ -400,7 +444,7 @@ "cannot continue taking snapshots" msgstr "" -#: ../../common/snapshots.py:812 +#: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" @@ -410,14 +454,14 @@ "if you are done restart Back In Time to proceed" msgstr "" -#: ../../common/snapshots.py:825 +#: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" msgstr "" -#: ../../common/snapshots.py:830 +#: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" @@ -429,172 +473,183 @@ "If you do not, you will be asked again next time you start Back In Time." msgstr "" -#: ../../common/snapshots.py:839 +#: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "" -#: ../../common/snapshots.py:841 +#: ../../common/snapshots.py:953 msgid "" "Back In Time still cannot continue taking new snapshots.\n" "Restart Back In Time to see the questions again" msgstr "" -#: ../../common/snapshots.py:913 +#: ../../common/snapshots.py:972 +msgid "Deferring backup while on battery" +msgstr "" + +#: ../../common/snapshots.py:1035 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it." msgstr "" -#: ../../common/snapshots.py:915 +#: ../../common/snapshots.py:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "" msgstr[1] "" -#: ../../common/snapshots.py:941 +#: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "" -#: ../../common/snapshots.py:950 +#: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "" -#: ../../common/snapshots.py:1088 +#: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "" -#: ../../common/snapshots.py:1107 +#: ../../common/snapshots.py:1217 msgid "..." msgstr "" -#: ../../common/snapshots.py:1134 +#: ../../common/snapshots.py:1238 +#, python-format +msgid "Found leftover '%s' which can be continued." +msgstr "" + +#: ../../common/snapshots.py:1250 +#, python-format +msgid "Remove leftover '%s' folder from last run" +msgstr "" + +#: ../../common/snapshots.py:1263 #, python-format msgid "Can't remove folder: %s" msgstr "" -#: ../../common/snapshots.py:1219 +#: ../../common/snapshots.py:1340 #, python-format msgid "Compare with snapshot %s" msgstr "" -#: ../../common/snapshots.py:1248 +#: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "" -#: ../../common/snapshots.py:1335 +#: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "" -#: ../../common/snapshots.py:1341 +#: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "" -#: ../../common/snapshots.py:1442 +#: ../../common/snapshots.py:1470 +msgid "Save permission over ssh failed. Retry normal method" +msgstr "" + +#: ../../common/snapshots.py:1521 #, python-format msgid "Can't rename %(new_path)s to %(path)s" msgstr "" -#: ../../common/snapshots.py:1562 -msgid "Remove old snapshots" +#: ../../common/snapshots.py:1695 ../../common/snapshots.py:1728 +#: ../../qt4/settingsdialog.py:542 +msgid "Smart remove" msgstr "" -#: ../../common/snapshots.py:1586 ../../kde4/settingsdialog.py:501 -#: ../../gnome/settingsdialog.glade:1660 -msgid "Smart remove" +#: ../../common/snapshots.py:1704 +msgid "Remove old snapshots" msgstr "" -#: ../../common/snapshots.py:1591 +#: ../../common/snapshots.py:1733 msgid "Try to keep min free space" msgstr "" -#: ../../common/snapshots.py:1621 +#: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" -#: ../../common/sshtools.py:106 +#: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "" -#: ../../common/sshtools.py:113 +#: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "" -#: ../../common/sshtools.py:187 -#, python-format -msgid "" -"Failed to unlock SSH private key:\n" -"Error: %s" -msgstr "" - -#: ../../common/sshtools.py:194 +#: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" -#: ../../common/sshtools.py:199 +#: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" -#: ../../common/sshtools.py:217 +#: ../../common/sshtools.py:278 #, python-format msgid "" "Password-less authentication for %(user)s@%(host)s failed. Look at 'man " "backintime' for further instructions." msgstr "" -#: ../../common/sshtools.py:229 +#: ../../common/sshtools.py:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" -#: ../../common/sshtools.py:254 +#: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" -#: ../../common/sshtools.py:274 +#: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" -#: ../../common/sshtools.py:276 +#: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:278 +#: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:280 +#: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" -#: ../../common/sshtools.py:302 +#: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" -#: ../../common/sshtools.py:325 ../../common/sshtools.py:383 +#: ../../common/sshtools.py:423 ../../common/sshtools.py:553 #, python-format msgid "" "Remote host %(host)s doesn't support '%(command)s':\n" @@ -602,7 +657,7 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:387 +#: ../../common/sshtools.py:556 #, python-format msgid "" "Check commands on host %(host)s returned unknown error:\n" @@ -610,821 +665,939 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:400 +#: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "" -#: ../../gnome/app.py:185 ../../gnome/app.py:594 ../../gnome/app.py:608 -#: ../../kde4/app.py:299 ../../kde4/app.py:570 ../../kde4/app.py:587 -msgid "Done" -msgstr "Narejeno" +#: ../../qt4/app.py:81 +msgid "Refresh snapshots list" +msgstr "" + +#: ../../qt4/app.py:85 ../../qt4/app.py:890 +msgid "Snapshot Name" +msgstr "Ime posnetka" + +#: ../../qt4/app.py:88 +msgid "Remove Snapshot" +msgstr "Odstrani posnetek" -#: ../../gnome/app.py:189 ../../kde4/app.py:143 ../../kde4/app.py:159 -#: ../../gnome/mainwindow.glade:225 +#: ../../qt4/app.py:91 +msgid "View Snapshot Log" +msgstr "" + +#: ../../qt4/app.py:94 +msgid "View Last Log" +msgstr "" + +#: ../../qt4/app.py:99 ../../qt4/settingsdialog.py:51 +msgid "Settings" +msgstr "Nastavitve" + +#: ../../qt4/app.py:104 +msgid "Shutdown" +msgstr "" + +#: ../../qt4/app.py:105 +msgid "Shutdown system after snapshot has finished." +msgstr "" + +#: ../../qt4/app.py:111 +msgid "Exit" +msgstr "Izhod" + +#: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 msgid "Help" msgstr "Pomoč" -#: ../../gnome/app.py:191 ../../kde4/app.py:146 -#: ../../gnome/mainwindow.glade:223 +#: ../../qt4/app.py:122 +msgid "Config File Help" +msgstr "" + +#: ../../qt4/app.py:125 msgid "Website" msgstr "" -#: ../../gnome/app.py:192 ../../kde4/app.py:148 +#: ../../qt4/app.py:127 ../../qt4/app.py:982 +msgid "Changelog" +msgstr "" + +#: ../../qt4/app.py:129 msgid "FAQ" msgstr "" -#: ../../gnome/app.py:193 ../../kde4/app.py:150 +#: ../../qt4/app.py:131 msgid "Ask a question" msgstr "" -#: ../../gnome/app.py:194 ../../kde4/app.py:152 +#: ../../qt4/app.py:133 msgid "Report a bug" msgstr "" -#: ../../gnome/app.py:196 ../../kde4/app.py:155 +#: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "O programu" -#: ../../gnome/app.py:202 ../../gnome/app.py:887 -#: ../../gnome/restoredialog.py:84 ../../gnome/snapshotsdialog.py:83 -#: ../../gnome/snapshotsdialog.py:244 ../../kde4/app.py:206 -#: ../../kde4/app.py:216 ../../kde4/restoredialog.py:68 -#: ../../kde4/snapshotsdialog.py:111 ../../kde4/snapshotsdialog.py:117 -#: ../../gnome/mainwindow.glade:350 ../../gnome/mainwindow.glade:352 -#: ../../gnome/snapshotsdialog.glade:169 ../../gnome/snapshotsdialog.glade:171 +#: ../../qt4/app.py:163 +msgid "Up" +msgstr "Gor" + +#: ../../qt4/app.py:174 ../../qt4/settingsdialog.py:1776 +msgid "Show hidden files" +msgstr "Pokaži skrite datoteke" + +#: ../../qt4/app.py:184 ../../qt4/app.py:199 ../../qt4/app.py:233 +#: ../../qt4/restoredialog.py:62 ../../qt4/settingsdialog.py:1818 +#: ../../qt4/snapshotsdialog.py:134 ../../qt4/snapshotsdialog.py:139 msgid "Restore" msgstr "Obnovi" -#: ../../gnome/app.py:203 ../../gnome/app.py:888 ../../gnome/gnometools.py:67 -#: ../../gnome/snapshotsdialog.py:84 ../../gnome/snapshotsdialog.py:245 -#: ../../kde4/app.py:208 ../../kde4/restoredialog.py:42 -#: ../../kde4/snapshotsdialog.py:113 +#: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 +#: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "" -#: ../../gnome/app.py:205 ../../gnome/app.py:896 ../../gnome/app.py:1146 -#: ../../kde4/app.py:1041 -#, python-format -msgid "Restore '%s'" +#: ../../qt4/app.py:194 +msgid "Restore and delete new files" msgstr "" -#: ../../gnome/app.py:207 ../../gnome/app.py:897 ../../gnome/app.py:1147 -#: ../../kde4/app.py:1042 +#: ../../qt4/app.py:201 #, python-format -msgid "Restore '%s' to ..." +msgid "" +"Restore selected file or folder.\n" +"If this button is grayed out this is most likely because \"%(now)s\" is " +"selected in left hand snapshots list." msgstr "" -#: ../../gnome/app.py:226 ../../kde4/app.py:235 +#: ../../qt4/app.py:206 ../../qt4/logviewdialog.py:67 +#: ../../qt4/qt4tools.py:160 ../../qt4/snapshotsdialog.py:96 +msgid "Snapshots" +msgstr "Posnetki" + +#: ../../qt4/app.py:213 +msgid "Snapshot" +msgstr "" + +#: ../../qt4/app.py:224 +msgid "View" +msgstr "" + +#: ../../qt4/app.py:277 msgid "Shortcuts" msgstr "" -#: ../../gnome/app.py:249 -msgid "Name" -msgstr "Ime" - -#: ../../gnome/app.py:260 -msgid "Size" -msgstr "Velikost" - -#: ../../gnome/app.py:267 -msgid "Date" -msgstr "Datum" - -#: ../../gnome/app.py:286 ../../gnome/app.py:883 -#: ../../gnome/snapshotsdialog.py:116 ../../kde4/app.py:171 -#: ../../kde4/app.py:221 ../../kde4/snapshotsdialog.py:91 -#: ../../gnome/mainwindow.glade:366 ../../gnome/mainwindow.glade:368 -#: ../../gnome/snapshotsdialog.glade:8 -msgid "Snapshots" -msgstr "Posnetki" +#: ../../qt4/app.py:295 +msgid "" +"This folder doesn't exist\n" +"in the current selected snapshot!" +msgstr "" + +#: ../../qt4/app.py:359 +msgid "Add to Include" +msgstr "" + +#: ../../qt4/app.py:360 +msgid "Add to Exclude" +msgstr "" -#: ../../gnome/app.py:348 ../../kde4/app.py:362 +#: ../../qt4/app.py:416 +#, python-format +msgid "" +"%(appName)s is not configured. Would you like to restore a previous " +"configuration?" +msgstr "" + +#: ../../qt4/app.py:440 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it and then press OK" msgstr "" -#: ../../gnome/app.py:611 ../../kde4/app.py:590 -msgid "Done, no backup needed" -msgstr "Narejeno, varnostna kopija ni potrebna" +#: ../../qt4/app.py:473 +msgid "" +"If you close this window Back In Time will not be able to shutdown your " +"system when the snapshot has finished.\n" +"Do you really want to close?" +msgstr "" -#: ../../gnome/app.py:619 ../../kde4/app.py:598 +#: ../../qt4/app.py:667 ../../qt4/app.py:703 msgid "Working:" msgstr "" -#: ../../gnome/app.py:623 ../../kde4/app.py:602 +#: ../../qt4/app.py:695 +msgid "Done, no backup needed" +msgstr "Narejeno, varnostna kopija ni potrebna" + +#: ../../qt4/app.py:707 msgid "Error:" msgstr "" -#: ../../gnome/app.py:636 ../../kde4/app.py:649 +#: ../../qt4/app.py:726 ../../qt4/qt4systrayicon.py:153 +msgid "Sent:" +msgstr "" + +#: ../../qt4/app.py:727 ../../qt4/qt4systrayicon.py:154 +msgid "Speed:" +msgstr "" + +#: ../../qt4/app.py:728 ../../qt4/qt4systrayicon.py:155 +msgid "ETA:" +msgstr "" + +#: ../../qt4/app.py:777 msgid "Global" msgstr "Splošno" -#: ../../gnome/app.py:637 ../../kde4/app.py:650 +#: ../../qt4/app.py:778 msgid "Root" msgstr "Koren" -#: ../../gnome/app.py:638 ../../kde4/app.py:651 +#: ../../qt4/app.py:779 msgid "Home" msgstr "Dom" -#: ../../gnome/app.py:662 -msgid "Bookmarks" -msgstr "Zaznamki" - -#: ../../gnome/app.py:675 ../../kde4/app.py:662 +#: ../../qt4/app.py:794 msgid "Backup folders" msgstr "" -#: ../../gnome/app.py:701 ../../kde4/app.py:734 -msgid "Today" -msgstr "Danes" - -#: ../../gnome/app.py:705 ../../kde4/app.py:738 -msgid "Yesterday" -msgstr "Včeraj" - -#: ../../gnome/app.py:709 ../../kde4/app.py:742 -msgid "This week" -msgstr "Ta teden" - -#: ../../gnome/app.py:713 ../../kde4/app.py:746 -msgid "Last week" -msgstr "Prejšnji teden" - -#: ../../gnome/app.py:764 ../../kde4/app.py:398 -msgid "" -"If you close this window Back In Time will not be able to shutdown your " -"system when the snapshot has finished.\n" -"Do you really want to close?" +#: ../../qt4/app.py:849 +msgid "This is NOT a snapshot but a live view of your local files" msgstr "" -#: ../../gnome/app.py:881 ../../gnome/snapshotsdialog.py:238 -msgid "Open" -msgstr "Odpri" - -#: ../../gnome/app.py:1056 ../../kde4/app.py:90 ../../kde4/app.py:805 -#: ../../gnome/mainwindow.glade:73 ../../gnome/mainwindow.glade:75 -msgid "Snapshot Name" -msgstr "Ime posnetka" - -#: ../../gnome/app.py:1075 +#: ../../qt4/app.py:860 ../../qt4/app.py:1476 #, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +msgid "Last check %s" msgstr "" -"Ste prepričani, da želite zbrisati posnetek:\n" -"%s" -#: ../../gnome/app.py:1123 ../../kde4/app.py:1010 +#: ../../qt4/app.py:928 #, python-format -msgid "Snapshot: %s" +msgid "" +"Are you sure you want to remove the snapshot:\n" +"%s" msgstr "" +"Res želite zbrisati posnetek:\n" +"%s" -#: ../../gnome/app.py:1124 ../../kde4/app.py:1011 +#: ../../qt4/app.py:1004 #, python-format -msgid "View the snapshot made at %s" -msgstr "" - -#: ../../gnome/app.py:1126 ../../kde4/app.py:1013 -msgid "View the current disk content" +msgid "" +"Backup local files before overwriting or\n" +"removing with trailing '%(suffix)s'." msgstr "" -#: ../../gnome/logviewdialog.py:106 ../../gnome/settingsdialog.py:414 -#: ../../kde4/logviewdialog.py:83 ../../kde4/settingsdialog.py:590 -msgid "All" +#: ../../qt4/app.py:1010 +msgid "" +"Are you sure you want to remove all newer files in your original folder?" msgstr "" -#: ../../gnome/logviewdialog.py:107 ../../gnome/settingsdialog.py:412 -#: ../../kde4/logviewdialog.py:84 ../../kde4/settingsdialog.py:588 -msgid "Errors" +#: ../../qt4/app.py:1014 +msgid "" +"WARNING: deleting files in filesystem root could break your whole system!!!" msgstr "" -#: ../../gnome/logviewdialog.py:112 ../../kde4/logviewdialog.py:89 -msgid "Changes" +#: ../../qt4/app.py:1016 +msgid "Files to be restored:" msgstr "" -#: ../../gnome/logviewdialog.py:115 ../../kde4/logviewdialog.py:92 -msgid "Informations" +#: ../../qt4/app.py:1031 +msgid "Do you really want to restore this files(s):" msgstr "" -#: ../../gnome/settingsdialog.py:235 ../../kde4/settingsdialog.py:387 -msgid "Include files and folders" +#: ../../qt4/app.py:1226 +#, python-format +msgid "Snapshot: %s" msgstr "" -#: ../../gnome/settingsdialog.py:264 -msgid "Exclude patterns, files or folders" +#: ../../qt4/app.py:1227 +#, python-format +msgid "View the snapshot made at %s" msgstr "" -#: ../../gnome/settingsdialog.py:411 ../../kde4/settingsdialog.py:587 -msgid "None" +#: ../../qt4/app.py:1229 +msgid "View the current disk content" msgstr "" -#: ../../gnome/settingsdialog.py:413 ../../kde4/settingsdialog.py:589 -msgid "Changes & Errors" +#: ../../qt4/app.py:1268 +#, python-format +msgid "Restore '%s'" msgstr "" -#: ../../gnome/settingsdialog.py:458 -msgid "Snapshots folder" +#: ../../qt4/app.py:1269 +#, python-format +msgid "Restore '%s' to ..." msgstr "" -#: ../../gnome/settingsdialog.py:466 ../../kde4/settingsdialog.py:1314 -msgid "Are you sure you want to change snapshots folder ?" +#: ../../qt4/app.py:1270 +#, python-format +msgid "Restore '%s' and delete new files" msgstr "" -#: ../../gnome/settingsdialog.py:901 ../../kde4/settingsdialog.py:914 -msgid "" -"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " -"*/3 for periodic backups every 3 hours" +#: ../../qt4/app.py:1368 ../../qt4/app.py:1385 +msgid "Authors" msgstr "" -#: ../../gnome/settingsdialog.py:1141 ../../kde4/settingsdialog.py:653 -msgid "New profile" +#: ../../qt4/app.py:1369 ../../qt4/app.py:1388 +msgid "Translations" msgstr "" -#: ../../gnome/settingsdialog.py:1155 ../../kde4/settingsdialog.py:669 -msgid "Rename profile" +#: ../../qt4/app.py:1370 ../../qt4/app.py:1391 +msgid "License" msgstr "" -#: ../../gnome/settingsdialog.py:1167 ../../kde4/settingsdialog.py:683 -#, python-format -msgid "Are you sure you want to delete the profile \"%s\" ?" +#: ../../qt4/logviewdialog.py:49 +msgid "Last Log View" msgstr "" -#: ../../gnome/settingsdialog.py:1173 ../../kde4/settingsdialog.py:1292 -msgid "Include folder" -msgstr "Vključi imenik" - -#: ../../gnome/settingsdialog.py:1193 ../../kde4/settingsdialog.py:1278 -msgid "Include file" +#: ../../qt4/logviewdialog.py:51 +msgid "Snapshot Log View" msgstr "" -#: ../../gnome/settingsdialog.py:1235 ../../kde4/settingsdialog.py:1241 -msgid "Exclude pattern" -msgstr "Izključitveni vzorec" - -#: ../../gnome/settingsdialog.py:1240 ../../kde4/settingsdialog.py:1251 -msgid "Exclude patterns can't contain ':' char !" +#: ../../qt4/logviewdialog.py:59 ../../qt4/settingsdialog.py:59 +#: ../../qt4/settingsdialog.py:274 ../../qt4/settingsdialog.py:1899 +msgid "Profile:" msgstr "" -#: ../../gnome/settingsdialog.py:1246 ../../kde4/settingsdialog.py:1257 -msgid "Exclude file" +#: ../../qt4/logviewdialog.py:81 +msgid "Filter:" msgstr "" -#: ../../gnome/settingsdialog.py:1257 ../../kde4/settingsdialog.py:1261 -msgid "Exclude folder" +#: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 +msgid "All" msgstr "" -#: ../../gnome/snapshotsdialog.py:240 -msgid "Jump to" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 +#: ../../qt4/settingsdialog.py:657 +msgid "Errors" msgstr "" -#: ../../gnome/snapshotsdialog.py:248 ../../kde4/snapshotsdialog.py:164 -msgid "Diff" -msgstr "Primerjava" - -#: ../../gnome/snapshotsdialog.py:277 ../../kde4/snapshotsdialog.py:339 -msgid "You can't compare a snapshot to itself" -msgstr "Posnetka ni mogoče primerjati s samim sabo" - -#: ../../gnome/snapshotsdialog.py:284 ../../kde4/snapshotsdialog.py:346 -#, python-format -msgid "Command not found: %s" -msgstr "Ukaza ni mogoče najti: %s" - -#: ../../gnome/snapshotsdialog.py:307 ../../kde4/snapshotsdialog.py:367 -#, python-format -msgid "" -"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 +msgid "Changes" msgstr "" -#: ../../gnome/snapshotsdialog.py:310 ../../kde4/snapshotsdialog.py:370 -#, python-format -msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +#: ../../qt4/logviewdialog.py:92 +msgid "Informations" msgstr "" -#: ../../gnome/snapshotsdialog.py:312 ../../kde4/snapshotsdialog.py:372 -msgid "WARNING: This can not be revoked!" +#: ../../qt4/logviewdialog.py:101 +msgid "[E] Error, [I] Information, [C] Change" msgstr "" -#: ../../gnome/snapshotsdialog.py:317 ../../kde4/snapshotsdialog.py:377 -#, python-format -msgid "Exclude \"%s\" from future snapshots?" +#: ../../qt4/logviewdialog.py:104 +msgid "decode paths" msgstr "" -#: ../../kde4/app.py:86 ../../gnome/mainwindow.glade:58 -#: ../../gnome/mainwindow.glade:60 -msgid "Refresh snapshots list" +#: ../../qt4/messagebox.py:56 +msgid "Error" msgstr "" -#: ../../kde4/app.py:94 ../../gnome/mainwindow.glade:88 -#: ../../gnome/mainwindow.glade:90 -msgid "Remove Snapshot" -msgstr "Odstrani posnetek" - -#: ../../kde4/app.py:98 ../../gnome/mainwindow.glade:105 -msgid "View Snapshot Log" +#: ../../qt4/messagebox.py:62 ../../qt4/messagebox.py:68 +msgid "Question" msgstr "" -#: ../../kde4/app.py:102 ../../gnome/mainwindow.glade:121 -msgid "View Last Log" +#: ../../qt4/qt4systrayicon.py:69 +msgid "Start BackInTime" msgstr "" -#: ../../kde4/app.py:108 ../../kde4/settingsdialog.py:69 -#: ../../gnome/mainwindow.glade:144 ../../gnome/mainwindow.glade:146 -#: ../../gnome/settingsdialog.glade:7 -msgid "Settings" -msgstr "Nastavitve" - -#: ../../kde4/app.py:124 ../../gnome/mainwindow.glade:169 -msgid "Shutdown system after snapshot has finished." +#: ../../qt4/qt4systrayicon.py:124 +msgid "Working..." msgstr "" -#: ../../kde4/app.py:131 ../../gnome/mainwindow.glade:184 -#: ../../gnome/mainwindow.glade:186 -msgid "Exit" -msgstr "Izhod" - -#: ../../kde4/app.py:186 ../../gnome/mainwindow.glade:289 -msgid "Up" -msgstr "Gor" - -#: ../../kde4/app.py:199 ../../gnome/mainwindow.glade:325 -msgid "Show hidden files" -msgstr "Pokaži skrite datoteke" - -#: ../../kde4/app.py:244 -msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" -msgstr "" +#: ../../qt4/qt4tools.py:178 +msgid "Today" +msgstr "Danes" -#: ../../kde4/app.py:839 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" -msgstr "" -"Res želite zbrisati posnetek:\n" -"%s" +#: ../../qt4/qt4tools.py:183 +msgid "Yesterday" +msgstr "Včeraj" -#: ../../kde4/app.py:1140 ../../kde4/kde4systrayicon.py:117 -msgid "Working..." -msgstr "" +#: ../../qt4/qt4tools.py:188 +msgid "This week" +msgstr "Ta teden" -#: ../../kde4/logviewdialog.py:55 -msgid "Error Log View" -msgstr "" +#: ../../qt4/qt4tools.py:193 +msgid "Last week" +msgstr "Prejšnji teden" -#: ../../kde4/logviewdialog.py:65 ../../kde4/settingsdialog.py:79 -#: ../../kde4/settingsdialog.py:293 ../../gnome/logviewdialog.glade:73 -#: ../../gnome/settingsdialog.glade:72 -msgid "Profile:" +#: ../../qt4/restoredialog.py:75 +msgid "Show full Log" msgstr "" -#: ../../kde4/logviewdialog.py:77 ../../gnome/logviewdialog.glade:110 -msgid "Filter:" +#: ../../qt4/settingsdialog.py:68 +msgid "Edit" msgstr "" -#: ../../kde4/logviewdialog.py:100 ../../gnome/logviewdialog.glade:169 -msgid "[E] Error, [I] Information, [C] Change" +#: ../../qt4/settingsdialog.py:73 +msgid "Modify for Full System Backup" msgstr "" -#: ../../kde4/logviewdialog.py:103 ../../gnome/logviewdialog.glade:195 -msgid "decode paths" +#: ../../qt4/settingsdialog.py:77 ../../qt4/settingsdialog.py:451 +msgid "Add" msgstr "" -#: ../../kde4/settingsdialog.py:88 -msgid "Edit" +#: ../../qt4/settingsdialog.py:81 ../../qt4/settingsdialog.py:408 +#: ../../qt4/settingsdialog.py:467 +msgid "Remove" msgstr "" -#: ../../kde4/settingsdialog.py:106 ../../gnome/settingsdialog.glade:1207 +#: ../../qt4/settingsdialog.py:96 msgid "General" msgstr "" -#: ../../kde4/settingsdialog.py:114 ../../gnome/settingsdialog.glade:199 +#: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "" -#: ../../kde4/settingsdialog.py:127 ../../kde4/settingsdialog.py:1311 +#: ../../qt4/settingsdialog.py:119 +#, python-format +msgid "" +"Warning: %(app)s uses EncFS for encryption. A recent security audit " +"revealed several possible attack vectors for this. Please take a look at 'A " +"NOTE ON SECURITY' in 'man backintime'." +msgstr "" + +#: ../../qt4/settingsdialog.py:129 ../../qt4/settingsdialog.py:1568 msgid "Where to save snapshots" msgstr "Kam naj se shranijo posnetki" -#: ../../kde4/settingsdialog.py:146 +#: ../../qt4/settingsdialog.py:145 +msgid "Folder" +msgstr "" + +#: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" -#: ../../kde4/settingsdialog.py:158 ../../kde4/settingsdialog.py:283 -#: ../../gnome/settingsdialog.glade:323 ../../gnome/settingsdialog.glade:583 -#: ../../gnome/settingsdialog.glade:874 +#: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "" -#: ../../kde4/settingsdialog.py:163 ../../gnome/settingsdialog.glade:350 -#: ../../gnome/settingsdialog.glade:610 +#: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "" -#: ../../kde4/settingsdialog.py:168 ../../kde4/settingsdialog.py:288 -#: ../../gnome/settingsdialog.glade:377 ../../gnome/settingsdialog.glade:637 -#: ../../gnome/settingsdialog.glade:902 +#: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "" -#: ../../kde4/settingsdialog.py:173 ../../gnome/settingsdialog.glade:416 +#: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" -#: ../../kde4/settingsdialog.py:178 ../../gnome/settingsdialog.glade:459 +#: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" -#: ../../kde4/settingsdialog.py:184 +#: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "" -#: ../../kde4/settingsdialog.py:228 ../../kde4/settingsdialog.py:237 -#: ../../kde4/settingsdialog.py:243 ../../gnome/settingsdialog.glade:703 -#: ../../gnome/settingsdialog.glade:743 +#: ../../qt4/settingsdialog.py:201 +msgid "Key File" +msgstr "" + +#: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 +#: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "" -#: ../../kde4/settingsdialog.py:249 ../../gnome/settingsdialog.glade:775 +#: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" -#: ../../kde4/settingsdialog.py:252 ../../gnome/settingsdialog.glade:792 +#: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" -#: ../../kde4/settingsdialog.py:264 ../../gnome/settingsdialog.glade:968 +#: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "" -#: ../../kde4/settingsdialog.py:276 ../../gnome/settingsdialog.glade:848 -msgid "Auto Host / User / Profile Id" +#: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 +msgid "Full snapshot path: " msgstr "" -#: ../../kde4/settingsdialog.py:301 +#: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "" -#: ../../kde4/settingsdialog.py:311 ../../gnome/settingsdialog.glade:1092 +#: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "" -#: ../../kde4/settingsdialog.py:322 ../../gnome/settingsdialog.glade:1079 +#: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "" -#: ../../kde4/settingsdialog.py:333 ../../gnome/settingsdialog.glade:1066 +#: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "" -#: ../../kde4/settingsdialog.py:344 ../../gnome/settingsdialog.glade:1053 +#: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "" -#: ../../kde4/settingsdialog.py:353 ../../gnome/settingsdialog.glade:1014 +#: ../../qt4/settingsdialog.py:339 msgid "" -"Run Back In Time periodically with anacron. This is useful if the computer " -"is not running regular." +"Run Back In Time repeatedly. This is useful if the computer is not running " +"regular." msgstr "" -#: ../../kde4/settingsdialog.py:357 ../../gnome/settingsdialog.glade:1040 -msgid "Frequency in days:" +#: ../../qt4/settingsdialog.py:344 +msgid "Every:" msgstr "" -#: ../../kde4/settingsdialog.py:368 ../../gnome/settingsdialog.glade:1026 +#: ../../qt4/settingsdialog.py:362 msgid "" "Run Back In Time as soon as the drive is connected (only once every X " "days).\n" "You will be prompted for your sudo password." msgstr "" -#: ../../kde4/settingsdialog.py:379 ../../gnome/settingsdialog.glade:1310 +#: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "" -#: ../../kde4/settingsdialog.py:403 ../../kde4/settingsdialog.py:445 -#: ../../gnome/settingsdialog.glade:1411 +#: ../../qt4/settingsdialog.py:381 +msgid "Include files and folders" +msgstr "" + +#: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "" -#: ../../kde4/settingsdialog.py:408 ../../kde4/settingsdialog.py:450 -#: ../../gnome/settingsdialog.glade:1427 +#: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "" -#: ../../kde4/settingsdialog.py:418 ../../gnome/settingsdialog.glade:1474 +#: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "" -#: ../../kde4/settingsdialog.py:421 ../../gnome/settingsdialog.glade:1328 +#: ../../qt4/settingsdialog.py:417 msgid "" "Warning: Wildcards ('foo*', '[fF]oo', 'fo?') will be ignored with " "mode 'SSH encrypted'.\n" "Only separate asterisk are allowed ('foo/*', 'foo/**/bar')" msgstr "" -#: ../../kde4/settingsdialog.py:430 +#: ../../qt4/settingsdialog.py:425 +msgid "Exclude patterns, files or folders" +msgstr "" + +#: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "" -#: ../../kde4/settingsdialog.py:460 ../../gnome/settingsdialog.glade:1905 +#: ../../qt4/settingsdialog.py:463 +msgid "Add default" +msgstr "" + +#: ../../qt4/settingsdialog.py:474 +msgid "Exclude files bigger than: " +msgstr "" + +#: ../../qt4/settingsdialog.py:475 +#, python-format +msgid "" +"Exclude files bigger than value in %(prefix)s.\n" +"With 'Full rsync mode' disabled this will only affect new files\n" +"because for rsync this is a transfer option, not an exclude option.\n" +"So big files that has been backed up before will remain in snapshots\n" +"even if they had changed." +msgstr "" + +#: ../../qt4/settingsdialog.py:493 msgid "Auto-remove" msgstr "" -#: ../../kde4/settingsdialog.py:464 ../../gnome/settingsdialog.glade:1608 +#: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "" -#: ../../kde4/settingsdialog.py:478 ../../gnome/settingsdialog.glade:1624 +#: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "" -#: ../../kde4/settingsdialog.py:490 ../../gnome/settingsdialog.glade:1642 +#: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" -#: ../../kde4/settingsdialog.py:514 ../../gnome/settingsdialog.glade:1697 +#: ../../qt4/settingsdialog.py:551 +msgid "Run in background on remote Host." +msgstr "" + +#: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "" -#: ../../kde4/settingsdialog.py:517 ../../kde4/settingsdialog.py:522 -#: ../../gnome/settingsdialog.glade:1705 ../../gnome/settingsdialog.glade:1729 +#: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "" -#: ../../kde4/settingsdialog.py:519 ../../gnome/settingsdialog.glade:1717 +#: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "" -#: ../../kde4/settingsdialog.py:524 ../../gnome/settingsdialog.glade:1743 +#: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "" -#: ../../kde4/settingsdialog.py:527 +#: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "" -#: ../../kde4/settingsdialog.py:529 ../../gnome/settingsdialog.glade:1769 +#: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "" -#: ../../kde4/settingsdialog.py:532 ../../gnome/settingsdialog.glade:1781 +#: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "" -#: ../../kde4/settingsdialog.py:534 ../../gnome/settingsdialog.glade:1795 +#: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "" -#: ../../kde4/settingsdialog.py:537 ../../gnome/settingsdialog.glade:1496 +#: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "Ne odstranjuj posnetkov z imenom" -#: ../../kde4/settingsdialog.py:546 ../../gnome/settingsdialog.glade:2104 +#: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "" -#: ../../kde4/settingsdialog.py:549 ../../gnome/settingsdialog.glade:1920 +#: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "" -#: ../../kde4/settingsdialog.py:552 ../../gnome/settingsdialog.glade:1937 +#: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "" -#: ../../kde4/settingsdialog.py:555 +#: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" msgstr "" -#: ../../kde4/settingsdialog.py:558 ../../gnome/settingsdialog.glade:1955 -msgid "Backup files on restore" +#: ../../qt4/settingsdialog.py:611 +msgid "Run only one snapshot at a time" +msgstr "" + +#: ../../qt4/settingsdialog.py:612 +msgid "" +"Other snapshots will be blocked until the current snapshot is done.\n" +"This is a global option. So it will effect all profiles for this user.\n" +"But you need to activate this for all other users, too." +msgstr "" + +#: ../../qt4/settingsdialog.py:617 +msgid "Backup replaced files on restore" msgstr "" -#: ../../kde4/settingsdialog.py:561 ../../gnome/settingsdialog.glade:1972 +#: ../../qt4/settingsdialog.py:618 +#, python-format +msgid "" +"Newer versions of files will be renamed with trailing '%(suffix)s' before " +"restoring.\n" +"If you don't need them anymore you can remove them with '%(cmd)s'" +msgstr "" + +#: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "" -#: ../../kde4/settingsdialog.py:564 ../../gnome/settingsdialog.glade:1989 +#: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "" -#: ../../kde4/settingsdialog.py:567 ../../gnome/settingsdialog.glade:2006 +#: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "" -#: ../../kde4/settingsdialog.py:568 ../../gnome/settingsdialog.glade:2032 +#: ../../qt4/settingsdialog.py:634 msgid "" -"- snapshots are no read-only\n" -"- destination file-system must support all linux attributes (dates, rights, " +"- snapshots are not read-only\n" +"- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" -#: ../../kde4/settingsdialog.py:575 ../../gnome/settingsdialog.glade:2045 +#: ../../qt4/settingsdialog.py:641 +msgid "Take a new snapshot regardless of there were changes or not." +msgstr "" + +#: ../../qt4/settingsdialog.py:644 msgid "Check for changes (don't take a new snapshot if nothing changed)" msgstr "" -#: ../../kde4/settingsdialog.py:582 +#: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "" -#: ../../kde4/settingsdialog.py:597 ../../gnome/settingsdialog.glade:2366 -msgid "Expert Options" +#: ../../qt4/settingsdialog.py:656 +msgid "None" +msgstr "" + +#: ../../qt4/settingsdialog.py:658 +msgid "Changes & Errors" msgstr "" -#: ../../kde4/settingsdialog.py:600 +#: ../../qt4/settingsdialog.py:674 msgid "Change these options only if you really know what you are doing !" msgstr "" -#: ../../kde4/settingsdialog.py:608 ../../gnome/settingsdialog.glade:2133 -msgid "Run 'nice' as cron job (default: enabled)" +#: ../../qt4/settingsdialog.py:678 +msgid "Run 'nice':" +msgstr "" + +#: ../../qt4/settingsdialog.py:684 ../../qt4/settingsdialog.py:696 +msgid "as cron job" +msgstr "" + +#: ../../qt4/settingsdialog.py:687 ../../qt4/settingsdialog.py:702 +#: ../../qt4/settingsdialog.py:716 +msgid "on remote host" +msgstr "" + +#: ../../qt4/settingsdialog.py:690 +msgid "Run 'ionice':" msgstr "" -#: ../../kde4/settingsdialog.py:611 ../../gnome/settingsdialog.glade:2150 -msgid "Run 'ionice' as cron job (default: enabled)" +#: ../../qt4/settingsdialog.py:699 +msgid "when taking a manual snapshot" msgstr "" -#: ../../kde4/settingsdialog.py:614 ../../gnome/settingsdialog.glade:2167 -msgid "Run 'ionice' when taking a manual snapshot (default: disabled)" +#: ../../qt4/settingsdialog.py:706 +msgid "Run 'rsync' with 'nocache':" msgstr "" -#: ../../kde4/settingsdialog.py:617 ../../gnome/settingsdialog.glade:2184 -msgid "Run 'nice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:712 +msgid "on local machine" msgstr "" -#: ../../kde4/settingsdialog.py:620 ../../gnome/settingsdialog.glade:2201 -msgid "Run 'ionice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:719 +msgid "Redirect stdout to /dev/null in cronjobs." msgstr "" -#: ../../kde4/settingsdialog.py:626 ../../gnome/settingsdialog.glade:2224 +#: ../../qt4/settingsdialog.py:725 +msgid "Redirect stderr to /dev/null in cronjobs." +msgstr "" + +#: ../../qt4/settingsdialog.py:734 msgid "Limit rsync bandwidth usage: " msgstr "" -#: ../../kde4/settingsdialog.py:629 ../../gnome/settingsdialog.glade:2259 +#: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" -#: ../../kde4/settingsdialog.py:634 ../../gnome/settingsdialog.glade:2280 +#: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "" -#: ../../kde4/settingsdialog.py:637 ../../gnome/settingsdialog.glade:2297 +#: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "" -#: ../../kde4/settingsdialog.py:640 ../../gnome/settingsdialog.glade:2314 +#: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute links)" msgstr "" -#: ../../kde4/settingsdialog.py:643 ../../gnome/settingsdialog.glade:2331 -msgid "Copy links (dereference symbolic links)" +#: ../../qt4/settingsdialog.py:834 +msgid "Paste additional options to rsync" msgstr "" -#: ../../kde4/snapshotsdialog.py:46 ../../kde4/snapshotsdialog.py:173 -#: ../../gnome/snapshotsdialog.glade:385 -msgid "Diff Options" -msgstr "Možnosti za primerjavo" - -#: ../../kde4/snapshotsdialog.py:56 ../../gnome/snapshotsdialog.glade:314 -msgid "Command:" -msgstr "Ukaz:" - -#: ../../kde4/snapshotsdialog.py:60 ../../gnome/snapshotsdialog.glade:322 -msgid "Parameters:" -msgstr "Parametri:" - -#: ../../kde4/snapshotsdialog.py:64 ../../gnome/snapshotsdialog.glade:334 -msgid "Use %1 and %2 for path parameters" -msgstr "Uporabi %1 in %2 kot vrednosti za pot" +#: ../../qt4/settingsdialog.py:837 +msgid "" +"Options must be quoted e.g. --exclude-from=\"/path/to/my exclude file\"." +msgstr "" -#: ../../kde4/snapshotsdialog.py:123 ../../gnome/snapshotsdialog.glade:184 -#: ../../gnome/snapshotsdialog.glade:186 -msgid "Delete" +#: ../../qt4/settingsdialog.py:847 +msgid "Add prefix to SSH commands" msgstr "" -#: ../../kde4/snapshotsdialog.py:128 ../../gnome/snapshotsdialog.glade:199 -#: ../../gnome/snapshotsdialog.glade:201 -msgid "Select All" +#: ../../qt4/settingsdialog.py:850 +#, python-format +msgid "" +"Prefix to run before every command on remote host.\n" +"Variables need to be escaped with \\$FOO.\n" +"This doesn't touch rsync. So to add a prefix\n" +"for rsync use \"%(cb_rsync_options)s\" with\n" +"%(rsync_options_value)s\n" +"\n" +"%(default)s: %(def_value)s" msgstr "" -#: ../../kde4/snapshotsdialog.py:132 ../../gnome/snapshotsdialog.glade:88 -msgid "List only different snapshots" +#: ../../qt4/settingsdialog.py:858 ../../qt4/settingsdialog.py:1691 +msgid "default" msgstr "" -#: ../../kde4/snapshotsdialog.py:139 ../../gnome/snapshotsdialog.glade:110 -msgid "List only equal snapshots to: " +#: ../../qt4/settingsdialog.py:875 +msgid "Restore Config" msgstr "" -#: ../../kde4/snapshotsdialog.py:149 ../../gnome/snapshotsdialog.glade:146 -msgid "Deep check (more accurate, but slow)" +#: ../../qt4/settingsdialog.py:891 +msgid "" +"Full system backup can only create a snapshot to be restored to the same " +"physical disk(s) with the same disk partitioning as from the source; " +"restoring to new physical disks or the same disks with different " +"partitioning will yield a potentially broken and unusable system.\n" +"\n" +"Full system backup will override some settings that may have been " +"customized. Continue?" msgstr "" -#: ../../kde4/snapshotsdialog.py:174 -msgid "Go To" -msgstr "Pojdi na" +#: ../../qt4/settingsdialog.py:922 +msgid "New profile" +msgstr "" -#: ../../gnome/logviewdialog.glade:9 -msgid "Log View" +#: ../../qt4/settingsdialog.py:938 +msgid "Rename profile" msgstr "" -#: ../../gnome/logviewdialog.glade:179 -msgid "scroll down automatic" +#: ../../qt4/settingsdialog.py:952 +#, python-format +msgid "Are you sure you want to delete the profile \"%s\" ?" msgstr "" -#: ../../gnome/mainwindow.glade:7 -msgid "Back In Time" -msgstr "Back In Time" +#: ../../qt4/settingsdialog.py:1191 +msgid "" +"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " +"*/3 for periodic backups every 3 hours" +msgstr "" -#: ../../gnome/mainwindow.glade:45 -msgid "Backup Now" -msgstr "Naredi varnostno kopijo zdaj" +#: ../../qt4/settingsdialog.py:1489 +msgid "Exclude pattern" +msgstr "Izključitveni vzorec" -#: ../../gnome/mainwindow.glade:171 -msgid "Shutdown" +#: ../../qt4/settingsdialog.py:1502 +msgid "Exclude file" msgstr "" -#: ../../gnome/mainwindow.glade:287 -msgid "Parent folder" +#: ../../qt4/settingsdialog.py:1506 +msgid "Exclude folder" msgstr "" -#: ../../gnome/mainwindow.glade:327 -msgid "Hidden files" +#: ../../qt4/settingsdialog.py:1525 +msgid "Include file" msgstr "" -#: ../../gnome/mainwindow.glade:451 +#: ../../qt4/settingsdialog.py:1533 ../../qt4/settingsdialog.py:1553 +#, python-format msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +"\"%s\" is a symlink. The linked target will not be backed up until you " +"include it, too.\n" +"Would you like to include the symlinks target instead?" msgstr "" -#: ../../gnome/settingsdialog.glade:287 -msgid "Where to save snapshots" -msgstr "Kam naj bodo shranjeni posnetki" +#: ../../qt4/settingsdialog.py:1545 +msgid "Include folder" +msgstr "Vključi imenik" -#: ../../gnome/settingsdialog.glade:483 -msgid "Private key:" +#: ../../qt4/settingsdialog.py:1572 +msgid "Are you sure you want to change snapshots folder ?" msgstr "" -#: ../../gnome/settingsdialog.glade:534 -msgid "Advanced SSH Settings" +#: ../../qt4/settingsdialog.py:1688 +msgid "enabled" msgstr "" -#: ../../gnome/settingsdialog.glade:552 -msgid "SSH Settings" +#: ../../qt4/settingsdialog.py:1690 +msgid "disabled" msgstr "" -#: ../../gnome/settingsdialog.glade:815 -msgid "Password" +#: ../../qt4/settingsdialog.py:1715 +msgid "Restore Settings" msgstr "" -#: ../../gnome/settingsdialog.glade:930 -msgid "Profile Id:" +#: ../../qt4/settingsdialog.py:1732 +msgid " and add your user to group 'fuse'" msgstr "" -#: ../../gnome/settingsdialog.glade:1115 +#: ../../qt4/settingsdialog.py:1736 +#, python-format msgid "" -"hours seperate by comma ( e.g. 8,12,18,23) or */3 for periodic backups every " -"3 hours (cron style)" +"Please navigate to the snapshot from which you want to restore %(appName)s's " +"configuration. The path may look like: \n" +"%(samplePath)s\n" +"\n" +"If your snapshots are on a remote drive or if they are encrypted you need to " +"manually mount them first. If you use Mode SSH you also may need to set up " +"public key login to the remote host%(addFuse)s.\n" +"Take a look at 'man backintime'." msgstr "" -#: ../../gnome/settingsdialog.glade:1163 -msgid "Schedule" +#: ../../qt4/settingsdialog.py:1794 ../../qt4/settingsdialog.py:1854 +msgid "No config found" msgstr "" -#: ../../gnome/settingsdialog.glade:1363 -msgid "Highly recommended:" +#: ../../qt4/snapshotsdialog.py:49 ../../qt4/snapshotsdialog.py:173 +msgid "Diff Options" +msgstr "Možnosti za primerjavo" + +#: ../../qt4/snapshotsdialog.py:56 +msgid "Command:" +msgstr "Ukaz:" + +#: ../../qt4/snapshotsdialog.py:60 +msgid "Parameters:" +msgstr "Parametri:" + +#: ../../qt4/snapshotsdialog.py:64 +msgid "Use %1 and %2 for path parameters" +msgstr "Uporabi %1 in %2 kot vrednosti za pot" + +#: ../../qt4/snapshotsdialog.py:106 +msgid "List only different snapshots" msgstr "" -#: ../../gnome/settingsdialog.glade:1377 -msgid "label" +#: ../../qt4/snapshotsdialog.py:113 +msgid "List only equal snapshots to: " msgstr "" -#: ../../gnome/settingsdialog.glade:1755 -msgid "week(s)" +#: ../../qt4/snapshotsdialog.py:123 +msgid "Deep check (more accurate, but slow)" msgstr "" -#: ../../gnome/settingsdialog.glade:2069 -msgid "Log level:" +#: ../../qt4/snapshotsdialog.py:144 +msgid "Delete" +msgstr "" + +#: ../../qt4/snapshotsdialog.py:148 +msgid "Select All" msgstr "" -#: ../../gnome/settingsdialog.glade:2121 +#: ../../qt4/snapshotsdialog.py:161 +msgid "Diff" +msgstr "Primerjava" + +#: ../../qt4/snapshotsdialog.py:172 +msgid "Go To" +msgstr "Pojdi na" + +#: ../../qt4/snapshotsdialog.py:326 +msgid "You can't compare a snapshot to itself" +msgstr "Posnetka ni mogoče primerjati s samim sabo" + +#: ../../qt4/snapshotsdialog.py:333 +#, python-format +msgid "Command not found: %s" +msgstr "Ukaza ni mogoče najti: %s" + +#: ../../qt4/snapshotsdialog.py:354 +#, python-format msgid "" -"Change these options only if you really know what you are doing !" +"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" msgstr "" -#: ../../gnome/snapshotsdialog.glade:263 -msgid "Diff with" -msgstr "Primerjaj z" +#: ../../qt4/snapshotsdialog.py:357 +#, python-format +msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +msgstr "" -#: ../../gnome/textinputdialog.glade:7 -msgid "Pattern" +#: ../../qt4/snapshotsdialog.py:359 +msgid "WARNING: This can not be revoked!" msgstr "" -#: ../../gnome/textinputdialog.glade:70 -msgid "Text" +#: ../../qt4/snapshotsdialog.py:374 +#, python-format +msgid "Exclude \"%s\" from future snapshots?" msgstr "" diff -Nru backintime-1.0.36/common/po/sr.po backintime-1.1.12/common/po/sr.po --- backintime-1.0.36/common/po/sr.po 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/po/sr.po 2016-01-11 18:07:58.000000000 +0000 @@ -7,207 +7,239 @@ msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2013-11-09 22:34+0100\n" -"PO-Revision-Date: 2010-11-09 20:10+0000\n" -"Last-Translator: boki24 \n" +"POT-Creation-Date: 2015-12-19 00:47+0100\n" +"PO-Revision-Date: 2015-09-09 21:51+0000\n" +"Last-Translator: Back In Time Team \n" "Language-Team: Serbian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Launchpad-Export-Date: 2014-08-06 10:20+0000\n" -"X-Generator: Launchpad (build 17147)\n" +"X-Launchpad-Export-Date: 2016-01-11 17:52+0000\n" +"X-Generator: Launchpad (build 17881)\n" -#: ../../common/config.py:72 +#: ../../common/configfile.py:60 +#, python-format +msgid "Failed to save config: %s" +msgstr "" + +#: ../../common/configfile.py:78 +#, python-format +msgid "Failed to load config: %s" +msgstr "" + +#: ../../common/configfile.py:352 ../../common/configfile.py:414 +#, python-format +msgid "Profile \"%s\" already exists !" +msgstr "Profil \"%s\" već postoji!" + +#: ../../common/configfile.py:383 +msgid "You can't remove the last profile !" +msgstr "Nije moguće ukloniti poslednji profil!" + +#: ../../common/config.py:76 msgid "Disabled" msgstr "Onemogućeno" -#: ../../common/config.py:73 +#: ../../common/config.py:77 msgid "At every boot/reboot" msgstr "Pri svakom pokretanju/ponovnom pokretanju sistema" -#: ../../common/config.py:74 +#: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Svakih 5 minuta" -#: ../../common/config.py:75 +#: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Svakih 10 minuta" -#: ../../common/config.py:76 +#: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "" -#: ../../common/config.py:77 +#: ../../common/config.py:81 msgid "Every hour" msgstr "" -#: ../../common/config.py:78 +#: ../../common/config.py:82 msgid "Every 2 hours" msgstr "" -#: ../../common/config.py:79 +#: ../../common/config.py:83 msgid "Every 4 hours" msgstr "" -#: ../../common/config.py:80 +#: ../../common/config.py:84 msgid "Every 6 hours" msgstr "" -#: ../../common/config.py:81 +#: ../../common/config.py:85 msgid "Every 12 hours" msgstr "" -#: ../../common/config.py:82 +#: ../../common/config.py:86 msgid "Custom Hours" msgstr "" -#: ../../common/config.py:83 +#: ../../common/config.py:87 msgid "Every Day" msgstr "Svakog dana" -#: ../../common/config.py:84 -msgid "Daily (anacron)" +#: ../../common/config.py:88 +msgid "Repeatedly (anacron)" msgstr "" -#: ../../common/config.py:85 +#: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "" -#: ../../common/config.py:86 +#: ../../common/config.py:90 msgid "Every Week" msgstr "Jednom nedeljno" -#: ../../common/config.py:87 +#: ../../common/config.py:91 msgid "Every Month" msgstr "Jednom mesečno" -#: ../../common/config.py:91 +#: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Dana" -#: ../../common/config.py:92 +#: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Sedmica" -#: ../../common/config.py:93 +#: ../../common/config.py:97 msgid "Year(s)" msgstr "Godina" -#: ../../common/config.py:100 +#: ../../common/config.py:101 +msgid "Hour(s)" +msgstr "" + +#: ../../common/config.py:104 +msgid "Month(s)" +msgstr "" + +#: ../../common/config.py:126 ../../qt4/settingsdialog.py:551 msgid " EXPERIMENTAL!" msgstr "" -#: ../../common/config.py:103 +#: ../../common/config.py:129 msgid "Local" msgstr "" -#: ../../common/config.py:104 +#: ../../common/config.py:130 msgid "SSH" msgstr "" -#: ../../common/config.py:104 ../../common/config.py:106 -#: ../../gnome/settingsdialog.py:475 ../../kde4/settingsdialog.py:1325 +#: ../../common/config.py:130 ../../common/config.py:132 +#: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "" -#: ../../common/config.py:105 +#: ../../common/config.py:131 msgid "Local encrypted" msgstr "" -#: ../../common/config.py:105 ../../common/config.py:106 +#: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "" -#: ../../common/config.py:106 +#: ../../common/config.py:132 msgid "SSH encrypted" msgstr "" -#: ../../common/config.py:112 +#: ../../common/config.py:135 msgid "Default" msgstr "" -#: ../../common/config.py:113 +#: ../../common/config.py:136 msgid "AES128-CTR" msgstr "" -#: ../../common/config.py:114 +#: ../../common/config.py:137 msgid "AES192-CTR" msgstr "" -#: ../../common/config.py:115 +#: ../../common/config.py:138 msgid "AES256-CTR" msgstr "" -#: ../../common/config.py:116 +#: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "" -#: ../../common/config.py:117 +#: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "" -#: ../../common/config.py:118 +#: ../../common/config.py:141 msgid "AES128-CBC" msgstr "" -#: ../../common/config.py:119 +#: ../../common/config.py:142 msgid "3DES-CBC" msgstr "" -#: ../../common/config.py:120 +#: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "" -#: ../../common/config.py:121 +#: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "" -#: ../../common/config.py:122 +#: ../../common/config.py:145 msgid "AES192-CBC" msgstr "" -#: ../../common/config.py:123 +#: ../../common/config.py:146 msgid "AES256-CBC" msgstr "" -#: ../../common/config.py:124 +#: ../../common/config.py:147 msgid "ARCFOUR" msgstr "" -#: ../../common/config.py:129 +#: ../../common/config.py:153 msgid "Main profile" msgstr "Glavni profil" -#: ../../common/config.py:256 ../../common/config.py:275 -#: ../../common/config.py:286 ../../common/config.py:291 +#: ../../common/config.py:289 ../../common/config.py:296 +#: ../../common/config.py:307 ../../common/config.py:312 +#: ../../qt4/qt4systrayicon.py:61 #, python-format msgid "Profile: \"%s\"" msgstr "Profil: \"%s\"" -#: ../../common/config.py:256 +#: ../../common/config.py:289 msgid "Snapshots folder is not valid !" msgstr "Direktorijum za snimak nije ispravan!" -#: ../../common/config.py:275 +#: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "Morate odabrati bar jedan direktorijum za rezervne kopije!" -#: ../../common/config.py:286 +#: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "Nije moguće uključiti direktorijum za rezervne kopije!" -#: ../../common/config.py:291 +#: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "Nije moguće uključiti poddirektorijum za rezervne kopije!" -#: ../../common/config.py:361 +#: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s nije direktorijum!" -#: ../../common/config.py:376 ../../common/config.py:389 +#: ../../common/config.py:380 +msgid "Host/User/Profile-ID must not be empty!" +msgstr "" + +#: ../../common/config.py:388 ../../common/config.py:420 #, python-format msgid "" "Can't write to: %s\n" @@ -216,59 +248,68 @@ "Ne mogu da upisujem u: %s\n" "Da li ste sigurni da imate dozvolu za upisivanje?" -#: ../../common/config.py:1286 +#: ../../common/config.py:400 +#, python-format msgid "" -"Can't find crontab.\n" -"Are you sure cron is installed ?\n" -"If not you should disable all automatic backups." +"Destination filesystem for '%(path)s' is formatted with FAT which doesn't " +"support hard-links. Please use a native Linux filesystem." msgstr "" -"Ne mogu da pronađem crontab.\n" -"Da li si siguran da je crontab inastaliran?\n" -"Ako nije, treba da onemogućiš automatsko kreiranje rezervnih kopija." -#: ../../common/config.py:1338 +#: ../../common/config.py:405 #, python-format -msgid "Schedule udev doesn't work with mode %s" +msgid "" +"Destination filsystem for '%(path)s' is a SMB mounted share. Please make " +"sure the remote SMB server supports symlinks or activate '%(copyLinks)s' in " +"'%(expertOptions)s'." msgstr "" -#: ../../common/config.py:1342 -#, python-format -msgid "Couldn't find UUID for \"%s\"" -msgstr "" +#: ../../common/config.py:408 ../../qt4/settingsdialog.py:815 +msgid "Copy links (dereference symbolic links)" +msgstr "Kopiraj linkove (prati simboličke linkove)" -#: ../../common/config.py:1379 -msgid "Failed to remove udev rules" -msgstr "" +#: ../../common/config.py:409 ../../qt4/settingsdialog.py:669 +msgid "Expert Options" +msgstr "Napredne opcije" -#: ../../common/config.py:1385 -msgid "Failed to create udev rules" +#: ../../common/config.py:411 +#, python-format +msgid "" +"Destination filesystem for '%(path)s is a sshfs mounted share. sshfs doesn't " +"support hard-links. Please use mode 'SSH' instead." msgstr "" -#: ../../common/config.py:1420 +#: ../../common/config.py:1407 msgid "" -"Can't find anacron.\n" -"Are you sure anacron is installed ?\n" -"If not you should disable daily anacron backups." +"Can't find crontab.\n" +"Are you sure cron is installed ?\n" +"If not you should disable all automatic backups." msgstr "" +"Ne mogu da pronađem crontab.\n" +"Da li si siguran da je crontab inastaliran?\n" +"Ako nije, treba da onemogućiš automatsko kreiranje rezervnih kopija." -#: ../../common/config.py:1439 -msgid "Please provide your sudo password to install the udev rule." +#: ../../common/config.py:1411 +msgid "Failed to write new crontab." msgstr "" -#: ../../common/config.py:1445 -msgid "Please provide your sudo password to remove unused udev rules." +#: ../../common/config.py:1505 +#, python-format +msgid "" +"Could not install Udev rule for profile %(profile_id)s. DBus Service " +"'%(dbus_interface)s' wasn't available" msgstr "" -#: ../../common/configfile.py:253 ../../common/configfile.py:315 +#: ../../common/config.py:1517 #, python-format -msgid "Profile \"%s\" already exists !" -msgstr "Profil \"%s\" već postoji!" +msgid "Schedule udev doesn't work with mode %s" +msgstr "" -#: ../../common/configfile.py:284 -msgid "You can't remove the last profile !" -msgstr "Nije moguće ukloniti poslednji profil!" +#: ../../common/config.py:1526 +#, python-format +msgid "Couldn't find UUID for \"%s\"" +msgstr "" -#: ../../common/encfstools.py:95 +#: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" @@ -276,38 +317,38 @@ "%(error)s" msgstr "" -#: ../../common/encfstools.py:105 +#: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "" -#: ../../common/encfstools.py:149 +#: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "" -#: ../../common/encfstools.py:153 +#: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" -#: ../../common/encfstools.py:154 +#: ../../common/encfstools.py:171 msgid "Cancel" msgstr "" -#: ../../common/encfstools.py:157 +#: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "" -#: ../../common/encfstools.py:161 +#: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "" -#: ../../common/encfstools.py:166 +#: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" -#: ../../common/encfstools.py:174 ../../common/sshtools.py:207 +#: ../../common/encfstools.py:196 ../../common/sshtools.py:262 #, python-format msgid "" "%(user)s is not member of group 'fuse'.\n" @@ -315,63 +356,66 @@ "Look at 'man backintime' for further instructions." msgstr "" -#: ../../common/encfstools.py:189 +#: ../../common/encfstools.py:211 msgid "" "encfs version 1.7.2 and before has a bug with option --reverse. Please " "update encfs" msgstr "" -#: ../../common/encfstools.py:453 ../../common/encfstools.py:480 -#: ../../common/snapshots.py:982 ../../common/snapshots.py:1288 -#: ../../kde4/app.py:82 ../../gnome/mainwindow.glade:43 +#: ../../common/encfstools.py:512 ../../common/snapshots.py:1131 +#: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "Napravi snimak" -#: ../../common/mount.py:195 +#: ../../common/mount.py:204 #, python-format msgid "" "Hash collision occurred in hash_id %s. Incrementing global value " "hash_collision and try again." msgstr "" -#: ../../common/mount.py:246 +#: ../../common/mount.py:259 #, python-format msgid "mountpoint %s not empty." msgstr "" -#: ../../common/mount.py:286 +#: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" -#: ../../common/password.py:425 +#: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" -#: ../../common/snapshots.py:171 ../../gnome/app.py:1127 -#: ../../kde4/app.py:1014 +#: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Sada" -#: ../../common/snapshots.py:182 ../../gnome/gnometools.py:37 +#: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "SA GREŠKAMA !" -#: ../../common/snapshots.py:282 +#: ../../common/snapshots.py:344 msgid "" "### This log has been decoded with automatic search pattern\n" "### If some paths are not decoded you can manually decode them with:\n" msgstr "" -#: ../../common/snapshots.py:465 +#: ../../common/snapshots.py:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "" -#: ../../common/snapshots.py:564 +#: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "" -#: ../../common/snapshots.py:739 +#: ../../common/snapshots.py:752 ../../qt4/app.py:377 ../../qt4/app.py:675 +#: ../../qt4/app.py:692 ../../qt4/qt4systrayicon.py:65 +msgid "Done" +msgstr "Gotovo" + +#: ../../common/snapshots.py:860 msgid "" "Back In Time changed its backup format.\n" "\n" @@ -382,7 +426,7 @@ "Snimci vaših ranijih rezervnih kopija mogu biti premešteni u skladu sa novim " "formatom. OK?" -#: ../../common/snapshots.py:749 +#: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" @@ -399,7 +443,7 @@ "\n" "(Program će biti u stanju da ih razlikuje)" -#: ../../common/snapshots.py:752 +#: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" @@ -407,7 +451,7 @@ "Nije pronađen nijedan profil. Prvo moram da obnovim listu profila. Molim " "ponovo pokrenite Back In Time" -#: ../../common/snapshots.py:803 +#: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" @@ -420,7 +464,7 @@ "cannot continue taking snapshots" msgstr "" -#: ../../common/snapshots.py:812 +#: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" @@ -435,7 +479,7 @@ "Možete ručno da premestite snimke, \n" "ako ste ponovo učitali Back In Time" -#: ../../common/snapshots.py:825 +#: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" @@ -445,7 +489,7 @@ "\n" "Back In Time će nastaviti da pravi snimke po planu" -#: ../../common/snapshots.py:830 +#: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" @@ -465,11 +509,11 @@ "\n" "Ako niste, bićete ponovo upitani kada sledeći put pokrenete Back In Time." -#: ../../common/snapshots.py:839 +#: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "Back In Time će nastaviti sa kreiranjem snimaka po planu" -#: ../../common/snapshots.py:841 +#: ../../common/snapshots.py:953 msgid "" "Back In Time still cannot continue taking new snapshots.\n" "Restart Back In Time to see the questions again" @@ -477,7 +521,11 @@ "Back In Time još uvek nije u stanju da pravi nove snimke.\n" "Ponovo pokrenite Back In Time da bi ponovo videli pitanja" -#: ../../common/snapshots.py:913 +#: ../../common/snapshots.py:972 +msgid "Deferring backup while on battery" +msgstr "" + +#: ../../common/snapshots.py:1035 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it." @@ -485,7 +533,7 @@ "Ne mogu da pronađem direktorijum za snimke.\n" "Ako je na izmenljivom medijumu, molim vas da ga priključite." -#: ../../common/snapshots.py:915 +#: ../../common/snapshots.py:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." @@ -493,149 +541,156 @@ msgstr[1] "Čekam %s sekundi" msgstr[2] "Čekam %s sek." -#: ../../common/snapshots.py:941 +#: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "Nisam uspeo da napravim snimak %s !!!" -#: ../../common/snapshots.py:950 +#: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "Završavam" -#: ../../common/snapshots.py:1088 +#: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "Ne mogu da kreiram direktorijum: %s" -#: ../../common/snapshots.py:1107 +#: ../../common/snapshots.py:1217 msgid "..." msgstr "..." -#: ../../common/snapshots.py:1134 +#: ../../common/snapshots.py:1238 +#, python-format +msgid "Found leftover '%s' which can be continued." +msgstr "" + +#: ../../common/snapshots.py:1250 +#, python-format +msgid "Remove leftover '%s' folder from last run" +msgstr "" + +#: ../../common/snapshots.py:1263 #, python-format msgid "Can't remove folder: %s" msgstr "Ne mogu da uklonim direktorijum: %s" -#: ../../common/snapshots.py:1219 +#: ../../common/snapshots.py:1340 #, python-format msgid "Compare with snapshot %s" msgstr "Uporedi sa snimkom %s" -#: ../../common/snapshots.py:1248 +#: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "Kreiraj čvrstu vezu" -#: ../../common/snapshots.py:1335 +#: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "Sačuvaj konfiguracioni fajl ..." -#: ../../common/snapshots.py:1341 +#: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "Sačuvaj dozvolu ..." -#: ../../common/snapshots.py:1442 +#: ../../common/snapshots.py:1470 +msgid "Save permission over ssh failed. Retry normal method" +msgstr "" + +#: ../../common/snapshots.py:1521 #, python-format msgid "Can't rename %(new_path)s to %(path)s" msgstr "" -#: ../../common/snapshots.py:1562 -msgid "Remove old snapshots" -msgstr "Ukloni stare snimke" - -#: ../../common/snapshots.py:1586 ../../kde4/settingsdialog.py:501 -#: ../../gnome/settingsdialog.glade:1660 +#: ../../common/snapshots.py:1695 ../../common/snapshots.py:1728 +#: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "Pametno uklanjanje" -#: ../../common/snapshots.py:1591 +#: ../../common/snapshots.py:1704 +msgid "Remove old snapshots" +msgstr "Ukloni stare snimke" + +#: ../../common/snapshots.py:1733 msgid "Try to keep min free space" msgstr "Pokušaj da sačuvaš minimum slobodnog prostora" -#: ../../common/snapshots.py:1621 +#: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" -#: ../../common/sshtools.py:106 +#: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "" -#: ../../common/sshtools.py:113 +#: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "" -#: ../../common/sshtools.py:187 -#, python-format -msgid "" -"Failed to unlock SSH private key:\n" -"Error: %s" -msgstr "" - -#: ../../common/sshtools.py:194 +#: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" -#: ../../common/sshtools.py:199 +#: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" -#: ../../common/sshtools.py:217 +#: ../../common/sshtools.py:278 #, python-format msgid "" "Password-less authentication for %(user)s@%(host)s failed. Look at 'man " "backintime' for further instructions." msgstr "" -#: ../../common/sshtools.py:229 +#: ../../common/sshtools.py:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" -#: ../../common/sshtools.py:254 +#: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" -#: ../../common/sshtools.py:274 +#: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" -#: ../../common/sshtools.py:276 +#: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:278 +#: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:280 +#: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" -#: ../../common/sshtools.py:302 +#: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" -#: ../../common/sshtools.py:325 ../../common/sshtools.py:383 +#: ../../common/sshtools.py:423 ../../common/sshtools.py:553 #, python-format msgid "" "Remote host %(host)s doesn't support '%(command)s':\n" @@ -643,7 +698,7 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:387 +#: ../../common/sshtools.py:556 #, python-format msgid "" "Check commands on host %(host)s returned unknown error:\n" @@ -651,96 +706,149 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:400 +#: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "" -#: ../../gnome/app.py:185 ../../gnome/app.py:594 ../../gnome/app.py:608 -#: ../../kde4/app.py:299 ../../kde4/app.py:570 ../../kde4/app.py:587 -msgid "Done" -msgstr "Gotovo" +#: ../../qt4/app.py:81 +msgid "Refresh snapshots list" +msgstr "Obnovi listu snimaka" + +#: ../../qt4/app.py:85 ../../qt4/app.py:890 +msgid "Snapshot Name" +msgstr "Ime snimka" + +#: ../../qt4/app.py:88 +msgid "Remove Snapshot" +msgstr "Ukloni snimak" + +#: ../../qt4/app.py:91 +msgid "View Snapshot Log" +msgstr "Pogledaj izveštaj snimka" + +#: ../../qt4/app.py:94 +msgid "View Last Log" +msgstr "Pogledaj poslednji izveštaj" + +#: ../../qt4/app.py:99 ../../qt4/settingsdialog.py:51 +msgid "Settings" +msgstr "Podešavanja" + +#: ../../qt4/app.py:104 +msgid "Shutdown" +msgstr "" -#: ../../gnome/app.py:189 ../../kde4/app.py:143 ../../kde4/app.py:159 -#: ../../gnome/mainwindow.glade:225 +#: ../../qt4/app.py:105 +msgid "Shutdown system after snapshot has finished." +msgstr "" + +#: ../../qt4/app.py:111 +msgid "Exit" +msgstr "Izađi" + +#: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 msgid "Help" msgstr "Pomoć" -#: ../../gnome/app.py:191 ../../kde4/app.py:146 -#: ../../gnome/mainwindow.glade:223 +#: ../../qt4/app.py:122 +msgid "Config File Help" +msgstr "" + +#: ../../qt4/app.py:125 msgid "Website" msgstr "Internet stranica" -#: ../../gnome/app.py:192 ../../kde4/app.py:148 +#: ../../qt4/app.py:127 ../../qt4/app.py:982 +msgid "Changelog" +msgstr "" + +#: ../../qt4/app.py:129 msgid "FAQ" msgstr "" -#: ../../gnome/app.py:193 ../../kde4/app.py:150 +#: ../../qt4/app.py:131 msgid "Ask a question" msgstr "" -#: ../../gnome/app.py:194 ../../kde4/app.py:152 +#: ../../qt4/app.py:133 msgid "Report a bug" msgstr "" -#: ../../gnome/app.py:196 ../../kde4/app.py:155 +#: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "O programu" -#: ../../gnome/app.py:202 ../../gnome/app.py:887 -#: ../../gnome/restoredialog.py:84 ../../gnome/snapshotsdialog.py:83 -#: ../../gnome/snapshotsdialog.py:244 ../../kde4/app.py:206 -#: ../../kde4/app.py:216 ../../kde4/restoredialog.py:68 -#: ../../kde4/snapshotsdialog.py:111 ../../kde4/snapshotsdialog.py:117 -#: ../../gnome/mainwindow.glade:350 ../../gnome/mainwindow.glade:352 -#: ../../gnome/snapshotsdialog.glade:169 ../../gnome/snapshotsdialog.glade:171 +#: ../../qt4/app.py:163 +msgid "Up" +msgstr "Gore" + +#: ../../qt4/app.py:174 ../../qt4/settingsdialog.py:1776 +msgid "Show hidden files" +msgstr "Prikaži skrivene fajlove" + +#: ../../qt4/app.py:184 ../../qt4/app.py:199 ../../qt4/app.py:233 +#: ../../qt4/restoredialog.py:62 ../../qt4/settingsdialog.py:1818 +#: ../../qt4/snapshotsdialog.py:134 ../../qt4/snapshotsdialog.py:139 msgid "Restore" msgstr "Povrati" -#: ../../gnome/app.py:203 ../../gnome/app.py:888 ../../gnome/gnometools.py:67 -#: ../../gnome/snapshotsdialog.py:84 ../../gnome/snapshotsdialog.py:245 -#: ../../kde4/app.py:208 ../../kde4/restoredialog.py:42 -#: ../../kde4/snapshotsdialog.py:113 +#: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 +#: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "" -#: ../../gnome/app.py:205 ../../gnome/app.py:896 ../../gnome/app.py:1146 -#: ../../kde4/app.py:1041 -#, python-format -msgid "Restore '%s'" +#: ../../qt4/app.py:194 +msgid "Restore and delete new files" msgstr "" -#: ../../gnome/app.py:207 ../../gnome/app.py:897 ../../gnome/app.py:1147 -#: ../../kde4/app.py:1042 +#: ../../qt4/app.py:201 #, python-format -msgid "Restore '%s' to ..." +msgid "" +"Restore selected file or folder.\n" +"If this button is grayed out this is most likely because \"%(now)s\" is " +"selected in left hand snapshots list." +msgstr "" + +#: ../../qt4/app.py:206 ../../qt4/logviewdialog.py:67 +#: ../../qt4/qt4tools.py:160 ../../qt4/snapshotsdialog.py:96 +msgid "Snapshots" +msgstr "Snimci" + +#: ../../qt4/app.py:213 +msgid "Snapshot" +msgstr "" + +#: ../../qt4/app.py:224 +msgid "View" msgstr "" -#: ../../gnome/app.py:226 ../../kde4/app.py:235 +#: ../../qt4/app.py:277 msgid "Shortcuts" msgstr "Prečice" -#: ../../gnome/app.py:249 -msgid "Name" -msgstr "Naziv" - -#: ../../gnome/app.py:260 -msgid "Size" -msgstr "Veličina" - -#: ../../gnome/app.py:267 -msgid "Date" -msgstr "Datum" - -#: ../../gnome/app.py:286 ../../gnome/app.py:883 -#: ../../gnome/snapshotsdialog.py:116 ../../kde4/app.py:171 -#: ../../kde4/app.py:221 ../../kde4/snapshotsdialog.py:91 -#: ../../gnome/mainwindow.glade:366 ../../gnome/mainwindow.glade:368 -#: ../../gnome/snapshotsdialog.glade:8 -msgid "Snapshots" -msgstr "Snimci" +#: ../../qt4/app.py:295 +msgid "" +"This folder doesn't exist\n" +"in the current selected snapshot!" +msgstr "" + +#: ../../qt4/app.py:359 +msgid "Add to Include" +msgstr "" + +#: ../../qt4/app.py:360 +msgid "Add to Exclude" +msgstr "" + +#: ../../qt4/app.py:416 +#, python-format +msgid "" +"%(appName)s is not configured. Would you like to restore a previous " +"configuration?" +msgstr "" -#: ../../gnome/app.py:348 ../../kde4/app.py:362 +#: ../../qt4/app.py:440 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it and then press OK" @@ -748,730 +856,791 @@ "Ne mogu da pronađem direktorijum sa snimcima.\n" "Ako se nalazi na izmenjivom mediju, molim da ga priključite i pritisnete OK" -#: ../../gnome/app.py:611 ../../kde4/app.py:590 -msgid "Done, no backup needed" -msgstr "Gotovo, nije bila potrebna rezervne kopija" +#: ../../qt4/app.py:473 +msgid "" +"If you close this window Back In Time will not be able to shutdown your " +"system when the snapshot has finished.\n" +"Do you really want to close?" +msgstr "" -#: ../../gnome/app.py:619 ../../kde4/app.py:598 +#: ../../qt4/app.py:667 ../../qt4/app.py:703 msgid "Working:" msgstr "Radim:" -#: ../../gnome/app.py:623 ../../kde4/app.py:602 +#: ../../qt4/app.py:695 +msgid "Done, no backup needed" +msgstr "Gotovo, nije bila potrebna rezervne kopija" + +#: ../../qt4/app.py:707 msgid "Error:" msgstr "Greška:" -#: ../../gnome/app.py:636 ../../kde4/app.py:649 +#: ../../qt4/app.py:726 ../../qt4/qt4systrayicon.py:153 +msgid "Sent:" +msgstr "" + +#: ../../qt4/app.py:727 ../../qt4/qt4systrayicon.py:154 +msgid "Speed:" +msgstr "" + +#: ../../qt4/app.py:728 ../../qt4/qt4systrayicon.py:155 +msgid "ETA:" +msgstr "" + +#: ../../qt4/app.py:777 msgid "Global" msgstr "Globalno" -#: ../../gnome/app.py:637 ../../kde4/app.py:650 +#: ../../qt4/app.py:778 msgid "Root" msgstr "Koren" -#: ../../gnome/app.py:638 ../../kde4/app.py:651 +#: ../../qt4/app.py:779 msgid "Home" msgstr "Lični direktorijum" -#: ../../gnome/app.py:662 -msgid "Bookmarks" -msgstr "Obeleživači" - -#: ../../gnome/app.py:675 ../../kde4/app.py:662 +#: ../../qt4/app.py:794 msgid "Backup folders" msgstr "Direktorijumi za rezervne kopije" -#: ../../gnome/app.py:701 ../../kde4/app.py:734 -msgid "Today" -msgstr "Danas" +#: ../../qt4/app.py:849 +msgid "This is NOT a snapshot but a live view of your local files" +msgstr "" -#: ../../gnome/app.py:705 ../../kde4/app.py:738 -msgid "Yesterday" -msgstr "Juče" +#: ../../qt4/app.py:860 ../../qt4/app.py:1476 +#, python-format +msgid "Last check %s" +msgstr "" -#: ../../gnome/app.py:709 ../../kde4/app.py:742 -msgid "This week" -msgstr "Ove nedelje" +#: ../../qt4/app.py:928 +#, python-format +msgid "" +"Are you sure you want to remove the snapshot:\n" +"%s" +msgstr "" +"Da li ste sigurni da želite da uklonite snimak:\n" +"%s" -#: ../../gnome/app.py:713 ../../kde4/app.py:746 -msgid "Last week" -msgstr "Prošla sedmica" +#: ../../qt4/app.py:1004 +#, python-format +msgid "" +"Backup local files before overwriting or\n" +"removing with trailing '%(suffix)s'." +msgstr "" -#: ../../gnome/app.py:764 ../../kde4/app.py:398 +#: ../../qt4/app.py:1010 msgid "" -"If you close this window Back In Time will not be able to shutdown your " -"system when the snapshot has finished.\n" -"Do you really want to close?" +"Are you sure you want to remove all newer files in your original folder?" msgstr "" -#: ../../gnome/app.py:881 ../../gnome/snapshotsdialog.py:238 -msgid "Open" -msgstr "Otvori" +#: ../../qt4/app.py:1014 +msgid "" +"WARNING: deleting files in filesystem root could break your whole system!!!" +msgstr "" -#: ../../gnome/app.py:1056 ../../kde4/app.py:90 ../../kde4/app.py:805 -#: ../../gnome/mainwindow.glade:73 ../../gnome/mainwindow.glade:75 -msgid "Snapshot Name" -msgstr "Ime snimka" +#: ../../qt4/app.py:1016 +msgid "Files to be restored:" +msgstr "" -#: ../../gnome/app.py:1075 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +#: ../../qt4/app.py:1031 +msgid "Do you really want to restore this files(s):" msgstr "" -"Da li ste sigurni da želite da uklonite snimak:\n" -"%s" -#: ../../gnome/app.py:1123 ../../kde4/app.py:1010 +#: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "Snimak: %s" -#: ../../gnome/app.py:1124 ../../kde4/app.py:1011 +#: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "Pogledaj snimak načinjen %s" -#: ../../gnome/app.py:1126 ../../kde4/app.py:1013 +#: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "Pogledaj trenutni sadržaj diska" -#: ../../gnome/logviewdialog.py:106 ../../gnome/settingsdialog.py:414 -#: ../../kde4/logviewdialog.py:83 ../../kde4/settingsdialog.py:590 +#: ../../qt4/app.py:1268 +#, python-format +msgid "Restore '%s'" +msgstr "" + +#: ../../qt4/app.py:1269 +#, python-format +msgid "Restore '%s' to ..." +msgstr "" + +#: ../../qt4/app.py:1270 +#, python-format +msgid "Restore '%s' and delete new files" +msgstr "" + +#: ../../qt4/app.py:1368 ../../qt4/app.py:1385 +msgid "Authors" +msgstr "" + +#: ../../qt4/app.py:1369 ../../qt4/app.py:1388 +msgid "Translations" +msgstr "" + +#: ../../qt4/app.py:1370 ../../qt4/app.py:1391 +msgid "License" +msgstr "" + +#: ../../qt4/logviewdialog.py:49 +msgid "Last Log View" +msgstr "" + +#: ../../qt4/logviewdialog.py:51 +msgid "Snapshot Log View" +msgstr "" + +#: ../../qt4/logviewdialog.py:59 ../../qt4/settingsdialog.py:59 +#: ../../qt4/settingsdialog.py:274 ../../qt4/settingsdialog.py:1899 +msgid "Profile:" +msgstr "Profil:" + +#: ../../qt4/logviewdialog.py:81 +msgid "Filter:" +msgstr "Filter:" + +#: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 msgid "All" msgstr "Sve" -#: ../../gnome/logviewdialog.py:107 ../../gnome/settingsdialog.py:412 -#: ../../kde4/logviewdialog.py:84 ../../kde4/settingsdialog.py:588 +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 +#: ../../qt4/settingsdialog.py:657 msgid "Errors" msgstr "Greške" -#: ../../gnome/logviewdialog.py:112 ../../kde4/logviewdialog.py:89 +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 msgid "Changes" msgstr "Izmene" -#: ../../gnome/logviewdialog.py:115 ../../kde4/logviewdialog.py:92 +#: ../../qt4/logviewdialog.py:92 msgid "Informations" msgstr "Informacije" -#: ../../gnome/settingsdialog.py:235 ../../kde4/settingsdialog.py:387 -msgid "Include files and folders" -msgstr "Uključi fajlove i direktorijume" - -#: ../../gnome/settingsdialog.py:264 -msgid "Exclude patterns, files or folders" -msgstr "Izostavi šablone, fajlove, ili direktorijume" - -#: ../../gnome/settingsdialog.py:411 ../../kde4/settingsdialog.py:587 -msgid "None" -msgstr "Nijedan" - -#: ../../gnome/settingsdialog.py:413 ../../kde4/settingsdialog.py:589 -msgid "Changes & Errors" -msgstr "Izmene i greške" - -#: ../../gnome/settingsdialog.py:458 -msgid "Snapshots folder" -msgstr "Direktorijum za snimke" - -#: ../../gnome/settingsdialog.py:466 ../../kde4/settingsdialog.py:1314 -msgid "Are you sure you want to change snapshots folder ?" -msgstr "Da li stvarno želiš da promeniš direktorijum za snimkea?" - -#: ../../gnome/settingsdialog.py:901 ../../kde4/settingsdialog.py:914 -msgid "" -"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " -"*/3 for periodic backups every 3 hours" -msgstr "" - -#: ../../gnome/settingsdialog.py:1141 ../../kde4/settingsdialog.py:653 -msgid "New profile" -msgstr "Novi profil" - -#: ../../gnome/settingsdialog.py:1155 ../../kde4/settingsdialog.py:669 -msgid "Rename profile" -msgstr "Preimenuj profil" - -#: ../../gnome/settingsdialog.py:1167 ../../kde4/settingsdialog.py:683 -#, python-format -msgid "Are you sure you want to delete the profile \"%s\" ?" -msgstr "Da li ste sigurni da želite da uklonite profil \"%s\" ?" - -#: ../../gnome/settingsdialog.py:1173 ../../kde4/settingsdialog.py:1292 -msgid "Include folder" -msgstr "Uključi direktorijum" - -#: ../../gnome/settingsdialog.py:1193 ../../kde4/settingsdialog.py:1278 -msgid "Include file" -msgstr "Uključi fajl" - -#: ../../gnome/settingsdialog.py:1235 ../../kde4/settingsdialog.py:1241 -msgid "Exclude pattern" -msgstr "Izostavi šablon" - -#: ../../gnome/settingsdialog.py:1240 ../../kde4/settingsdialog.py:1251 -msgid "Exclude patterns can't contain ':' char !" -msgstr "Šablon za izostavljanje ne može sadržati znak ':'!" - -#: ../../gnome/settingsdialog.py:1246 ../../kde4/settingsdialog.py:1257 -msgid "Exclude file" -msgstr "Izostavi fajl" - -#: ../../gnome/settingsdialog.py:1257 ../../kde4/settingsdialog.py:1261 -msgid "Exclude folder" -msgstr "Izostavi direktorijum" - -#: ../../gnome/snapshotsdialog.py:240 -msgid "Jump to" -msgstr "" - -#: ../../gnome/snapshotsdialog.py:248 ../../kde4/snapshotsdialog.py:164 -msgid "Diff" -msgstr "Diff" - -#: ../../gnome/snapshotsdialog.py:277 ../../kde4/snapshotsdialog.py:339 -msgid "You can't compare a snapshot to itself" -msgstr "Nije moguće uporediti snimak sa samim sobom" - -#: ../../gnome/snapshotsdialog.py:284 ../../kde4/snapshotsdialog.py:346 -#, python-format -msgid "Command not found: %s" -msgstr "Naredba nije pronađena: %s" +#: ../../qt4/logviewdialog.py:101 +msgid "[E] Error, [I] Information, [C] Change" +msgstr "[E] Greška, [I] Informacije, [C] Izmena" -#: ../../gnome/snapshotsdialog.py:307 ../../kde4/snapshotsdialog.py:367 -#, python-format -msgid "" -"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" +#: ../../qt4/logviewdialog.py:104 +msgid "decode paths" msgstr "" -#: ../../gnome/snapshotsdialog.py:310 ../../kde4/snapshotsdialog.py:370 -#, python-format -msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +#: ../../qt4/messagebox.py:56 +msgid "Error" msgstr "" -#: ../../gnome/snapshotsdialog.py:312 ../../kde4/snapshotsdialog.py:372 -msgid "WARNING: This can not be revoked!" +#: ../../qt4/messagebox.py:62 ../../qt4/messagebox.py:68 +msgid "Question" msgstr "" -#: ../../gnome/snapshotsdialog.py:317 ../../kde4/snapshotsdialog.py:377 -#, python-format -msgid "Exclude \"%s\" from future snapshots?" +#: ../../qt4/qt4systrayicon.py:69 +msgid "Start BackInTime" msgstr "" -#: ../../kde4/app.py:86 ../../gnome/mainwindow.glade:58 -#: ../../gnome/mainwindow.glade:60 -msgid "Refresh snapshots list" -msgstr "Obnovi listu snimaka" +#: ../../qt4/qt4systrayicon.py:124 +msgid "Working..." +msgstr "Radim..." -#: ../../kde4/app.py:94 ../../gnome/mainwindow.glade:88 -#: ../../gnome/mainwindow.glade:90 -msgid "Remove Snapshot" -msgstr "Ukloni snimak" +#: ../../qt4/qt4tools.py:178 +msgid "Today" +msgstr "Danas" -#: ../../kde4/app.py:98 ../../gnome/mainwindow.glade:105 -msgid "View Snapshot Log" -msgstr "Pogledaj izveštaj snimka" +#: ../../qt4/qt4tools.py:183 +msgid "Yesterday" +msgstr "Juče" -#: ../../kde4/app.py:102 ../../gnome/mainwindow.glade:121 -msgid "View Last Log" -msgstr "Pogledaj poslednji izveštaj" +#: ../../qt4/qt4tools.py:188 +msgid "This week" +msgstr "Ove nedelje" -#: ../../kde4/app.py:108 ../../kde4/settingsdialog.py:69 -#: ../../gnome/mainwindow.glade:144 ../../gnome/mainwindow.glade:146 -#: ../../gnome/settingsdialog.glade:7 -msgid "Settings" -msgstr "Podešavanja" +#: ../../qt4/qt4tools.py:193 +msgid "Last week" +msgstr "Prošla sedmica" -#: ../../kde4/app.py:124 ../../gnome/mainwindow.glade:169 -msgid "Shutdown system after snapshot has finished." +#: ../../qt4/restoredialog.py:75 +msgid "Show full Log" msgstr "" -#: ../../kde4/app.py:131 ../../gnome/mainwindow.glade:184 -#: ../../gnome/mainwindow.glade:186 -msgid "Exit" -msgstr "Izađi" - -#: ../../kde4/app.py:186 ../../gnome/mainwindow.glade:289 -msgid "Up" -msgstr "Gore" - -#: ../../kde4/app.py:199 ../../gnome/mainwindow.glade:325 -msgid "Show hidden files" -msgstr "Prikaži skrivene fajlove" +#: ../../qt4/settingsdialog.py:68 +msgid "Edit" +msgstr "Uredi" -#: ../../kde4/app.py:244 -msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +#: ../../qt4/settingsdialog.py:73 +msgid "Modify for Full System Backup" msgstr "" -"Ovaj direktorijum ne postoji\n" -"u trenutnom snimku!" -#: ../../kde4/app.py:839 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +#: ../../qt4/settingsdialog.py:77 ../../qt4/settingsdialog.py:451 +msgid "Add" msgstr "" -"Da li ste sigurni da želite da uklonite snimak:\n" -"%s" -#: ../../kde4/app.py:1140 ../../kde4/kde4systrayicon.py:117 -msgid "Working..." -msgstr "Radim..." - -#: ../../kde4/logviewdialog.py:55 -msgid "Error Log View" -msgstr "Pregled izveštaja o greškama" - -#: ../../kde4/logviewdialog.py:65 ../../kde4/settingsdialog.py:79 -#: ../../kde4/settingsdialog.py:293 ../../gnome/logviewdialog.glade:73 -#: ../../gnome/settingsdialog.glade:72 -msgid "Profile:" -msgstr "Profil:" - -#: ../../kde4/logviewdialog.py:77 ../../gnome/logviewdialog.glade:110 -msgid "Filter:" -msgstr "Filter:" - -#: ../../kde4/logviewdialog.py:100 ../../gnome/logviewdialog.glade:169 -msgid "[E] Error, [I] Information, [C] Change" -msgstr "[E] Greška, [I] Informacije, [C] Izmena" - -#: ../../kde4/logviewdialog.py:103 ../../gnome/logviewdialog.glade:195 -msgid "decode paths" +#: ../../qt4/settingsdialog.py:81 ../../qt4/settingsdialog.py:408 +#: ../../qt4/settingsdialog.py:467 +msgid "Remove" msgstr "" -#: ../../kde4/settingsdialog.py:88 -msgid "Edit" -msgstr "Uredi" - -#: ../../kde4/settingsdialog.py:106 ../../gnome/settingsdialog.glade:1207 +#: ../../qt4/settingsdialog.py:96 msgid "General" msgstr "Opšte" -#: ../../kde4/settingsdialog.py:114 ../../gnome/settingsdialog.glade:199 +#: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "" -#: ../../kde4/settingsdialog.py:127 ../../kde4/settingsdialog.py:1311 +#: ../../qt4/settingsdialog.py:119 +#, python-format +msgid "" +"Warning: %(app)s uses EncFS for encryption. A recent security audit " +"revealed several possible attack vectors for this. Please take a look at 'A " +"NOTE ON SECURITY' in 'man backintime'." +msgstr "" + +#: ../../qt4/settingsdialog.py:129 ../../qt4/settingsdialog.py:1568 msgid "Where to save snapshots" msgstr "Gde da čuvam snimke" -#: ../../kde4/settingsdialog.py:146 +#: ../../qt4/settingsdialog.py:145 +msgid "Folder" +msgstr "" + +#: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" -#: ../../kde4/settingsdialog.py:158 ../../kde4/settingsdialog.py:283 -#: ../../gnome/settingsdialog.glade:323 ../../gnome/settingsdialog.glade:583 -#: ../../gnome/settingsdialog.glade:874 +#: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "Računar:" -#: ../../kde4/settingsdialog.py:163 ../../gnome/settingsdialog.glade:350 -#: ../../gnome/settingsdialog.glade:610 +#: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "" -#: ../../kde4/settingsdialog.py:168 ../../kde4/settingsdialog.py:288 -#: ../../gnome/settingsdialog.glade:377 ../../gnome/settingsdialog.glade:637 -#: ../../gnome/settingsdialog.glade:902 +#: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "Korisnik:" -#: ../../kde4/settingsdialog.py:173 ../../gnome/settingsdialog.glade:416 +#: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" -#: ../../kde4/settingsdialog.py:178 ../../gnome/settingsdialog.glade:459 +#: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" -#: ../../kde4/settingsdialog.py:184 +#: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "" -#: ../../kde4/settingsdialog.py:228 ../../kde4/settingsdialog.py:237 -#: ../../kde4/settingsdialog.py:243 ../../gnome/settingsdialog.glade:703 -#: ../../gnome/settingsdialog.glade:743 +#: ../../qt4/settingsdialog.py:201 +msgid "Key File" +msgstr "" + +#: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 +#: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "" -#: ../../kde4/settingsdialog.py:249 ../../gnome/settingsdialog.glade:775 +#: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" -#: ../../kde4/settingsdialog.py:252 ../../gnome/settingsdialog.glade:792 +#: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" -#: ../../kde4/settingsdialog.py:264 ../../gnome/settingsdialog.glade:968 +#: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "Napredno" -#: ../../kde4/settingsdialog.py:276 ../../gnome/settingsdialog.glade:848 -msgid "Auto Host / User / Profile Id" -msgstr "Automatski ID računara / korisnika / profila" +#: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 +msgid "Full snapshot path: " +msgstr "" -#: ../../kde4/settingsdialog.py:301 +#: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "Plan rada" -#: ../../kde4/settingsdialog.py:311 ../../gnome/settingsdialog.glade:1092 +#: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "" -#: ../../kde4/settingsdialog.py:322 ../../gnome/settingsdialog.glade:1079 +#: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "" -#: ../../kde4/settingsdialog.py:333 ../../gnome/settingsdialog.glade:1066 +#: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "Čas:" -#: ../../kde4/settingsdialog.py:344 ../../gnome/settingsdialog.glade:1053 +#: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "" -#: ../../kde4/settingsdialog.py:353 ../../gnome/settingsdialog.glade:1014 +#: ../../qt4/settingsdialog.py:339 msgid "" -"Run Back In Time periodically with anacron. This is useful if the computer " -"is not running regular." +"Run Back In Time repeatedly. This is useful if the computer is not running " +"regular." msgstr "" -#: ../../kde4/settingsdialog.py:357 ../../gnome/settingsdialog.glade:1040 -msgid "Frequency in days:" +#: ../../qt4/settingsdialog.py:344 +msgid "Every:" msgstr "" -#: ../../kde4/settingsdialog.py:368 ../../gnome/settingsdialog.glade:1026 +#: ../../qt4/settingsdialog.py:362 msgid "" "Run Back In Time as soon as the drive is connected (only once every X " "days).\n" "You will be prompted for your sudo password." msgstr "" -#: ../../kde4/settingsdialog.py:379 ../../gnome/settingsdialog.glade:1310 +#: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Uključi" -#: ../../kde4/settingsdialog.py:403 ../../kde4/settingsdialog.py:445 -#: ../../gnome/settingsdialog.glade:1411 +#: ../../qt4/settingsdialog.py:381 +msgid "Include files and folders" +msgstr "Uključi fajlove i direktorijume" + +#: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "Dodaj fajl" -#: ../../kde4/settingsdialog.py:408 ../../kde4/settingsdialog.py:450 -#: ../../gnome/settingsdialog.glade:1427 +#: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Dodaj direktorijum" -#: ../../kde4/settingsdialog.py:418 ../../gnome/settingsdialog.glade:1474 +#: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Izostavi" -#: ../../kde4/settingsdialog.py:421 ../../gnome/settingsdialog.glade:1328 +#: ../../qt4/settingsdialog.py:417 msgid "" "Warning: Wildcards ('foo*', '[fF]oo', 'fo?') will be ignored with " "mode 'SSH encrypted'.\n" "Only separate asterisk are allowed ('foo/*', 'foo/**/bar')" msgstr "" -#: ../../kde4/settingsdialog.py:430 +#: ../../qt4/settingsdialog.py:425 +msgid "Exclude patterns, files or folders" +msgstr "Izostavi šablone, fajlove, ili direktorijume" + +#: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "Toplo preporučeno:" -#: ../../kde4/settingsdialog.py:460 ../../gnome/settingsdialog.glade:1905 +#: ../../qt4/settingsdialog.py:463 +msgid "Add default" +msgstr "" + +#: ../../qt4/settingsdialog.py:474 +msgid "Exclude files bigger than: " +msgstr "" + +#: ../../qt4/settingsdialog.py:475 +#, python-format +msgid "" +"Exclude files bigger than value in %(prefix)s.\n" +"With 'Full rsync mode' disabled this will only affect new files\n" +"because for rsync this is a transfer option, not an exclude option.\n" +"So big files that has been backed up before will remain in snapshots\n" +"even if they had changed." +msgstr "" + +#: ../../qt4/settingsdialog.py:493 msgid "Auto-remove" msgstr "Automatsko uklanjanje" -#: ../../kde4/settingsdialog.py:464 ../../gnome/settingsdialog.glade:1608 +#: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "Stariji od:" -#: ../../kde4/settingsdialog.py:478 ../../gnome/settingsdialog.glade:1624 +#: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "Ako je slobodan prostor manji od:" -#: ../../kde4/settingsdialog.py:490 ../../gnome/settingsdialog.glade:1642 +#: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" -#: ../../kde4/settingsdialog.py:514 ../../gnome/settingsdialog.glade:1697 +#: ../../qt4/settingsdialog.py:551 +msgid "Run in background on remote Host." +msgstr "" + +#: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "" -#: ../../kde4/settingsdialog.py:517 ../../kde4/settingsdialog.py:522 -#: ../../gnome/settingsdialog.glade:1705 ../../gnome/settingsdialog.glade:1729 +#: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "" -#: ../../kde4/settingsdialog.py:519 ../../gnome/settingsdialog.glade:1717 +#: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "" -#: ../../kde4/settingsdialog.py:524 ../../gnome/settingsdialog.glade:1743 +#: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "" -#: ../../kde4/settingsdialog.py:527 +#: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "" -#: ../../kde4/settingsdialog.py:529 ../../gnome/settingsdialog.glade:1769 +#: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "" -#: ../../kde4/settingsdialog.py:532 ../../gnome/settingsdialog.glade:1781 +#: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "" -#: ../../kde4/settingsdialog.py:534 ../../gnome/settingsdialog.glade:1795 +#: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "" -#: ../../kde4/settingsdialog.py:537 ../../gnome/settingsdialog.glade:1496 +#: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "Nemoj ukloniti imenovane snimke" -#: ../../kde4/settingsdialog.py:546 ../../gnome/settingsdialog.glade:2104 +#: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Opcije" -#: ../../kde4/settingsdialog.py:549 ../../gnome/settingsdialog.glade:1920 +#: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Omogući obaveštenja" -#: ../../kde4/settingsdialog.py:552 ../../gnome/settingsdialog.glade:1937 +#: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "Onemogući snimke kada se računar napaja iz baterije" -#: ../../kde4/settingsdialog.py:555 +#: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" msgstr "Informacija o status napajanja nije dostupna od sistema" -#: ../../kde4/settingsdialog.py:558 ../../gnome/settingsdialog.glade:1955 -msgid "Backup files on restore" -msgstr "Napravi rezervne kopije pri povraćaju" +#: ../../qt4/settingsdialog.py:611 +msgid "Run only one snapshot at a time" +msgstr "" + +#: ../../qt4/settingsdialog.py:612 +msgid "" +"Other snapshots will be blocked until the current snapshot is done.\n" +"This is a global option. So it will effect all profiles for this user.\n" +"But you need to activate this for all other users, too." +msgstr "" + +#: ../../qt4/settingsdialog.py:617 +msgid "Backup replaced files on restore" +msgstr "" + +#: ../../qt4/settingsdialog.py:618 +#, python-format +msgid "" +"Newer versions of files will be renamed with trailing '%(suffix)s' before " +"restoring.\n" +"If you don't need them anymore you can remove them with '%(cmd)s'" +msgstr "" -#: ../../kde4/settingsdialog.py:561 ../../gnome/settingsdialog.glade:1972 +#: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "Nastavi nakon greške (zadrži nekompletan snimak)" -#: ../../kde4/settingsdialog.py:564 ../../gnome/settingsdialog.glade:1989 +#: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "Koristi kontrolnu sumu da otkriješ izmene" -#: ../../kde4/settingsdialog.py:567 ../../gnome/settingsdialog.glade:2006 +#: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "" -#: ../../kde4/settingsdialog.py:568 ../../gnome/settingsdialog.glade:2032 +#: ../../qt4/settingsdialog.py:634 msgid "" -"- snapshots are no read-only\n" -"- destination file-system must support all linux attributes (dates, rights, " +"- snapshots are not read-only\n" +"- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" -#: ../../kde4/settingsdialog.py:575 ../../gnome/settingsdialog.glade:2045 +#: ../../qt4/settingsdialog.py:641 +msgid "Take a new snapshot regardless of there were changes or not." +msgstr "" + +#: ../../qt4/settingsdialog.py:644 msgid "Check for changes (don't take a new snapshot if nothing changed)" msgstr "" -#: ../../kde4/settingsdialog.py:582 +#: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "Nivo detalja u izveštaju:" -#: ../../kde4/settingsdialog.py:597 ../../gnome/settingsdialog.glade:2366 -msgid "Expert Options" -msgstr "Napredne opcije" +#: ../../qt4/settingsdialog.py:656 +msgid "None" +msgstr "Nijedan" + +#: ../../qt4/settingsdialog.py:658 +msgid "Changes & Errors" +msgstr "Izmene i greške" -#: ../../kde4/settingsdialog.py:600 +#: ../../qt4/settingsdialog.py:674 msgid "Change these options only if you really know what you are doing !" msgstr "Izmeni ove opcije samo ako znaš šta radiš!" -#: ../../kde4/settingsdialog.py:608 ../../gnome/settingsdialog.glade:2133 -msgid "Run 'nice' as cron job (default: enabled)" -msgstr "Pokreni 'nice' kao cron posao (podrazumeva se: omogućeno)" +#: ../../qt4/settingsdialog.py:678 +msgid "Run 'nice':" +msgstr "" + +#: ../../qt4/settingsdialog.py:684 ../../qt4/settingsdialog.py:696 +msgid "as cron job" +msgstr "" + +#: ../../qt4/settingsdialog.py:687 ../../qt4/settingsdialog.py:702 +#: ../../qt4/settingsdialog.py:716 +msgid "on remote host" +msgstr "" -#: ../../kde4/settingsdialog.py:611 ../../gnome/settingsdialog.glade:2150 -msgid "Run 'ionice' as cron job (default: enabled)" -msgstr "Pokreni 'ionice' kao cron posao (podrazumeva se: omogućeno)" +#: ../../qt4/settingsdialog.py:690 +msgid "Run 'ionice':" +msgstr "" -#: ../../kde4/settingsdialog.py:614 ../../gnome/settingsdialog.glade:2167 -msgid "Run 'ionice' when taking a manual snapshot (default: disabled)" +#: ../../qt4/settingsdialog.py:699 +msgid "when taking a manual snapshot" msgstr "" -#: ../../kde4/settingsdialog.py:617 ../../gnome/settingsdialog.glade:2184 -msgid "Run 'nice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:706 +msgid "Run 'rsync' with 'nocache':" msgstr "" -#: ../../kde4/settingsdialog.py:620 ../../gnome/settingsdialog.glade:2201 -msgid "Run 'ionice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:712 +msgid "on local machine" msgstr "" -#: ../../kde4/settingsdialog.py:626 ../../gnome/settingsdialog.glade:2224 +#: ../../qt4/settingsdialog.py:719 +msgid "Redirect stdout to /dev/null in cronjobs." +msgstr "" + +#: ../../qt4/settingsdialog.py:725 +msgid "Redirect stderr to /dev/null in cronjobs." +msgstr "" + +#: ../../qt4/settingsdialog.py:734 msgid "Limit rsync bandwidth usage: " msgstr "" -#: ../../kde4/settingsdialog.py:629 ../../gnome/settingsdialog.glade:2259 +#: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" -#: ../../kde4/settingsdialog.py:634 ../../gnome/settingsdialog.glade:2280 +#: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "Sačuvaj ACL" -#: ../../kde4/settingsdialog.py:637 ../../gnome/settingsdialog.glade:2297 +#: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "Sačuvaj proširene atribute (xattr)" -#: ../../kde4/settingsdialog.py:640 ../../gnome/settingsdialog.glade:2314 +#: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute links)" msgstr "Kopiraj nebezbedni link (funkcioniše samo sa apsolutnim linkovima)" -#: ../../kde4/settingsdialog.py:643 ../../gnome/settingsdialog.glade:2331 -msgid "Copy links (dereference symbolic links)" -msgstr "Kopiraj linkove (prati simboličke linkove)" - -#: ../../kde4/snapshotsdialog.py:46 ../../kde4/snapshotsdialog.py:173 -#: ../../gnome/snapshotsdialog.glade:385 -msgid "Diff Options" -msgstr "Diff opcije" - -#: ../../kde4/snapshotsdialog.py:56 ../../gnome/snapshotsdialog.glade:314 -msgid "Command:" -msgstr "Naredba:" +#: ../../qt4/settingsdialog.py:834 +msgid "Paste additional options to rsync" +msgstr "" -#: ../../kde4/snapshotsdialog.py:60 ../../gnome/snapshotsdialog.glade:322 -msgid "Parameters:" -msgstr "Parametri:" +#: ../../qt4/settingsdialog.py:837 +msgid "" +"Options must be quoted e.g. --exclude-from=\"/path/to/my exclude file\"." +msgstr "" -#: ../../kde4/snapshotsdialog.py:64 ../../gnome/snapshotsdialog.glade:334 -msgid "Use %1 and %2 for path parameters" -msgstr "Koristi %1 i %2 kao parametre putanje" +#: ../../qt4/settingsdialog.py:847 +msgid "Add prefix to SSH commands" +msgstr "" -#: ../../kde4/snapshotsdialog.py:123 ../../gnome/snapshotsdialog.glade:184 -#: ../../gnome/snapshotsdialog.glade:186 -msgid "Delete" +#: ../../qt4/settingsdialog.py:850 +#, python-format +msgid "" +"Prefix to run before every command on remote host.\n" +"Variables need to be escaped with \\$FOO.\n" +"This doesn't touch rsync. So to add a prefix\n" +"for rsync use \"%(cb_rsync_options)s\" with\n" +"%(rsync_options_value)s\n" +"\n" +"%(default)s: %(def_value)s" msgstr "" -#: ../../kde4/snapshotsdialog.py:128 ../../gnome/snapshotsdialog.glade:199 -#: ../../gnome/snapshotsdialog.glade:201 -msgid "Select All" +#: ../../qt4/settingsdialog.py:858 ../../qt4/settingsdialog.py:1691 +msgid "default" msgstr "" -#: ../../kde4/snapshotsdialog.py:132 ../../gnome/snapshotsdialog.glade:88 -msgid "List only different snapshots" -msgstr "Izlistaj samo različite snimke" +#: ../../qt4/settingsdialog.py:875 +msgid "Restore Config" +msgstr "" -#: ../../kde4/snapshotsdialog.py:139 ../../gnome/snapshotsdialog.glade:110 -msgid "List only equal snapshots to: " +#: ../../qt4/settingsdialog.py:891 +msgid "" +"Full system backup can only create a snapshot to be restored to the same " +"physical disk(s) with the same disk partitioning as from the source; " +"restoring to new physical disks or the same disks with different " +"partitioning will yield a potentially broken and unusable system.\n" +"\n" +"Full system backup will override some settings that may have been " +"customized. Continue?" msgstr "" -#: ../../kde4/snapshotsdialog.py:149 ../../gnome/snapshotsdialog.glade:146 -msgid "Deep check (more accurate, but slow)" -msgstr "Detaljna provera (tačnija, ali spora)" +#: ../../qt4/settingsdialog.py:922 +msgid "New profile" +msgstr "Novi profil" -#: ../../kde4/snapshotsdialog.py:174 -msgid "Go To" -msgstr "Idi na" +#: ../../qt4/settingsdialog.py:938 +msgid "Rename profile" +msgstr "Preimenuj profil" -#: ../../gnome/logviewdialog.glade:9 -msgid "Log View" -msgstr "Pregled izveštaja" +#: ../../qt4/settingsdialog.py:952 +#, python-format +msgid "Are you sure you want to delete the profile \"%s\" ?" +msgstr "Da li ste sigurni da želite da uklonite profil \"%s\" ?" -#: ../../gnome/logviewdialog.glade:179 -msgid "scroll down automatic" +#: ../../qt4/settingsdialog.py:1191 +msgid "" +"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " +"*/3 for periodic backups every 3 hours" msgstr "" -#: ../../gnome/mainwindow.glade:7 -msgid "Back In Time" -msgstr "Back In Time" - -#: ../../gnome/mainwindow.glade:45 -msgid "Backup Now" -msgstr "Arhiviraj sada" +#: ../../qt4/settingsdialog.py:1489 +msgid "Exclude pattern" +msgstr "Izostavi šablon" -#: ../../gnome/mainwindow.glade:171 -msgid "Shutdown" -msgstr "" +#: ../../qt4/settingsdialog.py:1502 +msgid "Exclude file" +msgstr "Izostavi fajl" -#: ../../gnome/mainwindow.glade:287 -msgid "Parent folder" -msgstr "Naddirektorijum" +#: ../../qt4/settingsdialog.py:1506 +msgid "Exclude folder" +msgstr "Izostavi direktorijum" -#: ../../gnome/mainwindow.glade:327 -msgid "Hidden files" -msgstr "Skriveni fajlovi" +#: ../../qt4/settingsdialog.py:1525 +msgid "Include file" +msgstr "Uključi fajl" -#: ../../gnome/mainwindow.glade:451 +#: ../../qt4/settingsdialog.py:1533 ../../qt4/settingsdialog.py:1553 +#, python-format msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +"\"%s\" is a symlink. The linked target will not be backed up until you " +"include it, too.\n" +"Would you like to include the symlinks target instead?" msgstr "" -"Ovaj direktorijum ne postoji\n" -"u trenutnom snimku!" -#: ../../gnome/settingsdialog.glade:287 -msgid "Where to save snapshots" -msgstr "Gde da sačuvam snimke" +#: ../../qt4/settingsdialog.py:1545 +msgid "Include folder" +msgstr "Uključi direktorijum" -#: ../../gnome/settingsdialog.glade:483 -msgid "Private key:" -msgstr "" +#: ../../qt4/settingsdialog.py:1572 +msgid "Are you sure you want to change snapshots folder ?" +msgstr "Da li stvarno želiš da promeniš direktorijum za snimkea?" -#: ../../gnome/settingsdialog.glade:534 -msgid "Advanced SSH Settings" +#: ../../qt4/settingsdialog.py:1688 +msgid "enabled" msgstr "" -#: ../../gnome/settingsdialog.glade:552 -msgid "SSH Settings" +#: ../../qt4/settingsdialog.py:1690 +msgid "disabled" msgstr "" -#: ../../gnome/settingsdialog.glade:815 -msgid "Password" +#: ../../qt4/settingsdialog.py:1715 +msgid "Restore Settings" msgstr "" -#: ../../gnome/settingsdialog.glade:930 -msgid "Profile Id:" -msgstr "ID profila:" +#: ../../qt4/settingsdialog.py:1732 +msgid " and add your user to group 'fuse'" +msgstr "" -#: ../../gnome/settingsdialog.glade:1115 +#: ../../qt4/settingsdialog.py:1736 +#, python-format msgid "" -"hours seperate by comma ( e.g. 8,12,18,23) or */3 for periodic backups every " -"3 hours (cron style)" +"Please navigate to the snapshot from which you want to restore %(appName)s's " +"configuration. The path may look like: \n" +"%(samplePath)s\n" +"\n" +"If your snapshots are on a remote drive or if they are encrypted you need to " +"manually mount them first. If you use Mode SSH you also may need to set up " +"public key login to the remote host%(addFuse)s.\n" +"Take a look at 'man backintime'." msgstr "" -#: ../../gnome/settingsdialog.glade:1163 -msgid "Schedule" -msgstr "Plan rada" +#: ../../qt4/settingsdialog.py:1794 ../../qt4/settingsdialog.py:1854 +msgid "No config found" +msgstr "" + +#: ../../qt4/snapshotsdialog.py:49 ../../qt4/snapshotsdialog.py:173 +msgid "Diff Options" +msgstr "Diff opcije" + +#: ../../qt4/snapshotsdialog.py:56 +msgid "Command:" +msgstr "Naredba:" + +#: ../../qt4/snapshotsdialog.py:60 +msgid "Parameters:" +msgstr "Parametri:" + +#: ../../qt4/snapshotsdialog.py:64 +msgid "Use %1 and %2 for path parameters" +msgstr "Koristi %1 i %2 kao parametre putanje" + +#: ../../qt4/snapshotsdialog.py:106 +msgid "List only different snapshots" +msgstr "Izlistaj samo različite snimke" -#: ../../gnome/settingsdialog.glade:1363 -msgid "Highly recommended:" -msgstr "Toplo preporučeno:" +#: ../../qt4/snapshotsdialog.py:113 +msgid "List only equal snapshots to: " +msgstr "" + +#: ../../qt4/snapshotsdialog.py:123 +msgid "Deep check (more accurate, but slow)" +msgstr "Detaljna provera (tačnija, ali spora)" -#: ../../gnome/settingsdialog.glade:1377 -msgid "label" -msgstr "oznaka" +#: ../../qt4/snapshotsdialog.py:144 +msgid "Delete" +msgstr "" -#: ../../gnome/settingsdialog.glade:1755 -msgid "week(s)" +#: ../../qt4/snapshotsdialog.py:148 +msgid "Select All" msgstr "" -#: ../../gnome/settingsdialog.glade:2069 -msgid "Log level:" -msgstr "Nivo detalja u izveštaju:" +#: ../../qt4/snapshotsdialog.py:161 +msgid "Diff" +msgstr "Diff" + +#: ../../qt4/snapshotsdialog.py:172 +msgid "Go To" +msgstr "Idi na" -#: ../../gnome/settingsdialog.glade:2121 +#: ../../qt4/snapshotsdialog.py:326 +msgid "You can't compare a snapshot to itself" +msgstr "Nije moguće uporediti snimak sa samim sobom" + +#: ../../qt4/snapshotsdialog.py:333 +#, python-format +msgid "Command not found: %s" +msgstr "Naredba nije pronađena: %s" + +#: ../../qt4/snapshotsdialog.py:354 +#, python-format msgid "" -"Change these options only if you really know what you are doing !" -msgstr "Izmeni ove opcije samo ako stvarno znaš šta radiš!" +"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" +msgstr "" -#: ../../gnome/snapshotsdialog.glade:263 -msgid "Diff with" -msgstr "Diff sa" +#: ../../qt4/snapshotsdialog.py:357 +#, python-format +msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +msgstr "" -#: ../../gnome/textinputdialog.glade:7 -msgid "Pattern" -msgstr "Šablon" +#: ../../qt4/snapshotsdialog.py:359 +msgid "WARNING: This can not be revoked!" +msgstr "" -#: ../../gnome/textinputdialog.glade:70 -msgid "Text" +#: ../../qt4/snapshotsdialog.py:374 +#, python-format +msgid "Exclude \"%s\" from future snapshots?" msgstr "" diff -Nru backintime-1.0.36/common/po/sv.po backintime-1.1.12/common/po/sv.po --- backintime-1.0.36/common/po/sv.po 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/po/sv.po 2016-01-11 18:07:58.000000000 +0000 @@ -7,206 +7,238 @@ msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2013-11-09 22:34+0100\n" -"PO-Revision-Date: 2013-08-24 14:15+0000\n" -"Last-Translator: Albin Bernhardsson \n" +"POT-Creation-Date: 2015-12-19 00:47+0100\n" +"PO-Revision-Date: 2015-09-09 21:49+0000\n" +"Last-Translator: Back In Time Team \n" "Language-Team: Swedish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2014-08-06 10:19+0000\n" -"X-Generator: Launchpad (build 17147)\n" +"X-Launchpad-Export-Date: 2016-01-11 17:52+0000\n" +"X-Generator: Launchpad (build 17881)\n" -#: ../../common/config.py:72 +#: ../../common/configfile.py:60 +#, python-format +msgid "Failed to save config: %s" +msgstr "" + +#: ../../common/configfile.py:78 +#, python-format +msgid "Failed to load config: %s" +msgstr "" + +#: ../../common/configfile.py:352 ../../common/configfile.py:414 +#, python-format +msgid "Profile \"%s\" already exists !" +msgstr "Profilen \"%s\" existerar redan!" + +#: ../../common/configfile.py:383 +msgid "You can't remove the last profile !" +msgstr "Du kan inte radera den sista profilen!" + +#: ../../common/config.py:76 msgid "Disabled" msgstr "Inaktiverad" -#: ../../common/config.py:73 +#: ../../common/config.py:77 msgid "At every boot/reboot" msgstr "Vid varje start/omstart" -#: ../../common/config.py:74 +#: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Var 5:e minut" -#: ../../common/config.py:75 +#: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Var 10:e minut" -#: ../../common/config.py:76 +#: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "Var 30:e minut" -#: ../../common/config.py:77 +#: ../../common/config.py:81 msgid "Every hour" msgstr "Varje timme" -#: ../../common/config.py:78 +#: ../../common/config.py:82 msgid "Every 2 hours" msgstr "Varannan timme" -#: ../../common/config.py:79 +#: ../../common/config.py:83 msgid "Every 4 hours" msgstr "Var 4:e timme" -#: ../../common/config.py:80 +#: ../../common/config.py:84 msgid "Every 6 hours" msgstr "Var 6:e timme" -#: ../../common/config.py:81 +#: ../../common/config.py:85 msgid "Every 12 hours" msgstr "Var 12:e timme" -#: ../../common/config.py:82 +#: ../../common/config.py:86 msgid "Custom Hours" msgstr "" -#: ../../common/config.py:83 +#: ../../common/config.py:87 msgid "Every Day" msgstr "Varje dag" -#: ../../common/config.py:84 -msgid "Daily (anacron)" +#: ../../common/config.py:88 +msgid "Repeatedly (anacron)" msgstr "" -#: ../../common/config.py:85 +#: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "" -#: ../../common/config.py:86 +#: ../../common/config.py:90 msgid "Every Week" msgstr "Varje vecka" -#: ../../common/config.py:87 +#: ../../common/config.py:91 msgid "Every Month" msgstr "Varje månad" -#: ../../common/config.py:91 +#: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Dygn" -#: ../../common/config.py:92 +#: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Vecka/veckor" -#: ../../common/config.py:93 +#: ../../common/config.py:97 msgid "Year(s)" msgstr "År" -#: ../../common/config.py:100 +#: ../../common/config.py:101 +msgid "Hour(s)" +msgstr "" + +#: ../../common/config.py:104 +msgid "Month(s)" +msgstr "" + +#: ../../common/config.py:126 ../../qt4/settingsdialog.py:551 msgid " EXPERIMENTAL!" msgstr "" -#: ../../common/config.py:103 +#: ../../common/config.py:129 msgid "Local" msgstr "" -#: ../../common/config.py:104 +#: ../../common/config.py:130 msgid "SSH" msgstr "" -#: ../../common/config.py:104 ../../common/config.py:106 -#: ../../gnome/settingsdialog.py:475 ../../kde4/settingsdialog.py:1325 +#: ../../common/config.py:130 ../../common/config.py:132 +#: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "" -#: ../../common/config.py:105 +#: ../../common/config.py:131 msgid "Local encrypted" msgstr "" -#: ../../common/config.py:105 ../../common/config.py:106 +#: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "Kryptering" -#: ../../common/config.py:106 +#: ../../common/config.py:132 msgid "SSH encrypted" msgstr "" -#: ../../common/config.py:112 +#: ../../common/config.py:135 msgid "Default" msgstr "" -#: ../../common/config.py:113 +#: ../../common/config.py:136 msgid "AES128-CTR" msgstr "" -#: ../../common/config.py:114 +#: ../../common/config.py:137 msgid "AES192-CTR" msgstr "" -#: ../../common/config.py:115 +#: ../../common/config.py:138 msgid "AES256-CTR" msgstr "" -#: ../../common/config.py:116 +#: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "" -#: ../../common/config.py:117 +#: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "" -#: ../../common/config.py:118 +#: ../../common/config.py:141 msgid "AES128-CBC" msgstr "" -#: ../../common/config.py:119 +#: ../../common/config.py:142 msgid "3DES-CBC" msgstr "" -#: ../../common/config.py:120 +#: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "" -#: ../../common/config.py:121 +#: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "" -#: ../../common/config.py:122 +#: ../../common/config.py:145 msgid "AES192-CBC" msgstr "" -#: ../../common/config.py:123 +#: ../../common/config.py:146 msgid "AES256-CBC" msgstr "" -#: ../../common/config.py:124 +#: ../../common/config.py:147 msgid "ARCFOUR" msgstr "" -#: ../../common/config.py:129 +#: ../../common/config.py:153 msgid "Main profile" msgstr "Huvudprofil" -#: ../../common/config.py:256 ../../common/config.py:275 -#: ../../common/config.py:286 ../../common/config.py:291 +#: ../../common/config.py:289 ../../common/config.py:296 +#: ../../common/config.py:307 ../../common/config.py:312 +#: ../../qt4/qt4systrayicon.py:61 #, python-format msgid "Profile: \"%s\"" msgstr "Profil: \"%s\"" -#: ../../common/config.py:256 +#: ../../common/config.py:289 msgid "Snapshots folder is not valid !" msgstr "Mappen för ögonblicksbilder är ogiltig!" -#: ../../common/config.py:275 +#: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "Du måste välja minst en mapp att säkerhetskopiera!" -#: ../../common/config.py:286 +#: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "Du kan inte inkludera mappen för säkerhetskopior!" -#: ../../common/config.py:291 +#: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "Du kan inte inkludera en undermapp till mappen för säkerhetskopior!" -#: ../../common/config.py:361 +#: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s är inte en mapp!" -#: ../../common/config.py:376 ../../common/config.py:389 +#: ../../common/config.py:380 +msgid "Host/User/Profile-ID must not be empty!" +msgstr "" + +#: ../../common/config.py:388 ../../common/config.py:420 #, python-format msgid "" "Can't write to: %s\n" @@ -215,59 +247,68 @@ "Kan inte skriva till: %s\n" "Är du säker på att du har skrivrättighet?" -#: ../../common/config.py:1286 +#: ../../common/config.py:400 +#, python-format msgid "" -"Can't find crontab.\n" -"Are you sure cron is installed ?\n" -"If not you should disable all automatic backups." +"Destination filesystem for '%(path)s' is formatted with FAT which doesn't " +"support hard-links. Please use a native Linux filesystem." msgstr "" -"Kan inte hitta crontab.\n" -"Är du säker på att cron är installerad?\n" -"Om inte så måste du inaktivera alla automatiska säkerhetskopior." -#: ../../common/config.py:1338 +#: ../../common/config.py:405 #, python-format -msgid "Schedule udev doesn't work with mode %s" +msgid "" +"Destination filsystem for '%(path)s' is a SMB mounted share. Please make " +"sure the remote SMB server supports symlinks or activate '%(copyLinks)s' in " +"'%(expertOptions)s'." msgstr "" -#: ../../common/config.py:1342 -#, python-format -msgid "Couldn't find UUID for \"%s\"" +#: ../../common/config.py:408 ../../qt4/settingsdialog.py:815 +msgid "Copy links (dereference symbolic links)" msgstr "" -#: ../../common/config.py:1379 -msgid "Failed to remove udev rules" -msgstr "" +#: ../../common/config.py:409 ../../qt4/settingsdialog.py:669 +msgid "Expert Options" +msgstr "Avancerade alternativ" -#: ../../common/config.py:1385 -msgid "Failed to create udev rules" +#: ../../common/config.py:411 +#, python-format +msgid "" +"Destination filesystem for '%(path)s is a sshfs mounted share. sshfs doesn't " +"support hard-links. Please use mode 'SSH' instead." msgstr "" -#: ../../common/config.py:1420 +#: ../../common/config.py:1407 msgid "" -"Can't find anacron.\n" -"Are you sure anacron is installed ?\n" -"If not you should disable daily anacron backups." +"Can't find crontab.\n" +"Are you sure cron is installed ?\n" +"If not you should disable all automatic backups." msgstr "" +"Kan inte hitta crontab.\n" +"Är du säker på att cron är installerad?\n" +"Om inte så måste du inaktivera alla automatiska säkerhetskopior." -#: ../../common/config.py:1439 -msgid "Please provide your sudo password to install the udev rule." +#: ../../common/config.py:1411 +msgid "Failed to write new crontab." msgstr "" -#: ../../common/config.py:1445 -msgid "Please provide your sudo password to remove unused udev rules." +#: ../../common/config.py:1505 +#, python-format +msgid "" +"Could not install Udev rule for profile %(profile_id)s. DBus Service " +"'%(dbus_interface)s' wasn't available" msgstr "" -#: ../../common/configfile.py:253 ../../common/configfile.py:315 +#: ../../common/config.py:1517 #, python-format -msgid "Profile \"%s\" already exists !" -msgstr "Profilen \"%s\" existerar redan!" +msgid "Schedule udev doesn't work with mode %s" +msgstr "" -#: ../../common/configfile.py:284 -msgid "You can't remove the last profile !" -msgstr "Du kan inte radera den sista profilen!" +#: ../../common/config.py:1526 +#, python-format +msgid "Couldn't find UUID for \"%s\"" +msgstr "" -#: ../../common/encfstools.py:95 +#: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" @@ -275,16 +316,16 @@ "%(error)s" msgstr "" -#: ../../common/encfstools.py:105 +#: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "" -#: ../../common/encfstools.py:149 +#: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "" -#: ../../common/encfstools.py:153 +#: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" @@ -292,23 +333,23 @@ "\n" "Skapa en ny krypterad mapp?" -#: ../../common/encfstools.py:154 +#: ../../common/encfstools.py:171 msgid "Cancel" msgstr "Avbryt" -#: ../../common/encfstools.py:157 +#: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "" -#: ../../common/encfstools.py:161 +#: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "" -#: ../../common/encfstools.py:166 +#: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" -#: ../../common/encfstools.py:174 ../../common/sshtools.py:207 +#: ../../common/encfstools.py:196 ../../common/sshtools.py:262 #, python-format msgid "" "%(user)s is not member of group 'fuse'.\n" @@ -316,63 +357,66 @@ "Look at 'man backintime' for further instructions." msgstr "" -#: ../../common/encfstools.py:189 +#: ../../common/encfstools.py:211 msgid "" "encfs version 1.7.2 and before has a bug with option --reverse. Please " "update encfs" msgstr "" -#: ../../common/encfstools.py:453 ../../common/encfstools.py:480 -#: ../../common/snapshots.py:982 ../../common/snapshots.py:1288 -#: ../../kde4/app.py:82 ../../gnome/mainwindow.glade:43 +#: ../../common/encfstools.py:512 ../../common/snapshots.py:1131 +#: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "Ta ögonblicksbild" -#: ../../common/mount.py:195 +#: ../../common/mount.py:204 #, python-format msgid "" "Hash collision occurred in hash_id %s. Incrementing global value " "hash_collision and try again." msgstr "" -#: ../../common/mount.py:246 +#: ../../common/mount.py:259 #, python-format msgid "mountpoint %s not empty." msgstr "" -#: ../../common/mount.py:286 +#: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" -#: ../../common/password.py:425 +#: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" -#: ../../common/snapshots.py:171 ../../gnome/app.py:1127 -#: ../../kde4/app.py:1014 +#: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Nu" -#: ../../common/snapshots.py:182 ../../gnome/gnometools.py:37 +#: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "MED FEL !" -#: ../../common/snapshots.py:282 +#: ../../common/snapshots.py:344 msgid "" "### This log has been decoded with automatic search pattern\n" "### If some paths are not decoded you can manually decode them with:\n" msgstr "" -#: ../../common/snapshots.py:465 +#: ../../common/snapshots.py:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "MISSLYCKADES" -#: ../../common/snapshots.py:564 +#: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "" -#: ../../common/snapshots.py:739 +#: ../../common/snapshots.py:752 ../../qt4/app.py:377 ../../qt4/app.py:675 +#: ../../qt4/app.py:692 ../../qt4/qt4systrayicon.py:65 +msgid "Done" +msgstr "Färdig" + +#: ../../common/snapshots.py:860 msgid "" "Back In Time changed its backup format.\n" "\n" @@ -382,7 +426,7 @@ "\n" "Dina gamla ögonblicksbilder kan flyttas till detta ny format. OK?" -#: ../../common/snapshots.py:749 +#: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" @@ -399,7 +443,7 @@ "\n" "(Programmet kommer fortfarande att kunna skilja mellan dem)" -#: ../../common/snapshots.py:752 +#: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" @@ -407,7 +451,7 @@ "Inga profiler funna. Måste uppdatera till profiler först, vänligen starta om " "Back In Time" -#: ../../common/snapshots.py:803 +#: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" @@ -420,7 +464,7 @@ "cannot continue taking snapshots" msgstr "" -#: ../../common/snapshots.py:812 +#: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" @@ -435,7 +479,7 @@ "Du kan flytta ögonblicksbilderna manuellt, \n" "om du är klar starta om Back In Time för att fortsätta" -#: ../../common/snapshots.py:825 +#: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" @@ -445,7 +489,7 @@ "\n" "Back In Time kommer fortsätta ta ögonblicksbilder igen som schemalagt" -#: ../../common/snapshots.py:830 +#: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" @@ -466,12 +510,12 @@ "Om du inte är det kommer du bli tillfrågad igen nästa gång du startar Back " "In Time." -#: ../../common/snapshots.py:839 +#: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "" "Back In Time kommer fortsätta ta ögonblicksbilder igen som schemalagt" -#: ../../common/snapshots.py:841 +#: ../../common/snapshots.py:953 msgid "" "Back In Time still cannot continue taking new snapshots.\n" "Restart Back In Time to see the questions again" @@ -479,7 +523,11 @@ "Back In Time kan fortfarande inte fortsätta ta nya ögonblicksbilder.\n" "Starta om Back In Time för att se frågorna igen" -#: ../../common/snapshots.py:913 +#: ../../common/snapshots.py:972 +msgid "Deferring backup while on battery" +msgstr "" + +#: ../../common/snapshots.py:1035 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it." @@ -487,156 +535,163 @@ "Kan inte hitta mappen för ögonblicksbilder.\n" "Anslut enheten om den finns på en flyttbar enhet." -#: ../../common/snapshots.py:915 +#: ../../common/snapshots.py:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "Väntar %s sekund." msgstr[1] "Väntar %s sekunder." -#: ../../common/snapshots.py:941 +#: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "Misslyckades att skapa ögonblicksbild %s !!!" -#: ../../common/snapshots.py:950 +#: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "Färdigställer" -#: ../../common/snapshots.py:1088 +#: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "Kan inte skapa mapp: %s" -#: ../../common/snapshots.py:1107 +#: ../../common/snapshots.py:1217 msgid "..." msgstr "..." -#: ../../common/snapshots.py:1134 +#: ../../common/snapshots.py:1238 +#, python-format +msgid "Found leftover '%s' which can be continued." +msgstr "" + +#: ../../common/snapshots.py:1250 +#, python-format +msgid "Remove leftover '%s' folder from last run" +msgstr "" + +#: ../../common/snapshots.py:1263 #, python-format msgid "Can't remove folder: %s" msgstr "Kan inte ta bort mapp: %s" -#: ../../common/snapshots.py:1219 +#: ../../common/snapshots.py:1340 #, python-format msgid "Compare with snapshot %s" msgstr "Jämför med ögonblicksbilden %s" -#: ../../common/snapshots.py:1248 +#: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "Skapa hårda länkar" -#: ../../common/snapshots.py:1335 +#: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "Spara konfigurationsfil ..." -#: ../../common/snapshots.py:1341 +#: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "Spara rättigheter ..." -#: ../../common/snapshots.py:1442 +#: ../../common/snapshots.py:1470 +msgid "Save permission over ssh failed. Retry normal method" +msgstr "" + +#: ../../common/snapshots.py:1521 #, python-format msgid "Can't rename %(new_path)s to %(path)s" msgstr "Kunde inte byta namn från %(new_path)s till %(path)s" -#: ../../common/snapshots.py:1562 -msgid "Remove old snapshots" -msgstr "Ta bort gamla ögonblicksbilder" - -#: ../../common/snapshots.py:1586 ../../kde4/settingsdialog.py:501 -#: ../../gnome/settingsdialog.glade:1660 +#: ../../common/snapshots.py:1695 ../../common/snapshots.py:1728 +#: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "Smart borttagning" -#: ../../common/snapshots.py:1591 +#: ../../common/snapshots.py:1704 +msgid "Remove old snapshots" +msgstr "Ta bort gamla ögonblicksbilder" + +#: ../../common/snapshots.py:1733 msgid "Try to keep min free space" msgstr "Försök att behålla minimum ledigt utrymme" -#: ../../common/snapshots.py:1621 +#: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" -#: ../../common/sshtools.py:106 +#: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "" -#: ../../common/sshtools.py:113 +#: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "" -#: ../../common/sshtools.py:187 -#, python-format -msgid "" -"Failed to unlock SSH private key:\n" -"Error: %s" -msgstr "" - -#: ../../common/sshtools.py:194 +#: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" -#: ../../common/sshtools.py:199 +#: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" -#: ../../common/sshtools.py:217 +#: ../../common/sshtools.py:278 #, python-format msgid "" "Password-less authentication for %(user)s@%(host)s failed. Look at 'man " "backintime' for further instructions." msgstr "" -#: ../../common/sshtools.py:229 +#: ../../common/sshtools.py:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" -#: ../../common/sshtools.py:254 +#: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" -#: ../../common/sshtools.py:274 +#: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" -#: ../../common/sshtools.py:276 +#: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:278 +#: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:280 +#: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" -#: ../../common/sshtools.py:302 +#: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" -#: ../../common/sshtools.py:325 ../../common/sshtools.py:383 +#: ../../common/sshtools.py:423 ../../common/sshtools.py:553 #, python-format msgid "" "Remote host %(host)s doesn't support '%(command)s':\n" @@ -644,7 +699,7 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:387 +#: ../../common/sshtools.py:556 #, python-format msgid "" "Check commands on host %(host)s returned unknown error:\n" @@ -652,96 +707,149 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:400 +#: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "" -#: ../../gnome/app.py:185 ../../gnome/app.py:594 ../../gnome/app.py:608 -#: ../../kde4/app.py:299 ../../kde4/app.py:570 ../../kde4/app.py:587 -msgid "Done" -msgstr "Färdig" +#: ../../qt4/app.py:81 +msgid "Refresh snapshots list" +msgstr "Uppdatera listan över ögonblicksbilder" + +#: ../../qt4/app.py:85 ../../qt4/app.py:890 +msgid "Snapshot Name" +msgstr "Namn på ögonblicksbild" + +#: ../../qt4/app.py:88 +msgid "Remove Snapshot" +msgstr "Ta bort ögonblicksbild" + +#: ../../qt4/app.py:91 +msgid "View Snapshot Log" +msgstr "Visa logg för ögonblicksbild" + +#: ../../qt4/app.py:94 +msgid "View Last Log" +msgstr "Visa senaste logg" -#: ../../gnome/app.py:189 ../../kde4/app.py:143 ../../kde4/app.py:159 -#: ../../gnome/mainwindow.glade:225 +#: ../../qt4/app.py:99 ../../qt4/settingsdialog.py:51 +msgid "Settings" +msgstr "Inställningar" + +#: ../../qt4/app.py:104 +msgid "Shutdown" +msgstr "" + +#: ../../qt4/app.py:105 +msgid "Shutdown system after snapshot has finished." +msgstr "" + +#: ../../qt4/app.py:111 +msgid "Exit" +msgstr "Avsluta" + +#: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 msgid "Help" msgstr "Hjälp" -#: ../../gnome/app.py:191 ../../kde4/app.py:146 -#: ../../gnome/mainwindow.glade:223 +#: ../../qt4/app.py:122 +msgid "Config File Help" +msgstr "" + +#: ../../qt4/app.py:125 msgid "Website" msgstr "Hemsida" -#: ../../gnome/app.py:192 ../../kde4/app.py:148 +#: ../../qt4/app.py:127 ../../qt4/app.py:982 +msgid "Changelog" +msgstr "" + +#: ../../qt4/app.py:129 msgid "FAQ" msgstr "" -#: ../../gnome/app.py:193 ../../kde4/app.py:150 +#: ../../qt4/app.py:131 msgid "Ask a question" msgstr "" -#: ../../gnome/app.py:194 ../../kde4/app.py:152 +#: ../../qt4/app.py:133 msgid "Report a bug" msgstr "" -#: ../../gnome/app.py:196 ../../kde4/app.py:155 +#: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "Om" -#: ../../gnome/app.py:202 ../../gnome/app.py:887 -#: ../../gnome/restoredialog.py:84 ../../gnome/snapshotsdialog.py:83 -#: ../../gnome/snapshotsdialog.py:244 ../../kde4/app.py:206 -#: ../../kde4/app.py:216 ../../kde4/restoredialog.py:68 -#: ../../kde4/snapshotsdialog.py:111 ../../kde4/snapshotsdialog.py:117 -#: ../../gnome/mainwindow.glade:350 ../../gnome/mainwindow.glade:352 -#: ../../gnome/snapshotsdialog.glade:169 ../../gnome/snapshotsdialog.glade:171 +#: ../../qt4/app.py:163 +msgid "Up" +msgstr "Uppåt" + +#: ../../qt4/app.py:174 ../../qt4/settingsdialog.py:1776 +msgid "Show hidden files" +msgstr "Visa dolda filer" + +#: ../../qt4/app.py:184 ../../qt4/app.py:199 ../../qt4/app.py:233 +#: ../../qt4/restoredialog.py:62 ../../qt4/settingsdialog.py:1818 +#: ../../qt4/snapshotsdialog.py:134 ../../qt4/snapshotsdialog.py:139 msgid "Restore" msgstr "Återskapa" -#: ../../gnome/app.py:203 ../../gnome/app.py:888 ../../gnome/gnometools.py:67 -#: ../../gnome/snapshotsdialog.py:84 ../../gnome/snapshotsdialog.py:245 -#: ../../kde4/app.py:208 ../../kde4/restoredialog.py:42 -#: ../../kde4/snapshotsdialog.py:113 +#: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 +#: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "" -#: ../../gnome/app.py:205 ../../gnome/app.py:896 ../../gnome/app.py:1146 -#: ../../kde4/app.py:1041 -#, python-format -msgid "Restore '%s'" +#: ../../qt4/app.py:194 +msgid "Restore and delete new files" msgstr "" -#: ../../gnome/app.py:207 ../../gnome/app.py:897 ../../gnome/app.py:1147 -#: ../../kde4/app.py:1042 +#: ../../qt4/app.py:201 #, python-format -msgid "Restore '%s' to ..." +msgid "" +"Restore selected file or folder.\n" +"If this button is grayed out this is most likely because \"%(now)s\" is " +"selected in left hand snapshots list." +msgstr "" + +#: ../../qt4/app.py:206 ../../qt4/logviewdialog.py:67 +#: ../../qt4/qt4tools.py:160 ../../qt4/snapshotsdialog.py:96 +msgid "Snapshots" +msgstr "Ögonblicksbilder" + +#: ../../qt4/app.py:213 +msgid "Snapshot" +msgstr "" + +#: ../../qt4/app.py:224 +msgid "View" msgstr "" -#: ../../gnome/app.py:226 ../../kde4/app.py:235 +#: ../../qt4/app.py:277 msgid "Shortcuts" msgstr "Genvägar" -#: ../../gnome/app.py:249 -msgid "Name" -msgstr "Namn" - -#: ../../gnome/app.py:260 -msgid "Size" -msgstr "Storlek" - -#: ../../gnome/app.py:267 -msgid "Date" -msgstr "Datum" - -#: ../../gnome/app.py:286 ../../gnome/app.py:883 -#: ../../gnome/snapshotsdialog.py:116 ../../kde4/app.py:171 -#: ../../kde4/app.py:221 ../../kde4/snapshotsdialog.py:91 -#: ../../gnome/mainwindow.glade:366 ../../gnome/mainwindow.glade:368 -#: ../../gnome/snapshotsdialog.glade:8 -msgid "Snapshots" -msgstr "Ögonblicksbilder" +#: ../../qt4/app.py:295 +msgid "" +"This folder doesn't exist\n" +"in the current selected snapshot!" +msgstr "" + +#: ../../qt4/app.py:359 +msgid "Add to Include" +msgstr "" -#: ../../gnome/app.py:348 ../../kde4/app.py:362 +#: ../../qt4/app.py:360 +msgid "Add to Exclude" +msgstr "" + +#: ../../qt4/app.py:416 +#, python-format +msgid "" +"%(appName)s is not configured. Would you like to restore a previous " +"configuration?" +msgstr "" + +#: ../../qt4/app.py:440 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it and then press OK" @@ -749,731 +857,791 @@ "Kan inte hitta mappen för ögonblicksbilder.\n" "Anslut enheten om den finns på en flyttbar enhet och tryck på OK." -#: ../../gnome/app.py:611 ../../kde4/app.py:590 -msgid "Done, no backup needed" -msgstr "Färdig, ingen säkerhetskopiering behövdes" +#: ../../qt4/app.py:473 +msgid "" +"If you close this window Back In Time will not be able to shutdown your " +"system when the snapshot has finished.\n" +"Do you really want to close?" +msgstr "" -#: ../../gnome/app.py:619 ../../kde4/app.py:598 +#: ../../qt4/app.py:667 ../../qt4/app.py:703 msgid "Working:" msgstr "Arbetar:" -#: ../../gnome/app.py:623 ../../kde4/app.py:602 +#: ../../qt4/app.py:695 +msgid "Done, no backup needed" +msgstr "Färdig, ingen säkerhetskopiering behövdes" + +#: ../../qt4/app.py:707 msgid "Error:" msgstr "Fel:" -#: ../../gnome/app.py:636 ../../kde4/app.py:649 +#: ../../qt4/app.py:726 ../../qt4/qt4systrayicon.py:153 +msgid "Sent:" +msgstr "" + +#: ../../qt4/app.py:727 ../../qt4/qt4systrayicon.py:154 +msgid "Speed:" +msgstr "" + +#: ../../qt4/app.py:728 ../../qt4/qt4systrayicon.py:155 +msgid "ETA:" +msgstr "" + +#: ../../qt4/app.py:777 msgid "Global" msgstr "Allmänt" -#: ../../gnome/app.py:637 ../../kde4/app.py:650 +#: ../../qt4/app.py:778 msgid "Root" msgstr "Rot" -#: ../../gnome/app.py:638 ../../kde4/app.py:651 +#: ../../qt4/app.py:779 msgid "Home" msgstr "Hem" -#: ../../gnome/app.py:662 -msgid "Bookmarks" -msgstr "Bokmärken" - -#: ../../gnome/app.py:675 ../../kde4/app.py:662 +#: ../../qt4/app.py:794 msgid "Backup folders" msgstr "Mappar för säkerhetskopior" -#: ../../gnome/app.py:701 ../../kde4/app.py:734 -msgid "Today" -msgstr "Idag" +#: ../../qt4/app.py:849 +msgid "This is NOT a snapshot but a live view of your local files" +msgstr "" -#: ../../gnome/app.py:705 ../../kde4/app.py:738 -msgid "Yesterday" -msgstr "Igår" +#: ../../qt4/app.py:860 ../../qt4/app.py:1476 +#, python-format +msgid "Last check %s" +msgstr "" -#: ../../gnome/app.py:709 ../../kde4/app.py:742 -msgid "This week" -msgstr "Denna vecka" +#: ../../qt4/app.py:928 +#, python-format +msgid "" +"Are you sure you want to remove the snapshot:\n" +"%s" +msgstr "" +"Är du säker på att du vill ta bort ögonblicksbilden:\n" +"%s" -#: ../../gnome/app.py:713 ../../kde4/app.py:746 -msgid "Last week" -msgstr "Förra veckan" +#: ../../qt4/app.py:1004 +#, python-format +msgid "" +"Backup local files before overwriting or\n" +"removing with trailing '%(suffix)s'." +msgstr "" -#: ../../gnome/app.py:764 ../../kde4/app.py:398 +#: ../../qt4/app.py:1010 msgid "" -"If you close this window Back In Time will not be able to shutdown your " -"system when the snapshot has finished.\n" -"Do you really want to close?" +"Are you sure you want to remove all newer files in your original folder?" msgstr "" -#: ../../gnome/app.py:881 ../../gnome/snapshotsdialog.py:238 -msgid "Open" -msgstr "Öppna" +#: ../../qt4/app.py:1014 +msgid "" +"WARNING: deleting files in filesystem root could break your whole system!!!" +msgstr "" -#: ../../gnome/app.py:1056 ../../kde4/app.py:90 ../../kde4/app.py:805 -#: ../../gnome/mainwindow.glade:73 ../../gnome/mainwindow.glade:75 -msgid "Snapshot Name" -msgstr "Namn på ögonblicksbild" +#: ../../qt4/app.py:1016 +msgid "Files to be restored:" +msgstr "" -#: ../../gnome/app.py:1075 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +#: ../../qt4/app.py:1031 +msgid "Do you really want to restore this files(s):" msgstr "" -"Är du säker på att du vill ta bort ögonblicksbilden:\n" -"%s" -#: ../../gnome/app.py:1123 ../../kde4/app.py:1010 +#: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "Ögonblicksbild: %s" -#: ../../gnome/app.py:1124 ../../kde4/app.py:1011 +#: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "Visa ögonblicksbilden skapad %s" -#: ../../gnome/app.py:1126 ../../kde4/app.py:1013 +#: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "Visa det aktuella diskinnehållet" -#: ../../gnome/logviewdialog.py:106 ../../gnome/settingsdialog.py:414 -#: ../../kde4/logviewdialog.py:83 ../../kde4/settingsdialog.py:590 +#: ../../qt4/app.py:1268 +#, python-format +msgid "Restore '%s'" +msgstr "" + +#: ../../qt4/app.py:1269 +#, python-format +msgid "Restore '%s' to ..." +msgstr "" + +#: ../../qt4/app.py:1270 +#, python-format +msgid "Restore '%s' and delete new files" +msgstr "" + +#: ../../qt4/app.py:1368 ../../qt4/app.py:1385 +msgid "Authors" +msgstr "" + +#: ../../qt4/app.py:1369 ../../qt4/app.py:1388 +msgid "Translations" +msgstr "" + +#: ../../qt4/app.py:1370 ../../qt4/app.py:1391 +msgid "License" +msgstr "" + +#: ../../qt4/logviewdialog.py:49 +msgid "Last Log View" +msgstr "" + +#: ../../qt4/logviewdialog.py:51 +msgid "Snapshot Log View" +msgstr "" + +#: ../../qt4/logviewdialog.py:59 ../../qt4/settingsdialog.py:59 +#: ../../qt4/settingsdialog.py:274 ../../qt4/settingsdialog.py:1899 +msgid "Profile:" +msgstr "Profil:" + +#: ../../qt4/logviewdialog.py:81 +msgid "Filter:" +msgstr "Filter:" + +#: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 msgid "All" msgstr "Alla" -#: ../../gnome/logviewdialog.py:107 ../../gnome/settingsdialog.py:412 -#: ../../kde4/logviewdialog.py:84 ../../kde4/settingsdialog.py:588 +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 +#: ../../qt4/settingsdialog.py:657 msgid "Errors" msgstr "Fel" -#: ../../gnome/logviewdialog.py:112 ../../kde4/logviewdialog.py:89 +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 msgid "Changes" msgstr "Ändringar" -#: ../../gnome/logviewdialog.py:115 ../../kde4/logviewdialog.py:92 +#: ../../qt4/logviewdialog.py:92 msgid "Informations" msgstr "Information" -#: ../../gnome/settingsdialog.py:235 ../../kde4/settingsdialog.py:387 -msgid "Include files and folders" -msgstr "Inkludera filer och kataloger" +#: ../../qt4/logviewdialog.py:101 +msgid "[E] Error, [I] Information, [C] Change" +msgstr "" -#: ../../gnome/settingsdialog.py:264 -msgid "Exclude patterns, files or folders" -msgstr "Exkludera mönster, filer eller kataloger" - -#: ../../gnome/settingsdialog.py:411 ../../kde4/settingsdialog.py:587 -msgid "None" -msgstr "" - -#: ../../gnome/settingsdialog.py:413 ../../kde4/settingsdialog.py:589 -msgid "Changes & Errors" -msgstr "Ändringar & Fel" - -#: ../../gnome/settingsdialog.py:458 -msgid "Snapshots folder" -msgstr "Katalog för ögonblicksbilder" - -#: ../../gnome/settingsdialog.py:466 ../../kde4/settingsdialog.py:1314 -msgid "Are you sure you want to change snapshots folder ?" -msgstr "Är du säker på att du vill ändra mappen för ögonblicksbilder?" - -#: ../../gnome/settingsdialog.py:901 ../../kde4/settingsdialog.py:914 -msgid "" -"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " -"*/3 for periodic backups every 3 hours" -msgstr "" - -#: ../../gnome/settingsdialog.py:1141 ../../kde4/settingsdialog.py:653 -msgid "New profile" -msgstr "Ny profil" - -#: ../../gnome/settingsdialog.py:1155 ../../kde4/settingsdialog.py:669 -msgid "Rename profile" -msgstr "Byt namn på profil" - -#: ../../gnome/settingsdialog.py:1167 ../../kde4/settingsdialog.py:683 -#, python-format -msgid "Are you sure you want to delete the profile \"%s\" ?" -msgstr "Är du säker på att du vill ta bort profilen \"%s\" ?" - -#: ../../gnome/settingsdialog.py:1173 ../../kde4/settingsdialog.py:1292 -msgid "Include folder" -msgstr "Inkludera mapp" - -#: ../../gnome/settingsdialog.py:1193 ../../kde4/settingsdialog.py:1278 -msgid "Include file" -msgstr "Inkludera fil" - -#: ../../gnome/settingsdialog.py:1235 ../../kde4/settingsdialog.py:1241 -msgid "Exclude pattern" -msgstr "Exkludera mönster" - -#: ../../gnome/settingsdialog.py:1240 ../../kde4/settingsdialog.py:1251 -msgid "Exclude patterns can't contain ':' char !" -msgstr "Exkluderingsmönster får inte innehålla tecknet \":\"!" - -#: ../../gnome/settingsdialog.py:1246 ../../kde4/settingsdialog.py:1257 -msgid "Exclude file" -msgstr "Exkludera fil" - -#: ../../gnome/settingsdialog.py:1257 ../../kde4/settingsdialog.py:1261 -msgid "Exclude folder" -msgstr "Exkludera mapp" - -#: ../../gnome/snapshotsdialog.py:240 -msgid "Jump to" -msgstr "" - -#: ../../gnome/snapshotsdialog.py:248 ../../kde4/snapshotsdialog.py:164 -msgid "Diff" -msgstr "Diff" - -#: ../../gnome/snapshotsdialog.py:277 ../../kde4/snapshotsdialog.py:339 -msgid "You can't compare a snapshot to itself" -msgstr "Du kan inte jämföra en ögonblicksbild med sig själv" - -#: ../../gnome/snapshotsdialog.py:284 ../../kde4/snapshotsdialog.py:346 -#, python-format -msgid "Command not found: %s" -msgstr "Kommandot hittades inte: %s" - -#: ../../gnome/snapshotsdialog.py:307 ../../kde4/snapshotsdialog.py:367 -#, python-format -msgid "" -"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" +#: ../../qt4/logviewdialog.py:104 +msgid "decode paths" msgstr "" -#: ../../gnome/snapshotsdialog.py:310 ../../kde4/snapshotsdialog.py:370 -#, python-format -msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +#: ../../qt4/messagebox.py:56 +msgid "Error" msgstr "" -#: ../../gnome/snapshotsdialog.py:312 ../../kde4/snapshotsdialog.py:372 -msgid "WARNING: This can not be revoked!" +#: ../../qt4/messagebox.py:62 ../../qt4/messagebox.py:68 +msgid "Question" msgstr "" -#: ../../gnome/snapshotsdialog.py:317 ../../kde4/snapshotsdialog.py:377 -#, python-format -msgid "Exclude \"%s\" from future snapshots?" +#: ../../qt4/qt4systrayicon.py:69 +msgid "Start BackInTime" msgstr "" -#: ../../kde4/app.py:86 ../../gnome/mainwindow.glade:58 -#: ../../gnome/mainwindow.glade:60 -msgid "Refresh snapshots list" -msgstr "Uppdatera listan över ögonblicksbilder" +#: ../../qt4/qt4systrayicon.py:124 +msgid "Working..." +msgstr "Arbetar..." -#: ../../kde4/app.py:94 ../../gnome/mainwindow.glade:88 -#: ../../gnome/mainwindow.glade:90 -msgid "Remove Snapshot" -msgstr "Ta bort ögonblicksbild" +#: ../../qt4/qt4tools.py:178 +msgid "Today" +msgstr "Idag" -#: ../../kde4/app.py:98 ../../gnome/mainwindow.glade:105 -msgid "View Snapshot Log" -msgstr "Visa logg för ögonblicksbild" +#: ../../qt4/qt4tools.py:183 +msgid "Yesterday" +msgstr "Igår" -#: ../../kde4/app.py:102 ../../gnome/mainwindow.glade:121 -msgid "View Last Log" -msgstr "Visa senaste logg" +#: ../../qt4/qt4tools.py:188 +msgid "This week" +msgstr "Denna vecka" -#: ../../kde4/app.py:108 ../../kde4/settingsdialog.py:69 -#: ../../gnome/mainwindow.glade:144 ../../gnome/mainwindow.glade:146 -#: ../../gnome/settingsdialog.glade:7 -msgid "Settings" -msgstr "Inställningar" +#: ../../qt4/qt4tools.py:193 +msgid "Last week" +msgstr "Förra veckan" -#: ../../kde4/app.py:124 ../../gnome/mainwindow.glade:169 -msgid "Shutdown system after snapshot has finished." +#: ../../qt4/restoredialog.py:75 +msgid "Show full Log" msgstr "" -#: ../../kde4/app.py:131 ../../gnome/mainwindow.glade:184 -#: ../../gnome/mainwindow.glade:186 -msgid "Exit" -msgstr "Avsluta" - -#: ../../kde4/app.py:186 ../../gnome/mainwindow.glade:289 -msgid "Up" -msgstr "Uppåt" - -#: ../../kde4/app.py:199 ../../gnome/mainwindow.glade:325 -msgid "Show hidden files" -msgstr "Visa dolda filer" +#: ../../qt4/settingsdialog.py:68 +msgid "Edit" +msgstr "Redigera" -#: ../../kde4/app.py:244 -msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +#: ../../qt4/settingsdialog.py:73 +msgid "Modify for Full System Backup" msgstr "" -"Den här katalogen existerar inte\n" -"i den aktuella ögonblicksbilden!" -#: ../../kde4/app.py:839 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +#: ../../qt4/settingsdialog.py:77 ../../qt4/settingsdialog.py:451 +msgid "Add" msgstr "" -"Är du säker på att du vill ta bort ögonblicksbilden:\n" -"%s" -#: ../../kde4/app.py:1140 ../../kde4/kde4systrayicon.py:117 -msgid "Working..." -msgstr "Arbetar..." - -#: ../../kde4/logviewdialog.py:55 -msgid "Error Log View" -msgstr "Felloggsvy" - -#: ../../kde4/logviewdialog.py:65 ../../kde4/settingsdialog.py:79 -#: ../../kde4/settingsdialog.py:293 ../../gnome/logviewdialog.glade:73 -#: ../../gnome/settingsdialog.glade:72 -msgid "Profile:" -msgstr "Profil:" - -#: ../../kde4/logviewdialog.py:77 ../../gnome/logviewdialog.glade:110 -msgid "Filter:" -msgstr "Filter:" - -#: ../../kde4/logviewdialog.py:100 ../../gnome/logviewdialog.glade:169 -msgid "[E] Error, [I] Information, [C] Change" +#: ../../qt4/settingsdialog.py:81 ../../qt4/settingsdialog.py:408 +#: ../../qt4/settingsdialog.py:467 +msgid "Remove" msgstr "" -#: ../../kde4/logviewdialog.py:103 ../../gnome/logviewdialog.glade:195 -msgid "decode paths" -msgstr "" - -#: ../../kde4/settingsdialog.py:88 -msgid "Edit" -msgstr "Redigera" - -#: ../../kde4/settingsdialog.py:106 ../../gnome/settingsdialog.glade:1207 +#: ../../qt4/settingsdialog.py:96 msgid "General" msgstr "Allmänt" -#: ../../kde4/settingsdialog.py:114 ../../gnome/settingsdialog.glade:199 +#: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "" -#: ../../kde4/settingsdialog.py:127 ../../kde4/settingsdialog.py:1311 +#: ../../qt4/settingsdialog.py:119 +#, python-format +msgid "" +"Warning: %(app)s uses EncFS for encryption. A recent security audit " +"revealed several possible attack vectors for this. Please take a look at 'A " +"NOTE ON SECURITY' in 'man backintime'." +msgstr "" + +#: ../../qt4/settingsdialog.py:129 ../../qt4/settingsdialog.py:1568 msgid "Where to save snapshots" msgstr "Var ögonblicksbilder ska sparas" -#: ../../kde4/settingsdialog.py:146 +#: ../../qt4/settingsdialog.py:145 +msgid "Folder" +msgstr "" + +#: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" -#: ../../kde4/settingsdialog.py:158 ../../kde4/settingsdialog.py:283 -#: ../../gnome/settingsdialog.glade:323 ../../gnome/settingsdialog.glade:583 -#: ../../gnome/settingsdialog.glade:874 +#: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "Värd:" -#: ../../kde4/settingsdialog.py:163 ../../gnome/settingsdialog.glade:350 -#: ../../gnome/settingsdialog.glade:610 +#: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "" -#: ../../kde4/settingsdialog.py:168 ../../kde4/settingsdialog.py:288 -#: ../../gnome/settingsdialog.glade:377 ../../gnome/settingsdialog.glade:637 -#: ../../gnome/settingsdialog.glade:902 +#: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "Användare:" -#: ../../kde4/settingsdialog.py:173 ../../gnome/settingsdialog.glade:416 +#: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" -#: ../../kde4/settingsdialog.py:178 ../../gnome/settingsdialog.glade:459 +#: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" -#: ../../kde4/settingsdialog.py:184 +#: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "" -#: ../../kde4/settingsdialog.py:228 ../../kde4/settingsdialog.py:237 -#: ../../kde4/settingsdialog.py:243 ../../gnome/settingsdialog.glade:703 -#: ../../gnome/settingsdialog.glade:743 +#: ../../qt4/settingsdialog.py:201 +msgid "Key File" +msgstr "" + +#: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 +#: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "" -#: ../../kde4/settingsdialog.py:249 ../../gnome/settingsdialog.glade:775 +#: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" -#: ../../kde4/settingsdialog.py:252 ../../gnome/settingsdialog.glade:792 +#: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" -#: ../../kde4/settingsdialog.py:264 ../../gnome/settingsdialog.glade:968 +#: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "Advancerat" -#: ../../kde4/settingsdialog.py:276 ../../gnome/settingsdialog.glade:848 -msgid "Auto Host / User / Profile Id" +#: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 +msgid "Full snapshot path: " msgstr "" -#: ../../kde4/settingsdialog.py:301 +#: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "Schema" -#: ../../kde4/settingsdialog.py:311 ../../gnome/settingsdialog.glade:1092 +#: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "" -#: ../../kde4/settingsdialog.py:322 ../../gnome/settingsdialog.glade:1079 +#: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "" -#: ../../kde4/settingsdialog.py:333 ../../gnome/settingsdialog.glade:1066 +#: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "Timme:" -#: ../../kde4/settingsdialog.py:344 ../../gnome/settingsdialog.glade:1053 +#: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "" -#: ../../kde4/settingsdialog.py:353 ../../gnome/settingsdialog.glade:1014 +#: ../../qt4/settingsdialog.py:339 msgid "" -"Run Back In Time periodically with anacron. This is useful if the computer " -"is not running regular." +"Run Back In Time repeatedly. This is useful if the computer is not running " +"regular." msgstr "" -#: ../../kde4/settingsdialog.py:357 ../../gnome/settingsdialog.glade:1040 -msgid "Frequency in days:" +#: ../../qt4/settingsdialog.py:344 +msgid "Every:" msgstr "" -#: ../../kde4/settingsdialog.py:368 ../../gnome/settingsdialog.glade:1026 +#: ../../qt4/settingsdialog.py:362 msgid "" "Run Back In Time as soon as the drive is connected (only once every X " "days).\n" "You will be prompted for your sudo password." msgstr "" -#: ../../kde4/settingsdialog.py:379 ../../gnome/settingsdialog.glade:1310 +#: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Inkludera" -#: ../../kde4/settingsdialog.py:403 ../../kde4/settingsdialog.py:445 -#: ../../gnome/settingsdialog.glade:1411 +#: ../../qt4/settingsdialog.py:381 +msgid "Include files and folders" +msgstr "Inkludera filer och kataloger" + +#: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "Lägg till fil" -#: ../../kde4/settingsdialog.py:408 ../../kde4/settingsdialog.py:450 -#: ../../gnome/settingsdialog.glade:1427 +#: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Lägg till mapp" -#: ../../kde4/settingsdialog.py:418 ../../gnome/settingsdialog.glade:1474 +#: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Exkludera" -#: ../../kde4/settingsdialog.py:421 ../../gnome/settingsdialog.glade:1328 +#: ../../qt4/settingsdialog.py:417 msgid "" "Warning: Wildcards ('foo*', '[fF]oo', 'fo?') will be ignored with " "mode 'SSH encrypted'.\n" "Only separate asterisk are allowed ('foo/*', 'foo/**/bar')" msgstr "" -#: ../../kde4/settingsdialog.py:430 +#: ../../qt4/settingsdialog.py:425 +msgid "Exclude patterns, files or folders" +msgstr "Exkludera mönster, filer eller kataloger" + +#: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "Starkt rekommenderat:" -#: ../../kde4/settingsdialog.py:460 ../../gnome/settingsdialog.glade:1905 +#: ../../qt4/settingsdialog.py:463 +msgid "Add default" +msgstr "" + +#: ../../qt4/settingsdialog.py:474 +msgid "Exclude files bigger than: " +msgstr "" + +#: ../../qt4/settingsdialog.py:475 +#, python-format +msgid "" +"Exclude files bigger than value in %(prefix)s.\n" +"With 'Full rsync mode' disabled this will only affect new files\n" +"because for rsync this is a transfer option, not an exclude option.\n" +"So big files that has been backed up before will remain in snapshots\n" +"even if they had changed." +msgstr "" + +#: ../../qt4/settingsdialog.py:493 msgid "Auto-remove" msgstr "Automatisk borttagning" -#: ../../kde4/settingsdialog.py:464 ../../gnome/settingsdialog.glade:1608 +#: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "Äldre än:" -#: ../../kde4/settingsdialog.py:478 ../../gnome/settingsdialog.glade:1624 +#: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "Om ledigt utrymme är mindre än:" -#: ../../kde4/settingsdialog.py:490 ../../gnome/settingsdialog.glade:1642 +#: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" -#: ../../kde4/settingsdialog.py:514 ../../gnome/settingsdialog.glade:1697 +#: ../../qt4/settingsdialog.py:551 +msgid "Run in background on remote Host." +msgstr "" + +#: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "" -#: ../../kde4/settingsdialog.py:517 ../../kde4/settingsdialog.py:522 -#: ../../gnome/settingsdialog.glade:1705 ../../gnome/settingsdialog.glade:1729 +#: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "" -#: ../../kde4/settingsdialog.py:519 ../../gnome/settingsdialog.glade:1717 +#: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "" -#: ../../kde4/settingsdialog.py:524 ../../gnome/settingsdialog.glade:1743 +#: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "" -#: ../../kde4/settingsdialog.py:527 +#: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "" -#: ../../kde4/settingsdialog.py:529 ../../gnome/settingsdialog.glade:1769 +#: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "" -#: ../../kde4/settingsdialog.py:532 ../../gnome/settingsdialog.glade:1781 +#: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "" -#: ../../kde4/settingsdialog.py:534 ../../gnome/settingsdialog.glade:1795 +#: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "" -#: ../../kde4/settingsdialog.py:537 ../../gnome/settingsdialog.glade:1496 +#: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "Ta inte bort namngivna ögonblicksbilder" -#: ../../kde4/settingsdialog.py:546 ../../gnome/settingsdialog.glade:2104 +#: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Alternativ" -#: ../../kde4/settingsdialog.py:549 ../../gnome/settingsdialog.glade:1920 +#: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Aktivera notifieringar" -#: ../../kde4/settingsdialog.py:552 ../../gnome/settingsdialog.glade:1937 +#: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "Deaktivera ögonblicksbilder vid batteridrift" -#: ../../kde4/settingsdialog.py:555 +#: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" msgstr "Strömstatus inte tillgängligt från systemet" -#: ../../kde4/settingsdialog.py:558 ../../gnome/settingsdialog.glade:1955 -msgid "Backup files on restore" -msgstr "Säkerhetskopiera filer vid återställning" +#: ../../qt4/settingsdialog.py:611 +msgid "Run only one snapshot at a time" +msgstr "" + +#: ../../qt4/settingsdialog.py:612 +msgid "" +"Other snapshots will be blocked until the current snapshot is done.\n" +"This is a global option. So it will effect all profiles for this user.\n" +"But you need to activate this for all other users, too." +msgstr "" + +#: ../../qt4/settingsdialog.py:617 +msgid "Backup replaced files on restore" +msgstr "" + +#: ../../qt4/settingsdialog.py:618 +#, python-format +msgid "" +"Newer versions of files will be renamed with trailing '%(suffix)s' before " +"restoring.\n" +"If you don't need them anymore you can remove them with '%(cmd)s'" +msgstr "" -#: ../../kde4/settingsdialog.py:561 ../../gnome/settingsdialog.glade:1972 +#: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "Fortsätt vid fel (behåll icke kompletta ögonblicksbilder)" -#: ../../kde4/settingsdialog.py:564 ../../gnome/settingsdialog.glade:1989 +#: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "Använd checksum för att detektera ändringar" -#: ../../kde4/settingsdialog.py:567 ../../gnome/settingsdialog.glade:2006 +#: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "" -#: ../../kde4/settingsdialog.py:568 ../../gnome/settingsdialog.glade:2032 +#: ../../qt4/settingsdialog.py:634 msgid "" -"- snapshots are no read-only\n" -"- destination file-system must support all linux attributes (dates, rights, " +"- snapshots are not read-only\n" +"- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" -#: ../../kde4/settingsdialog.py:575 ../../gnome/settingsdialog.glade:2045 +#: ../../qt4/settingsdialog.py:641 +msgid "Take a new snapshot regardless of there were changes or not." +msgstr "" + +#: ../../qt4/settingsdialog.py:644 msgid "Check for changes (don't take a new snapshot if nothing changed)" msgstr "" -#: ../../kde4/settingsdialog.py:582 +#: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "Loggnivå:" -#: ../../kde4/settingsdialog.py:597 ../../gnome/settingsdialog.glade:2366 -msgid "Expert Options" -msgstr "Avancerade alternativ" +#: ../../qt4/settingsdialog.py:656 +msgid "None" +msgstr "" + +#: ../../qt4/settingsdialog.py:658 +msgid "Changes & Errors" +msgstr "Ändringar & Fel" -#: ../../kde4/settingsdialog.py:600 +#: ../../qt4/settingsdialog.py:674 msgid "Change these options only if you really know what you are doing !" msgstr "Ändra dessa inställningar endast om du vet vad du gör !" -#: ../../kde4/settingsdialog.py:608 ../../gnome/settingsdialog.glade:2133 -msgid "Run 'nice' as cron job (default: enabled)" -msgstr "Kör \"nice\" som cronjobb (standard: aktiverat)" +#: ../../qt4/settingsdialog.py:678 +msgid "Run 'nice':" +msgstr "" + +#: ../../qt4/settingsdialog.py:684 ../../qt4/settingsdialog.py:696 +msgid "as cron job" +msgstr "" -#: ../../kde4/settingsdialog.py:611 ../../gnome/settingsdialog.glade:2150 -msgid "Run 'ionice' as cron job (default: enabled)" -msgstr "Kör 'ionice' som cron-jobb (förval: aktiverat)" +#: ../../qt4/settingsdialog.py:687 ../../qt4/settingsdialog.py:702 +#: ../../qt4/settingsdialog.py:716 +msgid "on remote host" +msgstr "" -#: ../../kde4/settingsdialog.py:614 ../../gnome/settingsdialog.glade:2167 -msgid "Run 'ionice' when taking a manual snapshot (default: disabled)" +#: ../../qt4/settingsdialog.py:690 +msgid "Run 'ionice':" msgstr "" -#: ../../kde4/settingsdialog.py:617 ../../gnome/settingsdialog.glade:2184 -msgid "Run 'nice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:699 +msgid "when taking a manual snapshot" msgstr "" -#: ../../kde4/settingsdialog.py:620 ../../gnome/settingsdialog.glade:2201 -msgid "Run 'ionice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:706 +msgid "Run 'rsync' with 'nocache':" msgstr "" -#: ../../kde4/settingsdialog.py:626 ../../gnome/settingsdialog.glade:2224 +#: ../../qt4/settingsdialog.py:712 +msgid "on local machine" +msgstr "" + +#: ../../qt4/settingsdialog.py:719 +msgid "Redirect stdout to /dev/null in cronjobs." +msgstr "" + +#: ../../qt4/settingsdialog.py:725 +msgid "Redirect stderr to /dev/null in cronjobs." +msgstr "" + +#: ../../qt4/settingsdialog.py:734 msgid "Limit rsync bandwidth usage: " msgstr "" -#: ../../kde4/settingsdialog.py:629 ../../gnome/settingsdialog.glade:2259 +#: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" -#: ../../kde4/settingsdialog.py:634 ../../gnome/settingsdialog.glade:2280 +#: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "Behåll ACL" -#: ../../kde4/settingsdialog.py:637 ../../gnome/settingsdialog.glade:2297 +#: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "Behåll utökade attribut (xattr)" -#: ../../kde4/settingsdialog.py:640 ../../gnome/settingsdialog.glade:2314 +#: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute links)" msgstr "Kopiera osäkra länkar (fungerar endast med absoluta länkar)" -#: ../../kde4/settingsdialog.py:643 ../../gnome/settingsdialog.glade:2331 -msgid "Copy links (dereference symbolic links)" +#: ../../qt4/settingsdialog.py:834 +msgid "Paste additional options to rsync" msgstr "" -#: ../../kde4/snapshotsdialog.py:46 ../../kde4/snapshotsdialog.py:173 -#: ../../gnome/snapshotsdialog.glade:385 -msgid "Diff Options" -msgstr "Jämförelsealternativ" - -#: ../../kde4/snapshotsdialog.py:56 ../../gnome/snapshotsdialog.glade:314 -msgid "Command:" -msgstr "Kommando:" - -#: ../../kde4/snapshotsdialog.py:60 ../../gnome/snapshotsdialog.glade:322 -msgid "Parameters:" -msgstr "Parametrar:" +#: ../../qt4/settingsdialog.py:837 +msgid "" +"Options must be quoted e.g. --exclude-from=\"/path/to/my exclude file\"." +msgstr "" -#: ../../kde4/snapshotsdialog.py:64 ../../gnome/snapshotsdialog.glade:334 -msgid "Use %1 and %2 for path parameters" -msgstr "Använd %1 och %2 för sökvägsparametrar" +#: ../../qt4/settingsdialog.py:847 +msgid "Add prefix to SSH commands" +msgstr "" -#: ../../kde4/snapshotsdialog.py:123 ../../gnome/snapshotsdialog.glade:184 -#: ../../gnome/snapshotsdialog.glade:186 -msgid "Delete" +#: ../../qt4/settingsdialog.py:850 +#, python-format +msgid "" +"Prefix to run before every command on remote host.\n" +"Variables need to be escaped with \\$FOO.\n" +"This doesn't touch rsync. So to add a prefix\n" +"for rsync use \"%(cb_rsync_options)s\" with\n" +"%(rsync_options_value)s\n" +"\n" +"%(default)s: %(def_value)s" msgstr "" -#: ../../kde4/snapshotsdialog.py:128 ../../gnome/snapshotsdialog.glade:199 -#: ../../gnome/snapshotsdialog.glade:201 -msgid "Select All" +#: ../../qt4/settingsdialog.py:858 ../../qt4/settingsdialog.py:1691 +msgid "default" msgstr "" -#: ../../kde4/snapshotsdialog.py:132 ../../gnome/snapshotsdialog.glade:88 -msgid "List only different snapshots" -msgstr "Lista endast olika ögonblicksbilder" +#: ../../qt4/settingsdialog.py:875 +msgid "Restore Config" +msgstr "" -#: ../../kde4/snapshotsdialog.py:139 ../../gnome/snapshotsdialog.glade:110 -msgid "List only equal snapshots to: " +#: ../../qt4/settingsdialog.py:891 +msgid "" +"Full system backup can only create a snapshot to be restored to the same " +"physical disk(s) with the same disk partitioning as from the source; " +"restoring to new physical disks or the same disks with different " +"partitioning will yield a potentially broken and unusable system.\n" +"\n" +"Full system backup will override some settings that may have been " +"customized. Continue?" msgstr "" -#: ../../kde4/snapshotsdialog.py:149 ../../gnome/snapshotsdialog.glade:146 -msgid "Deep check (more accurate, but slow)" -msgstr "Djupkontroll (mer noggrann, men långsam)" +#: ../../qt4/settingsdialog.py:922 +msgid "New profile" +msgstr "Ny profil" -#: ../../kde4/snapshotsdialog.py:174 -msgid "Go To" -msgstr "Gå till" +#: ../../qt4/settingsdialog.py:938 +msgid "Rename profile" +msgstr "Byt namn på profil" -#: ../../gnome/logviewdialog.glade:9 -msgid "Log View" -msgstr "Loggvy" +#: ../../qt4/settingsdialog.py:952 +#, python-format +msgid "Are you sure you want to delete the profile \"%s\" ?" +msgstr "Är du säker på att du vill ta bort profilen \"%s\" ?" -#: ../../gnome/logviewdialog.glade:179 -msgid "scroll down automatic" +#: ../../qt4/settingsdialog.py:1191 +msgid "" +"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " +"*/3 for periodic backups every 3 hours" msgstr "" -#: ../../gnome/mainwindow.glade:7 -msgid "Back In Time" -msgstr "Back In Time" - -#: ../../gnome/mainwindow.glade:45 -msgid "Backup Now" -msgstr "Säkerhetskopiera nu" +#: ../../qt4/settingsdialog.py:1489 +msgid "Exclude pattern" +msgstr "Exkludera mönster" -#: ../../gnome/mainwindow.glade:171 -msgid "Shutdown" -msgstr "" +#: ../../qt4/settingsdialog.py:1502 +msgid "Exclude file" +msgstr "Exkludera fil" -#: ../../gnome/mainwindow.glade:287 -msgid "Parent folder" -msgstr "Föräldramapp" +#: ../../qt4/settingsdialog.py:1506 +msgid "Exclude folder" +msgstr "Exkludera mapp" -#: ../../gnome/mainwindow.glade:327 -msgid "Hidden files" -msgstr "Dolda filer" +#: ../../qt4/settingsdialog.py:1525 +msgid "Include file" +msgstr "Inkludera fil" -#: ../../gnome/mainwindow.glade:451 +#: ../../qt4/settingsdialog.py:1533 ../../qt4/settingsdialog.py:1553 +#, python-format msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +"\"%s\" is a symlink. The linked target will not be backed up until you " +"include it, too.\n" +"Would you like to include the symlinks target instead?" msgstr "" -"Den här katalogen existerar inte\n" -"i den aktuella ögonblicksbilden !" -#: ../../gnome/settingsdialog.glade:287 -msgid "Where to save snapshots" -msgstr "Var ska ögonblicksbilder sparas" +#: ../../qt4/settingsdialog.py:1545 +msgid "Include folder" +msgstr "Inkludera mapp" -#: ../../gnome/settingsdialog.glade:483 -msgid "Private key:" -msgstr "" +#: ../../qt4/settingsdialog.py:1572 +msgid "Are you sure you want to change snapshots folder ?" +msgstr "Är du säker på att du vill ändra mappen för ögonblicksbilder?" -#: ../../gnome/settingsdialog.glade:534 -msgid "Advanced SSH Settings" +#: ../../qt4/settingsdialog.py:1688 +msgid "enabled" msgstr "" -#: ../../gnome/settingsdialog.glade:552 -msgid "SSH Settings" +#: ../../qt4/settingsdialog.py:1690 +msgid "disabled" msgstr "" -#: ../../gnome/settingsdialog.glade:815 -msgid "Password" +#: ../../qt4/settingsdialog.py:1715 +msgid "Restore Settings" msgstr "" -#: ../../gnome/settingsdialog.glade:930 -msgid "Profile Id:" -msgstr "Profil-id;" +#: ../../qt4/settingsdialog.py:1732 +msgid " and add your user to group 'fuse'" +msgstr "" -#: ../../gnome/settingsdialog.glade:1115 +#: ../../qt4/settingsdialog.py:1736 +#, python-format msgid "" -"hours seperate by comma ( e.g. 8,12,18,23) or */3 for periodic backups every " -"3 hours (cron style)" +"Please navigate to the snapshot from which you want to restore %(appName)s's " +"configuration. The path may look like: \n" +"%(samplePath)s\n" +"\n" +"If your snapshots are on a remote drive or if they are encrypted you need to " +"manually mount them first. If you use Mode SSH you also may need to set up " +"public key login to the remote host%(addFuse)s.\n" +"Take a look at 'man backintime'." msgstr "" -#: ../../gnome/settingsdialog.glade:1163 -msgid "Schedule" -msgstr "Schema" +#: ../../qt4/settingsdialog.py:1794 ../../qt4/settingsdialog.py:1854 +msgid "No config found" +msgstr "" -#: ../../gnome/settingsdialog.glade:1363 -msgid "Highly recommended:" -msgstr "Starkt rekommenderat:" +#: ../../qt4/snapshotsdialog.py:49 ../../qt4/snapshotsdialog.py:173 +msgid "Diff Options" +msgstr "Jämförelsealternativ" -#: ../../gnome/settingsdialog.glade:1377 -msgid "label" -msgstr "etikett" +#: ../../qt4/snapshotsdialog.py:56 +msgid "Command:" +msgstr "Kommando:" + +#: ../../qt4/snapshotsdialog.py:60 +msgid "Parameters:" +msgstr "Parametrar:" -#: ../../gnome/settingsdialog.glade:1755 -msgid "week(s)" +#: ../../qt4/snapshotsdialog.py:64 +msgid "Use %1 and %2 for path parameters" +msgstr "Använd %1 och %2 för sökvägsparametrar" + +#: ../../qt4/snapshotsdialog.py:106 +msgid "List only different snapshots" +msgstr "Lista endast olika ögonblicksbilder" + +#: ../../qt4/snapshotsdialog.py:113 +msgid "List only equal snapshots to: " msgstr "" -#: ../../gnome/settingsdialog.glade:2069 -msgid "Log level:" -msgstr "Loggnivå:" +#: ../../qt4/snapshotsdialog.py:123 +msgid "Deep check (more accurate, but slow)" +msgstr "Djupkontroll (mer noggrann, men långsam)" + +#: ../../qt4/snapshotsdialog.py:144 +msgid "Delete" +msgstr "" + +#: ../../qt4/snapshotsdialog.py:148 +msgid "Select All" +msgstr "" + +#: ../../qt4/snapshotsdialog.py:161 +msgid "Diff" +msgstr "Diff" + +#: ../../qt4/snapshotsdialog.py:172 +msgid "Go To" +msgstr "Gå till" -#: ../../gnome/settingsdialog.glade:2121 +#: ../../qt4/snapshotsdialog.py:326 +msgid "You can't compare a snapshot to itself" +msgstr "Du kan inte jämföra en ögonblicksbild med sig själv" + +#: ../../qt4/snapshotsdialog.py:333 +#, python-format +msgid "Command not found: %s" +msgstr "Kommandot hittades inte: %s" + +#: ../../qt4/snapshotsdialog.py:354 +#, python-format msgid "" -"Change these options only if you really know what you are doing !" +"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" msgstr "" -"Ändra dessa inställningar endast om du verkligen vet vad du gör!" -#: ../../gnome/snapshotsdialog.glade:263 -msgid "Diff with" -msgstr "Jämför med" +#: ../../qt4/snapshotsdialog.py:357 +#, python-format +msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +msgstr "" -#: ../../gnome/textinputdialog.glade:7 -msgid "Pattern" -msgstr "Mönster" +#: ../../qt4/snapshotsdialog.py:359 +msgid "WARNING: This can not be revoked!" +msgstr "" -#: ../../gnome/textinputdialog.glade:70 -msgid "Text" +#: ../../qt4/snapshotsdialog.py:374 +#, python-format +msgid "Exclude \"%s\" from future snapshots?" msgstr "" diff -Nru backintime-1.0.36/common/po/th.po backintime-1.1.12/common/po/th.po --- backintime-1.0.36/common/po/th.po 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/po/th.po 2016-01-11 18:07:58.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2013-11-09 22:34+0100\n" +"POT-Creation-Date: 2015-12-19 00:47+0100\n" "PO-Revision-Date: 2009-03-12 08:48+0000\n" "Last-Translator: Thammaraj \n" "Language-Team: Thai \n" @@ -15,254 +15,295 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Launchpad-Export-Date: 2014-08-06 10:20+0000\n" -"X-Generator: Launchpad (build 17147)\n" +"X-Launchpad-Export-Date: 2016-01-11 17:52+0000\n" +"X-Generator: Launchpad (build 17881)\n" -#: ../../common/config.py:72 +#: ../../common/configfile.py:60 +#, python-format +msgid "Failed to save config: %s" +msgstr "" + +#: ../../common/configfile.py:78 +#, python-format +msgid "Failed to load config: %s" +msgstr "" + +#: ../../common/configfile.py:352 ../../common/configfile.py:414 +#, python-format +msgid "Profile \"%s\" already exists !" +msgstr "" + +#: ../../common/configfile.py:383 +msgid "You can't remove the last profile !" +msgstr "" + +#: ../../common/config.py:76 msgid "Disabled" msgstr "" -#: ../../common/config.py:73 +#: ../../common/config.py:77 msgid "At every boot/reboot" msgstr "" -#: ../../common/config.py:74 +#: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "ทุก 5 นาที" -#: ../../common/config.py:75 +#: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "ทุก 10 นาที" -#: ../../common/config.py:76 +#: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "" -#: ../../common/config.py:77 +#: ../../common/config.py:81 msgid "Every hour" msgstr "" -#: ../../common/config.py:78 +#: ../../common/config.py:82 msgid "Every 2 hours" msgstr "" -#: ../../common/config.py:79 +#: ../../common/config.py:83 msgid "Every 4 hours" msgstr "" -#: ../../common/config.py:80 +#: ../../common/config.py:84 msgid "Every 6 hours" msgstr "" -#: ../../common/config.py:81 +#: ../../common/config.py:85 msgid "Every 12 hours" msgstr "" -#: ../../common/config.py:82 +#: ../../common/config.py:86 msgid "Custom Hours" msgstr "" -#: ../../common/config.py:83 +#: ../../common/config.py:87 msgid "Every Day" msgstr "ทุกวัน" -#: ../../common/config.py:84 -msgid "Daily (anacron)" +#: ../../common/config.py:88 +msgid "Repeatedly (anacron)" msgstr "" -#: ../../common/config.py:85 +#: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "" -#: ../../common/config.py:86 +#: ../../common/config.py:90 msgid "Every Week" msgstr "ทุกสัปดาห์" -#: ../../common/config.py:87 +#: ../../common/config.py:91 msgid "Every Month" msgstr "ทุกเดือน" -#: ../../common/config.py:91 +#: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "วัน" -#: ../../common/config.py:92 +#: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "สัปดาห์" -#: ../../common/config.py:93 +#: ../../common/config.py:97 msgid "Year(s)" msgstr "ปี" -#: ../../common/config.py:100 +#: ../../common/config.py:101 +msgid "Hour(s)" +msgstr "" + +#: ../../common/config.py:104 +msgid "Month(s)" +msgstr "" + +#: ../../common/config.py:126 ../../qt4/settingsdialog.py:551 msgid " EXPERIMENTAL!" msgstr "" -#: ../../common/config.py:103 +#: ../../common/config.py:129 msgid "Local" msgstr "" -#: ../../common/config.py:104 +#: ../../common/config.py:130 msgid "SSH" msgstr "" -#: ../../common/config.py:104 ../../common/config.py:106 -#: ../../gnome/settingsdialog.py:475 ../../kde4/settingsdialog.py:1325 +#: ../../common/config.py:130 ../../common/config.py:132 +#: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "" -#: ../../common/config.py:105 +#: ../../common/config.py:131 msgid "Local encrypted" msgstr "" -#: ../../common/config.py:105 ../../common/config.py:106 +#: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "" -#: ../../common/config.py:106 +#: ../../common/config.py:132 msgid "SSH encrypted" msgstr "" -#: ../../common/config.py:112 +#: ../../common/config.py:135 msgid "Default" msgstr "" -#: ../../common/config.py:113 +#: ../../common/config.py:136 msgid "AES128-CTR" msgstr "" -#: ../../common/config.py:114 +#: ../../common/config.py:137 msgid "AES192-CTR" msgstr "" -#: ../../common/config.py:115 +#: ../../common/config.py:138 msgid "AES256-CTR" msgstr "" -#: ../../common/config.py:116 +#: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "" -#: ../../common/config.py:117 +#: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "" -#: ../../common/config.py:118 +#: ../../common/config.py:141 msgid "AES128-CBC" msgstr "" -#: ../../common/config.py:119 +#: ../../common/config.py:142 msgid "3DES-CBC" msgstr "" -#: ../../common/config.py:120 +#: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "" -#: ../../common/config.py:121 +#: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "" -#: ../../common/config.py:122 +#: ../../common/config.py:145 msgid "AES192-CBC" msgstr "" -#: ../../common/config.py:123 +#: ../../common/config.py:146 msgid "AES256-CBC" msgstr "" -#: ../../common/config.py:124 +#: ../../common/config.py:147 msgid "ARCFOUR" msgstr "" -#: ../../common/config.py:129 +#: ../../common/config.py:153 msgid "Main profile" msgstr "" -#: ../../common/config.py:256 ../../common/config.py:275 -#: ../../common/config.py:286 ../../common/config.py:291 +#: ../../common/config.py:289 ../../common/config.py:296 +#: ../../common/config.py:307 ../../common/config.py:312 +#: ../../qt4/qt4systrayicon.py:61 #, python-format msgid "Profile: \"%s\"" msgstr "" -#: ../../common/config.py:256 +#: ../../common/config.py:289 msgid "Snapshots folder is not valid !" msgstr "" -#: ../../common/config.py:275 +#: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "" -#: ../../common/config.py:286 +#: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "" -#: ../../common/config.py:291 +#: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "" -#: ../../common/config.py:361 +#: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "" -#: ../../common/config.py:376 ../../common/config.py:389 +#: ../../common/config.py:380 +msgid "Host/User/Profile-ID must not be empty!" +msgstr "" + +#: ../../common/config.py:388 ../../common/config.py:420 #, python-format msgid "" "Can't write to: %s\n" "Are you sure you have write access ?" msgstr "" -#: ../../common/config.py:1286 +#: ../../common/config.py:400 +#, python-format msgid "" -"Can't find crontab.\n" -"Are you sure cron is installed ?\n" -"If not you should disable all automatic backups." +"Destination filesystem for '%(path)s' is formatted with FAT which doesn't " +"support hard-links. Please use a native Linux filesystem." msgstr "" -#: ../../common/config.py:1338 +#: ../../common/config.py:405 #, python-format -msgid "Schedule udev doesn't work with mode %s" +msgid "" +"Destination filsystem for '%(path)s' is a SMB mounted share. Please make " +"sure the remote SMB server supports symlinks or activate '%(copyLinks)s' in " +"'%(expertOptions)s'." msgstr "" -#: ../../common/config.py:1342 -#, python-format -msgid "Couldn't find UUID for \"%s\"" +#: ../../common/config.py:408 ../../qt4/settingsdialog.py:815 +msgid "Copy links (dereference symbolic links)" msgstr "" -#: ../../common/config.py:1379 -msgid "Failed to remove udev rules" +#: ../../common/config.py:409 ../../qt4/settingsdialog.py:669 +msgid "Expert Options" msgstr "" -#: ../../common/config.py:1385 -msgid "Failed to create udev rules" +#: ../../common/config.py:411 +#, python-format +msgid "" +"Destination filesystem for '%(path)s is a sshfs mounted share. sshfs doesn't " +"support hard-links. Please use mode 'SSH' instead." msgstr "" -#: ../../common/config.py:1420 +#: ../../common/config.py:1407 msgid "" -"Can't find anacron.\n" -"Are you sure anacron is installed ?\n" -"If not you should disable daily anacron backups." +"Can't find crontab.\n" +"Are you sure cron is installed ?\n" +"If not you should disable all automatic backups." msgstr "" -#: ../../common/config.py:1439 -msgid "Please provide your sudo password to install the udev rule." +#: ../../common/config.py:1411 +msgid "Failed to write new crontab." msgstr "" -#: ../../common/config.py:1445 -msgid "Please provide your sudo password to remove unused udev rules." +#: ../../common/config.py:1505 +#, python-format +msgid "" +"Could not install Udev rule for profile %(profile_id)s. DBus Service " +"'%(dbus_interface)s' wasn't available" msgstr "" -#: ../../common/configfile.py:253 ../../common/configfile.py:315 +#: ../../common/config.py:1517 #, python-format -msgid "Profile \"%s\" already exists !" +msgid "Schedule udev doesn't work with mode %s" msgstr "" -#: ../../common/configfile.py:284 -msgid "You can't remove the last profile !" +#: ../../common/config.py:1526 +#, python-format +msgid "Couldn't find UUID for \"%s\"" msgstr "" -#: ../../common/encfstools.py:95 +#: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" @@ -270,38 +311,38 @@ "%(error)s" msgstr "" -#: ../../common/encfstools.py:105 +#: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "" -#: ../../common/encfstools.py:149 +#: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "" -#: ../../common/encfstools.py:153 +#: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" -#: ../../common/encfstools.py:154 +#: ../../common/encfstools.py:171 msgid "Cancel" msgstr "" -#: ../../common/encfstools.py:157 +#: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "" -#: ../../common/encfstools.py:161 +#: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "" -#: ../../common/encfstools.py:166 +#: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" -#: ../../common/encfstools.py:174 ../../common/sshtools.py:207 +#: ../../common/encfstools.py:196 ../../common/sshtools.py:262 #, python-format msgid "" "%(user)s is not member of group 'fuse'.\n" @@ -309,70 +350,73 @@ "Look at 'man backintime' for further instructions." msgstr "" -#: ../../common/encfstools.py:189 +#: ../../common/encfstools.py:211 msgid "" "encfs version 1.7.2 and before has a bug with option --reverse. Please " "update encfs" msgstr "" -#: ../../common/encfstools.py:453 ../../common/encfstools.py:480 -#: ../../common/snapshots.py:982 ../../common/snapshots.py:1288 -#: ../../kde4/app.py:82 ../../gnome/mainwindow.glade:43 +#: ../../common/encfstools.py:512 ../../common/snapshots.py:1131 +#: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "" -#: ../../common/mount.py:195 +#: ../../common/mount.py:204 #, python-format msgid "" "Hash collision occurred in hash_id %s. Incrementing global value " "hash_collision and try again." msgstr "" -#: ../../common/mount.py:246 +#: ../../common/mount.py:259 #, python-format msgid "mountpoint %s not empty." msgstr "" -#: ../../common/mount.py:286 +#: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" -#: ../../common/password.py:425 +#: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" -#: ../../common/snapshots.py:171 ../../gnome/app.py:1127 -#: ../../kde4/app.py:1014 +#: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "เดี๋ยวนี้" -#: ../../common/snapshots.py:182 ../../gnome/gnometools.py:37 +#: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "" -#: ../../common/snapshots.py:282 +#: ../../common/snapshots.py:344 msgid "" "### This log has been decoded with automatic search pattern\n" "### If some paths are not decoded you can manually decode them with:\n" msgstr "" -#: ../../common/snapshots.py:465 +#: ../../common/snapshots.py:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "" -#: ../../common/snapshots.py:564 +#: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "" -#: ../../common/snapshots.py:739 +#: ../../common/snapshots.py:752 ../../qt4/app.py:377 ../../qt4/app.py:675 +#: ../../qt4/app.py:692 ../../qt4/qt4systrayicon.py:65 +msgid "Done" +msgstr "ทำเสร็จ" + +#: ../../common/snapshots.py:860 msgid "" "Back In Time changed its backup format.\n" "\n" "Your old snapshots can be moved according to this new format. OK?" msgstr "" -#: ../../common/snapshots.py:749 +#: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" @@ -383,13 +427,13 @@ "(The program will still be able to discriminate between them)" msgstr "" -#: ../../common/snapshots.py:752 +#: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" msgstr "" -#: ../../common/snapshots.py:803 +#: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" @@ -402,7 +446,7 @@ "cannot continue taking snapshots" msgstr "" -#: ../../common/snapshots.py:812 +#: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" @@ -412,14 +456,14 @@ "if you are done restart Back In Time to proceed" msgstr "" -#: ../../common/snapshots.py:825 +#: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" msgstr "" -#: ../../common/snapshots.py:830 +#: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" @@ -431,172 +475,183 @@ "If you do not, you will be asked again next time you start Back In Time." msgstr "" -#: ../../common/snapshots.py:839 +#: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "" -#: ../../common/snapshots.py:841 +#: ../../common/snapshots.py:953 msgid "" "Back In Time still cannot continue taking new snapshots.\n" "Restart Back In Time to see the questions again" msgstr "" -#: ../../common/snapshots.py:913 +#: ../../common/snapshots.py:972 +msgid "Deferring backup while on battery" +msgstr "" + +#: ../../common/snapshots.py:1035 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it." msgstr "" -#: ../../common/snapshots.py:915 +#: ../../common/snapshots.py:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "" msgstr[1] "" -#: ../../common/snapshots.py:941 +#: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "" -#: ../../common/snapshots.py:950 +#: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "" -#: ../../common/snapshots.py:1088 +#: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "" -#: ../../common/snapshots.py:1107 +#: ../../common/snapshots.py:1217 msgid "..." msgstr "" -#: ../../common/snapshots.py:1134 +#: ../../common/snapshots.py:1238 +#, python-format +msgid "Found leftover '%s' which can be continued." +msgstr "" + +#: ../../common/snapshots.py:1250 +#, python-format +msgid "Remove leftover '%s' folder from last run" +msgstr "" + +#: ../../common/snapshots.py:1263 #, python-format msgid "Can't remove folder: %s" msgstr "" -#: ../../common/snapshots.py:1219 +#: ../../common/snapshots.py:1340 #, python-format msgid "Compare with snapshot %s" msgstr "" -#: ../../common/snapshots.py:1248 +#: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "" -#: ../../common/snapshots.py:1335 +#: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "" -#: ../../common/snapshots.py:1341 +#: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "" -#: ../../common/snapshots.py:1442 +#: ../../common/snapshots.py:1470 +msgid "Save permission over ssh failed. Retry normal method" +msgstr "" + +#: ../../common/snapshots.py:1521 #, python-format msgid "Can't rename %(new_path)s to %(path)s" msgstr "" -#: ../../common/snapshots.py:1562 -msgid "Remove old snapshots" +#: ../../common/snapshots.py:1695 ../../common/snapshots.py:1728 +#: ../../qt4/settingsdialog.py:542 +msgid "Smart remove" msgstr "" -#: ../../common/snapshots.py:1586 ../../kde4/settingsdialog.py:501 -#: ../../gnome/settingsdialog.glade:1660 -msgid "Smart remove" +#: ../../common/snapshots.py:1704 +msgid "Remove old snapshots" msgstr "" -#: ../../common/snapshots.py:1591 +#: ../../common/snapshots.py:1733 msgid "Try to keep min free space" msgstr "" -#: ../../common/snapshots.py:1621 +#: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" -#: ../../common/sshtools.py:106 +#: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "" -#: ../../common/sshtools.py:113 +#: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "" -#: ../../common/sshtools.py:187 -#, python-format -msgid "" -"Failed to unlock SSH private key:\n" -"Error: %s" -msgstr "" - -#: ../../common/sshtools.py:194 +#: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" -#: ../../common/sshtools.py:199 +#: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" -#: ../../common/sshtools.py:217 +#: ../../common/sshtools.py:278 #, python-format msgid "" "Password-less authentication for %(user)s@%(host)s failed. Look at 'man " "backintime' for further instructions." msgstr "" -#: ../../common/sshtools.py:229 +#: ../../common/sshtools.py:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" -#: ../../common/sshtools.py:254 +#: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" -#: ../../common/sshtools.py:274 +#: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" -#: ../../common/sshtools.py:276 +#: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:278 +#: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:280 +#: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" -#: ../../common/sshtools.py:302 +#: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" -#: ../../common/sshtools.py:325 ../../common/sshtools.py:383 +#: ../../common/sshtools.py:423 ../../common/sshtools.py:553 #, python-format msgid "" "Remote host %(host)s doesn't support '%(command)s':\n" @@ -604,7 +659,7 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:387 +#: ../../common/sshtools.py:556 #, python-format msgid "" "Check commands on host %(host)s returned unknown error:\n" @@ -612,817 +667,937 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:400 +#: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "" -#: ../../gnome/app.py:185 ../../gnome/app.py:594 ../../gnome/app.py:608 -#: ../../kde4/app.py:299 ../../kde4/app.py:570 ../../kde4/app.py:587 -msgid "Done" -msgstr "ทำเสร็จ" +#: ../../qt4/app.py:81 +msgid "Refresh snapshots list" +msgstr "" + +#: ../../qt4/app.py:85 ../../qt4/app.py:890 +msgid "Snapshot Name" +msgstr "" + +#: ../../qt4/app.py:88 +msgid "Remove Snapshot" +msgstr "" + +#: ../../qt4/app.py:91 +msgid "View Snapshot Log" +msgstr "" + +#: ../../qt4/app.py:94 +msgid "View Last Log" +msgstr "" + +#: ../../qt4/app.py:99 ../../qt4/settingsdialog.py:51 +msgid "Settings" +msgstr "การตั้งค่า" + +#: ../../qt4/app.py:104 +msgid "Shutdown" +msgstr "" + +#: ../../qt4/app.py:105 +msgid "Shutdown system after snapshot has finished." +msgstr "" -#: ../../gnome/app.py:189 ../../kde4/app.py:143 ../../kde4/app.py:159 -#: ../../gnome/mainwindow.glade:225 +#: ../../qt4/app.py:111 +msgid "Exit" +msgstr "ออก" + +#: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 msgid "Help" msgstr "ช่วยเหลือ" -#: ../../gnome/app.py:191 ../../kde4/app.py:146 -#: ../../gnome/mainwindow.glade:223 +#: ../../qt4/app.py:122 +msgid "Config File Help" +msgstr "" + +#: ../../qt4/app.py:125 msgid "Website" msgstr "" -#: ../../gnome/app.py:192 ../../kde4/app.py:148 +#: ../../qt4/app.py:127 ../../qt4/app.py:982 +msgid "Changelog" +msgstr "" + +#: ../../qt4/app.py:129 msgid "FAQ" msgstr "" -#: ../../gnome/app.py:193 ../../kde4/app.py:150 +#: ../../qt4/app.py:131 msgid "Ask a question" msgstr "" -#: ../../gnome/app.py:194 ../../kde4/app.py:152 +#: ../../qt4/app.py:133 msgid "Report a bug" msgstr "" -#: ../../gnome/app.py:196 ../../kde4/app.py:155 +#: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "เกี่ยวกับ" -#: ../../gnome/app.py:202 ../../gnome/app.py:887 -#: ../../gnome/restoredialog.py:84 ../../gnome/snapshotsdialog.py:83 -#: ../../gnome/snapshotsdialog.py:244 ../../kde4/app.py:206 -#: ../../kde4/app.py:216 ../../kde4/restoredialog.py:68 -#: ../../kde4/snapshotsdialog.py:111 ../../kde4/snapshotsdialog.py:117 -#: ../../gnome/mainwindow.glade:350 ../../gnome/mainwindow.glade:352 -#: ../../gnome/snapshotsdialog.glade:169 ../../gnome/snapshotsdialog.glade:171 +#: ../../qt4/app.py:163 +msgid "Up" +msgstr "ขึ้น" + +#: ../../qt4/app.py:174 ../../qt4/settingsdialog.py:1776 +msgid "Show hidden files" +msgstr "แสดงแฟ้มที่ซ่อน" + +#: ../../qt4/app.py:184 ../../qt4/app.py:199 ../../qt4/app.py:233 +#: ../../qt4/restoredialog.py:62 ../../qt4/settingsdialog.py:1818 +#: ../../qt4/snapshotsdialog.py:134 ../../qt4/snapshotsdialog.py:139 msgid "Restore" msgstr "" -#: ../../gnome/app.py:203 ../../gnome/app.py:888 ../../gnome/gnometools.py:67 -#: ../../gnome/snapshotsdialog.py:84 ../../gnome/snapshotsdialog.py:245 -#: ../../kde4/app.py:208 ../../kde4/restoredialog.py:42 -#: ../../kde4/snapshotsdialog.py:113 +#: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 +#: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "" -#: ../../gnome/app.py:205 ../../gnome/app.py:896 ../../gnome/app.py:1146 -#: ../../kde4/app.py:1041 -#, python-format -msgid "Restore '%s'" +#: ../../qt4/app.py:194 +msgid "Restore and delete new files" msgstr "" -#: ../../gnome/app.py:207 ../../gnome/app.py:897 ../../gnome/app.py:1147 -#: ../../kde4/app.py:1042 +#: ../../qt4/app.py:201 #, python-format -msgid "Restore '%s' to ..." -msgstr "" - -#: ../../gnome/app.py:226 ../../kde4/app.py:235 -msgid "Shortcuts" +msgid "" +"Restore selected file or folder.\n" +"If this button is grayed out this is most likely because \"%(now)s\" is " +"selected in left hand snapshots list." msgstr "" -#: ../../gnome/app.py:249 -msgid "Name" -msgstr "ชื่อ" - -#: ../../gnome/app.py:260 -msgid "Size" -msgstr "ขนาด" - -#: ../../gnome/app.py:267 -msgid "Date" -msgstr "วันที่" - -#: ../../gnome/app.py:286 ../../gnome/app.py:883 -#: ../../gnome/snapshotsdialog.py:116 ../../kde4/app.py:171 -#: ../../kde4/app.py:221 ../../kde4/snapshotsdialog.py:91 -#: ../../gnome/mainwindow.glade:366 ../../gnome/mainwindow.glade:368 -#: ../../gnome/snapshotsdialog.glade:8 +#: ../../qt4/app.py:206 ../../qt4/logviewdialog.py:67 +#: ../../qt4/qt4tools.py:160 ../../qt4/snapshotsdialog.py:96 msgid "Snapshots" msgstr "" -#: ../../gnome/app.py:348 ../../kde4/app.py:362 -msgid "" -"Can't find snapshots folder.\n" -"If it is on a removable drive please plug it and then press OK" +#: ../../qt4/app.py:213 +msgid "Snapshot" msgstr "" -#: ../../gnome/app.py:611 ../../kde4/app.py:590 -msgid "Done, no backup needed" -msgstr "ทำเสร็จ, ไม่จำเป็นต้องสำรอง" - -#: ../../gnome/app.py:619 ../../kde4/app.py:598 -msgid "Working:" +#: ../../qt4/app.py:224 +msgid "View" msgstr "" -#: ../../gnome/app.py:623 ../../kde4/app.py:602 -msgid "Error:" +#: ../../qt4/app.py:277 +msgid "Shortcuts" msgstr "" -#: ../../gnome/app.py:636 ../../kde4/app.py:649 -msgid "Global" +#: ../../qt4/app.py:295 +msgid "" +"This folder doesn't exist\n" +"in the current selected snapshot!" msgstr "" -#: ../../gnome/app.py:637 ../../kde4/app.py:650 -msgid "Root" +#: ../../qt4/app.py:359 +msgid "Add to Include" msgstr "" -#: ../../gnome/app.py:638 ../../kde4/app.py:651 -msgid "Home" +#: ../../qt4/app.py:360 +msgid "Add to Exclude" msgstr "" -#: ../../gnome/app.py:662 -msgid "Bookmarks" +#: ../../qt4/app.py:416 +#, python-format +msgid "" +"%(appName)s is not configured. Would you like to restore a previous " +"configuration?" msgstr "" -#: ../../gnome/app.py:675 ../../kde4/app.py:662 -msgid "Backup folders" +#: ../../qt4/app.py:440 +msgid "" +"Can't find snapshots folder.\n" +"If it is on a removable drive please plug it and then press OK" msgstr "" -#: ../../gnome/app.py:701 ../../kde4/app.py:734 -msgid "Today" -msgstr "วันนี้" - -#: ../../gnome/app.py:705 ../../kde4/app.py:738 -msgid "Yesterday" -msgstr "เมื่อวาน" - -#: ../../gnome/app.py:709 ../../kde4/app.py:742 -msgid "This week" -msgstr "สัดาห์นี้" - -#: ../../gnome/app.py:713 ../../kde4/app.py:746 -msgid "Last week" -msgstr "สัปดาห์ที่แล้ว" - -#: ../../gnome/app.py:764 ../../kde4/app.py:398 +#: ../../qt4/app.py:473 msgid "" "If you close this window Back In Time will not be able to shutdown your " "system when the snapshot has finished.\n" "Do you really want to close?" msgstr "" -#: ../../gnome/app.py:881 ../../gnome/snapshotsdialog.py:238 -msgid "Open" -msgstr "เปิด" - -#: ../../gnome/app.py:1056 ../../kde4/app.py:90 ../../kde4/app.py:805 -#: ../../gnome/mainwindow.glade:73 ../../gnome/mainwindow.glade:75 -msgid "Snapshot Name" +#: ../../qt4/app.py:667 ../../qt4/app.py:703 +msgid "Working:" msgstr "" -#: ../../gnome/app.py:1075 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" -msgstr "" +#: ../../qt4/app.py:695 +msgid "Done, no backup needed" +msgstr "ทำเสร็จ, ไม่จำเป็นต้องสำรอง" -#: ../../gnome/app.py:1123 ../../kde4/app.py:1010 -#, python-format -msgid "Snapshot: %s" +#: ../../qt4/app.py:707 +msgid "Error:" msgstr "" -#: ../../gnome/app.py:1124 ../../kde4/app.py:1011 -#, python-format -msgid "View the snapshot made at %s" +#: ../../qt4/app.py:726 ../../qt4/qt4systrayicon.py:153 +msgid "Sent:" msgstr "" -#: ../../gnome/app.py:1126 ../../kde4/app.py:1013 -msgid "View the current disk content" +#: ../../qt4/app.py:727 ../../qt4/qt4systrayicon.py:154 +msgid "Speed:" msgstr "" -#: ../../gnome/logviewdialog.py:106 ../../gnome/settingsdialog.py:414 -#: ../../kde4/logviewdialog.py:83 ../../kde4/settingsdialog.py:590 -msgid "All" +#: ../../qt4/app.py:728 ../../qt4/qt4systrayicon.py:155 +msgid "ETA:" msgstr "" -#: ../../gnome/logviewdialog.py:107 ../../gnome/settingsdialog.py:412 -#: ../../kde4/logviewdialog.py:84 ../../kde4/settingsdialog.py:588 -msgid "Errors" +#: ../../qt4/app.py:777 +msgid "Global" msgstr "" -#: ../../gnome/logviewdialog.py:112 ../../kde4/logviewdialog.py:89 -msgid "Changes" +#: ../../qt4/app.py:778 +msgid "Root" msgstr "" -#: ../../gnome/logviewdialog.py:115 ../../kde4/logviewdialog.py:92 -msgid "Informations" +#: ../../qt4/app.py:779 +msgid "Home" msgstr "" -#: ../../gnome/settingsdialog.py:235 ../../kde4/settingsdialog.py:387 -msgid "Include files and folders" +#: ../../qt4/app.py:794 +msgid "Backup folders" msgstr "" -#: ../../gnome/settingsdialog.py:264 -msgid "Exclude patterns, files or folders" +#: ../../qt4/app.py:849 +msgid "This is NOT a snapshot but a live view of your local files" msgstr "" -#: ../../gnome/settingsdialog.py:411 ../../kde4/settingsdialog.py:587 -msgid "None" +#: ../../qt4/app.py:860 ../../qt4/app.py:1476 +#, python-format +msgid "Last check %s" msgstr "" -#: ../../gnome/settingsdialog.py:413 ../../kde4/settingsdialog.py:589 -msgid "Changes & Errors" +#: ../../qt4/app.py:928 +#, python-format +msgid "" +"Are you sure you want to remove the snapshot:\n" +"%s" msgstr "" -#: ../../gnome/settingsdialog.py:458 -msgid "Snapshots folder" +#: ../../qt4/app.py:1004 +#, python-format +msgid "" +"Backup local files before overwriting or\n" +"removing with trailing '%(suffix)s'." msgstr "" -#: ../../gnome/settingsdialog.py:466 ../../kde4/settingsdialog.py:1314 -msgid "Are you sure you want to change snapshots folder ?" +#: ../../qt4/app.py:1010 +msgid "" +"Are you sure you want to remove all newer files in your original folder?" msgstr "" -#: ../../gnome/settingsdialog.py:901 ../../kde4/settingsdialog.py:914 +#: ../../qt4/app.py:1014 msgid "" -"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " -"*/3 for periodic backups every 3 hours" +"WARNING: deleting files in filesystem root could break your whole system!!!" msgstr "" -#: ../../gnome/settingsdialog.py:1141 ../../kde4/settingsdialog.py:653 -msgid "New profile" +#: ../../qt4/app.py:1016 +msgid "Files to be restored:" msgstr "" -#: ../../gnome/settingsdialog.py:1155 ../../kde4/settingsdialog.py:669 -msgid "Rename profile" +#: ../../qt4/app.py:1031 +msgid "Do you really want to restore this files(s):" msgstr "" -#: ../../gnome/settingsdialog.py:1167 ../../kde4/settingsdialog.py:683 +#: ../../qt4/app.py:1226 #, python-format -msgid "Are you sure you want to delete the profile \"%s\" ?" +msgid "Snapshot: %s" msgstr "" -#: ../../gnome/settingsdialog.py:1173 ../../kde4/settingsdialog.py:1292 -msgid "Include folder" +#: ../../qt4/app.py:1227 +#, python-format +msgid "View the snapshot made at %s" msgstr "" -#: ../../gnome/settingsdialog.py:1193 ../../kde4/settingsdialog.py:1278 -msgid "Include file" +#: ../../qt4/app.py:1229 +msgid "View the current disk content" msgstr "" -#: ../../gnome/settingsdialog.py:1235 ../../kde4/settingsdialog.py:1241 -msgid "Exclude pattern" +#: ../../qt4/app.py:1268 +#, python-format +msgid "Restore '%s'" msgstr "" -#: ../../gnome/settingsdialog.py:1240 ../../kde4/settingsdialog.py:1251 -msgid "Exclude patterns can't contain ':' char !" +#: ../../qt4/app.py:1269 +#, python-format +msgid "Restore '%s' to ..." msgstr "" -#: ../../gnome/settingsdialog.py:1246 ../../kde4/settingsdialog.py:1257 -msgid "Exclude file" +#: ../../qt4/app.py:1270 +#, python-format +msgid "Restore '%s' and delete new files" msgstr "" -#: ../../gnome/settingsdialog.py:1257 ../../kde4/settingsdialog.py:1261 -msgid "Exclude folder" +#: ../../qt4/app.py:1368 ../../qt4/app.py:1385 +msgid "Authors" msgstr "" -#: ../../gnome/snapshotsdialog.py:240 -msgid "Jump to" +#: ../../qt4/app.py:1369 ../../qt4/app.py:1388 +msgid "Translations" msgstr "" -#: ../../gnome/snapshotsdialog.py:248 ../../kde4/snapshotsdialog.py:164 -msgid "Diff" +#: ../../qt4/app.py:1370 ../../qt4/app.py:1391 +msgid "License" msgstr "" -#: ../../gnome/snapshotsdialog.py:277 ../../kde4/snapshotsdialog.py:339 -msgid "You can't compare a snapshot to itself" +#: ../../qt4/logviewdialog.py:49 +msgid "Last Log View" msgstr "" -#: ../../gnome/snapshotsdialog.py:284 ../../kde4/snapshotsdialog.py:346 -#, python-format -msgid "Command not found: %s" +#: ../../qt4/logviewdialog.py:51 +msgid "Snapshot Log View" msgstr "" -#: ../../gnome/snapshotsdialog.py:307 ../../kde4/snapshotsdialog.py:367 -#, python-format -msgid "" -"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" +#: ../../qt4/logviewdialog.py:59 ../../qt4/settingsdialog.py:59 +#: ../../qt4/settingsdialog.py:274 ../../qt4/settingsdialog.py:1899 +msgid "Profile:" msgstr "" -#: ../../gnome/snapshotsdialog.py:310 ../../kde4/snapshotsdialog.py:370 -#, python-format -msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +#: ../../qt4/logviewdialog.py:81 +msgid "Filter:" msgstr "" -#: ../../gnome/snapshotsdialog.py:312 ../../kde4/snapshotsdialog.py:372 -msgid "WARNING: This can not be revoked!" +#: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 +msgid "All" msgstr "" -#: ../../gnome/snapshotsdialog.py:317 ../../kde4/snapshotsdialog.py:377 -#, python-format -msgid "Exclude \"%s\" from future snapshots?" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 +#: ../../qt4/settingsdialog.py:657 +msgid "Errors" msgstr "" -#: ../../kde4/app.py:86 ../../gnome/mainwindow.glade:58 -#: ../../gnome/mainwindow.glade:60 -msgid "Refresh snapshots list" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 +msgid "Changes" msgstr "" -#: ../../kde4/app.py:94 ../../gnome/mainwindow.glade:88 -#: ../../gnome/mainwindow.glade:90 -msgid "Remove Snapshot" +#: ../../qt4/logviewdialog.py:92 +msgid "Informations" msgstr "" -#: ../../kde4/app.py:98 ../../gnome/mainwindow.glade:105 -msgid "View Snapshot Log" +#: ../../qt4/logviewdialog.py:101 +msgid "[E] Error, [I] Information, [C] Change" msgstr "" -#: ../../kde4/app.py:102 ../../gnome/mainwindow.glade:121 -msgid "View Last Log" +#: ../../qt4/logviewdialog.py:104 +msgid "decode paths" msgstr "" -#: ../../kde4/app.py:108 ../../kde4/settingsdialog.py:69 -#: ../../gnome/mainwindow.glade:144 ../../gnome/mainwindow.glade:146 -#: ../../gnome/settingsdialog.glade:7 -msgid "Settings" -msgstr "การตั้งค่า" - -#: ../../kde4/app.py:124 ../../gnome/mainwindow.glade:169 -msgid "Shutdown system after snapshot has finished." +#: ../../qt4/messagebox.py:56 +msgid "Error" msgstr "" -#: ../../kde4/app.py:131 ../../gnome/mainwindow.glade:184 -#: ../../gnome/mainwindow.glade:186 -msgid "Exit" -msgstr "ออก" - -#: ../../kde4/app.py:186 ../../gnome/mainwindow.glade:289 -msgid "Up" -msgstr "ขึ้น" - -#: ../../kde4/app.py:199 ../../gnome/mainwindow.glade:325 -msgid "Show hidden files" -msgstr "แสดงแฟ้มที่ซ่อน" - -#: ../../kde4/app.py:244 -msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +#: ../../qt4/messagebox.py:62 ../../qt4/messagebox.py:68 +msgid "Question" msgstr "" -#: ../../kde4/app.py:839 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +#: ../../qt4/qt4systrayicon.py:69 +msgid "Start BackInTime" msgstr "" -#: ../../kde4/app.py:1140 ../../kde4/kde4systrayicon.py:117 +#: ../../qt4/qt4systrayicon.py:124 msgid "Working..." msgstr "" -#: ../../kde4/logviewdialog.py:55 -msgid "Error Log View" -msgstr "" +#: ../../qt4/qt4tools.py:178 +msgid "Today" +msgstr "วันนี้" -#: ../../kde4/logviewdialog.py:65 ../../kde4/settingsdialog.py:79 -#: ../../kde4/settingsdialog.py:293 ../../gnome/logviewdialog.glade:73 -#: ../../gnome/settingsdialog.glade:72 -msgid "Profile:" +#: ../../qt4/qt4tools.py:183 +msgid "Yesterday" +msgstr "เมื่อวาน" + +#: ../../qt4/qt4tools.py:188 +msgid "This week" +msgstr "สัดาห์นี้" + +#: ../../qt4/qt4tools.py:193 +msgid "Last week" +msgstr "สัปดาห์ที่แล้ว" + +#: ../../qt4/restoredialog.py:75 +msgid "Show full Log" msgstr "" -#: ../../kde4/logviewdialog.py:77 ../../gnome/logviewdialog.glade:110 -msgid "Filter:" +#: ../../qt4/settingsdialog.py:68 +msgid "Edit" msgstr "" -#: ../../kde4/logviewdialog.py:100 ../../gnome/logviewdialog.glade:169 -msgid "[E] Error, [I] Information, [C] Change" +#: ../../qt4/settingsdialog.py:73 +msgid "Modify for Full System Backup" msgstr "" -#: ../../kde4/logviewdialog.py:103 ../../gnome/logviewdialog.glade:195 -msgid "decode paths" +#: ../../qt4/settingsdialog.py:77 ../../qt4/settingsdialog.py:451 +msgid "Add" msgstr "" -#: ../../kde4/settingsdialog.py:88 -msgid "Edit" +#: ../../qt4/settingsdialog.py:81 ../../qt4/settingsdialog.py:408 +#: ../../qt4/settingsdialog.py:467 +msgid "Remove" msgstr "" -#: ../../kde4/settingsdialog.py:106 ../../gnome/settingsdialog.glade:1207 +#: ../../qt4/settingsdialog.py:96 msgid "General" msgstr "" -#: ../../kde4/settingsdialog.py:114 ../../gnome/settingsdialog.glade:199 +#: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "" -#: ../../kde4/settingsdialog.py:127 ../../kde4/settingsdialog.py:1311 +#: ../../qt4/settingsdialog.py:119 +#, python-format +msgid "" +"Warning: %(app)s uses EncFS for encryption. A recent security audit " +"revealed several possible attack vectors for this. Please take a look at 'A " +"NOTE ON SECURITY' in 'man backintime'." +msgstr "" + +#: ../../qt4/settingsdialog.py:129 ../../qt4/settingsdialog.py:1568 msgid "Where to save snapshots" msgstr "" -#: ../../kde4/settingsdialog.py:146 +#: ../../qt4/settingsdialog.py:145 +msgid "Folder" +msgstr "" + +#: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" -#: ../../kde4/settingsdialog.py:158 ../../kde4/settingsdialog.py:283 -#: ../../gnome/settingsdialog.glade:323 ../../gnome/settingsdialog.glade:583 -#: ../../gnome/settingsdialog.glade:874 +#: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "" -#: ../../kde4/settingsdialog.py:163 ../../gnome/settingsdialog.glade:350 -#: ../../gnome/settingsdialog.glade:610 +#: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "" -#: ../../kde4/settingsdialog.py:168 ../../kde4/settingsdialog.py:288 -#: ../../gnome/settingsdialog.glade:377 ../../gnome/settingsdialog.glade:637 -#: ../../gnome/settingsdialog.glade:902 +#: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "" -#: ../../kde4/settingsdialog.py:173 ../../gnome/settingsdialog.glade:416 +#: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" -#: ../../kde4/settingsdialog.py:178 ../../gnome/settingsdialog.glade:459 +#: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" -#: ../../kde4/settingsdialog.py:184 +#: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "" -#: ../../kde4/settingsdialog.py:228 ../../kde4/settingsdialog.py:237 -#: ../../kde4/settingsdialog.py:243 ../../gnome/settingsdialog.glade:703 -#: ../../gnome/settingsdialog.glade:743 +#: ../../qt4/settingsdialog.py:201 +msgid "Key File" +msgstr "" + +#: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 +#: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "" -#: ../../kde4/settingsdialog.py:249 ../../gnome/settingsdialog.glade:775 +#: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" -#: ../../kde4/settingsdialog.py:252 ../../gnome/settingsdialog.glade:792 +#: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" -#: ../../kde4/settingsdialog.py:264 ../../gnome/settingsdialog.glade:968 +#: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "" -#: ../../kde4/settingsdialog.py:276 ../../gnome/settingsdialog.glade:848 -msgid "Auto Host / User / Profile Id" +#: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 +msgid "Full snapshot path: " msgstr "" -#: ../../kde4/settingsdialog.py:301 +#: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "" -#: ../../kde4/settingsdialog.py:311 ../../gnome/settingsdialog.glade:1092 +#: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "" -#: ../../kde4/settingsdialog.py:322 ../../gnome/settingsdialog.glade:1079 +#: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "" -#: ../../kde4/settingsdialog.py:333 ../../gnome/settingsdialog.glade:1066 +#: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "" -#: ../../kde4/settingsdialog.py:344 ../../gnome/settingsdialog.glade:1053 +#: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "" -#: ../../kde4/settingsdialog.py:353 ../../gnome/settingsdialog.glade:1014 +#: ../../qt4/settingsdialog.py:339 msgid "" -"Run Back In Time periodically with anacron. This is useful if the computer " -"is not running regular." +"Run Back In Time repeatedly. This is useful if the computer is not running " +"regular." msgstr "" -#: ../../kde4/settingsdialog.py:357 ../../gnome/settingsdialog.glade:1040 -msgid "Frequency in days:" +#: ../../qt4/settingsdialog.py:344 +msgid "Every:" msgstr "" -#: ../../kde4/settingsdialog.py:368 ../../gnome/settingsdialog.glade:1026 +#: ../../qt4/settingsdialog.py:362 msgid "" "Run Back In Time as soon as the drive is connected (only once every X " "days).\n" "You will be prompted for your sudo password." msgstr "" -#: ../../kde4/settingsdialog.py:379 ../../gnome/settingsdialog.glade:1310 +#: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "" -#: ../../kde4/settingsdialog.py:403 ../../kde4/settingsdialog.py:445 -#: ../../gnome/settingsdialog.glade:1411 +#: ../../qt4/settingsdialog.py:381 +msgid "Include files and folders" +msgstr "" + +#: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "" -#: ../../kde4/settingsdialog.py:408 ../../kde4/settingsdialog.py:450 -#: ../../gnome/settingsdialog.glade:1427 +#: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "" -#: ../../kde4/settingsdialog.py:418 ../../gnome/settingsdialog.glade:1474 +#: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "" -#: ../../kde4/settingsdialog.py:421 ../../gnome/settingsdialog.glade:1328 +#: ../../qt4/settingsdialog.py:417 msgid "" "Warning: Wildcards ('foo*', '[fF]oo', 'fo?') will be ignored with " "mode 'SSH encrypted'.\n" "Only separate asterisk are allowed ('foo/*', 'foo/**/bar')" msgstr "" -#: ../../kde4/settingsdialog.py:430 +#: ../../qt4/settingsdialog.py:425 +msgid "Exclude patterns, files or folders" +msgstr "" + +#: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "" -#: ../../kde4/settingsdialog.py:460 ../../gnome/settingsdialog.glade:1905 +#: ../../qt4/settingsdialog.py:463 +msgid "Add default" +msgstr "" + +#: ../../qt4/settingsdialog.py:474 +msgid "Exclude files bigger than: " +msgstr "" + +#: ../../qt4/settingsdialog.py:475 +#, python-format +msgid "" +"Exclude files bigger than value in %(prefix)s.\n" +"With 'Full rsync mode' disabled this will only affect new files\n" +"because for rsync this is a transfer option, not an exclude option.\n" +"So big files that has been backed up before will remain in snapshots\n" +"even if they had changed." +msgstr "" + +#: ../../qt4/settingsdialog.py:493 msgid "Auto-remove" msgstr "" -#: ../../kde4/settingsdialog.py:464 ../../gnome/settingsdialog.glade:1608 +#: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "" -#: ../../kde4/settingsdialog.py:478 ../../gnome/settingsdialog.glade:1624 +#: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "" -#: ../../kde4/settingsdialog.py:490 ../../gnome/settingsdialog.glade:1642 +#: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" -#: ../../kde4/settingsdialog.py:514 ../../gnome/settingsdialog.glade:1697 +#: ../../qt4/settingsdialog.py:551 +msgid "Run in background on remote Host." +msgstr "" + +#: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "" -#: ../../kde4/settingsdialog.py:517 ../../kde4/settingsdialog.py:522 -#: ../../gnome/settingsdialog.glade:1705 ../../gnome/settingsdialog.glade:1729 +#: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "" -#: ../../kde4/settingsdialog.py:519 ../../gnome/settingsdialog.glade:1717 +#: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "" -#: ../../kde4/settingsdialog.py:524 ../../gnome/settingsdialog.glade:1743 +#: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "" -#: ../../kde4/settingsdialog.py:527 +#: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "" -#: ../../kde4/settingsdialog.py:529 ../../gnome/settingsdialog.glade:1769 +#: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "" -#: ../../kde4/settingsdialog.py:532 ../../gnome/settingsdialog.glade:1781 +#: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "" -#: ../../kde4/settingsdialog.py:534 ../../gnome/settingsdialog.glade:1795 +#: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "" -#: ../../kde4/settingsdialog.py:537 ../../gnome/settingsdialog.glade:1496 +#: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "" -#: ../../kde4/settingsdialog.py:546 ../../gnome/settingsdialog.glade:2104 +#: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "" -#: ../../kde4/settingsdialog.py:549 ../../gnome/settingsdialog.glade:1920 +#: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "" -#: ../../kde4/settingsdialog.py:552 ../../gnome/settingsdialog.glade:1937 +#: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "" -#: ../../kde4/settingsdialog.py:555 +#: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" msgstr "" -#: ../../kde4/settingsdialog.py:558 ../../gnome/settingsdialog.glade:1955 -msgid "Backup files on restore" +#: ../../qt4/settingsdialog.py:611 +msgid "Run only one snapshot at a time" +msgstr "" + +#: ../../qt4/settingsdialog.py:612 +msgid "" +"Other snapshots will be blocked until the current snapshot is done.\n" +"This is a global option. So it will effect all profiles for this user.\n" +"But you need to activate this for all other users, too." +msgstr "" + +#: ../../qt4/settingsdialog.py:617 +msgid "Backup replaced files on restore" +msgstr "" + +#: ../../qt4/settingsdialog.py:618 +#, python-format +msgid "" +"Newer versions of files will be renamed with trailing '%(suffix)s' before " +"restoring.\n" +"If you don't need them anymore you can remove them with '%(cmd)s'" msgstr "" -#: ../../kde4/settingsdialog.py:561 ../../gnome/settingsdialog.glade:1972 +#: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "" -#: ../../kde4/settingsdialog.py:564 ../../gnome/settingsdialog.glade:1989 +#: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "" -#: ../../kde4/settingsdialog.py:567 ../../gnome/settingsdialog.glade:2006 +#: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "" -#: ../../kde4/settingsdialog.py:568 ../../gnome/settingsdialog.glade:2032 +#: ../../qt4/settingsdialog.py:634 msgid "" -"- snapshots are no read-only\n" -"- destination file-system must support all linux attributes (dates, rights, " +"- snapshots are not read-only\n" +"- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" -#: ../../kde4/settingsdialog.py:575 ../../gnome/settingsdialog.glade:2045 +#: ../../qt4/settingsdialog.py:641 +msgid "Take a new snapshot regardless of there were changes or not." +msgstr "" + +#: ../../qt4/settingsdialog.py:644 msgid "Check for changes (don't take a new snapshot if nothing changed)" msgstr "" -#: ../../kde4/settingsdialog.py:582 +#: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "" -#: ../../kde4/settingsdialog.py:597 ../../gnome/settingsdialog.glade:2366 -msgid "Expert Options" +#: ../../qt4/settingsdialog.py:656 +msgid "None" msgstr "" -#: ../../kde4/settingsdialog.py:600 +#: ../../qt4/settingsdialog.py:658 +msgid "Changes & Errors" +msgstr "" + +#: ../../qt4/settingsdialog.py:674 msgid "Change these options only if you really know what you are doing !" msgstr "" -#: ../../kde4/settingsdialog.py:608 ../../gnome/settingsdialog.glade:2133 -msgid "Run 'nice' as cron job (default: enabled)" +#: ../../qt4/settingsdialog.py:678 +msgid "Run 'nice':" +msgstr "" + +#: ../../qt4/settingsdialog.py:684 ../../qt4/settingsdialog.py:696 +msgid "as cron job" +msgstr "" + +#: ../../qt4/settingsdialog.py:687 ../../qt4/settingsdialog.py:702 +#: ../../qt4/settingsdialog.py:716 +msgid "on remote host" msgstr "" -#: ../../kde4/settingsdialog.py:611 ../../gnome/settingsdialog.glade:2150 -msgid "Run 'ionice' as cron job (default: enabled)" +#: ../../qt4/settingsdialog.py:690 +msgid "Run 'ionice':" msgstr "" -#: ../../kde4/settingsdialog.py:614 ../../gnome/settingsdialog.glade:2167 -msgid "Run 'ionice' when taking a manual snapshot (default: disabled)" +#: ../../qt4/settingsdialog.py:699 +msgid "when taking a manual snapshot" msgstr "" -#: ../../kde4/settingsdialog.py:617 ../../gnome/settingsdialog.glade:2184 -msgid "Run 'nice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:706 +msgid "Run 'rsync' with 'nocache':" msgstr "" -#: ../../kde4/settingsdialog.py:620 ../../gnome/settingsdialog.glade:2201 -msgid "Run 'ionice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:712 +msgid "on local machine" msgstr "" -#: ../../kde4/settingsdialog.py:626 ../../gnome/settingsdialog.glade:2224 +#: ../../qt4/settingsdialog.py:719 +msgid "Redirect stdout to /dev/null in cronjobs." +msgstr "" + +#: ../../qt4/settingsdialog.py:725 +msgid "Redirect stderr to /dev/null in cronjobs." +msgstr "" + +#: ../../qt4/settingsdialog.py:734 msgid "Limit rsync bandwidth usage: " msgstr "" -#: ../../kde4/settingsdialog.py:629 ../../gnome/settingsdialog.glade:2259 +#: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" -#: ../../kde4/settingsdialog.py:634 ../../gnome/settingsdialog.glade:2280 +#: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "" -#: ../../kde4/settingsdialog.py:637 ../../gnome/settingsdialog.glade:2297 +#: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "" -#: ../../kde4/settingsdialog.py:640 ../../gnome/settingsdialog.glade:2314 +#: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute links)" msgstr "" -#: ../../kde4/settingsdialog.py:643 ../../gnome/settingsdialog.glade:2331 -msgid "Copy links (dereference symbolic links)" +#: ../../qt4/settingsdialog.py:834 +msgid "Paste additional options to rsync" msgstr "" -#: ../../kde4/snapshotsdialog.py:46 ../../kde4/snapshotsdialog.py:173 -#: ../../gnome/snapshotsdialog.glade:385 -msgid "Diff Options" +#: ../../qt4/settingsdialog.py:837 +msgid "" +"Options must be quoted e.g. --exclude-from=\"/path/to/my exclude file\"." msgstr "" -#: ../../kde4/snapshotsdialog.py:56 ../../gnome/snapshotsdialog.glade:314 -msgid "Command:" +#: ../../qt4/settingsdialog.py:847 +msgid "Add prefix to SSH commands" msgstr "" -#: ../../kde4/snapshotsdialog.py:60 ../../gnome/snapshotsdialog.glade:322 -msgid "Parameters:" +#: ../../qt4/settingsdialog.py:850 +#, python-format +msgid "" +"Prefix to run before every command on remote host.\n" +"Variables need to be escaped with \\$FOO.\n" +"This doesn't touch rsync. So to add a prefix\n" +"for rsync use \"%(cb_rsync_options)s\" with\n" +"%(rsync_options_value)s\n" +"\n" +"%(default)s: %(def_value)s" msgstr "" -#: ../../kde4/snapshotsdialog.py:64 ../../gnome/snapshotsdialog.glade:334 -msgid "Use %1 and %2 for path parameters" +#: ../../qt4/settingsdialog.py:858 ../../qt4/settingsdialog.py:1691 +msgid "default" msgstr "" -#: ../../kde4/snapshotsdialog.py:123 ../../gnome/snapshotsdialog.glade:184 -#: ../../gnome/snapshotsdialog.glade:186 -msgid "Delete" +#: ../../qt4/settingsdialog.py:875 +msgid "Restore Config" msgstr "" -#: ../../kde4/snapshotsdialog.py:128 ../../gnome/snapshotsdialog.glade:199 -#: ../../gnome/snapshotsdialog.glade:201 -msgid "Select All" +#: ../../qt4/settingsdialog.py:891 +msgid "" +"Full system backup can only create a snapshot to be restored to the same " +"physical disk(s) with the same disk partitioning as from the source; " +"restoring to new physical disks or the same disks with different " +"partitioning will yield a potentially broken and unusable system.\n" +"\n" +"Full system backup will override some settings that may have been " +"customized. Continue?" msgstr "" -#: ../../kde4/snapshotsdialog.py:132 ../../gnome/snapshotsdialog.glade:88 -msgid "List only different snapshots" +#: ../../qt4/settingsdialog.py:922 +msgid "New profile" msgstr "" -#: ../../kde4/snapshotsdialog.py:139 ../../gnome/snapshotsdialog.glade:110 -msgid "List only equal snapshots to: " +#: ../../qt4/settingsdialog.py:938 +msgid "Rename profile" msgstr "" -#: ../../kde4/snapshotsdialog.py:149 ../../gnome/snapshotsdialog.glade:146 -msgid "Deep check (more accurate, but slow)" +#: ../../qt4/settingsdialog.py:952 +#, python-format +msgid "Are you sure you want to delete the profile \"%s\" ?" msgstr "" -#: ../../kde4/snapshotsdialog.py:174 -msgid "Go To" -msgstr "ไปที่" +#: ../../qt4/settingsdialog.py:1191 +msgid "" +"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " +"*/3 for periodic backups every 3 hours" +msgstr "" -#: ../../gnome/logviewdialog.glade:9 -msgid "Log View" +#: ../../qt4/settingsdialog.py:1489 +msgid "Exclude pattern" msgstr "" -#: ../../gnome/logviewdialog.glade:179 -msgid "scroll down automatic" +#: ../../qt4/settingsdialog.py:1502 +msgid "Exclude file" msgstr "" -#: ../../gnome/mainwindow.glade:7 -msgid "Back In Time" +#: ../../qt4/settingsdialog.py:1506 +msgid "Exclude folder" msgstr "" -#: ../../gnome/mainwindow.glade:45 -msgid "Backup Now" -msgstr "สำรองเดี๋ยวนี้" +#: ../../qt4/settingsdialog.py:1525 +msgid "Include file" +msgstr "" -#: ../../gnome/mainwindow.glade:171 -msgid "Shutdown" +#: ../../qt4/settingsdialog.py:1533 ../../qt4/settingsdialog.py:1553 +#, python-format +msgid "" +"\"%s\" is a symlink. The linked target will not be backed up until you " +"include it, too.\n" +"Would you like to include the symlinks target instead?" msgstr "" -#: ../../gnome/mainwindow.glade:287 -msgid "Parent folder" +#: ../../qt4/settingsdialog.py:1545 +msgid "Include folder" +msgstr "" + +#: ../../qt4/settingsdialog.py:1572 +msgid "Are you sure you want to change snapshots folder ?" msgstr "" -#: ../../gnome/mainwindow.glade:327 -msgid "Hidden files" +#: ../../qt4/settingsdialog.py:1688 +msgid "enabled" msgstr "" -#: ../../gnome/mainwindow.glade:451 +#: ../../qt4/settingsdialog.py:1690 +msgid "disabled" +msgstr "" + +#: ../../qt4/settingsdialog.py:1715 +msgid "Restore Settings" +msgstr "" + +#: ../../qt4/settingsdialog.py:1732 +msgid " and add your user to group 'fuse'" +msgstr "" + +#: ../../qt4/settingsdialog.py:1736 +#, python-format msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +"Please navigate to the snapshot from which you want to restore %(appName)s's " +"configuration. The path may look like: \n" +"%(samplePath)s\n" +"\n" +"If your snapshots are on a remote drive or if they are encrypted you need to " +"manually mount them first. If you use Mode SSH you also may need to set up " +"public key login to the remote host%(addFuse)s.\n" +"Take a look at 'man backintime'." msgstr "" -#: ../../gnome/settingsdialog.glade:287 -msgid "Where to save snapshots" +#: ../../qt4/settingsdialog.py:1794 ../../qt4/settingsdialog.py:1854 +msgid "No config found" msgstr "" -#: ../../gnome/settingsdialog.glade:483 -msgid "Private key:" +#: ../../qt4/snapshotsdialog.py:49 ../../qt4/snapshotsdialog.py:173 +msgid "Diff Options" msgstr "" -#: ../../gnome/settingsdialog.glade:534 -msgid "Advanced SSH Settings" +#: ../../qt4/snapshotsdialog.py:56 +msgid "Command:" msgstr "" -#: ../../gnome/settingsdialog.glade:552 -msgid "SSH Settings" +#: ../../qt4/snapshotsdialog.py:60 +msgid "Parameters:" msgstr "" -#: ../../gnome/settingsdialog.glade:815 -msgid "Password" +#: ../../qt4/snapshotsdialog.py:64 +msgid "Use %1 and %2 for path parameters" msgstr "" -#: ../../gnome/settingsdialog.glade:930 -msgid "Profile Id:" +#: ../../qt4/snapshotsdialog.py:106 +msgid "List only different snapshots" msgstr "" -#: ../../gnome/settingsdialog.glade:1115 -msgid "" -"hours seperate by comma ( e.g. 8,12,18,23) or */3 for periodic backups every " -"3 hours (cron style)" +#: ../../qt4/snapshotsdialog.py:113 +msgid "List only equal snapshots to: " msgstr "" -#: ../../gnome/settingsdialog.glade:1163 -msgid "Schedule" +#: ../../qt4/snapshotsdialog.py:123 +msgid "Deep check (more accurate, but slow)" msgstr "" -#: ../../gnome/settingsdialog.glade:1363 -msgid "Highly recommended:" +#: ../../qt4/snapshotsdialog.py:144 +msgid "Delete" msgstr "" -#: ../../gnome/settingsdialog.glade:1377 -msgid "label" +#: ../../qt4/snapshotsdialog.py:148 +msgid "Select All" msgstr "" -#: ../../gnome/settingsdialog.glade:1755 -msgid "week(s)" +#: ../../qt4/snapshotsdialog.py:161 +msgid "Diff" msgstr "" -#: ../../gnome/settingsdialog.glade:2069 -msgid "Log level:" +#: ../../qt4/snapshotsdialog.py:172 +msgid "Go To" +msgstr "ไปที่" + +#: ../../qt4/snapshotsdialog.py:326 +msgid "You can't compare a snapshot to itself" +msgstr "" + +#: ../../qt4/snapshotsdialog.py:333 +#, python-format +msgid "Command not found: %s" msgstr "" -#: ../../gnome/settingsdialog.glade:2121 +#: ../../qt4/snapshotsdialog.py:354 +#, python-format msgid "" -"Change these options only if you really know what you are doing !" +"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" msgstr "" -#: ../../gnome/snapshotsdialog.glade:263 -msgid "Diff with" +#: ../../qt4/snapshotsdialog.py:357 +#, python-format +msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" msgstr "" -#: ../../gnome/textinputdialog.glade:7 -msgid "Pattern" +#: ../../qt4/snapshotsdialog.py:359 +msgid "WARNING: This can not be revoked!" msgstr "" -#: ../../gnome/textinputdialog.glade:70 -msgid "Text" +#: ../../qt4/snapshotsdialog.py:374 +#, python-format +msgid "Exclude \"%s\" from future snapshots?" msgstr "" diff -Nru backintime-1.0.36/common/po/tr.po backintime-1.1.12/common/po/tr.po --- backintime-1.0.36/common/po/tr.po 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/po/tr.po 2016-01-11 18:07:58.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2013-11-09 22:34+0100\n" +"POT-Creation-Date: 2015-12-19 00:47+0100\n" "PO-Revision-Date: 2011-01-18 20:19+0000\n" "Last-Translator: Burhan Teoman \n" "Language-Team: Turkish \n" @@ -15,198 +15,230 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2014-08-06 10:20+0000\n" -"X-Generator: Launchpad (build 17147)\n" +"X-Launchpad-Export-Date: 2016-01-11 17:52+0000\n" +"X-Generator: Launchpad (build 17881)\n" -#: ../../common/config.py:72 +#: ../../common/configfile.py:60 +#, python-format +msgid "Failed to save config: %s" +msgstr "" + +#: ../../common/configfile.py:78 +#, python-format +msgid "Failed to load config: %s" +msgstr "" + +#: ../../common/configfile.py:352 ../../common/configfile.py:414 +#, python-format +msgid "Profile \"%s\" already exists !" +msgstr "\"%s\" profili zaten mevcut !" + +#: ../../common/configfile.py:383 +msgid "You can't remove the last profile !" +msgstr "Son profili kaldıramazsınız !" + +#: ../../common/config.py:76 msgid "Disabled" msgstr "Etkisizleştirildi" -#: ../../common/config.py:73 +#: ../../common/config.py:77 msgid "At every boot/reboot" msgstr "Her yeniden başlattığında" -#: ../../common/config.py:74 +#: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Her 5 dakikada bir" -#: ../../common/config.py:75 +#: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Her 10 dakikada bir" -#: ../../common/config.py:76 +#: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "" -#: ../../common/config.py:77 +#: ../../common/config.py:81 msgid "Every hour" msgstr "" -#: ../../common/config.py:78 +#: ../../common/config.py:82 msgid "Every 2 hours" msgstr "" -#: ../../common/config.py:79 +#: ../../common/config.py:83 msgid "Every 4 hours" msgstr "" -#: ../../common/config.py:80 +#: ../../common/config.py:84 msgid "Every 6 hours" msgstr "" -#: ../../common/config.py:81 +#: ../../common/config.py:85 msgid "Every 12 hours" msgstr "" -#: ../../common/config.py:82 +#: ../../common/config.py:86 msgid "Custom Hours" msgstr "" -#: ../../common/config.py:83 +#: ../../common/config.py:87 msgid "Every Day" msgstr "Her gün" -#: ../../common/config.py:84 -msgid "Daily (anacron)" +#: ../../common/config.py:88 +msgid "Repeatedly (anacron)" msgstr "" -#: ../../common/config.py:85 +#: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "" -#: ../../common/config.py:86 +#: ../../common/config.py:90 msgid "Every Week" msgstr "Her Hafta" -#: ../../common/config.py:87 +#: ../../common/config.py:91 msgid "Every Month" msgstr "Her Ay" -#: ../../common/config.py:91 +#: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Gün(ler)" -#: ../../common/config.py:92 +#: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Hafta(lar)" -#: ../../common/config.py:93 +#: ../../common/config.py:97 msgid "Year(s)" msgstr "Yıl(lar)" -#: ../../common/config.py:100 +#: ../../common/config.py:101 +msgid "Hour(s)" +msgstr "" + +#: ../../common/config.py:104 +msgid "Month(s)" +msgstr "" + +#: ../../common/config.py:126 ../../qt4/settingsdialog.py:551 msgid " EXPERIMENTAL!" msgstr "" -#: ../../common/config.py:103 +#: ../../common/config.py:129 msgid "Local" msgstr "" -#: ../../common/config.py:104 +#: ../../common/config.py:130 msgid "SSH" msgstr "" -#: ../../common/config.py:104 ../../common/config.py:106 -#: ../../gnome/settingsdialog.py:475 ../../kde4/settingsdialog.py:1325 +#: ../../common/config.py:130 ../../common/config.py:132 +#: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "" -#: ../../common/config.py:105 +#: ../../common/config.py:131 msgid "Local encrypted" msgstr "" -#: ../../common/config.py:105 ../../common/config.py:106 +#: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "" -#: ../../common/config.py:106 +#: ../../common/config.py:132 msgid "SSH encrypted" msgstr "" -#: ../../common/config.py:112 +#: ../../common/config.py:135 msgid "Default" msgstr "" -#: ../../common/config.py:113 +#: ../../common/config.py:136 msgid "AES128-CTR" msgstr "" -#: ../../common/config.py:114 +#: ../../common/config.py:137 msgid "AES192-CTR" msgstr "" -#: ../../common/config.py:115 +#: ../../common/config.py:138 msgid "AES256-CTR" msgstr "" -#: ../../common/config.py:116 +#: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "" -#: ../../common/config.py:117 +#: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "" -#: ../../common/config.py:118 +#: ../../common/config.py:141 msgid "AES128-CBC" msgstr "" -#: ../../common/config.py:119 +#: ../../common/config.py:142 msgid "3DES-CBC" msgstr "" -#: ../../common/config.py:120 +#: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "" -#: ../../common/config.py:121 +#: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "" -#: ../../common/config.py:122 +#: ../../common/config.py:145 msgid "AES192-CBC" msgstr "" -#: ../../common/config.py:123 +#: ../../common/config.py:146 msgid "AES256-CBC" msgstr "" -#: ../../common/config.py:124 +#: ../../common/config.py:147 msgid "ARCFOUR" msgstr "" -#: ../../common/config.py:129 +#: ../../common/config.py:153 msgid "Main profile" msgstr "Ana profil" -#: ../../common/config.py:256 ../../common/config.py:275 -#: ../../common/config.py:286 ../../common/config.py:291 +#: ../../common/config.py:289 ../../common/config.py:296 +#: ../../common/config.py:307 ../../common/config.py:312 +#: ../../qt4/qt4systrayicon.py:61 #, python-format msgid "Profile: \"%s\"" msgstr "Profil: \"%s\"" -#: ../../common/config.py:256 +#: ../../common/config.py:289 msgid "Snapshots folder is not valid !" msgstr "Anlıkçekim klasörü geçerli değil !" -#: ../../common/config.py:275 +#: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "Yedekleme için en az bir klasör seçmelisiniz !" -#: ../../common/config.py:286 +#: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "Yedekleme klasörünü dahil edemezsiniz !" -#: ../../common/config.py:291 +#: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "Yedekleme alt-klasörünü dahil edemezsiniz !" -#: ../../common/config.py:361 +#: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s bir klasör değil !" -#: ../../common/config.py:376 ../../common/config.py:389 +#: ../../common/config.py:380 +msgid "Host/User/Profile-ID must not be empty!" +msgstr "" + +#: ../../common/config.py:388 ../../common/config.py:420 #, python-format msgid "" "Can't write to: %s\n" @@ -215,59 +247,68 @@ "Yazılamıyor: %s\n" "Yazma izniniz olduğuna emin misiniz ?" -#: ../../common/config.py:1286 +#: ../../common/config.py:400 +#, python-format msgid "" -"Can't find crontab.\n" -"Are you sure cron is installed ?\n" -"If not you should disable all automatic backups." +"Destination filesystem for '%(path)s' is formatted with FAT which doesn't " +"support hard-links. Please use a native Linux filesystem." msgstr "" -"crontab bulunamadı.\n" -"cron'un yüklenmiş olduğundan emin misiniz ?\n" -"Eğer değilseniz tüm otomatik yedeklemeleri etkisiz hale getirmeniz gerekir." -#: ../../common/config.py:1338 +#: ../../common/config.py:405 #, python-format -msgid "Schedule udev doesn't work with mode %s" +msgid "" +"Destination filsystem for '%(path)s' is a SMB mounted share. Please make " +"sure the remote SMB server supports symlinks or activate '%(copyLinks)s' in " +"'%(expertOptions)s'." msgstr "" -#: ../../common/config.py:1342 -#, python-format -msgid "Couldn't find UUID for \"%s\"" +#: ../../common/config.py:408 ../../qt4/settingsdialog.py:815 +msgid "Copy links (dereference symbolic links)" msgstr "" -#: ../../common/config.py:1379 -msgid "Failed to remove udev rules" -msgstr "" +#: ../../common/config.py:409 ../../qt4/settingsdialog.py:669 +msgid "Expert Options" +msgstr "Uzman Seçenekleri" -#: ../../common/config.py:1385 -msgid "Failed to create udev rules" +#: ../../common/config.py:411 +#, python-format +msgid "" +"Destination filesystem for '%(path)s is a sshfs mounted share. sshfs doesn't " +"support hard-links. Please use mode 'SSH' instead." msgstr "" -#: ../../common/config.py:1420 +#: ../../common/config.py:1407 msgid "" -"Can't find anacron.\n" -"Are you sure anacron is installed ?\n" -"If not you should disable daily anacron backups." +"Can't find crontab.\n" +"Are you sure cron is installed ?\n" +"If not you should disable all automatic backups." msgstr "" +"crontab bulunamadı.\n" +"cron'un yüklenmiş olduğundan emin misiniz ?\n" +"Eğer değilseniz tüm otomatik yedeklemeleri etkisiz hale getirmeniz gerekir." -#: ../../common/config.py:1439 -msgid "Please provide your sudo password to install the udev rule." +#: ../../common/config.py:1411 +msgid "Failed to write new crontab." msgstr "" -#: ../../common/config.py:1445 -msgid "Please provide your sudo password to remove unused udev rules." +#: ../../common/config.py:1505 +#, python-format +msgid "" +"Could not install Udev rule for profile %(profile_id)s. DBus Service " +"'%(dbus_interface)s' wasn't available" msgstr "" -#: ../../common/configfile.py:253 ../../common/configfile.py:315 +#: ../../common/config.py:1517 #, python-format -msgid "Profile \"%s\" already exists !" -msgstr "\"%s\" profili zaten mevcut !" +msgid "Schedule udev doesn't work with mode %s" +msgstr "" -#: ../../common/configfile.py:284 -msgid "You can't remove the last profile !" -msgstr "Son profili kaldıramazsınız !" +#: ../../common/config.py:1526 +#, python-format +msgid "Couldn't find UUID for \"%s\"" +msgstr "" -#: ../../common/encfstools.py:95 +#: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" @@ -275,38 +316,38 @@ "%(error)s" msgstr "" -#: ../../common/encfstools.py:105 +#: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "" -#: ../../common/encfstools.py:149 +#: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "" -#: ../../common/encfstools.py:153 +#: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" -#: ../../common/encfstools.py:154 +#: ../../common/encfstools.py:171 msgid "Cancel" msgstr "" -#: ../../common/encfstools.py:157 +#: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "" -#: ../../common/encfstools.py:161 +#: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "" -#: ../../common/encfstools.py:166 +#: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" -#: ../../common/encfstools.py:174 ../../common/sshtools.py:207 +#: ../../common/encfstools.py:196 ../../common/sshtools.py:262 #, python-format msgid "" "%(user)s is not member of group 'fuse'.\n" @@ -314,63 +355,66 @@ "Look at 'man backintime' for further instructions." msgstr "" -#: ../../common/encfstools.py:189 +#: ../../common/encfstools.py:211 msgid "" "encfs version 1.7.2 and before has a bug with option --reverse. Please " "update encfs" msgstr "" -#: ../../common/encfstools.py:453 ../../common/encfstools.py:480 -#: ../../common/snapshots.py:982 ../../common/snapshots.py:1288 -#: ../../kde4/app.py:82 ../../gnome/mainwindow.glade:43 +#: ../../common/encfstools.py:512 ../../common/snapshots.py:1131 +#: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "Anlık durum al" -#: ../../common/mount.py:195 +#: ../../common/mount.py:204 #, python-format msgid "" "Hash collision occurred in hash_id %s. Incrementing global value " "hash_collision and try again." msgstr "" -#: ../../common/mount.py:246 +#: ../../common/mount.py:259 #, python-format msgid "mountpoint %s not empty." msgstr "" -#: ../../common/mount.py:286 +#: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" -#: ../../common/password.py:425 +#: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" -#: ../../common/snapshots.py:171 ../../gnome/app.py:1127 -#: ../../kde4/app.py:1014 +#: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Şimdi" -#: ../../common/snapshots.py:182 ../../gnome/gnometools.py:37 +#: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "HATALARLA!" -#: ../../common/snapshots.py:282 +#: ../../common/snapshots.py:344 msgid "" "### This log has been decoded with automatic search pattern\n" "### If some paths are not decoded you can manually decode them with:\n" msgstr "" -#: ../../common/snapshots.py:465 +#: ../../common/snapshots.py:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "" -#: ../../common/snapshots.py:564 +#: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "" -#: ../../common/snapshots.py:739 +#: ../../common/snapshots.py:752 ../../qt4/app.py:377 ../../qt4/app.py:675 +#: ../../qt4/app.py:692 ../../qt4/qt4systrayicon.py:65 +msgid "Done" +msgstr "Tamamlandı" + +#: ../../common/snapshots.py:860 msgid "" "Back In Time changed its backup format.\n" "\n" @@ -380,7 +424,7 @@ "\n" "Eski yedekleme görüntüleri yeni formata göre taşınabilir. Tamam mı?" -#: ../../common/snapshots.py:749 +#: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" @@ -396,7 +440,7 @@ "musunuz? \n" "Program ikisine ait dosyaları ayıracaktır." -#: ../../common/snapshots.py:752 +#: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" @@ -404,7 +448,7 @@ "Hiçbir profil bulunamadı. Önce profillerin güncellenmesi gerekiyor. Lütfen " "Back In Time'ı yeniden başlatın." -#: ../../common/snapshots.py:803 +#: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" @@ -417,7 +461,7 @@ "cannot continue taking snapshots" msgstr "" -#: ../../common/snapshots.py:812 +#: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" @@ -432,7 +476,7 @@ "Yedek görüntülerini elle taşıyabilirsiniz, \n" "ve bitirdiğinizde devam etmek için Back In Time'ı yeniden başlatın" -#: ../../common/snapshots.py:825 +#: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" @@ -443,7 +487,7 @@ "Back In Time, önceden belirlediğiniz zamanlarda yedek görüntüleri almaya " "devam edecek" -#: ../../common/snapshots.py:830 +#: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" @@ -464,173 +508,184 @@ "Eğer yapmazsanız, Back In Time bir dahaki sefer yeniden başlatıldığında " "tekrar sorulacaktır." -#: ../../common/snapshots.py:839 +#: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "" "Back In Time önceden ayarladığınız zamanlarda yedek görüntüleri almaya devam " "edecek." -#: ../../common/snapshots.py:841 +#: ../../common/snapshots.py:953 msgid "" "Back In Time still cannot continue taking new snapshots.\n" "Restart Back In Time to see the questions again" msgstr "" -#: ../../common/snapshots.py:913 +#: ../../common/snapshots.py:972 +msgid "Deferring backup while on battery" +msgstr "" + +#: ../../common/snapshots.py:1035 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it." msgstr "Anlık durum klasörü bulunamadı." -#: ../../common/snapshots.py:915 +#: ../../common/snapshots.py:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "%s saniye bekliyor." -#: ../../common/snapshots.py:941 +#: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "" -#: ../../common/snapshots.py:950 +#: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "Bitiriyor" -#: ../../common/snapshots.py:1088 +#: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "Dizin oluşturulamadı: %s" -#: ../../common/snapshots.py:1107 +#: ../../common/snapshots.py:1217 msgid "..." msgstr "..." -#: ../../common/snapshots.py:1134 +#: ../../common/snapshots.py:1238 +#, python-format +msgid "Found leftover '%s' which can be continued." +msgstr "" + +#: ../../common/snapshots.py:1250 +#, python-format +msgid "Remove leftover '%s' folder from last run" +msgstr "" + +#: ../../common/snapshots.py:1263 #, python-format msgid "Can't remove folder: %s" msgstr "Klasör kaldırılamıyor: %s" -#: ../../common/snapshots.py:1219 +#: ../../common/snapshots.py:1340 #, python-format msgid "Compare with snapshot %s" msgstr "%s anlık durumu ile karşılaştır" -#: ../../common/snapshots.py:1248 +#: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "Sabit-bağlantılar oluştur" -#: ../../common/snapshots.py:1335 +#: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "" -#: ../../common/snapshots.py:1341 +#: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "... iznini kaydet" -#: ../../common/snapshots.py:1442 +#: ../../common/snapshots.py:1470 +msgid "Save permission over ssh failed. Retry normal method" +msgstr "" + +#: ../../common/snapshots.py:1521 #, python-format msgid "Can't rename %(new_path)s to %(path)s" msgstr "" -#: ../../common/snapshots.py:1562 -msgid "Remove old snapshots" -msgstr "Eski anlık durumları sil" - -#: ../../common/snapshots.py:1586 ../../kde4/settingsdialog.py:501 -#: ../../gnome/settingsdialog.glade:1660 +#: ../../common/snapshots.py:1695 ../../common/snapshots.py:1728 +#: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "Akıllı kaldırma" -#: ../../common/snapshots.py:1591 +#: ../../common/snapshots.py:1704 +msgid "Remove old snapshots" +msgstr "Eski anlık durumları sil" + +#: ../../common/snapshots.py:1733 msgid "Try to keep min free space" msgstr "En az boş alanı korumaya çalış" -#: ../../common/snapshots.py:1621 +#: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" -#: ../../common/sshtools.py:106 +#: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "" -#: ../../common/sshtools.py:113 +#: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "" -#: ../../common/sshtools.py:187 -#, python-format -msgid "" -"Failed to unlock SSH private key:\n" -"Error: %s" -msgstr "" - -#: ../../common/sshtools.py:194 +#: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" -#: ../../common/sshtools.py:199 +#: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" -#: ../../common/sshtools.py:217 +#: ../../common/sshtools.py:278 #, python-format msgid "" "Password-less authentication for %(user)s@%(host)s failed. Look at 'man " "backintime' for further instructions." msgstr "" -#: ../../common/sshtools.py:229 +#: ../../common/sshtools.py:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" -#: ../../common/sshtools.py:254 +#: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" -#: ../../common/sshtools.py:274 +#: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" -#: ../../common/sshtools.py:276 +#: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:278 +#: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:280 +#: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" -#: ../../common/sshtools.py:302 +#: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" -#: ../../common/sshtools.py:325 ../../common/sshtools.py:383 +#: ../../common/sshtools.py:423 ../../common/sshtools.py:553 #, python-format msgid "" "Remote host %(host)s doesn't support '%(command)s':\n" @@ -638,7 +693,7 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:387 +#: ../../common/sshtools.py:556 #, python-format msgid "" "Check commands on host %(host)s returned unknown error:\n" @@ -646,96 +701,149 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:400 +#: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "" -#: ../../gnome/app.py:185 ../../gnome/app.py:594 ../../gnome/app.py:608 -#: ../../kde4/app.py:299 ../../kde4/app.py:570 ../../kde4/app.py:587 -msgid "Done" -msgstr "Tamamlandı" +#: ../../qt4/app.py:81 +msgid "Refresh snapshots list" +msgstr "" + +#: ../../qt4/app.py:85 ../../qt4/app.py:890 +msgid "Snapshot Name" +msgstr "Anlık durum ismi" + +#: ../../qt4/app.py:88 +msgid "Remove Snapshot" +msgstr "Anlık durumu sil" + +#: ../../qt4/app.py:91 +msgid "View Snapshot Log" +msgstr "" + +#: ../../qt4/app.py:94 +msgid "View Last Log" +msgstr "" + +#: ../../qt4/app.py:99 ../../qt4/settingsdialog.py:51 +msgid "Settings" +msgstr "Ayarlar" + +#: ../../qt4/app.py:104 +msgid "Shutdown" +msgstr "" + +#: ../../qt4/app.py:105 +msgid "Shutdown system after snapshot has finished." +msgstr "" -#: ../../gnome/app.py:189 ../../kde4/app.py:143 ../../kde4/app.py:159 -#: ../../gnome/mainwindow.glade:225 +#: ../../qt4/app.py:111 +msgid "Exit" +msgstr "Çıkış" + +#: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 msgid "Help" msgstr "Yardım" -#: ../../gnome/app.py:191 ../../kde4/app.py:146 -#: ../../gnome/mainwindow.glade:223 +#: ../../qt4/app.py:122 +msgid "Config File Help" +msgstr "" + +#: ../../qt4/app.py:125 msgid "Website" msgstr "Web sitesi" -#: ../../gnome/app.py:192 ../../kde4/app.py:148 +#: ../../qt4/app.py:127 ../../qt4/app.py:982 +msgid "Changelog" +msgstr "" + +#: ../../qt4/app.py:129 msgid "FAQ" msgstr "" -#: ../../gnome/app.py:193 ../../kde4/app.py:150 +#: ../../qt4/app.py:131 msgid "Ask a question" msgstr "" -#: ../../gnome/app.py:194 ../../kde4/app.py:152 +#: ../../qt4/app.py:133 msgid "Report a bug" msgstr "" -#: ../../gnome/app.py:196 ../../kde4/app.py:155 +#: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "Hakkında" -#: ../../gnome/app.py:202 ../../gnome/app.py:887 -#: ../../gnome/restoredialog.py:84 ../../gnome/snapshotsdialog.py:83 -#: ../../gnome/snapshotsdialog.py:244 ../../kde4/app.py:206 -#: ../../kde4/app.py:216 ../../kde4/restoredialog.py:68 -#: ../../kde4/snapshotsdialog.py:111 ../../kde4/snapshotsdialog.py:117 -#: ../../gnome/mainwindow.glade:350 ../../gnome/mainwindow.glade:352 -#: ../../gnome/snapshotsdialog.glade:169 ../../gnome/snapshotsdialog.glade:171 +#: ../../qt4/app.py:163 +msgid "Up" +msgstr "Yukarı" + +#: ../../qt4/app.py:174 ../../qt4/settingsdialog.py:1776 +msgid "Show hidden files" +msgstr "Gizli dosyaları göster" + +#: ../../qt4/app.py:184 ../../qt4/app.py:199 ../../qt4/app.py:233 +#: ../../qt4/restoredialog.py:62 ../../qt4/settingsdialog.py:1818 +#: ../../qt4/snapshotsdialog.py:134 ../../qt4/snapshotsdialog.py:139 msgid "Restore" msgstr "Geri Yükle" -#: ../../gnome/app.py:203 ../../gnome/app.py:888 ../../gnome/gnometools.py:67 -#: ../../gnome/snapshotsdialog.py:84 ../../gnome/snapshotsdialog.py:245 -#: ../../kde4/app.py:208 ../../kde4/restoredialog.py:42 -#: ../../kde4/snapshotsdialog.py:113 +#: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 +#: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "" -#: ../../gnome/app.py:205 ../../gnome/app.py:896 ../../gnome/app.py:1146 -#: ../../kde4/app.py:1041 -#, python-format -msgid "Restore '%s'" +#: ../../qt4/app.py:194 +msgid "Restore and delete new files" msgstr "" -#: ../../gnome/app.py:207 ../../gnome/app.py:897 ../../gnome/app.py:1147 -#: ../../kde4/app.py:1042 +#: ../../qt4/app.py:201 #, python-format -msgid "Restore '%s' to ..." +msgid "" +"Restore selected file or folder.\n" +"If this button is grayed out this is most likely because \"%(now)s\" is " +"selected in left hand snapshots list." +msgstr "" + +#: ../../qt4/app.py:206 ../../qt4/logviewdialog.py:67 +#: ../../qt4/qt4tools.py:160 ../../qt4/snapshotsdialog.py:96 +msgid "Snapshots" +msgstr "Anlık durumlar" + +#: ../../qt4/app.py:213 +msgid "Snapshot" msgstr "" -#: ../../gnome/app.py:226 ../../kde4/app.py:235 +#: ../../qt4/app.py:224 +msgid "View" +msgstr "" + +#: ../../qt4/app.py:277 msgid "Shortcuts" msgstr "Kısayollar" -#: ../../gnome/app.py:249 -msgid "Name" -msgstr "Adı" - -#: ../../gnome/app.py:260 -msgid "Size" -msgstr "Boyut" - -#: ../../gnome/app.py:267 -msgid "Date" -msgstr "Tarih" - -#: ../../gnome/app.py:286 ../../gnome/app.py:883 -#: ../../gnome/snapshotsdialog.py:116 ../../kde4/app.py:171 -#: ../../kde4/app.py:221 ../../kde4/snapshotsdialog.py:91 -#: ../../gnome/mainwindow.glade:366 ../../gnome/mainwindow.glade:368 -#: ../../gnome/snapshotsdialog.glade:8 -msgid "Snapshots" -msgstr "Anlık durumlar" +#: ../../qt4/app.py:295 +msgid "" +"This folder doesn't exist\n" +"in the current selected snapshot!" +msgstr "" + +#: ../../qt4/app.py:359 +msgid "Add to Include" +msgstr "" + +#: ../../qt4/app.py:360 +msgid "Add to Exclude" +msgstr "" + +#: ../../qt4/app.py:416 +#, python-format +msgid "" +"%(appName)s is not configured. Would you like to restore a previous " +"configuration?" +msgstr "" -#: ../../gnome/app.py:348 ../../kde4/app.py:362 +#: ../../qt4/app.py:440 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it and then press OK" @@ -743,724 +851,789 @@ "Anlık durum klasörü bulunamadı.\n" "Eğer çıkarılabilir bir sürücüde ise lütfen takın ve TAMAM'a tıklayın" -#: ../../gnome/app.py:611 ../../kde4/app.py:590 -msgid "Done, no backup needed" -msgstr "Bitti, yedekleme gerekmiyor" +#: ../../qt4/app.py:473 +msgid "" +"If you close this window Back In Time will not be able to shutdown your " +"system when the snapshot has finished.\n" +"Do you really want to close?" +msgstr "" -#: ../../gnome/app.py:619 ../../kde4/app.py:598 +#: ../../qt4/app.py:667 ../../qt4/app.py:703 msgid "Working:" msgstr "Çalışıyor:" -#: ../../gnome/app.py:623 ../../kde4/app.py:602 +#: ../../qt4/app.py:695 +msgid "Done, no backup needed" +msgstr "Bitti, yedekleme gerekmiyor" + +#: ../../qt4/app.py:707 msgid "Error:" msgstr "Hata:" -#: ../../gnome/app.py:636 ../../kde4/app.py:649 +#: ../../qt4/app.py:726 ../../qt4/qt4systrayicon.py:153 +msgid "Sent:" +msgstr "" + +#: ../../qt4/app.py:727 ../../qt4/qt4systrayicon.py:154 +msgid "Speed:" +msgstr "" + +#: ../../qt4/app.py:728 ../../qt4/qt4systrayicon.py:155 +msgid "ETA:" +msgstr "" + +#: ../../qt4/app.py:777 msgid "Global" msgstr "Evrensel" -#: ../../gnome/app.py:637 ../../kde4/app.py:650 +#: ../../qt4/app.py:778 msgid "Root" msgstr "Kök Dizini" -#: ../../gnome/app.py:638 ../../kde4/app.py:651 +#: ../../qt4/app.py:779 msgid "Home" msgstr "" -#: ../../gnome/app.py:662 -msgid "Bookmarks" -msgstr "Yer İmleri" - -#: ../../gnome/app.py:675 ../../kde4/app.py:662 +#: ../../qt4/app.py:794 msgid "Backup folders" msgstr "Yedekleme klasörleri" -#: ../../gnome/app.py:701 ../../kde4/app.py:734 -msgid "Today" -msgstr "Bugün" - -#: ../../gnome/app.py:705 ../../kde4/app.py:738 -msgid "Yesterday" -msgstr "Dün" - -#: ../../gnome/app.py:709 ../../kde4/app.py:742 -msgid "This week" -msgstr "Bu hafta" - -#: ../../gnome/app.py:713 ../../kde4/app.py:746 -msgid "Last week" -msgstr "Geçen hafta" - -#: ../../gnome/app.py:764 ../../kde4/app.py:398 -msgid "" -"If you close this window Back In Time will not be able to shutdown your " -"system when the snapshot has finished.\n" -"Do you really want to close?" +#: ../../qt4/app.py:849 +msgid "This is NOT a snapshot but a live view of your local files" msgstr "" -#: ../../gnome/app.py:881 ../../gnome/snapshotsdialog.py:238 -msgid "Open" -msgstr "Aç" - -#: ../../gnome/app.py:1056 ../../kde4/app.py:90 ../../kde4/app.py:805 -#: ../../gnome/mainwindow.glade:73 ../../gnome/mainwindow.glade:75 -msgid "Snapshot Name" -msgstr "Anlık durum ismi" - -#: ../../gnome/app.py:1075 +#: ../../qt4/app.py:860 ../../qt4/app.py:1476 #, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +msgid "Last check %s" msgstr "" -"Bu anlık durumu silmek istediğinizden emin misiniz:\n" -"%s" -#: ../../gnome/app.py:1123 ../../kde4/app.py:1010 +#: ../../qt4/app.py:928 #, python-format -msgid "Snapshot: %s" +msgid "" +"Are you sure you want to remove the snapshot:\n" +"%s" msgstr "" -#: ../../gnome/app.py:1124 ../../kde4/app.py:1011 +#: ../../qt4/app.py:1004 #, python-format -msgid "View the snapshot made at %s" -msgstr "%s'da oluşturulan anlık durumu görüntüle" - -#: ../../gnome/app.py:1126 ../../kde4/app.py:1013 -msgid "View the current disk content" -msgstr "Şu andaki disk içeriğini görüntüle" - -#: ../../gnome/logviewdialog.py:106 ../../gnome/settingsdialog.py:414 -#: ../../kde4/logviewdialog.py:83 ../../kde4/settingsdialog.py:590 -msgid "All" -msgstr "" - -#: ../../gnome/logviewdialog.py:107 ../../gnome/settingsdialog.py:412 -#: ../../kde4/logviewdialog.py:84 ../../kde4/settingsdialog.py:588 -msgid "Errors" +msgid "" +"Backup local files before overwriting or\n" +"removing with trailing '%(suffix)s'." msgstr "" -#: ../../gnome/logviewdialog.py:112 ../../kde4/logviewdialog.py:89 -msgid "Changes" +#: ../../qt4/app.py:1010 +msgid "" +"Are you sure you want to remove all newer files in your original folder?" msgstr "" -#: ../../gnome/logviewdialog.py:115 ../../kde4/logviewdialog.py:92 -msgid "Informations" +#: ../../qt4/app.py:1014 +msgid "" +"WARNING: deleting files in filesystem root could break your whole system!!!" msgstr "" -#: ../../gnome/settingsdialog.py:235 ../../kde4/settingsdialog.py:387 -msgid "Include files and folders" +#: ../../qt4/app.py:1016 +msgid "Files to be restored:" msgstr "" -#: ../../gnome/settingsdialog.py:264 -msgid "Exclude patterns, files or folders" +#: ../../qt4/app.py:1031 +msgid "Do you really want to restore this files(s):" msgstr "" -#: ../../gnome/settingsdialog.py:411 ../../kde4/settingsdialog.py:587 -msgid "None" -msgstr "" - -#: ../../gnome/settingsdialog.py:413 ../../kde4/settingsdialog.py:589 -msgid "Changes & Errors" +#: ../../qt4/app.py:1226 +#, python-format +msgid "Snapshot: %s" msgstr "" -#: ../../gnome/settingsdialog.py:458 -msgid "Snapshots folder" -msgstr "" +#: ../../qt4/app.py:1227 +#, python-format +msgid "View the snapshot made at %s" +msgstr "%s'da oluşturulan anlık durumu görüntüle" -#: ../../gnome/settingsdialog.py:466 ../../kde4/settingsdialog.py:1314 -msgid "Are you sure you want to change snapshots folder ?" -msgstr "Anlık durum klasörünü değiştirmek istediğinizden emin misiniz?" +#: ../../qt4/app.py:1229 +msgid "View the current disk content" +msgstr "Şu andaki disk içeriğini görüntüle" -#: ../../gnome/settingsdialog.py:901 ../../kde4/settingsdialog.py:914 -msgid "" -"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " -"*/3 for periodic backups every 3 hours" +#: ../../qt4/app.py:1268 +#, python-format +msgid "Restore '%s'" msgstr "" -#: ../../gnome/settingsdialog.py:1141 ../../kde4/settingsdialog.py:653 -msgid "New profile" +#: ../../qt4/app.py:1269 +#, python-format +msgid "Restore '%s' to ..." msgstr "" -#: ../../gnome/settingsdialog.py:1155 ../../kde4/settingsdialog.py:669 -msgid "Rename profile" -msgstr "Profili yeniden adlandır" - -#: ../../gnome/settingsdialog.py:1167 ../../kde4/settingsdialog.py:683 +#: ../../qt4/app.py:1270 #, python-format -msgid "Are you sure you want to delete the profile \"%s\" ?" -msgstr "\"%s\" profilini silmek istediğinize emin misiniz ?" - -#: ../../gnome/settingsdialog.py:1173 ../../kde4/settingsdialog.py:1292 -msgid "Include folder" -msgstr "Klasörü dahil et" - -#: ../../gnome/settingsdialog.py:1193 ../../kde4/settingsdialog.py:1278 -msgid "Include file" -msgstr "Dosyayı dahil et" - -#: ../../gnome/settingsdialog.py:1235 ../../kde4/settingsdialog.py:1241 -msgid "Exclude pattern" +msgid "Restore '%s' and delete new files" msgstr "" -#: ../../gnome/settingsdialog.py:1240 ../../kde4/settingsdialog.py:1251 -msgid "Exclude patterns can't contain ':' char !" +#: ../../qt4/app.py:1368 ../../qt4/app.py:1385 +msgid "Authors" msgstr "" -#: ../../gnome/settingsdialog.py:1246 ../../kde4/settingsdialog.py:1257 -msgid "Exclude file" +#: ../../qt4/app.py:1369 ../../qt4/app.py:1388 +msgid "Translations" msgstr "" -#: ../../gnome/settingsdialog.py:1257 ../../kde4/settingsdialog.py:1261 -msgid "Exclude folder" +#: ../../qt4/app.py:1370 ../../qt4/app.py:1391 +msgid "License" msgstr "" -#: ../../gnome/snapshotsdialog.py:240 -msgid "Jump to" +#: ../../qt4/logviewdialog.py:49 +msgid "Last Log View" msgstr "" -#: ../../gnome/snapshotsdialog.py:248 ../../kde4/snapshotsdialog.py:164 -msgid "Diff" +#: ../../qt4/logviewdialog.py:51 +msgid "Snapshot Log View" msgstr "" -#: ../../gnome/snapshotsdialog.py:277 ../../kde4/snapshotsdialog.py:339 -msgid "You can't compare a snapshot to itself" -msgstr "Bir anlık durumu kendisi ile karşılaştıramazsınız" - -#: ../../gnome/snapshotsdialog.py:284 ../../kde4/snapshotsdialog.py:346 -#, python-format -msgid "Command not found: %s" -msgstr "Komut bulunamadı: %s" +#: ../../qt4/logviewdialog.py:59 ../../qt4/settingsdialog.py:59 +#: ../../qt4/settingsdialog.py:274 ../../qt4/settingsdialog.py:1899 +msgid "Profile:" +msgstr "Profil:" -#: ../../gnome/snapshotsdialog.py:307 ../../kde4/snapshotsdialog.py:367 -#, python-format -msgid "" -"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" +#: ../../qt4/logviewdialog.py:81 +msgid "Filter:" msgstr "" -#: ../../gnome/snapshotsdialog.py:310 ../../kde4/snapshotsdialog.py:370 -#, python-format -msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +#: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 +msgid "All" msgstr "" -#: ../../gnome/snapshotsdialog.py:312 ../../kde4/snapshotsdialog.py:372 -msgid "WARNING: This can not be revoked!" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 +#: ../../qt4/settingsdialog.py:657 +msgid "Errors" msgstr "" -#: ../../gnome/snapshotsdialog.py:317 ../../kde4/snapshotsdialog.py:377 -#, python-format -msgid "Exclude \"%s\" from future snapshots?" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 +msgid "Changes" msgstr "" -#: ../../kde4/app.py:86 ../../gnome/mainwindow.glade:58 -#: ../../gnome/mainwindow.glade:60 -msgid "Refresh snapshots list" +#: ../../qt4/logviewdialog.py:92 +msgid "Informations" msgstr "" -#: ../../kde4/app.py:94 ../../gnome/mainwindow.glade:88 -#: ../../gnome/mainwindow.glade:90 -msgid "Remove Snapshot" -msgstr "Anlık durumu sil" - -#: ../../kde4/app.py:98 ../../gnome/mainwindow.glade:105 -msgid "View Snapshot Log" +#: ../../qt4/logviewdialog.py:101 +msgid "[E] Error, [I] Information, [C] Change" msgstr "" -#: ../../kde4/app.py:102 ../../gnome/mainwindow.glade:121 -msgid "View Last Log" +#: ../../qt4/logviewdialog.py:104 +msgid "decode paths" msgstr "" -#: ../../kde4/app.py:108 ../../kde4/settingsdialog.py:69 -#: ../../gnome/mainwindow.glade:144 ../../gnome/mainwindow.glade:146 -#: ../../gnome/settingsdialog.glade:7 -msgid "Settings" -msgstr "Ayarlar" - -#: ../../kde4/app.py:124 ../../gnome/mainwindow.glade:169 -msgid "Shutdown system after snapshot has finished." +#: ../../qt4/messagebox.py:56 +msgid "Error" msgstr "" -#: ../../kde4/app.py:131 ../../gnome/mainwindow.glade:184 -#: ../../gnome/mainwindow.glade:186 -msgid "Exit" -msgstr "Çıkış" - -#: ../../kde4/app.py:186 ../../gnome/mainwindow.glade:289 -msgid "Up" -msgstr "Yukarı" - -#: ../../kde4/app.py:199 ../../gnome/mainwindow.glade:325 -msgid "Show hidden files" -msgstr "Gizli dosyaları göster" - -#: ../../kde4/app.py:244 -msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +#: ../../qt4/messagebox.py:62 ../../qt4/messagebox.py:68 +msgid "Question" msgstr "" -#: ../../kde4/app.py:839 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +#: ../../qt4/qt4systrayicon.py:69 +msgid "Start BackInTime" msgstr "" -#: ../../kde4/app.py:1140 ../../kde4/kde4systrayicon.py:117 +#: ../../qt4/qt4systrayicon.py:124 msgid "Working..." msgstr "Çalışıyor..." -#: ../../kde4/logviewdialog.py:55 -msgid "Error Log View" -msgstr "" +#: ../../qt4/qt4tools.py:178 +msgid "Today" +msgstr "Bugün" -#: ../../kde4/logviewdialog.py:65 ../../kde4/settingsdialog.py:79 -#: ../../kde4/settingsdialog.py:293 ../../gnome/logviewdialog.glade:73 -#: ../../gnome/settingsdialog.glade:72 -msgid "Profile:" -msgstr "Profil:" +#: ../../qt4/qt4tools.py:183 +msgid "Yesterday" +msgstr "Dün" -#: ../../kde4/logviewdialog.py:77 ../../gnome/logviewdialog.glade:110 -msgid "Filter:" -msgstr "" +#: ../../qt4/qt4tools.py:188 +msgid "This week" +msgstr "Bu hafta" -#: ../../kde4/logviewdialog.py:100 ../../gnome/logviewdialog.glade:169 -msgid "[E] Error, [I] Information, [C] Change" -msgstr "" +#: ../../qt4/qt4tools.py:193 +msgid "Last week" +msgstr "Geçen hafta" -#: ../../kde4/logviewdialog.py:103 ../../gnome/logviewdialog.glade:195 -msgid "decode paths" +#: ../../qt4/restoredialog.py:75 +msgid "Show full Log" msgstr "" -#: ../../kde4/settingsdialog.py:88 +#: ../../qt4/settingsdialog.py:68 msgid "Edit" msgstr "Düzenle" -#: ../../kde4/settingsdialog.py:106 ../../gnome/settingsdialog.glade:1207 +#: ../../qt4/settingsdialog.py:73 +msgid "Modify for Full System Backup" +msgstr "" + +#: ../../qt4/settingsdialog.py:77 ../../qt4/settingsdialog.py:451 +msgid "Add" +msgstr "" + +#: ../../qt4/settingsdialog.py:81 ../../qt4/settingsdialog.py:408 +#: ../../qt4/settingsdialog.py:467 +msgid "Remove" +msgstr "" + +#: ../../qt4/settingsdialog.py:96 msgid "General" msgstr "Genel" -#: ../../kde4/settingsdialog.py:114 ../../gnome/settingsdialog.glade:199 +#: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "" -#: ../../kde4/settingsdialog.py:127 ../../kde4/settingsdialog.py:1311 +#: ../../qt4/settingsdialog.py:119 +#, python-format +msgid "" +"Warning: %(app)s uses EncFS for encryption. A recent security audit " +"revealed several possible attack vectors for this. Please take a look at 'A " +"NOTE ON SECURITY' in 'man backintime'." +msgstr "" + +#: ../../qt4/settingsdialog.py:129 ../../qt4/settingsdialog.py:1568 msgid "Where to save snapshots" msgstr "" -#: ../../kde4/settingsdialog.py:146 +#: ../../qt4/settingsdialog.py:145 +msgid "Folder" +msgstr "" + +#: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" -#: ../../kde4/settingsdialog.py:158 ../../kde4/settingsdialog.py:283 -#: ../../gnome/settingsdialog.glade:323 ../../gnome/settingsdialog.glade:583 -#: ../../gnome/settingsdialog.glade:874 +#: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "" -#: ../../kde4/settingsdialog.py:163 ../../gnome/settingsdialog.glade:350 -#: ../../gnome/settingsdialog.glade:610 +#: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "" -#: ../../kde4/settingsdialog.py:168 ../../kde4/settingsdialog.py:288 -#: ../../gnome/settingsdialog.glade:377 ../../gnome/settingsdialog.glade:637 -#: ../../gnome/settingsdialog.glade:902 +#: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "" -#: ../../kde4/settingsdialog.py:173 ../../gnome/settingsdialog.glade:416 +#: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" -#: ../../kde4/settingsdialog.py:178 ../../gnome/settingsdialog.glade:459 +#: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" -#: ../../kde4/settingsdialog.py:184 +#: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "" -#: ../../kde4/settingsdialog.py:228 ../../kde4/settingsdialog.py:237 -#: ../../kde4/settingsdialog.py:243 ../../gnome/settingsdialog.glade:703 -#: ../../gnome/settingsdialog.glade:743 +#: ../../qt4/settingsdialog.py:201 +msgid "Key File" +msgstr "" + +#: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 +#: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "" -#: ../../kde4/settingsdialog.py:249 ../../gnome/settingsdialog.glade:775 +#: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" -#: ../../kde4/settingsdialog.py:252 ../../gnome/settingsdialog.glade:792 +#: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" -#: ../../kde4/settingsdialog.py:264 ../../gnome/settingsdialog.glade:968 +#: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "" -#: ../../kde4/settingsdialog.py:276 ../../gnome/settingsdialog.glade:848 -msgid "Auto Host / User / Profile Id" +#: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 +msgid "Full snapshot path: " msgstr "" -#: ../../kde4/settingsdialog.py:301 +#: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "Zamanlama" -#: ../../kde4/settingsdialog.py:311 ../../gnome/settingsdialog.glade:1092 +#: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "" -#: ../../kde4/settingsdialog.py:322 ../../gnome/settingsdialog.glade:1079 +#: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "" -#: ../../kde4/settingsdialog.py:333 ../../gnome/settingsdialog.glade:1066 +#: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "Saat:" -#: ../../kde4/settingsdialog.py:344 ../../gnome/settingsdialog.glade:1053 +#: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "" -#: ../../kde4/settingsdialog.py:353 ../../gnome/settingsdialog.glade:1014 +#: ../../qt4/settingsdialog.py:339 msgid "" -"Run Back In Time periodically with anacron. This is useful if the computer " -"is not running regular." +"Run Back In Time repeatedly. This is useful if the computer is not running " +"regular." msgstr "" -#: ../../kde4/settingsdialog.py:357 ../../gnome/settingsdialog.glade:1040 -msgid "Frequency in days:" +#: ../../qt4/settingsdialog.py:344 +msgid "Every:" msgstr "" -#: ../../kde4/settingsdialog.py:368 ../../gnome/settingsdialog.glade:1026 +#: ../../qt4/settingsdialog.py:362 msgid "" "Run Back In Time as soon as the drive is connected (only once every X " "days).\n" "You will be prompted for your sudo password." msgstr "" -#: ../../kde4/settingsdialog.py:379 ../../gnome/settingsdialog.glade:1310 +#: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Dahil et" -#: ../../kde4/settingsdialog.py:403 ../../kde4/settingsdialog.py:445 -#: ../../gnome/settingsdialog.glade:1411 +#: ../../qt4/settingsdialog.py:381 +msgid "Include files and folders" +msgstr "" + +#: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "Dosya ekle" -#: ../../kde4/settingsdialog.py:408 ../../kde4/settingsdialog.py:450 -#: ../../gnome/settingsdialog.glade:1427 +#: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Klasör ekle" -#: ../../kde4/settingsdialog.py:418 ../../gnome/settingsdialog.glade:1474 +#: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "" -#: ../../kde4/settingsdialog.py:421 ../../gnome/settingsdialog.glade:1328 +#: ../../qt4/settingsdialog.py:417 msgid "" "Warning: Wildcards ('foo*', '[fF]oo', 'fo?') will be ignored with " "mode 'SSH encrypted'.\n" "Only separate asterisk are allowed ('foo/*', 'foo/**/bar')" msgstr "" -#: ../../kde4/settingsdialog.py:430 +#: ../../qt4/settingsdialog.py:425 +msgid "Exclude patterns, files or folders" +msgstr "" + +#: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "" -#: ../../kde4/settingsdialog.py:460 ../../gnome/settingsdialog.glade:1905 +#: ../../qt4/settingsdialog.py:463 +msgid "Add default" +msgstr "" + +#: ../../qt4/settingsdialog.py:474 +msgid "Exclude files bigger than: " +msgstr "" + +#: ../../qt4/settingsdialog.py:475 +#, python-format +msgid "" +"Exclude files bigger than value in %(prefix)s.\n" +"With 'Full rsync mode' disabled this will only affect new files\n" +"because for rsync this is a transfer option, not an exclude option.\n" +"So big files that has been backed up before will remain in snapshots\n" +"even if they had changed." +msgstr "" + +#: ../../qt4/settingsdialog.py:493 msgid "Auto-remove" msgstr "Oto-kaldır" -#: ../../kde4/settingsdialog.py:464 ../../gnome/settingsdialog.glade:1608 +#: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "Daha eski:" -#: ../../kde4/settingsdialog.py:478 ../../gnome/settingsdialog.glade:1624 +#: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "Eğer boş alan daha az ise:" -#: ../../kde4/settingsdialog.py:490 ../../gnome/settingsdialog.glade:1642 +#: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" -#: ../../kde4/settingsdialog.py:514 ../../gnome/settingsdialog.glade:1697 +#: ../../qt4/settingsdialog.py:551 +msgid "Run in background on remote Host." +msgstr "" + +#: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "" -#: ../../kde4/settingsdialog.py:517 ../../kde4/settingsdialog.py:522 -#: ../../gnome/settingsdialog.glade:1705 ../../gnome/settingsdialog.glade:1729 +#: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "" -#: ../../kde4/settingsdialog.py:519 ../../gnome/settingsdialog.glade:1717 +#: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "" -#: ../../kde4/settingsdialog.py:524 ../../gnome/settingsdialog.glade:1743 +#: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "" -#: ../../kde4/settingsdialog.py:527 +#: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "" -#: ../../kde4/settingsdialog.py:529 ../../gnome/settingsdialog.glade:1769 +#: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "" -#: ../../kde4/settingsdialog.py:532 ../../gnome/settingsdialog.glade:1781 +#: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "" -#: ../../kde4/settingsdialog.py:534 ../../gnome/settingsdialog.glade:1795 +#: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "" -#: ../../kde4/settingsdialog.py:537 ../../gnome/settingsdialog.glade:1496 +#: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "" -#: ../../kde4/settingsdialog.py:546 ../../gnome/settingsdialog.glade:2104 +#: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Seçenekler" -#: ../../kde4/settingsdialog.py:549 ../../gnome/settingsdialog.glade:1920 +#: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Bildirimleri etkinleştir" -#: ../../kde4/settingsdialog.py:552 ../../gnome/settingsdialog.glade:1937 +#: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "" -#: ../../kde4/settingsdialog.py:555 +#: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" msgstr "" -#: ../../kde4/settingsdialog.py:558 ../../gnome/settingsdialog.glade:1955 -msgid "Backup files on restore" +#: ../../qt4/settingsdialog.py:611 +msgid "Run only one snapshot at a time" +msgstr "" + +#: ../../qt4/settingsdialog.py:612 +msgid "" +"Other snapshots will be blocked until the current snapshot is done.\n" +"This is a global option. So it will effect all profiles for this user.\n" +"But you need to activate this for all other users, too." +msgstr "" + +#: ../../qt4/settingsdialog.py:617 +msgid "Backup replaced files on restore" msgstr "" -#: ../../kde4/settingsdialog.py:561 ../../gnome/settingsdialog.glade:1972 +#: ../../qt4/settingsdialog.py:618 +#, python-format +msgid "" +"Newer versions of files will be renamed with trailing '%(suffix)s' before " +"restoring.\n" +"If you don't need them anymore you can remove them with '%(cmd)s'" +msgstr "" + +#: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "" -#: ../../kde4/settingsdialog.py:564 ../../gnome/settingsdialog.glade:1989 +#: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "" -#: ../../kde4/settingsdialog.py:567 ../../gnome/settingsdialog.glade:2006 +#: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "" -#: ../../kde4/settingsdialog.py:568 ../../gnome/settingsdialog.glade:2032 +#: ../../qt4/settingsdialog.py:634 msgid "" -"- snapshots are no read-only\n" -"- destination file-system must support all linux attributes (dates, rights, " +"- snapshots are not read-only\n" +"- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" -#: ../../kde4/settingsdialog.py:575 ../../gnome/settingsdialog.glade:2045 +#: ../../qt4/settingsdialog.py:641 +msgid "Take a new snapshot regardless of there were changes or not." +msgstr "" + +#: ../../qt4/settingsdialog.py:644 msgid "Check for changes (don't take a new snapshot if nothing changed)" msgstr "" -#: ../../kde4/settingsdialog.py:582 +#: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "" -#: ../../kde4/settingsdialog.py:597 ../../gnome/settingsdialog.glade:2366 -msgid "Expert Options" -msgstr "Uzman Seçenekleri" +#: ../../qt4/settingsdialog.py:656 +msgid "None" +msgstr "" + +#: ../../qt4/settingsdialog.py:658 +msgid "Changes & Errors" +msgstr "" -#: ../../kde4/settingsdialog.py:600 +#: ../../qt4/settingsdialog.py:674 msgid "Change these options only if you really know what you are doing !" msgstr "" -#: ../../kde4/settingsdialog.py:608 ../../gnome/settingsdialog.glade:2133 -msgid "Run 'nice' as cron job (default: enabled)" -msgstr "Cron işi olarak 'nice' çalıştır (varsayılan: etkinleştirilmiş)" +#: ../../qt4/settingsdialog.py:678 +msgid "Run 'nice':" +msgstr "" + +#: ../../qt4/settingsdialog.py:684 ../../qt4/settingsdialog.py:696 +msgid "as cron job" +msgstr "" + +#: ../../qt4/settingsdialog.py:687 ../../qt4/settingsdialog.py:702 +#: ../../qt4/settingsdialog.py:716 +msgid "on remote host" +msgstr "" + +#: ../../qt4/settingsdialog.py:690 +msgid "Run 'ionice':" +msgstr "" + +#: ../../qt4/settingsdialog.py:699 +msgid "when taking a manual snapshot" +msgstr "" -#: ../../kde4/settingsdialog.py:611 ../../gnome/settingsdialog.glade:2150 -msgid "Run 'ionice' as cron job (default: enabled)" +#: ../../qt4/settingsdialog.py:706 +msgid "Run 'rsync' with 'nocache':" msgstr "" -#: ../../kde4/settingsdialog.py:614 ../../gnome/settingsdialog.glade:2167 -msgid "Run 'ionice' when taking a manual snapshot (default: disabled)" +#: ../../qt4/settingsdialog.py:712 +msgid "on local machine" msgstr "" -#: ../../kde4/settingsdialog.py:617 ../../gnome/settingsdialog.glade:2184 -msgid "Run 'nice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:719 +msgid "Redirect stdout to /dev/null in cronjobs." msgstr "" -#: ../../kde4/settingsdialog.py:620 ../../gnome/settingsdialog.glade:2201 -msgid "Run 'ionice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:725 +msgid "Redirect stderr to /dev/null in cronjobs." msgstr "" -#: ../../kde4/settingsdialog.py:626 ../../gnome/settingsdialog.glade:2224 +#: ../../qt4/settingsdialog.py:734 msgid "Limit rsync bandwidth usage: " msgstr "" -#: ../../kde4/settingsdialog.py:629 ../../gnome/settingsdialog.glade:2259 +#: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" -#: ../../kde4/settingsdialog.py:634 ../../gnome/settingsdialog.glade:2280 +#: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "" -#: ../../kde4/settingsdialog.py:637 ../../gnome/settingsdialog.glade:2297 +#: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "" -#: ../../kde4/settingsdialog.py:640 ../../gnome/settingsdialog.glade:2314 +#: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute links)" msgstr "" -#: ../../kde4/settingsdialog.py:643 ../../gnome/settingsdialog.glade:2331 -msgid "Copy links (dereference symbolic links)" +#: ../../qt4/settingsdialog.py:834 +msgid "Paste additional options to rsync" msgstr "" -#: ../../kde4/snapshotsdialog.py:46 ../../kde4/snapshotsdialog.py:173 -#: ../../gnome/snapshotsdialog.glade:385 -msgid "Diff Options" +#: ../../qt4/settingsdialog.py:837 +msgid "" +"Options must be quoted e.g. --exclude-from=\"/path/to/my exclude file\"." msgstr "" -#: ../../kde4/snapshotsdialog.py:56 ../../gnome/snapshotsdialog.glade:314 -msgid "Command:" -msgstr "Komut:" - -#: ../../kde4/snapshotsdialog.py:60 ../../gnome/snapshotsdialog.glade:322 -msgid "Parameters:" -msgstr "Parametreler:" - -#: ../../kde4/snapshotsdialog.py:64 ../../gnome/snapshotsdialog.glade:334 -msgid "Use %1 and %2 for path parameters" -msgstr "Yol parametreleri olarak %1 ve %2 kullan" +#: ../../qt4/settingsdialog.py:847 +msgid "Add prefix to SSH commands" +msgstr "" -#: ../../kde4/snapshotsdialog.py:123 ../../gnome/snapshotsdialog.glade:184 -#: ../../gnome/snapshotsdialog.glade:186 -msgid "Delete" +#: ../../qt4/settingsdialog.py:850 +#, python-format +msgid "" +"Prefix to run before every command on remote host.\n" +"Variables need to be escaped with \\$FOO.\n" +"This doesn't touch rsync. So to add a prefix\n" +"for rsync use \"%(cb_rsync_options)s\" with\n" +"%(rsync_options_value)s\n" +"\n" +"%(default)s: %(def_value)s" msgstr "" -#: ../../kde4/snapshotsdialog.py:128 ../../gnome/snapshotsdialog.glade:199 -#: ../../gnome/snapshotsdialog.glade:201 -msgid "Select All" +#: ../../qt4/settingsdialog.py:858 ../../qt4/settingsdialog.py:1691 +msgid "default" msgstr "" -#: ../../kde4/snapshotsdialog.py:132 ../../gnome/snapshotsdialog.glade:88 -msgid "List only different snapshots" +#: ../../qt4/settingsdialog.py:875 +msgid "Restore Config" msgstr "" -#: ../../kde4/snapshotsdialog.py:139 ../../gnome/snapshotsdialog.glade:110 -msgid "List only equal snapshots to: " +#: ../../qt4/settingsdialog.py:891 +msgid "" +"Full system backup can only create a snapshot to be restored to the same " +"physical disk(s) with the same disk partitioning as from the source; " +"restoring to new physical disks or the same disks with different " +"partitioning will yield a potentially broken and unusable system.\n" +"\n" +"Full system backup will override some settings that may have been " +"customized. Continue?" msgstr "" -#: ../../kde4/snapshotsdialog.py:149 ../../gnome/snapshotsdialog.glade:146 -msgid "Deep check (more accurate, but slow)" +#: ../../qt4/settingsdialog.py:922 +msgid "New profile" msgstr "" -#: ../../kde4/snapshotsdialog.py:174 -msgid "Go To" -msgstr "Git" +#: ../../qt4/settingsdialog.py:938 +msgid "Rename profile" +msgstr "Profili yeniden adlandır" -#: ../../gnome/logviewdialog.glade:9 -msgid "Log View" -msgstr "" +#: ../../qt4/settingsdialog.py:952 +#, python-format +msgid "Are you sure you want to delete the profile \"%s\" ?" +msgstr "\"%s\" profilini silmek istediğinize emin misiniz ?" -#: ../../gnome/logviewdialog.glade:179 -msgid "scroll down automatic" +#: ../../qt4/settingsdialog.py:1191 +msgid "" +"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " +"*/3 for periodic backups every 3 hours" msgstr "" -#: ../../gnome/mainwindow.glade:7 -msgid "Back In Time" -msgstr "Back In Time" - -#: ../../gnome/mainwindow.glade:45 -msgid "Backup Now" -msgstr "Şimdi Yedekle" +#: ../../qt4/settingsdialog.py:1489 +msgid "Exclude pattern" +msgstr "" -#: ../../gnome/mainwindow.glade:171 -msgid "Shutdown" +#: ../../qt4/settingsdialog.py:1502 +msgid "Exclude file" msgstr "" -#: ../../gnome/mainwindow.glade:287 -msgid "Parent folder" +#: ../../qt4/settingsdialog.py:1506 +msgid "Exclude folder" msgstr "" -#: ../../gnome/mainwindow.glade:327 -msgid "Hidden files" -msgstr "Gizli dosyalar" +#: ../../qt4/settingsdialog.py:1525 +msgid "Include file" +msgstr "Dosyayı dahil et" -#: ../../gnome/mainwindow.glade:451 +#: ../../qt4/settingsdialog.py:1533 ../../qt4/settingsdialog.py:1553 +#, python-format msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +"\"%s\" is a symlink. The linked target will not be backed up until you " +"include it, too.\n" +"Would you like to include the symlinks target instead?" +msgstr "" + +#: ../../qt4/settingsdialog.py:1545 +msgid "Include folder" +msgstr "Klasörü dahil et" + +#: ../../qt4/settingsdialog.py:1572 +msgid "Are you sure you want to change snapshots folder ?" +msgstr "Anlık durum klasörünü değiştirmek istediğinizden emin misiniz?" + +#: ../../qt4/settingsdialog.py:1688 +msgid "enabled" msgstr "" -#: ../../gnome/settingsdialog.glade:287 -msgid "Where to save snapshots" +#: ../../qt4/settingsdialog.py:1690 +msgid "disabled" msgstr "" -#: ../../gnome/settingsdialog.glade:483 -msgid "Private key:" +#: ../../qt4/settingsdialog.py:1715 +msgid "Restore Settings" msgstr "" -#: ../../gnome/settingsdialog.glade:534 -msgid "Advanced SSH Settings" +#: ../../qt4/settingsdialog.py:1732 +msgid " and add your user to group 'fuse'" msgstr "" -#: ../../gnome/settingsdialog.glade:552 -msgid "SSH Settings" +#: ../../qt4/settingsdialog.py:1736 +#, python-format +msgid "" +"Please navigate to the snapshot from which you want to restore %(appName)s's " +"configuration. The path may look like: \n" +"%(samplePath)s\n" +"\n" +"If your snapshots are on a remote drive or if they are encrypted you need to " +"manually mount them first. If you use Mode SSH you also may need to set up " +"public key login to the remote host%(addFuse)s.\n" +"Take a look at 'man backintime'." msgstr "" -#: ../../gnome/settingsdialog.glade:815 -msgid "Password" +#: ../../qt4/settingsdialog.py:1794 ../../qt4/settingsdialog.py:1854 +msgid "No config found" msgstr "" -#: ../../gnome/settingsdialog.glade:930 -msgid "Profile Id:" +#: ../../qt4/snapshotsdialog.py:49 ../../qt4/snapshotsdialog.py:173 +msgid "Diff Options" msgstr "" -#: ../../gnome/settingsdialog.glade:1115 -msgid "" -"hours seperate by comma ( e.g. 8,12,18,23) or */3 for periodic backups every " -"3 hours (cron style)" +#: ../../qt4/snapshotsdialog.py:56 +msgid "Command:" +msgstr "Komut:" + +#: ../../qt4/snapshotsdialog.py:60 +msgid "Parameters:" +msgstr "Parametreler:" + +#: ../../qt4/snapshotsdialog.py:64 +msgid "Use %1 and %2 for path parameters" +msgstr "Yol parametreleri olarak %1 ve %2 kullan" + +#: ../../qt4/snapshotsdialog.py:106 +msgid "List only different snapshots" msgstr "" -#: ../../gnome/settingsdialog.glade:1163 -msgid "Schedule" -msgstr "Zamanlama" +#: ../../qt4/snapshotsdialog.py:113 +msgid "List only equal snapshots to: " +msgstr "" -#: ../../gnome/settingsdialog.glade:1363 -msgid "Highly recommended:" +#: ../../qt4/snapshotsdialog.py:123 +msgid "Deep check (more accurate, but slow)" msgstr "" -#: ../../gnome/settingsdialog.glade:1377 -msgid "label" +#: ../../qt4/snapshotsdialog.py:144 +msgid "Delete" msgstr "" -#: ../../gnome/settingsdialog.glade:1755 -msgid "week(s)" +#: ../../qt4/snapshotsdialog.py:148 +msgid "Select All" msgstr "" -#: ../../gnome/settingsdialog.glade:2069 -msgid "Log level:" +#: ../../qt4/snapshotsdialog.py:161 +msgid "Diff" msgstr "" -#: ../../gnome/settingsdialog.glade:2121 +#: ../../qt4/snapshotsdialog.py:172 +msgid "Go To" +msgstr "Git" + +#: ../../qt4/snapshotsdialog.py:326 +msgid "You can't compare a snapshot to itself" +msgstr "Bir anlık durumu kendisi ile karşılaştıramazsınız" + +#: ../../qt4/snapshotsdialog.py:333 +#, python-format +msgid "Command not found: %s" +msgstr "Komut bulunamadı: %s" + +#: ../../qt4/snapshotsdialog.py:354 +#, python-format msgid "" -"Change these options only if you really know what you are doing !" +"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" msgstr "" -#: ../../gnome/snapshotsdialog.glade:263 -msgid "Diff with" +#: ../../qt4/snapshotsdialog.py:357 +#, python-format +msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" msgstr "" -#: ../../gnome/textinputdialog.glade:7 -msgid "Pattern" -msgstr "Kalıp" +#: ../../qt4/snapshotsdialog.py:359 +msgid "WARNING: This can not be revoked!" +msgstr "" -#: ../../gnome/textinputdialog.glade:70 -msgid "Text" +#: ../../qt4/snapshotsdialog.py:374 +#, python-format +msgid "Exclude \"%s\" from future snapshots?" msgstr "" diff -Nru backintime-1.0.36/common/po/uk.po backintime-1.1.12/common/po/uk.po --- backintime-1.0.36/common/po/uk.po 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/po/uk.po 2016-01-11 18:07:58.000000000 +0000 @@ -7,207 +7,239 @@ msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2013-11-09 22:34+0100\n" -"PO-Revision-Date: 2012-05-09 10:16+0000\n" -"Last-Translator: Fedik \n" +"POT-Creation-Date: 2015-12-19 00:47+0100\n" +"PO-Revision-Date: 2015-09-09 21:52+0000\n" +"Last-Translator: Back In Time Team \n" "Language-Team: Ukrainian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Launchpad-Export-Date: 2014-08-06 10:20+0000\n" -"X-Generator: Launchpad (build 17147)\n" +"X-Launchpad-Export-Date: 2016-01-11 17:52+0000\n" +"X-Generator: Launchpad (build 17881)\n" -#: ../../common/config.py:72 +#: ../../common/configfile.py:60 +#, python-format +msgid "Failed to save config: %s" +msgstr "" + +#: ../../common/configfile.py:78 +#, python-format +msgid "Failed to load config: %s" +msgstr "" + +#: ../../common/configfile.py:352 ../../common/configfile.py:414 +#, python-format +msgid "Profile \"%s\" already exists !" +msgstr "Профіль \"%s\" вже існує !" + +#: ../../common/configfile.py:383 +msgid "You can't remove the last profile !" +msgstr "Ви не можете видалити останній профіль !" + +#: ../../common/config.py:76 msgid "Disabled" msgstr "Вимкнено" -#: ../../common/config.py:73 +#: ../../common/config.py:77 msgid "At every boot/reboot" msgstr "При кожній загрузці/перезагрузці" -#: ../../common/config.py:74 +#: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Кожні 5 хвилин" -#: ../../common/config.py:75 +#: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Кожні 10 хвилин" -#: ../../common/config.py:76 +#: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "" -#: ../../common/config.py:77 +#: ../../common/config.py:81 msgid "Every hour" msgstr "" -#: ../../common/config.py:78 +#: ../../common/config.py:82 msgid "Every 2 hours" msgstr "" -#: ../../common/config.py:79 +#: ../../common/config.py:83 msgid "Every 4 hours" msgstr "" -#: ../../common/config.py:80 +#: ../../common/config.py:84 msgid "Every 6 hours" msgstr "" -#: ../../common/config.py:81 +#: ../../common/config.py:85 msgid "Every 12 hours" msgstr "" -#: ../../common/config.py:82 +#: ../../common/config.py:86 msgid "Custom Hours" msgstr "" -#: ../../common/config.py:83 +#: ../../common/config.py:87 msgid "Every Day" msgstr "Щодня" -#: ../../common/config.py:84 -msgid "Daily (anacron)" +#: ../../common/config.py:88 +msgid "Repeatedly (anacron)" msgstr "" -#: ../../common/config.py:85 +#: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "" -#: ../../common/config.py:86 +#: ../../common/config.py:90 msgid "Every Week" msgstr "Щотижня" -#: ../../common/config.py:87 +#: ../../common/config.py:91 msgid "Every Month" msgstr "Щомісяця" -#: ../../common/config.py:91 +#: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "День(ів)" -#: ../../common/config.py:92 +#: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Тиждень(нів)" -#: ../../common/config.py:93 +#: ../../common/config.py:97 msgid "Year(s)" msgstr "Роки(ів)" -#: ../../common/config.py:100 +#: ../../common/config.py:101 +msgid "Hour(s)" +msgstr "" + +#: ../../common/config.py:104 +msgid "Month(s)" +msgstr "" + +#: ../../common/config.py:126 ../../qt4/settingsdialog.py:551 msgid " EXPERIMENTAL!" msgstr "" -#: ../../common/config.py:103 +#: ../../common/config.py:129 msgid "Local" msgstr "" -#: ../../common/config.py:104 +#: ../../common/config.py:130 msgid "SSH" msgstr "" -#: ../../common/config.py:104 ../../common/config.py:106 -#: ../../gnome/settingsdialog.py:475 ../../kde4/settingsdialog.py:1325 +#: ../../common/config.py:130 ../../common/config.py:132 +#: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "" -#: ../../common/config.py:105 +#: ../../common/config.py:131 msgid "Local encrypted" msgstr "" -#: ../../common/config.py:105 ../../common/config.py:106 +#: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "" -#: ../../common/config.py:106 +#: ../../common/config.py:132 msgid "SSH encrypted" msgstr "" -#: ../../common/config.py:112 +#: ../../common/config.py:135 msgid "Default" msgstr "" -#: ../../common/config.py:113 +#: ../../common/config.py:136 msgid "AES128-CTR" msgstr "" -#: ../../common/config.py:114 +#: ../../common/config.py:137 msgid "AES192-CTR" msgstr "" -#: ../../common/config.py:115 +#: ../../common/config.py:138 msgid "AES256-CTR" msgstr "" -#: ../../common/config.py:116 +#: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "" -#: ../../common/config.py:117 +#: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "" -#: ../../common/config.py:118 +#: ../../common/config.py:141 msgid "AES128-CBC" msgstr "" -#: ../../common/config.py:119 +#: ../../common/config.py:142 msgid "3DES-CBC" msgstr "" -#: ../../common/config.py:120 +#: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "" -#: ../../common/config.py:121 +#: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "" -#: ../../common/config.py:122 +#: ../../common/config.py:145 msgid "AES192-CBC" msgstr "" -#: ../../common/config.py:123 +#: ../../common/config.py:146 msgid "AES256-CBC" msgstr "" -#: ../../common/config.py:124 +#: ../../common/config.py:147 msgid "ARCFOUR" msgstr "" -#: ../../common/config.py:129 +#: ../../common/config.py:153 msgid "Main profile" msgstr "Основний профіль" -#: ../../common/config.py:256 ../../common/config.py:275 -#: ../../common/config.py:286 ../../common/config.py:291 +#: ../../common/config.py:289 ../../common/config.py:296 +#: ../../common/config.py:307 ../../common/config.py:312 +#: ../../qt4/qt4systrayicon.py:61 #, python-format msgid "Profile: \"%s\"" msgstr "Профіль: \"%s\"" -#: ../../common/config.py:256 +#: ../../common/config.py:289 msgid "Snapshots folder is not valid !" msgstr "Неправильна тека" -#: ../../common/config.py:275 +#: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "Потрібно обрати хоча б одну теку для резервування !" -#: ../../common/config.py:286 +#: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "Ви не можете приєднати теку резервної копії !" -#: ../../common/config.py:291 +#: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "Ви не можете приєднати підтеку резервної копії !" -#: ../../common/config.py:361 +#: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s не є текою !" -#: ../../common/config.py:376 ../../common/config.py:389 +#: ../../common/config.py:380 +msgid "Host/User/Profile-ID must not be empty!" +msgstr "" + +#: ../../common/config.py:388 ../../common/config.py:420 #, python-format msgid "" "Can't write to: %s\n" @@ -216,59 +248,68 @@ "Неможливо записати у: %s\n" "Ви впевнені що маєете право на запис ?" -#: ../../common/config.py:1286 +#: ../../common/config.py:400 +#, python-format msgid "" -"Can't find crontab.\n" -"Are you sure cron is installed ?\n" -"If not you should disable all automatic backups." +"Destination filesystem for '%(path)s' is formatted with FAT which doesn't " +"support hard-links. Please use a native Linux filesystem." msgstr "" -"Не можу знайти crontab.\n" -"Ви впевнені, що cron встановлено ?\n" -"Якщо ні, Вам варто вимкнути усе автоматичне резервування." -#: ../../common/config.py:1338 +#: ../../common/config.py:405 #, python-format -msgid "Schedule udev doesn't work with mode %s" +msgid "" +"Destination filsystem for '%(path)s' is a SMB mounted share. Please make " +"sure the remote SMB server supports symlinks or activate '%(copyLinks)s' in " +"'%(expertOptions)s'." msgstr "" -#: ../../common/config.py:1342 -#, python-format -msgid "Couldn't find UUID for \"%s\"" -msgstr "" +#: ../../common/config.py:408 ../../qt4/settingsdialog.py:815 +msgid "Copy links (dereference symbolic links)" +msgstr "Копіювати посилання (слідувати за символьним посиланнях)" -#: ../../common/config.py:1379 -msgid "Failed to remove udev rules" -msgstr "" +#: ../../common/config.py:409 ../../qt4/settingsdialog.py:669 +msgid "Expert Options" +msgstr "Розширені параметри" -#: ../../common/config.py:1385 -msgid "Failed to create udev rules" +#: ../../common/config.py:411 +#, python-format +msgid "" +"Destination filesystem for '%(path)s is a sshfs mounted share. sshfs doesn't " +"support hard-links. Please use mode 'SSH' instead." msgstr "" -#: ../../common/config.py:1420 +#: ../../common/config.py:1407 msgid "" -"Can't find anacron.\n" -"Are you sure anacron is installed ?\n" -"If not you should disable daily anacron backups." +"Can't find crontab.\n" +"Are you sure cron is installed ?\n" +"If not you should disable all automatic backups." msgstr "" +"Не можу знайти crontab.\n" +"Ви впевнені, що cron встановлено ?\n" +"Якщо ні, Вам варто вимкнути усе автоматичне резервування." -#: ../../common/config.py:1439 -msgid "Please provide your sudo password to install the udev rule." +#: ../../common/config.py:1411 +msgid "Failed to write new crontab." msgstr "" -#: ../../common/config.py:1445 -msgid "Please provide your sudo password to remove unused udev rules." +#: ../../common/config.py:1505 +#, python-format +msgid "" +"Could not install Udev rule for profile %(profile_id)s. DBus Service " +"'%(dbus_interface)s' wasn't available" msgstr "" -#: ../../common/configfile.py:253 ../../common/configfile.py:315 +#: ../../common/config.py:1517 #, python-format -msgid "Profile \"%s\" already exists !" -msgstr "Профіль \"%s\" вже існує !" +msgid "Schedule udev doesn't work with mode %s" +msgstr "" -#: ../../common/configfile.py:284 -msgid "You can't remove the last profile !" -msgstr "Ви не можете видалити останній профіль !" +#: ../../common/config.py:1526 +#, python-format +msgid "Couldn't find UUID for \"%s\"" +msgstr "" -#: ../../common/encfstools.py:95 +#: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" @@ -276,38 +317,38 @@ "%(error)s" msgstr "" -#: ../../common/encfstools.py:105 +#: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "" -#: ../../common/encfstools.py:149 +#: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "" -#: ../../common/encfstools.py:153 +#: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" -#: ../../common/encfstools.py:154 +#: ../../common/encfstools.py:171 msgid "Cancel" msgstr "" -#: ../../common/encfstools.py:157 +#: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "" -#: ../../common/encfstools.py:161 +#: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "" -#: ../../common/encfstools.py:166 +#: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" -#: ../../common/encfstools.py:174 ../../common/sshtools.py:207 +#: ../../common/encfstools.py:196 ../../common/sshtools.py:262 #, python-format msgid "" "%(user)s is not member of group 'fuse'.\n" @@ -315,63 +356,66 @@ "Look at 'man backintime' for further instructions." msgstr "" -#: ../../common/encfstools.py:189 +#: ../../common/encfstools.py:211 msgid "" "encfs version 1.7.2 and before has a bug with option --reverse. Please " "update encfs" msgstr "" -#: ../../common/encfstools.py:453 ../../common/encfstools.py:480 -#: ../../common/snapshots.py:982 ../../common/snapshots.py:1288 -#: ../../kde4/app.py:82 ../../gnome/mainwindow.glade:43 +#: ../../common/encfstools.py:512 ../../common/snapshots.py:1131 +#: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "Зробити знімок" -#: ../../common/mount.py:195 +#: ../../common/mount.py:204 #, python-format msgid "" "Hash collision occurred in hash_id %s. Incrementing global value " "hash_collision and try again." msgstr "" -#: ../../common/mount.py:246 +#: ../../common/mount.py:259 #, python-format msgid "mountpoint %s not empty." msgstr "" -#: ../../common/mount.py:286 +#: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" -#: ../../common/password.py:425 +#: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" -#: ../../common/snapshots.py:171 ../../gnome/app.py:1127 -#: ../../kde4/app.py:1014 +#: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Зараз" -#: ../../common/snapshots.py:182 ../../gnome/gnometools.py:37 +#: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "З ПОМИЛКАМИ!" -#: ../../common/snapshots.py:282 +#: ../../common/snapshots.py:344 msgid "" "### This log has been decoded with automatic search pattern\n" "### If some paths are not decoded you can manually decode them with:\n" msgstr "" -#: ../../common/snapshots.py:465 +#: ../../common/snapshots.py:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "НЕВДАЧА" -#: ../../common/snapshots.py:564 +#: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "Відновлення дозволів:" -#: ../../common/snapshots.py:739 +#: ../../common/snapshots.py:752 ../../qt4/app.py:377 ../../qt4/app.py:675 +#: ../../qt4/app.py:692 ../../qt4/qt4systrayicon.py:65 +msgid "Done" +msgstr "Виконано" + +#: ../../common/snapshots.py:860 msgid "" "Back In Time changed its backup format.\n" "\n" @@ -382,7 +426,7 @@ "Ваші старі знімки можуть бути перетворені у відповідності з новим форматом. " "Перетворити?" -#: ../../common/snapshots.py:749 +#: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" @@ -399,7 +443,7 @@ "\n" "(Програма все ж зможе їх розрізняти)" -#: ../../common/snapshots.py:752 +#: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" @@ -407,7 +451,7 @@ "Жодного профілю не знайдено. Перед оновленням профілів, будь-ласка, " "перезапустіть Back In Time" -#: ../../common/snapshots.py:803 +#: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" @@ -420,7 +464,7 @@ "cannot continue taking snapshots" msgstr "" -#: ../../common/snapshots.py:812 +#: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" @@ -435,7 +479,7 @@ "Ви можете самостійно перемістити знімки, \n" "якщо це зробите, то перезапустіть Back In Time, щоб продовжити." -#: ../../common/snapshots.py:825 +#: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" @@ -444,7 +488,7 @@ "Оновлення відбулось успішно!\n" "Back In Time надалі буде працювати за розкладом" -#: ../../common/snapshots.py:830 +#: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" @@ -464,11 +508,11 @@ "\n" "Якщо не впевнені, Back In Time повторно запитає при наступному старті." -#: ../../common/snapshots.py:839 +#: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "Back In Time продовжить резервне копіювання за розкладом" -#: ../../common/snapshots.py:841 +#: ../../common/snapshots.py:953 msgid "" "Back In Time still cannot continue taking new snapshots.\n" "Restart Back In Time to see the questions again" @@ -476,7 +520,11 @@ "Back In Time все ще не може продовжити створення резервних копій.\n" "Перезапустіть Back In Time для повтору запитання" -#: ../../common/snapshots.py:913 +#: ../../common/snapshots.py:972 +msgid "Deferring backup while on battery" +msgstr "" + +#: ../../common/snapshots.py:1035 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it." @@ -484,7 +532,7 @@ "Не можу знайти теку знімків.\n" "Якщо вона на знімному пристрої, будь ласка приєднайте його." -#: ../../common/snapshots.py:915 +#: ../../common/snapshots.py:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." @@ -492,149 +540,156 @@ msgstr[1] "Очікую %s секунд." msgstr[2] "Очікую %s секунд." -#: ../../common/snapshots.py:941 +#: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "Не вийшло зробити знімок %s !!!" -#: ../../common/snapshots.py:950 +#: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "Завершення роботи" -#: ../../common/snapshots.py:1088 +#: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "Не можу створити теку: %s" -#: ../../common/snapshots.py:1107 +#: ../../common/snapshots.py:1217 msgid "..." msgstr "…" -#: ../../common/snapshots.py:1134 +#: ../../common/snapshots.py:1238 +#, python-format +msgid "Found leftover '%s' which can be continued." +msgstr "" + +#: ../../common/snapshots.py:1250 +#, python-format +msgid "Remove leftover '%s' folder from last run" +msgstr "" + +#: ../../common/snapshots.py:1263 #, python-format msgid "Can't remove folder: %s" msgstr "Не можу видалити теку: %s" -#: ../../common/snapshots.py:1219 +#: ../../common/snapshots.py:1340 #, python-format msgid "Compare with snapshot %s" msgstr "Порівняти зі знімком %s" -#: ../../common/snapshots.py:1248 +#: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "Створити тверді зв’язки" -#: ../../common/snapshots.py:1335 +#: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "Зберегти файл конфігурації ..." -#: ../../common/snapshots.py:1341 +#: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "Зберегти дозвіл ..." -#: ../../common/snapshots.py:1442 +#: ../../common/snapshots.py:1470 +msgid "Save permission over ssh failed. Retry normal method" +msgstr "" + +#: ../../common/snapshots.py:1521 #, python-format msgid "Can't rename %(new_path)s to %(path)s" msgstr "" -#: ../../common/snapshots.py:1562 -msgid "Remove old snapshots" -msgstr "Видалити старі знімки" - -#: ../../common/snapshots.py:1586 ../../kde4/settingsdialog.py:501 -#: ../../gnome/settingsdialog.glade:1660 +#: ../../common/snapshots.py:1695 ../../common/snapshots.py:1728 +#: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "Розумне видалення" -#: ../../common/snapshots.py:1591 +#: ../../common/snapshots.py:1704 +msgid "Remove old snapshots" +msgstr "Видалити старі знімки" + +#: ../../common/snapshots.py:1733 msgid "Try to keep min free space" msgstr "Намагатись зберігати мінімум вільного місця" -#: ../../common/snapshots.py:1621 +#: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" -#: ../../common/sshtools.py:106 +#: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "" -#: ../../common/sshtools.py:113 +#: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "" -#: ../../common/sshtools.py:187 -#, python-format -msgid "" -"Failed to unlock SSH private key:\n" -"Error: %s" -msgstr "" - -#: ../../common/sshtools.py:194 +#: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" -#: ../../common/sshtools.py:199 +#: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" -#: ../../common/sshtools.py:217 +#: ../../common/sshtools.py:278 #, python-format msgid "" "Password-less authentication for %(user)s@%(host)s failed. Look at 'man " "backintime' for further instructions." msgstr "" -#: ../../common/sshtools.py:229 +#: ../../common/sshtools.py:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" -#: ../../common/sshtools.py:254 +#: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" -#: ../../common/sshtools.py:274 +#: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" -#: ../../common/sshtools.py:276 +#: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:278 +#: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:280 +#: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" -#: ../../common/sshtools.py:302 +#: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" -#: ../../common/sshtools.py:325 ../../common/sshtools.py:383 +#: ../../common/sshtools.py:423 ../../common/sshtools.py:553 #, python-format msgid "" "Remote host %(host)s doesn't support '%(command)s':\n" @@ -642,7 +697,7 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:387 +#: ../../common/sshtools.py:556 #, python-format msgid "" "Check commands on host %(host)s returned unknown error:\n" @@ -650,96 +705,149 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:400 +#: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "" -#: ../../gnome/app.py:185 ../../gnome/app.py:594 ../../gnome/app.py:608 -#: ../../kde4/app.py:299 ../../kde4/app.py:570 ../../kde4/app.py:587 -msgid "Done" -msgstr "Виконано" +#: ../../qt4/app.py:81 +msgid "Refresh snapshots list" +msgstr "Оновити список знімків" + +#: ../../qt4/app.py:85 ../../qt4/app.py:890 +msgid "Snapshot Name" +msgstr "Назва знімку" + +#: ../../qt4/app.py:88 +msgid "Remove Snapshot" +msgstr "Видалити знімок" + +#: ../../qt4/app.py:91 +msgid "View Snapshot Log" +msgstr "Переглянути журнал" + +#: ../../qt4/app.py:94 +msgid "View Last Log" +msgstr "Переглянути останній журнал" + +#: ../../qt4/app.py:99 ../../qt4/settingsdialog.py:51 +msgid "Settings" +msgstr "Настроювання" + +#: ../../qt4/app.py:104 +msgid "Shutdown" +msgstr "" -#: ../../gnome/app.py:189 ../../kde4/app.py:143 ../../kde4/app.py:159 -#: ../../gnome/mainwindow.glade:225 +#: ../../qt4/app.py:105 +msgid "Shutdown system after snapshot has finished." +msgstr "" + +#: ../../qt4/app.py:111 +msgid "Exit" +msgstr "Вийти" + +#: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 msgid "Help" msgstr "Допомога" -#: ../../gnome/app.py:191 ../../kde4/app.py:146 -#: ../../gnome/mainwindow.glade:223 +#: ../../qt4/app.py:122 +msgid "Config File Help" +msgstr "" + +#: ../../qt4/app.py:125 msgid "Website" msgstr "Вебсайт" -#: ../../gnome/app.py:192 ../../kde4/app.py:148 +#: ../../qt4/app.py:127 ../../qt4/app.py:982 +msgid "Changelog" +msgstr "" + +#: ../../qt4/app.py:129 msgid "FAQ" msgstr "" -#: ../../gnome/app.py:193 ../../kde4/app.py:150 +#: ../../qt4/app.py:131 msgid "Ask a question" msgstr "" -#: ../../gnome/app.py:194 ../../kde4/app.py:152 +#: ../../qt4/app.py:133 msgid "Report a bug" msgstr "" -#: ../../gnome/app.py:196 ../../kde4/app.py:155 +#: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "Про програму" -#: ../../gnome/app.py:202 ../../gnome/app.py:887 -#: ../../gnome/restoredialog.py:84 ../../gnome/snapshotsdialog.py:83 -#: ../../gnome/snapshotsdialog.py:244 ../../kde4/app.py:206 -#: ../../kde4/app.py:216 ../../kde4/restoredialog.py:68 -#: ../../kde4/snapshotsdialog.py:111 ../../kde4/snapshotsdialog.py:117 -#: ../../gnome/mainwindow.glade:350 ../../gnome/mainwindow.glade:352 -#: ../../gnome/snapshotsdialog.glade:169 ../../gnome/snapshotsdialog.glade:171 +#: ../../qt4/app.py:163 +msgid "Up" +msgstr "Вгору" + +#: ../../qt4/app.py:174 ../../qt4/settingsdialog.py:1776 +msgid "Show hidden files" +msgstr "Показати приховані файли" + +#: ../../qt4/app.py:184 ../../qt4/app.py:199 ../../qt4/app.py:233 +#: ../../qt4/restoredialog.py:62 ../../qt4/settingsdialog.py:1818 +#: ../../qt4/snapshotsdialog.py:134 ../../qt4/snapshotsdialog.py:139 msgid "Restore" msgstr "Відновити" -#: ../../gnome/app.py:203 ../../gnome/app.py:888 ../../gnome/gnometools.py:67 -#: ../../gnome/snapshotsdialog.py:84 ../../gnome/snapshotsdialog.py:245 -#: ../../kde4/app.py:208 ../../kde4/restoredialog.py:42 -#: ../../kde4/snapshotsdialog.py:113 +#: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 +#: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "Відновлення до ..." -#: ../../gnome/app.py:205 ../../gnome/app.py:896 ../../gnome/app.py:1146 -#: ../../kde4/app.py:1041 -#, python-format -msgid "Restore '%s'" -msgstr "Відновити '%s'" +#: ../../qt4/app.py:194 +msgid "Restore and delete new files" +msgstr "" -#: ../../gnome/app.py:207 ../../gnome/app.py:897 ../../gnome/app.py:1147 -#: ../../kde4/app.py:1042 +#: ../../qt4/app.py:201 #, python-format -msgid "Restore '%s' to ..." -msgstr "Відновлення '%s' до ..." +msgid "" +"Restore selected file or folder.\n" +"If this button is grayed out this is most likely because \"%(now)s\" is " +"selected in left hand snapshots list." +msgstr "" -#: ../../gnome/app.py:226 ../../kde4/app.py:235 +#: ../../qt4/app.py:206 ../../qt4/logviewdialog.py:67 +#: ../../qt4/qt4tools.py:160 ../../qt4/snapshotsdialog.py:96 +msgid "Snapshots" +msgstr "Знімки" + +#: ../../qt4/app.py:213 +msgid "Snapshot" +msgstr "" + +#: ../../qt4/app.py:224 +msgid "View" +msgstr "" + +#: ../../qt4/app.py:277 msgid "Shortcuts" msgstr "Скорочення" -#: ../../gnome/app.py:249 -msgid "Name" -msgstr "Назва" - -#: ../../gnome/app.py:260 -msgid "Size" -msgstr "Розмір" - -#: ../../gnome/app.py:267 -msgid "Date" -msgstr "Дата" - -#: ../../gnome/app.py:286 ../../gnome/app.py:883 -#: ../../gnome/snapshotsdialog.py:116 ../../kde4/app.py:171 -#: ../../kde4/app.py:221 ../../kde4/snapshotsdialog.py:91 -#: ../../gnome/mainwindow.glade:366 ../../gnome/mainwindow.glade:368 -#: ../../gnome/snapshotsdialog.glade:8 -msgid "Snapshots" -msgstr "Знімки" +#: ../../qt4/app.py:295 +msgid "" +"This folder doesn't exist\n" +"in the current selected snapshot!" +msgstr "" + +#: ../../qt4/app.py:359 +msgid "Add to Include" +msgstr "" + +#: ../../qt4/app.py:360 +msgid "Add to Exclude" +msgstr "" -#: ../../gnome/app.py:348 ../../kde4/app.py:362 +#: ../../qt4/app.py:416 +#, python-format +msgid "" +"%(appName)s is not configured. Would you like to restore a previous " +"configuration?" +msgstr "" + +#: ../../qt4/app.py:440 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it and then press OK" @@ -747,731 +855,792 @@ "Не можливо знайти робочу теку.\n" "Якщо вона знаходиться на змінному носії, тоді приєднайте його і натисніть ОК" -#: ../../gnome/app.py:611 ../../kde4/app.py:590 -msgid "Done, no backup needed" -msgstr "Виконано, резервування не потрібне" +#: ../../qt4/app.py:473 +msgid "" +"If you close this window Back In Time will not be able to shutdown your " +"system when the snapshot has finished.\n" +"Do you really want to close?" +msgstr "" -#: ../../gnome/app.py:619 ../../kde4/app.py:598 +#: ../../qt4/app.py:667 ../../qt4/app.py:703 msgid "Working:" msgstr "Працюю:" -#: ../../gnome/app.py:623 ../../kde4/app.py:602 +#: ../../qt4/app.py:695 +msgid "Done, no backup needed" +msgstr "Виконано, резервування не потрібне" + +#: ../../qt4/app.py:707 msgid "Error:" msgstr "Помилка:" -#: ../../gnome/app.py:636 ../../kde4/app.py:649 +#: ../../qt4/app.py:726 ../../qt4/qt4systrayicon.py:153 +msgid "Sent:" +msgstr "" + +#: ../../qt4/app.py:727 ../../qt4/qt4systrayicon.py:154 +msgid "Speed:" +msgstr "" + +#: ../../qt4/app.py:728 ../../qt4/qt4systrayicon.py:155 +msgid "ETA:" +msgstr "" + +#: ../../qt4/app.py:777 msgid "Global" msgstr "Загальні" -#: ../../gnome/app.py:637 ../../kde4/app.py:650 +#: ../../qt4/app.py:778 msgid "Root" msgstr "Root" -#: ../../gnome/app.py:638 ../../kde4/app.py:651 +#: ../../qt4/app.py:779 msgid "Home" msgstr "Home" -#: ../../gnome/app.py:662 -msgid "Bookmarks" -msgstr "Закладки" - -#: ../../gnome/app.py:675 ../../kde4/app.py:662 +#: ../../qt4/app.py:794 msgid "Backup folders" msgstr "Папки резервування" -#: ../../gnome/app.py:701 ../../kde4/app.py:734 -msgid "Today" -msgstr "Сьогодні" +#: ../../qt4/app.py:849 +msgid "This is NOT a snapshot but a live view of your local files" +msgstr "" -#: ../../gnome/app.py:705 ../../kde4/app.py:738 -msgid "Yesterday" -msgstr "Вчора" +#: ../../qt4/app.py:860 ../../qt4/app.py:1476 +#, python-format +msgid "Last check %s" +msgstr "" -#: ../../gnome/app.py:709 ../../kde4/app.py:742 -msgid "This week" -msgstr "Цього тижня" +#: ../../qt4/app.py:928 +#, python-format +msgid "" +"Are you sure you want to remove the snapshot:\n" +"%s" +msgstr "" +"Бажаєте перемістити знімок:\n" +"%s" -#: ../../gnome/app.py:713 ../../kde4/app.py:746 -msgid "Last week" -msgstr "Попереднього тижня" +#: ../../qt4/app.py:1004 +#, python-format +msgid "" +"Backup local files before overwriting or\n" +"removing with trailing '%(suffix)s'." +msgstr "" -#: ../../gnome/app.py:764 ../../kde4/app.py:398 +#: ../../qt4/app.py:1010 msgid "" -"If you close this window Back In Time will not be able to shutdown your " -"system when the snapshot has finished.\n" -"Do you really want to close?" +"Are you sure you want to remove all newer files in your original folder?" msgstr "" -#: ../../gnome/app.py:881 ../../gnome/snapshotsdialog.py:238 -msgid "Open" -msgstr "Відкрити" +#: ../../qt4/app.py:1014 +msgid "" +"WARNING: deleting files in filesystem root could break your whole system!!!" +msgstr "" -#: ../../gnome/app.py:1056 ../../kde4/app.py:90 ../../kde4/app.py:805 -#: ../../gnome/mainwindow.glade:73 ../../gnome/mainwindow.glade:75 -msgid "Snapshot Name" -msgstr "Назва знімку" +#: ../../qt4/app.py:1016 +msgid "Files to be restored:" +msgstr "" -#: ../../gnome/app.py:1075 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +#: ../../qt4/app.py:1031 +msgid "Do you really want to restore this files(s):" msgstr "" -"Ви справді хочете видалити знімок:\n" -"%s" -#: ../../gnome/app.py:1123 ../../kde4/app.py:1010 +#: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "Знімок: %s" -#: ../../gnome/app.py:1124 ../../kde4/app.py:1011 +#: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "Переглянути знімок зроблений %s" -#: ../../gnome/app.py:1126 ../../kde4/app.py:1013 +#: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "Переглянути вміст диску" -#: ../../gnome/logviewdialog.py:106 ../../gnome/settingsdialog.py:414 -#: ../../kde4/logviewdialog.py:83 ../../kde4/settingsdialog.py:590 +#: ../../qt4/app.py:1268 +#, python-format +msgid "Restore '%s'" +msgstr "Відновити '%s'" + +#: ../../qt4/app.py:1269 +#, python-format +msgid "Restore '%s' to ..." +msgstr "Відновлення '%s' до ..." + +#: ../../qt4/app.py:1270 +#, python-format +msgid "Restore '%s' and delete new files" +msgstr "" + +#: ../../qt4/app.py:1368 ../../qt4/app.py:1385 +msgid "Authors" +msgstr "" + +#: ../../qt4/app.py:1369 ../../qt4/app.py:1388 +msgid "Translations" +msgstr "" + +#: ../../qt4/app.py:1370 ../../qt4/app.py:1391 +msgid "License" +msgstr "" + +#: ../../qt4/logviewdialog.py:49 +msgid "Last Log View" +msgstr "" + +#: ../../qt4/logviewdialog.py:51 +msgid "Snapshot Log View" +msgstr "" + +#: ../../qt4/logviewdialog.py:59 ../../qt4/settingsdialog.py:59 +#: ../../qt4/settingsdialog.py:274 ../../qt4/settingsdialog.py:1899 +msgid "Profile:" +msgstr "Профіль:" + +#: ../../qt4/logviewdialog.py:81 +msgid "Filter:" +msgstr "Фільтр:" + +#: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 msgid "All" msgstr "Все" -#: ../../gnome/logviewdialog.py:107 ../../gnome/settingsdialog.py:412 -#: ../../kde4/logviewdialog.py:84 ../../kde4/settingsdialog.py:588 +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 +#: ../../qt4/settingsdialog.py:657 msgid "Errors" msgstr "Помилки" -#: ../../gnome/logviewdialog.py:112 ../../kde4/logviewdialog.py:89 +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 msgid "Changes" msgstr "Змінено" -#: ../../gnome/logviewdialog.py:115 ../../kde4/logviewdialog.py:92 +#: ../../qt4/logviewdialog.py:92 msgid "Informations" msgstr "Відомості" -#: ../../gnome/settingsdialog.py:235 ../../kde4/settingsdialog.py:387 -msgid "Include files and folders" -msgstr "Включаючи файли і папки" - -#: ../../gnome/settingsdialog.py:264 -msgid "Exclude patterns, files or folders" -msgstr "Виключити шаблони, файли, або папки" - -#: ../../gnome/settingsdialog.py:411 ../../kde4/settingsdialog.py:587 -msgid "None" -msgstr "Нічого" - -#: ../../gnome/settingsdialog.py:413 ../../kde4/settingsdialog.py:589 -msgid "Changes & Errors" -msgstr "Зміни та помилки" - -#: ../../gnome/settingsdialog.py:458 -msgid "Snapshots folder" -msgstr "Папка знімків" - -#: ../../gnome/settingsdialog.py:466 ../../kde4/settingsdialog.py:1314 -msgid "Are you sure you want to change snapshots folder ?" -msgstr "Ви впевнені, що бажаєте змінити папку для знімків системи?" - -#: ../../gnome/settingsdialog.py:901 ../../kde4/settingsdialog.py:914 -msgid "" -"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " -"*/3 for periodic backups every 3 hours" -msgstr "" - -#: ../../gnome/settingsdialog.py:1141 ../../kde4/settingsdialog.py:653 -msgid "New profile" -msgstr "Новий профіль" - -#: ../../gnome/settingsdialog.py:1155 ../../kde4/settingsdialog.py:669 -msgid "Rename profile" -msgstr "Перейменувати профіль" - -#: ../../gnome/settingsdialog.py:1167 ../../kde4/settingsdialog.py:683 -#, python-format -msgid "Are you sure you want to delete the profile \"%s\" ?" -msgstr "Ви впевнені, що хочите знищити профіль \"%s\" ?" - -#: ../../gnome/settingsdialog.py:1173 ../../kde4/settingsdialog.py:1292 -msgid "Include folder" -msgstr "Включить каталог" - -#: ../../gnome/settingsdialog.py:1193 ../../kde4/settingsdialog.py:1278 -msgid "Include file" -msgstr "Включить файл" - -#: ../../gnome/settingsdialog.py:1235 ../../kde4/settingsdialog.py:1241 -msgid "Exclude pattern" -msgstr "Виключити по шаблону" - -#: ../../gnome/settingsdialog.py:1240 ../../kde4/settingsdialog.py:1251 -msgid "Exclude patterns can't contain ':' char !" -msgstr "Шаблон не може містити символ ’:’!" - -#: ../../gnome/settingsdialog.py:1246 ../../kde4/settingsdialog.py:1257 -msgid "Exclude file" -msgstr "Виключити файл" - -#: ../../gnome/settingsdialog.py:1257 ../../kde4/settingsdialog.py:1261 -msgid "Exclude folder" -msgstr "Виключити каталог" - -#: ../../gnome/snapshotsdialog.py:240 -msgid "Jump to" -msgstr "Перейти до" - -#: ../../gnome/snapshotsdialog.py:248 ../../kde4/snapshotsdialog.py:164 -msgid "Diff" -msgstr "Відмінності" - -#: ../../gnome/snapshotsdialog.py:277 ../../kde4/snapshotsdialog.py:339 -msgid "You can't compare a snapshot to itself" -msgstr "Неможна порівнювати резервну копію саму з собою" - -#: ../../gnome/snapshotsdialog.py:284 ../../kde4/snapshotsdialog.py:346 -#, python-format -msgid "Command not found: %s" -msgstr "Команду не знайдено: %s" +#: ../../qt4/logviewdialog.py:101 +msgid "[E] Error, [I] Information, [C] Change" +msgstr "[E] Помилка, [I] Інформація, [C] Зміна" -#: ../../gnome/snapshotsdialog.py:307 ../../kde4/snapshotsdialog.py:367 -#, python-format -msgid "" -"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" +#: ../../qt4/logviewdialog.py:104 +msgid "decode paths" msgstr "" -#: ../../gnome/snapshotsdialog.py:310 ../../kde4/snapshotsdialog.py:370 -#, python-format -msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +#: ../../qt4/messagebox.py:56 +msgid "Error" msgstr "" -#: ../../gnome/snapshotsdialog.py:312 ../../kde4/snapshotsdialog.py:372 -msgid "WARNING: This can not be revoked!" +#: ../../qt4/messagebox.py:62 ../../qt4/messagebox.py:68 +msgid "Question" msgstr "" -#: ../../gnome/snapshotsdialog.py:317 ../../kde4/snapshotsdialog.py:377 -#, python-format -msgid "Exclude \"%s\" from future snapshots?" +#: ../../qt4/qt4systrayicon.py:69 +msgid "Start BackInTime" msgstr "" -#: ../../kde4/app.py:86 ../../gnome/mainwindow.glade:58 -#: ../../gnome/mainwindow.glade:60 -msgid "Refresh snapshots list" -msgstr "Оновити список знімків" +#: ../../qt4/qt4systrayicon.py:124 +msgid "Working..." +msgstr "В процесі ..." -#: ../../kde4/app.py:94 ../../gnome/mainwindow.glade:88 -#: ../../gnome/mainwindow.glade:90 -msgid "Remove Snapshot" -msgstr "Видалити знімок" +#: ../../qt4/qt4tools.py:178 +msgid "Today" +msgstr "Сьогодні" -#: ../../kde4/app.py:98 ../../gnome/mainwindow.glade:105 -msgid "View Snapshot Log" -msgstr "Переглянути журнал" +#: ../../qt4/qt4tools.py:183 +msgid "Yesterday" +msgstr "Вчора" -#: ../../kde4/app.py:102 ../../gnome/mainwindow.glade:121 -msgid "View Last Log" -msgstr "Переглянути останній журнал" +#: ../../qt4/qt4tools.py:188 +msgid "This week" +msgstr "Цього тижня" -#: ../../kde4/app.py:108 ../../kde4/settingsdialog.py:69 -#: ../../gnome/mainwindow.glade:144 ../../gnome/mainwindow.glade:146 -#: ../../gnome/settingsdialog.glade:7 -msgid "Settings" -msgstr "Настроювання" +#: ../../qt4/qt4tools.py:193 +msgid "Last week" +msgstr "Попереднього тижня" -#: ../../kde4/app.py:124 ../../gnome/mainwindow.glade:169 -msgid "Shutdown system after snapshot has finished." +#: ../../qt4/restoredialog.py:75 +msgid "Show full Log" msgstr "" -#: ../../kde4/app.py:131 ../../gnome/mainwindow.glade:184 -#: ../../gnome/mainwindow.glade:186 -msgid "Exit" -msgstr "Вийти" - -#: ../../kde4/app.py:186 ../../gnome/mainwindow.glade:289 -msgid "Up" -msgstr "Вгору" - -#: ../../kde4/app.py:199 ../../gnome/mainwindow.glade:325 -msgid "Show hidden files" -msgstr "Показати приховані файли" +#: ../../qt4/settingsdialog.py:68 +msgid "Edit" +msgstr "Редагувати" -#: ../../kde4/app.py:244 -msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +#: ../../qt4/settingsdialog.py:73 +msgid "Modify for Full System Backup" msgstr "" -"В даному знімку\n" -"ця тека відсутня!" -#: ../../kde4/app.py:839 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +#: ../../qt4/settingsdialog.py:77 ../../qt4/settingsdialog.py:451 +msgid "Add" msgstr "" -"Бажаєте перемістити знімок:\n" -"%s" -#: ../../kde4/app.py:1140 ../../kde4/kde4systrayicon.py:117 -msgid "Working..." -msgstr "В процесі ..." - -#: ../../kde4/logviewdialog.py:55 -msgid "Error Log View" -msgstr "Переглянути журнал помилок" - -#: ../../kde4/logviewdialog.py:65 ../../kde4/settingsdialog.py:79 -#: ../../kde4/settingsdialog.py:293 ../../gnome/logviewdialog.glade:73 -#: ../../gnome/settingsdialog.glade:72 -msgid "Profile:" -msgstr "Профіль:" - -#: ../../kde4/logviewdialog.py:77 ../../gnome/logviewdialog.glade:110 -msgid "Filter:" -msgstr "Фільтр:" - -#: ../../kde4/logviewdialog.py:100 ../../gnome/logviewdialog.glade:169 -msgid "[E] Error, [I] Information, [C] Change" -msgstr "[E] Помилка, [I] Інформація, [C] Зміна" - -#: ../../kde4/logviewdialog.py:103 ../../gnome/logviewdialog.glade:195 -msgid "decode paths" +#: ../../qt4/settingsdialog.py:81 ../../qt4/settingsdialog.py:408 +#: ../../qt4/settingsdialog.py:467 +msgid "Remove" msgstr "" -#: ../../kde4/settingsdialog.py:88 -msgid "Edit" -msgstr "Редагувати" - -#: ../../kde4/settingsdialog.py:106 ../../gnome/settingsdialog.glade:1207 +#: ../../qt4/settingsdialog.py:96 msgid "General" msgstr "Загальне" -#: ../../kde4/settingsdialog.py:114 ../../gnome/settingsdialog.glade:199 +#: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "" -#: ../../kde4/settingsdialog.py:127 ../../kde4/settingsdialog.py:1311 +#: ../../qt4/settingsdialog.py:119 +#, python-format +msgid "" +"Warning: %(app)s uses EncFS for encryption. A recent security audit " +"revealed several possible attack vectors for this. Please take a look at 'A " +"NOTE ON SECURITY' in 'man backintime'." +msgstr "" + +#: ../../qt4/settingsdialog.py:129 ../../qt4/settingsdialog.py:1568 msgid "Where to save snapshots" msgstr "Де зберігати резервні копії" -#: ../../kde4/settingsdialog.py:146 +#: ../../qt4/settingsdialog.py:145 +msgid "Folder" +msgstr "" + +#: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" -#: ../../kde4/settingsdialog.py:158 ../../kde4/settingsdialog.py:283 -#: ../../gnome/settingsdialog.glade:323 ../../gnome/settingsdialog.glade:583 -#: ../../gnome/settingsdialog.glade:874 +#: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "Сервер:" -#: ../../kde4/settingsdialog.py:163 ../../gnome/settingsdialog.glade:350 -#: ../../gnome/settingsdialog.glade:610 +#: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "" -#: ../../kde4/settingsdialog.py:168 ../../kde4/settingsdialog.py:288 -#: ../../gnome/settingsdialog.glade:377 ../../gnome/settingsdialog.glade:637 -#: ../../gnome/settingsdialog.glade:902 +#: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "Користувач:" -#: ../../kde4/settingsdialog.py:173 ../../gnome/settingsdialog.glade:416 +#: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" -#: ../../kde4/settingsdialog.py:178 ../../gnome/settingsdialog.glade:459 +#: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" -#: ../../kde4/settingsdialog.py:184 +#: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "" -#: ../../kde4/settingsdialog.py:228 ../../kde4/settingsdialog.py:237 -#: ../../kde4/settingsdialog.py:243 ../../gnome/settingsdialog.glade:703 -#: ../../gnome/settingsdialog.glade:743 +#: ../../qt4/settingsdialog.py:201 +msgid "Key File" +msgstr "" + +#: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 +#: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "" -#: ../../kde4/settingsdialog.py:249 ../../gnome/settingsdialog.glade:775 +#: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" -#: ../../kde4/settingsdialog.py:252 ../../gnome/settingsdialog.glade:792 +#: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" -#: ../../kde4/settingsdialog.py:264 ../../gnome/settingsdialog.glade:968 +#: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "Додатково" -#: ../../kde4/settingsdialog.py:276 ../../gnome/settingsdialog.glade:848 -msgid "Auto Host / User / Profile Id" -msgstr "Автоматична ідентифікація комп’ютера / користувача / профілю" +#: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 +msgid "Full snapshot path: " +msgstr "" -#: ../../kde4/settingsdialog.py:301 +#: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "Розклад" -#: ../../kde4/settingsdialog.py:311 ../../gnome/settingsdialog.glade:1092 +#: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "День:" -#: ../../kde4/settingsdialog.py:322 ../../gnome/settingsdialog.glade:1079 +#: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "Тиждень:" -#: ../../kde4/settingsdialog.py:333 ../../gnome/settingsdialog.glade:1066 +#: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "Година:" -#: ../../kde4/settingsdialog.py:344 ../../gnome/settingsdialog.glade:1053 +#: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "" -#: ../../kde4/settingsdialog.py:353 ../../gnome/settingsdialog.glade:1014 +#: ../../qt4/settingsdialog.py:339 msgid "" -"Run Back In Time periodically with anacron. This is useful if the computer " -"is not running regular." +"Run Back In Time repeatedly. This is useful if the computer is not running " +"regular." msgstr "" -#: ../../kde4/settingsdialog.py:357 ../../gnome/settingsdialog.glade:1040 -msgid "Frequency in days:" +#: ../../qt4/settingsdialog.py:344 +msgid "Every:" msgstr "" -#: ../../kde4/settingsdialog.py:368 ../../gnome/settingsdialog.glade:1026 +#: ../../qt4/settingsdialog.py:362 msgid "" "Run Back In Time as soon as the drive is connected (only once every X " "days).\n" "You will be prompted for your sudo password." msgstr "" -#: ../../kde4/settingsdialog.py:379 ../../gnome/settingsdialog.glade:1310 +#: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Включити" -#: ../../kde4/settingsdialog.py:403 ../../kde4/settingsdialog.py:445 -#: ../../gnome/settingsdialog.glade:1411 +#: ../../qt4/settingsdialog.py:381 +msgid "Include files and folders" +msgstr "Включаючи файли і папки" + +#: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "Додати файл" -#: ../../kde4/settingsdialog.py:408 ../../kde4/settingsdialog.py:450 -#: ../../gnome/settingsdialog.glade:1427 +#: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Додати теку" -#: ../../kde4/settingsdialog.py:418 ../../gnome/settingsdialog.glade:1474 +#: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Виключити" -#: ../../kde4/settingsdialog.py:421 ../../gnome/settingsdialog.glade:1328 +#: ../../qt4/settingsdialog.py:417 msgid "" "Warning: Wildcards ('foo*', '[fF]oo', 'fo?') will be ignored with " "mode 'SSH encrypted'.\n" "Only separate asterisk are allowed ('foo/*', 'foo/**/bar')" msgstr "" -#: ../../kde4/settingsdialog.py:430 +#: ../../qt4/settingsdialog.py:425 +msgid "Exclude patterns, files or folders" +msgstr "Виключити шаблони, файли, або папки" + +#: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "Важлива рекомендація:" -#: ../../kde4/settingsdialog.py:460 ../../gnome/settingsdialog.glade:1905 +#: ../../qt4/settingsdialog.py:463 +msgid "Add default" +msgstr "" + +#: ../../qt4/settingsdialog.py:474 +msgid "Exclude files bigger than: " +msgstr "" + +#: ../../qt4/settingsdialog.py:475 +#, python-format +msgid "" +"Exclude files bigger than value in %(prefix)s.\n" +"With 'Full rsync mode' disabled this will only affect new files\n" +"because for rsync this is a transfer option, not an exclude option.\n" +"So big files that has been backed up before will remain in snapshots\n" +"even if they had changed." +msgstr "" + +#: ../../qt4/settingsdialog.py:493 msgid "Auto-remove" msgstr "Автоматичне видалення" -#: ../../kde4/settingsdialog.py:464 ../../gnome/settingsdialog.glade:1608 +#: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "Старіше ніж:" -#: ../../kde4/settingsdialog.py:478 ../../gnome/settingsdialog.glade:1624 +#: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "Якщо вільного місця менше ніж:" -#: ../../kde4/settingsdialog.py:490 ../../gnome/settingsdialog.glade:1642 +#: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" -#: ../../kde4/settingsdialog.py:514 ../../gnome/settingsdialog.glade:1697 +#: ../../qt4/settingsdialog.py:551 +msgid "Run in background on remote Host." +msgstr "" + +#: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "" -#: ../../kde4/settingsdialog.py:517 ../../kde4/settingsdialog.py:522 -#: ../../gnome/settingsdialog.glade:1705 ../../gnome/settingsdialog.glade:1729 +#: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "день(днів)" -#: ../../kde4/settingsdialog.py:519 ../../gnome/settingsdialog.glade:1717 +#: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "" -#: ../../kde4/settingsdialog.py:524 ../../gnome/settingsdialog.glade:1743 +#: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "" -#: ../../kde4/settingsdialog.py:527 +#: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "тижнів" -#: ../../kde4/settingsdialog.py:529 ../../gnome/settingsdialog.glade:1769 +#: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "" -#: ../../kde4/settingsdialog.py:532 ../../gnome/settingsdialog.glade:1781 +#: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "місяців" -#: ../../kde4/settingsdialog.py:534 ../../gnome/settingsdialog.glade:1795 +#: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "" -#: ../../kde4/settingsdialog.py:537 ../../gnome/settingsdialog.glade:1496 +#: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "Не видаляти названі резервні копії" -#: ../../kde4/settingsdialog.py:546 ../../gnome/settingsdialog.glade:2104 +#: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Параметри" -#: ../../kde4/settingsdialog.py:549 ../../gnome/settingsdialog.glade:1920 +#: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Увімкнути сповіщення" -#: ../../kde4/settingsdialog.py:552 ../../gnome/settingsdialog.glade:1937 +#: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "Вимкнути резервування при роботі від батареї" -#: ../../kde4/settingsdialog.py:555 +#: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" msgstr "Статус живлення не доступний" -#: ../../kde4/settingsdialog.py:558 ../../gnome/settingsdialog.glade:1955 -msgid "Backup files on restore" -msgstr "Зберегти файли під час відновлення" +#: ../../qt4/settingsdialog.py:611 +msgid "Run only one snapshot at a time" +msgstr "" + +#: ../../qt4/settingsdialog.py:612 +msgid "" +"Other snapshots will be blocked until the current snapshot is done.\n" +"This is a global option. So it will effect all profiles for this user.\n" +"But you need to activate this for all other users, too." +msgstr "" + +#: ../../qt4/settingsdialog.py:617 +msgid "Backup replaced files on restore" +msgstr "" -#: ../../kde4/settingsdialog.py:561 ../../gnome/settingsdialog.glade:1972 +#: ../../qt4/settingsdialog.py:618 +#, python-format +msgid "" +"Newer versions of files will be renamed with trailing '%(suffix)s' before " +"restoring.\n" +"If you don't need them anymore you can remove them with '%(cmd)s'" +msgstr "" + +#: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "Ігнорувати помилки (зберігати незавершені копії)" -#: ../../kde4/settingsdialog.py:564 ../../gnome/settingsdialog.glade:1989 +#: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "Використовувати контролюну суму для виявлення змін" -#: ../../kde4/settingsdialog.py:567 ../../gnome/settingsdialog.glade:2006 +#: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "" -#: ../../kde4/settingsdialog.py:568 ../../gnome/settingsdialog.glade:2032 +#: ../../qt4/settingsdialog.py:634 msgid "" -"- snapshots are no read-only\n" -"- destination file-system must support all linux attributes (dates, rights, " +"- snapshots are not read-only\n" +"- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" -#: ../../kde4/settingsdialog.py:575 ../../gnome/settingsdialog.glade:2045 +#: ../../qt4/settingsdialog.py:641 +msgid "Take a new snapshot regardless of there were changes or not." +msgstr "" + +#: ../../qt4/settingsdialog.py:644 msgid "Check for changes (don't take a new snapshot if nothing changed)" msgstr "" -#: ../../kde4/settingsdialog.py:582 +#: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "Рівень ведення журналу:" -#: ../../kde4/settingsdialog.py:597 ../../gnome/settingsdialog.glade:2366 -msgid "Expert Options" -msgstr "Розширені параметри" +#: ../../qt4/settingsdialog.py:656 +msgid "None" +msgstr "Нічого" -#: ../../kde4/settingsdialog.py:600 +#: ../../qt4/settingsdialog.py:658 +msgid "Changes & Errors" +msgstr "Зміни та помилки" + +#: ../../qt4/settingsdialog.py:674 msgid "Change these options only if you really know what you are doing !" msgstr "Змінюйте ці налаштування тільки у випадку, якщо Ви знаєте що робите!" -#: ../../kde4/settingsdialog.py:608 ../../gnome/settingsdialog.glade:2133 -msgid "Run 'nice' as cron job (default: enabled)" -msgstr "Запустити 'nice' як завдання cron (стандартно: увімкнено)" +#: ../../qt4/settingsdialog.py:678 +msgid "Run 'nice':" +msgstr "" + +#: ../../qt4/settingsdialog.py:684 ../../qt4/settingsdialog.py:696 +msgid "as cron job" +msgstr "" -#: ../../kde4/settingsdialog.py:611 ../../gnome/settingsdialog.glade:2150 -msgid "Run 'ionice' as cron job (default: enabled)" -msgstr "Запустити ''ionice'' як завдання cron (стандартно: увімкнено)" +#: ../../qt4/settingsdialog.py:687 ../../qt4/settingsdialog.py:702 +#: ../../qt4/settingsdialog.py:716 +msgid "on remote host" +msgstr "" -#: ../../kde4/settingsdialog.py:614 ../../gnome/settingsdialog.glade:2167 -msgid "Run 'ionice' when taking a manual snapshot (default: disabled)" +#: ../../qt4/settingsdialog.py:690 +msgid "Run 'ionice':" msgstr "" -#: ../../kde4/settingsdialog.py:617 ../../gnome/settingsdialog.glade:2184 -msgid "Run 'nice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:699 +msgid "when taking a manual snapshot" msgstr "" -#: ../../kde4/settingsdialog.py:620 ../../gnome/settingsdialog.glade:2201 -msgid "Run 'ionice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:706 +msgid "Run 'rsync' with 'nocache':" msgstr "" -#: ../../kde4/settingsdialog.py:626 ../../gnome/settingsdialog.glade:2224 +#: ../../qt4/settingsdialog.py:712 +msgid "on local machine" +msgstr "" + +#: ../../qt4/settingsdialog.py:719 +msgid "Redirect stdout to /dev/null in cronjobs." +msgstr "" + +#: ../../qt4/settingsdialog.py:725 +msgid "Redirect stderr to /dev/null in cronjobs." +msgstr "" + +#: ../../qt4/settingsdialog.py:734 msgid "Limit rsync bandwidth usage: " msgstr "" -#: ../../kde4/settingsdialog.py:629 ../../gnome/settingsdialog.glade:2259 +#: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" -#: ../../kde4/settingsdialog.py:634 ../../gnome/settingsdialog.glade:2280 +#: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "Зберігати ACL" -#: ../../kde4/settingsdialog.py:637 ../../gnome/settingsdialog.glade:2297 +#: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "Зберігати додаткові атрибути (xattr)" -#: ../../kde4/settingsdialog.py:640 ../../gnome/settingsdialog.glade:2314 +#: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute links)" msgstr "" "Копіювати ненадійні посилання (працює лише з абсолютними посиланнями)" -#: ../../kde4/settingsdialog.py:643 ../../gnome/settingsdialog.glade:2331 -msgid "Copy links (dereference symbolic links)" -msgstr "Копіювати посилання (слідувати за символьним посиланнях)" - -#: ../../kde4/snapshotsdialog.py:46 ../../kde4/snapshotsdialog.py:173 -#: ../../gnome/snapshotsdialog.glade:385 -msgid "Diff Options" -msgstr "Параметри diff" - -#: ../../kde4/snapshotsdialog.py:56 ../../gnome/snapshotsdialog.glade:314 -msgid "Command:" -msgstr "Команда:" +#: ../../qt4/settingsdialog.py:834 +msgid "Paste additional options to rsync" +msgstr "" -#: ../../kde4/snapshotsdialog.py:60 ../../gnome/snapshotsdialog.glade:322 -msgid "Parameters:" -msgstr "Параметри:" +#: ../../qt4/settingsdialog.py:837 +msgid "" +"Options must be quoted e.g. --exclude-from=\"/path/to/my exclude file\"." +msgstr "" -#: ../../kde4/snapshotsdialog.py:64 ../../gnome/snapshotsdialog.glade:334 -msgid "Use %1 and %2 for path parameters" -msgstr "Використовувати %1 та %2 до пааметрів шляху" +#: ../../qt4/settingsdialog.py:847 +msgid "Add prefix to SSH commands" +msgstr "" -#: ../../kde4/snapshotsdialog.py:123 ../../gnome/snapshotsdialog.glade:184 -#: ../../gnome/snapshotsdialog.glade:186 -msgid "Delete" +#: ../../qt4/settingsdialog.py:850 +#, python-format +msgid "" +"Prefix to run before every command on remote host.\n" +"Variables need to be escaped with \\$FOO.\n" +"This doesn't touch rsync. So to add a prefix\n" +"for rsync use \"%(cb_rsync_options)s\" with\n" +"%(rsync_options_value)s\n" +"\n" +"%(default)s: %(def_value)s" msgstr "" -#: ../../kde4/snapshotsdialog.py:128 ../../gnome/snapshotsdialog.glade:199 -#: ../../gnome/snapshotsdialog.glade:201 -msgid "Select All" +#: ../../qt4/settingsdialog.py:858 ../../qt4/settingsdialog.py:1691 +msgid "default" msgstr "" -#: ../../kde4/snapshotsdialog.py:132 ../../gnome/snapshotsdialog.glade:88 -msgid "List only different snapshots" -msgstr "Список тільки знімків, що розрізняються" +#: ../../qt4/settingsdialog.py:875 +msgid "Restore Config" +msgstr "" -#: ../../kde4/snapshotsdialog.py:139 ../../gnome/snapshotsdialog.glade:110 -msgid "List only equal snapshots to: " +#: ../../qt4/settingsdialog.py:891 +msgid "" +"Full system backup can only create a snapshot to be restored to the same " +"physical disk(s) with the same disk partitioning as from the source; " +"restoring to new physical disks or the same disks with different " +"partitioning will yield a potentially broken and unusable system.\n" +"\n" +"Full system backup will override some settings that may have been " +"customized. Continue?" msgstr "" -#: ../../kde4/snapshotsdialog.py:149 ../../gnome/snapshotsdialog.glade:146 -msgid "Deep check (more accurate, but slow)" -msgstr "Глибока перевірка (більш точна, але повільніша)" +#: ../../qt4/settingsdialog.py:922 +msgid "New profile" +msgstr "Новий профіль" -#: ../../kde4/snapshotsdialog.py:174 -msgid "Go To" -msgstr "Перейти до" +#: ../../qt4/settingsdialog.py:938 +msgid "Rename profile" +msgstr "Перейменувати профіль" -#: ../../gnome/logviewdialog.glade:9 -msgid "Log View" -msgstr "Переглянути Журнал" +#: ../../qt4/settingsdialog.py:952 +#, python-format +msgid "Are you sure you want to delete the profile \"%s\" ?" +msgstr "Ви впевнені, що хочите знищити профіль \"%s\" ?" -#: ../../gnome/logviewdialog.glade:179 -msgid "scroll down automatic" +#: ../../qt4/settingsdialog.py:1191 +msgid "" +"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " +"*/3 for periodic backups every 3 hours" msgstr "" -#: ../../gnome/mainwindow.glade:7 -msgid "Back In Time" -msgstr "Back In Time" +#: ../../qt4/settingsdialog.py:1489 +msgid "Exclude pattern" +msgstr "Виключити по шаблону" -#: ../../gnome/mainwindow.glade:45 -msgid "Backup Now" -msgstr "Створити резервну копію" +#: ../../qt4/settingsdialog.py:1502 +msgid "Exclude file" +msgstr "Виключити файл" -#: ../../gnome/mainwindow.glade:171 -msgid "Shutdown" +#: ../../qt4/settingsdialog.py:1506 +msgid "Exclude folder" +msgstr "Виключити каталог" + +#: ../../qt4/settingsdialog.py:1525 +msgid "Include file" +msgstr "Включить файл" + +#: ../../qt4/settingsdialog.py:1533 ../../qt4/settingsdialog.py:1553 +#, python-format +msgid "" +"\"%s\" is a symlink. The linked target will not be backed up until you " +"include it, too.\n" +"Would you like to include the symlinks target instead?" msgstr "" -#: ../../gnome/mainwindow.glade:287 -msgid "Parent folder" -msgstr "Батьківська тека" +#: ../../qt4/settingsdialog.py:1545 +msgid "Include folder" +msgstr "Включить каталог" -#: ../../gnome/mainwindow.glade:327 -msgid "Hidden files" -msgstr "Приховані файли" +#: ../../qt4/settingsdialog.py:1572 +msgid "Are you sure you want to change snapshots folder ?" +msgstr "Ви впевнені, що бажаєте змінити папку для знімків системи?" -#: ../../gnome/mainwindow.glade:451 -msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +#: ../../qt4/settingsdialog.py:1688 +msgid "enabled" msgstr "" -"В даному знімку\n" -"ця тека відсутня !" -#: ../../gnome/settingsdialog.glade:287 -msgid "Where to save snapshots" -msgstr "Куди зберігати знімки" +#: ../../qt4/settingsdialog.py:1690 +msgid "disabled" +msgstr "" -#: ../../gnome/settingsdialog.glade:483 -msgid "Private key:" +#: ../../qt4/settingsdialog.py:1715 +msgid "Restore Settings" msgstr "" -#: ../../gnome/settingsdialog.glade:534 -msgid "Advanced SSH Settings" +#: ../../qt4/settingsdialog.py:1732 +msgid " and add your user to group 'fuse'" msgstr "" -#: ../../gnome/settingsdialog.glade:552 -msgid "SSH Settings" +#: ../../qt4/settingsdialog.py:1736 +#, python-format +msgid "" +"Please navigate to the snapshot from which you want to restore %(appName)s's " +"configuration. The path may look like: \n" +"%(samplePath)s\n" +"\n" +"If your snapshots are on a remote drive or if they are encrypted you need to " +"manually mount them first. If you use Mode SSH you also may need to set up " +"public key login to the remote host%(addFuse)s.\n" +"Take a look at 'man backintime'." msgstr "" -#: ../../gnome/settingsdialog.glade:815 -msgid "Password" +#: ../../qt4/settingsdialog.py:1794 ../../qt4/settingsdialog.py:1854 +msgid "No config found" msgstr "" -#: ../../gnome/settingsdialog.glade:930 -msgid "Profile Id:" -msgstr "ID профілю" +#: ../../qt4/snapshotsdialog.py:49 ../../qt4/snapshotsdialog.py:173 +msgid "Diff Options" +msgstr "Параметри diff" + +#: ../../qt4/snapshotsdialog.py:56 +msgid "Command:" +msgstr "Команда:" -#: ../../gnome/settingsdialog.glade:1115 -msgid "" -"hours seperate by comma ( e.g. 8,12,18,23) or */3 for periodic backups every " -"3 hours (cron style)" +#: ../../qt4/snapshotsdialog.py:60 +msgid "Parameters:" +msgstr "Параметри:" + +#: ../../qt4/snapshotsdialog.py:64 +msgid "Use %1 and %2 for path parameters" +msgstr "Використовувати %1 та %2 до пааметрів шляху" + +#: ../../qt4/snapshotsdialog.py:106 +msgid "List only different snapshots" +msgstr "Список тільки знімків, що розрізняються" + +#: ../../qt4/snapshotsdialog.py:113 +msgid "List only equal snapshots to: " msgstr "" -#: ../../gnome/settingsdialog.glade:1163 -msgid "Schedule" -msgstr "Розклад" +#: ../../qt4/snapshotsdialog.py:123 +msgid "Deep check (more accurate, but slow)" +msgstr "Глибока перевірка (більш точна, але повільніша)" -#: ../../gnome/settingsdialog.glade:1363 -msgid "Highly recommended:" -msgstr "Важлива рекомендація:" +#: ../../qt4/snapshotsdialog.py:144 +msgid "Delete" +msgstr "" -#: ../../gnome/settingsdialog.glade:1377 -msgid "label" -msgstr "мітка" +#: ../../qt4/snapshotsdialog.py:148 +msgid "Select All" +msgstr "" -#: ../../gnome/settingsdialog.glade:1755 -msgid "week(s)" -msgstr "тижнів" +#: ../../qt4/snapshotsdialog.py:161 +msgid "Diff" +msgstr "Відмінності" -#: ../../gnome/settingsdialog.glade:2069 -msgid "Log level:" -msgstr "Рівень ведення журналу:" +#: ../../qt4/snapshotsdialog.py:172 +msgid "Go To" +msgstr "Перейти до" -#: ../../gnome/settingsdialog.glade:2121 +#: ../../qt4/snapshotsdialog.py:326 +msgid "You can't compare a snapshot to itself" +msgstr "Неможна порівнювати резервну копію саму з собою" + +#: ../../qt4/snapshotsdialog.py:333 +#, python-format +msgid "Command not found: %s" +msgstr "Команду не знайдено: %s" + +#: ../../qt4/snapshotsdialog.py:354 +#, python-format msgid "" -"Change these options only if you really know what you are doing !" -msgstr "Змінюйте ці параметри лише якщо Ви точно знаєте, що робите!" +"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" +msgstr "" -#: ../../gnome/snapshotsdialog.glade:263 -msgid "Diff with" -msgstr "порівняти з" +#: ../../qt4/snapshotsdialog.py:357 +#, python-format +msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +msgstr "" -#: ../../gnome/textinputdialog.glade:7 -msgid "Pattern" -msgstr "Шаблон" +#: ../../qt4/snapshotsdialog.py:359 +msgid "WARNING: This can not be revoked!" +msgstr "" -#: ../../gnome/textinputdialog.glade:70 -msgid "Text" +#: ../../qt4/snapshotsdialog.py:374 +#, python-format +msgid "Exclude \"%s\" from future snapshots?" msgstr "" diff -Nru backintime-1.0.36/common/po/zh_CN.po backintime-1.1.12/common/po/zh_CN.po --- backintime-1.0.36/common/po/zh_CN.po 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/po/zh_CN.po 2016-01-11 18:07:58.000000000 +0000 @@ -7,206 +7,238 @@ msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2013-11-09 22:34+0100\n" -"PO-Revision-Date: 2013-11-05 05:03+0000\n" -"Last-Translator: Christopher Meng \n" +"POT-Creation-Date: 2015-12-19 00:47+0100\n" +"PO-Revision-Date: 2015-09-09 21:50+0000\n" +"Last-Translator: Back In Time Team \n" "Language-Team: Simplified Chinese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Launchpad-Export-Date: 2014-08-06 10:20+0000\n" -"X-Generator: Launchpad (build 17147)\n" +"X-Launchpad-Export-Date: 2016-01-11 17:52+0000\n" +"X-Generator: Launchpad (build 17881)\n" -#: ../../common/config.py:72 +#: ../../common/configfile.py:60 +#, python-format +msgid "Failed to save config: %s" +msgstr "" + +#: ../../common/configfile.py:78 +#, python-format +msgid "Failed to load config: %s" +msgstr "" + +#: ../../common/configfile.py:352 ../../common/configfile.py:414 +#, python-format +msgid "Profile \"%s\" already exists !" +msgstr "\"%s\"配置已存在!" + +#: ../../common/configfile.py:383 +msgid "You can't remove the last profile !" +msgstr "不能删除唯一的配置!" + +#: ../../common/config.py:76 msgid "Disabled" msgstr "已禁用" -#: ../../common/config.py:73 +#: ../../common/config.py:77 msgid "At every boot/reboot" msgstr "重启时" -#: ../../common/config.py:74 +#: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "每5分钟" -#: ../../common/config.py:75 +#: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "每10分钟" -#: ../../common/config.py:76 +#: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "每30分钟" -#: ../../common/config.py:77 +#: ../../common/config.py:81 msgid "Every hour" msgstr "每小时" -#: ../../common/config.py:78 +#: ../../common/config.py:82 msgid "Every 2 hours" msgstr "每2小时" -#: ../../common/config.py:79 +#: ../../common/config.py:83 msgid "Every 4 hours" msgstr "每4小时" -#: ../../common/config.py:80 +#: ../../common/config.py:84 msgid "Every 6 hours" msgstr "每6小时" -#: ../../common/config.py:81 +#: ../../common/config.py:85 msgid "Every 12 hours" msgstr "每12小时" -#: ../../common/config.py:82 +#: ../../common/config.py:86 msgid "Custom Hours" msgstr "自定义" -#: ../../common/config.py:83 +#: ../../common/config.py:87 msgid "Every Day" msgstr "每天" -#: ../../common/config.py:84 -msgid "Daily (anacron)" -msgstr "每天" +#: ../../common/config.py:88 +msgid "Repeatedly (anacron)" +msgstr "" -#: ../../common/config.py:85 +#: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "当设备连接时(udev)" -#: ../../common/config.py:86 +#: ../../common/config.py:90 msgid "Every Week" msgstr "每周" -#: ../../common/config.py:87 +#: ../../common/config.py:91 msgid "Every Month" msgstr "每月" -#: ../../common/config.py:91 +#: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "天" -#: ../../common/config.py:92 +#: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "周" -#: ../../common/config.py:93 +#: ../../common/config.py:97 msgid "Year(s)" msgstr "年" -#: ../../common/config.py:100 +#: ../../common/config.py:101 +msgid "Hour(s)" +msgstr "" + +#: ../../common/config.py:104 +msgid "Month(s)" +msgstr "" + +#: ../../common/config.py:126 ../../qt4/settingsdialog.py:551 msgid " EXPERIMENTAL!" msgstr " 实验功能!" -#: ../../common/config.py:103 +#: ../../common/config.py:129 msgid "Local" msgstr "本地" -#: ../../common/config.py:104 +#: ../../common/config.py:130 msgid "SSH" msgstr "SSH" -#: ../../common/config.py:104 ../../common/config.py:106 -#: ../../gnome/settingsdialog.py:475 ../../kde4/settingsdialog.py:1325 +#: ../../common/config.py:130 ../../common/config.py:132 +#: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "SSH 私钥" -#: ../../common/config.py:105 +#: ../../common/config.py:131 msgid "Local encrypted" msgstr "" -#: ../../common/config.py:105 ../../common/config.py:106 +#: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "加密" -#: ../../common/config.py:106 +#: ../../common/config.py:132 msgid "SSH encrypted" msgstr "" -#: ../../common/config.py:112 +#: ../../common/config.py:135 msgid "Default" msgstr "默认" -#: ../../common/config.py:113 +#: ../../common/config.py:136 msgid "AES128-CTR" msgstr "AES128-CTR" -#: ../../common/config.py:114 +#: ../../common/config.py:137 msgid "AES192-CTR" msgstr "AES192-CTR" -#: ../../common/config.py:115 +#: ../../common/config.py:138 msgid "AES256-CTR" msgstr "AES256-CTR" -#: ../../common/config.py:116 +#: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "ARCFOUR256" -#: ../../common/config.py:117 +#: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "ARCFOUR128" -#: ../../common/config.py:118 +#: ../../common/config.py:141 msgid "AES128-CBC" msgstr "AES128-CBC" -#: ../../common/config.py:119 +#: ../../common/config.py:142 msgid "3DES-CBC" msgstr "3DES-CBC" -#: ../../common/config.py:120 +#: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "Blowfish-CBC" -#: ../../common/config.py:121 +#: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "Cast128-CBC" -#: ../../common/config.py:122 +#: ../../common/config.py:145 msgid "AES192-CBC" msgstr "AES192-CBC" -#: ../../common/config.py:123 +#: ../../common/config.py:146 msgid "AES256-CBC" msgstr "AES256-CBC" -#: ../../common/config.py:124 +#: ../../common/config.py:147 msgid "ARCFOUR" msgstr "ARCFOUR" -#: ../../common/config.py:129 +#: ../../common/config.py:153 msgid "Main profile" msgstr "主要配置。" -#: ../../common/config.py:256 ../../common/config.py:275 -#: ../../common/config.py:286 ../../common/config.py:291 +#: ../../common/config.py:289 ../../common/config.py:296 +#: ../../common/config.py:307 ../../common/config.py:312 +#: ../../qt4/qt4systrayicon.py:61 #, python-format msgid "Profile: \"%s\"" msgstr "配置:\"%s\"" -#: ../../common/config.py:256 +#: ../../common/config.py:289 msgid "Snapshots folder is not valid !" msgstr "快照文件夹无效!" -#: ../../common/config.py:275 +#: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "请至少选择一个文件夹进行备份!" -#: ../../common/config.py:286 +#: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "不能包含备份文件夹!" -#: ../../common/config.py:291 +#: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "不能包含备份文件夹的子文件夹!" -#: ../../common/config.py:361 +#: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s 不是一个文件夹!" -#: ../../common/config.py:376 ../../common/config.py:389 +#: ../../common/config.py:380 +msgid "Host/User/Profile-ID must not be empty!" +msgstr "" + +#: ../../common/config.py:388 ../../common/config.py:420 #, python-format msgid "" "Can't write to: %s\n" @@ -215,62 +247,68 @@ "不能写入: %s\n" "您确定有写入权限吗?" -#: ../../common/config.py:1286 +#: ../../common/config.py:400 +#, python-format msgid "" -"Can't find crontab.\n" -"Are you sure cron is installed ?\n" -"If not you should disable all automatic backups." +"Destination filesystem for '%(path)s' is formatted with FAT which doesn't " +"support hard-links. Please use a native Linux filesystem." msgstr "" -"无法找到 crontab。\n" -"您确定已经安装了 cron?\n" -"如果没有安装,您应当禁用所有自动备份。" -#: ../../common/config.py:1338 +#: ../../common/config.py:405 #, python-format -msgid "Schedule udev doesn't work with mode %s" +msgid "" +"Destination filsystem for '%(path)s' is a SMB mounted share. Please make " +"sure the remote SMB server supports symlinks or activate '%(copyLinks)s' in " +"'%(expertOptions)s'." msgstr "" -#: ../../common/config.py:1342 -#, python-format -msgid "Couldn't find UUID for \"%s\"" -msgstr "无法找到 \"%s\" 的 UUID" +#: ../../common/config.py:408 ../../qt4/settingsdialog.py:815 +msgid "Copy links (dereference symbolic links)" +msgstr "复制链接(废除符号链接)" -#: ../../common/config.py:1379 -msgid "Failed to remove udev rules" -msgstr "移除 udev 规则失败" +#: ../../common/config.py:409 ../../qt4/settingsdialog.py:669 +msgid "Expert Options" +msgstr "专家选项" -#: ../../common/config.py:1385 -msgid "Failed to create udev rules" -msgstr "创建 udev 规则失败" +#: ../../common/config.py:411 +#, python-format +msgid "" +"Destination filesystem for '%(path)s is a sshfs mounted share. sshfs doesn't " +"support hard-links. Please use mode 'SSH' instead." +msgstr "" -#: ../../common/config.py:1420 +#: ../../common/config.py:1407 msgid "" -"Can't find anacron.\n" -"Are you sure anacron is installed ?\n" -"If not you should disable daily anacron backups." +"Can't find crontab.\n" +"Are you sure cron is installed ?\n" +"If not you should disable all automatic backups." msgstr "" -"无法找到 anacron。\n" -"您确定它已被安装了吗?\n" -"如果没有安装,您应该禁用 anacron 的每日备份功能。" +"无法找到 crontab。\n" +"您确定已经安装了 cron?\n" +"如果没有安装,您应当禁用所有自动备份。" -#: ../../common/config.py:1439 -msgid "Please provide your sudo password to install the udev rule." +#: ../../common/config.py:1411 +msgid "Failed to write new crontab." msgstr "" -#: ../../common/config.py:1445 -msgid "Please provide your sudo password to remove unused udev rules." +#: ../../common/config.py:1505 +#, python-format +msgid "" +"Could not install Udev rule for profile %(profile_id)s. DBus Service " +"'%(dbus_interface)s' wasn't available" msgstr "" -#: ../../common/configfile.py:253 ../../common/configfile.py:315 +#: ../../common/config.py:1517 #, python-format -msgid "Profile \"%s\" already exists !" -msgstr "\"%s\"配置已存在!" +msgid "Schedule udev doesn't work with mode %s" +msgstr "" -#: ../../common/configfile.py:284 -msgid "You can't remove the last profile !" -msgstr "不能删除唯一的配置!" +#: ../../common/config.py:1526 +#, python-format +msgid "Couldn't find UUID for \"%s\"" +msgstr "无法找到 \"%s\" 的 UUID" -#: ../../common/encfstools.py:95 +#: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" @@ -281,16 +319,16 @@ "\n" "%(error)s" -#: ../../common/encfstools.py:105 +#: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "无法卸载 encfs %s" -#: ../../common/encfstools.py:149 +#: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "未找到加密文件夹的配置文件" -#: ../../common/encfstools.py:153 +#: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" @@ -298,23 +336,23 @@ "\n" "是否创建一个新的加密文件夹?" -#: ../../common/encfstools.py:154 +#: ../../common/encfstools.py:171 msgid "Cancel" msgstr "取消" -#: ../../common/encfstools.py:157 +#: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "确认密码" -#: ../../common/encfstools.py:161 +#: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "密码不一致" -#: ../../common/encfstools.py:166 +#: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "未找到 encfs。请尝试通过类似 'apt-get install encfs' 的命令进行安装" -#: ../../common/encfstools.py:174 ../../common/sshtools.py:207 +#: ../../common/encfstools.py:196 ../../common/sshtools.py:262 #, python-format msgid "" "%(user)s is not member of group 'fuse'.\n" @@ -322,63 +360,66 @@ "Look at 'man backintime' for further instructions." msgstr "" -#: ../../common/encfstools.py:189 +#: ../../common/encfstools.py:211 msgid "" "encfs version 1.7.2 and before has a bug with option --reverse. Please " "update encfs" msgstr "encfs 1.7.2 及更早的版本中 --reverse 选项存在缺陷,请更新系统中安装的 encfs 版本" -#: ../../common/encfstools.py:453 ../../common/encfstools.py:480 -#: ../../common/snapshots.py:982 ../../common/snapshots.py:1288 -#: ../../kde4/app.py:82 ../../gnome/mainwindow.glade:43 +#: ../../common/encfstools.py:512 ../../common/snapshots.py:1131 +#: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "创建快照" -#: ../../common/mount.py:195 +#: ../../common/mount.py:204 #, python-format msgid "" "Hash collision occurred in hash_id %s. Incrementing global value " "hash_collision and try again." msgstr "在 hash_id %s 中发现哈希碰撞。请递增 hash_collision 的全局设定值并重试。" -#: ../../common/mount.py:246 +#: ../../common/mount.py:259 #, python-format msgid "mountpoint %s not empty." msgstr "挂载点 %s 不为空。" -#: ../../common/mount.py:286 +#: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "解除挂载锁超时" -#: ../../common/password.py:425 +#: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" -#: ../../common/snapshots.py:171 ../../gnome/app.py:1127 -#: ../../kde4/app.py:1014 +#: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "现在" -#: ../../common/snapshots.py:182 ../../gnome/gnometools.py:37 +#: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "发生错误!" -#: ../../common/snapshots.py:282 +#: ../../common/snapshots.py:344 msgid "" "### This log has been decoded with automatic search pattern\n" "### If some paths are not decoded you can manually decode them with:\n" msgstr "" -#: ../../common/snapshots.py:465 +#: ../../common/snapshots.py:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "失败" -#: ../../common/snapshots.py:564 +#: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "恢复权限:" -#: ../../common/snapshots.py:739 +#: ../../common/snapshots.py:752 ../../qt4/app.py:377 ../../qt4/app.py:675 +#: ../../qt4/app.py:692 ../../qt4/qt4systrayicon.py:65 +msgid "Done" +msgstr "已完成" + +#: ../../common/snapshots.py:860 msgid "" "Back In Time changed its backup format.\n" "\n" @@ -387,7 +428,7 @@ "Back In Time 改变了备份的格式。\n" "根据新的格式,您旧的快照可能被移动。这样可以吗?" -#: ../../common/snapshots.py:749 +#: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" @@ -403,13 +444,13 @@ "\n" "(程序能够区分它们)" -#: ../../common/snapshots.py:752 +#: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" msgstr "没有发现配置文件。请重启 Back In Time 以更新配置文件" -#: ../../common/snapshots.py:803 +#: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" @@ -422,7 +463,7 @@ "cannot continue taking snapshots" msgstr "" -#: ../../common/snapshots.py:812 +#: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" @@ -437,7 +478,7 @@ "你可以手动移动这些快照, \n" "如果你已经完成,请重启 Back In Time 以继续" -#: ../../common/snapshots.py:825 +#: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" @@ -446,7 +487,7 @@ "更新成功!\n" "Back In Time 将根据预定时间继续创建快照" -#: ../../common/snapshots.py:830 +#: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" @@ -463,11 +504,11 @@ "\n" "如果您不确定,下次重启 Back In Time 时,您将被再次询问。" -#: ../../common/snapshots.py:839 +#: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "Back In Time 将根据预定时间继续创建快照" -#: ../../common/snapshots.py:841 +#: ../../common/snapshots.py:953 msgid "" "Back In Time still cannot continue taking new snapshots.\n" "Restart Back In Time to see the questions again" @@ -475,7 +516,11 @@ "Back In Time 仍然不能创建快照。\n" "请重启 Back In Time 再次查看问题" -#: ../../common/snapshots.py:913 +#: ../../common/snapshots.py:972 +msgid "Deferring backup while on battery" +msgstr "" + +#: ../../common/snapshots.py:1035 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it." @@ -483,124 +528,129 @@ "找不到快照文件夹。\n" "如果使用的是可移动磁盘,请先连接到电脑。" -#: ../../common/snapshots.py:915 +#: ../../common/snapshots.py:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "等待 %s 秒" -#: ../../common/snapshots.py:941 +#: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "创建快照 %s 失败!!!" -#: ../../common/snapshots.py:950 +#: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "正在完成" -#: ../../common/snapshots.py:1088 +#: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "无法新建文件夹: %s" -#: ../../common/snapshots.py:1107 +#: ../../common/snapshots.py:1217 msgid "..." msgstr "..." -#: ../../common/snapshots.py:1134 +#: ../../common/snapshots.py:1238 +#, python-format +msgid "Found leftover '%s' which can be continued." +msgstr "" + +#: ../../common/snapshots.py:1250 +#, python-format +msgid "Remove leftover '%s' folder from last run" +msgstr "" + +#: ../../common/snapshots.py:1263 #, python-format msgid "Can't remove folder: %s" msgstr "无法删除文件夹: %s" -#: ../../common/snapshots.py:1219 +#: ../../common/snapshots.py:1340 #, python-format msgid "Compare with snapshot %s" msgstr "与快照 %s 比较" -#: ../../common/snapshots.py:1248 +#: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "创建硬链接" -#: ../../common/snapshots.py:1335 +#: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "保存配置文件 ..." -#: ../../common/snapshots.py:1341 +#: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "保存权限 ..." -#: ../../common/snapshots.py:1442 +#: ../../common/snapshots.py:1470 +msgid "Save permission over ssh failed. Retry normal method" +msgstr "" + +#: ../../common/snapshots.py:1521 #, python-format msgid "Can't rename %(new_path)s to %(path)s" msgstr "" -#: ../../common/snapshots.py:1562 -msgid "Remove old snapshots" -msgstr "移除旧的快照" - -#: ../../common/snapshots.py:1586 ../../kde4/settingsdialog.py:501 -#: ../../gnome/settingsdialog.glade:1660 +#: ../../common/snapshots.py:1695 ../../common/snapshots.py:1728 +#: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "智能移除" -#: ../../common/snapshots.py:1591 +#: ../../common/snapshots.py:1704 +msgid "Remove old snapshots" +msgstr "移除旧的快照" + +#: ../../common/snapshots.py:1733 msgid "Try to keep min free space" msgstr "尝试保留最小可用空间" -#: ../../common/snapshots.py:1621 +#: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" -#: ../../common/sshtools.py:106 +#: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "无法挂载 %s" -#: ../../common/sshtools.py:113 +#: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "无法卸载 sshfs %s" -#: ../../common/sshtools.py:187 -#, python-format -msgid "" -"Failed to unlock SSH private key:\n" -"Error: %s" -msgstr "" -"无法解锁 SSH 私钥:\n" -"错误:%s" - -#: ../../common/sshtools.py:194 +#: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "无法解锁 SSH 私钥,可能密码不正确或该密码不适用于 cron。" -#: ../../common/sshtools.py:199 +#: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "未找到 sshfs。请尝试通过类似命令安装 'apt-get install sshfs'" -#: ../../common/sshtools.py:217 +#: ../../common/sshtools.py:278 #, python-format msgid "" "Password-less authentication for %(user)s@%(host)s failed. Look at 'man " "backintime' for further instructions." msgstr "" -#: ../../common/sshtools.py:229 +#: ../../common/sshtools.py:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" -#: ../../common/sshtools.py:254 +#: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "未在 ssh_known_hosts 中找到 %s。" -#: ../../common/sshtools.py:274 +#: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" @@ -609,7 +659,7 @@ "远程路径存在但不是一个目录:\n" " %s" -#: ../../common/sshtools.py:276 +#: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" @@ -618,7 +668,7 @@ "远程路径不可写:\n" " %s" -#: ../../common/sshtools.py:278 +#: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" @@ -627,7 +677,7 @@ "远程路径不可被执行:\n" " %s" -#: ../../common/sshtools.py:280 +#: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" @@ -636,12 +686,12 @@ "无法创建远程路径:\n" " %s" -#: ../../common/sshtools.py:302 +#: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "Ping %s 失败。可能主机未上线或您输入的地址错误。" -#: ../../common/sshtools.py:325 ../../common/sshtools.py:383 +#: ../../common/sshtools.py:423 ../../common/sshtools.py:553 #, python-format msgid "" "Remote host %(host)s doesn't support '%(command)s':\n" @@ -649,7 +699,7 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:387 +#: ../../common/sshtools.py:556 #, python-format msgid "" "Check commands on host %(host)s returned unknown error:\n" @@ -657,96 +707,149 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:400 +#: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "远程主机 %s 不支持硬链接。" -#: ../../gnome/app.py:185 ../../gnome/app.py:594 ../../gnome/app.py:608 -#: ../../kde4/app.py:299 ../../kde4/app.py:570 ../../kde4/app.py:587 -msgid "Done" -msgstr "已完成" +#: ../../qt4/app.py:81 +msgid "Refresh snapshots list" +msgstr "刷新快照列表" + +#: ../../qt4/app.py:85 ../../qt4/app.py:890 +msgid "Snapshot Name" +msgstr "快照名" + +#: ../../qt4/app.py:88 +msgid "Remove Snapshot" +msgstr "移除快照" + +#: ../../qt4/app.py:91 +msgid "View Snapshot Log" +msgstr "查看快照日志" + +#: ../../qt4/app.py:94 +msgid "View Last Log" +msgstr "查看最近的日志" + +#: ../../qt4/app.py:99 ../../qt4/settingsdialog.py:51 +msgid "Settings" +msgstr "设置" + +#: ../../qt4/app.py:104 +msgid "Shutdown" +msgstr "" + +#: ../../qt4/app.py:105 +msgid "Shutdown system after snapshot has finished." +msgstr "" + +#: ../../qt4/app.py:111 +msgid "Exit" +msgstr "退出" -#: ../../gnome/app.py:189 ../../kde4/app.py:143 ../../kde4/app.py:159 -#: ../../gnome/mainwindow.glade:225 +#: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 msgid "Help" msgstr "帮助" -#: ../../gnome/app.py:191 ../../kde4/app.py:146 -#: ../../gnome/mainwindow.glade:223 +#: ../../qt4/app.py:122 +msgid "Config File Help" +msgstr "" + +#: ../../qt4/app.py:125 msgid "Website" msgstr "网站" -#: ../../gnome/app.py:192 ../../kde4/app.py:148 +#: ../../qt4/app.py:127 ../../qt4/app.py:982 +msgid "Changelog" +msgstr "" + +#: ../../qt4/app.py:129 msgid "FAQ" msgstr "常见问题" -#: ../../gnome/app.py:193 ../../kde4/app.py:150 +#: ../../qt4/app.py:131 msgid "Ask a question" msgstr "提出问题" -#: ../../gnome/app.py:194 ../../kde4/app.py:152 +#: ../../qt4/app.py:133 msgid "Report a bug" msgstr "报告 BUG" -#: ../../gnome/app.py:196 ../../kde4/app.py:155 +#: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "关于" -#: ../../gnome/app.py:202 ../../gnome/app.py:887 -#: ../../gnome/restoredialog.py:84 ../../gnome/snapshotsdialog.py:83 -#: ../../gnome/snapshotsdialog.py:244 ../../kde4/app.py:206 -#: ../../kde4/app.py:216 ../../kde4/restoredialog.py:68 -#: ../../kde4/snapshotsdialog.py:111 ../../kde4/snapshotsdialog.py:117 -#: ../../gnome/mainwindow.glade:350 ../../gnome/mainwindow.glade:352 -#: ../../gnome/snapshotsdialog.glade:169 ../../gnome/snapshotsdialog.glade:171 +#: ../../qt4/app.py:163 +msgid "Up" +msgstr "上移" + +#: ../../qt4/app.py:174 ../../qt4/settingsdialog.py:1776 +msgid "Show hidden files" +msgstr "显示隐藏文件" + +#: ../../qt4/app.py:184 ../../qt4/app.py:199 ../../qt4/app.py:233 +#: ../../qt4/restoredialog.py:62 ../../qt4/settingsdialog.py:1818 +#: ../../qt4/snapshotsdialog.py:134 ../../qt4/snapshotsdialog.py:139 msgid "Restore" msgstr "还原" -#: ../../gnome/app.py:203 ../../gnome/app.py:888 ../../gnome/gnometools.py:67 -#: ../../gnome/snapshotsdialog.py:84 ../../gnome/snapshotsdialog.py:245 -#: ../../kde4/app.py:208 ../../kde4/restoredialog.py:42 -#: ../../kde4/snapshotsdialog.py:113 +#: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 +#: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "还原至:" -#: ../../gnome/app.py:205 ../../gnome/app.py:896 ../../gnome/app.py:1146 -#: ../../kde4/app.py:1041 -#, python-format -msgid "Restore '%s'" -msgstr "还原 '%s'" +#: ../../qt4/app.py:194 +msgid "Restore and delete new files" +msgstr "" -#: ../../gnome/app.py:207 ../../gnome/app.py:897 ../../gnome/app.py:1147 -#: ../../kde4/app.py:1042 +#: ../../qt4/app.py:201 #, python-format -msgid "Restore '%s' to ..." -msgstr "还原 '%s' 至 ..." +msgid "" +"Restore selected file or folder.\n" +"If this button is grayed out this is most likely because \"%(now)s\" is " +"selected in left hand snapshots list." +msgstr "" + +#: ../../qt4/app.py:206 ../../qt4/logviewdialog.py:67 +#: ../../qt4/qt4tools.py:160 ../../qt4/snapshotsdialog.py:96 +msgid "Snapshots" +msgstr "快照" + +#: ../../qt4/app.py:213 +msgid "Snapshot" +msgstr "" + +#: ../../qt4/app.py:224 +msgid "View" +msgstr "" -#: ../../gnome/app.py:226 ../../kde4/app.py:235 +#: ../../qt4/app.py:277 msgid "Shortcuts" msgstr "快捷方式" -#: ../../gnome/app.py:249 -msgid "Name" -msgstr "名称" - -#: ../../gnome/app.py:260 -msgid "Size" -msgstr "大小" - -#: ../../gnome/app.py:267 -msgid "Date" -msgstr "日期" - -#: ../../gnome/app.py:286 ../../gnome/app.py:883 -#: ../../gnome/snapshotsdialog.py:116 ../../kde4/app.py:171 -#: ../../kde4/app.py:221 ../../kde4/snapshotsdialog.py:91 -#: ../../gnome/mainwindow.glade:366 ../../gnome/mainwindow.glade:368 -#: ../../gnome/snapshotsdialog.glade:8 -msgid "Snapshots" -msgstr "快照" +#: ../../qt4/app.py:295 +msgid "" +"This folder doesn't exist\n" +"in the current selected snapshot!" +msgstr "" + +#: ../../qt4/app.py:359 +msgid "Add to Include" +msgstr "" -#: ../../gnome/app.py:348 ../../kde4/app.py:362 +#: ../../qt4/app.py:360 +msgid "Add to Exclude" +msgstr "" + +#: ../../qt4/app.py:416 +#, python-format +msgid "" +"%(appName)s is not configured. Would you like to restore a previous " +"configuration?" +msgstr "" + +#: ../../qt4/app.py:440 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it and then press OK" @@ -754,732 +857,793 @@ "找不到快照文件夹。\n" "如果使用的是可移动磁盘,请连接到电脑,然后按 “确定”" -#: ../../gnome/app.py:611 ../../kde4/app.py:590 -msgid "Done, no backup needed" -msgstr "已完成,无需备份。" +#: ../../qt4/app.py:473 +msgid "" +"If you close this window Back In Time will not be able to shutdown your " +"system when the snapshot has finished.\n" +"Do you really want to close?" +msgstr "" -#: ../../gnome/app.py:619 ../../kde4/app.py:598 +#: ../../qt4/app.py:667 ../../qt4/app.py:703 msgid "Working:" msgstr "运行中:" -#: ../../gnome/app.py:623 ../../kde4/app.py:602 +#: ../../qt4/app.py:695 +msgid "Done, no backup needed" +msgstr "已完成,无需备份。" + +#: ../../qt4/app.py:707 msgid "Error:" msgstr "错误:" -#: ../../gnome/app.py:636 ../../kde4/app.py:649 +#: ../../qt4/app.py:726 ../../qt4/qt4systrayicon.py:153 +msgid "Sent:" +msgstr "" + +#: ../../qt4/app.py:727 ../../qt4/qt4systrayicon.py:154 +msgid "Speed:" +msgstr "" + +#: ../../qt4/app.py:728 ../../qt4/qt4systrayicon.py:155 +msgid "ETA:" +msgstr "" + +#: ../../qt4/app.py:777 msgid "Global" msgstr "全局" -#: ../../gnome/app.py:637 ../../kde4/app.py:650 +#: ../../qt4/app.py:778 msgid "Root" msgstr "根目录" -#: ../../gnome/app.py:638 ../../kde4/app.py:651 +#: ../../qt4/app.py:779 msgid "Home" msgstr "主目录" -#: ../../gnome/app.py:662 -msgid "Bookmarks" -msgstr "书签" - -#: ../../gnome/app.py:675 ../../kde4/app.py:662 +#: ../../qt4/app.py:794 msgid "Backup folders" msgstr "备份文件夹" -#: ../../gnome/app.py:701 ../../kde4/app.py:734 -msgid "Today" -msgstr "今天" +#: ../../qt4/app.py:849 +msgid "This is NOT a snapshot but a live view of your local files" +msgstr "" -#: ../../gnome/app.py:705 ../../kde4/app.py:738 -msgid "Yesterday" -msgstr "昨天" +#: ../../qt4/app.py:860 ../../qt4/app.py:1476 +#, python-format +msgid "Last check %s" +msgstr "" -#: ../../gnome/app.py:709 ../../kde4/app.py:742 -msgid "This week" -msgstr "本周" +#: ../../qt4/app.py:928 +#, python-format +msgid "" +"Are you sure you want to remove the snapshot:\n" +"%s" +msgstr "" +"您确定要移除快照:\n" +"%s" -#: ../../gnome/app.py:713 ../../kde4/app.py:746 -msgid "Last week" -msgstr "上周" +#: ../../qt4/app.py:1004 +#, python-format +msgid "" +"Backup local files before overwriting or\n" +"removing with trailing '%(suffix)s'." +msgstr "" -#: ../../gnome/app.py:764 ../../kde4/app.py:398 +#: ../../qt4/app.py:1010 msgid "" -"If you close this window Back In Time will not be able to shutdown your " -"system when the snapshot has finished.\n" -"Do you really want to close?" +"Are you sure you want to remove all newer files in your original folder?" msgstr "" -#: ../../gnome/app.py:881 ../../gnome/snapshotsdialog.py:238 -msgid "Open" -msgstr "打开" +#: ../../qt4/app.py:1014 +msgid "" +"WARNING: deleting files in filesystem root could break your whole system!!!" +msgstr "" -#: ../../gnome/app.py:1056 ../../kde4/app.py:90 ../../kde4/app.py:805 -#: ../../gnome/mainwindow.glade:73 ../../gnome/mainwindow.glade:75 -msgid "Snapshot Name" -msgstr "快照名" +#: ../../qt4/app.py:1016 +msgid "Files to be restored:" +msgstr "" -#: ../../gnome/app.py:1075 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +#: ../../qt4/app.py:1031 +msgid "Do you really want to restore this files(s):" msgstr "" -"您确定要移除快照:\n" -"%s" -#: ../../gnome/app.py:1123 ../../kde4/app.py:1010 +#: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "快照:%s" -#: ../../gnome/app.py:1124 ../../kde4/app.py:1011 +#: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "查看快照 %s" -#: ../../gnome/app.py:1126 ../../kde4/app.py:1013 +#: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "查看当前磁盘内容" -#: ../../gnome/logviewdialog.py:106 ../../gnome/settingsdialog.py:414 -#: ../../kde4/logviewdialog.py:83 ../../kde4/settingsdialog.py:590 -msgid "All" -msgstr "所有的" +#: ../../qt4/app.py:1268 +#, python-format +msgid "Restore '%s'" +msgstr "还原 '%s'" -#: ../../gnome/logviewdialog.py:107 ../../gnome/settingsdialog.py:412 -#: ../../kde4/logviewdialog.py:84 ../../kde4/settingsdialog.py:588 -msgid "Errors" -msgstr "错误" +#: ../../qt4/app.py:1269 +#, python-format +msgid "Restore '%s' to ..." +msgstr "还原 '%s' 至 ..." -#: ../../gnome/logviewdialog.py:112 ../../kde4/logviewdialog.py:89 -msgid "Changes" -msgstr "变更" +#: ../../qt4/app.py:1270 +#, python-format +msgid "Restore '%s' and delete new files" +msgstr "" -#: ../../gnome/logviewdialog.py:115 ../../kde4/logviewdialog.py:92 -msgid "Informations" -msgstr "提示信息" +#: ../../qt4/app.py:1368 ../../qt4/app.py:1385 +msgid "Authors" +msgstr "" -#: ../../gnome/settingsdialog.py:235 ../../kde4/settingsdialog.py:387 -msgid "Include files and folders" -msgstr "包含文件和文件夹" +#: ../../qt4/app.py:1369 ../../qt4/app.py:1388 +msgid "Translations" +msgstr "" -#: ../../gnome/settingsdialog.py:264 -msgid "Exclude patterns, files or folders" -msgstr "不包含模式,文件或文件夹" +#: ../../qt4/app.py:1370 ../../qt4/app.py:1391 +msgid "License" +msgstr "" -#: ../../gnome/settingsdialog.py:411 ../../kde4/settingsdialog.py:587 -msgid "None" -msgstr "空" - -#: ../../gnome/settingsdialog.py:413 ../../kde4/settingsdialog.py:589 -msgid "Changes & Errors" -msgstr "变更 & 错误" - -#: ../../gnome/settingsdialog.py:458 -msgid "Snapshots folder" -msgstr "快照目录" - -#: ../../gnome/settingsdialog.py:466 ../../kde4/settingsdialog.py:1314 -msgid "Are you sure you want to change snapshots folder ?" -msgstr "确定要改变快照文件夹吗?" - -#: ../../gnome/settingsdialog.py:901 ../../kde4/settingsdialog.py:914 -msgid "" -"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " -"*/3 for periodic backups every 3 hours" +#: ../../qt4/logviewdialog.py:49 +msgid "Last Log View" msgstr "" -#: ../../gnome/settingsdialog.py:1141 ../../kde4/settingsdialog.py:653 -msgid "New profile" -msgstr "新建配置" - -#: ../../gnome/settingsdialog.py:1155 ../../kde4/settingsdialog.py:669 -msgid "Rename profile" -msgstr "重命名配置" - -#: ../../gnome/settingsdialog.py:1167 ../../kde4/settingsdialog.py:683 -#, python-format -msgid "Are you sure you want to delete the profile \"%s\" ?" -msgstr "是否确定删除配置“%s”?" - -#: ../../gnome/settingsdialog.py:1173 ../../kde4/settingsdialog.py:1292 -msgid "Include folder" -msgstr "包含文件夹" - -#: ../../gnome/settingsdialog.py:1193 ../../kde4/settingsdialog.py:1278 -msgid "Include file" -msgstr "包含文件" - -#: ../../gnome/settingsdialog.py:1235 ../../kde4/settingsdialog.py:1241 -msgid "Exclude pattern" -msgstr "排除模式" +#: ../../qt4/logviewdialog.py:51 +msgid "Snapshot Log View" +msgstr "" -#: ../../gnome/settingsdialog.py:1240 ../../kde4/settingsdialog.py:1251 -msgid "Exclude patterns can't contain ':' char !" -msgstr "排除格式里不能包含英文冒号 ':' 字符!" +#: ../../qt4/logviewdialog.py:59 ../../qt4/settingsdialog.py:59 +#: ../../qt4/settingsdialog.py:274 ../../qt4/settingsdialog.py:1899 +msgid "Profile:" +msgstr "配置:" -#: ../../gnome/settingsdialog.py:1246 ../../kde4/settingsdialog.py:1257 -msgid "Exclude file" -msgstr "排除文件" +#: ../../qt4/logviewdialog.py:81 +msgid "Filter:" +msgstr "过滤器" -#: ../../gnome/settingsdialog.py:1257 ../../kde4/settingsdialog.py:1261 -msgid "Exclude folder" -msgstr "排除文件夹" +#: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 +msgid "All" +msgstr "所有的" -#: ../../gnome/snapshotsdialog.py:240 -msgid "Jump to" -msgstr "跳至" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 +#: ../../qt4/settingsdialog.py:657 +msgid "Errors" +msgstr "错误" -#: ../../gnome/snapshotsdialog.py:248 ../../kde4/snapshotsdialog.py:164 -msgid "Diff" -msgstr "Diff" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 +msgid "Changes" +msgstr "变更" -#: ../../gnome/snapshotsdialog.py:277 ../../kde4/snapshotsdialog.py:339 -msgid "You can't compare a snapshot to itself" -msgstr "不能将快照与其自身比较" +#: ../../qt4/logviewdialog.py:92 +msgid "Informations" +msgstr "提示信息" -#: ../../gnome/snapshotsdialog.py:284 ../../kde4/snapshotsdialog.py:346 -#, python-format -msgid "Command not found: %s" -msgstr "命令未找到:%s" +#: ../../qt4/logviewdialog.py:101 +msgid "[E] Error, [I] Information, [C] Change" +msgstr "[E] 错误,[I] 通知,[C] 变更" -#: ../../gnome/snapshotsdialog.py:307 ../../kde4/snapshotsdialog.py:367 -#, python-format -msgid "" -"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" +#: ../../qt4/logviewdialog.py:104 +msgid "decode paths" msgstr "" -#: ../../gnome/snapshotsdialog.py:310 ../../kde4/snapshotsdialog.py:370 -#, python-format -msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +#: ../../qt4/messagebox.py:56 +msgid "Error" msgstr "" -#: ../../gnome/snapshotsdialog.py:312 ../../kde4/snapshotsdialog.py:372 -msgid "WARNING: This can not be revoked!" -msgstr "警告:该操作无法撤销!" +#: ../../qt4/messagebox.py:62 ../../qt4/messagebox.py:68 +msgid "Question" +msgstr "" -#: ../../gnome/snapshotsdialog.py:317 ../../kde4/snapshotsdialog.py:377 -#, python-format -msgid "Exclude \"%s\" from future snapshots?" +#: ../../qt4/qt4systrayicon.py:69 +msgid "Start BackInTime" msgstr "" -#: ../../kde4/app.py:86 ../../gnome/mainwindow.glade:58 -#: ../../gnome/mainwindow.glade:60 -msgid "Refresh snapshots list" -msgstr "刷新快照列表" +#: ../../qt4/qt4systrayicon.py:124 +msgid "Working..." +msgstr "正在进行..." -#: ../../kde4/app.py:94 ../../gnome/mainwindow.glade:88 -#: ../../gnome/mainwindow.glade:90 -msgid "Remove Snapshot" -msgstr "移除快照" +#: ../../qt4/qt4tools.py:178 +msgid "Today" +msgstr "今天" -#: ../../kde4/app.py:98 ../../gnome/mainwindow.glade:105 -msgid "View Snapshot Log" -msgstr "查看快照日志" +#: ../../qt4/qt4tools.py:183 +msgid "Yesterday" +msgstr "昨天" -#: ../../kde4/app.py:102 ../../gnome/mainwindow.glade:121 -msgid "View Last Log" -msgstr "查看最近的日志" +#: ../../qt4/qt4tools.py:188 +msgid "This week" +msgstr "本周" -#: ../../kde4/app.py:108 ../../kde4/settingsdialog.py:69 -#: ../../gnome/mainwindow.glade:144 ../../gnome/mainwindow.glade:146 -#: ../../gnome/settingsdialog.glade:7 -msgid "Settings" -msgstr "设置" +#: ../../qt4/qt4tools.py:193 +msgid "Last week" +msgstr "上周" -#: ../../kde4/app.py:124 ../../gnome/mainwindow.glade:169 -msgid "Shutdown system after snapshot has finished." +#: ../../qt4/restoredialog.py:75 +msgid "Show full Log" msgstr "" -#: ../../kde4/app.py:131 ../../gnome/mainwindow.glade:184 -#: ../../gnome/mainwindow.glade:186 -msgid "Exit" -msgstr "退出" - -#: ../../kde4/app.py:186 ../../gnome/mainwindow.glade:289 -msgid "Up" -msgstr "上移" - -#: ../../kde4/app.py:199 ../../gnome/mainwindow.glade:325 -msgid "Show hidden files" -msgstr "显示隐藏文件" +#: ../../qt4/settingsdialog.py:68 +msgid "Edit" +msgstr "编辑" -#: ../../kde4/app.py:244 -msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +#: ../../qt4/settingsdialog.py:73 +msgid "Modify for Full System Backup" msgstr "" -"该文件夹不存在于\n" -"当前快照中!" -#: ../../kde4/app.py:839 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +#: ../../qt4/settingsdialog.py:77 ../../qt4/settingsdialog.py:451 +msgid "Add" msgstr "" -"您确定要移除快照:\n" -"%s" - -#: ../../kde4/app.py:1140 ../../kde4/kde4systrayicon.py:117 -msgid "Working..." -msgstr "正在进行..." - -#: ../../kde4/logviewdialog.py:55 -msgid "Error Log View" -msgstr "错误日志查看" - -#: ../../kde4/logviewdialog.py:65 ../../kde4/settingsdialog.py:79 -#: ../../kde4/settingsdialog.py:293 ../../gnome/logviewdialog.glade:73 -#: ../../gnome/settingsdialog.glade:72 -msgid "Profile:" -msgstr "配置:" -#: ../../kde4/logviewdialog.py:77 ../../gnome/logviewdialog.glade:110 -msgid "Filter:" -msgstr "过滤器" - -#: ../../kde4/logviewdialog.py:100 ../../gnome/logviewdialog.glade:169 -msgid "[E] Error, [I] Information, [C] Change" -msgstr "[E] 错误,[I] 通知,[C] 变更" - -#: ../../kde4/logviewdialog.py:103 ../../gnome/logviewdialog.glade:195 -msgid "decode paths" +#: ../../qt4/settingsdialog.py:81 ../../qt4/settingsdialog.py:408 +#: ../../qt4/settingsdialog.py:467 +msgid "Remove" msgstr "" -#: ../../kde4/settingsdialog.py:88 -msgid "Edit" -msgstr "编辑" - -#: ../../kde4/settingsdialog.py:106 ../../gnome/settingsdialog.glade:1207 +#: ../../qt4/settingsdialog.py:96 msgid "General" msgstr "常规" -#: ../../kde4/settingsdialog.py:114 ../../gnome/settingsdialog.glade:199 +#: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "模式:" -#: ../../kde4/settingsdialog.py:127 ../../kde4/settingsdialog.py:1311 +#: ../../qt4/settingsdialog.py:119 +#, python-format +msgid "" +"Warning: %(app)s uses EncFS for encryption. A recent security audit " +"revealed several possible attack vectors for this. Please take a look at 'A " +"NOTE ON SECURITY' in 'man backintime'." +msgstr "" + +#: ../../qt4/settingsdialog.py:129 ../../qt4/settingsdialog.py:1568 msgid "Where to save snapshots" msgstr "何处保存快照" -#: ../../kde4/settingsdialog.py:146 +#: ../../qt4/settingsdialog.py:145 +msgid "Folder" +msgstr "" + +#: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "SSH 设置" -#: ../../kde4/settingsdialog.py:158 ../../kde4/settingsdialog.py:283 -#: ../../gnome/settingsdialog.glade:323 ../../gnome/settingsdialog.glade:583 -#: ../../gnome/settingsdialog.glade:874 +#: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "主机:" -#: ../../kde4/settingsdialog.py:163 ../../gnome/settingsdialog.glade:350 -#: ../../gnome/settingsdialog.glade:610 +#: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "端口:" -#: ../../kde4/settingsdialog.py:168 ../../kde4/settingsdialog.py:288 -#: ../../gnome/settingsdialog.glade:377 ../../gnome/settingsdialog.glade:637 -#: ../../gnome/settingsdialog.glade:902 +#: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "用户名:" -#: ../../kde4/settingsdialog.py:173 ../../gnome/settingsdialog.glade:416 +#: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "路径:" -#: ../../kde4/settingsdialog.py:178 ../../gnome/settingsdialog.glade:459 +#: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" -#: ../../kde4/settingsdialog.py:184 +#: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "私钥:" -#: ../../kde4/settingsdialog.py:228 ../../kde4/settingsdialog.py:237 -#: ../../kde4/settingsdialog.py:243 ../../gnome/settingsdialog.glade:703 -#: ../../gnome/settingsdialog.glade:743 +#: ../../qt4/settingsdialog.py:201 +msgid "Key File" +msgstr "" + +#: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 +#: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "密码" -#: ../../kde4/settingsdialog.py:249 ../../gnome/settingsdialog.glade:775 +#: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "保存密码至密钥环" -#: ../../kde4/settingsdialog.py:252 ../../gnome/settingsdialog.glade:792 +#: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" -#: ../../kde4/settingsdialog.py:264 ../../gnome/settingsdialog.glade:968 +#: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "高级" -#: ../../kde4/settingsdialog.py:276 ../../gnome/settingsdialog.glade:848 -msgid "Auto Host / User / Profile Id" -msgstr "自动解析 /User/Profile Id" +#: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 +msgid "Full snapshot path: " +msgstr "" -#: ../../kde4/settingsdialog.py:301 +#: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "计划任务" -#: ../../kde4/settingsdialog.py:311 ../../gnome/settingsdialog.glade:1092 +#: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "日:" -#: ../../kde4/settingsdialog.py:322 ../../gnome/settingsdialog.glade:1079 +#: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "工作日:" -#: ../../kde4/settingsdialog.py:333 ../../gnome/settingsdialog.glade:1066 +#: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "小时:" -#: ../../kde4/settingsdialog.py:344 ../../gnome/settingsdialog.glade:1053 +#: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "小时:" -#: ../../kde4/settingsdialog.py:353 ../../gnome/settingsdialog.glade:1014 +#: ../../qt4/settingsdialog.py:339 msgid "" -"Run Back In Time periodically with anacron. This is useful if the computer " -"is not running regular." -msgstr "通过 anacron 定时执行 Back In Time。在电脑不常用时非常有效。" +"Run Back In Time repeatedly. This is useful if the computer is not running " +"regular." +msgstr "" -#: ../../kde4/settingsdialog.py:357 ../../gnome/settingsdialog.glade:1040 -msgid "Frequency in days:" -msgstr "执行频率:" +#: ../../qt4/settingsdialog.py:344 +msgid "Every:" +msgstr "" -#: ../../kde4/settingsdialog.py:368 ../../gnome/settingsdialog.glade:1026 +#: ../../qt4/settingsdialog.py:362 msgid "" "Run Back In Time as soon as the drive is connected (only once every X " "days).\n" "You will be prompted for your sudo password." msgstr "" -#: ../../kde4/settingsdialog.py:379 ../../gnome/settingsdialog.glade:1310 +#: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "包含" -#: ../../kde4/settingsdialog.py:403 ../../kde4/settingsdialog.py:445 -#: ../../gnome/settingsdialog.glade:1411 +#: ../../qt4/settingsdialog.py:381 +msgid "Include files and folders" +msgstr "包含文件和文件夹" + +#: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "添加文件" -#: ../../kde4/settingsdialog.py:408 ../../kde4/settingsdialog.py:450 -#: ../../gnome/settingsdialog.glade:1427 +#: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "添加文件夹" -#: ../../kde4/settingsdialog.py:418 ../../gnome/settingsdialog.glade:1474 +#: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "排除" -#: ../../kde4/settingsdialog.py:421 ../../gnome/settingsdialog.glade:1328 +#: ../../qt4/settingsdialog.py:417 msgid "" "Warning: Wildcards ('foo*', '[fF]oo', 'fo?') will be ignored with " "mode 'SSH encrypted'.\n" "Only separate asterisk are allowed ('foo/*', 'foo/**/bar')" msgstr "" -#: ../../kde4/settingsdialog.py:430 +#: ../../qt4/settingsdialog.py:425 +msgid "Exclude patterns, files or folders" +msgstr "不包含模式,文件或文件夹" + +#: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "强烈推荐:" -#: ../../kde4/settingsdialog.py:460 ../../gnome/settingsdialog.glade:1905 +#: ../../qt4/settingsdialog.py:463 +msgid "Add default" +msgstr "" + +#: ../../qt4/settingsdialog.py:474 +msgid "Exclude files bigger than: " +msgstr "" + +#: ../../qt4/settingsdialog.py:475 +#, python-format +msgid "" +"Exclude files bigger than value in %(prefix)s.\n" +"With 'Full rsync mode' disabled this will only affect new files\n" +"because for rsync this is a transfer option, not an exclude option.\n" +"So big files that has been backed up before will remain in snapshots\n" +"even if they had changed." +msgstr "" + +#: ../../qt4/settingsdialog.py:493 msgid "Auto-remove" msgstr "自动移除" -#: ../../kde4/settingsdialog.py:464 ../../gnome/settingsdialog.glade:1608 +#: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "早于:" -#: ../../kde4/settingsdialog.py:478 ../../gnome/settingsdialog.glade:1624 +#: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "如果磁盘可用空间少于:" -#: ../../kde4/settingsdialog.py:490 ../../gnome/settingsdialog.glade:1642 +#: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" -#: ../../kde4/settingsdialog.py:514 ../../gnome/settingsdialog.glade:1697 +#: ../../qt4/settingsdialog.py:551 +msgid "Run in background on remote Host." +msgstr "" + +#: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "保留最新的所有快照" -#: ../../kde4/settingsdialog.py:517 ../../kde4/settingsdialog.py:522 -#: ../../gnome/settingsdialog.glade:1705 ../../gnome/settingsdialog.glade:1729 +#: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "天" -#: ../../kde4/settingsdialog.py:519 ../../gnome/settingsdialog.glade:1717 +#: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "每天保留一个最新的快照" -#: ../../kde4/settingsdialog.py:524 ../../gnome/settingsdialog.glade:1743 +#: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "每周保留一个最新的快照" -#: ../../kde4/settingsdialog.py:527 +#: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "周" -#: ../../kde4/settingsdialog.py:529 ../../gnome/settingsdialog.glade:1769 +#: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "每月保留一个最新的快照" -#: ../../kde4/settingsdialog.py:532 ../../gnome/settingsdialog.glade:1781 +#: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "月" -#: ../../kde4/settingsdialog.py:534 ../../gnome/settingsdialog.glade:1795 +#: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "每年保留一个快照" -#: ../../kde4/settingsdialog.py:537 ../../gnome/settingsdialog.glade:1496 +#: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "不要移除已命名的快照" -#: ../../kde4/settingsdialog.py:546 ../../gnome/settingsdialog.glade:2104 +#: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "选项" -#: ../../kde4/settingsdialog.py:549 ../../gnome/settingsdialog.glade:1920 +#: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "启用通知" -#: ../../kde4/settingsdialog.py:552 ../../gnome/settingsdialog.glade:1937 +#: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "使用电池时禁用快照" -#: ../../kde4/settingsdialog.py:555 +#: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" msgstr "无法从系统中获取电源状态" -#: ../../kde4/settingsdialog.py:558 ../../gnome/settingsdialog.glade:1955 -msgid "Backup files on restore" -msgstr "还原时备份文件" +#: ../../qt4/settingsdialog.py:611 +msgid "Run only one snapshot at a time" +msgstr "" + +#: ../../qt4/settingsdialog.py:612 +msgid "" +"Other snapshots will be blocked until the current snapshot is done.\n" +"This is a global option. So it will effect all profiles for this user.\n" +"But you need to activate this for all other users, too." +msgstr "" + +#: ../../qt4/settingsdialog.py:617 +msgid "Backup replaced files on restore" +msgstr "" + +#: ../../qt4/settingsdialog.py:618 +#, python-format +msgid "" +"Newer versions of files will be renamed with trailing '%(suffix)s' before " +"restoring.\n" +"If you don't need them anymore you can remove them with '%(cmd)s'" +msgstr "" -#: ../../kde4/settingsdialog.py:561 ../../gnome/settingsdialog.glade:1972 +#: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "忽略错误并继续(保留不完整的快照)" -#: ../../kde4/settingsdialog.py:564 ../../gnome/settingsdialog.glade:1989 +#: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "使用校验检测变更" -#: ../../kde4/settingsdialog.py:567 ../../gnome/settingsdialog.glade:2006 +#: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "完整的 rsync 模式。可能会更快,但是:" -#: ../../kde4/settingsdialog.py:568 ../../gnome/settingsdialog.glade:2032 +#: ../../qt4/settingsdialog.py:634 msgid "" -"- snapshots are no read-only\n" -"- destination file-system must support all linux attributes (dates, rights, " +"- snapshots are not read-only\n" +"- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" "- 快照非只读\n" "- 目标文件系统必须支持所有的 Linux 属性(如时间,权限,用户,组等等)" -#: ../../kde4/settingsdialog.py:575 ../../gnome/settingsdialog.glade:2045 +#: ../../qt4/settingsdialog.py:641 +msgid "Take a new snapshot regardless of there were changes or not." +msgstr "" + +#: ../../qt4/settingsdialog.py:644 msgid "Check for changes (don't take a new snapshot if nothing changed)" msgstr "检查变更(如果没有任何变更,不要创建新的快照)" -#: ../../kde4/settingsdialog.py:582 +#: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "日志级别" -#: ../../kde4/settingsdialog.py:597 ../../gnome/settingsdialog.glade:2366 -msgid "Expert Options" -msgstr "专家选项" +#: ../../qt4/settingsdialog.py:656 +msgid "None" +msgstr "空" + +#: ../../qt4/settingsdialog.py:658 +msgid "Changes & Errors" +msgstr "变更 & 错误" -#: ../../kde4/settingsdialog.py:600 +#: ../../qt4/settingsdialog.py:674 msgid "Change these options only if you really know what you are doing !" msgstr "除非您知道自己在干什么,否则不要变更这些选项!" -#: ../../kde4/settingsdialog.py:608 ../../gnome/settingsdialog.glade:2133 -msgid "Run 'nice' as cron job (default: enabled)" -msgstr "运行 nice 命令来作为 cron任务 (默认:已启用)" +#: ../../qt4/settingsdialog.py:678 +msgid "Run 'nice':" +msgstr "" + +#: ../../qt4/settingsdialog.py:684 ../../qt4/settingsdialog.py:696 +msgid "as cron job" +msgstr "" + +#: ../../qt4/settingsdialog.py:687 ../../qt4/settingsdialog.py:702 +#: ../../qt4/settingsdialog.py:716 +msgid "on remote host" +msgstr "" + +#: ../../qt4/settingsdialog.py:690 +msgid "Run 'ionice':" +msgstr "" + +#: ../../qt4/settingsdialog.py:699 +msgid "when taking a manual snapshot" +msgstr "" -#: ../../kde4/settingsdialog.py:611 ../../gnome/settingsdialog.glade:2150 -msgid "Run 'ionice' as cron job (default: enabled)" -msgstr "将 “ionice'” 作为 cron 任务运行 (默认:启用)" +#: ../../qt4/settingsdialog.py:706 +msgid "Run 'rsync' with 'nocache':" +msgstr "" -#: ../../kde4/settingsdialog.py:614 ../../gnome/settingsdialog.glade:2167 -msgid "Run 'ionice' when taking a manual snapshot (default: disabled)" -msgstr "当手动创建快照时运行 'ionice' (默认:禁用)" +#: ../../qt4/settingsdialog.py:712 +msgid "on local machine" +msgstr "" -#: ../../kde4/settingsdialog.py:617 ../../gnome/settingsdialog.glade:2184 -msgid "Run 'nice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:719 +msgid "Redirect stdout to /dev/null in cronjobs." msgstr "" -#: ../../kde4/settingsdialog.py:620 ../../gnome/settingsdialog.glade:2201 -msgid "Run 'ionice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:725 +msgid "Redirect stderr to /dev/null in cronjobs." msgstr "" -#: ../../kde4/settingsdialog.py:626 ../../gnome/settingsdialog.glade:2224 +#: ../../qt4/settingsdialog.py:734 msgid "Limit rsync bandwidth usage: " msgstr "限制 rsync 使用带宽: " -#: ../../kde4/settingsdialog.py:629 ../../gnome/settingsdialog.glade:2259 +#: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr " KB/秒" -#: ../../kde4/settingsdialog.py:634 ../../gnome/settingsdialog.glade:2280 +#: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "保留 ACL" -#: ../../kde4/settingsdialog.py:637 ../../gnome/settingsdialog.glade:2297 +#: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "保留扩展属性 (xattr)" -#: ../../kde4/settingsdialog.py:640 ../../gnome/settingsdialog.glade:2314 +#: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute links)" msgstr "复制不安全的链接(仅绝对链接有效)" -#: ../../kde4/settingsdialog.py:643 ../../gnome/settingsdialog.glade:2331 -msgid "Copy links (dereference symbolic links)" -msgstr "复制链接(废除符号链接)" +#: ../../qt4/settingsdialog.py:834 +msgid "Paste additional options to rsync" +msgstr "" + +#: ../../qt4/settingsdialog.py:837 +msgid "" +"Options must be quoted e.g. --exclude-from=\"/path/to/my exclude file\"." +msgstr "" + +#: ../../qt4/settingsdialog.py:847 +msgid "Add prefix to SSH commands" +msgstr "" + +#: ../../qt4/settingsdialog.py:850 +#, python-format +msgid "" +"Prefix to run before every command on remote host.\n" +"Variables need to be escaped with \\$FOO.\n" +"This doesn't touch rsync. So to add a prefix\n" +"for rsync use \"%(cb_rsync_options)s\" with\n" +"%(rsync_options_value)s\n" +"\n" +"%(default)s: %(def_value)s" +msgstr "" + +#: ../../qt4/settingsdialog.py:858 ../../qt4/settingsdialog.py:1691 +msgid "default" +msgstr "" + +#: ../../qt4/settingsdialog.py:875 +msgid "Restore Config" +msgstr "" + +#: ../../qt4/settingsdialog.py:891 +msgid "" +"Full system backup can only create a snapshot to be restored to the same " +"physical disk(s) with the same disk partitioning as from the source; " +"restoring to new physical disks or the same disks with different " +"partitioning will yield a potentially broken and unusable system.\n" +"\n" +"Full system backup will override some settings that may have been " +"customized. Continue?" +msgstr "" + +#: ../../qt4/settingsdialog.py:922 +msgid "New profile" +msgstr "新建配置" + +#: ../../qt4/settingsdialog.py:938 +msgid "Rename profile" +msgstr "重命名配置" + +#: ../../qt4/settingsdialog.py:952 +#, python-format +msgid "Are you sure you want to delete the profile \"%s\" ?" +msgstr "是否确定删除配置“%s”?" + +#: ../../qt4/settingsdialog.py:1191 +msgid "" +"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " +"*/3 for periodic backups every 3 hours" +msgstr "" + +#: ../../qt4/settingsdialog.py:1489 +msgid "Exclude pattern" +msgstr "排除模式" + +#: ../../qt4/settingsdialog.py:1502 +msgid "Exclude file" +msgstr "排除文件" + +#: ../../qt4/settingsdialog.py:1506 +msgid "Exclude folder" +msgstr "排除文件夹" + +#: ../../qt4/settingsdialog.py:1525 +msgid "Include file" +msgstr "包含文件" + +#: ../../qt4/settingsdialog.py:1533 ../../qt4/settingsdialog.py:1553 +#, python-format +msgid "" +"\"%s\" is a symlink. The linked target will not be backed up until you " +"include it, too.\n" +"Would you like to include the symlinks target instead?" +msgstr "" -#: ../../kde4/snapshotsdialog.py:46 ../../kde4/snapshotsdialog.py:173 -#: ../../gnome/snapshotsdialog.glade:385 +#: ../../qt4/settingsdialog.py:1545 +msgid "Include folder" +msgstr "包含文件夹" + +#: ../../qt4/settingsdialog.py:1572 +msgid "Are you sure you want to change snapshots folder ?" +msgstr "确定要改变快照文件夹吗?" + +#: ../../qt4/settingsdialog.py:1688 +msgid "enabled" +msgstr "" + +#: ../../qt4/settingsdialog.py:1690 +msgid "disabled" +msgstr "" + +#: ../../qt4/settingsdialog.py:1715 +msgid "Restore Settings" +msgstr "" + +#: ../../qt4/settingsdialog.py:1732 +msgid " and add your user to group 'fuse'" +msgstr "" + +#: ../../qt4/settingsdialog.py:1736 +#, python-format +msgid "" +"Please navigate to the snapshot from which you want to restore %(appName)s's " +"configuration. The path may look like: \n" +"%(samplePath)s\n" +"\n" +"If your snapshots are on a remote drive or if they are encrypted you need to " +"manually mount them first. If you use Mode SSH you also may need to set up " +"public key login to the remote host%(addFuse)s.\n" +"Take a look at 'man backintime'." +msgstr "" + +#: ../../qt4/settingsdialog.py:1794 ../../qt4/settingsdialog.py:1854 +msgid "No config found" +msgstr "" + +#: ../../qt4/snapshotsdialog.py:49 ../../qt4/snapshotsdialog.py:173 msgid "Diff Options" msgstr "Diff 选项" -#: ../../kde4/snapshotsdialog.py:56 ../../gnome/snapshotsdialog.glade:314 +#: ../../qt4/snapshotsdialog.py:56 msgid "Command:" msgstr "命令:" -#: ../../kde4/snapshotsdialog.py:60 ../../gnome/snapshotsdialog.glade:322 +#: ../../qt4/snapshotsdialog.py:60 msgid "Parameters:" msgstr "参数:" -#: ../../kde4/snapshotsdialog.py:64 ../../gnome/snapshotsdialog.glade:334 +#: ../../qt4/snapshotsdialog.py:64 msgid "Use %1 and %2 for path parameters" msgstr "用 %1 和 %2 作为路径参数" -#: ../../kde4/snapshotsdialog.py:123 ../../gnome/snapshotsdialog.glade:184 -#: ../../gnome/snapshotsdialog.glade:186 -msgid "Delete" -msgstr "删除" - -#: ../../kde4/snapshotsdialog.py:128 ../../gnome/snapshotsdialog.glade:199 -#: ../../gnome/snapshotsdialog.glade:201 -msgid "Select All" -msgstr "选择所有" - -#: ../../kde4/snapshotsdialog.py:132 ../../gnome/snapshotsdialog.glade:88 +#: ../../qt4/snapshotsdialog.py:106 msgid "List only different snapshots" msgstr "仅列出不同的快照" -#: ../../kde4/snapshotsdialog.py:139 ../../gnome/snapshotsdialog.glade:110 +#: ../../qt4/snapshotsdialog.py:113 msgid "List only equal snapshots to: " msgstr "" -#: ../../kde4/snapshotsdialog.py:149 ../../gnome/snapshotsdialog.glade:146 +#: ../../qt4/snapshotsdialog.py:123 msgid "Deep check (more accurate, but slow)" msgstr "深度检查(更精确,但是较慢)" -#: ../../kde4/snapshotsdialog.py:174 -msgid "Go To" -msgstr "转到" - -#: ../../gnome/logviewdialog.glade:9 -msgid "Log View" -msgstr "日志查看" - -#: ../../gnome/logviewdialog.glade:179 -msgid "scroll down automatic" -msgstr "自动下拉" - -#: ../../gnome/mainwindow.glade:7 -msgid "Back In Time" -msgstr "Back In Time" - -#: ../../gnome/mainwindow.glade:45 -msgid "Backup Now" -msgstr "立即备份" - -#: ../../gnome/mainwindow.glade:171 -msgid "Shutdown" -msgstr "" - -#: ../../gnome/mainwindow.glade:287 -msgid "Parent folder" -msgstr "上一级目录" - -#: ../../gnome/mainwindow.glade:327 -msgid "Hidden files" -msgstr "隐藏文件" - -#: ../../gnome/mainwindow.glade:451 -msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" -msgstr "" -"该文件夹不存在于\n" -"当前快照中!" - -#: ../../gnome/settingsdialog.glade:287 -msgid "Where to save snapshots" -msgstr "保存快照的地方" +#: ../../qt4/snapshotsdialog.py:144 +msgid "Delete" +msgstr "删除" -#: ../../gnome/settingsdialog.glade:483 -msgid "Private key:" -msgstr "私钥:" +#: ../../qt4/snapshotsdialog.py:148 +msgid "Select All" +msgstr "选择所有" -#: ../../gnome/settingsdialog.glade:534 -msgid "Advanced SSH Settings" -msgstr "SSH 高级设置" +#: ../../qt4/snapshotsdialog.py:161 +msgid "Diff" +msgstr "Diff" -#: ../../gnome/settingsdialog.glade:552 -msgid "SSH Settings" -msgstr "SSH 设置" +#: ../../qt4/snapshotsdialog.py:172 +msgid "Go To" +msgstr "转到" -#: ../../gnome/settingsdialog.glade:815 -msgid "Password" -msgstr "密码" +#: ../../qt4/snapshotsdialog.py:326 +msgid "You can't compare a snapshot to itself" +msgstr "不能将快照与其自身比较" -#: ../../gnome/settingsdialog.glade:930 -msgid "Profile Id:" -msgstr "配置文件Id" +#: ../../qt4/snapshotsdialog.py:333 +#, python-format +msgid "Command not found: %s" +msgstr "命令未找到:%s" -#: ../../gnome/settingsdialog.glade:1115 +#: ../../qt4/snapshotsdialog.py:354 +#, python-format msgid "" -"hours seperate by comma ( e.g. 8,12,18,23) or */3 for periodic backups every " -"3 hours (cron style)" +"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" msgstr "" -#: ../../gnome/settingsdialog.glade:1163 -msgid "Schedule" -msgstr "日程表" - -#: ../../gnome/settingsdialog.glade:1363 -msgid "Highly recommended:" -msgstr " 强烈推荐 :" - -#: ../../gnome/settingsdialog.glade:1377 -msgid "label" -msgstr "标记" +#: ../../qt4/snapshotsdialog.py:357 +#, python-format +msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +msgstr "" -#: ../../gnome/settingsdialog.glade:1755 -msgid "week(s)" -msgstr "周" +#: ../../qt4/snapshotsdialog.py:359 +msgid "WARNING: This can not be revoked!" +msgstr "警告:该操作无法撤销!" -#: ../../gnome/settingsdialog.glade:2069 -msgid "Log level:" -msgstr "日志级别:" - -#: ../../gnome/settingsdialog.glade:2121 -msgid "" -"Change these options only if you really know what you are doing !" -msgstr "除非您知道自己在干什么,否则不要更改这些选项!" - -#: ../../gnome/snapshotsdialog.glade:263 -msgid "Diff with" -msgstr "和...不同" - -#: ../../gnome/textinputdialog.glade:7 -msgid "Pattern" -msgstr "模式" - -#: ../../gnome/textinputdialog.glade:70 -msgid "Text" -msgstr "文本" +#: ../../qt4/snapshotsdialog.py:374 +#, python-format +msgid "Exclude \"%s\" from future snapshots?" +msgstr "" diff -Nru backintime-1.0.36/common/po/zh_TW.po backintime-1.1.12/common/po/zh_TW.po --- backintime-1.0.36/common/po/zh_TW.po 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/po/zh_TW.po 2016-01-11 18:07:58.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2013-11-09 22:34+0100\n" +"POT-Creation-Date: 2015-12-19 00:47+0100\n" "PO-Revision-Date: 2010-03-23 15:52+0000\n" "Last-Translator: semigod \n" "Language-Team: Chinese (Traditional) \n" @@ -15,198 +15,230 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Launchpad-Export-Date: 2014-08-06 10:20+0000\n" -"X-Generator: Launchpad (build 17147)\n" +"X-Launchpad-Export-Date: 2016-01-11 17:52+0000\n" +"X-Generator: Launchpad (build 17881)\n" -#: ../../common/config.py:72 +#: ../../common/configfile.py:60 +#, python-format +msgid "Failed to save config: %s" +msgstr "" + +#: ../../common/configfile.py:78 +#, python-format +msgid "Failed to load config: %s" +msgstr "" + +#: ../../common/configfile.py:352 ../../common/configfile.py:414 +#, python-format +msgid "Profile \"%s\" already exists !" +msgstr "\"%s\"設定檔已經存在!" + +#: ../../common/configfile.py:383 +msgid "You can't remove the last profile !" +msgstr "你不能刪除最後一個設定檔!" + +#: ../../common/config.py:76 msgid "Disabled" msgstr "關閉" -#: ../../common/config.py:73 +#: ../../common/config.py:77 msgid "At every boot/reboot" msgstr "" -#: ../../common/config.py:74 +#: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "每五分鐘" -#: ../../common/config.py:75 +#: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "每十分鐘" -#: ../../common/config.py:76 +#: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "" -#: ../../common/config.py:77 +#: ../../common/config.py:81 msgid "Every hour" msgstr "" -#: ../../common/config.py:78 +#: ../../common/config.py:82 msgid "Every 2 hours" msgstr "" -#: ../../common/config.py:79 +#: ../../common/config.py:83 msgid "Every 4 hours" msgstr "" -#: ../../common/config.py:80 +#: ../../common/config.py:84 msgid "Every 6 hours" msgstr "" -#: ../../common/config.py:81 +#: ../../common/config.py:85 msgid "Every 12 hours" msgstr "" -#: ../../common/config.py:82 +#: ../../common/config.py:86 msgid "Custom Hours" msgstr "" -#: ../../common/config.py:83 +#: ../../common/config.py:87 msgid "Every Day" msgstr "每天" -#: ../../common/config.py:84 -msgid "Daily (anacron)" +#: ../../common/config.py:88 +msgid "Repeatedly (anacron)" msgstr "" -#: ../../common/config.py:85 +#: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "" -#: ../../common/config.py:86 +#: ../../common/config.py:90 msgid "Every Week" msgstr "每週" -#: ../../common/config.py:87 +#: ../../common/config.py:91 msgid "Every Month" msgstr "每月" -#: ../../common/config.py:91 +#: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "天" -#: ../../common/config.py:92 +#: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "週" -#: ../../common/config.py:93 +#: ../../common/config.py:97 msgid "Year(s)" msgstr "年" -#: ../../common/config.py:100 +#: ../../common/config.py:101 +msgid "Hour(s)" +msgstr "" + +#: ../../common/config.py:104 +msgid "Month(s)" +msgstr "" + +#: ../../common/config.py:126 ../../qt4/settingsdialog.py:551 msgid " EXPERIMENTAL!" msgstr "" -#: ../../common/config.py:103 +#: ../../common/config.py:129 msgid "Local" msgstr "" -#: ../../common/config.py:104 +#: ../../common/config.py:130 msgid "SSH" msgstr "" -#: ../../common/config.py:104 ../../common/config.py:106 -#: ../../gnome/settingsdialog.py:475 ../../kde4/settingsdialog.py:1325 +#: ../../common/config.py:130 ../../common/config.py:132 +#: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "" -#: ../../common/config.py:105 +#: ../../common/config.py:131 msgid "Local encrypted" msgstr "" -#: ../../common/config.py:105 ../../common/config.py:106 +#: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "" -#: ../../common/config.py:106 +#: ../../common/config.py:132 msgid "SSH encrypted" msgstr "" -#: ../../common/config.py:112 +#: ../../common/config.py:135 msgid "Default" msgstr "" -#: ../../common/config.py:113 +#: ../../common/config.py:136 msgid "AES128-CTR" msgstr "" -#: ../../common/config.py:114 +#: ../../common/config.py:137 msgid "AES192-CTR" msgstr "" -#: ../../common/config.py:115 +#: ../../common/config.py:138 msgid "AES256-CTR" msgstr "" -#: ../../common/config.py:116 +#: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "" -#: ../../common/config.py:117 +#: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "" -#: ../../common/config.py:118 +#: ../../common/config.py:141 msgid "AES128-CBC" msgstr "" -#: ../../common/config.py:119 +#: ../../common/config.py:142 msgid "3DES-CBC" msgstr "" -#: ../../common/config.py:120 +#: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "" -#: ../../common/config.py:121 +#: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "" -#: ../../common/config.py:122 +#: ../../common/config.py:145 msgid "AES192-CBC" msgstr "" -#: ../../common/config.py:123 +#: ../../common/config.py:146 msgid "AES256-CBC" msgstr "" -#: ../../common/config.py:124 +#: ../../common/config.py:147 msgid "ARCFOUR" msgstr "" -#: ../../common/config.py:129 +#: ../../common/config.py:153 msgid "Main profile" msgstr "主要設定檔" -#: ../../common/config.py:256 ../../common/config.py:275 -#: ../../common/config.py:286 ../../common/config.py:291 +#: ../../common/config.py:289 ../../common/config.py:296 +#: ../../common/config.py:307 ../../common/config.py:312 +#: ../../qt4/qt4systrayicon.py:61 #, python-format msgid "Profile: \"%s\"" msgstr "設定檔:\"%s\"" -#: ../../common/config.py:256 +#: ../../common/config.py:289 msgid "Snapshots folder is not valid !" msgstr "快照資料夾不存在!" -#: ../../common/config.py:275 +#: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "必須選擇一個資料夾進行備份" -#: ../../common/config.py:286 +#: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "不能包含備份資料夾" -#: ../../common/config.py:291 +#: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "不能包含備份子目錄" -#: ../../common/config.py:361 +#: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s並不是資料夾!" -#: ../../common/config.py:376 ../../common/config.py:389 +#: ../../common/config.py:380 +msgid "Host/User/Profile-ID must not be empty!" +msgstr "" + +#: ../../common/config.py:388 ../../common/config.py:420 #, python-format msgid "" "Can't write to: %s\n" @@ -215,59 +247,68 @@ "不能寫入:%s\n" "請確認是否有寫入權限?" -#: ../../common/config.py:1286 +#: ../../common/config.py:400 +#, python-format msgid "" -"Can't find crontab.\n" -"Are you sure cron is installed ?\n" -"If not you should disable all automatic backups." +"Destination filesystem for '%(path)s' is formatted with FAT which doesn't " +"support hard-links. Please use a native Linux filesystem." msgstr "" -"找不到crontab檔案!\n" -"請確認cron是否安裝?\n" -"如果沒有的話,你應該停用所有自動備份。" -#: ../../common/config.py:1338 +#: ../../common/config.py:405 #, python-format -msgid "Schedule udev doesn't work with mode %s" +msgid "" +"Destination filsystem for '%(path)s' is a SMB mounted share. Please make " +"sure the remote SMB server supports symlinks or activate '%(copyLinks)s' in " +"'%(expertOptions)s'." msgstr "" -#: ../../common/config.py:1342 -#, python-format -msgid "Couldn't find UUID for \"%s\"" +#: ../../common/config.py:408 ../../qt4/settingsdialog.py:815 +msgid "Copy links (dereference symbolic links)" msgstr "" -#: ../../common/config.py:1379 -msgid "Failed to remove udev rules" -msgstr "" +#: ../../common/config.py:409 ../../qt4/settingsdialog.py:669 +msgid "Expert Options" +msgstr "進階選項" -#: ../../common/config.py:1385 -msgid "Failed to create udev rules" +#: ../../common/config.py:411 +#, python-format +msgid "" +"Destination filesystem for '%(path)s is a sshfs mounted share. sshfs doesn't " +"support hard-links. Please use mode 'SSH' instead." msgstr "" -#: ../../common/config.py:1420 +#: ../../common/config.py:1407 msgid "" -"Can't find anacron.\n" -"Are you sure anacron is installed ?\n" -"If not you should disable daily anacron backups." +"Can't find crontab.\n" +"Are you sure cron is installed ?\n" +"If not you should disable all automatic backups." msgstr "" +"找不到crontab檔案!\n" +"請確認cron是否安裝?\n" +"如果沒有的話,你應該停用所有自動備份。" -#: ../../common/config.py:1439 -msgid "Please provide your sudo password to install the udev rule." +#: ../../common/config.py:1411 +msgid "Failed to write new crontab." msgstr "" -#: ../../common/config.py:1445 -msgid "Please provide your sudo password to remove unused udev rules." +#: ../../common/config.py:1505 +#, python-format +msgid "" +"Could not install Udev rule for profile %(profile_id)s. DBus Service " +"'%(dbus_interface)s' wasn't available" msgstr "" -#: ../../common/configfile.py:253 ../../common/configfile.py:315 +#: ../../common/config.py:1517 #, python-format -msgid "Profile \"%s\" already exists !" -msgstr "\"%s\"設定檔已經存在!" +msgid "Schedule udev doesn't work with mode %s" +msgstr "" -#: ../../common/configfile.py:284 -msgid "You can't remove the last profile !" -msgstr "你不能刪除最後一個設定檔!" +#: ../../common/config.py:1526 +#, python-format +msgid "Couldn't find UUID for \"%s\"" +msgstr "" -#: ../../common/encfstools.py:95 +#: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" @@ -275,38 +316,38 @@ "%(error)s" msgstr "" -#: ../../common/encfstools.py:105 +#: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "" -#: ../../common/encfstools.py:149 +#: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "" -#: ../../common/encfstools.py:153 +#: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" -#: ../../common/encfstools.py:154 +#: ../../common/encfstools.py:171 msgid "Cancel" msgstr "" -#: ../../common/encfstools.py:157 +#: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "" -#: ../../common/encfstools.py:161 +#: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "" -#: ../../common/encfstools.py:166 +#: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" -#: ../../common/encfstools.py:174 ../../common/sshtools.py:207 +#: ../../common/encfstools.py:196 ../../common/sshtools.py:262 #, python-format msgid "" "%(user)s is not member of group 'fuse'.\n" @@ -314,70 +355,73 @@ "Look at 'man backintime' for further instructions." msgstr "" -#: ../../common/encfstools.py:189 +#: ../../common/encfstools.py:211 msgid "" "encfs version 1.7.2 and before has a bug with option --reverse. Please " "update encfs" msgstr "" -#: ../../common/encfstools.py:453 ../../common/encfstools.py:480 -#: ../../common/snapshots.py:982 ../../common/snapshots.py:1288 -#: ../../kde4/app.py:82 ../../gnome/mainwindow.glade:43 +#: ../../common/encfstools.py:512 ../../common/snapshots.py:1131 +#: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "進行快照" -#: ../../common/mount.py:195 +#: ../../common/mount.py:204 #, python-format msgid "" "Hash collision occurred in hash_id %s. Incrementing global value " "hash_collision and try again." msgstr "" -#: ../../common/mount.py:246 +#: ../../common/mount.py:259 #, python-format msgid "mountpoint %s not empty." msgstr "" -#: ../../common/mount.py:286 +#: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" -#: ../../common/password.py:425 +#: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" -#: ../../common/snapshots.py:171 ../../gnome/app.py:1127 -#: ../../kde4/app.py:1014 +#: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "現在" -#: ../../common/snapshots.py:182 ../../gnome/gnometools.py:37 +#: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "" -#: ../../common/snapshots.py:282 +#: ../../common/snapshots.py:344 msgid "" "### This log has been decoded with automatic search pattern\n" "### If some paths are not decoded you can manually decode them with:\n" msgstr "" -#: ../../common/snapshots.py:465 +#: ../../common/snapshots.py:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "" -#: ../../common/snapshots.py:564 +#: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "" -#: ../../common/snapshots.py:739 +#: ../../common/snapshots.py:752 ../../qt4/app.py:377 ../../qt4/app.py:675 +#: ../../qt4/app.py:692 ../../qt4/qt4systrayicon.py:65 +msgid "Done" +msgstr "完成" + +#: ../../common/snapshots.py:860 msgid "" "Back In Time changed its backup format.\n" "\n" "Your old snapshots can be moved according to this new format. OK?" msgstr "" -#: ../../common/snapshots.py:749 +#: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" @@ -391,13 +435,13 @@ "新備份格式支援不同用戶及設定檔存放於相同位置。想要進行這樣的配置?\n" "(程式仍可保持區分)" -#: ../../common/snapshots.py:752 +#: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" msgstr "" -#: ../../common/snapshots.py:803 +#: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" @@ -410,7 +454,7 @@ "cannot continue taking snapshots" msgstr "" -#: ../../common/snapshots.py:812 +#: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" @@ -420,14 +464,14 @@ "if you are done restart Back In Time to proceed" msgstr "" -#: ../../common/snapshots.py:825 +#: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" msgstr "" -#: ../../common/snapshots.py:830 +#: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" @@ -439,17 +483,21 @@ "If you do not, you will be asked again next time you start Back In Time." msgstr "" -#: ../../common/snapshots.py:839 +#: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "" -#: ../../common/snapshots.py:841 +#: ../../common/snapshots.py:953 msgid "" "Back In Time still cannot continue taking new snapshots.\n" "Restart Back In Time to see the questions again" msgstr "" -#: ../../common/snapshots.py:913 +#: ../../common/snapshots.py:972 +msgid "Deferring backup while on battery" +msgstr "" + +#: ../../common/snapshots.py:1035 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it." @@ -457,155 +505,162 @@ "快照資料夾不存在。\n" "若存在於移動儲存設備,請插入裝置" -#: ../../common/snapshots.py:915 +#: ../../common/snapshots.py:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "等待%s秒。" -#: ../../common/snapshots.py:941 +#: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "快照 %s 執行失敗!!!" -#: ../../common/snapshots.py:950 +#: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "關閉光碟中" -#: ../../common/snapshots.py:1088 +#: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "無法新增資料夾:%s" -#: ../../common/snapshots.py:1107 +#: ../../common/snapshots.py:1217 msgid "..." msgstr "..." -#: ../../common/snapshots.py:1134 +#: ../../common/snapshots.py:1238 +#, python-format +msgid "Found leftover '%s' which can be continued." +msgstr "" + +#: ../../common/snapshots.py:1250 +#, python-format +msgid "Remove leftover '%s' folder from last run" +msgstr "" + +#: ../../common/snapshots.py:1263 #, python-format msgid "Can't remove folder: %s" msgstr "無法刪除資料夾:%s" -#: ../../common/snapshots.py:1219 +#: ../../common/snapshots.py:1340 #, python-format msgid "Compare with snapshot %s" msgstr "比對快照紀錄%s" -#: ../../common/snapshots.py:1248 +#: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "建立hard-links" -#: ../../common/snapshots.py:1335 +#: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "保留組態檔..." -#: ../../common/snapshots.py:1341 +#: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "保留存取權限..." -#: ../../common/snapshots.py:1442 +#: ../../common/snapshots.py:1470 +msgid "Save permission over ssh failed. Retry normal method" +msgstr "" + +#: ../../common/snapshots.py:1521 #, python-format msgid "Can't rename %(new_path)s to %(path)s" msgstr "" -#: ../../common/snapshots.py:1562 -msgid "Remove old snapshots" -msgstr "刪除快照" - -#: ../../common/snapshots.py:1586 ../../kde4/settingsdialog.py:501 -#: ../../gnome/settingsdialog.glade:1660 +#: ../../common/snapshots.py:1695 ../../common/snapshots.py:1728 +#: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "智慧移除" -#: ../../common/snapshots.py:1591 +#: ../../common/snapshots.py:1704 +msgid "Remove old snapshots" +msgstr "刪除快照" + +#: ../../common/snapshots.py:1733 msgid "Try to keep min free space" msgstr "嘗試保留最小剩餘空間" -#: ../../common/snapshots.py:1621 +#: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" -#: ../../common/sshtools.py:106 +#: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "" -#: ../../common/sshtools.py:113 +#: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "" -#: ../../common/sshtools.py:187 -#, python-format -msgid "" -"Failed to unlock SSH private key:\n" -"Error: %s" -msgstr "" - -#: ../../common/sshtools.py:194 +#: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" -#: ../../common/sshtools.py:199 +#: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" -#: ../../common/sshtools.py:217 +#: ../../common/sshtools.py:278 #, python-format msgid "" "Password-less authentication for %(user)s@%(host)s failed. Look at 'man " "backintime' for further instructions." msgstr "" -#: ../../common/sshtools.py:229 +#: ../../common/sshtools.py:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" -#: ../../common/sshtools.py:254 +#: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" -#: ../../common/sshtools.py:274 +#: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" -#: ../../common/sshtools.py:276 +#: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:278 +#: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" -#: ../../common/sshtools.py:280 +#: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" -#: ../../common/sshtools.py:302 +#: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" -#: ../../common/sshtools.py:325 ../../common/sshtools.py:383 +#: ../../common/sshtools.py:423 ../../common/sshtools.py:553 #, python-format msgid "" "Remote host %(host)s doesn't support '%(command)s':\n" @@ -613,7 +668,7 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:387 +#: ../../common/sshtools.py:556 #, python-format msgid "" "Check commands on host %(host)s returned unknown error:\n" @@ -621,96 +676,149 @@ "Look at 'man backintime' for further instructions" msgstr "" -#: ../../common/sshtools.py:400 +#: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "" -#: ../../gnome/app.py:185 ../../gnome/app.py:594 ../../gnome/app.py:608 -#: ../../kde4/app.py:299 ../../kde4/app.py:570 ../../kde4/app.py:587 -msgid "Done" -msgstr "完成" +#: ../../qt4/app.py:81 +msgid "Refresh snapshots list" +msgstr "" + +#: ../../qt4/app.py:85 ../../qt4/app.py:890 +msgid "Snapshot Name" +msgstr "快照名稱" + +#: ../../qt4/app.py:88 +msgid "Remove Snapshot" +msgstr "刪除快照" + +#: ../../qt4/app.py:91 +msgid "View Snapshot Log" +msgstr "" + +#: ../../qt4/app.py:94 +msgid "View Last Log" +msgstr "" + +#: ../../qt4/app.py:99 ../../qt4/settingsdialog.py:51 +msgid "Settings" +msgstr "設定" + +#: ../../qt4/app.py:104 +msgid "Shutdown" +msgstr "" + +#: ../../qt4/app.py:105 +msgid "Shutdown system after snapshot has finished." +msgstr "" + +#: ../../qt4/app.py:111 +msgid "Exit" +msgstr "離開" -#: ../../gnome/app.py:189 ../../kde4/app.py:143 ../../kde4/app.py:159 -#: ../../gnome/mainwindow.glade:225 +#: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 msgid "Help" msgstr "求助" -#: ../../gnome/app.py:191 ../../kde4/app.py:146 -#: ../../gnome/mainwindow.glade:223 +#: ../../qt4/app.py:122 +msgid "Config File Help" +msgstr "" + +#: ../../qt4/app.py:125 msgid "Website" msgstr "網站" -#: ../../gnome/app.py:192 ../../kde4/app.py:148 +#: ../../qt4/app.py:127 ../../qt4/app.py:982 +msgid "Changelog" +msgstr "" + +#: ../../qt4/app.py:129 msgid "FAQ" msgstr "" -#: ../../gnome/app.py:193 ../../kde4/app.py:150 +#: ../../qt4/app.py:131 msgid "Ask a question" msgstr "" -#: ../../gnome/app.py:194 ../../kde4/app.py:152 +#: ../../qt4/app.py:133 msgid "Report a bug" msgstr "" -#: ../../gnome/app.py:196 ../../kde4/app.py:155 +#: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "關於" -#: ../../gnome/app.py:202 ../../gnome/app.py:887 -#: ../../gnome/restoredialog.py:84 ../../gnome/snapshotsdialog.py:83 -#: ../../gnome/snapshotsdialog.py:244 ../../kde4/app.py:206 -#: ../../kde4/app.py:216 ../../kde4/restoredialog.py:68 -#: ../../kde4/snapshotsdialog.py:111 ../../kde4/snapshotsdialog.py:117 -#: ../../gnome/mainwindow.glade:350 ../../gnome/mainwindow.glade:352 -#: ../../gnome/snapshotsdialog.glade:169 ../../gnome/snapshotsdialog.glade:171 +#: ../../qt4/app.py:163 +msgid "Up" +msgstr "向上" + +#: ../../qt4/app.py:174 ../../qt4/settingsdialog.py:1776 +msgid "Show hidden files" +msgstr "顯示隱藏檔案" + +#: ../../qt4/app.py:184 ../../qt4/app.py:199 ../../qt4/app.py:233 +#: ../../qt4/restoredialog.py:62 ../../qt4/settingsdialog.py:1818 +#: ../../qt4/snapshotsdialog.py:134 ../../qt4/snapshotsdialog.py:139 msgid "Restore" msgstr "還原" -#: ../../gnome/app.py:203 ../../gnome/app.py:888 ../../gnome/gnometools.py:67 -#: ../../gnome/snapshotsdialog.py:84 ../../gnome/snapshotsdialog.py:245 -#: ../../kde4/app.py:208 ../../kde4/restoredialog.py:42 -#: ../../kde4/snapshotsdialog.py:113 +#: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 +#: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "" -#: ../../gnome/app.py:205 ../../gnome/app.py:896 ../../gnome/app.py:1146 -#: ../../kde4/app.py:1041 -#, python-format -msgid "Restore '%s'" +#: ../../qt4/app.py:194 +msgid "Restore and delete new files" msgstr "" -#: ../../gnome/app.py:207 ../../gnome/app.py:897 ../../gnome/app.py:1147 -#: ../../kde4/app.py:1042 +#: ../../qt4/app.py:201 #, python-format -msgid "Restore '%s' to ..." +msgid "" +"Restore selected file or folder.\n" +"If this button is grayed out this is most likely because \"%(now)s\" is " +"selected in left hand snapshots list." +msgstr "" + +#: ../../qt4/app.py:206 ../../qt4/logviewdialog.py:67 +#: ../../qt4/qt4tools.py:160 ../../qt4/snapshotsdialog.py:96 +msgid "Snapshots" +msgstr "快照" + +#: ../../qt4/app.py:213 +msgid "Snapshot" msgstr "" -#: ../../gnome/app.py:226 ../../kde4/app.py:235 +#: ../../qt4/app.py:224 +msgid "View" +msgstr "" + +#: ../../qt4/app.py:277 msgid "Shortcuts" msgstr "快速鍵" -#: ../../gnome/app.py:249 -msgid "Name" -msgstr "名稱" - -#: ../../gnome/app.py:260 -msgid "Size" -msgstr "大小" - -#: ../../gnome/app.py:267 -msgid "Date" -msgstr "日期" - -#: ../../gnome/app.py:286 ../../gnome/app.py:883 -#: ../../gnome/snapshotsdialog.py:116 ../../kde4/app.py:171 -#: ../../kde4/app.py:221 ../../kde4/snapshotsdialog.py:91 -#: ../../gnome/mainwindow.glade:366 ../../gnome/mainwindow.glade:368 -#: ../../gnome/snapshotsdialog.glade:8 -msgid "Snapshots" -msgstr "快照" +#: ../../qt4/app.py:295 +msgid "" +"This folder doesn't exist\n" +"in the current selected snapshot!" +msgstr "" + +#: ../../qt4/app.py:359 +msgid "Add to Include" +msgstr "" + +#: ../../qt4/app.py:360 +msgid "Add to Exclude" +msgstr "" -#: ../../gnome/app.py:348 ../../kde4/app.py:362 +#: ../../qt4/app.py:416 +#, python-format +msgid "" +"%(appName)s is not configured. Would you like to restore a previous " +"configuration?" +msgstr "" + +#: ../../qt4/app.py:440 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it and then press OK" @@ -718,726 +826,791 @@ "快照資料夾不存在。\n" "若存在於移動儲存設備,請插入裝置並確認" -#: ../../gnome/app.py:611 ../../kde4/app.py:590 -msgid "Done, no backup needed" -msgstr "已完成,不需要進行備份" +#: ../../qt4/app.py:473 +msgid "" +"If you close this window Back In Time will not be able to shutdown your " +"system when the snapshot has finished.\n" +"Do you really want to close?" +msgstr "" -#: ../../gnome/app.py:619 ../../kde4/app.py:598 +#: ../../qt4/app.py:667 ../../qt4/app.py:703 msgid "Working:" msgstr "運作中 :" -#: ../../gnome/app.py:623 ../../kde4/app.py:602 +#: ../../qt4/app.py:695 +msgid "Done, no backup needed" +msgstr "已完成,不需要進行備份" + +#: ../../qt4/app.py:707 msgid "Error:" msgstr "錯誤:" -#: ../../gnome/app.py:636 ../../kde4/app.py:649 +#: ../../qt4/app.py:726 ../../qt4/qt4systrayicon.py:153 +msgid "Sent:" +msgstr "" + +#: ../../qt4/app.py:727 ../../qt4/qt4systrayicon.py:154 +msgid "Speed:" +msgstr "" + +#: ../../qt4/app.py:728 ../../qt4/qt4systrayicon.py:155 +msgid "ETA:" +msgstr "" + +#: ../../qt4/app.py:777 msgid "Global" msgstr "全域設定" -#: ../../gnome/app.py:637 ../../kde4/app.py:650 +#: ../../qt4/app.py:778 msgid "Root" msgstr "主目錄" -#: ../../gnome/app.py:638 ../../kde4/app.py:651 +#: ../../qt4/app.py:779 msgid "Home" msgstr "家目錄" -#: ../../gnome/app.py:662 -msgid "Bookmarks" -msgstr "書籤" - -#: ../../gnome/app.py:675 ../../kde4/app.py:662 +#: ../../qt4/app.py:794 msgid "Backup folders" msgstr "備份資料夾" -#: ../../gnome/app.py:701 ../../kde4/app.py:734 -msgid "Today" -msgstr "今天" +#: ../../qt4/app.py:849 +msgid "This is NOT a snapshot but a live view of your local files" +msgstr "" -#: ../../gnome/app.py:705 ../../kde4/app.py:738 -msgid "Yesterday" -msgstr "昨天" +#: ../../qt4/app.py:860 ../../qt4/app.py:1476 +#, python-format +msgid "Last check %s" +msgstr "" -#: ../../gnome/app.py:709 ../../kde4/app.py:742 -msgid "This week" -msgstr "本週" +#: ../../qt4/app.py:928 +#, python-format +msgid "" +"Are you sure you want to remove the snapshot:\n" +"%s" +msgstr "" +"確認要刪除此快照:\n" +"%s" -#: ../../gnome/app.py:713 ../../kde4/app.py:746 -msgid "Last week" -msgstr "上週" +#: ../../qt4/app.py:1004 +#, python-format +msgid "" +"Backup local files before overwriting or\n" +"removing with trailing '%(suffix)s'." +msgstr "" -#: ../../gnome/app.py:764 ../../kde4/app.py:398 +#: ../../qt4/app.py:1010 msgid "" -"If you close this window Back In Time will not be able to shutdown your " -"system when the snapshot has finished.\n" -"Do you really want to close?" +"Are you sure you want to remove all newer files in your original folder?" msgstr "" -#: ../../gnome/app.py:881 ../../gnome/snapshotsdialog.py:238 -msgid "Open" -msgstr "開啟" +#: ../../qt4/app.py:1014 +msgid "" +"WARNING: deleting files in filesystem root could break your whole system!!!" +msgstr "" -#: ../../gnome/app.py:1056 ../../kde4/app.py:90 ../../kde4/app.py:805 -#: ../../gnome/mainwindow.glade:73 ../../gnome/mainwindow.glade:75 -msgid "Snapshot Name" -msgstr "快照名稱" +#: ../../qt4/app.py:1016 +msgid "Files to be restored:" +msgstr "" -#: ../../gnome/app.py:1075 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" +#: ../../qt4/app.py:1031 +msgid "Do you really want to restore this files(s):" msgstr "" -"請確認要刪除快照紀錄:\n" -"%s" -#: ../../gnome/app.py:1123 ../../kde4/app.py:1010 +#: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "快照:%s" -#: ../../gnome/app.py:1124 ../../kde4/app.py:1011 +#: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "檢視於%s完成之快照" -#: ../../gnome/app.py:1126 ../../kde4/app.py:1013 +#: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "檢視目前磁碟內容" -#: ../../gnome/logviewdialog.py:106 ../../gnome/settingsdialog.py:414 -#: ../../kde4/logviewdialog.py:83 ../../kde4/settingsdialog.py:590 -msgid "All" +#: ../../qt4/app.py:1268 +#, python-format +msgid "Restore '%s'" msgstr "" -#: ../../gnome/logviewdialog.py:107 ../../gnome/settingsdialog.py:412 -#: ../../kde4/logviewdialog.py:84 ../../kde4/settingsdialog.py:588 -msgid "Errors" +#: ../../qt4/app.py:1269 +#, python-format +msgid "Restore '%s' to ..." msgstr "" -#: ../../gnome/logviewdialog.py:112 ../../kde4/logviewdialog.py:89 -msgid "Changes" +#: ../../qt4/app.py:1270 +#, python-format +msgid "Restore '%s' and delete new files" msgstr "" -#: ../../gnome/logviewdialog.py:115 ../../kde4/logviewdialog.py:92 -msgid "Informations" +#: ../../qt4/app.py:1368 ../../qt4/app.py:1385 +msgid "Authors" msgstr "" -#: ../../gnome/settingsdialog.py:235 ../../kde4/settingsdialog.py:387 -msgid "Include files and folders" +#: ../../qt4/app.py:1369 ../../qt4/app.py:1388 +msgid "Translations" msgstr "" -#: ../../gnome/settingsdialog.py:264 -msgid "Exclude patterns, files or folders" +#: ../../qt4/app.py:1370 ../../qt4/app.py:1391 +msgid "License" msgstr "" -#: ../../gnome/settingsdialog.py:411 ../../kde4/settingsdialog.py:587 -msgid "None" +#: ../../qt4/logviewdialog.py:49 +msgid "Last Log View" msgstr "" -#: ../../gnome/settingsdialog.py:413 ../../kde4/settingsdialog.py:589 -msgid "Changes & Errors" +#: ../../qt4/logviewdialog.py:51 +msgid "Snapshot Log View" msgstr "" -#: ../../gnome/settingsdialog.py:458 -msgid "Snapshots folder" -msgstr "快照資料夾" - -#: ../../gnome/settingsdialog.py:466 ../../kde4/settingsdialog.py:1314 -msgid "Are you sure you want to change snapshots folder ?" -msgstr "確認修改快照資料夾" +#: ../../qt4/logviewdialog.py:59 ../../qt4/settingsdialog.py:59 +#: ../../qt4/settingsdialog.py:274 ../../qt4/settingsdialog.py:1899 +msgid "Profile:" +msgstr "設定組合:" -#: ../../gnome/settingsdialog.py:901 ../../kde4/settingsdialog.py:914 -msgid "" -"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " -"*/3 for periodic backups every 3 hours" +#: ../../qt4/logviewdialog.py:81 +msgid "Filter:" msgstr "" -#: ../../gnome/settingsdialog.py:1141 ../../kde4/settingsdialog.py:653 -msgid "New profile" -msgstr "新增設定檔" - -#: ../../gnome/settingsdialog.py:1155 ../../kde4/settingsdialog.py:669 -msgid "Rename profile" -msgstr "重新命名設定檔" - -#: ../../gnome/settingsdialog.py:1167 ../../kde4/settingsdialog.py:683 -#, python-format -msgid "Are you sure you want to delete the profile \"%s\" ?" -msgstr "確認刪除設定檔\"%s\"" - -#: ../../gnome/settingsdialog.py:1173 ../../kde4/settingsdialog.py:1292 -msgid "Include folder" -msgstr "包含資料夾" - -#: ../../gnome/settingsdialog.py:1193 ../../kde4/settingsdialog.py:1278 -msgid "Include file" -msgstr "包含檔案" - -#: ../../gnome/settingsdialog.py:1235 ../../kde4/settingsdialog.py:1241 -msgid "Exclude pattern" -msgstr "排除樣式" - -#: ../../gnome/settingsdialog.py:1240 ../../kde4/settingsdialog.py:1251 -msgid "Exclude patterns can't contain ':' char !" -msgstr "排除樣式不能包含':'字元!" - -#: ../../gnome/settingsdialog.py:1246 ../../kde4/settingsdialog.py:1257 -msgid "Exclude file" -msgstr "排除檔案" - -#: ../../gnome/settingsdialog.py:1257 ../../kde4/settingsdialog.py:1261 -msgid "Exclude folder" -msgstr "排除資料夾" - -#: ../../gnome/snapshotsdialog.py:240 -msgid "Jump to" +#: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 +msgid "All" msgstr "" -#: ../../gnome/snapshotsdialog.py:248 ../../kde4/snapshotsdialog.py:164 -msgid "Diff" -msgstr "差異比較" - -#: ../../gnome/snapshotsdialog.py:277 ../../kde4/snapshotsdialog.py:339 -msgid "You can't compare a snapshot to itself" -msgstr "無法進行快照自我比對" - -#: ../../gnome/snapshotsdialog.py:284 ../../kde4/snapshotsdialog.py:346 -#, python-format -msgid "Command not found: %s" -msgstr "指令不存在:%s" - -#: ../../gnome/snapshotsdialog.py:307 ../../kde4/snapshotsdialog.py:367 -#, python-format -msgid "" -"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 +#: ../../qt4/settingsdialog.py:657 +msgid "Errors" msgstr "" -#: ../../gnome/snapshotsdialog.py:310 ../../kde4/snapshotsdialog.py:370 -#, python-format -msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +#: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 +msgid "Changes" msgstr "" -#: ../../gnome/snapshotsdialog.py:312 ../../kde4/snapshotsdialog.py:372 -msgid "WARNING: This can not be revoked!" +#: ../../qt4/logviewdialog.py:92 +msgid "Informations" msgstr "" -#: ../../gnome/snapshotsdialog.py:317 ../../kde4/snapshotsdialog.py:377 -#, python-format -msgid "Exclude \"%s\" from future snapshots?" +#: ../../qt4/logviewdialog.py:101 +msgid "[E] Error, [I] Information, [C] Change" msgstr "" -#: ../../kde4/app.py:86 ../../gnome/mainwindow.glade:58 -#: ../../gnome/mainwindow.glade:60 -msgid "Refresh snapshots list" +#: ../../qt4/logviewdialog.py:104 +msgid "decode paths" msgstr "" -#: ../../kde4/app.py:94 ../../gnome/mainwindow.glade:88 -#: ../../gnome/mainwindow.glade:90 -msgid "Remove Snapshot" -msgstr "刪除快照" - -#: ../../kde4/app.py:98 ../../gnome/mainwindow.glade:105 -msgid "View Snapshot Log" +#: ../../qt4/messagebox.py:56 +msgid "Error" msgstr "" -#: ../../kde4/app.py:102 ../../gnome/mainwindow.glade:121 -msgid "View Last Log" +#: ../../qt4/messagebox.py:62 ../../qt4/messagebox.py:68 +msgid "Question" msgstr "" -#: ../../kde4/app.py:108 ../../kde4/settingsdialog.py:69 -#: ../../gnome/mainwindow.glade:144 ../../gnome/mainwindow.glade:146 -#: ../../gnome/settingsdialog.glade:7 -msgid "Settings" -msgstr "設定" - -#: ../../kde4/app.py:124 ../../gnome/mainwindow.glade:169 -msgid "Shutdown system after snapshot has finished." +#: ../../qt4/qt4systrayicon.py:69 +msgid "Start BackInTime" msgstr "" -#: ../../kde4/app.py:131 ../../gnome/mainwindow.glade:184 -#: ../../gnome/mainwindow.glade:186 -msgid "Exit" -msgstr "離開" - -#: ../../kde4/app.py:186 ../../gnome/mainwindow.glade:289 -msgid "Up" -msgstr "向上" +#: ../../qt4/qt4systrayicon.py:124 +msgid "Working..." +msgstr "作業中..." -#: ../../kde4/app.py:199 ../../gnome/mainwindow.glade:325 -msgid "Show hidden files" -msgstr "顯示隱藏檔案" +#: ../../qt4/qt4tools.py:178 +msgid "Today" +msgstr "今天" -#: ../../kde4/app.py:244 -msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" -msgstr "" +#: ../../qt4/qt4tools.py:183 +msgid "Yesterday" +msgstr "昨天" -#: ../../kde4/app.py:839 -#, python-format -msgid "" -"Are you sure you want to remove the snapshot:\n" -"%s" -msgstr "" -"確認要刪除此快照:\n" -"%s" +#: ../../qt4/qt4tools.py:188 +msgid "This week" +msgstr "本週" -#: ../../kde4/app.py:1140 ../../kde4/kde4systrayicon.py:117 -msgid "Working..." -msgstr "作業中..." +#: ../../qt4/qt4tools.py:193 +msgid "Last week" +msgstr "上週" -#: ../../kde4/logviewdialog.py:55 -msgid "Error Log View" +#: ../../qt4/restoredialog.py:75 +msgid "Show full Log" msgstr "" -#: ../../kde4/logviewdialog.py:65 ../../kde4/settingsdialog.py:79 -#: ../../kde4/settingsdialog.py:293 ../../gnome/logviewdialog.glade:73 -#: ../../gnome/settingsdialog.glade:72 -msgid "Profile:" -msgstr "設定組合:" +#: ../../qt4/settingsdialog.py:68 +msgid "Edit" +msgstr "編輯" -#: ../../kde4/logviewdialog.py:77 ../../gnome/logviewdialog.glade:110 -msgid "Filter:" +#: ../../qt4/settingsdialog.py:73 +msgid "Modify for Full System Backup" msgstr "" -#: ../../kde4/logviewdialog.py:100 ../../gnome/logviewdialog.glade:169 -msgid "[E] Error, [I] Information, [C] Change" +#: ../../qt4/settingsdialog.py:77 ../../qt4/settingsdialog.py:451 +msgid "Add" msgstr "" -#: ../../kde4/logviewdialog.py:103 ../../gnome/logviewdialog.glade:195 -msgid "decode paths" +#: ../../qt4/settingsdialog.py:81 ../../qt4/settingsdialog.py:408 +#: ../../qt4/settingsdialog.py:467 +msgid "Remove" msgstr "" -#: ../../kde4/settingsdialog.py:88 -msgid "Edit" -msgstr "編輯" - -#: ../../kde4/settingsdialog.py:106 ../../gnome/settingsdialog.glade:1207 +#: ../../qt4/settingsdialog.py:96 msgid "General" msgstr "一般" -#: ../../kde4/settingsdialog.py:114 ../../gnome/settingsdialog.glade:199 +#: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "" -#: ../../kde4/settingsdialog.py:127 ../../kde4/settingsdialog.py:1311 +#: ../../qt4/settingsdialog.py:119 +#, python-format +msgid "" +"Warning: %(app)s uses EncFS for encryption. A recent security audit " +"revealed several possible attack vectors for this. Please take a look at 'A " +"NOTE ON SECURITY' in 'man backintime'." +msgstr "" + +#: ../../qt4/settingsdialog.py:129 ../../qt4/settingsdialog.py:1568 msgid "Where to save snapshots" msgstr "快照存放位置" -#: ../../kde4/settingsdialog.py:146 +#: ../../qt4/settingsdialog.py:145 +msgid "Folder" +msgstr "" + +#: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" -#: ../../kde4/settingsdialog.py:158 ../../kde4/settingsdialog.py:283 -#: ../../gnome/settingsdialog.glade:323 ../../gnome/settingsdialog.glade:583 -#: ../../gnome/settingsdialog.glade:874 +#: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "" -#: ../../kde4/settingsdialog.py:163 ../../gnome/settingsdialog.glade:350 -#: ../../gnome/settingsdialog.glade:610 +#: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "" -#: ../../kde4/settingsdialog.py:168 ../../kde4/settingsdialog.py:288 -#: ../../gnome/settingsdialog.glade:377 ../../gnome/settingsdialog.glade:637 -#: ../../gnome/settingsdialog.glade:902 +#: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "" -#: ../../kde4/settingsdialog.py:173 ../../gnome/settingsdialog.glade:416 +#: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" -#: ../../kde4/settingsdialog.py:178 ../../gnome/settingsdialog.glade:459 +#: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" -#: ../../kde4/settingsdialog.py:184 +#: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "" -#: ../../kde4/settingsdialog.py:228 ../../kde4/settingsdialog.py:237 -#: ../../kde4/settingsdialog.py:243 ../../gnome/settingsdialog.glade:703 -#: ../../gnome/settingsdialog.glade:743 +#: ../../qt4/settingsdialog.py:201 +msgid "Key File" +msgstr "" + +#: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 +#: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "" -#: ../../kde4/settingsdialog.py:249 ../../gnome/settingsdialog.glade:775 +#: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" -#: ../../kde4/settingsdialog.py:252 ../../gnome/settingsdialog.glade:792 +#: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" -#: ../../kde4/settingsdialog.py:264 ../../gnome/settingsdialog.glade:968 +#: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "" -#: ../../kde4/settingsdialog.py:276 ../../gnome/settingsdialog.glade:848 -msgid "Auto Host / User / Profile Id" +#: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 +msgid "Full snapshot path: " msgstr "" -#: ../../kde4/settingsdialog.py:301 +#: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "排程" -#: ../../kde4/settingsdialog.py:311 ../../gnome/settingsdialog.glade:1092 +#: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "" -#: ../../kde4/settingsdialog.py:322 ../../gnome/settingsdialog.glade:1079 +#: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "" -#: ../../kde4/settingsdialog.py:333 ../../gnome/settingsdialog.glade:1066 +#: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "時:" -#: ../../kde4/settingsdialog.py:344 ../../gnome/settingsdialog.glade:1053 +#: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "" -#: ../../kde4/settingsdialog.py:353 ../../gnome/settingsdialog.glade:1014 +#: ../../qt4/settingsdialog.py:339 msgid "" -"Run Back In Time periodically with anacron. This is useful if the computer " -"is not running regular." +"Run Back In Time repeatedly. This is useful if the computer is not running " +"regular." msgstr "" -#: ../../kde4/settingsdialog.py:357 ../../gnome/settingsdialog.glade:1040 -msgid "Frequency in days:" +#: ../../qt4/settingsdialog.py:344 +msgid "Every:" msgstr "" -#: ../../kde4/settingsdialog.py:368 ../../gnome/settingsdialog.glade:1026 +#: ../../qt4/settingsdialog.py:362 msgid "" "Run Back In Time as soon as the drive is connected (only once every X " "days).\n" "You will be prompted for your sudo password." msgstr "" -#: ../../kde4/settingsdialog.py:379 ../../gnome/settingsdialog.glade:1310 +#: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "包含" -#: ../../kde4/settingsdialog.py:403 ../../kde4/settingsdialog.py:445 -#: ../../gnome/settingsdialog.glade:1411 +#: ../../qt4/settingsdialog.py:381 +msgid "Include files and folders" +msgstr "" + +#: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "新增檔案" -#: ../../kde4/settingsdialog.py:408 ../../kde4/settingsdialog.py:450 -#: ../../gnome/settingsdialog.glade:1427 +#: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "新增資料夾" -#: ../../kde4/settingsdialog.py:418 ../../gnome/settingsdialog.glade:1474 +#: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "不包含" -#: ../../kde4/settingsdialog.py:421 ../../gnome/settingsdialog.glade:1328 +#: ../../qt4/settingsdialog.py:417 msgid "" "Warning: Wildcards ('foo*', '[fF]oo', 'fo?') will be ignored with " "mode 'SSH encrypted'.\n" "Only separate asterisk are allowed ('foo/*', 'foo/**/bar')" msgstr "" -#: ../../kde4/settingsdialog.py:430 +#: ../../qt4/settingsdialog.py:425 +msgid "Exclude patterns, files or folders" +msgstr "" + +#: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "" -#: ../../kde4/settingsdialog.py:460 ../../gnome/settingsdialog.glade:1905 +#: ../../qt4/settingsdialog.py:463 +msgid "Add default" +msgstr "" + +#: ../../qt4/settingsdialog.py:474 +msgid "Exclude files bigger than: " +msgstr "" + +#: ../../qt4/settingsdialog.py:475 +#, python-format +msgid "" +"Exclude files bigger than value in %(prefix)s.\n" +"With 'Full rsync mode' disabled this will only affect new files\n" +"because for rsync this is a transfer option, not an exclude option.\n" +"So big files that has been backed up before will remain in snapshots\n" +"even if they had changed." +msgstr "" + +#: ../../qt4/settingsdialog.py:493 msgid "Auto-remove" msgstr "自動移除" -#: ../../kde4/settingsdialog.py:464 ../../gnome/settingsdialog.glade:1608 +#: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "時間超過:" -#: ../../kde4/settingsdialog.py:478 ../../gnome/settingsdialog.glade:1624 +#: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "剩餘空間少於:" -#: ../../kde4/settingsdialog.py:490 ../../gnome/settingsdialog.glade:1642 +#: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" -#: ../../kde4/settingsdialog.py:514 ../../gnome/settingsdialog.glade:1697 +#: ../../qt4/settingsdialog.py:551 +msgid "Run in background on remote Host." +msgstr "" + +#: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "" -#: ../../kde4/settingsdialog.py:517 ../../kde4/settingsdialog.py:522 -#: ../../gnome/settingsdialog.glade:1705 ../../gnome/settingsdialog.glade:1729 +#: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "" -#: ../../kde4/settingsdialog.py:519 ../../gnome/settingsdialog.glade:1717 +#: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "" -#: ../../kde4/settingsdialog.py:524 ../../gnome/settingsdialog.glade:1743 +#: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "" -#: ../../kde4/settingsdialog.py:527 +#: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "" -#: ../../kde4/settingsdialog.py:529 ../../gnome/settingsdialog.glade:1769 +#: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "" -#: ../../kde4/settingsdialog.py:532 ../../gnome/settingsdialog.glade:1781 +#: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "" -#: ../../kde4/settingsdialog.py:534 ../../gnome/settingsdialog.glade:1795 +#: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "" -#: ../../kde4/settingsdialog.py:537 ../../gnome/settingsdialog.glade:1496 +#: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "不要移除命名的快照" -#: ../../kde4/settingsdialog.py:546 ../../gnome/settingsdialog.glade:2104 +#: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "選項" -#: ../../kde4/settingsdialog.py:549 ../../gnome/settingsdialog.glade:1920 +#: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "開啟通知" -#: ../../kde4/settingsdialog.py:552 ../../gnome/settingsdialog.glade:1937 +#: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "使用電池時停用快照功能" -#: ../../kde4/settingsdialog.py:555 +#: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" msgstr "無法獲得系統電源狀態" -#: ../../kde4/settingsdialog.py:558 ../../gnome/settingsdialog.glade:1955 -msgid "Backup files on restore" -msgstr "還原時備份檔案" +#: ../../qt4/settingsdialog.py:611 +msgid "Run only one snapshot at a time" +msgstr "" + +#: ../../qt4/settingsdialog.py:612 +msgid "" +"Other snapshots will be blocked until the current snapshot is done.\n" +"This is a global option. So it will effect all profiles for this user.\n" +"But you need to activate this for all other users, too." +msgstr "" + +#: ../../qt4/settingsdialog.py:617 +msgid "Backup replaced files on restore" +msgstr "" + +#: ../../qt4/settingsdialog.py:618 +#, python-format +msgid "" +"Newer versions of files will be renamed with trailing '%(suffix)s' before " +"restoring.\n" +"If you don't need them anymore you can remove them with '%(cmd)s'" +msgstr "" -#: ../../kde4/settingsdialog.py:561 ../../gnome/settingsdialog.glade:1972 +#: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "" -#: ../../kde4/settingsdialog.py:564 ../../gnome/settingsdialog.glade:1989 +#: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "" -#: ../../kde4/settingsdialog.py:567 ../../gnome/settingsdialog.glade:2006 +#: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "" -#: ../../kde4/settingsdialog.py:568 ../../gnome/settingsdialog.glade:2032 +#: ../../qt4/settingsdialog.py:634 msgid "" -"- snapshots are no read-only\n" -"- destination file-system must support all linux attributes (dates, rights, " +"- snapshots are not read-only\n" +"- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" -#: ../../kde4/settingsdialog.py:575 ../../gnome/settingsdialog.glade:2045 +#: ../../qt4/settingsdialog.py:641 +msgid "Take a new snapshot regardless of there were changes or not." +msgstr "" + +#: ../../qt4/settingsdialog.py:644 msgid "Check for changes (don't take a new snapshot if nothing changed)" msgstr "" -#: ../../kde4/settingsdialog.py:582 +#: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "" -#: ../../kde4/settingsdialog.py:597 ../../gnome/settingsdialog.glade:2366 -msgid "Expert Options" -msgstr "進階選項" +#: ../../qt4/settingsdialog.py:656 +msgid "None" +msgstr "" -#: ../../kde4/settingsdialog.py:600 +#: ../../qt4/settingsdialog.py:658 +msgid "Changes & Errors" +msgstr "" + +#: ../../qt4/settingsdialog.py:674 msgid "Change these options only if you really know what you are doing !" msgstr "" -#: ../../kde4/settingsdialog.py:608 ../../gnome/settingsdialog.glade:2133 -msgid "Run 'nice' as cron job (default: enabled)" -msgstr "如同cron使用\"nice\"調整(預設:啟用)" +#: ../../qt4/settingsdialog.py:678 +msgid "Run 'nice':" +msgstr "" -#: ../../kde4/settingsdialog.py:611 ../../gnome/settingsdialog.glade:2150 -msgid "Run 'ionice' as cron job (default: enabled)" -msgstr "如同cron使用\"ionice\"調整(預設:啟用)" +#: ../../qt4/settingsdialog.py:684 ../../qt4/settingsdialog.py:696 +msgid "as cron job" +msgstr "" + +#: ../../qt4/settingsdialog.py:687 ../../qt4/settingsdialog.py:702 +#: ../../qt4/settingsdialog.py:716 +msgid "on remote host" +msgstr "" + +#: ../../qt4/settingsdialog.py:690 +msgid "Run 'ionice':" +msgstr "" + +#: ../../qt4/settingsdialog.py:699 +msgid "when taking a manual snapshot" +msgstr "" -#: ../../kde4/settingsdialog.py:614 ../../gnome/settingsdialog.glade:2167 -msgid "Run 'ionice' when taking a manual snapshot (default: disabled)" +#: ../../qt4/settingsdialog.py:706 +msgid "Run 'rsync' with 'nocache':" msgstr "" -#: ../../kde4/settingsdialog.py:617 ../../gnome/settingsdialog.glade:2184 -msgid "Run 'nice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:712 +msgid "on local machine" msgstr "" -#: ../../kde4/settingsdialog.py:620 ../../gnome/settingsdialog.glade:2201 -msgid "Run 'ionice' on remote host (default: disabled)" +#: ../../qt4/settingsdialog.py:719 +msgid "Redirect stdout to /dev/null in cronjobs." msgstr "" -#: ../../kde4/settingsdialog.py:626 ../../gnome/settingsdialog.glade:2224 +#: ../../qt4/settingsdialog.py:725 +msgid "Redirect stderr to /dev/null in cronjobs." +msgstr "" + +#: ../../qt4/settingsdialog.py:734 msgid "Limit rsync bandwidth usage: " msgstr "" -#: ../../kde4/settingsdialog.py:629 ../../gnome/settingsdialog.glade:2259 +#: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" -#: ../../kde4/settingsdialog.py:634 ../../gnome/settingsdialog.glade:2280 +#: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "" -#: ../../kde4/settingsdialog.py:637 ../../gnome/settingsdialog.glade:2297 +#: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "" -#: ../../kde4/settingsdialog.py:640 ../../gnome/settingsdialog.glade:2314 +#: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute links)" msgstr "" -#: ../../kde4/settingsdialog.py:643 ../../gnome/settingsdialog.glade:2331 -msgid "Copy links (dereference symbolic links)" +#: ../../qt4/settingsdialog.py:834 +msgid "Paste additional options to rsync" msgstr "" -#: ../../kde4/snapshotsdialog.py:46 ../../kde4/snapshotsdialog.py:173 -#: ../../gnome/snapshotsdialog.glade:385 -msgid "Diff Options" -msgstr "比對選項" - -#: ../../kde4/snapshotsdialog.py:56 ../../gnome/snapshotsdialog.glade:314 -msgid "Command:" -msgstr "指令:" - -#: ../../kde4/snapshotsdialog.py:60 ../../gnome/snapshotsdialog.glade:322 -msgid "Parameters:" -msgstr "參數:" - -#: ../../kde4/snapshotsdialog.py:64 ../../gnome/snapshotsdialog.glade:334 -msgid "Use %1 and %2 for path parameters" -msgstr "使用%1和%2作為路徑參數" - -#: ../../kde4/snapshotsdialog.py:123 ../../gnome/snapshotsdialog.glade:184 -#: ../../gnome/snapshotsdialog.glade:186 -msgid "Delete" +#: ../../qt4/settingsdialog.py:837 +msgid "" +"Options must be quoted e.g. --exclude-from=\"/path/to/my exclude file\"." msgstr "" -#: ../../kde4/snapshotsdialog.py:128 ../../gnome/snapshotsdialog.glade:199 -#: ../../gnome/snapshotsdialog.glade:201 -msgid "Select All" +#: ../../qt4/settingsdialog.py:847 +msgid "Add prefix to SSH commands" msgstr "" -#: ../../kde4/snapshotsdialog.py:132 ../../gnome/snapshotsdialog.glade:88 -msgid "List only different snapshots" +#: ../../qt4/settingsdialog.py:850 +#, python-format +msgid "" +"Prefix to run before every command on remote host.\n" +"Variables need to be escaped with \\$FOO.\n" +"This doesn't touch rsync. So to add a prefix\n" +"for rsync use \"%(cb_rsync_options)s\" with\n" +"%(rsync_options_value)s\n" +"\n" +"%(default)s: %(def_value)s" msgstr "" -#: ../../kde4/snapshotsdialog.py:139 ../../gnome/snapshotsdialog.glade:110 -msgid "List only equal snapshots to: " +#: ../../qt4/settingsdialog.py:858 ../../qt4/settingsdialog.py:1691 +msgid "default" msgstr "" -#: ../../kde4/snapshotsdialog.py:149 ../../gnome/snapshotsdialog.glade:146 -msgid "Deep check (more accurate, but slow)" +#: ../../qt4/settingsdialog.py:875 +msgid "Restore Config" msgstr "" -#: ../../kde4/snapshotsdialog.py:174 -msgid "Go To" -msgstr "前往" - -#: ../../gnome/logviewdialog.glade:9 -msgid "Log View" +#: ../../qt4/settingsdialog.py:891 +msgid "" +"Full system backup can only create a snapshot to be restored to the same " +"physical disk(s) with the same disk partitioning as from the source; " +"restoring to new physical disks or the same disks with different " +"partitioning will yield a potentially broken and unusable system.\n" +"\n" +"Full system backup will override some settings that may have been " +"customized. Continue?" msgstr "" -#: ../../gnome/logviewdialog.glade:179 -msgid "scroll down automatic" -msgstr "" +#: ../../qt4/settingsdialog.py:922 +msgid "New profile" +msgstr "新增設定檔" -#: ../../gnome/mainwindow.glade:7 -msgid "Back In Time" -msgstr "Back In Time" +#: ../../qt4/settingsdialog.py:938 +msgid "Rename profile" +msgstr "重新命名設定檔" -#: ../../gnome/mainwindow.glade:45 -msgid "Backup Now" -msgstr "立刻備份" +#: ../../qt4/settingsdialog.py:952 +#, python-format +msgid "Are you sure you want to delete the profile \"%s\" ?" +msgstr "確認刪除設定檔\"%s\"" -#: ../../gnome/mainwindow.glade:171 -msgid "Shutdown" +#: ../../qt4/settingsdialog.py:1191 +msgid "" +"Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or " +"*/3 for periodic backups every 3 hours" msgstr "" -#: ../../gnome/mainwindow.glade:287 -msgid "Parent folder" -msgstr "上層資料夾" +#: ../../qt4/settingsdialog.py:1489 +msgid "Exclude pattern" +msgstr "排除樣式" + +#: ../../qt4/settingsdialog.py:1502 +msgid "Exclude file" +msgstr "排除檔案" + +#: ../../qt4/settingsdialog.py:1506 +msgid "Exclude folder" +msgstr "排除資料夾" -#: ../../gnome/mainwindow.glade:327 -msgid "Hidden files" -msgstr "隱藏檔案" +#: ../../qt4/settingsdialog.py:1525 +msgid "Include file" +msgstr "包含檔案" -#: ../../gnome/mainwindow.glade:451 +#: ../../qt4/settingsdialog.py:1533 ../../qt4/settingsdialog.py:1553 +#, python-format msgid "" -"This folder doesn't exist\n" -"in the current snapshot !" +"\"%s\" is a symlink. The linked target will not be backed up until you " +"include it, too.\n" +"Would you like to include the symlinks target instead?" msgstr "" -#: ../../gnome/settingsdialog.glade:287 -msgid "Where to save snapshots" -msgstr "快照存放位置" +#: ../../qt4/settingsdialog.py:1545 +msgid "Include folder" +msgstr "包含資料夾" -#: ../../gnome/settingsdialog.glade:483 -msgid "Private key:" -msgstr "" +#: ../../qt4/settingsdialog.py:1572 +msgid "Are you sure you want to change snapshots folder ?" +msgstr "確認修改快照資料夾" -#: ../../gnome/settingsdialog.glade:534 -msgid "Advanced SSH Settings" +#: ../../qt4/settingsdialog.py:1688 +msgid "enabled" msgstr "" -#: ../../gnome/settingsdialog.glade:552 -msgid "SSH Settings" +#: ../../qt4/settingsdialog.py:1690 +msgid "disabled" msgstr "" -#: ../../gnome/settingsdialog.glade:815 -msgid "Password" +#: ../../qt4/settingsdialog.py:1715 +msgid "Restore Settings" msgstr "" -#: ../../gnome/settingsdialog.glade:930 -msgid "Profile Id:" +#: ../../qt4/settingsdialog.py:1732 +msgid " and add your user to group 'fuse'" msgstr "" -#: ../../gnome/settingsdialog.glade:1115 +#: ../../qt4/settingsdialog.py:1736 +#, python-format msgid "" -"hours seperate by comma ( e.g. 8,12,18,23) or */3 for periodic backups every " -"3 hours (cron style)" +"Please navigate to the snapshot from which you want to restore %(appName)s's " +"configuration. The path may look like: \n" +"%(samplePath)s\n" +"\n" +"If your snapshots are on a remote drive or if they are encrypted you need to " +"manually mount them first. If you use Mode SSH you also may need to set up " +"public key login to the remote host%(addFuse)s.\n" +"Take a look at 'man backintime'." msgstr "" -#: ../../gnome/settingsdialog.glade:1163 -msgid "Schedule" -msgstr "排程" +#: ../../qt4/settingsdialog.py:1794 ../../qt4/settingsdialog.py:1854 +msgid "No config found" +msgstr "" + +#: ../../qt4/snapshotsdialog.py:49 ../../qt4/snapshotsdialog.py:173 +msgid "Diff Options" +msgstr "比對選項" + +#: ../../qt4/snapshotsdialog.py:56 +msgid "Command:" +msgstr "指令:" + +#: ../../qt4/snapshotsdialog.py:60 +msgid "Parameters:" +msgstr "參數:" + +#: ../../qt4/snapshotsdialog.py:64 +msgid "Use %1 and %2 for path parameters" +msgstr "使用%1和%2作為路徑參數" + +#: ../../qt4/snapshotsdialog.py:106 +msgid "List only different snapshots" +msgstr "" -#: ../../gnome/settingsdialog.glade:1363 -msgid "Highly recommended:" +#: ../../qt4/snapshotsdialog.py:113 +msgid "List only equal snapshots to: " msgstr "" -#: ../../gnome/settingsdialog.glade:1377 -msgid "label" +#: ../../qt4/snapshotsdialog.py:123 +msgid "Deep check (more accurate, but slow)" msgstr "" -#: ../../gnome/settingsdialog.glade:1755 -msgid "week(s)" +#: ../../qt4/snapshotsdialog.py:144 +msgid "Delete" msgstr "" -#: ../../gnome/settingsdialog.glade:2069 -msgid "Log level:" +#: ../../qt4/snapshotsdialog.py:148 +msgid "Select All" msgstr "" -#: ../../gnome/settingsdialog.glade:2121 +#: ../../qt4/snapshotsdialog.py:161 +msgid "Diff" +msgstr "差異比較" + +#: ../../qt4/snapshotsdialog.py:172 +msgid "Go To" +msgstr "前往" + +#: ../../qt4/snapshotsdialog.py:326 +msgid "You can't compare a snapshot to itself" +msgstr "無法進行快照自我比對" + +#: ../../qt4/snapshotsdialog.py:333 +#, python-format +msgid "Command not found: %s" +msgstr "指令不存在:%s" + +#: ../../qt4/snapshotsdialog.py:354 +#, python-format msgid "" -"Change these options only if you really know what you are doing !" +"Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" msgstr "" -#: ../../gnome/snapshotsdialog.glade:263 -msgid "Diff with" -msgstr "比較" +#: ../../qt4/snapshotsdialog.py:357 +#, python-format +msgid "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" +msgstr "" -#: ../../gnome/textinputdialog.glade:7 -msgid "Pattern" -msgstr "樣式" +#: ../../qt4/snapshotsdialog.py:359 +msgid "WARNING: This can not be revoked!" +msgstr "" -#: ../../gnome/textinputdialog.glade:70 -msgid "Text" +#: ../../qt4/snapshotsdialog.py:374 +#, python-format +msgid "Exclude \"%s\" from future snapshots?" msgstr "" diff -Nru backintime-1.0.36/common/progress.py backintime-1.1.12/common/progress.py --- backintime-1.0.36/common/progress.py 1970-01-01 00:00:00.000000000 +0000 +++ backintime-1.1.12/common/progress.py 2016-01-11 18:07:58.000000000 +0000 @@ -0,0 +1,39 @@ +# Copyright (C) 2012-2016 Germar Reitze +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +import os + +import configfile + +class ProgressFile(configfile.ConfigFile): + + RSYNC = 50 + + def __init__(self, cfg, filename = None): + super(ProgressFile, self).__init__() + self.config = cfg + self.filename = filename + if self.filename is None: + self.filename = self.config.get_take_snapshot_progress_file() + + def save(self): + return super(ProgressFile, self).save(self.filename) + + def load(self): + return super(ProgressFile, self).load(self.filename) + + def isFileReadable(self): + return os.access(self.filename, os.R_OK) diff -Nru backintime-1.0.36/common/snapshots.py backintime-1.1.12/common/snapshots.py --- backintime-1.0.36/common/snapshots.py 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/snapshots.py 2016-01-11 18:07:58.000000000 +0000 @@ -1,5 +1,5 @@ # Back In Time -# Copyright (C) 2008-2009 Oprea Dan, Bart de Koning, Richard Bailey +# Copyright (C) 2008-2016 Oprea Dan, Bart de Koning, Richard Bailey, Germar Reitze # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -17,34 +17,36 @@ import os -import os.path import stat import datetime import gettext -import statvfs -import stat import bz2 import pwd import grp -import socket import subprocess import shutil +import time +import re +import fcntl import config import configfile import logger import applicationinstance import tools -import pluginmanager import encfstools import mount - +import progress +import bcolors +from exceptions import MountException _=gettext.gettext class Snapshots: SNAPSHOT_VERSION = 3 + GLOBAL_FLOCK = '/tmp/backintime.lock' + NEW_SNAPSHOT_ID = 'new_snapshot' def __init__( self, cfg = None ): self.config = cfg @@ -54,12 +56,26 @@ self.clear_uid_gid_cache() self.clear_uid_gid_names_cache() - self.plugin_manager = pluginmanager.PluginManager() + #rsync --info=progress2 output + #search for: 517.38K 26% 14.46MB/s 0:02:36 + #or: 497.84M 4% -449.39kB/s ??:??:?? + #but filter out: 517.38K 26% 14.46MB/s 0:00:53 (xfr#53, to-chk=169/452) + # because this shows current run time + self.reRsyncProgress = re.compile(r'.*?' #trash at start + r'(\d*[,\.]?\d+[KkMGT]?)\s+' #bytes sent + r'(\d*)%\s+' #percent done + r'(-?\d*[,\.]?\d*[KkMGT]?B/s)\s+' #speed + r'([\d\?]+:[\d\?]{2}:[\d\?]{2})' #estimated time of arrival + r'(.*$)') #trash at the end + + self.last_check_snapshot_runnig = datetime.datetime(1,1,1) + self.flock_file = None + self.restore_permission_failed = False def get_snapshot_id( self, date ): profile_id = self.config.get_current_profile() tag = self.config.get_tag( profile_id ) - + if type( date ) is datetime.datetime: snapshot_id = date.strftime( '%Y%m%d-%H%M%S' ) + '-' + tag return snapshot_id @@ -71,12 +87,19 @@ if type( date ) is str: snapshot_id = date return snapshot_id - + return "" + def is_snapshot_id(self, sid): + return len(sid) == 15 or len(sid) == 19 + + def get_snapshot_datetime(self, sid): + def split(s, e): + return int(sid[s:e]) + if self.is_snapshot_id(sid): + return datetime.datetime(split(0, 4), split(4, 6), split(6, 8), split(9, 11), split(11, 13), split(13, 15)) + def get_snapshot_old_id( self, date ): - profile_id = self.config.get_current_profile() - if type( date ) is datetime.datetime: snapshot_id = date.strftime( '%Y%m%d-%H%M%S' ) return snapshot_id @@ -88,7 +111,7 @@ if type( date ) is str: snapshot_id = date return snapshot_id - + return "" def get_snapshot_path( self, date, use_mode = [] ): @@ -102,25 +125,19 @@ return self.config.ENCODE.remote(path) path = os.path.join( self.config.get_snapshots_full_path( profile_id ), self.get_snapshot_id( date ) ) if os.path.exists( path ): - #print path return path other_folders = self.config.get_other_folders_paths() for folder in other_folders: path_other = os.path.join( folder, self.get_snapshot_id( date ) ) if os.path.exists( path_other ): - #print path_other return path_other - old_path = os.path.join( self.config.get_snapshots_full_path( profile_id ), self.get_snapshot_old_id( date ) ) if os.path.exists( path ): - #print path return path other_folders = self.config.get_other_folders_paths() for folder in other_folders: path_other = os.path.join( folder, self.get_snapshot_old_id( date ) ) if os.path.exists( path_other ): - #print path_other - return path_other - #print path + return path_other return path def get_snapshot_info_path( self, date ): @@ -144,7 +161,7 @@ if 'ssh_encfs' in use_mode and current_mode == 'ssh_encfs': return os.path.join( snapshot_path, self.config.ENCODE.path(path) ) return os.path.join( snapshot_path, path ) - + def get_snapshot_path_to( self, snapshot_id, toPath = '/', use_mode = [] ): current_mode = self.config.get_snapshots_mode() snapshot_data_path = os.path.join( self._get_snapshot_data_path( snapshot_id, use_mode ) ) @@ -154,7 +171,6 @@ return os.path.join( snapshot_data_path, toPath[ 1 : ] ) def can_open_path( self, snapshot_id, full_path ): - #full_path = self.get_snapshot_path_to( snapshot_id, path ) if not os.path.exists( full_path ): return False if not os.path.islink( full_path ): @@ -162,20 +178,18 @@ base_path = self.get_snapshot_path_to( snapshot_id ) target = os.readlink( full_path ) target = os.path.join( os.path.abspath( os.path.dirname( full_path ) ), target ) - #print "[can_open_path] full_path %s" % full_path - #print "[can_open_path] base_path %s" % base_path return target.startswith( base_path ) def get_snapshot_display_id( self, snapshot_id ): if len( snapshot_id ) <= 1: return _('Now') return "%s-%s-%s %s:%s:%s" % ( snapshot_id[ 0 : 4 ], snapshot_id[ 4 : 6 ], snapshot_id[ 6 : 8 ], snapshot_id[ 9 : 11 ], snapshot_id[ 11 : 13 ], snapshot_id[ 13 : 15 ] ) - + def get_snapshot_display_name( self, snapshot_id ): display_name = self.get_snapshot_display_id( snapshot_id ) name = self.get_snapshot_name( snapshot_id ) - if len( name ) > 0: + if name: display_name = display_name + ' - ' + name if self.is_snapshot_failed( snapshot_id ): @@ -184,20 +198,24 @@ return display_name def get_snapshot_name( self, snapshot_id ): + name = '' if len( snapshot_id ) <= 1: #not a snapshot - return '' + return name path = self.get_snapshot_path( snapshot_id ) + nameFile = os.path.join(path, 'name') if not os.path.isdir( path ): - return '' - - name = '' + return name + + if not os.path.exists(nameFile): + return name try: - file = open( os.path.join( path, 'name' ), 'rt' ) - name = file.read() - file.close() - except: - pass + with open(nameFile, 'rt') as f: + name = f.read() + except Exception as e: + logger.debug('Failed to get snapshot %s name: %s' + %(snapshot_id, str(e)), + self) return name @@ -211,16 +229,15 @@ name_path = os.path.join( path, 'name' ) - #info_file = configfile.ConfigFile() - #info_file.load( self.get_snapshot_info_path( snapshot_id ) ) - #if info_file.get_int_value( 'snapshot_version' ) == 0: os.system( "chmod +w \"%s\"" % path ) try: - file = open( name_path, 'wt' ) - file.write( name ) - file.close() - except: + with open( name_path, 'wt' ) as f: + f.write( name ) + except Exception as e: + logger.debug('Failed to set snapshot %s name: %s' + %(snapshot_id, str(e)), + self) pass def is_snapshot_failed( self, snapshot_id ): @@ -230,40 +247,77 @@ path = self.get_snapshot_failed_path( snapshot_id ) return os.path.isfile( path ) + def get_snapshot_last_check(self, snapshot_id): + """return date when snapshot has finished last time. + this can be the end of creation of this snapshot or the last time when + this snapshot was checked against source without changes. + """ + info = self.get_snapshot_info_path(snapshot_id) + if os.path.exists(info): + return time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(os.path.getatime(info)) ) + return self.get_snapshot_display_id(snapshot_id) + + def set_snapshot_last_check(self, snapshot_id): + """set info files atime to current time to indicate this snapshot was + checked against source without changes right now. + """ + info = self.get_snapshot_info_path(snapshot_id) + if os.path.exists(info): + os.utime(info, None) + def clear_take_snapshot_message( self ): - os.system( "rm \"%s\"" % self.config.get_take_snapshot_message_file() ) + files = (self.config.get_take_snapshot_message_file(), \ + self.config.get_take_snapshot_progress_file() ) + for f in files: + if os.path.exists(f): + os.remove(f) def get_take_snapshot_message( self ): + wait = datetime.datetime.now() - datetime.timedelta(seconds = 30) + if self.last_check_snapshot_runnig < wait: + self.last_check_snapshot_runnig = datetime.datetime.now() + if not self.check_snapshot_alive(): + self.clear_take_snapshot_message() + return None + + if not os.path.exists(self.config.get_take_snapshot_message_file()): + return None try: - file = open( self.config.get_take_snapshot_message_file(), 'rt' ) - items = file.read().split( '\n' ) - file.close() - except: - return None + with open(self.config.get_take_snapshot_message_file(), 'rt' ) as f: + items = f.read().split( '\n' ) + except Exception as e: + logger.debug('Failed to get take_snapshot message from %s: %s' + %(self.config.get_take_snapshot_message_file(), str(e)), + self) + return None if len( items ) < 2: return None - id = 0 + mid = 0 try: - id = int( items[0] ) - except: + mid = int( items[0] ) + except Exception as e: + logger.debug('Failed extract message ID from %s: %s' + %(items[0], str(e)), + self) pass del items[0] message = '\n'.join( items ) - return( id, message ) + return( mid, message ) def set_take_snapshot_message( self, type_id, message, timeout = -1 ): data = str(type_id) + '\n' + message try: - file = open( self.config.get_take_snapshot_message_file(), 'wt' ) - file.write( data ) - file.close() - #logger.info( "Take snapshot message: %s" % data ) - except: + with open( self.config.get_take_snapshot_message_file(), 'wt' ) as f: + f.write( data ) + except Exception as e: + logger.debug('Failed to set take_snapshot message to %s: %s' + %(self.config.get_take_snapshot_message_file(), str(e)), + self) pass if 1 == type_id: @@ -272,18 +326,26 @@ self.append_to_take_snapshot_log( '[I] ' + message, 3 ) try: - profile_id =self.config.get_current_profile() + profile_id =self.config.get_current_profile() profile_name = self.config.get_profile_name( profile_id ) - self.plugin_manager.on_message( profile_id, profile_name, type_id, message, timeout ) - except: + self.config.PLUGIN_MANAGER.on_message( profile_id, profile_name, type_id, message, timeout ) + except Exception as e: + logger.debug('Failed to send message to plugins: %s' + %str(e), + self) pass + def check_snapshot_alive(self): + pid_file = self.config.get_take_snapshot_instance_file() + instance = applicationinstance.ApplicationInstance(pid_file, False) + return not instance.check() + def _filter_take_snapshot_log( self, log, mode , decode = None): decode_msg = _( '''### This log has been decoded with automatic search pattern ### If some paths are not decoded you can manually decode them with:\n''') decode_msg += '### \'backintime --quiet' profile_id = self.config.get_current_profile() - if profile_id > 1: + if int(profile_id) > 1: decode_msg += ' --profile %s' % self.config.get_profile_name(profile_id) decode_msg += ' --decode \'\n\n' if 0 == mode: @@ -308,6 +370,8 @@ continue elif mode == 3 and line[1] != 'I': continue + elif mode == 4 and line[1] not in ('E', 'C'): + continue if not decode is None: line = decode.log(line) @@ -317,35 +381,46 @@ def get_snapshot_log( self, snapshot_id, mode = 0, profile_id = None , **kwargs ): try: - file = bz2.BZ2File( self.get_snapshot_log_path( snapshot_id ), 'r' ) - data = file.read() - file.close() + with bz2.BZ2File( self.get_snapshot_log_path( snapshot_id ), 'r' ) as f: + data = f.read().decode() return self._filter_take_snapshot_log( data, mode, **kwargs ) - except: + except Exception as e: + logger.debug('Failed to get snapshot log from %s: %s' + %(self.get_snapshot_log_path(snapshot_id), str(e)), + self) return '' def get_take_snapshot_log( self, mode = 0, profile_id = None, **kwargs ): + logFile = self.config.get_take_snapshot_log_file(profile_id) try: - file = open( self.config.get_take_snapshot_log_file( profile_id ), 'rt' ) - data = file.read() - file.close() + with open(logFile, 'rt') as f: + data = f.read() return self._filter_take_snapshot_log( data, mode, **kwargs ) - except: - return '' + except Exception as e: + msg = ('Failed to get take_snapshot log from %s:' %logFile, str(e)) + logger.debug(' '.join(msg), self) + return '\n'.join(msg) def new_take_snapshot_log( self, date ): - os.system( "rm \"%s\"" % self.config.get_take_snapshot_log_file() ) - self.append_to_take_snapshot_log( "========== Take snapshot (profile %s): %s ==========\n" % ( self.config.get_current_profile(), date.strftime( '%c' ) ), 1 ) + saveToContinueFlag = SaveToContinueFlag(self.get_snapshot_path(self.NEW_SNAPSHOT_ID)) + if saveToContinueFlag.exists(): + msg = "Last snapshot didn't finish but can be continued.\n\n======== continue snapshot (profile %s): %s ========\n" + else: + os.system( "rm \"%s\"" % self.config.get_take_snapshot_log_file() ) + msg = "========== Take snapshot (profile %s): %s ==========\n" + self.append_to_take_snapshot_log(msg %(self.config.get_current_profile(), date.strftime('%c')), 1) def append_to_take_snapshot_log( self, message, level ): if level > self.config.log_level(): return try: - file = open( self.config.get_take_snapshot_log_file(), 'at' ) - file.write( message + '\n' ) - file.close() - except: + with open( self.config.get_take_snapshot_log_file(), 'at' ) as f: + f.write( message + '\n' ) + except Exception as e: + logger.debug('Failed to add message to take_snapshot log %s: %s' + %(self.config.get_take_snapshot_log_file(), str(e)), + self) pass def is_busy( self ): @@ -359,45 +434,39 @@ version = info_file.get_int_value( 'snapshot_version' ) info_file = None - dict = {} + file_info_dict = {} if 0 == version: - return dict + return file_info_dict fileinfo_path = self.get_snapshot_fileinfo_path( snapshot_id ) if not os.path.exists( fileinfo_path ): - return dict + return file_info_dict - #try: - fileinfo = bz2.BZ2File( fileinfo_path, 'r' ) - while True: - line = fileinfo.readline() - if len( line ) <= 0: - break + with bz2.BZ2File( fileinfo_path, 'rb' ) as fileinfo: + for line in fileinfo: + if not line: + break - line = line[ : -1 ] - if len( line ) <= 0: - continue - - index = line.find( '/' ) - if index < 0: - continue + line = line[ : -1 ] + if not line: + continue - file = line[ index: ] - if len( file ) <= 0: - continue + index = line.find( b'/' ) + if index < 0: + continue - info = line[ : index ].strip() - info = info.split( ' ' ) + f = line[ index: ] + if not f: + continue - if len( info ) == 3: - dict[ file ] = [ int( info[0] ), info[1], info[2] ] #perms, user, group + info = line[ : index ].strip() + info = info.split( b' ' ) - fileinfo.close() - #except: - # pass + if len( info ) == 3: + file_info_dict[f] = (int(info[0]), info[1], info[2]) #perms, user, group - return dict + return file_info_dict def clear_uid_gid_names_cache(self): self.user_cache = {} @@ -407,53 +476,81 @@ self.uid_cache = {} self.gid_cache = {} - def get_uid( self, name ): - try: + def get_uid(self, name, callback = None, backup = None): + if name in self.uid_cache: return self.uid_cache[name] - except: + else: uid = -1 try: - uid = pwd.getpwnam(name).pw_uid - except: - pass + uid = pwd.getpwnam(name.decode()).pw_uid + except Exception as e: + if backup: + uid = backup + msg = "UID for '%s' is not available on this system. Using UID %s from snapshot." %(name.decode(), backup) + logger.info(msg, self) + if callback is not None: + callback(msg) + else: + self.restore_permission_failed = True + msg = 'Failed to get UID for %s: %s' %(name.decode(), str(e)) + logger.error(msg, self) + if callback: + callback(msg) self.uid_cache[name] = uid return uid - - def get_gid( self, name ): - try: + + def get_gid(self, name, callback = None, backup = None): + if name in self.gid_cache: return self.gid_cache[name] - except: + else: gid = -1 try: - gid = grp.getgrnam(name).gr_gid - except: - pass + gid = grp.getgrnam(name.decode()).gr_gid + except Exception as e: + if backup is not None: + gid = backup + msg = "GID for '%s' is not available on this system. Using GID %s from snapshot." %(name.decode(), backup) + logger.info(msg, self) + if callback: + callback(msg) + else: + self.restore_permission_failed = True + msg = 'Failed to get GID for %s: %s' %(name.decode(), str(e)) + logger.error(msg, self) + if callback: + callback(msg) self.gid_cache[name] = gid return gid def get_user_name( self, uid ): - try: + if uid in self.user_cache: return self.user_cache[uid] - except: + else: name = '-' try: name = pwd.getpwuid(uid).pw_name - except: + except Exception as e: + logger.debug('Failed to get user name for UID %s: %s' + %(uid, str(e)), + self) pass self.user_cache[uid] = name return name - + def get_group_name( self, gid ): - try: + if gid in self.group_cache: return self.group_cache[gid] - except: + else: name = '-' try: name = grp.getgrgid(gid).gr_name - except: + except Exception as e: + logger.debug('Failed to get group name for GID %s: %s' + %(gid, str(e)), + self) pass self.group_cache[gid] = name @@ -463,142 +560,203 @@ if not callback is None: if not ok: msg = msg + " : " + _("FAILED") + self.restore_permission_failed = True callback( msg ) - - def _restore_path_info( self, key_path, path, dict, callback = None ): - #print "restore infos - key: %s ; path: %s" % ( key_path, path ) - if key_path not in dict: + def _restore_path_info( self, key_path, path, file_info_dict, callback = None ): + assert isinstance(key_path, bytes), 'key_path is not bytes type: %s' % key_path + assert isinstance(path, bytes), 'path is not bytes type: %s' % path + if key_path not in file_info_dict or not os.path.exists(path): return - info = dict[key_path] + info = file_info_dict[key_path] #restore uid/gid - uid = self.get_uid(info[1]) - gid = self.get_gid(info[2]) - + uid = self.get_uid(info[1], callback) + gid = self.get_gid(info[2], callback) + + #current file stats + st = os.stat(path) + +# logger.debug('%(path)s: uid %(target_uid)s/%(cur_uid)s, gid %(target_gid)s/%(cur_gid)s, mod %(target_mod)s/%(cur_mod)s' +# %{'path': path.decode(), +# 'target_uid': uid, +# 'cur_uid': st.st_uid, +# 'target_gid': gid, +# 'cur_gid': st.st_gid, +# 'target_mod': info[0], +# 'cur_mod': st.st_mode +# }) + if uid != -1 or gid != -1: ok = False - try: - os.chown( path, uid, gid ) - ok = True - except: - pass - self.restore_callback( callback, ok, "chown %s %s : %s" % ( path, uid, gid ) ) - + if uid != st.st_uid: + try: + os.chown( path, uid, gid ) + ok = True + except: + pass + self.restore_callback( callback, ok, "chown %s %s : %s" % ( path.decode(errors = 'ignore'), uid, gid ) ) + #if restore uid/gid failed try to restore at least gid - if not ok: + if not ok and gid != st.st_gid: try: os.chown( path, -1, gid ) ok = True except: pass - self.restore_callback( callback, ok, "chgrp %s %s" % ( path, gid ) ) - + self.restore_callback( callback, ok, "chgrp %s %s" % ( path.decode(errors = 'ignore'), gid ) ) + #restore perms ok = False - try: - os.chmod( path, info[0] ) - ok = True - except: - pass - self.restore_callback( callback, ok, "chmod %s %04o" % ( path, info[0] ) ) + if info[0] != st.st_mode: + try: + os.chmod( path, info[0] ) + ok = True + except: + pass + self.restore_callback( callback, ok, "chmod %s %04o" % ( path.decode(errors = 'ignore'), info[0] ) ) + + def restore( self, snapshot_id, paths, callback = None, restore_to = '', delete = False, backup = False, no_backup = False): + instance = applicationinstance.ApplicationInstance( self.config.get_restore_instance_file(), False, flock = True) + if instance.check(): + instance.start_application() + else: + logger.warning('Restore is already running', self) + return - def restore( self, snapshot_id, path, callback = None, restore_to = '' ): if restore_to.endswith('/'): restore_to = restore_to[ : -1 ] + if not isinstance(paths, (list, tuple)): + paths = (paths, ) + #full rsync full_rsync = self.config.full_rsync() - logger.info( "Restore: %s to: %s" % (path, restore_to) ) + logger.info("Restore: %s to: %s" + %(', '.join(paths), restore_to), + self) info_file = configfile.ConfigFile() info_file.load( self.get_snapshot_info_path( snapshot_id ) ) - backup_suffix = '.backup.' + datetime.date.today().strftime( '%Y%m%d' ) - #cmd = "rsync -avR --copy-unsafe-links --whole-file --backup --suffix=%s --chmod=+w %s/.%s %s" % ( backup_suffix, self.get_snapshot_path_to( snapshot_id ), path, '/' ) - cmd = tools.get_rsync_prefix( self.config, not full_rsync, use_modes = ['ssh'] ) - cmd = cmd + '-R -v ' + cmd_suffix = tools.get_rsync_prefix( self.config, not full_rsync, use_modes = ['ssh'] ) + cmd_suffix += '-R -v ' if not full_rsync: # During the rsync operation, directories must be rwx by the current # user. Files should be r and x (if executable) by the current user. - cmd += '--chmod=Du=rwx,Fu=rX,go= ' - if self.config.is_backup_on_restore_enabled(): - cmd = cmd + "--backup --suffix=%s " % backup_suffix - src_base = self.get_snapshot_path_to( snapshot_id, use_mode = ['ssh'] ) - - src_path = path - src_delta = 0 - if len(restore_to) > 0: - aux = src_path - if aux.startswith('/'): - aux = aux[1:] - items = os.path.split(src_path) - aux = items[0] - if aux.startswith('/'): - aux = aux[1:] - if len(aux) > 0: #bugfix: restore system root ended in //. - src_base = os.path.join(src_base, aux) + '/' - src_path = '/' + items[1] - if items[0] == '/': - src_delta = 0 - else: - src_delta = len(items[0]) - - #print "src_base: %s" % src_base - #print "src_path: %s" % src_path - #print "src_delta: %s" % src_delta - #print "snapshot_id: %s" % snapshot_id - - cmd += self.rsync_remote_path('%s.%s' %(src_base, src_path), use_modes = ['ssh']) - cmd += ' "%s/"' % restore_to - self.restore_callback( callback, True, cmd ) - self._execute( cmd, callback ) + cmd_suffix += '--chmod=Du=rwx,Fu=rX,go= ' + if backup or self.config.is_backup_on_restore_enabled() and not no_backup: + cmd_suffix += "--backup --suffix=%s " % self.backup_suffix() + if delete: + cmd_suffix += '--delete ' + cmd_suffix += '--filter="protect %s" ' % self.config.get_snapshots_path() + cmd_suffix += '--filter="protect %s" ' % self.config._LOCAL_DATA_FOLDER + cmd_suffix += '--filter="protect %s" ' % self.config._MOUNT_ROOT + + restored_paths = [] + for path in paths: + tools.make_dirs(os.path.dirname(path)) + src_path = path + src_delta = 0 + src_base = self.get_snapshot_path_to( snapshot_id, use_mode = ['ssh'] ) + cmd = cmd_suffix + if restore_to: + items = os.path.split(src_path) + aux = items[0].lstrip(os.sep) + #bugfix: restore system root ended in //. + if aux: + src_base = os.path.join(src_base, aux) + '/' + src_path = '/' + items[1] + if items[0] == '/': + src_delta = 0 + else: + src_delta = len(items[0]) + + cmd += self.rsync_remote_path('%s.%s' %(src_base, src_path), use_modes = ['ssh']) + cmd += ' "%s/"' % restore_to + self.restore_callback( callback, True, cmd ) + self._execute( cmd, callback, filters = (self._filter_rsync_progress, )) + self.restore_callback(callback, True, ' ') + restored_paths.append((path, src_delta)) + try: + os.remove(self.config.get_take_snapshot_progress_file()) + except Exception as e: + logger.debug('Failed to remove snapshot progress file %s: %s' + %(self.config.get_take_snapshot_progress_file(), str(e)), + self) + pass if full_rsync and not self.config.get_snapshots_mode() in ['ssh', 'ssh_encfs']: + instance.exit_application() return #restore permissions - logger.info( 'Restore permissions' ) - self.restore_callback( callback, True, '' ) + logger.info('Restore permissions', self) + self.restore_callback( callback, True, ' ' ) self.restore_callback( callback, True, _("Restore permissions:") ) + self.restore_permission_failed = False file_info_dict = self.load_fileinfo_dict( snapshot_id, info_file.get_int_value( 'snapshot_version' ) ) - if len( file_info_dict ) > 0: - #explore items - snapshot_path_to = self.get_snapshot_path_to( snapshot_id, path ).rstrip( '/' ) - root_snapshot_path_to = self.get_snapshot_path_to( snapshot_id ).rstrip( '/' ) - all_dirs = [] #restore dir permissions after all files are done - if len(restore_to) == 0: - path_items = path.strip( '/' ).split( '/' ) - curr_path = '/' - for path_item in path_items: - curr_path = os.path.join( curr_path, path_item ) - all_dirs.append( curr_path ) - else: - all_dirs.append(path) + #cache uids/gids + for uid, name in info_file.get_list_value('user', ('int:uid', 'str:name')): + self.get_uid(name.encode(), callback = callback, backup = uid) + for gid, name in info_file.get_list_value('group', ('int:gid', 'str:name')): + self.get_gid(name.encode(), callback = callback, backup = gid) + + if file_info_dict: + all_dirs = [] #restore dir permissions after all files are done + for path, src_delta in restored_paths: + #explore items + snapshot_path_to = self.get_snapshot_path_to( snapshot_id, path ).rstrip( '/' ) + root_snapshot_path_to = self.get_snapshot_path_to( snapshot_id ).rstrip( '/' ) + #use bytes instead of string from here + if isinstance(path, str): + path = path.encode() + if isinstance(restore_to, str): + restore_to = restore_to.encode() + + if not restore_to: + path_items = path.strip(b'/').split(b'/') + curr_path = b'/' + for path_item in path_items: + curr_path = os.path.join( curr_path, path_item ) + if curr_path not in all_dirs: + all_dirs.append( curr_path ) + else: + if path not in all_dirs: + all_dirs.append(path) - #print "snapshot_path_to: %s" % snapshot_path_to - if os.path.isdir( snapshot_path_to ) and not os.path.islink( snapshot_path_to ): - for explore_path, dirs, files in os.walk( snapshot_path_to ): - for item in dirs: - item_path = os.path.join( explore_path, item )[ len( root_snapshot_path_to ) : ] - all_dirs.append( item_path ) - - for item in files: - item_path = os.path.join( explore_path, item )[ len( root_snapshot_path_to ) : ] - real_path = restore_to + item_path[src_delta:] - self._restore_path_info( item_path, real_path, file_info_dict, callback ) - #else: - # item_path = snapshot_path_to[ len( root_snapshot_path_to ) : ] - # real_path = restore_to + item_path[src_delta:] - # self._restore_path_info( item_path, real_path, file_info_dict, callback ) + if os.path.isdir( snapshot_path_to ) and not os.path.islink( snapshot_path_to ): + head = len(root_snapshot_path_to.encode()) + for explore_path, dirs, files in os.walk( snapshot_path_to.encode() ): + for item in dirs: + item_path = os.path.join( explore_path, item )[head:] + if item_path not in all_dirs: + all_dirs.append( item_path ) + + for item in files: + item_path = os.path.join( explore_path, item )[head:] + real_path = restore_to + item_path[src_delta:] + self._restore_path_info( item_path, real_path, file_info_dict, callback ) all_dirs.reverse() for item_path in all_dirs: real_path = restore_to + item_path[src_delta:] self._restore_path_info( item_path, real_path, file_info_dict, callback ) + self.restore_callback( callback, True, '') + if self.restore_permission_failed: + status = _('FAILED') + else: + status = _('Done') + self.restore_callback( callback, True, _("Restore permissions:") + ' ' + status ) + + instance.exit_application() + + def backup_suffix(self): + return '.backup.' + datetime.date.today().strftime( '%Y%m%d' ) + def get_snapshots_list( self, sort_reverse = True, profile_id = None, version = None ): '''Returns a list with the snapshot_ids of all snapshots in the snapshots folder''' biglist = [] @@ -607,289 +765,238 @@ profile_id = self.config.get_current_profile() snapshots_path = self.config.get_snapshots_full_path( profile_id, version ) - + try: biglist = os.listdir( snapshots_path ) - except: + except Exception as e: + logger.debug('Failed to get snapshots list: %s' + %str(e), + self) pass - _list = [] + list_ = [] for item in biglist: - if len( item ) != 15 and len( item ) != 19: + if not self.is_snapshot_id(item): continue if os.path.isdir( os.path.join( snapshots_path, item, 'backup' ) ): - _list.append( item ) + list_.append( item ) - _list.sort( reverse = sort_reverse ) + list_.sort( reverse = sort_reverse ) - return _list - - def get_snapshots_and_other_list( self, sort_reverse = True ): - '''Returns a list with the snapshot_ids, and paths, of all snapshots in the snapshots_folder and the other_folders''' + return list_ - biglist = [] - profile_id = self.config.get_current_profile() - snapshots_path = self.config.get_snapshots_full_path( profile_id ) + def get_snapshots_and_other(self): + '''Yields snapshot_ids, and paths, of all snapshots in the snapshots_folder and the other_folders''' + + snapshots_path = self.config.get_snapshots_full_path() snapshots_other_paths = self.config.get_other_folders_paths() - + try: - biglist = os.listdir( snapshots_path ) - except: + for item in os.listdir(snapshots_path): + if not self.is_snapshot_id(item): + continue + if os.path.isdir(os.path.join(snapshots_path, item, 'backup')): + yield item + except Exception as e: + logger.debug('Failed to get snapshots list: %s' + %str(e), + self) pass - - _list = [] - for item in biglist: - if len( item ) != 15 and len( item ) != 19: - continue - if os.path.isdir( os.path.join( snapshots_path, item, 'backup' ) ): - #a = ( item, snapshots_path ) - _list.append( item ) - - - if len( snapshots_other_paths ) > 0: + if snapshots_other_paths: for folder in snapshots_other_paths: - folderlist = [] try: - folderlist = os.listdir( folder ) - except: + for item in os.listdir(folder): + if not self.is_snapshot_id(item): + continue + if os.path.isdir(os.path.join(folder, item, 'backup')): + yield item + except Exception as e: + logger.debug('Failed to get folder list for %s: %s' + %(folder, str(e)), + self) pass - - for member in folderlist: - if len( member ) != 15 and len( member ) != 19: - continue - if os.path.isdir( os.path.join( folder, member, 'backup' ) ): - #a = ( member, folder ) - _list.append( member ) - - _list.sort( reverse = sort_reverse ) - return _list - def remove_snapshot( self, snapshot_id ): + def get_snapshots_and_other_list( self, sort_reverse = True ): + '''Returns a list with the snapshot_ids, and paths, of all snapshots in the snapshots_folder and the other_folders''' + + biglist = list(self.get_snapshots_and_other()) + biglist.sort(reverse = sort_reverse) + return biglist + + def remove_snapshot( self, snapshot_id, execute = True, quote = '\"'): if len( snapshot_id ) <= 1: return path = self.get_snapshot_path( snapshot_id, use_mode = ['ssh', 'ssh_encfs'] ) - #cmd = "chmod -R u+rwx \"%s\"" % path - cmd = self.cmd_ssh( 'find \"%s\" -type d -exec chmod u+wx \"{}\" %s' % (path, self.config.find_suffix()), quote = True ) #Debian patch - self._execute( cmd ) - cmd = self.cmd_ssh( "rm -rf \"%s\"" % path ) - self._execute( cmd ) - - def copy_snapshot( self, snapshot_id, new_folder ): - '''Copies a known snapshot to a new location''' - current.path = self.get_snapshot_path( snapshot_id ) - #need to implement hardlinking to existing folder -> cp newest snapshot folder, rsync -aEAXHv --delete to this folder - self._execute( "find \"%s\" -type d -exec chmod u+wx {} %s" % (snapshot_current_path, self.config.find_suffix()) ) - cmd = "cp -dRl \"%s\"* \"%s\"" % ( current_path, new_folder ) - logger.info( '%s is copied to folder %s' %( snapshot_id, new_folder ) ) - self._execute( cmd ) - self._execute( "find \"%s\" \"%s\" -type d -exec chmod u-w {} %s" % ( snapshot_current_path, new_folder, self.config.find_suffix() ) ) - - #def _get_last_snapshot_info( self ): - # lines = '' - # dict = {} - - # try: - # if os.path.exists( self.config.get_last_snapshot_info_file() ): - # file = open( self.config.get_last_snapshot_info_file(), 'rt' ) - # lines = file.read() - # file.close() - # except: - # pass - - # lines = lines.split( '\n' ) - # for line in lines: - # line = line.strip() - # if len( line ) <= 0: - # continue - # fields = line.split( ':' ) - # if len( fields ) < 6: - # continue - - # dict[ fields[0] ] = datetime.datetime( int(fields[1]), int(fields[2]), int(fields[3]), int(fields[4]), int(fields[5]) ) - - # return dict - - #def _set_last_snapshot_info( self, dict ): - # lines = [] - - # for key, value in dict.items(): - # lines.append( "%s:%s:%s:%s:%s:%s" % ( key, value.year, value.month, value.day, value.hour, value.minute ) ) - - # try: - # file = open( self.config.get_last_snapshot_info_file(), 'wt' ) - # file.write( '\n'.join( lines ) ) - # file.close() - # except: - # pass - - #def call_user_callback( self, args ): - # cmd = self.config.get_take_snapshot_user_callback() - # if os.path.isfile( cmd ): - # self._execute( 'sh ' + cmd + ' ' + args ) + find = 'find %(quote)s%(path)s%(quote)s -type d -exec chmod u+wx %(quote)s{}%(quote)s %(suffix)s' \ + % {'path': path, 'quote': quote, 'suffix': self.config.find_suffix()} + rm = 'rm -rf %(quote)s%(path)s%(quote)s' % {'path': path, 'quote': quote} + if execute: + self._execute(self.cmd_ssh(find, quote = True)) + self._execute(self.cmd_ssh(rm)) + else: + return((find, rm)) def update_snapshots_location( self ): '''Updates to location: backintime/machine/user/profile_id''' if self.has_old_snapshots(): - logger.info( 'Snapshot location update flag detected' ) - logger.warning( 'Snapshot location needs update' ) + logger.info('Snapshot location update flag detected', self) + logger.warning('Snapshot location needs update', self) profiles = self.config.get_profiles() answer_change = self.config.question_handler( _('Back In Time changed its backup format.\n\nYour old snapshots can be moved according to this new format. OK?') ) - #print answer_change if answer_change == True: - logger.info( 'Update snapshot locations' ) - #print len( profiles ) - + logger.info('Update snapshot locations', self) + if len( profiles ) == 1: - logger.info( 'Only 1 profile found' ) + logger.info('Only 1 profile found', self) answer_same = True elif len( profiles ) > 1: answer_same = self.config.question_handler( _('%s profiles found. \n\nThe new backup format supports storage of different users and profiles on the same location. Do you want the same location for both profiles? \n\n(The program will still be able to discriminate between them)') % len( profiles ) ) else: - logger.warning( 'No profiles are found!' ) + logger.warning('No profiles found!', self) self.config.notify_error( _( 'No profiles are found. Will have to update to profiles first, please restart Back In Time' ) ) - logger.info( 'Config version is %s' % str( self.get_int_value( 'config.version', 1 ) ) ) - + logger.info('Config version is %s' + %str(self.get_int_value('config.version', 1)), + self) + if self.config.get_int_value( 'config.version', 1 ) > 1: self.config.set_int_value( 'config.version', 2 ) - logger.info( 'Config version set to 2' ) + logger.info('Config version set to 2', self) return False - + # Moving old snapshots per profile_id - #print answer_same profile_id = profiles[0] - #print profile_id - #old_folder = self.get_snapshots_path( profile_id ) - #print old_folder main_folder = self.config.get_snapshots_path( profile_id ) old_snapshots_paths=[] counter = 0 success = [] - + for profile_id in profiles: - #print counter old_snapshots_paths.append( self.config.get_snapshots_path( profile_id ) ) - #print old_snapshots_paths old_folder = os.path.join( self.config.get_snapshots_path( profile_id ), 'backintime' ) - #print old_folder if profile_id != "1" and answer_same == True: - #print 'profile_id != 1, answer = True' self.config.set_snapshots_path( main_folder, profile_id ) - logger.info( 'Folder of profile %s is set to %s' %( profile_id, main_folder ) ) + logger.info('Folder of profile %s is set to %s' + %(profile_id, main_folder), + self) else: self.config.set_snapshots_path( self.config.get_snapshots_path( profile_id ), profile_id ) - logger.info( 'Folder of profile %s is set to %s' %( profile_id, main_folder ) ) + logger.info('Folder of profile %s is set to %s' + %(profile_id, main_folder), + self) new_folder = self.config.get_snapshots_full_path( profile_id ) - #print new_folder - #snapshots_to_move = tools.get_snapshots_list_in_folder( old_folder ) - #print snapshots_to_move output = tools.move_snapshots_folder( old_folder, new_folder ) snapshots_left = tools.get_snapshots_list_in_folder( old_folder ) if output == True: success.append( True ) - if len( snapshots_left ) == 0: - logger.info( 'Update was successful. Snapshots of profile %s are moved to their new location' % profile_id ) + if not snapshots_left: + logger.info('Update was successful. Snapshots of profile %s are moved to their new location' + %profile_id, self) else: - logger.warning( 'Not all snapshots are removed from the original folder!' ) - logger.info( 'The following snapshots are still present: %s' % snapshots_left ) - logger.info( 'You could move them manually or leave them where they are now' ) + logger.warning('Not all snapshots are removed from the original folder!', self) + logger.info('The following snapshots are still present: %s' %snapshots_left, self) + logger.info('You could move them manually or leave them where they are now', self) else: - logger.warning( '%s: are not moved to their new location!' %snapshots_left ) - + logger.warning('%s: are not moved to their new location!' %snapshots_left, self) + answer_unsuccessful = self.config.question_handler( _('%(snapshots_left)s\nof profile %(profile_id)s are not moved to their new location\nDo you want to proceed?\n(Back In Time will be able to continue taking snapshots, however the remaining snapshots will not be considered for automatic removal)\n\nIf not Back In Time will restore former settings for this profile, however cannot continue taking snapshots' %{ 'snapshots_left' : snapshots_left, 'profile_id' : profile_id } ) ) if answer_unsuccessful == True: success.append( True ) else: success.append( False ) # restore - logger.info( 'Restore former settings' ) + logger.info('Restore former settings', self) self.config.set_snapshots_path( old_snapshots_paths[counter], profile_id ) - #print self.get_snapshots_path( profile_id ) self.config.error_handler( _('Former settings of profile %s are restored.\nBack In Time cannot continue taking new snapshots.\n\nYou can manually move the snapshots, \nif you are done restart Back In Time to proceed' %profile_id ) ) - + counter = counter + 1 - - #print success + overall_success = True for item in success: if item == False: - overall_success = False + overall_success = False if overall_success == True: - #self.set_update_other_folders( False ) - #print self.get_update_other_folders() - logger.info( 'Back In Time will be able to make new snapshots again!' ) + logger.info('Back In Time will be able to make new snapshots again!', self) self.config.error_handler( _('Update was successful!\n\nBack In Time will continue taking snapshots again as scheduled' ) ) elif answer_change == False: - logger.info( 'Move refused by user' ) - logger.warning( 'Old snapshots are not taken into account by smart-remove' ) + logger.info('Move refused by user', self) + logger.warning('Old snapshots are not taken into account by smart-remove', self) answer_continue = self.config.question_handler( _('Are you sure you do not want to move your old snapshots?\n\n\nIf you do, you will not see these questions again next time, Back In Time will continue making snapshots again, but smart-remove cannot take your old snapshots into account any longer!\n\nIf you do not, you will be asked again next time you start Back In Time.') ) if answer_continue == True: - #self.set_update_other_folders( False ) for profile_id in profiles: old_folder = self.config.get_snapshots_path( profile_id ) self.config.set_snapshots_path( old_folder, profile_id ) - logger.info( 'Folder of profile %s is set to %s' %( profile_id, self.get_snapshots_path( profile_id ) ) ) - - logger.info( 'Back In Time will be able to make new snapshots again!' ) + logger.info('Folder of profile %s is set to %s' + %(profile_id, self.get_snapshots_path(profile_id)), + self) + + logger.info('Back In Time will be able to make new snapshots again!', self) self.config.error_handler( _('Back In Time will continue taking snapshots again as scheduled' ) ) - else: + else: self.config.error_handler( _( 'Back In Time still cannot continue taking new snapshots.\nRestart Back In Time to see the questions again' ) ) else: return False - + def has_old_snapshots( self ): - return len( self.get_snapshots_list( False, None, 3 ) ) > 0 + ret = len( self.get_snapshots_list( False, None, 3 ) ) > 0 + logger.debug('Found old snapshots: %s' %ret, self) + return ret def take_snapshot( self, force = False ): - ret_val = False + ret_val, ret_error = False, True sleep = True - self.plugin_manager.load_plugins( self ) + self.config.PLUGIN_MANAGER.load_plugins( self ) if not self.config.is_configured(): - logger.warning( 'Not configured' ) - self.plugin_manager.on_error( 1 ) #not configured - elif self.config.is_no_on_battery_enabled() and tools.on_battery(): - logger.info( 'Deferring backup while on battery' ) - logger.warning( 'Backup not performed' ) - #elif self.config.get_update_other_folders() == True: + logger.warning('Not configured', self) + self.config.PLUGIN_MANAGER.on_error( 1 ) #not configured + elif not force and self.config.is_no_on_battery_enabled() and tools.on_battery(): + self.set_take_snapshot_message(0, _('Deferring backup while on battery')) + logger.info('Deferring backup while on battery', self) + logger.warning('Backup not performed', self) elif self.has_old_snapshots(): - logger.info( 'The application needs to change the backup format. Start the GUI to proceed. (As long as you do not you will not be able to make new snapshots!)' ) - logger.warning( 'Backup not performed' ) + logger.info('The application needs to change the backup format. ' + 'Start the GUI to proceed. (As long as you do not you ' + 'will not be able to make new snapshots!)', self) + logger.warning('Backup not performed', self) + elif not force and not self.config.is_backup_scheduled(): + logger.info('Profile "%s" is not scheduled to run now.' + %self.config.get_profile_name(), self) else: - instance = applicationinstance.ApplicationInstance( self.config.get_take_snapshot_instance_file(), False ) + instance = applicationinstance.ApplicationInstance( self.config.get_take_snapshot_instance_file(), False, flock = True) + restore_instance = applicationinstance.ApplicationInstance( self.config.get_restore_instance_file(), False ) if not instance.check(): - logger.warning( 'A backup is already running' ) - self.plugin_manager.on_error( 2 ) #a backup is already running + logger.warning('A backup is already running', self) + self.config.PLUGIN_MANAGER.on_error( 2 ) #a backup is already running + elif not restore_instance.check(): + logger.warning('Restore is still running. Stop backup until restore is done.', self) else: - ret_error = False - if self.config.is_no_on_battery_enabled () and not tools.power_status_available(): - logger.warning( 'Backups disabled on battery but power status is not available' ) - - instance.start_application() - logger.info( 'Lock' ) + logger.warning('Backups disabled on battery but power status is not available', self) - #if not self.config.get_per_directory_schedule(): - # force = True + instance.start_application() + self.flockExclusive() + logger.info('Lock', self) now = datetime.datetime.today() - #if not force: - # now = now.replace( second = 0 ) + + #inhibit suspend/hibernate during snapshot is running + self.config.inhibitCookie = tools.inhibitSuspend(toplevel_xid = self.config.xWindowId) #mount try: hash_id = mount.Mount(cfg = self.config).mount() - except mount.MountException as ex: - logger.error(str(ex)) + except MountException as ex: + logger.error(str(ex), self) instance.exit_application() - logger.info( 'Unlock' ) - os.system( 'sleep 2' ) + logger.info('Unlock', self) + time.sleep(2) return False else: self.config.set_current_hash_id(hash_id) @@ -897,68 +1004,71 @@ #include_folders, ignore_folders, dict = self._get_backup_folders( now, force ) include_folders = self.config.get_include() - if len( include_folders ) <= 0: - logger.info( 'Nothing to do' ) + if not include_folders: + logger.info('Nothing to do', self) + elif not self.config.PLUGIN_MANAGER.on_process_begins(): + logger.info('A plugin prevented the backup', self) else: - self.plugin_manager.on_process_begins() #take snapshot process begin - logger.info( "on process begins" ) + #take snapshot process begin self.set_take_snapshot_message( 0, '...' ) self.new_take_snapshot_log( now ) profile_id = self.config.get_current_profile() - logger.info( "Profile_id: %s" % profile_id ) - + profile_name = self.config.get_profile_name() + logger.info("Take a new snapshot. Profile: %s %s" + %(profile_id, profile_name), self) + if not self.config.can_backup( profile_id ): - if self.plugin_manager.has_gui_plugins() and self.config.is_notify_enabled(): - self.set_take_snapshot_message( 1, + if self.config.PLUGIN_MANAGER.has_gui_plugins() and self.config.is_notify_enabled(): + self.set_take_snapshot_message( 1, _('Can\'t find snapshots folder.\nIf it is on a removable drive please plug it.' ) + '\n' + gettext.ngettext( 'Waiting %s second.', 'Waiting %s seconds.', 30 ) % 30, 30 ) - for counter in xrange( 30, 0, -1 ): - os.system( 'sleep 1' ) - if self.config.can_backup(): - break + for counter in range( 30, 0, -1 ): + time.sleep(1) + if self.config.can_backup(): + break if not self.config.can_backup( profile_id ): - logger.warning( 'Can\'t find snapshots folder !' ) - self.plugin_manager.on_error( 3 ) #Can't find snapshots directory (is it on a removable drive ?) + logger.warning('Can\'t find snapshots folder!', self) + self.config.PLUGIN_MANAGER.on_error( 3 ) #Can't find snapshots directory (is it on a removable drive ?) else: + ret_error = False snapshot_id = self.get_snapshot_id( now ) snapshot_path = self.get_snapshot_path( snapshot_id ) - + if os.path.exists( snapshot_path ): - logger.warning( "Snapshot path \"%s\" already exists" % snapshot_path ) - self.plugin_manager.on_error( 4, snapshot_id ) #This snapshots already exists + logger.warning("Snapshot path \"%s\" already exists" %snapshot_path, self) + self.config.PLUGIN_MANAGER.on_error( 4, snapshot_id ) #This snapshots already exists else: - #ret_val = self._take_snapshot( snapshot_id, now, include_folders, ignore_folders, dict, force ) ret_val, ret_error = self._take_snapshot( snapshot_id, now, include_folders ) if not ret_val: self._execute( "rm -rf \"%s\"" % snapshot_path ) if ret_error: - logger.error( 'Failed to take snapshot !!!' ) + logger.error('Failed to take snapshot !!!', self) self.set_take_snapshot_message( 1, _('Failed to take snapshot %s !!!') % now.strftime( '%x %H:%M:%S' ) ) - os.system( 'sleep 2' ) + time.sleep(2) else: - logger.warning( "No new snapshot" ) + logger.warning("No new snapshot", self) else: ret_error = False - + if not ret_error: self._free_space( now ) self.set_take_snapshot_message( 0, _('Finalizing') ) - os.system( 'sleep 2' ) + time.sleep(2) sleep = False if ret_val: - self.plugin_manager.on_new_snapshot( snapshot_id, snapshot_path ) #new snapshot + self.config.PLUGIN_MANAGER.on_new_snapshot( snapshot_id, snapshot_path ) #new snapshot - self.plugin_manager.on_process_ends() #take snapshot process end + self.config.PLUGIN_MANAGER.on_process_ends() #take snapshot process end if sleep: - os.system( 'sleep 2' ) + time.sleep(2) sleep = False if not ret_error: @@ -967,18 +1077,45 @@ #unmount try: mount.Mount(cfg = self.config).umount(self.config.current_hash_id) - except mount.MountException as ex: - logger.error(str(ex)) + except MountException as ex: + logger.error(str(ex), self) instance.exit_application() - logger.info( 'Unlock' ) + self.flockRelease() + logger.info('Unlock', self) if sleep: - os.system( 'sleep 2' ) #max 1 backup / second + time.sleep(2) #max 1 backup / second + + if not ret_error and not list(self.config.anacrontab_files()): + tools.writeTimeStamp(self.config.get_anacron_spool_file()) + + #release inhibit suspend + if self.config.inhibitCookie: + self.config.inhibitCookie = tools.unInhibitSuspend(*self.config.inhibitCookie) return ret_val + def _filter_rsync_progress(self, line): + m = self.reRsyncProgress.match(line) + if m: + if m.group(5).strip(): + return + pg = progress.ProgressFile(self.config) + pg.set_int_value('status', pg.RSYNC) + pg.set_str_value('sent', m.group(1) ) + pg.set_int_value('percent', int(m.group(2)) ) + pg.set_str_value('speed', m.group(3) ) + pg.set_str_value('eta', m.group(4) ) + pg.save() + del(pg) + return + return line + def _exec_rsync_callback( self, line, params ): + if not line: + return + self.set_take_snapshot_message( 0, _('Take snapshot') + " (rsync: %s)" % line ) if line.endswith( ')' ): @@ -994,147 +1131,89 @@ self.append_to_take_snapshot_log( '[C] ' + line[ 12 : ], 2 ) def _exec_rsync_compare_callback( self, line, params ): - #self.set_take_snapshot_message( 0, _('Compare with snapshot %s') % params[0] ) - if len(line) >= 13: if line.startswith( 'BACKINTIME: ' ): if line[12] != '.': params[1] = True self.append_to_take_snapshot_log( '[C] ' + line[ 12 : ], 2 ) - def _append_item_to_list( self, item, _list ): - for list_item in _list: + def _append_item_to_list( self, item, list_ ): + for list_item in list_: if item == list_item: return - _list.append( item ) - - def _is_auto_backup_needed( self, now, last, mode ): - #print "now: %s, last: %s, mode: %s" % ( now, last, mode ) - - if self.config.NONE == mode: - return False - - if now <= last: - return False - - if now.year > last.year: #year changed - return True - - if self.config.MONTH == mode: #month changed - return now.month > last.month - - if self.config.WEEK == mode: #weekly - if now.date() <= last.date(): - return False - return now.isoweekday() == 7 #Sunday - - if now.date() > last.date(): #day changed - return True - - if self.config.DAY == mode: - return False - - if now.hour > last.hour: #hour changed - return True - - if self.config.HOUR == mode: - return False - - if self.config._10_MIN == mode: #every 10 minutes - return ( int( now.minute / 10 ) ) > ( int( last.minute / 10 ) ) - - if self.config._5_MIN == mode: #every 5 minutes - return ( int( now.minute / 5 ) ) > ( int( last.minute / 5 ) ) - - return False - - #def _get_backup_folders( self, now, force ): - # include_folders = [] - # ignore_folders = [] - # dict = self._get_last_snapshot_info() - # dict2 = {} - - # all_include_folders = self.config.get_include() - # - # for item in all_include_folders: - # path = item[0] - # path = os.path.expanduser( path ) - # path = os.path.abspath( path ) - - # if path in dict: - # dict2[ path ] = dict[ path ] - - # if not os.path.isdir( path ): - # continue - - # if not force and path in dict: - # if not self._is_auto_backup_needed( now, dict[path], item[1] ): - # ignore_folders.append( path ) - # continue - - # include_folders.append( path ) - - # logger.info( "Include folders: %s" % include_folders ) - # logger.info( "Ignore folders: %s" % ignore_folders ) - # logger.info( "Last snapshots: %s" % dict2 ) - - # return ( include_folders, ignore_folders, dict2 ) + list_.append( item ) def _create_directory( self, folder ): tools.make_dirs( folder ) if not os.path.exists( folder ): - logger.error( "Can't create folder: %s" % folder ) + logger.error("Can't create folder: %s" % folder, self) self.set_take_snapshot_message( 1, _('Can\'t create folder: %s') % folder ) - os.system( 'sleep 2' ) #max 1 backup / second + time.sleep(2) #max 1 backup / second return False return True - - def _save_path_info_line( self, fileinfo, path, info ): - fileinfo.write( "%s %s %s %s\n" % ( info[0], info[1], info[2], path ) ) def _save_path_info( self, fileinfo, path ): - try: - info = os.stat( path ) - user = self.get_user_name(info.st_uid) - group = self.get_group_name(info.st_gid) - self._save_path_info_line( fileinfo, path, [ info.st_mode, user, group ] ) - except: - pass + assert isinstance(path, bytes), 'path is not bytes type: %s' % path + if path and os.path.exists(path): + info = os.stat(path) + mode = str(info.st_mode).encode('utf-8', 'replace') + user = self.get_user_name(info.st_uid).encode('utf-8', 'replace') + group = self.get_group_name(info.st_gid).encode('utf-8', 'replace') + fileinfo.write(b' '.join((mode, user, group, path)) + b'\n' ) def _take_snapshot( self, snapshot_id, now, include_folders ): # ignore_folders, dict, force ): self.set_take_snapshot_message( 0, _('...') ) - new_snapshot_id = 'new_snapshot' - def snapshot_path(**kwargs): - return self.get_snapshot_path( snapshot_id, **kwargs ) + return self.get_snapshot_path(snapshot_id, **kwargs) def new_snapshot_path(**kwargs): - return self.get_snapshot_path( new_snapshot_id, **kwargs ) + return self.get_snapshot_path(self.NEW_SNAPSHOT_ID, **kwargs) def new_snapshot_path_to(**kwargs): - return self.get_snapshot_path_to( new_snapshot_id, **kwargs ) + return self.get_snapshot_path_to(self.NEW_SNAPSHOT_ID, **kwargs) def prev_snapshot_path_to(**kwargs): - return self.get_snapshot_path_to( prev_snapshot_id, **kwargs ) + return self.get_snapshot_path_to(prev_snapshot_id, **kwargs) #find find_suffix = self.config.find_suffix() - - if os.path.exists( new_snapshot_path() ): - #self._execute( "find \"%s\" -type d -exec chmod +w {} \;" % new_snapshot_path ) - #self._execute( "chmod -R u+rwx \"%s\"" % new_snapshot_path ) - self._execute( "find \"%s\" -type d -exec chmod u+wx {} %s" % (new_snapshot_path(), find_suffix) ) #Debian patch - self._execute( "rm -rf \"%s\"" % new_snapshot_path() ) - + + #save to continue + saveToContinueFlag = SaveToContinueFlag(new_snapshot_path()) + if saveToContinueFlag.exists(): + logger.info("Found leftover '%s' which can be continued." %self.NEW_SNAPSHOT_ID, self) + self.set_take_snapshot_message(0, _("Found leftover '%s' which can be continued.") %self.NEW_SNAPSHOT_ID) + #fix permissions + self._execute(self.cmd_ssh("find \"%s\" -type d -exec chmod u+wx \"{}\" %s" + %(new_snapshot_path(use_mode = ['ssh', 'ssh_encfs']), find_suffix), + quote = True)) + for file in os.listdir(new_snapshot_path()): + file = os.path.join(new_snapshot_path(), file) + mode = os.stat(file).st_mode + os.chmod(file, mode | stat.S_IWUSR) + + if os.path.exists(new_snapshot_path()) and not saveToContinueFlag.exists(): + logger.info("Remove leftover '%s' folder from last run" %self.NEW_SNAPSHOT_ID) + self.set_take_snapshot_message(0, _("Remove leftover '%s' folder from last run") %self.NEW_SNAPSHOT_ID) + #first do the heavy lifting over ssh + self._execute(self.cmd_ssh("find \"%s\" -type d -exec chmod u+wx \"{}\" %s" + %(new_snapshot_path(use_mode = ['ssh', 'ssh_encfs']), find_suffix), + quote = True)) #Debian patch + self._execute(self.cmd_ssh("rm -rf \"%s\"" + %os.path.join(new_snapshot_path(use_mode = ['ssh', 'ssh_encfs']), 'backup') )) + #then delete the new_snapshot folder through sshfs + #this will make sure os.path.exists will recognize the path is gone + self._execute("rm -rf \"%s\"" %new_snapshot_path()) + if os.path.exists( new_snapshot_path() ): - logger.error( "Can't remove folder: %s" % new_snapshot_path() ) + logger.error("Can't remove folder: %s" % new_snapshot_path(), self ) self.set_take_snapshot_message( 1, _('Can\'t remove folder: %s') % new_snapshot_path() ) - os.system( 'sleep 2' ) #max 1 backup / second + time.sleep(2) #max 1 backup / second return [ False, True ] - + #create exclude patterns string items = [] encode = self.config.ENCODE @@ -1143,8 +1222,6 @@ if exclude is None: continue self._append_item_to_list( "--exclude=\"%s\"" % exclude, items ) - #for folder in ignore_folders: - # self._append_item_to_list( "--exclude=\"%s\"" % folder, items ) rsync_exclude = ' '.join( items ) #create include patterns list @@ -1181,35 +1258,29 @@ #full rsync full_rsync = self.config.full_rsync() - + #rsync prefix & suffix - rsync_prefix = tools.get_rsync_prefix( self.config, not full_rsync ) # 'rsync -aEAXH ' + rsync_prefix = tools.get_rsync_prefix( self.config, not full_rsync ) + if self.config.exclude_by_size_enabled(): + rsync_prefix += ' --max-size=%sM' % self.config.exclude_by_size() rsync_exclude_backup_directory = " --exclude=\"%s\" --exclude=\"%s\" --exclude=\"%s\" " % \ ( encode.exclude( self.config.get_snapshots_path() ), \ encode.exclude( self.config._LOCAL_DATA_FOLDER ) , \ - encode.exclude( self.config.MOUNT_ROOT ) ) - #rsync_suffix = ' --chmod=Fa-w,Da-w --delete ' + rsync_exclude_backup_directory + rsync_include + ' ' + rsync_exclude + ' ' + rsync_include2 + ' --exclude=\"*\" / ' + encode.exclude( self.config._MOUNT_ROOT ) ) rsync_suffix = ' --chmod=Du+wx ' + rsync_exclude_backup_directory rsync_suffix += rsync_include + ' ' + rsync_exclude + ' ' + rsync_include2 rsync_suffix += ' --exclude=\"*\" ' + encode.chroot + ' ' - #update dict - #if not force: - # for folder in include_folders: - # dict[ folder ] = now - # - # self._set_last_snapshot_info( dict ) - prev_snapshot_id = '' snapshots = self.get_snapshots_list() - if len( snapshots ) == 0: + if not snapshots: snapshots = self.get_snapshots_and_other_list() # When there is no snapshots it takes the last snapshot from the other folders # It should delete the excluded folders then rsync_prefix = rsync_prefix + ' --delete --delete-excluded ' - - if len( snapshots ) > 0: + + if snapshots and not saveToContinueFlag.exists(): prev_snapshot_id = snapshots[0] if not full_rsync: @@ -1217,42 +1288,27 @@ if check_for_changes: prev_snapshot_name = self.get_snapshot_display_id( prev_snapshot_id ) self.set_take_snapshot_message( 0, _('Compare with snapshot %s') % prev_snapshot_name ) - logger.info( "Compare with old snapshot: %s" % prev_snapshot_id ) - - cmd = rsync_prefix + ' -i --dry-run --out-format="BACKINTIME: %i %n%L"' + rsync_suffix + logger.info("Compare with old snapshot: %s" % prev_snapshot_id, self) + + cmd = rsync_prefix + ' -i --dry-run --out-format="BACKINTIME: %i %n%L"' + rsync_suffix cmd += self.rsync_remote_path( prev_snapshot_path_to(use_mode = ['ssh', 'ssh_encfs']) ) params = [ prev_snapshot_path_to(), False ] - #try_cmd = self._execute_output( cmd, self._exec_rsync_compare_callback, prev_snapshot_name ) self.append_to_take_snapshot_log( '[I] ' + cmd, 3 ) self._execute( cmd, self._exec_rsync_compare_callback, params ) changed = params[1] - #changed = False - - #for line in try_cmd.split( '\n' ): - # if len( line ) < 1: - # continue - - # if line[0] != '.': - # changed = True - # break - if not changed: - logger.info( "Nothing changed, no back needed" ) + logger.info("Nothing changed, no back needed", self) + self.append_to_take_snapshot_log( '[I] Nothing changed, no back needed', 3 ) + self.set_snapshot_last_check(prev_snapshot_id) return [ False, False ] if not self._create_directory( new_snapshot_path_to() ): return [ False, True ] - + if not full_rsync: self.set_take_snapshot_message( 0, _('Create hard-links') ) - logger.info( "Create hard-links" ) - - # When schedule per included folders is enabled this did not work (cp -alb iso cp -al?) - # This resulted in a complete rsync for the whole snapshot consuming time and space - # The ignored folders were copied afterwards. To solve this, the whole last snapshot is now hardlinked - # and rsync is called only for the folders that should be synced (without --delete-excluded). - #if force or len( ignore_folders ) == 0: + logger.info("Create hard-links", self) #make source snapshot folders rw to allow cp -al self._execute( self.cmd_ssh('find \"%s\" -type d -exec chmod u+wx \"{}\" %s' % (prev_snapshot_path_to(use_mode = ['ssh', 'ssh_encfs']), find_suffix), quote = True) ) #Debian patch @@ -1269,41 +1325,37 @@ #make snapshot items rw to allow xopy xattr self._execute( self.cmd_ssh( "chmod -R a+w \"%s\"" % new_snapshot_path(use_mode = ['ssh', 'ssh_encfs']) ) ) - #else: - # for folder in include_folders: - # prev_path = self.get_snapshot_path_to( prev_snapshot_id, folder ) - # new_path = self.get_snapshot_path_to( new_snapshot_id, folder ) - # tools.make_dirs( new_path ) - # cmd = "cp -alb \"%s\"* \"%s\"" % ( prev_path, new_path ) - # self._execute( cmd ) else: - if not self._create_directory( new_snapshot_path_to() ): + if not saveToContinueFlag.exists() and not self._create_directory( new_snapshot_path_to() ): return [ False, True ] #sync changed folders - logger.info( "Call rsync to take the snapshot" ) - cmd = rsync_prefix + ' -v ' + rsync_suffix + logger.info("Call rsync to take the snapshot", self) + saveToContinueFlag.set() + cmd = rsync_prefix + ' -v ' + rsync_suffix cmd += self.rsync_remote_path( new_snapshot_path_to(use_mode = ['ssh', 'ssh_encfs']) ) self.set_take_snapshot_message( 0, _('Take snapshot') ) if full_rsync: - if len( prev_snapshot_id ) > 0: - #prev_snapshot_folder = self.get_snapshot_path_to( prev_snapshot_id ) - #prev_snapshot_folder_ssh = self.get_snapshot_path_to_ssh( prev_snapshot_id ) - #if ssh: - # cmd = cmd + " --link-dest=\"%s\"" % prev_snapshot_folder_ssh - #else: - # cmd = cmd + " --link-dest=\"%s\"" % prev_snapshot_folder + if prev_snapshot_id: link_dest = encode.path( os.path.join(prev_snapshot_id, 'backup') ) link_dest = os.path.join('..', '..', link_dest) cmd = cmd + " --link-dest=\"%s\"" % link_dest + if full_rsync or not check_for_changes: cmd = cmd + ' -i --out-format="BACKINTIME: %i %n%L"' params = [False, False] self.append_to_take_snapshot_log( '[I] ' + cmd, 3 ) - self._execute( cmd + ' 2>&1', self._exec_rsync_callback, params ) + self._execute( cmd + ' 2>&1', self._exec_rsync_callback, params, filters = (self._filter_rsync_progress, )) + try: + os.remove(self.config.get_take_snapshot_progress_file()) + except Exception as e: + logger.debug('Failed to remove snapshot progress file %s: %s' + %(self.config.get_take_snapshot_progress_file(), str(e)), + self) + pass has_errors = False if params[0]: @@ -1313,102 +1365,76 @@ if not full_rsync: #fix previous snapshot: make read-only again - if len( prev_snapshot_id ) > 0: + if prev_snapshot_id: self._execute( self.cmd_ssh("chmod -R a-w \"%s\"" % prev_snapshot_path_to(use_mode = ['ssh', 'ssh_encfs']) ) ) return [ False, True ] has_errors = True - self._execute( "touch \"%s\"" % self.get_snapshot_failed_path( new_snapshot_id ) ) + self._execute( "touch \"%s\"" % self.get_snapshot_failed_path(self.NEW_SNAPSHOT_ID) ) if full_rsync: - if not params[1]: + if not params[1] and not self.config.take_snapshot_regardless_of_changes(): self._execute( self.cmd_ssh( 'find \"%s\" -type d -exec chmod u+wx \"{}\" %s' % (new_snapshot_path(use_mode = ['ssh', 'ssh_encfs']), find_suffix), quote = True) ) #Debian patch self._execute( self.cmd_ssh( "rm -rf \"%s\"" % new_snapshot_path(use_mode = ['ssh', 'ssh_encfs']) ) ) - logger.info( "Nothing changed, no back needed" ) + logger.info("Nothing changed, no back needed", self) + self.append_to_take_snapshot_log( '[I] Nothing changed, no back needed', 3 ) + self.set_snapshot_last_check(prev_snapshot_id) return [ False, False ] - + #backup config file - logger.info( 'Save config file' ) + logger.info('Save config file', self) self.set_take_snapshot_message( 0, _('Save config file ...') ) - self._execute( 'cp %s %s' % (self.config._LOCAL_CONFIG_PATH, new_snapshot_path_to() + '..') ) - + self._execute( 'cp "%s" "%s"' % (self.config._LOCAL_CONFIG_PATH, new_snapshot_path_to() + '..') ) + if not full_rsync or self.config.get_snapshots_mode() in ['ssh', 'ssh_encfs']: #save permissions for sync folders - logger.info( 'Save permissions' ) + logger.info('Save permissions', self) self.set_take_snapshot_message( 0, _('Save permission ...') ) - fileinfo = bz2.BZ2File( self.get_snapshot_fileinfo_path( new_snapshot_id ), 'w' ) - path_to_explore = self.get_snapshot_path_to( new_snapshot_id ).rstrip( '/' ) - fileinfo_dict = {} - - permission_done = False - if self.config.get_snapshots_mode() in ['ssh', 'ssh_encfs']: - path_to_explore_ssh = new_snapshot_path_to(use_mode = ['ssh', 'ssh_encfs']).rstrip( '/' ) - cmd = self.cmd_ssh(['find', path_to_explore_ssh, '-name', '\*', '-print']) - - find = subprocess.Popen(cmd, stdout = subprocess.PIPE, stderr = subprocess.PIPE) - output = find.communicate()[0] - if find.returncode: - logger.warning('Save permission over ssh failed. Retry normal methode') - else: + with bz2.BZ2File(self.get_snapshot_fileinfo_path(self.NEW_SNAPSHOT_ID), 'wb') as fileinfo: + + permission_done = False + if self.config.get_snapshots_mode() in ['ssh', 'ssh_encfs']: + path_to_explore_ssh = new_snapshot_path_to(use_mode = ['ssh', 'ssh_encfs']).rstrip( '/' ) + cmd = self.cmd_ssh(['find', path_to_explore_ssh, '-print']) + if self.config.get_snapshots_mode() == 'ssh_encfs': - decode = encfstools.Decode(self.config) - path_to_explore_ssh = decode.remote(path_to_explore_ssh) + decode = encfstools.Decode(self.config, False) + path_to_explore_ssh = decode.remote(path_to_explore_ssh.encode()) else: decode = encfstools.Bounce() - for line in output.split('\n'): - if not len(line) == 0: - line = decode.remote(line) - item_path = line[ len( path_to_explore_ssh ) : ] - fileinfo_dict[item_path] = 1 + head = len( path_to_explore_ssh ) + + find = subprocess.Popen(cmd, stdout = subprocess.PIPE, + stderr = subprocess.PIPE) + + for line in find.stdout: + if line: + self._save_path_info(fileinfo, decode.remote(line.rstrip(b'\n'))[head:]) + + output = find.communicate()[0] + if find.returncode: + self.set_take_snapshot_message(1, _('Save permission over ssh failed. Retry normal method')) + else: + for line in output.split(b'\n'): + if line: + self._save_path_info(fileinfo, decode.remote(line)[head:]) + permission_done = True + + if not permission_done: + path_to_explore = self.get_snapshot_path_to(self.NEW_SNAPSHOT_ID).rstrip('/').encode() + for path, dirs, files in os.walk( path_to_explore ): + dirs.extend( files ) + for item in dirs: + item_path = os.path.join( path, item )[ len( path_to_explore ) : ] self._save_path_info( fileinfo, item_path ) - permission_done = True - - if not permission_done: - for path, dirs, files in os.walk( path_to_explore ): - dirs.extend( files ) - for item in dirs: - item_path = os.path.join( path, item )[ len( path_to_explore ) : ] - fileinfo_dict[item_path] = 1 - self._save_path_info( fileinfo, item_path ) - - # We now copy on forehand, so copying afterwards is not necessary anymore - ##copy ignored folders - #if not force and len( prev_snapshot_id ) > 0 and len( ignore_folders ) > 0: - # prev_fileinfo_dict = self.load_fileinfo_dict( prev_snapshot_id ) - # - # for folder in ignore_folders: - # prev_path = self.get_snapshot_path_to( prev_snapshot_id, folder ) - # new_path = self.get_snapshot_path_to( new_snapshot_id, folder ) - # tools.make_dirs( new_path ) - # cmd = "cp -alb \"%s/\"* \"%s\"" % ( prev_path, new_path ) - # self._execute( cmd ) - # - # if len( prev_fileinfo_dict ) > 0: - # #save permissions for all items to folder - # item_path = '/' - # prev_path_items = folder.strip( '/' ).split( '/' ) - # for item in items: - # item_path = os.path.join( item_path, item ) - # if item_path not in fileinfo_dict and item_path in prev_fileinfo_dict: - # self._save_path_info_line( fileinfo, item_path, prev_fileinfo_dict[item_path] ) - - # #save permission for all items in folder - # for path, dirs, files in os.walk( new_path ): - # dirs.extend( files ) - # for item in dirs: - # item_path = os.path.join( path, item )[ len( path_to_explore ) : ] - # if item_path not in fileinfo_dict and item_path in prev_fileinfo_dict: - # self._save_path_info_line( fileinfo, item_path, prev_fileinfo_dict[item_path] ) - - fileinfo.close() - - #create info file - logger.info( "Create info file" ) - machine = socket.gethostname() + + #create info file + logger.info("Create info file", self) + machine = self.config.get_host() user = self.config.get_user() profile_id = self.config.get_current_profile() tag = self.config.get_tag( profile_id ) @@ -1419,28 +1445,31 @@ info_file.set_str_value( 'snapshot_user', user ) info_file.set_int_value( 'snapshot_profile_id', profile_id ) info_file.set_int_value( 'snapshot_tag', tag ) - info_file.save( self.get_snapshot_info_path( new_snapshot_id ) ) + info_file.set_list_value('user', ('int:uid', 'str:name'), list(self.user_cache.items())) + info_file.set_list_value('group', ('int:gid', 'str:name'), list(self.group_cache.items())) + info_file.save(self.get_snapshot_info_path(self.NEW_SNAPSHOT_ID)) info_file = None - + #copy take snapshot log try: - logfile = open( self.config.get_take_snapshot_log_file(), 'r' ) - logdata = logfile.read() - logfile.close() - - logfile = bz2.BZ2File( self.get_snapshot_log_path( new_snapshot_id ), 'w' ) - logfile.write( logdata ) - logfile.close() - except: + with open( self.config.get_take_snapshot_log_file(), 'rb' ) as logfile: + with bz2.BZ2File(self.get_snapshot_log_path(self.NEW_SNAPSHOT_ID), 'wb') as logfile_bz2: + for line in logfile: + logfile_bz2.write(line) + except Exception as e: + logger.debug('Failed to write take_snapshot log %s into compressed file %s: %s' + %(self.config.get_take_snapshot_log_file(), self.get_snapshot_log_path(self.NEW_SNAPSHOT_ID), str(e)), + self) pass + saveToContinueFlag.unset() #rename snapshot - os.system( self.cmd_ssh( "mv \"%s\" \"%s\"" % ( new_snapshot_path(use_mode = ['ssh', 'ssh_encfs']), snapshot_path(use_mode = ['ssh', 'ssh_encfs']) ) ) ) + os.rename(new_snapshot_path(), snapshot_path()) if not os.path.exists( snapshot_path() ): - logger.error( "Can't rename %s to %s" % ( new_snapshot_path(), snapshot_path() ) ) + logger.error("Can't rename %s to %s" % (new_snapshot_path(), snapshot_path()), self) self.set_take_snapshot_message( 1, _('Can\'t rename %(new_path)s to %(path)s') % { 'new_path' : new_snapshot_path(), 'path' : snapshot_path() } ) - os.system( 'sleep 2' ) #max 1 backup / second + time.sleep(2) #max 1 backup / second return [ False, True ] if not full_rsync: @@ -1456,7 +1485,7 @@ min_id = self.get_snapshot_id( min_date ) max_id = self.get_snapshot_id( max_date ) - logger.info( "[smart remove] keep all >= %s and < %s" % ( min_id, max_id ) ) + logger.debug("Keep all >= %s and < %s" %(min_id, max_id), self) for snapshot_id in snapshots: if snapshot_id >= min_id and snapshot_id < max_id: @@ -1469,7 +1498,7 @@ min_id = self.get_snapshot_id( min_date ) max_id = self.get_snapshot_id( max_date ) - logger.info( "[smart remove] keep first >= %s and < %s" % ( min_id, max_id ) ) + logger.debug("Keep first >= %s and < %s" %(min_id, max_id), self) for snapshot_id in snapshots: if snapshot_id >= min_id and snapshot_id < max_id: @@ -1497,15 +1526,15 @@ def smart_remove( self, now_full, keep_all, keep_one_per_day, keep_one_per_week, keep_one_per_month ): snapshots = self.get_snapshots_list() - logger.info( "[smart remove] considered: %s" % snapshots ) + logger.debug("Considered: %s" %snapshots, self) if len( snapshots ) <= 1: - logger.info( "[smart remove] There is only one snapshots, so keep it" ) + logger.debug("There is only one snapshots, so keep it", self) return if now_full is None: now_full = datetime.datetime.today() - now = now_full.date() + now = now_full.date() #keep the last snapshot keep_snapshots = [ snapshots[0] ] @@ -1517,14 +1546,14 @@ #keep one per days for the last keep_one_per_day days if keep_one_per_day > 0: d = now - for i in xrange( 0, keep_one_per_day ): + for i in range( 0, keep_one_per_day ): keep_snapshots = self._smart_remove_keep_first_( snapshots, keep_snapshots, d, d + datetime.timedelta(days=1) ) d = d - datetime.timedelta(days=1) #keep one per week for the last keep_one_per_week weeks if keep_one_per_week > 0: d = now - datetime.timedelta( days = now.weekday() + 1 ) - for i in xrange( 0, keep_one_per_week ): + for i in range( 0, keep_one_per_week ): keep_snapshots = self._smart_remove_keep_first_( snapshots, keep_snapshots, d, d + datetime.timedelta(days=8) ) d = d - datetime.timedelta(days=7) @@ -1532,38 +1561,101 @@ if keep_one_per_month > 0: d1 = datetime.date( now.year, now.month, 1 ) d2 = self.inc_month( d1 ) - for i in xrange( 0, keep_one_per_month ): + for i in range( 0, keep_one_per_month ): keep_snapshots = self._smart_remove_keep_first_( snapshots, keep_snapshots, d1, d2 ) d2 = d1 d1 = self.dec_month(d1) #keep one per year for all years first_year = int(snapshots[-1][ : 4]) - for i in xrange( first_year, now.year+1 ): + for i in range( first_year, now.year+1 ): keep_snapshots = self._smart_remove_keep_first_( snapshots, keep_snapshots, datetime.date(i,1,1), datetime.date(i+1,1,1) ) - logger.info( "[smart remove] keep snapshots: %s" % keep_snapshots ) + logger.debug("Keep snapshots: %s" %keep_snapshots, self) + del_snapshots = [] for snapshot_id in snapshots: if snapshot_id in keep_snapshots: continue if self.config.get_dont_remove_named_snapshots(): - if len( self.get_snapshot_name( snapshot_id ) ) > 0: - logger.info( "[smart remove] keep snapshot: %s, it has a name" % snapshot_id ) + if self.get_snapshot_name( snapshot_id ): + logger.debug("Keep snapshot: %s, it has a name" %snapshot_id, self) continue - logger.info( "[smart remove] remove snapshot: %s" % snapshot_id ) - self.remove_snapshot( snapshot_id ) + del_snapshots.append(snapshot_id) + + if not del_snapshots: + return + + if self.config.get_snapshots_mode() in ['ssh', 'ssh_encfs'] and self.config.get_smart_remove_run_remote_in_background(): + logger.info('[smart remove] remove snapshots in background: %s' + %del_snapshots, self) + lckFile = os.path.normpath(os.path.join(self.get_snapshot_path(del_snapshots[0], ['ssh', 'ssh_encfs']), os.pardir, 'smartremove.lck')) + + maxLength = self.config.ssh_max_arg_length() + if not maxLength: + import sshMaxArg + user_host = '%s@%s' %(self.config.get_ssh_user(), self.config.get_ssh_host()) + maxLength = sshMaxArg.test_ssh_max_arg(user_host) + self.config.set_ssh_max_arg_length(maxLength) + self.config.save() + sshMaxArg.reportResult(user_host, maxLength) + + additionalChars = len(self.config.ssh_prefix_cmd(cmd_type = str)) + + head = 'screen -d -m bash -c "(' + if logger.DEBUG: + head += 'logger -t \\\"backintime smart-remove [$BASHPID]\\\" \\\"start\\\"; ' + head += 'flock -x 9; ' + if logger.DEBUG: + head += 'logger -t \\\"backintime smart-remove [$BASHPID]\\\" \\\"got exclusive flock\\\"; ' + + tail = ') 9>\\\"%s\\\""' %lckFile + + cmds = [] + for sid in del_snapshots: + find, rm = self.remove_snapshot(sid, execute = False, quote = '\\\"') + s = 'test -e \\\"%s\\\" && (' %self.get_snapshot_path(sid, use_mode = ['ssh', 'ssh_encfs']) + if logger.DEBUG: + s += 'logger -t \\\"backintime smart-remove [$BASHPID]\\\" ' + s += '\\\"snapshot %s still exist\\\"; ' %sid + s += 'sleep 1; ' #add one second delay because otherwise you might not see serialized process with small snapshots + s += '%s; ' %find + if logger.DEBUG: + s += 'logger -t \\\"backintime smart-remove [$BASHPID]\\\" ' + s += '\\\"snapshot %s change permission done\\\"; ' %sid + s += '%s; ' %rm + if logger.DEBUG: + s += 'logger -t \\\"backintime smart-remove [$BASHPID]\\\" ' + s += '\\\"snapshot %s remove done\\\"' %sid + s += '); ' + cmds.append(s) + + for cmd in tools.splitCommands(cmds, + head = head, + tail = tail, + maxLength = maxLength, + additionalChars = additionalChars): + self._execute(self.cmd_ssh(cmd, quote = True)) + else: + logger.info("[smart remove] remove snapshots: %s" + %del_snapshots, self) + for i, snapshot_id in enumerate(del_snapshots, 1): + self.set_take_snapshot_message( 0, _('Smart remove') + ' %s/%s' %(i, len(del_snapshots)) ) + self.remove_snapshot( snapshot_id ) def _free_space( self, now ): + snapshots = self.get_snapshots_list( False ) + last_snapshot = snapshots[-1] + #remove old backups if self.config.is_remove_old_snapshots_enabled(): self.set_take_snapshot_message( 0, _('Remove old snapshots') ) - snapshots = self.get_snapshots_list( False ) old_backup_id = self.get_snapshot_id( self.config.get_remove_old_snapshots_date() ) - logger.info( "Remove backups older than: %s" % old_backup_id[0:15] ) + logger.info("Remove backups older than: %s" + %old_backup_id[0:15], self) while True: if len( snapshots ) <= 1: @@ -1573,7 +1665,7 @@ break if self.config.get_dont_remove_named_snapshots(): - if len( self.get_snapshot_name( snapshots[0] ) ) > 0: + if self.get_snapshot_name( snapshots[0] ): del snapshots[0] continue @@ -1592,7 +1684,8 @@ min_free_space = self.config.get_min_free_space_in_mb() - logger.info( "Keep min free disk space: %s Mb" % min_free_space ) + logger.info("Keep min free disk space: %s MiB" + %min_free_space, self) snapshots = self.get_snapshots_list( False ) @@ -1600,18 +1693,24 @@ if len( snapshots ) <= 1: break - info = os.statvfs( self.config.get_snapshots_path() ) - free_space = info[ statvfs.F_FRSIZE ] * info[ statvfs.F_BAVAIL ] / ( 1024 * 1024 ) + free_space = self._stat_free_space_local(self.config.get_snapshots_path()) + + if free_space is None: + free_space = self._stat_free_space_ssh() + + if free_space is None: + logger.warning('Failed to get free space. Skipping', self) + break if free_space >= min_free_space: break if self.config.get_dont_remove_named_snapshots(): - if len( self.get_snapshot_name( snapshots[0] ) ) > 0: + if self.get_snapshot_name( snapshots[0] ): del snapshots[0] continue - logger.info( "free disk space: %s Mb" % free_space ) + logger.info("free disk space: %s MiB" %free_space, self) self.remove_snapshot( snapshots[0] ) del snapshots[0] @@ -1619,7 +1718,7 @@ if self.config.min_free_inodes_enabled(): min_free_inodes = self.config.min_free_inodes() self.set_take_snapshot_message( 0, _('Try to keep min %d%% free inodes') % min_free_inodes ) - logger.info( "Keep min %d%% free inodes" % min_free_inodes ) + logger.info("Keep min %d%% free inodes" %min_free_inodes, self) snapshots = self.get_snapshots_list( False ) @@ -1627,23 +1726,68 @@ if len( snapshots ) <= 1: break - info = os.statvfs( self.config.get_snapshots_path() ) - free_inodes = info[statvfs.F_FAVAIL] - max_inodes = info[statvfs.F_FILES] + try: + info = os.statvfs( self.config.get_snapshots_path() ) + free_inodes = info.f_favail + max_inodes = info.f_files + except Exception as e: + logger.debug('Failed to get free inodes for snapshot path %s: %s' + %(self.config.get_snapshots_path(), str(e)), + self) + break if free_inodes >= max_inodes * (min_free_inodes / 100.0): break if self.config.get_dont_remove_named_snapshots(): - if len( self.get_snapshot_name( snapshots[0] ) ) > 0: + if self.get_snapshot_name( snapshots[0] ): del snapshots[0] continue - logger.info( "free inodes: %.2f%%" % (100.0 / max_inodes * free_inodes) ) + logger.info("free inodes: %.2f%%" + %(100.0 / max_inodes * free_inodes), + self) self.remove_snapshot( snapshots[0] ) del snapshots[0] - def _execute( self, cmd, callback = None, user_data = None ): + #set correct last snapshot again + if last_snapshot is not snapshots[-1]: + self.create_last_snapshot_symlink(snapshots[-1]) + + def _stat_free_space_local(self, path): + try: + info = os.statvfs(path) + if info.f_blocks != info.f_bavail: + return info.f_frsize * info.f_bavail // ( 1024 * 1024 ) + except Exception as e: + logger.debug('Failed to get free space for %s: %s' + %(path, str(e)), + self) + pass + logger.warning('Failed to stat snapshot path', self) + + def _stat_free_space_ssh(self): + if self.config.get_snapshots_mode() not in ('ssh', 'ssh_encfs'): + return None + + snapshots_path_ssh = self.config.get_snapshots_path_ssh() + if not len(snapshots_path_ssh): + snapshots_path_ssh = './' + cmd = self.cmd_ssh(['df', snapshots_path_ssh]) + + df = subprocess.Popen(cmd, stdout = subprocess.PIPE, stderr = subprocess.PIPE) + output = df.communicate()[0] + #Filesystem 1K-blocks Used Available Use% Mounted on + #/tmp 127266564 115596412 5182296 96% / + # ^^^^^^^ + for line in output.split(b'\n'): + m = re.match(b'^.*?\s+\d+\s+\d+\s+(\d+)\s+\d+%', line, re.M) + if m: + return int(m.group(1)) / 1024 + logger.warning('Failed to get free space on remote', self) + + def _execute( self, cmd, callback = None, user_data = None, filters = () ): + logger.debug("Call command \"%s\"" %cmd, self, 1) ret_val = 0 if callback is None: @@ -1653,45 +1797,30 @@ while True: line = tools.temp_failure_retry( pipe.readline ) - if len( line ) == 0: + if not line: break - callback( line.strip(), user_data ) + line = line.strip() + for f in filters: + line = f(line) + if not line: + continue + callback(line , user_data ) ret_val = pipe.close() if ret_val is None: ret_val = 0 if ret_val != 0: - logger.warning( "Command \"%s\" returns %s" % ( cmd, ret_val ) ) + logger.warning("Command \"%s\" returns %s%s%s" + %(cmd, bcolors.WARNING, ret_val, bcolors.ENDC), + self, 1) else: - logger.info( "Command \"%s\" returns %s" % ( cmd, ret_val ) ) + logger.debug("Command \"%s...\" returns %s" + %(cmd[:min(16, len(cmd))], ret_val), + self, 1) return ret_val - #def _execute_output( self, cmd, callback = None, user_data = None ): - # output = '' - - # pipe = os.popen( cmd, 'r' ) - # - # while True: - # line = tools.temp_failure_retry( pipe.readline ) - # if len( line ) == 0: - # break - # output = output + line - # if not callback is None: - # callback( line.strip(), user_data ) - - # ret_val = pipe.close() - # if ret_val is None: - # ret_val = 0 - - # if ret_val != 0: - # logger.warning( "Command \"%s\" returns %s" % ( cmd, ret_val ) ) - # else: - # logger.info( "Command \"%s\" returns %s" % ( cmd, ret_val ) ) - - # return output - def filter_for(self, base_snapshot_id, base_path, snapshots_list, list_diff_only = False, flag_deep_check = False, list_equal_to = False): "return a list of available snapshots (including 'now'), eventually filtered for uniqueness" snapshots_filtered = [] @@ -1744,7 +1873,7 @@ uniqueness = tools.UniquenessSet(flag_deep_check, follow_symlink = False, list_equal_to = list_equal_to) for snapshot_id in all_snapshots_list: path = self.get_snapshot_path_to( snapshot_id, base_path ) - if os.path.exists( path ) and not os.path.islink( path ) and os.path.isfile( path ) and uniqueness.check_for(path): + if os.path.exists( path ) and not os.path.islink( path ) and os.path.isfile( path ) and uniqueness.check_for(path): snapshots_filtered.append(snapshot_id) return snapshots_filtered @@ -1753,23 +1882,29 @@ mode = self.config.get_snapshots_mode() if mode in ['ssh', 'ssh_encfs'] and mode in use_modes: (ssh_host, ssh_port, ssh_user, ssh_path, ssh_cipher) = self.config.get_ssh_host_port_user_path_cipher() + ssh_private_key = self.config.get_ssh_private_key_file() + if isinstance(cmd, str): if ssh_cipher == 'default': ssh_cipher_suffix = '' else: ssh_cipher_suffix = '-c %s' % ssh_cipher - + ssh_private_key = "-o IdentityFile=%s" % ssh_private_key + if self.config.is_run_ionice_on_remote_enabled(): cmd = 'ionice -c2 -n7 ' + cmd - + if self.config.is_run_nice_on_remote_enabled(): cmd = 'nice -n 19 ' + cmd - + + cmd = self.config.ssh_prefix_cmd(cmd_type = str) + cmd + if quote: cmd = '\'%s\'' % cmd - - return 'ssh -p %s -o ServerAliveInterval=240 %s %s@%s %s' \ - % ( str(ssh_port), ssh_cipher_suffix, ssh_user, ssh_host, cmd ) + + return 'ssh -p %s -o ServerAliveInterval=240 %s %s %s@%s %s' \ + % ( str(ssh_port), ssh_cipher_suffix, ssh_private_key,\ + ssh_user, ssh_host, cmd ) if isinstance(cmd, tuple): cmd = list(cmd) @@ -1779,18 +1914,21 @@ suffix += ['-o', 'ServerAliveInterval=240'] if not ssh_cipher == 'default': suffix += ['-c', ssh_cipher] + suffix += ['-o', 'IdentityFile=%s' % ssh_private_key] suffix += ['%s@%s' % (ssh_user, ssh_host)] - + if self.config.is_run_ionice_on_remote_enabled(): cmd = ['ionice', '-c2', '-n7'] + cmd - + if self.config.is_run_nice_on_remote_enabled(): cmd = ['nice', '-n 19'] + cmd - + + cmd = self.config.ssh_prefix_cmd(cmd_type = list) + cmd + if quote: cmd = ['\''] + cmd + ['\''] return suffix + cmd - + else: return cmd @@ -1805,14 +1943,13 @@ def delete_path(self, snapshot_id, path): def handle_error(fn, path, excinfo): - dir = os.path.dirname(path) - if not os.access(dir, os.W_OK): - st = os.stat(dir) - os.chmod(dir, st.st_mode | stat.S_IWUSR) + dirname = os.path.dirname(path) + st = os.stat(dirname) + os.chmod(dirname, st.st_mode | stat.S_IWUSR) st = os.stat(path) os.chmod(path, st.st_mode | stat.S_IWUSR) fn(path) - + full_path = self.get_snapshot_path_to(snapshot_id, path) dirname = os.path.dirname(full_path) dir_st = os.stat(dirname) @@ -1831,13 +1968,55 @@ if os.path.islink(symlink): os.remove(symlink) if os.path.exists(symlink): + logger.error('Could not remove symlink %s' %symlink, self) return False + logger.debug('Create symlink %s => %s' %(symlink, snapshot_id), self) os.symlink(snapshot_id, symlink) - except: + except Exception as e: + logger.error('Failed to create symlink %s: %s' %(symlink, str(e)), self) return False + def flockExclusive(self): + """block take_snapshots from other profiles or users + and run them serialized + """ + if self.config.use_global_flock(): + logger.debug('Set flock %s' %self.GLOBAL_FLOCK, self) + self.flock_file = open(self.GLOBAL_FLOCK, 'w') + fcntl.flock(self.flock_file, fcntl.LOCK_EX) + #make it rw by all if that's not already done. + perms = stat.S_IRUSR | stat.S_IWUSR | stat.S_IRGRP | \ + stat.S_IWGRP | stat.S_IROTH | stat.S_IWOTH + s = os.fstat(self.flock_file.fileno()) + if not s.st_mode & perms == perms: + logger.debug('Set flock permissions %s' %self.GLOBAL_FLOCK, self) + os.fchmod(self.flock_file.fileno(), perms) + + def flockRelease(self): + """release lock so other snapshots can continue + """ + if self.flock_file: + logger.debug('Release flock %s' %self.GLOBAL_FLOCK, self) + fcntl.fcntl(self.flock_file, fcntl.LOCK_UN) + self.flock_file.close() + self.flock_file = None + +class SaveToContinueFlag(object): + def __init__(self, new_snapshot_path): + self.flag = os.path.join(new_snapshot_path, 'save_to_continue') + + def set(self): + with open(self.flag, 'a') as f: + pass + + def unset(self): + if os.path.exists(self.flag): + os.remove(self.flag) + + def exists(self): + return os.path.exists(self.flag) + if __name__ == "__main__": config = config.Config() snapshots = Snapshots( config ) snapshots.take_snapshot() - diff -Nru backintime-1.0.36/common/sshMaxArg.py backintime-1.1.12/common/sshMaxArg.py --- backintime-1.0.36/common/sshMaxArg.py 1970-01-01 00:00:00.000000000 +0000 +++ backintime-1.1.12/common/sshMaxArg.py 2016-01-11 18:07:58.000000000 +0000 @@ -0,0 +1,78 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# Copyright (C) 2015 Germar Reitze +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +import random +import string +import subprocess +import socket +import argparse + +def random_id(size=6, chars=string.ascii_uppercase + string.digits): + return ''.join(random.choice(chars) for x in range(size)) + +def test_ssh_max_arg(host, mid = 1048320): + r = round(mid / 2) + while r > 0: + ssh = ['ssh', host] + ssh.extend(['printf', random_id(mid)]) + try: + proc = subprocess.Popen(ssh, + stdout = subprocess.PIPE, + stderr = subprocess.PIPE, + universal_newlines = True) + out, err = proc.communicate() + except OSError as e: + if e.errno == 7: + reportTest(mid, 'python exception: %s' % e.strerror) + mid -= r + else: + raise + else: + l = len(out) + if l == mid: + reportTest(mid, 'can be longer') + mid += r + else: + reportTest(mid, 'is to long') + mid -= r + r = round(r / 2) + return mid + 6 + +def reportTest(mid, msg): + print('Check length %s:\t%s' % (mid, msg)) + +def reportResult(host, mid): + print('Maximum SSH argument length between %s and %s is %s' + % (socket.gethostname(), host, mid)) + +if __name__ == '__main__': + parser = argparse.ArgumentParser(description = 'Check maximal argument length on SSH connection', + formatter_class=argparse.ArgumentDefaultsHelpFormatter) + parser.add_argument('HOST', + type = str, + nargs = '?', + default = 'localhost', + help = 'Remote host or user@host') + parser.add_argument('MID', + type = int, + nargs = '?', + default = 1048320, + help = 'Start checking with MID arg length') + args = parser.parse_args() + mid = test_ssh_max_arg(args.HOST, args.MID) + reportResult(args.HOST, mid) diff -Nru backintime-1.0.36/common/sshtools.py backintime-1.1.12/common/sshtools.py --- backintime-1.0.36/common/sshtools.py 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/sshtools.py 2016-01-11 18:07:58.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2013 Germar Reitze +# Copyright (C) 2012-2016 Germar Reitze # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -29,6 +29,8 @@ import logger import tools import password_ipc +from exceptions import MountException +import bcolors _=gettext.gettext @@ -44,22 +46,22 @@ self.config = cfg if self.config is None: self.config = config.Config() - + self.profile_id = profile_id if self.profile_id is None: self.profile_id = self.config.get_current_profile() - + self.tmp_mount = tmp_mount self.hash_id = hash_id self.parent = parent self.symlink = symlink - + #init MountControl - mount.MountControl.__init__(self) - + super(SSH, self).__init__() + self.all_kwargs = {} - - #First we need to map the settings. + + #First we need to map the settings. self.setattr_kwargs('mode', self.config.get_snapshots_mode(self.profile_id), **kwargs) self.setattr_kwargs('hash_collision', self.config.get_hash_collision(), **kwargs) #start editing from here--------------------------------------------------------- @@ -69,12 +71,15 @@ self.setattr_kwargs('path', self.config.get_snapshots_path_ssh(self.profile_id), **kwargs) self.setattr_kwargs('cipher', self.config.get_ssh_cipher(self.profile_id), **kwargs) self.setattr_kwargs('private_key_file', self.config.get_ssh_private_key_file(self.profile_id), **kwargs) + self.setattr_kwargs('nice', self.config.is_run_nice_on_remote_enabled(self.profile_id), store = False, **kwargs) + self.setattr_kwargs('ionice', self.config.is_run_ionice_on_remote_enabled(self.profile_id), store = False, **kwargs) + self.setattr_kwargs('nocache', self.config.is_run_nocache_on_remote_enabled(self.profile_id), store = False, **kwargs) self.setattr_kwargs('password', None, store = False, **kwargs) - - if len(self.path) == 0: + + if not self.path: self.path = './' self.set_default_args() - + self.symlink_subfolder = None # config strings used in ssh-calls @@ -84,10 +89,24 @@ # ssh_options contains port but can be extended to include cipher, customkeyfile, etc self.ssh_options = ['-p', str(self.port)] self.ssh_options += ['-o', 'ServerAliveInterval=240'] + + # specifying key file here allows to override for potentially + # conflicting .ssh/config key entry + self.ssh_options += ['-o', 'IdentityFile=%s' % self.private_key_file] + self.log_command = '%s: %s' % (self.mode, self.user_host_path) - + + self.private_key_fingerprint = tools.getSshKeyFingerprint(self.private_key_file) + if not self.private_key_fingerprint: + logger.warning('Couldn\'t get fingerprint for private key %(path)s. ' + 'Most likely because the public key %(path)s.pub wasn\'t found. ' + 'Using fallback to private keys path instead. ' + 'But this can make troubles with passphrase-less keys.' + %{'path': self.private_key_file}, + self) + self.private_key_fingerprint = self.private_key_file self.unlock_ssh_agent() - + def _mount(self): """mount the service""" sshfs = ['sshfs'] + self.ssh_options @@ -98,20 +117,23 @@ #bugfix: sshfs doesn't mount if locale in LC_ALL is not available on remote host #LANG or other envirnoment variable are no problem. env = os.environ.copy() - if 'LC_ALL' in env.keys(): + if 'LC_ALL' in list(env.keys()): env['LC_ALL'] = 'C' + logger.debug('Call mount command: %s' + %' '.join(sshfs), + self) try: subprocess.check_call(sshfs, env = env) - except subprocess.CalledProcessError as ex: - raise mount.MountException( _('Can\'t mount %s') % ' '.join(sshfs)) - + except subprocess.CalledProcessError: + raise MountException( _('Can\'t mount %s') % ' '.join(sshfs)) + def _umount(self): """umount the service""" try: subprocess.check_call(['fusermount', '-u', self.mountpoint]) - except subprocess.CalledProcessError as ex: - raise mount.MountException( _('Can\'t unmount sshfs %s') % self.mountpoint) - + except subprocess.CalledProcessError: + raise MountException( _('Can\'t unmount sshfs %s') % self.mountpoint) + def pre_mount_check(self, first_run = False): """check what ever conditions must be given for the mount to be done successful raise MountException( _('Error discription') ) if service can not mount @@ -120,6 +142,7 @@ self.check_ping_host() self.check_fuse() if first_run: + self.unlock_ssh_agent(force = True) self.check_known_hosts() self.check_login() if first_run: @@ -128,35 +151,50 @@ if first_run: self.check_remote_commands() return True - + def post_mount_check(self): """check if mount was successful raise MountException( _('Error discription') ) if not""" return True - + def pre_umount_check(self): """check if service is safe to umount raise MountException( _('Error discription') ) if not""" return True - + def post_umount_check(self): """check if umount successful raise MountException( _('Error discription') ) if not""" return True - - def unlock_ssh_agent(self): + + def unlock_ssh_agent(self, force = False): """using askpass.py to unlock private key in ssh-agent""" env = os.environ.copy() env['SSH_ASKPASS'] = 'backintime-askpass' env['ASKPASS_PROFILE_ID'] = self.profile_id env['ASKPASS_MODE'] = self.mode - - output = subprocess.Popen(['ssh-add', '-l'], stdout = subprocess.PIPE).communicate()[0] - if not output.find(self.private_key_file) >= 0: + + if force: + #remove private key first so we can check if the given password is valid + logger.debug('Remove private key %s from ssh agent' % self.private_key_file, self) + proc = subprocess.Popen(['ssh-add', '-d', self.private_key_file], + stdin=subprocess.DEVNULL, + stdout=subprocess.DEVNULL, + stderr=subprocess.DEVNULL, + universal_newlines = True) + proc.communicate() + + proc = subprocess.Popen(['ssh-add', '-l'], + stdout = subprocess.PIPE, + universal_newlines = True) + output = proc.communicate()[0] + if force or not output.find(self.private_key_fingerprint) >= 0: + logger.debug('Add private key %s to ssh agent' % self.private_key_file, self) password_available = any([self.config.get_password_save(self.profile_id), self.config.get_password_use_cache(self.profile_id), not self.password is None ]) + logger.debug('Password available: %s' %password_available, self) if not password_available and not tools.check_x_server(): #we need to unlink stdin from ssh-add in order to make it #use our own backintime-askpass. @@ -171,92 +209,133 @@ except tools.Timeout: pass else: - if not self.password is None: + if self.password: + logger.debug('Provide password through temp FIFO', self) thread = password_ipc.TempPasswordThread(self.password) env['ASKPASS_TEMP'] = thread.temp_file thread.start() - + proc = subprocess.Popen(['ssh-add', self.private_key_file], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env = env, - preexec_fn = os.setsid) + preexec_fn = os.setsid, + universal_newlines = True) output, error = proc.communicate() if proc.returncode: - print( _('Failed to unlock SSH private key:\nError: %s') % error) - - if not self.password is None: + logger.error('Failed to unlock SSH private key %s: %s' + %(self.private_key_file, error), + self) + + if self.password: thread.stop() - - output = subprocess.Popen(['ssh-add', '-l'], stdout = subprocess.PIPE).communicate()[0] - if not output.find(self.private_key_file) >= 0: - raise mount.MountException( _('Could not unlock ssh private key. Wrong password or password not available for cron.')) + + proc = subprocess.Popen(['ssh-add', '-l'], + stdout = subprocess.PIPE, + universal_newlines = True) + output = proc.communicate()[0] + if not output.find(self.private_key_fingerprint) >= 0: + logger.debug('Was not able to unlock private key %s' %self.private_key_file, self) + raise MountException( _('Could not unlock ssh private key. Wrong password ' + 'or password not available for cron.')) + else: + logger.debug('Private key %s is already unlocked in ssh agent' + %self.private_key_file, self) def check_fuse(self): """check if sshfs is installed and user is part of group fuse""" + logger.debug('Check fuse', self) if not tools.check_command('sshfs'): - raise mount.MountException( _('sshfs not found. Please install e.g. \'apt-get install sshfs\'') ) + logger.debug('sshfs is missing', self) + raise MountException( _('sshfs not found. Please install e.g. \'apt-get install sshfs\'') ) if self.CHECK_FUSE_GROUP: user = self.config.get_user() try: fuse_grp_members = grp.getgrnam('fuse')[3] except KeyError: #group fuse doesn't exist. So most likely it isn't used by this distribution + logger.debug("Group fuse doesn't exist. Skip test", self) return if not user in fuse_grp_members: - raise mount.MountException( _('%(user)s is not member of group \'fuse\'.\n Run \'sudo adduser %(user)s fuse\'. To apply changes logout and login again.\nLook at \'man backintime\' for further instructions.') % {'user': user}) - + logger.debug('User %s is not in group fuse' %user, self) + raise MountException( _('%(user)s is not member of group \'fuse\'.\n ' + 'Run \'sudo adduser %(user)s fuse\'. To apply ' + 'changes logout and login again.\nLook at ' + '\'man backintime\' for further instructions.') + % {'user': user}) + def check_login(self): """check passwordless authentication to host""" + logger.debug('Check login', self) ssh = ['ssh', '-o', 'PreferredAuthentications=publickey'] ssh.extend(self.ssh_options + [self.user_host]) + ssh.extend(self.config.ssh_prefix_cmd(self.profile_id, cmd_type = list)) ssh.extend(['echo', '"Hello"']) try: - subprocess.check_call(ssh, stdout=open(os.devnull, 'w')) + subprocess.check_call(ssh, stdout=subprocess.DEVNULL) except subprocess.CalledProcessError: - raise mount.MountException( _('Password-less authentication for %(user)s@%(host)s failed. Look at \'man backintime\' for further instructions.') % {'user' : self.user, 'host' : self.host}) - + raise MountException( _('Password-less authentication for %(user)s@%(host)s ' + 'failed. Look at \'man backintime\' for further ' + 'instructions.') % {'user' : self.user, 'host' : self.host}) + def check_cipher(self): """check if both host and localhost support cipher""" if not self.cipher == 'default': + logger.debug('Check cipher', self) ssh = ['ssh'] ssh.extend(['-o', 'Ciphers=%s' % self.cipher]) ssh.extend(self.ssh_options + [self.user_host]) + ssh.extend(self.config.ssh_prefix_cmd(self.profile_id, cmd_type = list)) ssh.extend(['echo', '"Hello"']) - proc = subprocess.Popen(ssh, stdout=open(os.devnull, 'w'), stderr=subprocess.PIPE) + proc = subprocess.Popen(ssh, + stdout=subprocess.DEVNULL, + stderr=subprocess.PIPE, + universal_newlines = True) err = proc.communicate()[1] if proc.returncode: - raise mount.MountException( _('Cipher %(cipher)s failed for %(host)s:\n%(err)s') % {'cipher' : self.config.SSH_CIPHERS[self.cipher], 'host' : self.host, 'err' : err}) - + logger.debug('Ciper %s is not supported' %self.config.SSH_CIPHERS[self.cipher], self) + raise MountException( _('Cipher %(cipher)s failed for %(host)s:\n%(err)s') + % {'cipher' : self.config.SSH_CIPHERS[self.cipher], 'host' : self.host, 'err' : err}) + def benchmark_cipher(self, size = '40'): - import tempfile temp = tempfile.mkstemp()[1] print('create random data file') subprocess.call(['dd', 'if=/dev/urandom', 'of=%s' % temp, 'bs=1M', 'count=%s' % size]) - keys = self.config.SSH_CIPHERS.keys() + keys = list(self.config.SSH_CIPHERS.keys()) keys.sort() for cipher in keys: if cipher == 'default': continue - print('%s:' % cipher) + print('%s%s:%s' %(bcolors.BOLD, cipher, bcolors.ENDC)) for i in range(2): # scp uses -P instead of -p for port subprocess.call(['scp', '-P', str(self.port), '-c', cipher, temp, self.user_host_path]) - subprocess.call(['ssh'] + self.ssh_options + [self.user_host, 'rm', os.path.join(self.path, os.path.basename(temp))]) + ssh = ['ssh'] + ssh.extend(self.ssh_options + [self.user_host]) + ssh.extend(self.config.ssh_prefix_cmd(self.profile_id, cmd_type = list)) + ssh.extend(['rm', os.path.join(self.path, os.path.basename(temp)) ]) + subprocess.call(ssh) os.remove(temp) - + def check_known_hosts(self): """check ssh_known_hosts""" + logger.debug('Check known hosts file', self) for host in (self.host, '[%s]:%s' % (self.host, self.port)): - output = subprocess.Popen(['ssh-keygen', '-F', host], stdout=subprocess.PIPE).communicate()[0] #subprocess.check_output doesn't exist in Python 2.6 (Debian squeeze default) + proc = subprocess.Popen(['ssh-keygen', '-F', host], + stdout=subprocess.PIPE, + universal_newlines = True) + output = proc.communicate()[0] #subprocess.check_output doesn't exist in Python 2.6 (Debian squeeze default) if output.find('Host %s found' % host) >= 0: + logger.debug('Host %s was found in known hosts file' % host, self) return True - raise mount.MountException( _('%s not found in ssh_known_hosts.') % self.host) - + logger.debug('Host %s is not in known hosts file' %self.host, self) + raise MountException( _('%s not found in ssh_known_hosts.') % self.host) + def check_remote_folder(self): """check if remote folder exists and is write- and executable. Create folder if it doesn't exist.""" + logger.debug('Check remote folder', self) cmd = 'd=0;' cmd += 'test -e %s || d=1;' % self.path #path doesn't exist. set d=1 to indicate cmd += 'test $d -eq 1 && mkdir %s; err=$?;' % self.path #create path, get errorcode from mkdir @@ -265,128 +344,219 @@ cmd += 'test -w %s || exit 12;' % self.path #path is not writeable cmd += 'test -x %s || exit 13;' % self.path #path is not executable cmd += 'exit 20' #everything is fine + ssh = ['ssh'] + ssh.extend(self.ssh_options + [self.user_host]) + ssh.extend(self.config.ssh_prefix_cmd(self.profile_id, cmd_type = list)) + ssh.extend([cmd]) + logger.debug('Call command: %s' %' '.join(ssh), self) try: - subprocess.check_call(['ssh'] + self.ssh_options + [ self.user_host, cmd], stdout=open(os.devnull, 'w')) + subprocess.check_call(ssh, + stdout=subprocess.DEVNULL) except subprocess.CalledProcessError as ex: + logger.debug('Command returncode: %s' %ex.returncode, self) if ex.returncode == 20: #clean exit pass elif ex.returncode == 11: - raise mount.MountException( _('Remote path exists but is not a directory:\n %s') % self.path) + raise MountException( _('Remote path exists but is not a directory:\n %s') % self.path) elif ex.returncode == 12: - raise mount.MountException( _('Remote path is not writeable:\n %s') % self.path) + raise MountException( _('Remote path is not writeable:\n %s') % self.path) elif ex.returncode == 13: - raise mount.MountException( _('Remote path is not executable:\n %s') % self.path) + raise MountException( _('Remote path is not executable:\n %s') % self.path) else: - raise mount.MountException( _('Couldn\'t create remote path:\n %s') % self.path) + raise MountException( _('Couldn\'t create remote path:\n %s') % self.path) else: #returncode is 0 - logger.info('Create remote folder %s' % self.path) - + logger.info('Create remote folder %s' %self.path, self) + def check_ping_host(self): """connect to remote port and check if it is open""" + logger.debug('Check ping host', self) count = 0 while count < 5: try: - s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - s.settimeout(2.0) - result = s.connect_ex((socket.gethostbyname(self.host), self.port)) + with socket.create_connection((self.host, self.port), 2.0) as s: + result = s.connect_ex(s.getpeername()) except: result = -1 - finally: - s.close() if result == 0: + logger.debug('Host %s is available' %self.host, self) return + logger.debug('Could not ping host %s. Try again' %self.host, self) count += 1 sleep(0.2) if result != 0: - raise mount.MountException( _('Ping %s failed. Host is down or wrong address.') % self.host) - - def check_remote_commands(self): + logger.debug('Failed pinging host %s' %self.host, self) + raise MountException( _('Ping %s failed. Host is down or wrong address.') % self.host) + + def check_remote_commands(self, retry = False): """try all relevant commands for take_snapshot on remote host. specialy embedded Linux devices using 'BusyBox' sometimes doesn't support everything that is need to run backintime. also check for hardlink-support on remote host. """ + logger.debug('Check remote commands', self) + def maxArg(): + if retry: + raise MountException("Checking commands on remote host didn't return any output. " + "We already checked the maximum argument lenght but it seem like " + "there is an other problem") + logger.warning('Looks like the command was to long for remote SSHd. We will test max arg length now and retry.', + self) + import sshMaxArg + mid = sshMaxArg.test_ssh_max_arg(self.user_host) + sshMaxArg.reportResult(self.host, mid) + self.config.set_ssh_max_arg_length(mid, self.profile_id) + return self.check_remote_commands(retry = True) + #check rsync tmp_file = tempfile.mkstemp()[1] rsync = tools.get_rsync_prefix( self.config ) + ' --dry-run --chmod=Du+wx %s ' % tmp_file - - if self.cipher == 'default': - ssh_cipher_suffix = '' - else: - ssh_cipher_suffix = '-c %s' % self.cipher - rsync += '--rsh="ssh -p %s %s" ' % ( str(self.port), ssh_cipher_suffix) rsync += '"%s@%s:%s"' % (self.user, self.host, self.path) - + logger.debug('Check rsync command: %s' %rsync, self) + #use os.system for compatiblity with snapshots.py err = os.system(rsync) if err: + logger.debug('Rsync command returnd error: %s' %err, self) os.remove(tmp_file) - raise mount.MountException( _('Remote host %(host)s doesn\'t support \'%(command)s\':\n%(err)s\nLook at \'man backintime\' for further instructions') % {'host' : self.host, 'command' : rsync, 'err' : err}) + raise MountException( _('Remote host %(host)s doesn\'t support \'%(command)s\':\n' + '%(err)s\nLook at \'man backintime\' for further instructions') + % {'host' : self.host, 'command' : rsync, 'err' : err}) os.remove(tmp_file) - + #check cp chmod find and rm remote_tmp_dir = os.path.join(self.path, 'tmp_%s' % self.random_id()) - cmd = 'tmp=%s ; ' % remote_tmp_dir + head = 'tmp=%s ; ' % remote_tmp_dir #first define a function to clean up and exit - cmd += 'cleanup(){ ' - cmd += 'test -e $tmp/a && rm $tmp/a >/dev/null 2>&1; ' - cmd += 'test -e $tmp/b && rm $tmp/b >/dev/null 2>&1; ' - cmd += 'test -e $tmp && rmdir $tmp >/dev/null 2>&1; ' - cmd += 'exit $1; }; ' + head += 'cleanup(){ ' + head += 'test -e $tmp/a && rm $tmp/a >/dev/null 2>&1; ' + head += 'test -e $tmp/b && rm $tmp/b >/dev/null 2>&1; ' + head += 'test -e smr.lock && rm smr.lock >/dev/null 2>&1; ' + head += 'test -e $tmp && rmdir $tmp >/dev/null 2>&1; ' + head += 'exit $1; }; ' + tail = [] #create tmp_RANDOM dir and file a - cmd += 'test -e $tmp || mkdir $tmp; touch $tmp/a; ' + cmd = 'test -e $tmp || mkdir $tmp; touch $tmp/a; ' + tail.append(cmd) + #try to create hardlink b from a - cmd += 'echo \"cp -aRl SOURCE DEST\"; cp -aRl $tmp/a $tmp/b >/dev/null; err_cp=$?; ' + cmd = 'echo \"cp -aRl SOURCE DEST\"; cp -aRl $tmp/a $tmp/b >/dev/null; err_cp=$?; ' cmd += 'test $err_cp -ne 0 && cleanup $err_cp; ' + tail.append(cmd) #list inodes of a and b - cmd += 'ls -i $tmp/a; ls -i $tmp/b; ' + cmd = 'ls -i $tmp/a; ls -i $tmp/b; ' + tail.append(cmd) #try to chmod - cmd += 'echo \"chmod u+rw FILE\"; chmod u+rw $tmp/a >/dev/null; err_chmod=$?; ' + cmd = 'echo \"chmod u+rw FILE\"; chmod u+rw $tmp/a >/dev/null; err_chmod=$?; ' cmd += 'test $err_chmod -ne 0 && cleanup $err_chmod; ' + tail.append(cmd) #try to find and chmod - cmd += 'echo \"find PATH -type f -exec chmod u-wx \"{}\" \\;\"; ' + cmd = 'echo \"find PATH -type f -exec chmod u-wx \"{}\" \\;\"; ' cmd += 'find $tmp -type f -exec chmod u-wx \"{}\" \\; >/dev/null; err_find=$?; ' cmd += 'test $err_find -ne 0 && cleanup $err_find; ' + tail.append(cmd) #try find suffix '+' - cmd += 'find $tmp -type f -exec chmod u-wx \"{}\" + >/dev/null; err_gnu_find=$?; ' + cmd = 'find $tmp -type f -exec chmod u-wx \"{}\" + >/dev/null; err_gnu_find=$?; ' + cmd += 'test $err_gnu_find -ne 0 && echo \"gnu_find not supported\"; ' + tail.append(cmd) #try to rm -rf - cmd += 'echo \"rm -rf PATH\"; rm -rf $tmp >/dev/null; err_rm=$?; ' + cmd = 'echo \"rm -rf PATH\"; rm -rf $tmp >/dev/null; err_rm=$?; ' cmd += 'test $err_rm -ne 0 && cleanup $err_rm; ' + tail.append(cmd) #try nice -n 19 - if self.config.is_run_nice_on_remote_enabled(): - cmd += 'echo \"nice -n 19\"; nice -n 19 true >/dev/null; err_nice=$?; ' + if self.nice: + cmd = 'echo \"nice -n 19\"; nice -n 19 true >/dev/null; err_nice=$?; ' cmd += 'test $err_nice -ne 0 && cleanup $err_nice; ' - if self.config.is_run_ionice_on_remote_enabled(): - cmd += 'echo \"ionice -c2 -n7\"; ionice -c2 -n7 true >/dev/null; err_nice=$?; ' + tail.append(cmd) + #try ionice -c2 -n7 + if self.ionice: + cmd = 'echo \"ionice -c2 -n7\"; ionice -c2 -n7 true >/dev/null; err_nice=$?; ' cmd += 'test $err_nice -ne 0 && cleanup $err_nice; ' - #report not supported gnu find suffix - cmd += 'test $err_gnu_find -ne 0 && echo \"gnu_find not supported\" && exit $err_gnu_find; ' + tail.append(cmd) + #try nocache + if self.nocache: + cmd = 'echo \"nocache\"; nocache true >/dev/null; err_nocache=$?; ' + cmd += 'test $err_nocache -ne 0 && cleanup $err_nocache; ' + tail.append(cmd) + #try screen, bash and flock used by smart-remove running in background + if self.config.get_smart_remove_run_remote_in_background(self.profile_id): + cmd = 'echo \"screen -d -m bash -c ...\"; screen -d -m bash -c \"true\" >/dev/null; err_screen=$?; ' + cmd += 'test $err_screen -ne 0 && cleanup $err_screen; ' + cmd += 'echo \"(flock -x 9) 9>smr.lock\"; bash -c \"(flock -x 9) 9>smr.lock\" >/dev/null; err_flock=$?; ' + cmd += 'test $err_flock -ne 0 && cleanup $err_flock; ' + tail.append(cmd) #if we end up here, everything should be fine - cmd += 'echo \"done\"' - proc = subprocess.Popen(['ssh'] + self.ssh_options + [self.user_host, cmd], - stdout=subprocess.PIPE, - stderr=subprocess.PIPE) - output, err = proc.communicate() - -## print('ERROR: %s' % err) -## print('OUTPUT: %s' % output) - output_split = output.split('\n') + cmd = 'echo \"done\"' + tail.append(cmd) + + maxLength = self.config.ssh_max_arg_length(self.profile_id) + additionalChars = len('echo ""') + len(self.config.ssh_prefix_cmd(self.profile_id, cmd_type = str)) + + ssh = ['ssh'] + ssh.extend(self.ssh_options + [self.user_host]) + ssh.extend(self.config.ssh_prefix_cmd(self.profile_id, cmd_type = list)) + output = '' + err = '' + returncode = 0 + for cmd in tools.splitCommands(tail, + head = head, + maxLength = maxLength, + additionalChars = additionalChars): + if cmd.endswith('; '): + cmd += 'echo ""' + c = ssh[:] + c.extend([cmd]) + try: + logger.debug('Call command: %s' %' '.join(c), self) + proc = subprocess.Popen(c, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + universal_newlines = True) + ret = proc.communicate() + except OSError as e: + #Argument list too long + if e.errno == 7: + logger.debug('Argument list too log (Python exception)', self) + return maxArg() + else: + raise + logger.debug('Command stdout: %s' %ret[0], self) + logger.debug('Command stderr: %s' %ret[1], self) + logger.debug('Command returncode: %s' %proc.returncode, self) + output += ret[0].strip('\n') + '\n' + err += ret[1].strip('\n') + '\n' + returncode += proc.returncode + if proc.returncode: + break + + output_split = output.strip('\n').split('\n') + while True: - if len(output_split) > 0 and len(output_split[-1]) == 0: + if output_split and not output_split[-1]: output_split = output_split[:-1] else: break - if proc.returncode or not output_split[-1].startswith('done'): - for command in ('cp', 'chmod', 'find', 'rm', 'nice', 'ionice'): + + if not output_split: + return maxArg() + + gnu_find_suffix_support = True + for line in output_split: + if line.startswith('gnu_find not supported'): + gnu_find_suffix_support = False + self.config.set_gnu_find_suffix_support(gnu_find_suffix_support, self.profile_id) + + if returncode or not output_split[-1].startswith('done'): + for command in ('cp', 'chmod', 'find', 'rm', 'nice', 'ionice', 'nocache', 'screen', '(flock'): if output_split[-1].startswith(command): - raise mount.MountException( _('Remote host %(host)s doesn\'t support \'%(command)s\':\n%(err)s\nLook at \'man backintime\' for further instructions') % {'host' : self.host, 'command' : output_split[-1], 'err' : err}) - if output_split[-1].startswith('gnu_find not supported'): - self.config.set_gnu_find_suffix_support(False, self.profile_id) - else: - raise mount.MountException( _('Check commands on host %(host)s returned unknown error:\n%(err)s\nLook at \'man backintime\' for further instructions') % {'host' : self.host, 'err' : err}) - + raise MountException( _('Remote host %(host)s doesn\'t support \'%(command)s\':\n' + '%(err)s\nLook at \'man backintime\' for further instructions') + % {'host' : self.host, 'command' : output_split[-1], 'err' : err}) + raise MountException( _('Check commands on host %(host)s returned unknown error:\n' + '%(err)s\nLook at \'man backintime\' for further instructions') + % {'host' : self.host, 'err' : err}) + i = 1 inode1 = 'ABC' inode2 = 'DEF' @@ -398,8 +568,8 @@ except IndexError: pass if not inode1 == inode2: - raise mount.MountException( _('Remote host %s doesn\'t support hardlinks') % self.host) + raise MountException( _('Remote host %s doesn\'t support hardlinks') % self.host) i += 1 - + def random_id(self, size=6, chars=string.ascii_uppercase + string.digits): return ''.join(random.choice(chars) for x in range(size)) diff -Nru backintime-1.0.36/common/test/config backintime-1.1.12/common/test/config --- backintime-1.0.36/common/test/config 1970-01-01 00:00:00.000000000 +0000 +++ backintime-1.1.12/common/test/config 2016-01-11 18:07:58.000000000 +0000 @@ -0,0 +1,17 @@ +profile1.snapshots.include.1.type=0 +profile1.snapshots.include.1.value=/tmp/test +profile1.snapshots.include.size=1 +profile1.snapshots.no_on_battery=false +profile1.snapshots.notify.enabled=true +profile1.snapshots.path=/tmp/snapshots +profile1.snapshots.path.host=test-host +profile1.snapshots.path.profile=1 +profile1.snapshots.path.user=test-user +profile1.snapshots.preserve_acl=false +profile1.snapshots.preserve_xattr=false +profile1.snapshots.remove_old_snapshots.enabled=true +profile1.snapshots.remove_old_snapshots.unit=80 +profile1.snapshots.remove_old_snapshots.value=10 +profile1.snapshots.rsync_options.enabled=false +profile1.snapshots.rsync_options.value= +profiles.version=1 \ No newline at end of file diff -Nru backintime-1.0.36/common/test/__init__.py backintime-1.1.12/common/test/__init__.py --- backintime-1.0.36/common/test/__init__.py 1970-01-01 00:00:00.000000000 +0000 +++ backintime-1.1.12/common/test/__init__.py 2016-01-11 18:07:58.000000000 +0000 @@ -0,0 +1,25 @@ +# Back In Time +# Copyright (C) 2015 Germar Reitze +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +from test import test_applicationinstance +from test import test_argparser +from test import test_configfile +from test import test_snapshots +from test import test_tools + +if __name__ == '__main__': + pass diff -Nru backintime-1.0.36/common/test/test_applicationinstance.py backintime-1.1.12/common/test/test_applicationinstance.py --- backintime-1.0.36/common/test/test_applicationinstance.py 1970-01-01 00:00:00.000000000 +0000 +++ backintime-1.1.12/common/test/test_applicationinstance.py 2016-01-11 18:07:58.000000000 +0000 @@ -0,0 +1,190 @@ +# Back In Time +# Copyright (C) 2008-2016 Oprea Dan, Bart de Koning, Richard Bailey, Germar Reitze +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public Licensealong +# with this program; if not, write to the Free Software Foundation,Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +import unittest +import subprocess +import os +import sys +from threading import Thread +from time import sleep +sys.path.append(os.path.join(os.path.dirname(__file__), "..")) + +from applicationinstance import ApplicationInstance +import logger + + +class TestApplicationInstance(unittest.TestCase): + def setUp(self): + logger.DEBUG = '-v' in sys.argv + self.temp_file = '/tmp/temp.txt' + self.file_name = "/tmp/file_with_pid" + self.inst = ApplicationInstance(os.path.abspath(self.file_name), False) + self.subproc = None + + def tearDown(self): + for f in (self.temp_file, self.file_name): + if os.path.exists(f): + os.remove(f) + if self.subproc: + self.subproc.kill() + self.subproc = None + + def createProcess(self): + with open(self.temp_file, 'wt') as output: + self.subproc = subprocess.Popen("top", stdout=output) + return self.subproc.pid + + def getProcName(self, pid): + with open('/proc/%s/cmdline' % pid, 'r') as file: + return file.read().strip('\n') + + def test_create_and_remove_pid_file(self): + #create pid file + self.inst.start_application() + self.assertTrue(os.path.isfile(self.file_name)) + + #remove pid file + self.inst.exit_application() + self.assertFalse(os.path.isfile(self.file_name)) + + def test_write_pid_file(self): + self.inst.start_application() + + #get pid/procname of current process + this_pid = os.getpid() + this_procname = self.getProcName(this_pid) + + with open(self.file_name, 'rt') as file_with_pid: + self.assertEqual(file_with_pid.read(), '%s\n%s' %(this_pid, this_procname)) + + def test_existing_process_with_correct_procname(self): + """ + Test the check function with an existing process with correct process + name + """ + pid = self.createProcess() + procname = self.getProcName(pid) + + # create file with pid and process name + with open(self.file_name, "wt") as file_with_pid: + file_with_pid.write(str(pid) + "\n") + file_with_pid.write(procname) + + # Execute test + self.assertFalse(self.inst.check()) + + def test_existing_process_with_wrong_procname(self): + """ + Test the check function with an existing process with wrong process + name + """ + pid = self.createProcess() + procname = self.getProcName(pid) + + # create file with pid and process name + with open(self.file_name, "wt") as file_with_pid: + file_with_pid.write(str(pid) + "\n") + file_with_pid.write(procname + "DELETE") + + # Execute test + self.assertTrue(self.inst.check()) + + def test_existing_process_with_wrong_pid(self): + """ + Test the check function with an existing process with wrong pid + """ + pid = self.createProcess() + procname = self.getProcName(pid) + + # create file with pid and process name + with open(self.file_name, "wt") as file_with_pid: + file_with_pid.write("987654321\n") + file_with_pid.write(procname) + + # Execute test + self.assertTrue(self.inst.check()) + + def test_killing_existing_process(self): + """ + Test the check function with an existing process with correct process + name + """ + pid = self.createProcess() + procname = self.getProcName(pid) + + # create file with pid and process name + with open(self.file_name, "wt") as file_with_pid: + file_with_pid.write(str(pid) + "\n") + file_with_pid.write(procname) + + #kill process + self.subproc.kill() + self.subproc.wait() + self.subproc = None + + # Execute test + self.assertTrue(self.inst.check()) + + def test_non_existing_process(self): + """ Test the check function with a non existing process """ + # GIVE # + # create file with fake pid and process name + with open(self.file_name, "wt") as file_with_pid: + file_with_pid.write("987654321\n") + file_with_pid.write("FAKE_PROCNAME") + + # Execute test + self.assertTrue(self.inst.check()) + + def test_leftover_empty_lockfile(self): + with open(self.file_name, 'wt')as f: + pass + self.assertTrue(self.inst.check()) + + def write_after_flock(self, pid_file,): + inst = ApplicationInstance(os.path.abspath(pid_file), False) + inst.flockExclusiv() + with open(self.temp_file, 'wt') as f: + f.write('foo') + inst.flockUnlock() + + def test_thread_write_without_flock(self): + thread = Thread(target = self.write_after_flock, args = (self.file_name, )) + thread.start() + #wait for the thread to finish + thread.join() + self.assertTrue(os.path.exists(self.temp_file)) + with open(self.temp_file, 'rt') as f: + self.assertEqual(f.read(), 'foo') + + def test_flock_exclusive(self): + self.inst.flockExclusiv() + thread = Thread(target = self.write_after_flock, args = (self.file_name, )) + thread.start() + #give the thread some time + sleep(0.01) + self.assertFalse(os.path.exists(self.temp_file)) + self.inst.flockUnlock() + #wait for the thread to finish + thread.join() + self.assertTrue(os.path.exists(self.temp_file)) + with open(self.temp_file, 'rt') as f: + self.assertEqual(f.read(), 'foo') + +# Execute tests if this programm is call with python TestApplicationInstance.py +if __name__ == '__main__': + unittest.main() diff -Nru backintime-1.0.36/common/test/test_argparser.py backintime-1.1.12/common/test/test_argparser.py --- backintime-1.0.36/common/test/test_argparser.py 1970-01-01 00:00:00.000000000 +0000 +++ backintime-1.1.12/common/test/test_argparser.py 2016-01-11 18:07:58.000000000 +0000 @@ -0,0 +1,241 @@ +# Copyright (C) 2015 Germar Reitze +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +import unittest +import os +import sys +import itertools + +sys.path.append(os.path.join(os.path.dirname(__file__), "..")) +import backintime +import logger + +def shuffleArgs(*args): + ''' + Return every possible combination of arguments. Those arguments which need + to keep in line have to be inside a tuple. + + args: two or more arguments (str) + ''' + for i in itertools.permutations(args): + ret = [] + for j in i: + if isinstance(j, (tuple, list)): + ret.extend(j) + else: + ret.append(j) + yield ret + +class TestArgParser(unittest.TestCase): + def setUp(self): + #import pdb; pdb.set_trace() + backintime.create_parsers() + logger.DEBUG = '-v' in sys.argv #False + + def tearDown(self): + global parsers + parsers = {} + + def test_invalid_arg(self): + with self.assertRaises(SystemExit): + backintime.arg_parse(['not_existing_command']) + with self.assertRaises(SystemExit): + backintime.arg_parse(['--not_existing_argument']) + + def test_config(self): + args = backintime.arg_parse(['--config', '/tmp/config']) + self.assertIn('config', args) + self.assertEqual(args.config, '/tmp/config') + + def test_quiet(self): + args = backintime.arg_parse(['--quiet',]) + self.assertIn('quiet', args) + self.assertTrue(args.quiet) + + def test_debug(self): + args = backintime.arg_parse(['--debug',]) + self.assertIn('debug', args) + self.assertTrue(args.debug) + + def test_config_no_path(self): + with self.assertRaises(SystemExit): + backintime.arg_parse(['--config']) + + ############################################################################ + ### Backup ### + ############################################################################ + def test_cmd_backup(self): + args = backintime.arg_parse(['backup']) + self.assertIn('command', args) + self.assertEqual(args.command, 'backup') + self.assertIn('func', args) + self.assertIs(args.func, backintime.backup) + + def test_cmd_backup_backwards_compatiblity_alias(self): + args = backintime.arg_parse(['--backup']) + self.assertIn('func', args) + self.assertIs(args.func, backintime.aliasParser) + self.assertIn('replace', args) + self.assertEqual(args.replace, '--backup') + self.assertIn('alias', args) + self.assertEqual(args.alias, 'backup') + + def test_cmd_backup_profile(self): + for argv in shuffleArgs('backup', ('--profile', 'foo')): + with self.subTest(argv = argv): + #workaround for py.test3 2.5.1 doesn't support subTest + msg = 'argv = %s' %argv + args = backintime.arg_parse(argv) + self.assertIn('command', args, msg) + self.assertEqual(args.command, 'backup', msg) + self.assertIn('profile', args, msg) + self.assertEqual(args.profile, 'foo', msg) + + def test_cmd_backup_profile_id(self): + args = backintime.arg_parse(['backup', '--profile-id', '2']) + self.assertIn('command', args) + self.assertEqual(args.command, 'backup') + self.assertIn('profile_id', args) + self.assertEqual(args.profile_id, 2) + + def test_cmd_backup_profile_and_profile_id(self): + with self.assertRaises(SystemExit): + backintime.arg_parse(['backup', '--profile', 'foo', '--profile-id', '2']) + + def test_cmd_backup_quiet(self): + args = backintime.arg_parse(['backup', '--quiet']) + self.assertIn('command', args) + self.assertEqual(args.command, 'backup') + self.assertIn('quiet', args) + self.assertTrue(args.quiet) + + def test_cmd_backup_multi_args(self): + for argv in shuffleArgs('--quiet', 'backup', ('--profile', 'foo'), '--checksum', + ('--config', 'bar')): + with self.subTest(argv = argv): + #workaround for py.test3 2.5.1 doesn't support subTest + msg = 'argv = %s' %argv + args = backintime.arg_parse(argv) + self.assertIn('command', args, msg) + self.assertEqual(args.command, 'backup', msg) + self.assertIn('profile', args, msg) + self.assertEqual(args.profile, 'foo', msg) + self.assertIn('quiet', args, msg) + self.assertTrue(args.quiet, msg) + self.assertIn('checksum', args, msg) + self.assertTrue(args.checksum, msg) + self.assertIn('config', args, msg) + self.assertEqual(args.config, 'bar', msg) + + ############################################################################ + ### Restore ### + ############################################################################ + def test_cmd_restore(self): + args = backintime.arg_parse(['restore']) + self.assertIn('command', args) + self.assertEqual(args.command, 'restore') + self.assertIn('func', args) + self.assertIs(args.func, backintime.restore) + + def test_cmd_restore_what_where_snapshot_id(self): + args = backintime.arg_parse(['restore', '/home', '/tmp', '20151130-230501-984']) + self.assertIn('command', args) + self.assertEqual(args.command, 'restore') + self.assertIn('WHAT', args) + self.assertEqual(args.WHAT, '/home') + self.assertIn('WHERE', args) + self.assertEqual(args.WHERE, '/tmp') + self.assertIn('SNAPSHOT_ID', args) + self.assertEqual(args.SNAPSHOT_ID, '20151130-230501-984') + + def test_cmd_restore_what_where_snapshot_id_multi_args(self): + for argv in shuffleArgs('--quiet', ('restore', '/home', '/tmp', '20151130-230501-984'), + '--checksum', ('--profile-id', '2'), '--local-backup', + '--delete', ('--config', 'foo')): + with self.subTest(argv = argv): + #workaround for py.test3 2.5.1 doesn't support subTest + msg = 'argv = %s' %argv + args = backintime.arg_parse(argv) + self.assertIn('quiet', args, msg) + self.assertTrue(args.quiet, msg) + self.assertIn('checksum', args, msg) + self.assertTrue(args.checksum, msg) + self.assertIn('profile_id', args, msg) + self.assertEqual(args.profile_id, 2, msg) + self.assertIn('command', args, msg) + self.assertEqual(args.command, 'restore', msg) + self.assertIn('WHAT', args, msg) + self.assertEqual(args.WHAT, '/home', msg) + self.assertIn('WHERE', args, msg) + self.assertEqual(args.WHERE, '/tmp', msg) + self.assertIn('SNAPSHOT_ID', args, msg) + self.assertEqual(args.SNAPSHOT_ID, '20151130-230501-984', msg) + self.assertIn('local_backup', args, msg) + self.assertTrue(args.local_backup, msg) + self.assertIn('delete', args, msg) + self.assertTrue(args.delete, msg) + self.assertIn('config', args, msg) + self.assertEqual(args.config, 'foo', msg) + + def test_cmd_restore_multi_args(self): + for argv in shuffleArgs(('--profile-id', '2'), '--quiet', 'restore', '--checksum', + '--local-backup', + '--delete', ('--config', 'foo')): + with self.subTest(argv = argv): + #workaround for py.test3 2.5.1 doesn't support subTest + msg = 'argv = %s' %argv + args = backintime.arg_parse(argv) + self.assertIn('quiet', args, msg) + self.assertTrue(args.quiet, msg) + self.assertIn('checksum', args, msg) + self.assertTrue(args.checksum, msg) + self.assertIn('profile_id', args, msg) + self.assertEqual(args.profile_id, 2, msg) + self.assertIn('command', args, msg) + self.assertEqual(args.command, 'restore', msg) + self.assertIn('local_backup', args, msg) + self.assertTrue(args.local_backup, msg) + self.assertIn('delete', args, msg) + self.assertTrue(args.delete, msg) + self.assertIn('config', args, msg) + self.assertEqual(args.config, 'foo', msg) + + def test_cmd_restore_snapshot_id_index(self): + args = backintime.arg_parse(['restore', '/home', '/tmp', '1']) + self.assertIn('SNAPSHOT_ID', args) + self.assertEqual(args.SNAPSHOT_ID, '1') + + def test_cmd_restore_empty_where(self): + args = backintime.arg_parse(['restore', '/home', '', '20151130-230501-984']) + self.assertIn('WHERE', args) + self.assertEqual(args.WHERE, '') + + def test_cmd_restore_where_space_in_path(self): + args = backintime.arg_parse(['restore', '/home', '/tmp/foo bar/baz', '20151130-230501-984']) + self.assertIn('WHERE', args) + self.assertEqual(args.WHERE, '/tmp/foo bar/baz') + + def test_cmd_restore_what_space_in_path(self): + args = backintime.arg_parse(['restore', '/home/foo bar/baz', '/tmp', '20151130-230501-984']) + self.assertIn('WHAT', args) + self.assertEqual(args.WHAT, '/home/foo bar/baz') + + def test_cmd_restore_local_backup_and_no_local_backup(self): + with self.assertRaises(SystemExit): + backintime.arg_parse(('restore', '--local-backup', '--no-local-backup')) + +if __name__ == '__main__': + unittest.main() diff -Nru backintime-1.0.36/common/test/test_configfile.py backintime-1.1.12/common/test/test_configfile.py --- backintime-1.0.36/common/test/test_configfile.py 1970-01-01 00:00:00.000000000 +0000 +++ backintime-1.1.12/common/test/test_configfile.py 2016-01-11 18:07:58.000000000 +0000 @@ -0,0 +1,576 @@ +# Back In Time +# Copyright (C) 2008-2016 Oprea Dan, Bart de Koning, Richard Bailey, Germar Reitze +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public Licensealong +# with this program; if not, write to the Free Software Foundation,Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +import os +import sys +from tempfile import NamedTemporaryFile +import unittest +sys.path.append(os.path.join(os.path.dirname(__file__), '..')) + +import configfile +import logger + + +class TestConfigFile(unittest.TestCase): + '''Tests for the ConfigFile class in the configfile module''' + def setUp(self): + logger.DEBUG = '-v' in sys.argv + + def test_save(self): + '''Saves the config file in the tmp direcory ''' + with NamedTemporaryFile() as cfgFile: + cf = configfile.ConfigFile() + self.assertTrue(cf.save(cfgFile.name)) + self.assertTrue(os.path.exists(cfgFile.name)) + + self.assertFalse(cf.save('/foo')) + + def test_load(self): + ''' + ConfigFile should be able to load its content from a previously + saved ConfigFile object. + ''' + with NamedTemporaryFile() as cfgFile: + original_cf = configfile.ConfigFile() + key = "config_key" + value = "config_value" + original_cf.set_str_value(key, value) + original_cf.save(cfgFile.name) + + cf = configfile.ConfigFile() + cf.load(cfgFile.name) + + self.assertEqual(len(cf.get_keys()), len(original_cf.get_keys())) + for k in original_cf.get_keys(): + with self.subTest(k = k): + #workaround for py.test3 2.5.1 doesn't support subTest + msg = 'k = %s' %k + self.assertTrue(cf.has_value(k), msg) + self.assertEqual(original_cf.get_str_value(k), cf.get_str_value(k)) + + def test_remap_key(self): + cfg = configfile.ConfigFile() + cfg.dict = {'foo': '123', + 'bar': '456'} + #old key not in dict + cfg.remap_key('notExistedKey', 'baz') + self.assertEqual(cfg.get_str_value('foo'), '123') + self.assertEqual(cfg.get_str_value('bar'), '456') + + #valid remap + cfg.remap_key('foo', 'baz') + self.assertEqual(cfg.get_str_value('foo'), '') + self.assertEqual(cfg.get_str_value('baz'), '123') + self.assertEqual(cfg.get_str_value('bar'), '456') + + #do not overwrite existing keys + cfg.remap_key('baz', 'bar') + self.assertEqual(cfg.get_str_value('baz'), '') + self.assertEqual(cfg.get_str_value('bar'), '456') + + def test_has_value(self): + cfg = configfile.ConfigFile() + cfg.dict = {'foo': 'bar'} + self.assertTrue(cfg.has_value('foo')) + self.assertFalse(cfg.has_value('non_existend_key')) + + ############################################################################ + ### str_value ### + ############################################################################ + + def test_get_str_value(self): + cfg = configfile.ConfigFile() + cfg.dict = {'foo': 'bar'} + self.assertEqual(cfg.get_str_value('foo', 'default'), 'bar') + + def test_get_str_value_default(self): + cfg = configfile.ConfigFile() + self.assertEqual(cfg.get_str_value('non_existend_key', 'default'), 'default') + + def test_set_str_value(self): + cfg = configfile.ConfigFile() + cfg.set_str_value('foo', 'bar') + self.assertDictEqual(cfg.dict, {'foo': 'bar'}) + + ############################################################################ + ### int_value ### + ############################################################################ + + def test_get_int_value(self): + cfg = configfile.ConfigFile() + cfg.dict = {'foo': '11'} + self.assertEqual(cfg.get_int_value('foo', 22), 11) + + def test_get_int_value_default(self): + cfg = configfile.ConfigFile() + self.assertEqual(cfg.get_int_value('non_existend_key', 33), 33) + + def test_set_int_value(self): + cfg = configfile.ConfigFile() + cfg.set_int_value('foo', 44) + self.assertDictEqual(cfg.dict, {'foo': '44'}) + + ############################################################################ + ### bool_value ### + ############################################################################ + + def test_get_bool_value(self): + cfg = configfile.ConfigFile() + cfg.dict = {'foo': 'true', + 'bar': '1', + 'baz': 'false', + 'bla': '0'} + self.assertEqual(cfg.get_bool_value('foo', False), True) + self.assertEqual(cfg.get_bool_value('bar', False), True) + self.assertEqual(cfg.get_bool_value('baz', True), False) + self.assertEqual(cfg.get_bool_value('bla', True), False) + + def test_get_bool_value_default(self): + cfg = configfile.ConfigFile() + self.assertEqual(cfg.get_bool_value('non_existend_key', False), False) + self.assertEqual(cfg.get_bool_value('non_existend_key', True), True) + + def test_set_bool_value(self): + cfg = configfile.ConfigFile() + cfg.set_bool_value('foo', True) + cfg.set_bool_value('bar', False) + self.assertDictEqual(cfg.dict, {'foo': 'true', + 'bar': 'false'}) + + ############################################################################ + ### get_list_value ### + ############################################################################ + + def test_get_list_value_default(self): + cfg = configfile.ConfigFile() + self.assertListEqual(cfg.get_list_value('test', 'str:value', ['asdf']), ['asdf']) + + def test_get_list_value_int(self): + cfg = configfile.ConfigFile() + cfg.dict = {'aaa.size': '3', + 'aaa.1.bla': '55', + 'aaa.2.bla': '66', + 'aaa.3.bla': '77'} + self.assertListEqual(cfg.get_list_value('aaa', 'int:bla'), [55, 66, 77]) + + def test_get_list_value_str(self): + cfg = configfile.ConfigFile() + cfg.dict = {'bbb.size': '3', + 'bbb.1.value': 'foo', + 'bbb.2.value': 'bar', + 'bbb.3.value': 'baz'} + self.assertListEqual(cfg.get_list_value('bbb', 'str:value'), ['foo', 'bar', 'baz']) + + def test_get_list_value_bool(self): + cfg = configfile.ConfigFile() + cfg.dict = {'ccc.size': '2', + 'ccc.1.foo': 'true', + 'ccc.2.foo': 'false'} + self.assertListEqual(cfg.get_list_value('ccc', 'bool:foo'), [True, False]) + + def test_get_list_value_tuple(self): + cfg = configfile.ConfigFile() + cfg.dict = {'ddd.size': '3', + 'ddd.1.value': 'foo', + 'ddd.1.type': '11', + 'ddd.1.enabled': 'true', + 'ddd.2.value': 'bar', + 'ddd.2.type': '22', + 'ddd.2.enabled': 'false', + 'ddd.3.value': 'baz', + 'ddd.3.type': '33', + 'ddd.3.enabled': 'true'} + self.assertListEqual(cfg.get_list_value('ddd', ('str:value', 'int:type', 'bool:enabled')), + [('foo', 11, True), ('bar', 22, False), ('baz', 33, True)]) + + def test_get_list_value_tuple_missing_values(self): + cfg = configfile.ConfigFile() + cfg.dict = {'eee.size': '3', + 'eee.1.value': 'foo', + 'eee.1.enabled': 'true', + 'eee.2.type': '22', + 'eee.2.enabled': 'false', + 'eee.3.value': 'baz', + 'eee.3.type': '33'} + self.assertListEqual(cfg.get_list_value('eee', ('str:value', 'int:type', 'bool:enabled')), + [('foo', 0, True), ('', 22, False), ('baz', 33, False)]) + + def test_get_list_value_invalid_type(self): + cfg = configfile.ConfigFile() + cfg.dict = {'aaa.size': '3', + 'aaa.1.bla': '55', + 'aaa.2.bla': '66', + 'aaa.3.bla': '77'} + # cfg.get_list_value('aaa', 'non_existend_type:value') + with self.assertRaises(TypeError): + cfg.get_list_value('aaa', 'non_existend_type:value') + with self.assertRaises(TypeError): + cfg.get_list_value('aaa', {'dict:value'}) + with self.assertRaises(TypeError): + cfg.get_list_value('aaa', 1) + + ############################################################################ + ### set_list_value ### + ############################################################################ + + def test_set_list_value_int(self): + cfg = configfile.ConfigFile() + cfg.set_list_value('aaa', 'int:bla', [55, 66, 77]) + self.assertDictEqual(cfg.dict, {'aaa.size': '3', + 'aaa.1.bla': '55', + 'aaa.2.bla': '66', + 'aaa.3.bla': '77'}) + + def test_set_list_value_str(self): + cfg = configfile.ConfigFile() + cfg.set_list_value('bbb', 'str:value', ['foo', 'bar', 'baz']) + self.assertDictEqual(cfg.dict, {'bbb.size': '3', + 'bbb.1.value': 'foo', + 'bbb.2.value': 'bar', + 'bbb.3.value': 'baz'}) + + def test_set_list_value_bool(self): + cfg = configfile.ConfigFile() + cfg.set_list_value('ccc', 'bool:foo', [True, False]) + self.assertDictEqual(cfg.dict, {'ccc.size': '2', + 'ccc.1.foo': 'true', + 'ccc.2.foo': 'false'}) + + def test_set_list_value_tuple(self): + cfg = configfile.ConfigFile() + cfg.set_list_value('ddd', ('str:value', 'int:type', 'bool:enabled'), + [('foo', 11, True), ('bar', 22, False), ('baz', 33, True)]) + self.assertDictEqual(cfg.dict, {'ddd.size': '3', + 'ddd.1.value': 'foo', + 'ddd.1.type': '11', + 'ddd.1.enabled': 'true', + 'ddd.2.value': 'bar', + 'ddd.2.type': '22', + 'ddd.2.enabled': 'false', + 'ddd.3.value': 'baz', + 'ddd.3.type': '33', + 'ddd.3.enabled': 'true'}) + + def test_set_list_value_tuple_missing_values(self): + cfg = configfile.ConfigFile() + cfg.set_list_value('ddd', ('str:value', 'int:type', 'bool:enabled'), + [('foo', 11, True), ('bar', 22), ('baz',)]) + self.assertDictEqual(cfg.dict, {'ddd.size': '3', + 'ddd.1.value': 'foo', + 'ddd.1.type': '11', + 'ddd.1.enabled': 'true', + 'ddd.2.value': 'bar', + 'ddd.2.type': '22', + 'ddd.3.value': 'baz'}) + + def test_set_list_value_remove_leftovers(self): + cfg = configfile.ConfigFile() + cfg.dict = {'eee.size': '5', + 'eee.1.bla': '55', + 'eee.2.bla': '66', + 'eee.3.bla': '77', + 'eee.4.bla': '88', + 'eee.5.bla': '99'} + cfg.set_list_value('eee', 'int:bla', [55, 66, 77]) + self.assertDictEqual(cfg.dict, {'eee.size': '3', + 'eee.1.bla': '55', + 'eee.2.bla': '66', + 'eee.3.bla': '77'}) + + def test_set_list_value_remove_leftovers_tuple(self): + cfg = configfile.ConfigFile() + cfg.dict = {'fff.size': '5', + 'fff.1.value': 'foo', + 'fff.1.type': '11', + 'fff.1.enabled': 'true', + 'fff.2.value': 'bar', + 'fff.2.type': '22', + 'fff.2.enabled': 'false', + 'fff.3.value': 'baz', + 'fff.3.type': '33', + 'fff.3.enabled': 'true', + 'fff.4.value': 'boom', + 'fff.4.type': '44', + 'fff.4.enabled': 'true', + 'fff.5.value': 'bam', + 'fff.5.type': '55', + 'fff.5.enabled': 'true'} + cfg.set_list_value('fff', ('str:value', 'int:type', 'bool:enabled'), + [('foo', 11, True), ('bar', 22), ('baz',)]) + self.assertDictEqual(cfg.dict, {'fff.size': '3', + 'fff.1.value': 'foo', + 'fff.1.type': '11', + 'fff.1.enabled': 'true', + 'fff.2.value': 'bar', + 'fff.2.type': '22', + 'fff.3.value': 'baz'}) + + def test_set_list_value_invalid_type_for_type_key(self): + cfg = configfile.ConfigFile() + with self.assertRaises(TypeError): + cfg.set_list_value('aaa', 'non_existend_type:value', ['foo',]) + with self.assertRaises(TypeError): + cfg.set_list_value('aaa', {'dict:value'}, ['foo',]) + with self.assertRaises(TypeError): + cfg.set_list_value('aaa', 1, ['foo',]) + + def test_set_list_value_invalid_type_for_value(self): + cfg = configfile.ConfigFile() + with self.assertRaises(TypeError): + cfg.set_list_value('bbb', 'str:value', 'foo') + with self.assertRaises(TypeError): + cfg.set_list_value('bbb', 'str:value', {'foo': 'bar'}) + + ############################################################################ + ### remove keys ### + ############################################################################ + + def test_remove_key(self): + cfg = configfile.ConfigFile() + cfg.dict = {'foo': 'true', + 'bar': '1', + 'baz': 'false', + 'bla': '0'} + cfg.remove_key('bla') + self.assertDictEqual(cfg.dict, {'foo': 'true', + 'bar': '1', + 'baz': 'false'}) + + def test_remove_keys_start_with(self): + cfg = configfile.ConfigFile() + cfg.dict = {'foo': 'true', + 'bar': '1', + 'baz': 'false', + 'bla': '0'} + cfg.remove_keys_starts_with('ba') + self.assertDictEqual(cfg.dict, {'foo': 'true', + 'bla': '0'}) + + def test_remove_keys_start_with_not_matching_prefix(self): + cfg = configfile.ConfigFile() + cfg.dict = {'foo': 'true', + 'bar': '1', + 'baz': 'false', + 'bla': '0'} + cfg.remove_keys_starts_with('not_matching') + self.assertDictEqual(cfg.dict, {'foo': 'true', + 'bar': '1', + 'baz': 'false', + 'bla': '0'}) + +class TestConfigFileWithProfiles(unittest.TestCase): + def setUp(self): + logger.DEBUG = '-v' in sys.argv + self.cfg = configfile.ConfigFileWithProfiles('DefaultProfileName') + self.cfg.add_profile('foo') + self.cfg.add_profile('bar') + self.cfg.add_profile('baz') + + def test_load(self): + ''' + ConfigFile should be able to load its content from a previously + saved ConfigFile object. + ''' + with NamedTemporaryFile() as cfgFile: + origCfg = configfile.ConfigFileWithProfiles() + origCfg.set_int_value('profiles.version', 1) + key = "config_key" + value = "config_value" + origCfg.set_profile_str_value(key, value) + origCfg.set_profile_str_value(key, value, profile_id = '2') + origCfg.save(cfgFile.name) + + self.cfg.load(cfgFile.name) + + self.assertEqual(len(self.cfg.get_keys()), len(origCfg.get_keys())) + for k in origCfg.get_keys(): + with self.subTest(k = k): + #workaround for py.test3 2.5.1 doesn't support subTest + msg = 'k = %s' %k + self.assertTrue(self.cfg.has_value(k), msg) + self.assertEqual(origCfg.get_str_value(k), self.cfg.get_str_value(k)) + + def test_get_profiles(self): + emptyCfg = configfile.ConfigFileWithProfiles() + self.assertListEqual(emptyCfg.get_profiles(), ['1',]) + + self.assertListEqual(self.cfg.get_profiles(), ['1', '2', '3', '4']) + + self.cfg.remove_profile('3') + self.assertListEqual(self.cfg.get_profiles(), ['1', '2', '4']) + + def test_get_profiles_sorted_by_name(self): + self.assertListEqual(self.cfg.get_profiles_sorted_by_name(), ['3', '4', '1', '2']) + + def test_current_profile(self): + self.assertEqual(self.cfg.get_current_profile(), '1') + + self.assertTrue(self.cfg.set_current_profile(4)) + self.assertEqual(self.cfg.get_current_profile(), '4') + + self.assertTrue(self.cfg.set_current_profile('3')) + self.assertEqual(self.cfg.get_current_profile(), '3') + + self.assertFalse(self.cfg.set_current_profile('9')) + self.assertEqual(self.cfg.get_current_profile(), '3') + + def test_current_profile_by_name(self): + self.assertEqual(self.cfg.get_current_profile(), '1') + + self.assertTrue(self.cfg.set_current_profile_by_name('bar')) + self.assertEqual(self.cfg.get_current_profile(), '3') + + self.assertFalse(self.cfg.set_current_profile_by_name('NotExistingProfile')) + self.assertEqual(self.cfg.get_current_profile(), '3') + + def test_profile_exists(self): + self.assertTrue(self.cfg.profile_exists('2')) + self.assertTrue(self.cfg.profile_exists(3)) + self.assertFalse(self.cfg.profile_exists('9')) + self.assertFalse(self.cfg.profile_exists(10)) + + def test_profile_exists_by_name(self): + self.assertTrue(self.cfg.profile_exists_by_name('foo')) + self.assertFalse(self.cfg.profile_exists_by_name('NotExistingProfile')) + + def test_get_profile_name(self): + self.assertEqual(self.cfg.get_profile_name('1'), 'DefaultProfileName') + self.assertEqual(self.cfg.get_profile_name('2'), 'foo') + self.assertEqual(self.cfg.get_profile_name(3), 'bar') + + self.assertEqual(self.cfg.get_profile_name(), 'DefaultProfileName') + self.cfg.set_current_profile('3') + self.assertEqual(self.cfg.get_profile_name(), 'bar') + + self.assertEqual(self.cfg.get_profile_name('4'), 'baz') + del self.cfg.dict['profile4.name'] + self.assertEqual(self.cfg.get_profile_name('4'), 'Profile 4') + + def test_add_profile(self): + #add already existing profile + self.assertIsNone(self.cfg.add_profile('foo')) + + #new valid profile + self.assertEqual(self.cfg.add_profile('asdf'), '5') + + #new valid profile fill an old profile ID + self.cfg.remove_profile('3') + self.assertEqual(self.cfg.add_profile('qwertz'), '3') + + def test_remove_profile(self): + for profile in self.cfg.get_profiles(): + self.cfg.set_profile_str_value('foo', 'bar', profile) + + self.assertFalse(self.cfg.remove_profile('9')) + + self.assertTrue(self.cfg.remove_profile('3')) + self.assertNotIn('3', self.cfg.get_profiles()) + self.assertNotIn('profile3.foo', self.cfg.dict) + + self.cfg.set_current_profile('4') + self.assertTrue(self.cfg.remove_profile()) + self.assertNotIn('4', self.cfg.get_profiles()) + self.assertNotIn('profile4.foo', self.cfg.dict) + self.assertEqual(self.cfg.get_current_profile(), '1') + + self.assertTrue(self.cfg.remove_profile(2)) + self.assertNotIn('2', self.cfg.get_profiles()) + self.assertNotIn('profile2.foo', self.cfg.dict) + + self.assertFalse(self.cfg.remove_profile()) + + def test_set_profile_name(self): + self.assertFalse(self.cfg.set_profile_name('foo', '3')) + self.assertEqual(self.cfg.get_profile_name('3'), 'bar') + + self.assertTrue(self.cfg.set_profile_name('newName', '4')) + self.assertEqual(self.cfg.get_profile_name('4'), 'newName') + + self.assertTrue(self.cfg.set_profile_name('otherName', 3)) + self.assertEqual(self.cfg.get_profile_name('3'), 'otherName') + + self.assertTrue(self.cfg.set_profile_name('thirdName')) + self.assertEqual(self.cfg.get_profile_name('1'), 'thirdName') + + def test_get_profile_key(self): + self.assertEqual(self.cfg._get_profile_key_('foo'), 'profile1.foo') + self.assertEqual(self.cfg._get_profile_key_('foo', '2'), 'profile2.foo') + self.assertEqual(self.cfg._get_profile_key_('foo', 3), 'profile3.foo') + + def test_remove_profile_key(self): + for profile in self.cfg.get_profiles(): + self.cfg.set_profile_str_value('foo', 'bar', profile) + + self.assertIn('profile1.foo', self.cfg.dict) + self.cfg.remove_profile_key('foo') + self.assertNotIn('profile1.foo', self.cfg.dict) + + self.assertIn('profile3.foo', self.cfg.dict) + self.cfg.remove_profile_key('foo', '3') + self.assertNotIn('profile3.foo', self.cfg.dict) + + def test_remove_profile_keys_starts_with(self): + for profile in self.cfg.get_profiles(): + self.cfg.set_profile_str_value('foo', 'bar', profile) + + self.assertIn('profile1.foo', self.cfg.dict) + self.cfg.remove_profile_keys_starts_with('f') + self.assertNotIn('profile1.foo', self.cfg.dict) + + self.assertIn('profile3.foo', self.cfg.dict) + self.cfg.remove_profile_keys_starts_with('f', '3') + self.assertNotIn('profile3.foo', self.cfg.dict) + + def test_has_profile_value(self): + for profile in self.cfg.get_profiles(): + self.cfg.set_profile_str_value('foo', 'bar', profile) + + self.assertTrue(self.cfg.has_profile_value('foo')) + self.assertFalse(self.cfg.has_profile_value('baz')) + + self.assertTrue(self.cfg.has_profile_value('foo', '3')) + self.assertFalse(self.cfg.has_profile_value('baz', '3')) + + def test_set_profile_value(self): + methods = {'str': ('foo', 'FOO'), + 'int': ('bar', 123), + 'bool': ('baz', True)} + + for profile in (None, '3'): + for t in methods: + with self.subTest(profile = profile, t = t): + #workaround for py.test3 2.5.1 doesn't support subTest + msg = 'profile = {}, t = {}'.format(profile, t) + key, value = methods[t] + setFunc = getattr(self.cfg, 'set_profile_{}_value'.format(t)) + getFunc = getattr(self.cfg, 'get_profile_{}_value'.format(t)) + setFunc(key, value, profile_id = profile) + self.assertEqual(getFunc(key, profile_id = profile), value, msg) + with self.subTest(profile = profile): + #workaround for py.test3 2.5.1 doesn't support subTest + msg = 'profile = {}'.format(profile) + self.cfg.set_profile_list_value('bla', + 'str:value', + ['ASDF', 'QWERTZ'], + profile_id = profile) + result = self.cfg.get_profile_list_value('bla', + 'str:value', + profile_id = profile) + self.assertListEqual(result, ['ASDF', 'QWERTZ'], msg) + +if __name__ == '__main__': + unittest.main() diff -Nru backintime-1.0.36/common/test/test.sh backintime-1.1.12/common/test/test.sh --- backintime-1.0.36/common/test/test.sh 1970-01-01 00:00:00.000000000 +0000 +++ backintime-1.1.12/common/test/test.sh 2016-01-11 18:07:58.000000000 +0000 @@ -0,0 +1,137 @@ +#!/bin/bash +# Back In Time +# Copyright (C) 2008-2016 Oprea Dan, Bart de Koning, Richard Bailey, Germar Reitze +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public Licensealong +# with this program; if not, write to the Free Software Foundation,Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# test.sh + + +# PATH VARS +TESTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +export PATH="${TESTDIR}/..:${PATH}" +BACKINTIME_PATH="${TESTDIR}/../backintime" +CONFIG_PATH="${TESTDIR}/config" +TEST_PATH="/tmp/snapshots" +SNAPSHOTS_PATH=$($BACKINTIME_PATH --quiet --config ${CONFIG_PATH} snapshots-path | awk '{print $2}') +DATA_PATH="/tmp/test/files" +REPORT_PATH="/tmp/test/reports" + +# COUNTERS +CSuccesses=0 +CFails=0 + +####################################################################### +# COLORS + +# Reset +Color_Off='\e[0m' # Text Reset + +# Regular Colors +Red='\e[0;31m' # Red +Green='\e[0;32m' # Green + +# Bold +BRed='\e[1;31m' # Red +BGreen='\e[1;32m' # Green +BWhite='\e[1;37m' # White + +# Background +On_Red='\e[41m' # Red +On_Green='\e[42m' # Green +####################################################################### + + +####################################################################### +test_fun () # test [condition] [name] [success] [fail] [lineno] +{ #+ If condition false, exit from script + #+ with appropriate error message. + E_PARAM_ERR=98 + E_ASSERT_FAILED=99 + + + if [ -z "$2" ] || [ -z "$3" ] || [ -z "$4" ] || [ -z "$5" ]; # Not enough parameters passed + then #+ to assert() function. + return $E_PARAM_ERR # No damage done. + fi + + lineno=$5 + + echo -e "${BWhite}" + echo -e "================================================================================${Color_Off}" + + echo -e "${BWhite} TEST --> $3 ${Color_Off}" + + if [ ! $1 ] + then + echo "Assertion failed: \"$2\" for test : \"$3\"" + echo "File \"$0\", line $lineno" # Give name of file and line number. + echo -e "${On_Red} FAIL --> $5 ${Color_Off}" + + CFails=`expr $CFails + 1` + else + echo -e "${On_Green} SUCCESS --> $4 ${Color_Off}" + + CSuccesses=`expr $CSuccesses + 1` + fi + + echo -e "${BWhite}================================================================================" + echo -e "${Color_Off}" +} +####################################################################### + + +# clean tmp +echo "Clean testing directory" +chmod -Rfv 777 $TEST_PATH >/dev/null && rm -rfv $TEST_PATH $DATA_PATH >/dev/null + +echo "Create testing directory" +mkdir -p $SNAPSHOTS_PATH && mkdir -p $REPORT_PATH + +echo "Create testing data" +mkdir -p $DATA_PATH && touch "$DATA_PATH/test_file1" + +# create backup +$BACKINTIME_PATH --config $CONFIG_PATH -b >/dev/null 2>/dev/null +test_fun "`ls -1 $SNAPSHOTS_PATH | grep -v ^l| wc -l` -eq 1" "Test if backintime make a snapshot" "A snapshot have been created" "A snaphshot should have been created" $LINENO + +# create backup but no snapshot must be created +$BACKINTIME_PATH --config $CONFIG_PATH -b >/dev/null 2>/dev/null +test_fun "`ls -1 $SNAPSHOTS_PATH | grep -v ^l| wc -l` -eq 1" "Test if backintime does not make a useless snapshot" "No snapshot have been created" "A useless snaphshot have been created" $LINENO + +# add new file in target dir +mkdir -p $DATA_PATH && touch "$DATA_PATH/test_file2" + +# create backup +$BACKINTIME_PATH --config $CONFIG_PATH -b >/dev/null 2>/dev/null +test_fun "`ls -1 $SNAPSHOTS_PATH | grep -v ^l | wc -l` -eq 2" "Test if backintime make a new snapshot on content dir change" "A snaphshot should have been created" "A snapshot have been created" $LINENO + + +# SUMMARY +echo -e "${BWhite}" +echo "================================================================================" +echo "Summary integration tests :" +echo "--> Successes : ${CSuccesses} - Fails : ${CFails}" +echo "================================================================================" +echo -e "${Color_Off}" + +if [ $CFails -eq 0 ] +then + echo "All tests passed successfully, cleaning testing directory" +# clean tmp + chmod -R 777 $TEST_PATH && rm -rfv $TEST_PATH $DATA_PATH >/dev/null + exit 0 +else + exit 1 +fi diff -Nru backintime-1.0.36/common/test/test_snapshots.py backintime-1.1.12/common/test/test_snapshots.py --- backintime-1.0.36/common/test/test_snapshots.py 1970-01-01 00:00:00.000000000 +0000 +++ backintime-1.1.12/common/test/test_snapshots.py 2016-01-11 18:07:58.000000000 +0000 @@ -0,0 +1,48 @@ +# Back In Time +# Copyright (C) 2008-2016 Oprea Dan, Bart de Koning, Richard Bailey, Germar Reitze +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public Licensealong +# with this program; if not, write to the Free Software Foundation,Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +import os +import sys +import tempfile +import unittest +sys.path.append(os.path.join(os.path.dirname(__file__), '..')) + +import configfile +import snapshots + + +class TestSnapShots(unittest.TestCase): + + def test_valid_config(self): + ''' + Test if the config file use by the snapshots is correctly + initialized if the function is fed a valid ConfigFile object. + ''' + cf = configfile.ConfigFile() + sp = snapshots.Snapshots(cf) + self.assertEqual(sp.config, cf) + + def test_None_as_config(self): + ''' + Test if the config file use by the snapshots is correctly + initialized if the function is fed None as the ConfigFile. + ''' + sp = snapshots.Snapshots(None) + self.assertIsInstance(sp.config, configfile.ConfigFile) + +if __name__ == '__main__': + unittest.main() diff -Nru backintime-1.0.36/common/test/test_tools.py backintime-1.1.12/common/test/test_tools.py --- backintime-1.0.36/common/test/test_tools.py 1970-01-01 00:00:00.000000000 +0000 +++ backintime-1.1.12/common/test/test_tools.py 2016-01-11 18:07:58.000000000 +0000 @@ -0,0 +1,163 @@ +# Back In Time +# Copyright (C) 2008-2016 Oprea Dan, Bart de Koning, Richard Bailey, Germar Reitze +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public Licensealong +# with this program; if not, write to the Free Software Foundation,Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +import unittest +import os +import sys +from copy import deepcopy +sys.path.append(os.path.join(os.path.dirname(__file__), '..')) + +import tools +import config +import configfile +import logger + + +class TestTools(unittest.TestCase): + ''' All funtions test here come from tools.py ''' + def setUp(self): + logger.DEBUG = '-v' in sys.argv + + def test_read_file(self): + ''' Test the function read_file ''' + test_tools_file = os.path.abspath(__file__) + test_directory = os.path.dirname(test_tools_file) + non_existing_file = os.path.join(test_directory, "nonExistingFile") + self.assertIsNotNone(tools.read_file(test_tools_file)) + self.assertIsNone(tools.read_file(non_existing_file)) + + def test_read_file_lines(self): + ''' Test the function read_file_lines ''' + test_tools_file = os.path.abspath(__file__) + test_directory = os.path.dirname(test_tools_file) + non_existing_file = os.path.join(test_directory, "nonExistingFile") + self.assertIsNotNone(tools.read_file_lines(test_tools_file)) + self.assertIsNone(tools.read_file_lines(non_existing_file)) + + def test_read_command_output(self): + ''' Test the function read_command_output ''' + ret_val = tools.read_command_output("echo 'Test, read command output'") + self.assertEqual("Test, read command output", ret_val) + + def test_check_command(self): + ''' Test the function check_command ''' + self.assertFalse(tools.check_command("notExistedCommand")) + self.assertTrue(tools.check_command("ls")) + + def test_which(self): + ''' Test the function which ''' + self.assertRegex(tools.which("ls"), r'/.*/ls') + self.assertIsNone(tools.which("notExistedCommand")) + + def test_process_exists(self): + ''' Test the function process_exists ''' + self.assertTrue(tools.process_exists("init") or tools.process_exists("systemd")) + self.assertFalse(tools.process_exists("notExistedProcess")) + + def test_prepare_path(self): + ''' Test the function load_env ''' + path_with_slash_at_begin = "/test/path" + path_without_slash_at_begin = "test/path" + path_with_slash_at_end = "/test/path/" + path_without_slash_at_end = "/test/path" + self.assertEqual( + tools.prepare_path(path_with_slash_at_begin), + path_with_slash_at_begin) + self.assertEqual( + tools.prepare_path(path_without_slash_at_begin), + path_with_slash_at_begin) + self.assertEqual( + tools.prepare_path(path_without_slash_at_end), + path_without_slash_at_end) + self.assertEqual( + tools.prepare_path(path_with_slash_at_end), + path_without_slash_at_end) + + def test_is_process_alive(self): + ''' Test the function is_process_alive ''' + self.assertTrue(tools.is_process_alive(0)) + self.assertFalse(tools.is_process_alive(99999999999)) + +class TestToolsEnviron(unittest.TestCase): + def __init__(self, *args, **kwargs): + super(TestToolsEnviron, self).__init__(*args, **kwargs) + self.env = deepcopy(os.environ) + + def setUp(self): + logger.DEBUG = '-v' in sys.argv + self.temp_file = '/tmp/temp.txt' + os.environ = deepcopy(self.env) + + def tearDown(self): + if os.path.exists(self.temp_file): + os.remove(self.temp_file) + os.environ = deepcopy(self.env) + + def test_load_env_without_previous_values(self): + test_env = configfile.ConfigFile() + test_env.set_str_value('FOO', 'bar') + test_env.set_str_value('ASDF', 'qwertz') + test_env.save(self.temp_file) + + #make sure environ is clean + self.assertNotIn('FOO', os.environ) + self.assertNotIn('ASDF', os.environ) + + tools.load_env(self.temp_file) + self.assertIn('FOO', os.environ) + self.assertIn('ASDF', os.environ) + self.assertEqual(os.environ['FOO'], 'bar') + self.assertEqual(os.environ['ASDF'], 'qwertz') + + def test_load_env_do_not_overwrite_previous_values(self): + test_env = configfile.ConfigFile() + test_env.set_str_value('FOO', 'bar') + test_env.set_str_value('ASDF', 'qwertz') + test_env.save(self.temp_file) + + #add some environ vars that should not get overwritten + os.environ['FOO'] = 'defaultFOO' + os.environ['ASDF'] = 'defaultASDF' + + tools.load_env(self.temp_file) + self.assertIn('FOO', os.environ) + self.assertIn('ASDF', os.environ) + self.assertEqual(os.environ['FOO'], 'defaultFOO') + self.assertEqual(os.environ['ASDF'], 'defaultASDF') + + def test_save_env(self): + keys = ('GNOME_KEYRING_CONTROL', 'DBUS_SESSION_BUS_ADDRESS', \ + 'DBUS_SESSION_BUS_PID', 'DBUS_SESSION_BUS_WINDOWID', \ + 'DISPLAY', 'XAUTHORITY', 'GNOME_DESKTOP_SESSION_ID', \ + 'KDE_FULL_SESSION') + for i, k in enumerate(keys): + os.environ[k] = str(i) + + tools.save_env(self.temp_file) + + self.assertTrue(os.path.isfile(self.temp_file)) + + test_env = configfile.ConfigFile() + test_env.load(self.temp_file) + for i, k in enumerate(keys): + with self.subTest(i = i, k = k): + #workaround for py.test3 2.5.1 doesn't support subTest + msg = 'i = %s, k = %s' %(i, k) + self.assertEqual(test_env.get_str_value(k), str(i), msg) + +if __name__ == '__main__': + unittest.main() diff -Nru backintime-1.0.36/common/tools.py backintime-1.1.12/common/tools.py --- backintime-1.0.36/common/tools.py 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/common/tools.py 2016-01-11 18:07:58.000000000 +0000 @@ -1,5 +1,5 @@ # Back In Time -# Copyright (C) 2008-2009 Oprea Dan, Bart de Koning, Richard Bailey +# Copyright (C) 2008-2016 Oprea Dan, Bart de Koning, Richard Bailey, Germar Reitze # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -16,15 +16,16 @@ # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -import os.path import os import sys import subprocess -import hashlib -import commands import signal import re -import dbus +import errno +import gzip +import tempfile +from datetime import datetime +from distutils.version import StrictVersion keyring = None keyring_warn = False try: @@ -35,8 +36,21 @@ os.putenv('BIT_USE_KEYRING', 'false') keyring_warn = True +# getting dbus imports to work in Travis CI is a huge pain +# use conditional dbus import +ON_TRAVIS = 'TRAVIS' in os.environ and os.environ['TRAVIS'] == 'true' +try: + import dbus +except ImportError: + if ON_TRAVIS: + #python-dbus doesn't work on Travis yet. + dbus = None + else: + raise + import configfile import logger +from exceptions import Timeout, InvalidChar, PermissionDeniedByPolicy ON_AC = 0 ON_BATTERY = 1 @@ -44,37 +58,85 @@ DISK_BY_UUID = '/dev/disk/by-uuid' +def get_share_path(): + share = os.path.abspath(os.path.join(__file__, os.pardir, os.pardir, os.pardir)) + if os.path.basename(share) == 'share': + return share + else: + return '/usr/share' -def get_backintime_path( path ): - return os.path.join( os.path.dirname( os.path.abspath( os.path.dirname( __file__ ) ) ), path ) - +def get_backintime_path(*path): + return os.path.abspath(os.path.join(__file__, os.pardir, os.pardir, *path)) -def register_backintime_path( path ): - path = get_backintime_path( path ) +def register_backintime_path(*path): + '''find duplicate in qt4/qt4tools.py + ''' + path = get_backintime_path(*path) if not path in sys.path: - sys.path = [path] + sys.path + sys.path.insert(0, path) +def running_from_source(): + '''return True if BackInTime was started + from source folder (without installing) + ''' + return os.path.isfile(get_backintime_path('common', 'backintime')) + +def add_source_to_path_environ(): + source = get_backintime_path('common') + path = os.getenv('PATH') + if source not in path.split(':'): + os.environ['PATH'] = '%s:%s' %(source, path) + +def get_git_ref_hash(): + ref, hashid = None, None + gitPath = os.path.abspath(os.path.join(__file__, os.pardir, os.pardir, '.git')) + headPath = os.path.join(gitPath, 'HEAD') + refPath = '' + if not os.path.isdir(gitPath): + return (ref, hashid) + try: + with open(headPath, 'rt') as f: + refPath = f.read().strip('\n') + if refPath.startswith('ref: '): + refPath = refPath[5:] + if refPath: + refPath = os.path.join(gitPath, refPath) + ref = os.path.basename(refPath) + except Exception as e: + pass + if os.path.isfile(refPath): + try: + with open(refPath, 'rt') as f: + hashid = f.read().strip('\n') + except: + pass + return (ref, hashid[:7]) def read_file( path, default_value = None ): - ret_val = default_value + ret_val = default_value try: - file = open( path ) - ret_val = file.read() - file.close() + if os.path.exists(path): + with open( path ) as f: + ret_val = f.read() + elif os.path.exists(path + '.gz'): + with gzip.open(path + '.gz') as f: + ret_val = f.read().decode() except: pass return ret_val - def read_file_lines( path, default_value = None ): - ret_val = default_value + ret_val = default_value try: - file = open( path ) - ret_val = file.readlines() - file.close() + if os.path.exists(path): + with open( path ) as f: + ret_val = f.readlines() + elif os.path.exists(path + '.gz'): + with gzip.open(path + '.gz') as f: + ret_val = [b.decode() for b in f.readlines()] except: pass @@ -87,7 +149,7 @@ try: pipe = os.popen( cmd ) ret_val = pipe.read().strip() - pipe.close() + pipe.close() except: return '' @@ -97,7 +159,7 @@ def check_command( cmd ): cmd = cmd.strip() - if len( cmd ) < 1: + if not cmd: return False if os.path.isfile( cmd ): @@ -117,15 +179,18 @@ def make_dirs( path ): path = path.rstrip( os.sep ) - if len( path ) <= 0: - return + if not path: + return False - if not os.path.isdir( path ): + if os.path.isdir(path): + return True + else: try: os.makedirs( path ) - except: - pass - + except Exception as e: + logger.error("Failed to make dirs '%s': %s" + %(path, str(e)), self, 1) + return os.path.isdir(path) def process_exists( name ): output = read_command_output( "ps -o pid= -C %s" % name ) @@ -164,53 +229,45 @@ def get_snapshots_list_in_folder( folder, sort_reverse = True ): biglist = [] - #print folder try: biglist = os.listdir( folder ) - #print biglist except: pass - _list = [] + list_ = [] for item in biglist: - #print item + ' ' + str(len( item )) if len( item ) != 15 and len( item ) != 19: continue if os.path.isdir( os.path.join( folder, item, 'backup' ) ): - #print item - _list.append( item ) + list_.append( item ) - _list.sort( reverse = sort_reverse ) - return _list + list_.sort( reverse = sort_reverse ) + return list_ def get_nonsnapshots_list_in_folder( folder, sort_reverse = True ): biglist = [] - #print folder try: biglist = os.listdir( folder ) - #print biglist except: pass - _list = [] + list_ = [] for item in biglist: - #print item + ' ' + str(len( item )) if len( item ) != 15 and len( item ) != 19: - _list.append( item ) - else: + list_.append( item ) + else: if os.path.isdir( os.path.join( folder, item, 'backup' ) ): - #print item continue else: - _list.append( item ) + list_.append( item ) - _list.sort( reverse = sort_reverse ) - return _list + list_.sort( reverse = sort_reverse ) + return list_ def move_snapshots_folder( old_folder, new_folder ): @@ -223,12 +280,12 @@ if os.path.exists( new_folder ) == True: snapshots_already_there = get_snapshots_list_in_folder( new_folder ) else: - make_dirs( new_folder ) + make_dirs( new_folder ) print("To move: %s" % snapshots_to_move) print("Already there: %s" % snapshots_already_there) snapshots_expected = snapshots_to_move + snapshots_already_there print("Snapshots expected: %s" % snapshots_expected) - + # Check if both folders are within the same os device_old = os.stat( old_folder ).st_dev device_new = os.stat( new_folder ).st_dev @@ -239,14 +296,14 @@ _execute( cmd ) else: # Use rsync - # Prepare hardlinks - if len( snapshots_already_there ) > 0: + # Prepare hardlinks + if snapshots_already_there: first_snapshot_path = os.path.join( new_folder, snapshots_to_move[ len( snapshots_to_move ) - 1 ] ) snapshot_to_hardlink_path = os.path.join( new_folder, snapshots_already_there[0] ) _execute( "find \"%s\" -type d -exec chmod u+wx {} \\;" % snapshot_to_hardlink_path ) cmd = "cp -al \"%s\" \"%s\"" % ( snapshot_to_hardlink_path, first_snapshot_path ) _execute( cmd ) - + # Prepare excludes nonsnapshots = get_nonsnapshots_list_in_folder( old_folder ) print("Nonsnapshots: %s" % nonsnapshots) @@ -257,13 +314,12 @@ break items.append( "--exclude=\"%s\"" % nonsnapshot ) rsync_exclude = ' '.join( items ) - #print rsync_exclude - + # Move move move cmd = "rsync -aEAXHv --delete " + old_folder + " " + new_folder + " " + rsync_exclude _execute( cmd ) - _execute ( "find \"%s\" \"%s\" -type d -exec chmod a-w {} \\;" % ( snapshots_to_hardlink_path, first_snapshot_path ) ) - + _execute ( "find \"%s\" \"%s\" -type d -exec chmod a-w {} \\;" % ( snapshot_to_hardlink_path, first_snapshot_path ) ) + # Remove old ones snapshots_not_moved = [] for snapshot in snapshots_to_move: @@ -277,19 +333,18 @@ _execute( cmd ) else: print("%s was already removed" %snapshot) - else: + else: snapshots_not_moved.append( snapshot ) - + # Check snapshot list - if len( snapshots_not_moved ) == 0: - print("Succes!\n") - return True - else: + if snapshots_not_moved: print("Error! Not moved: %s\n" %snapshots_not_moved) return False - + print("Succes!\n") + return True def _execute( cmd, callback = None, user_data = None ): + logger.debug("Call command \"%s\"" %cmd, traceDepth = 1) ret_val = 0 if callback is None: @@ -299,7 +354,7 @@ while True: line = temp_failure_retry( pipe.readline ) - if len( line ) == 0: + if not line: break callback( line.strip(), user_data ) @@ -308,9 +363,13 @@ ret_val = 0 if ret_val != 0: - print("Command \"%s\" returns %s" % ( cmd, ret_val )) + logger.warning("Command \"%s\" returns %s" + %(cmd, ret_val), + traceDepth = 1) else: - print("Command \"%s\" returns %s" % ( cmd, ret_val )) + logger.debug("Command \"%s...\" returns %s" + %(cmd[:min(16, len(cmd))], ret_val), + traceDepth = 1) return ret_val @@ -326,15 +385,20 @@ def get_rsync_caps(): data = read_command_output( 'rsync --version' ) + caps = [] + #rsync >= 3.1 does provide --info=progress2 + m = re.match(r'rsync\s*version\s*(\d\.\d)', data) + if m and StrictVersion(m.group(1)) >= StrictVersion('3.1'): + caps.append('progress2') si = data.find( 'Capabilities:' ) if si < 0: - return [] + return caps si = data.find( '\n', si ) if si < 0: - return [] + return caps ei = data.find( '\n\n', si ) if ei < 0: - return [] + return caps data = data[ si + 1 : ei - 1 ] data = data.split( '\n' ) @@ -342,15 +406,13 @@ for line in data: line = line.strip() - if len( line ) <= 0: + if not line: continue - if len( all_caps ) > 0: + if all_caps: all_caps = all_caps + ' ' all_caps = all_caps + line - caps = all_caps.split( ", " ) - #print caps - #print ( "ACLs" in get_rsync_caps() ) + caps.extend(all_caps.split( ", " )) return caps @@ -360,9 +422,11 @@ def get_rsync_prefix( config, no_perms = True, use_modes = ['ssh', 'ssh_encfs'] ): caps = get_rsync_caps() - #cmd = 'rsync -aEH' - cmd = 'rsync' - cmd = cmd + ' -rtDH' + cmd = '' + if config.is_run_nocache_on_local_enabled(): + cmd += 'nocache ' + cmd += 'rsync' + cmd += ' -rtDHh' if config.use_checksum() or config.force_use_checksum: cmd = cmd + ' --checksum' @@ -388,6 +452,12 @@ else: cmd = cmd + ' -pEgo' + if 'progress2' in caps: + cmd += ' --info=progress2 --no-i-r' + + if config.rsync_options_enabled(): + cmd += ' ' + config.rsync_options() + mode = config.get_snapshots_mode() if mode in ['ssh', 'ssh_encfs'] and mode in use_modes: ssh_port = config.get_ssh_port() @@ -396,58 +466,63 @@ ssh_cipher_suffix = '' else: ssh_cipher_suffix = '-c %s' % ssh_cipher - cmd = cmd + ' --rsh="ssh -p %s %s"' % ( str(ssh_port), ssh_cipher_suffix) + # specifying key file here allows to override for potentially + # conflicting .ssh/config key entry + ssh_private_key = "-o IdentityFile=%s" % config.get_ssh_private_key_file() + cmd += ' --rsh="ssh -p %s %s %s"' % ( str(ssh_port), ssh_cipher_suffix, ssh_private_key) if config.bwlimit_enabled(): cmd = cmd + ' --bwlimit=%d' % config.bwlimit() - if config.is_run_nice_on_remote_enabled() or config.is_run_ionice_on_remote_enabled(): + if config.is_run_nice_on_remote_enabled() \ + or config.is_run_ionice_on_remote_enabled() \ + or config.is_run_nocache_on_remote_enabled(): cmd += ' --rsync-path="' if config.is_run_nice_on_remote_enabled(): cmd += 'nice -n 19 ' if config.is_run_ionice_on_remote_enabled(): cmd += 'ionice -c2 -n7 ' + if config.is_run_nocache_on_remote_enabled(): + cmd += 'nocache ' cmd += 'rsync"' return cmd + ' ' - -def temp_failure_retry(func, *args, **kwargs): +def temp_failure_retry(func, *args, **kwargs): while True: try: return func(*args, **kwargs) - except (os.error, IOError), ex: + except (os.error, IOError) as ex: if ex.errno == errno.EINTR: continue else: raise - def _get_md5sum_from_path(path): - '''return md5sum of path, af available system command md5sum()''' + '''return md5sum of path, af available system command md5sum()''' if check_command("md5sum"): - status,output = commands.getstatusoutput("md5sum '" + path + "'") + status,output = subprocess.getstatusoutput("md5sum '" + path + "'") if status == 0: md5sum = output.split(" ")[0] return md5sum - # md5sum unavailable or command failed; raise an exception ? a message ? use std lib ? + # md5sum unavailable or command failed; raise an exception ? a message ? use std lib ? print("warning: md5sum() fail ! used (st_size, st_mttime) instead of md5sum.") obj = os.stat(path) - unique_key = (obj.st_size, int(obj.st_mtime)) + unique_key = (obj.st_size, int(obj.st_mtime)) return unique_key - -def check_cron_pattern(str): - '''check if str look like '0,10,13,15,17,20,23' or '*/6' ''' - if str.find(' ') >= 0: + +def check_cron_pattern(s): + '''check if s look like '0,10,13,15,17,20,23' or '*/6' ''' + if s.find(' ') >= 0: return False try: - if str.startswith('*/'): - if int(str[2:]) <= 24: + if s.startswith('*/'): + if int(s[2:]) <= 24: return True else: return False - _list = str.split(',') - for s in _list: + list_ = s.split(',') + for s in list_: if int(s) <= 24: continue else: @@ -456,18 +531,10 @@ except ValueError: return False -def check_mountpoint(path): - '''return True if path is a mountpoint''' - try: - subprocess.check_call(['mountpoint', path], stdout=open(os.devnull, 'w')) - except subprocess.CalledProcessError: - return False - return True - def check_home_encrypt(): '''return True if users home is encrypted''' home = os.path.expanduser('~') - if not check_mountpoint(home): + if not os.path.ismount(home): return False if check_command('ecryptfs-verify'): try: @@ -479,50 +546,49 @@ else: return True if check_command('encfs'): - mount = subprocess.Popen(['mount'], stdout=subprocess.PIPE).communicate()[0] + proc = subprocess.Popen(['mount'], stdout=subprocess.PIPE, universal_newlines = True) + mount = proc.communicate()[0] r = re.compile('^encfs on %s type fuse' % home) for line in mount.split('\n'): if r.match(line): return True return False -def load_env(cfg): +def load_env(f): env = os.environ.copy() env_file = configfile.ConfigFile() - env_file.load(cfg.get_cron_env_file(), maxsplit = 1) + env_file.load(f, maxsplit = 1) for key in env_file.get_keys(): value = env_file.get_str_value(key) if not value: continue - if not key in env.keys(): + if not key in list(env.keys()): os.environ[key] = value del(env_file) -def save_env(cfg): +def save_env(f): """ save environ variables to file that are needed by cron to connect to keyring. This will only work if the user is logged in. """ env = os.environ.copy() env_file = configfile.ConfigFile() - #ubuntu - set_env_key(env, env_file, 'GNOME_KEYRING_CONTROL') - set_env_key(env, env_file, 'DBUS_SESSION_BUS_ADDRESS') - set_env_key(env, env_file, 'DBUS_SESSION_BUS_PID') - set_env_key(env, env_file, 'DBUS_SESSION_BUS_WINDOWID') - set_env_key(env, env_file, 'DISPLAY') - #debian - set_env_key(env, env_file, 'XAUTHORITY') - - env_file.save(cfg.get_cron_env_file()) + for i in ('GNOME_KEYRING_CONTROL', 'DBUS_SESSION_BUS_ADDRESS', \ + 'DBUS_SESSION_BUS_PID', 'DBUS_SESSION_BUS_WINDOWID', \ + 'DISPLAY', 'XAUTHORITY', 'GNOME_DESKTOP_SESSION_ID', \ + 'KDE_FULL_SESSION'): + set_env_key(env, env_file, i) + + env_file.save(f) del(env_file) def set_env_key(env, env_file, key): - if key in env.keys(): + if key in env: env_file.set_str_value(key, env[key]) def keyring_supported(): if keyring is None: + logger.debug('No keyring due to import errror.') return False backends = [] try: backends.append(keyring.backends.SecretService.Keyring) @@ -537,9 +603,15 @@ except: pass try: backends.append(keyring.backend.KDEKWallet) except: pass - if len(backends) == 0: - return False - return isinstance(keyring.get_keyring(), tuple(backends)) + try: + displayName = keyring.get_keyring().__module__ + except: + displayName = str(keyring.get_keyring()) + if backends: + logger.debug("Found appropriate keyring '{}'".format(displayName)) + return isinstance(keyring.get_keyring(), tuple(backends)) + logger.debug("No appropriate keyring found. '{}' can't be used with BackInTime".format(displayName)) + return False def get_password(*args): if not keyring is None: @@ -552,61 +624,73 @@ return False def get_mountpoint(path): - '''return (DEVICE, MOUNTPOINT) for given PATH''' - if os.path.exists(path): - cmd = ['df', '-P', path] - p = subprocess.Popen(cmd, stdout = subprocess.PIPE) - output = p.communicate()[0] - #search for: /dev/sdc1 880940 8 880932 1% /mnt/foo - c = re.compile(r'(/[^ \t]*)(?:[ \t]+[\d]+){4}%?[ \t]+(/.*)') - for line in output.split('\n'): - m = c.match(line) - if not m is None: - return (m.group(1), m.group(2)) - return (None, None) + '''return MOUNTPOINT for given PATH''' + path = os.path.realpath(os.path.abspath(path)) + while path != os.path.sep: + if os.path.ismount(path): + return path + path = os.path.abspath(os.path.join(path, os.pardir)) + return path + +def get_mount_args(path): + '''return a tuple of mount arguments from /proc/mounts''' + mp = get_mountpoint(path) + with open('/etc/mtab', 'r') as mounts: + for line in mounts: + args = line.strip('\n').split(' ') + if len(args) >= 2 and args[1] == mp: + return args + return None + +def get_device(path): + '''return DEVICE for given PATH''' + args = get_mount_args(path) + if args: + return args[0] + return None + +def get_filesystem(path): + '''return FILESYSTEM for given PATH''' + args = get_mount_args(path) + if args and len(args) >= 3: + return args[2] + return None def get_uuid(dev): '''return uuid for given block device''' if dev and os.path.exists(dev): - dev_stat = os.stat(dev) + dev = os.path.realpath(dev) for uuid in os.listdir(DISK_BY_UUID): - if dev_stat == os.stat(os.path.join(DISK_BY_UUID, uuid)): + if dev == os.path.realpath(os.path.join(DISK_BY_UUID, uuid)): return uuid + c = re.compile(b'.*?ID_FS_UUID=(\S+)') + try: + udevadm = subprocess.check_output(['udevadm', 'info', '--name=%s' % dev]) + for line in udevadm.split(): + m = c.match(line) + if m: + return m.group(1).decode('UTF-8') + except: + pass return None def get_uuid_from_path(path): - return get_uuid(get_mountpoint(path)[0]) - -def sudo_execute(cfg, cmd, msg = None, *args, **kwargs): - '''execute command with gksudo or kdesudo if user isn't root''' - if cfg.get_user() != 'root': - sudo = {'gksudo': ('-m "{msg}"', '-- {cmd}'), - 'kdesudo': ('--comment "{msg}"', '-- {cmd}'), - 'kdesu': ('', '-c "{cmd}"') } - for i in sudo: - if check_command(i): - sudo_cmd = [i,] - if not msg is None and len(sudo[i][0]): - sudo_cmd.append(sudo[i][0].replace('{msg}', msg)) - sudo_cmd.append(sudo[i][1].replace('{cmd}', cmd)) - cmd = ' '.join(sudo_cmd) - break - return _execute(cmd, *args, **kwargs) + return get_uuid(get_device(path)) def wrap_line(msg, size=950, delimiters='\t ', new_line_indicator = 'CONTINUE: '): if len(new_line_indicator) >= size - 1: new_line_indicator = '' - while len(msg): + while msg: if len(msg) <= size: yield(msg) break else: line = '' - for look in range(size-1, size/2, -1): + for look in range(size-1, size//2, -1): if msg[look] in delimiters: line, msg = msg[:look+1], new_line_indicator + msg[look+1:] break - if not len(line): + if not line: line, msg = msg[:size], new_line_indicator + msg[size:] yield(line) @@ -616,13 +700,204 @@ if check_command('sync'): return(_execute('sync') == 0) +def update_cached_fs(dir): + """changes not made through sshfs on remote files will not be recognized + immediately because of the local cache. But writing a new file into that + folder will update local cache. + """ + with tempfile.NamedTemporaryFile('w', dir = dir) as f: + f.write('foo') + +def isRoot(): + return os.geteuid() == 0 + +def usingSudo(): + return isRoot() and os.getenv('HOME', '/root') != '/root' + +re_wildcard = re.compile(r'(?:\[|\]|\?|\*)') +re_separate_asterisk = re.compile(r'(?:^\*+[^/\*]|[^/\*]\*+[^/\*]|[^/\*]\*+|\*+[^/\*]|[^/\*]\*+$)') + +def patternHasNotEncryptableWildcard(pattern): + '''return True if path has wildcards [ ] ? * + but return False for foo/*, foo/*/bar, */bar or **/bar + ''' + if not re_wildcard.search(pattern) is None: + if re_separate_asterisk.search(pattern) is None: + return False + return True + return False + +BIT_TIME_FORMAT = '%Y%m%d %H%M' +ANACRON_TIME_FORMAT = '%Y%m%d' + +def readTimeStamp(f): + '''read date string from file and try to return datetime''' + if not os.path.exists(f): + return + with open(f, 'r') as f: + s = f.read().strip('\n') + for i in (ANACRON_TIME_FORMAT, BIT_TIME_FORMAT): + try: + return datetime.strptime(s, i) + except ValueError: + pass + +def writeTimeStamp(f): + '''write current date into file''' + make_dirs(os.path.dirname(f)) + with open(f, 'w') as f: + f.write(datetime.now().strftime(BIT_TIME_FORMAT)) + +INHIBIT_LOGGING_OUT = 1 +INHIBIT_USER_SWITCHING = 2 +INHIBIT_SUSPENDING = 4 +INHIBIT_IDLE = 8 + +INHIBIT_DBUS = ( + {'service': 'org.gnome.SessionManager', + 'objectPath': '/org/gnome/SessionManager', + 'methodSet': 'Inhibit', + 'methodUnSet': 'Uninhibit', + 'interface': 'org.gnome.SessionManager', + 'arguments': (0, 1, 2, 3) + }, + {'service': 'org.mate.SessionManager', + 'objectPath': '/org/mate/SessionManager', + 'methodSet': 'Inhibit', + 'methodUnSet': 'Uninhibit', + 'interface': 'org.mate.SessionManager', + 'arguments': (0, 1, 2, 3) + }, + {'service': 'org.freedesktop.PowerManagement', + 'objectPath': '/org/freedesktop/PowerManagement/Inhibit', + 'methodSet': 'Inhibit', + 'methodUnSet': 'UnInhibit', + 'interface': 'org.freedesktop.PowerManagement.Inhibit', + 'arguments': (0, 2) + } ) + +def inhibitSuspend( app_id = sys.argv[0], + toplevel_xid = None, + reason = 'take snapshot', + flags = INHIBIT_SUSPENDING | INHIBIT_IDLE): + '''Prevent machine to go to suspend or hibernate. + Returns the inhibit cookie which is used to end the inhibitor. + ''' + if not app_id: + app_id = 'backintime' + if not toplevel_xid: + toplevel_xid = 0 + + for dbus_props in INHIBIT_DBUS: + try: + #connect directly to the socket instead of dbus.SessionBus because + #the dbus.SessionBus was initiated before we loaded the environ + #variables and might not work + if 'DBUS_SESSION_BUS_ADDRESS' in os.environ: + bus = dbus.bus.BusConnection(os.environ['DBUS_SESSION_BUS_ADDRESS']) + else: + bus = dbus.SessionBus() + interface = bus.get_object(dbus_props['service'], dbus_props['objectPath']) + proxy = interface.get_dbus_method(dbus_props['methodSet'], dbus_props['interface']) + cookie = proxy(*[ (app_id, dbus.UInt32(toplevel_xid), reason, dbus.UInt32(flags))[i] for i in dbus_props['arguments'] ]) + logger.info('Inhibit Suspend started. Reason: %s' % reason) + return (cookie, bus, dbus_props) + except dbus.exceptions.DBusException: + pass + if isRoot(): + logger.debug("Inhibit Suspend failed because BIT was started as root.") + return + logger.warning('Inhibit Suspend failed.') + +def unInhibitSuspend(cookie, bus, dbus_props): + '''Release inhibit. + ''' + assert isinstance(cookie, int), 'cookie is not int type: %s' % cookie + assert isinstance(bus, dbus.bus.BusConnection), 'bus is not dbus.bus.BusConnection type: %s' % bus + assert isinstance(dbus_props, dict), 'dbus_props is not dict type: %s' % dbus_props + try: + interface = bus.get_object(dbus_props['service'], dbus_props['objectPath']) + proxy = interface.get_dbus_method(dbus_props['methodUnSet'], dbus_props['interface']) + proxy(cookie) + logger.info('Release inhibit Suspend') + return None + except dbus.exceptions.DBusException: + logger.warning('Release inhibit Suspend failed.') + return (cookie, bus, dbus_props) + +def getSshKeyFingerprint(path): + '''return the hex fingerprint of a given ssh key + ''' + if not os.path.exists(path): + return + cmd = ['ssh-keygen', '-l', '-f', path] + proc = subprocess.Popen(cmd, stdout = subprocess.PIPE, stderr = open(os.devnull, 'w')) + output = proc.communicate()[0] + m = re.match(b'\d+\s+([a-zA-Z0-9:]+).*', output) + if m: + return m.group(1).decode('UTF-8') + +def readCrontab(): + '''read a list of lines from users crontab + ''' + cmd = ['crontab', '-l'] + if not check_command(cmd[0]): + logger.debug('crontab not found.') + return [] + else: + proc = subprocess.Popen(cmd, + stdout = subprocess.PIPE, + stderr = subprocess.PIPE, + universal_newlines = True) + out, err = proc.communicate() + if proc.returncode or err: + logger.error('Failed to get crontab lines: %s, %s' + %(proc.returncode, err)) + return [] + else: + crontab = [x.strip() for x in out.strip('\n').split('\n')] + logger.debug('Read %s lines from users crontab' + %len(crontab)) + return crontab + +def writeCrontab(lines): + '''write a list of lines to users crontab + ''' + assert isinstance(lines, (list, tuple)), 'lines is not list or tuple type: %s' % lines + with tempfile.NamedTemporaryFile(mode = 'wt') as f: + f.write('\n'.join(lines)) + f.write('\n') + f.flush() + cmd = ['crontab', f.name] + proc = subprocess.Popen(cmd, + stdout = subprocess.DEVNULL, + stderr = subprocess.PIPE, + universal_newlines = True) + out, err = proc.communicate() + if proc.returncode or err: + logger.error('Failed to write lines to crontab: %s, %s' + %(proc.returncode, err)) + return False + else: + logger.debug('Wrote %s lines to users crontab' + %len(lines)) + return True + +def splitCommands(cmds, head = '', tail = '', maxLength = 0, additionalChars = 0): + while cmds: + s = head + while cmds and ((len(s + cmds[0] + tail) + additionalChars <= maxLength) or not maxLength): + s += cmds.pop(0) + s += tail + yield s + class UniquenessSet: '''a class to check for uniqueness of snapshots of the same [item]''' - def __init__(self, dc = False, follow_symlink = False, list_equal_to = False): + def __init__(self, dc = False, follow_symlink = False, list_equal_to = False): self.deep_check = dc self.follow_sym = follow_symlink self._uniq_dict = {} # if not self._uniq_dict[size] -> size already checked with md5sum - self._size_inode = set() # if (size,inode) in self._size_inode -> path is a hlink + self._size_inode = set() # if (size,inode) in self._size_inode -> path is a hlink self.list_equal_to = list_equal_to if list_equal_to: st = os.stat(list_equal_to) @@ -631,57 +906,55 @@ else: self.reference = (st.st_size, int(st.st_mtime)) - def check_for(self, input_path, verb = False): + def check_for(self, input_path): # follow symlinks ? path = input_path if self.follow_sym and os.path.islink(input_path): path = os.readlink(input_path) if self.list_equal_to: - return self.check_equal(path, verb) + return self.check_equal(path) else: - return self.check_unique(path, verb) + return self.check_unique(path) - def check_unique(self, path, verb): + def check_unique(self, path): '''store a unique key for path, return True if path is unique''' # check if self.deep_check: dum = os.stat(path) size,inode = dum.st_size, dum.st_ino # is it a hlink ? - if (size, inode) in self._size_inode: - if verb: print("[deep test] : skip, it's a duplicate (size, inode)") - return False + if (size, inode) in self._size_inode: + logger.debug("[deep test] : skip, it's a duplicate (size, inode)", self) + return False self._size_inode.add( (size,inode) ) - if size not in self._uniq_dict.keys(): + if size not in list(self._uniq_dict.keys()): # first item of that size unique_key = size - if verb: print("[deep test] : store current size ?") - else: + logger.debug("[deep test] : store current size ?", self) + else: prev = self._uniq_dict[size] if prev: # store md5sum instead of previously stored size - md5sum_prev = _get_md5sum_from_path(prev) + md5sum_prev = _get_md5sum_from_path(prev) self._uniq_dict[size] = None - self._uniq_dict[md5sum_prev] = prev - if verb: - print("[deep test] : size duplicate, remove the size, store prev md5sum") - unique_key = _get_md5sum_from_path(path) - if verb: print("[deep test] : store current md5sum ?") + self._uniq_dict[md5sum_prev] = prev + logger.debug("[deep test] : size duplicate, remove the size, store prev md5sum", self) + unique_key = _get_md5sum_from_path(path) + logger.debug("[deep test] : store current md5sum ?", self) else: # store a tuple of (size, modification time) obj = os.stat(path) unique_key = (obj.st_size, int(obj.st_mtime)) - # print "..", path, unique_key # store if not already present, then return True - if unique_key not in self._uniq_dict.keys(): - if verb: print(" >> ok, store !") + if unique_key not in list(self._uniq_dict.keys()): + logger.debug(" >> ok, store !", self) self._uniq_dict[unique_key] = path - return True - if verb: print(" >> skip (it's a duplicate)") + return True + logger.debug(" >> skip (it's a duplicate)", self) return False - def check_equal(self, path, verb): + def check_equal(self, path): '''return True if path and reference are equal''' st = os.stat(path) if self.deep_check: @@ -691,16 +964,13 @@ else: return self.reference == (st.st_size, int(st.st_mtime)) -class Timeout(Exception): - pass - class Alarm(object): """ Timeout for FIFO. This does not work with threading. """ def __init__(self, callback = None): self.callback = callback - + def start(self, timeout): """ start timer @@ -710,7 +980,7 @@ signal.alarm(timeout) except ValueError: pass - + def stop(self): """ stop timer before it come to an end @@ -719,7 +989,7 @@ signal.alarm(0) except: pass - + def handler(self, signum, frame): """ timeout occur. @@ -807,17 +1077,26 @@ 'interface': 'org.enlightenment.Remote.Core', 'arguments': () }, - 'z_freed': {'bus': 'systembus', - 'service': 'org.freedesktop.ConsoleKit', - 'objectPath': '/org/freedesktop/ConsoleKit/Manager', - 'method': 'Stop', - 'interface': 'org.freedesktop.ConsoleKit.Manager', + 'e19': {'bus': 'sessionbus', + 'service': 'org.enlightenment.wm.service', + 'objectPath': '/org/enlightenment/wm/RemoteObject', + 'method': 'Shutdown', + #methods Shutdown + # Restart + 'interface': 'org.enlightenment.wm.Core', 'arguments': () + }, + 'z_freed': {'bus': 'systembus', + 'service': 'org.freedesktop.login1', + 'objectPath': '/org/freedesktop/login1', + 'method': 'PowerOff', + 'interface': 'org.freedesktop.login1.Manager', + 'arguments': (True, ) } } def __init__(self): - self.is_root = os.geteuid() == 0 + self.is_root = isRoot() if self.is_root: self.proxy, self.args = None, None else: @@ -830,11 +1109,14 @@ return a callable dbus proxy and those arguments. """ try: - sessionbus = dbus.SessionBus() + if 'DBUS_SESSION_BUS_ADDRESS' in os.environ: + sessionbus = dbus.bus.BusConnection(os.environ['DBUS_SESSION_BUS_ADDRESS']) + else: + sessionbus = dbus.SessionBus() systembus = dbus.SystemBus() except: return( (None, None) ) - des = self.DBUS_SHUTDOWN.keys() + des = list(self.DBUS_SHUTDOWN.keys()) des.sort() for de in des: if de == 'gnome' and self.unity_7(): @@ -888,14 +1170,111 @@ """ if not check_command('unity'): return False + unity_version = read_command_output('unity --version') + m = re.match(r'unity ([\d\.]+)', unity_version) + return m and StrictVersion(m.group(1)) >= StrictVersion('7.0') and process_exists('unity-panel-service') + +class SetupUdev(object): + """Setup Udev rules for starting BackInTime when a drive get connected. + This is done by serviceHelper.py script (included in backintime-qt4) + running as root though DBus. + """ + CONNECTION = 'net.launchpad.backintime.serviceHelper' + OBJECT = '/UdevRules' + INTERFACE = 'net.launchpad.backintime.serviceHelper.UdevRules' + MEMBERS = ('addRule', 'save', 'delete') + def __init__(self): + if dbus is None: + self.isReady = False + return try: - unity_version = read_command_output('unity --version') - unity_version = float(re.findall(r'\s\d+\.\d+', unity_version)[0] ) - if unity_version > 6.999 and process_exists('unity-panel-service'): - return True - except: - pass - return False + bus = dbus.SystemBus() + conn = bus.get_object(SetupUdev.CONNECTION, SetupUdev.OBJECT) + self.iface = dbus.Interface(conn, SetupUdev.INTERFACE) + except dbus.exceptions.DBusException as e: + if e._dbus_error_name in ('org.freedesktop.DBus.Error.NameHasNoOwner', + 'org.freedesktop.DBus.Error.ServiceUnknown', + 'org.freedesktop.DBus.Error.FileNotFound'): + conn = None + else: + raise + self.isReady = bool(conn) -if keyring is None and keyring_warn: + def addRule(self, cmd, uuid): + """prepair rules in serviceHelper.py + """ + if not self.isReady: + return + try: + return self.iface.addRule(cmd, uuid) + except dbus.exceptions.DBusException as e: + if e._dbus_error_name == 'net.launchpad.backintime.InvalidChar': + raise InvalidChar(str(e)) + else: + raise + + def save(self): + """save rules with serviceHelper.py after authentication + If no rules where added before this will delete current rule. + """ + if not self.isReady: + return + try: + return self.iface.save() + except dbus.exceptions.DBusException as e: + if e._dbus_error_name == 'com.ubuntu.DeviceDriver.PermissionDeniedByPolicy': + raise PermissionDeniedByPolicy(str(e)) + else: + raise + + def clean(self): + """clean up remote cache + """ + if not self.isReady: + return + self.iface.clean() + +class PathHistory(object): + def __init__(self, path): + self.history = [path,] + self.index = 0 + + def append(self, path): + #append path after the current index + self.history = self.history[:self.index + 1] + [path,] + self.index = len(self.history) - 1 + + def previous(self): + if self.index == 0: + return self.history[0] + try: + path = self.history[self.index - 1] + except IndexError: + return self.history[self.index] + self.index -= 1 + return path + + def next(self): + if self.index == len(self.history) - 1: + return self.history[-1] + try: + path = self.history[self.index + 1] + except IndexError: + return self.history[self.index] + self.index += 1 + return path + + def reset(self, path): + self.history = [path,] + self.index = 0 + +def __log_keyring_warning(): + from time import sleep + sleep(0.1) logger.warning('import keyring failed') + +if keyring is None and keyring_warn: + #delay warning to give logger some time to import + import _thread + _thread.start_new_thread(__log_keyring_warning, ()) + # logger.warning('import keyring failed') diff -Nru backintime-1.0.36/debian/backintime-common.install backintime-1.1.12/debian/backintime-common.install --- backintime-1.0.36/debian/backintime-common.install 2014-10-27 15:52:29.000000000 +0000 +++ backintime-1.1.12/debian/backintime-common.install 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -notify/plugins/* usr/share/backintime/plugins diff -Nru backintime-1.0.36/debian/backintime-common.lintian-overrides backintime-1.1.12/debian/backintime-common.lintian-overrides --- backintime-1.0.36/debian/backintime-common.lintian-overrides 1970-01-01 00:00:00.000000000 +0000 +++ backintime-1.1.12/debian/backintime-common.lintian-overrides 2016-02-07 12:16:50.000000000 +0000 @@ -0,0 +1,2 @@ +# Necessary for the license to show up in Help->About +extra-license-file usr/share/doc/backintime-common/LICENSE diff -Nru backintime-1.0.36/debian/backintime-gnome.links backintime-1.1.12/debian/backintime-gnome.links --- backintime-1.0.36/debian/backintime-gnome.links 2014-10-27 15:52:29.000000000 +0000 +++ backintime-1.1.12/debian/backintime-gnome.links 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -/usr/share/man/man1/backintime.1.gz /usr/share/man/man1/backintime-gnome.1.gz diff -Nru backintime-1.0.36/debian/backintime-kde.links backintime-1.1.12/debian/backintime-kde.links --- backintime-1.0.36/debian/backintime-kde.links 2014-10-27 15:52:29.000000000 +0000 +++ backintime-1.1.12/debian/backintime-kde.links 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -/usr/share/man/man1/backintime.1.gz /usr/share/man/man1/backintime-kde4.1.gz diff -Nru backintime-1.0.36/debian/backintime-qt4.links backintime-1.1.12/debian/backintime-qt4.links --- backintime-1.0.36/debian/backintime-qt4.links 1970-01-01 00:00:00.000000000 +0000 +++ backintime-1.1.12/debian/backintime-qt4.links 2016-02-07 12:16:50.000000000 +0000 @@ -0,0 +1 @@ +/usr/share/man/man1/backintime.1.gz /usr/share/man/man1/backintime-qt.1.gz diff -Nru backintime-1.0.36/debian/backintime-qt4.lintian-overrides backintime-1.1.12/debian/backintime-qt4.lintian-overrides --- backintime-1.0.36/debian/backintime-qt4.lintian-overrides 1970-01-01 00:00:00.000000000 +0000 +++ backintime-1.1.12/debian/backintime-qt4.lintian-overrides 2016-02-07 12:16:50.000000000 +0000 @@ -0,0 +1,2 @@ +# Satisfied by dependency +desktop-command-not-in-package usr/share/applications/backintime-qt4-root.desktop pkexec diff -Nru backintime-1.0.36/debian/changelog backintime-1.1.12/debian/changelog --- backintime-1.0.36/debian/changelog 2014-10-27 15:52:29.000000000 +0000 +++ backintime-1.1.12/debian/changelog 2016-02-07 12:16:50.000000000 +0000 @@ -1,3 +1,35 @@ +backintime (1.1.12-1) unstable; urgency=medium + + [ Germar Reitze ] + * New upstream release + Closes: #802890, #787959, #783386, #789258, #620244, #659965 + LP: #1391589, #1391767, #1117709, #1172114, #1317795, #1441672 + * debian/control: add virtual cron-daemon depend (Closes: #776856) + * debian/control: depend on openssh-client (won't start without ssh-agent) + * debian/control: new upstream project Homepage + * debian/watch: new upstream hosting + + [ Jonathan Wiltshire ] + * Fix transitional package breaks/replaces (Closes: #806545) + * Remove patches/timestamps-in-gzip.patch, integrated upstream + + -- Jonathan Wiltshire Sun, 07 Feb 2016 12:16:34 +0000 + +backintime (1.1.6-1) unstable; urgency=medium + + * New upstream release: remove kde and gnome front ends and replace with qt4 + (Closes: #786520, #775430, #735122, #790574, #780870) + * Debhelper compat level 9 + * Install upstream changelog and other files so they show up in help/about + * Add lintian override for backintime-qt4:desktop-command-not-in-package + * Add lintian override for backintime-common:extra-license-file + * debian/control: remove X-Python3-Version + * Update copyright + * timestamps-in-gzip.patch: Keep timestamps out of gzip files for + reproducibility + + -- Jonathan Wiltshire Sun, 23 Aug 2015 22:19:17 +0100 + backintime (1.0.36-1) unstable; urgency=medium * Acknowledge NMU; thanks Julian diff -Nru backintime-1.0.36/debian/compat backintime-1.1.12/debian/compat --- backintime-1.0.36/debian/compat 2014-10-27 15:52:29.000000000 +0000 +++ backintime-1.1.12/debian/compat 2016-02-07 12:16:50.000000000 +0000 @@ -1 +1 @@ -7 +9 diff -Nru backintime-1.0.36/debian/control backintime-1.1.12/debian/control --- backintime-1.0.36/debian/control 2014-10-27 15:52:29.000000000 +0000 +++ backintime-1.1.12/debian/control 2016-02-07 12:16:50.000000000 +0000 @@ -2,58 +2,59 @@ Section: utils Priority: extra Maintainer: Jonathan Wiltshire -Build-Depends: debhelper (>= 7.2.8), python (>= 2.6.6-3~) +Build-Depends: debhelper (>= 9), python3 Standards-Version: 3.9.6 -Homepage: http://backintime.le-web.org/ +Homepage: https://github.com/bit-team/backintime Vcs-Browser: http://robin.powdarrmonkey.net/cgi-bin/gitweb.cgi?p=backintime Vcs-Git: git://robin.powdarrmonkey.net/git/backintime -X-Python-Version: >= 2.5 Package: backintime-common Architecture: all -Depends: rsync, cron, ${python:Depends}, ${misc:Depends} -Suggests: sshfs, encfs -Description: simple backup/snapshot system - Back In Time is a framework for rsync, diff and cron for the purpose of +Depends: rsync, cron | cron-daemon, python3-keyring, python3-dbus, + openssh-client, ${python3:Depends}, ${misc:Depends} +Recommends: backintime-qt4 +Suggests: sshfs, encfs, powermgmt-base +Description: simple backup/snapshot system (common files) + Back In Time is a framework for rsync and cron for the purpose of taking snapshots and backups of specified folders. It minimizes disk space use by taking a snapshot only if the directory has been changed, and hard links for unmodified files if it has. The user can schedule regular backups using cron. . - This is the common framework for Back In Time. You need to choose a suitable - front-end for your desktop environment, like backintime-gnome or - backintime-kde. + This is the common framework for Back In Time. For a graphical interface, + install backintime-qt4. . To back up to SSH or encrypted filesystems, install the additional sshfs or encfs packages. -Package: backintime-gnome +Package: backintime-qt4 Architecture: all -Depends: backintime-common (>= ${source:Version}), python-gnome2 (>= 2.22), python-notify, python-gtk2, python-glade2, menu, ${python:Depends}, ${misc:Depends} -Recommends: nautilus-actions, meld, python-gnomekeyring -Description: GNOME front-end for backintime - Back In Time is a framework for rsync, diff and cron for the purpose of +Breaks: backintime-kde (<< 1.1.6-1~), backintime-gnome (<< 1.1.6-1~) +Replaces: backintime-kde (<< 1.1.6-1~), backintime-gnome (<< 1.1.6-1~), backintime-kde4 +Conflicts: backintime-kde4 +Depends: x11-utils, libnotify-bin, python3-pyqt4, python3-dbus.mainloop.qt, policykit-1, + backintime-common (= ${source:Version}), ${python3:Depends}, ${misc:Depends} +Recommends: python3-secretstorage +Suggests: meld | kompare +Description: simple backup/snapshot system (graphical interface) + Back In Time is a framework for rsync and cron for the purpose of taking snapshots and backups of specified folders. It minimizes disk space use by taking a snapshot only if the directory has been changed, and hard links for unmodified files if it has. The user can schedule regular backups using cron. . - This is the GNOME front-end for the backintime-common package. If you also - install the package nautilus-actions, it can be integrated with the Nautilus - file manager to provide context-menu options. + This is the graphical interface for Back In Time. + +Package: backintime-gnome +Architecture: all +Section: oldlibs +Depends: backintime-qt4, ${misc:Depends} +Description: GNOME front-end for backintime (transitional package) + This is a transitional package and can safely be removed. Package: backintime-kde Architecture: all -Provides: backintime-kde4 -Replaces: backintime-kde4 (<< 0.9.26-2) -Conflicts: backintime-kde4 -Depends: backintime-common (>= ${source:Version}), python-kde4, menu, ${python:Depends}, ${misc:Depends} -Suggests: kompare -Description: KDE front-end for backintime - Back In Time is a framework for rsync, diff and cron for the purpose of - taking snapshots and backups of specified folders. It minimizes disk space use - by taking a snapshot only if the directory has been changed, and hard links - for unmodified files if it has. The user can schedule regular backups using - cron. - . - This is the KDE front-end for the backintime-common package. +Section: oldlibs +Depends: backintime-qt4, ${misc:Depends} +Description: KDE front-end for backintime (transitional package) + This is a transitional package and can safely be removed. diff -Nru backintime-1.0.36/debian/copyright backintime-1.1.12/debian/copyright --- backintime-1.0.36/debian/copyright 2014-10-27 15:52:29.000000000 +0000 +++ backintime-1.1.12/debian/copyright 2016-02-07 12:16:50.000000000 +0000 @@ -1,19 +1,17 @@ -Format-Specification: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: Back In Time -Upstream-Maintainer: Oprea Dan -Upstream-Source: http://backintime.le-web.org/ Files: * -Copyright: Copyright (C) 2008 - 2013 Oprea Dan , Bart de Koning, Richard Bailey, Germar Reitze +Copyright: Copyright (C) 2008 - 2016 Oprea Dan , Bart de Koning, Richard Bailey, Germar Reitze License: GPL-2+ -File: common/po/*.po +Files: common/po/*.po Copyright: Copyright (C) 2008, 2009 Oprea Dan - 2008, 2009, 2010, 2011 Rosetta Contributors and Canonical Ltd + 2008 - 2015 Rosetta Contributors and Canonical Ltd License: GPL-2+ Files: debian/* -Copyright: Copyright (C) 2009 Jonathan Wiltshire +Copyright: Copyright (C) 2009 - 2015 Jonathan Wiltshire License: GPL-2+ License: GPL-2+ @@ -21,11 +19,11 @@ it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. - + . This package is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + . On Debian systems, the full text of the GPLv2 can be found at /usr/share/common-licenses/GPL-2 diff -Nru backintime-1.0.36/debian/patches/desktop-su.patch backintime-1.1.12/debian/patches/desktop-su.patch --- backintime-1.0.36/debian/patches/desktop-su.patch 2014-10-27 15:52:29.000000000 +0000 +++ backintime-1.1.12/debian/patches/desktop-su.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,37 +0,0 @@ -Description: Make the root desktop entries use a sane way of getting - root, instead of assuming about the presence of dependencies -Author: Jonathan Wiltshire -Forwarded: yes -Last-Update: 2010-09-14 - ---- a/gnome/backintime-gnome-root.desktop -+++ b/gnome/backintime-gnome-root.desktop -@@ -1,6 +1,6 @@ - [Desktop Entry] - Name=Back In Time (root) --Exec=gksu backintime-gnome -+Exec=su-to-root -X -c backintime-gnome - Icon=gtk-save - Terminal=false - X-MultipleArgs=false ---- a/kde4/backintime-kde4-root.desktop -+++ b/kde4/backintime-kde4-root.desktop -@@ -1,6 +1,6 @@ - [Desktop Entry] - Name=Back In Time (root) --Exec=kdesudo -c backintime-kde4 -+Exec=su-to-root -X -c backintime-kde4 - Icon=document-save - Terminal=false - X-MultipleArgs=false ---- a/kde4/configure -+++ b/kde4/configure -@@ -2,7 +2,7 @@ - - #set default options - CHECK="--check" --SUDO="--kdesudo" -+SUDO="--su-to-root" - PYTHON="--python" - - USR_BIN_FILES="backintime-kde4" diff -Nru backintime-1.0.36/debian/patches/install-docs-move.patch backintime-1.1.12/debian/patches/install-docs-move.patch --- backintime-1.0.36/debian/patches/install-docs-move.patch 2014-10-27 15:52:29.000000000 +0000 +++ backintime-1.1.12/debian/patches/install-docs-move.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,40 +0,0 @@ -Description: move common documentation to correct location - Upstream's makefiles install the common documentation to - /usr/share/doc/backintime, but there is no such Debian package shipped. - The correct location should be /usr/share/doc/backintime-common. -Author: Jonathan Wiltshire -Last-Updated: 2014-10-26 - ---- a/common/Makefile.template -+++ b/common/Makefile.template -@@ -22,20 +22,20 @@ - install --mode=644 debian_specific/copyright $(DEST)/share/doc/backintime-common - - #install doc file(s) -- install -d $(DEST)/share/doc/backintime -- install --mode=644 ../AUTHORS $(DEST)/share/doc/backintime -- install --mode=644 ../LICENSE $(DEST)/share/doc/backintime -- install --mode=644 ../README $(DEST)/share/doc/backintime -- install --mode=644 ../TRANSLATIONS $(DEST)/share/doc/backintime -- install --mode=644 ../VERSION $(DEST)/share/doc/backintime -- install --mode=644 ../CHANGES $(DEST)/share/doc/backintime -+ install -d $(DEST)/share/doc/backintime-common -+ install --mode=644 ../AUTHORS $(DEST)/share/doc/backintime-common -+ # install --mode=644 ../LICENSE $(DEST)/share/doc/backintime-common -+ install --mode=644 ../README $(DEST)/share/doc/backintime-common -+ install --mode=644 ../TRANSLATIONS $(DEST)/share/doc/backintime-common -+ install --mode=644 ../VERSION $(DEST)/share/doc/backintime-common -+ # install --mode=644 ../CHANGES $(DEST)/share/doc/backintime-common - - #install config-example files(s) - gzip --best -c config-example-local > config-example-local.gz - gzip --best -c config-example-ssh > config-example-ssh.gz -- install -d $(DEST)/share/doc/backintime/examples -- install --mode=644 config-example-local.gz $(DEST)/share/doc/backintime/examples -- install --mode=644 config-example-ssh.gz $(DEST)/share/doc/backintime/examples -+ install -d $(DEST)/share/doc/backintime-common/examples -+ install --mode=644 config-example-local.gz $(DEST)/share/doc/backintime-common/examples -+ install --mode=644 config-example-ssh.gz $(DEST)/share/doc/backintime-common/examples - - #install man file(s) - for i in $$(ls -1 man/C/); do case $$i in *.gz|*~) continue;; *) gzip --best -c man/C/$$i > man/C/$${i}.gz;; esac; done diff -Nru backintime-1.0.36/debian/patches/series backintime-1.1.12/debian/patches/series --- backintime-1.0.36/debian/patches/series 2014-10-27 15:52:29.000000000 +0000 +++ backintime-1.1.12/debian/patches/series 2016-02-07 12:16:50.000000000 +0000 @@ -1,2 +0,0 @@ -desktop-su.patch -install-docs-move.patch diff -Nru backintime-1.0.36/debian/rules backintime-1.1.12/debian/rules --- backintime-1.0.36/debian/rules 2014-10-27 15:52:29.000000000 +0000 +++ backintime-1.1.12/debian/rules 2016-02-07 12:16:50.000000000 +0000 @@ -9,27 +9,34 @@ find $(CURDIR) -name "*\.py[co]" -delete # these get regenerated rm -f */man/C/*.1.gz - rm -f common/Makefile gnome/Makefile kde4/Makefile + rm -f common/Makefile qt4/Makefile rm -f common/config-example-*.gz override_dh_auto_configure: cd common && ./configure - cd gnome && ./configure --no-check - cd kde4 && ./configure --no-check + cd qt4 && ./configure + +override_dh_auto_build: + cd common && $(MAKE) build + cd qt4 && $(MAKE) build override_dh_auto_install: cd common && DESTDIR=../debian/backintime-common $(MAKE) install - rm -rf $(CURDIR)/debian/backintime-common/usr/share/doc/backintime-common + #rm -rf $(CURDIR)/debian/backintime-common/usr/share/doc/backintime-common rm -f $(CURDIR)/debian/backintime-common/usr/share/doc/backintime/LICENSE + rm -f $(CURDIR)/debian/backintime-common/usr/share/doc/backintime-common/CHANGES + + cd qt4 && DESTDIR=../debian/backintime-qt4 $(MAKE) install + rm -rf $(CURDIR)/debian/backintime-qt4/usr/share/doc/backintime-qt4 - cd gnome && DESTDIR=../debian/backintime-gnome $(MAKE) install - rm -rf $(CURDIR)/debian/backintime-gnome/usr/share/doc/backintime-gnome +override_dh_python3: + dh_python3 /usr/share/backintime/ - cd kde4 && DESTDIR=../debian/backintime-kde $(MAKE) install - rm -rf $(CURDIR)/debian/backintime-kde/usr/share/doc/backintime-kde4 +override_dh_installchangelogs: + dh_installchangelogs CHANGES -override_dh_python2: - dh_python2 /usr/share/backintime/ +override_dh_compress: + dh_compress -XLICENSE %: - dh --with python2 $@ + dh $@ --with python3 diff -Nru backintime-1.0.36/debian/watch backintime-1.1.12/debian/watch --- backintime-1.0.36/debian/watch 2014-10-27 15:52:29.000000000 +0000 +++ backintime-1.1.12/debian/watch 2016-02-07 12:16:50.000000000 +0000 @@ -1,5 +1,4 @@ # See uscan(1) for format version=3 -opts=uversionmangle=s/(alpha|beta|rc)/~$1/ \ -http://backintime.le-web.org/download/backintime/backintime-([.0-9]+)\.tar\.gz +https://github.com/bit-team/backintime/releases .*/v(\d\S*)/backintime-\1\.tar\.(?:gz|bz2|xz) diff -Nru backintime-1.0.36/gnome/app.py backintime-1.1.12/gnome/app.py --- backintime-1.0.36/gnome/app.py 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/gnome/app.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,1301 +0,0 @@ -# Back In Time -# Copyright (C) 2008-2009 Oprea Dan, Bart de Koning, Richard Bailey -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - - -import os -import os.path -import stat -import sys - -if len( os.getenv( 'DISPLAY', '' ) ) == 0: - os.putenv( 'DISPLAY', ':0.0' ) - -import pygtk -pygtk.require("2.0") -import gtk -import pynotify -import threading -import gobject -import gnome -import gnomevfs -import datetime -import gettext -import time - -sys.path = [os.path.join( os.path.dirname( os.path.abspath( os.path.dirname( __file__ ) ) ), 'common' )] + sys.path - -import backintime -import config -import logger -import snapshots -import guiapplicationinstance -import tools -import mount - -import settingsdialog -import logviewdialog -import snapshotsdialog -import messagebox -import fileicons -import gnometools - - -_=gettext.gettext - - -class AboutDialog(gtk.AboutDialog): - - def __init__( self, config, parent ): - - gtk.AboutDialog.__init__( self ) - - self.connect( 'close', self.on_close ) - self.connect( 'response', self.on_close ) - - self.set_transient_for( parent ) - - self.set_name( config.APP_NAME ) - self.set_version( config.VERSION ) - self.set_copyright( config.COPYRIGHT ) - self.set_website( 'http://backintime.le-web.org' ) - self.set_website_label( 'http://backintime.le-web.org' ) - self.set_license( config.get_license() ) - authors = config.get_authors() - if not authors is None: - self.set_authors( authors.split( '\n' ) ) - - #extra_translations = _('about-translators').strip() - #if extra_translations is None: - # extra_translations = '' - #elif extra_translations == 'about-translators': - # extra_translations = '' - # - #self.set_translator_credits( config.get_translations() + extra_translations ) - self.set_translator_credits( config.get_translations() ) - - def on_close( self, *params ): - self.destroy() - - -class MainWindow(object): - - def __init__( self, config, app_instance ): - - self.config = config - self.app_instance = app_instance - self.snapshots = snapshots.Snapshots( config ) - self.special_background_color = 'lightblue' - - self.folder_path = None - self.snapshot_id = '' - - self.last_take_snapshot_message = None - - self.use_gloobus_preview = tools.check_command( 'gloobus-preview' ) - - builder = gtk.Builder() - self.builder = builder - self.builder.set_translation_domain('backintime') - - glade_file = os.path.join(self.config.get_app_path(), 'gnome', 'mainwindow.glade') - - builder.add_from_file(glade_file) - - signals = { - 'on_MainWindow_destroy' : gtk.main_quit, - 'on_MainWindow_delete_event' : self.on_close, - 'on_MainWindow_key_release_event': self.on_key_release_event, - 'on_btn_exit_clicked' : self.on_close, - 'on_btn_settings_clicked' : self.on_btn_settings_clicked, - 'on_btn_backup_clicked' : self.on_btn_backup_clicked, - 'on_btn_update_snapshots_clicked' : self.on_btn_update_snapshots_clicked, - 'on_btn_snapshot_name_clicked' : self.on_btn_snapshot_name_clicked, - 'on_btn_remove_snapshot_clicked' : self.on_btn_remove_snapshot_clicked, - 'on_btn_view_snapshot_log_clicked' : self.on_btn_view_snapshot_log_clicked, - 'on_btn_view_last_log_clicked' : self.on_btn_view_last_log_clicked, - 'on_btn_restore_clicked' : self.on_restore_this, - 'on_btn_snapshots_clicked' : self.on_btn_snapshots_clicked, - 'on_btn_hidden_files_toggled' : self.on_btn_hidden_files_toggled, - 'on_list_places_cursor_changed' : self.on_list_places_cursor_changed, - 'on_list_time_line_cursor_changed' : self.on_list_time_line_cursor_changed, - 'on_btn_folder_up_clicked' : self.on_btn_fodler_up_clicked, - 'on_list_folder_view_row_activated' : self.on_list_folder_view_row_activated, - 'on_list_folder_view_popup_menu' : self.on_list_folder_view_popup_menu, - 'on_list_folder_view_button_press_event': self.on_list_folder_view_button_press_event, - 'on_list_folder_view_drag_data_get': self.on_list_folder_view_drag_data_get, - 'on_list_folder_view_key_press_event' : self.on_list_folder_view_key_press_event, - 'on_combo_profiles_changed': self.on_combo_profiles_changed, - 'on_btn_help_clicked': self.on_help, - 'on_btn_shutdown_toggled' : self.on_btn_shutdown_toggled - } - - builder.connect_signals(signals) - - self.window = self.builder.get_object( 'MainWindow' ) - self.window.set_title( self.config.APP_NAME ) - - #icons - self.icon_names = fileicons.GnomeFileIcons() - - #fix a glade bug - self.builder.get_object( 'btn_current_path' ).set_expand( True ) - #self.builder.get_object( 'tb_sep_item' ).set_expand( True ) - self.builder.get_object( 'mtb_separator1' ).set_expand( True ) - - #profiles - self.disable_combo_changed = True - self.first_update_all = True - - self.store_profiles = gtk.ListStore( str, str ) - - self.combo_profiles = self.builder.get_object( 'combo_profiles' ) - - text_renderer = gtk.CellRendererText() - self.combo_profiles.pack_start( text_renderer, True ) - self.combo_profiles.add_attribute( text_renderer, 'text', 0 ) - - self.combo_profiles.set_model( self.store_profiles ) - - self.disable_combo_changed = False - - #btn shutdown - self.btn_shutdown = self.builder.get_object('btn_shutdown') - self.shutdown = tools.ShutDown() - self.btn_shutdown.set_sensitive(self.shutdown.can_shutdown()) - - #lbl snapshot - self.lbl_snapshot = self.builder.get_object( 'lbl_snapshot' ) - - #status bar - self.status_bar = self.builder.get_object( 'status_bar' ) - self.status_bar.push( 0, _('Done') ) - - #help menu - self.help_menu = gtk.Menu() - self.help_menu.append(gnometools.new_menu_item(gtk.STOCK_HELP, _('Help'), self.on_help)) - self.help_menu.append(gtk.SeparatorMenuItem()) - self.help_menu.append(gnometools.new_menu_item(gtk.STOCK_HOME, _('Website'), self.on_website)) - self.help_menu.append(gnometools.new_menu_item(gtk.STOCK_DIALOG_QUESTION, _('FAQ'), self.on_faq)) - self.help_menu.append(gnometools.new_menu_item(gtk.STOCK_DIALOG_QUESTION, _('Ask a question'), self.on_ask_a_question)) - self.help_menu.append(gnometools.new_menu_item(gtk.STOCK_DIALOG_ERROR, _('Report a bug'), self.on_report_a_bug)) - self.help_menu.append(gtk.SeparatorMenuItem()) - self.help_menu.append(gnometools.new_menu_item(gtk.STOCK_ABOUT, _('About'), self.on_about)) - self.help_menu.show_all() - self.builder.get_object('btn_help').set_menu(self.help_menu) - - #restore menu - self.restore_menu = gtk.Menu() - self.restore_menu.append(gnometools.new_menu_item(gtk.STOCK_UNDELETE, _('Restore'), self.on_restore_this)) - self.restore_menu.append(gnometools.new_menu_item(gtk.STOCK_UNDELETE, _('Restore to ...'), self.on_restore_this_to)) - self.restore_menu.append(gtk.SeparatorMenuItem()) - self.rm_restore_parent = gnometools.new_menu_item(gtk.STOCK_UNDELETE, _('Restore \'%s\'') % '', self.on_restore_parent) - self.restore_menu.append(self.rm_restore_parent) - self.rm_restore_parent_to = gnometools.new_menu_item(gtk.STOCK_UNDELETE, _('Restore \'%s\' to ...') % '', self.on_restore_parent_to) - self.restore_menu.append(self.rm_restore_parent_to) - self.restore_menu.show_all() - - self.btn_restore = self.builder.get_object('btn_restore') - self.btn_restore.set_menu(self.restore_menu) - - #show hidden files - self.show_hidden_files = self.config.get_bool_value( 'gnome.show_hidden_files', False ) - self.btn_hidden_files = self.builder.get_object( 'btn_hidden_files' ) - self.btn_hidden_files.set_active( self.show_hidden_files ) - #self.btn_hidden_files.set_label( _('Hidden files') ) #!!! - - #setup places view - self.list_places = self.builder.get_object( 'list_places' ) - - pix_renderer = gtk.CellRendererPixbuf() - text_renderer = gtk.CellRendererText() - - column = gtk.TreeViewColumn( _('Shortcuts') ) - column.pack_start( pix_renderer, False ) - column.pack_end( text_renderer, True ) - column.add_attribute( pix_renderer, 'icon-name', 2 ) - column.add_attribute( text_renderer, 'markup', 0 ) - column.set_cell_data_func( pix_renderer, self.places_pix_renderer_function, None ) - column.set_cell_data_func( text_renderer, self.places_text_renderer_function, None ) - #column.set_alignment( 0.5 ) - self.list_places.append_column( column ) - - #name, icon, path - self.store_places = gtk.ListStore( str, str, str ) - self.list_places.set_model( self.store_places ) - self.list_places.get_selection().set_select_function( self.places_select_function, self.store_places ) - - #setup folder view - self.list_folder_view_widget = self.builder.get_object( 'list_folder_view_widget' ) - self.list_folder_view_shadow = self.builder.get_object( 'list_folder_view_shadow' ) - self.list_folder_view = self.builder.get_object( 'list_folder_view' ) - - pix_renderer = gtk.CellRendererPixbuf() - text_renderer = gtk.CellRendererText() - - column = gtk.TreeViewColumn( _('Name') ) - column.pack_start( pix_renderer, False ) - column.pack_end( text_renderer, True ) - column.add_attribute( pix_renderer, 'icon-name', 2 ) - column.add_attribute( text_renderer, 'markup', 0 ) - column.set_expand( True ) - column.set_sizing( gtk.TREE_VIEW_COLUMN_AUTOSIZE ) - column.set_sort_column_id( 0 ) - self.list_folder_view.append_column( column ) - - text_renderer = gtk.CellRendererText() - column = gtk.TreeViewColumn( _('Size') ) - column.pack_end( text_renderer, True ) - column.add_attribute( text_renderer, 'markup', 4 ) - column.set_sort_column_id( 1 ) - self.list_folder_view.append_column( column ) - - text_renderer = gtk.CellRendererText() - column = gtk.TreeViewColumn( _('Date') ) - column.pack_end( text_renderer, True ) - column.add_attribute( text_renderer, 'markup', 5 ) - column.set_sort_column_id( 2 ) - self.list_folder_view.append_column( column ) - - # display name, relative path, icon_name, type (0 - directory, 1 - file), size (str), date, size (float) - self.store_folder_view = gtk.ListStore( str, str, str, int, str, str, float ) - self.store_folder_view.set_sort_func( 0, self.sort_folder_view_by_column, 0 ) #name - self.store_folder_view.set_sort_func( 1, self.sort_folder_view_by_column, 6 ) #size - self.store_folder_view.set_sort_func( 2, self.sort_folder_view_by_column, 5 ) #date - self.store_folder_view.set_sort_column_id( 0, gtk.SORT_ASCENDING ) - - self.list_folder_view.set_model( self.store_folder_view ) - - #setup time line view - self.list_time_line = self.builder.get_object( 'list_time_line' ) - - text_renderer = gtk.CellRendererText() - column = gtk.TreeViewColumn( _('Snapshots'), text_renderer, markup = 0 ) - column.set_cell_data_func( text_renderer, self.places_text_renderer_function, None ) - self.list_time_line.append_column( column ) - - #display name, id - self.store_time_line = gtk.ListStore( str, str ) - self.list_time_line.set_model( self.store_time_line ) - self.list_time_line.get_selection().set_select_function( self.places_select_function, self.store_time_line ) - self.update_time_line = False - - #calculate specialBackgroundColor - style = self.list_time_line.get_style() - bg1 = style.bg[gtk.STATE_NORMAL] - bg2 = style.bg[gtk.STATE_SELECTED] - self.special_background_color = gtk.gdk.Color( (2 * bg1.red + bg2.red) / 3, (2 * bg1.green + bg2.green) / 3,(2 * bg1.blue + bg2.blue) / 3 ).to_string() - - #restore size & position - main_window_x = self.config.get_int_value( 'gnome.main_window.x', -1 ) - main_window_y = self.config.get_int_value( 'gnome.main_window.y', -1 ) - if main_window_x >= 0 and main_window_y >= 0: - self.window.move( main_window_x, main_window_y ) - - main_window_width = self.config.get_int_value( 'gnome.main_window.width', -1 ) - main_window_height = self.config.get_int_value( 'gnome.main_window.height', -1 ) - if main_window_width > 0 and main_window_height > 0: - self.window.resize( main_window_width, main_window_height ) - - main_window_hpaned1 = self.config.get_int_value( 'gnome.main_window.hpaned1', -1 ) - main_window_hpaned2 = self.config.get_int_value( 'gnome.main_window.hpaned2', -1 ) - if main_window_hpaned1 > 0 and main_window_hpaned2 > 0: - self.builder.get_object('hpaned1').set_position( main_window_hpaned1 ) - self.builder.get_object('hpaned2').set_position( main_window_hpaned2 ) - - #show main window - self.window.show() - gnometools.run_gtk_update_loop() - - self.force_wait_lock_counter = 0 - gobject.timeout_add( 1000, self.raise_application ) - - if not self.config.is_configured(): - settingsdialog.SettingsDialog( self.config, self.snapshots, self ).run() - - if not self.config.is_configured(): - return - - if self.snapshots.has_old_snapshots(): - settingsdialog.SettingsDialog( self.config, self.snapshots, self ).update_snapshots_location() - - profile_id = self.config.get_current_profile() - - #mount - try: - mnt = mount.Mount(cfg = self.config, profile_id = profile_id, parent = self.window) - hash_id = mnt.mount() - except mount.MountException as ex: - messagebox.show_error( self.window, self.config, str(ex) ) - else: - self.config.set_current_hash_id(hash_id) - - if not self.config.can_backup( profile_id ): - messagebox.show_error( self.window, self.config, _('Can\'t find snapshots folder.\nIf it is on a removable drive please plug it and then press OK') ) - - self.update_profiles() - self.update_backup_info() - gobject.timeout_add( 1000, self.update_backup_info ) - - def on_combo_profiles_changed( self, *params ): - if self.disable_combo_changed: - return - - iter = self.combo_profiles.get_active_iter() - if iter is None: - return - - first_update_all = self.first_update_all - - profile_id = self.store_profiles.get_value( iter, 1 ) - if not first_update_all and profile_id == self.config.get_current_profile(): - return - - self.remount(profile_id, self.config.get_current_profile()) - self.config.set_current_profile( profile_id ) - self.first_update_all = False - self.update_all( first_update_all ) - - def update_profiles( self ): - """Populates the profile list""" - self.disable_combo_changed = True - - profiles = self.config.get_profiles_sorted_by_name() - - select_iter = None - self.store_profiles.clear() - - for profile_id in profiles: - iter = self.store_profiles.append( [ self.config.get_profile_name( profile_id ), profile_id ] ) - if profile_id == self.config.get_current_profile(): - select_iter = iter - - self.disable_combo_changed = False - - if not select_iter is None: - self.combo_profiles.set_active_iter( select_iter ) - - if len( profiles ) > 1: - self.builder.get_object( 'tb_profiles' ).show() - else: - self.builder.get_object( 'tb_profiles' ).hide() - - #self.update_all( True ) - - def sort_folder_view_by_column( self, treemodel, iter1, iter2, column ): - if 0 == column: - ascending = 1 - if self.store_folder_view.get_sort_column_id()[1] != gtk.SORT_ASCENDING: - ascending = -1 - - type1 = self.store_folder_view.get_value( iter1, 3 ) - type2 = self.store_folder_view.get_value( iter2, 3 ) - - if type1 == 0 and type2 != 0: - return -1 * ascending - - if type1 != 0 and type2 == 0: - return 1 * ascending - - data1 = self.store_folder_view.get_value( iter1, column ) - data2 = self.store_folder_view.get_value( iter2, column ) - - if type(data1) is str: - data1 = data1.upper() - - if type(data2) is str: - data2 = data2.upper() - - #print "sort_folder_view_by_column: " + str( data1 ) + " - " + str( data2 ) - - if data1 < data2: - return -1 - - if data1 > data2: - return 1 - - return 0 - - def get_default_startup_folder_and_file( self ): - last_path = self.config.get_str_value( 'gnome.last_path', '' ) - if len(last_path) > 0 and os.path.isdir(last_path): - return ( last_path, None, False ) - return ( '/', None, False ) - - def get_cmd_startup_folder_and_file( self, cmd ): - if cmd is None: - cmd = self.app_instance.raise_cmd - - if len( cmd ) < 1: - return None - - path = None - show_snapshots = False - - for arg in cmd.split( '\n' ): - if len( arg ) < 1: - continue - if arg == '-s' or arg == '--snapshots': - show_snapshots = True - continue - if arg[0] == '-': - continue - if path is None: - path = arg - - if path is None: - return None - - if len( path ) < 1: - return None - - path = os.path.expanduser( path ) - path = os.path.abspath( path ) - - if os.path.isdir( path ): - if len( path ) < 1: - show_snapshots = False - - if show_snapshots: - return ( os.path.dirname( path ), path, True ) - else: - return ( path, '', False ) - - if os.path.isfile( path ): - return ( os.path.dirname( path ), path, show_snapshots ) - - return None - - def get_startup_folder_and_file( self, cmd = None ): - startup_folder = self.get_cmd_startup_folder_and_file( cmd ) - if startup_folder is None: - return self.get_default_startup_folder_and_file() - return startup_folder - - def update_all( self, init ): - #fill lists - selected_file = None - show_snapshots = False - if init: - self.folder_path, selected_file, show_snapshots = self.get_startup_folder_and_file() - self.snapshot_id = '/' - self.snapshots_list = [] - - self.fill_places() - self.fill_time_line( False ) - self.update_folder_view( 1, selected_file, show_snapshots ) - - def remount( self, new_profile_id, old_profile_id): - try: - mnt = mount.Mount(cfg = self.config, profile_id = old_profile_id, parent = self.window) - hash_id = mnt.remount(new_profile_id) - except mount.MountException as ex: - messagebox.show_error( self.window, self.config, str(ex) ) - else: - self.config.set_current_hash_id(hash_id) - - def places_pix_renderer_function( self, column, renderer, model, iter, user_data ): - if len( model.get_value( iter, 1 ) ) == 0: - renderer.set_property( 'visible', False ) - else: - renderer.set_property( 'visible', True ) - - def places_text_renderer_function( self, column, renderer, model, iter, user_data ): - if len( model.get_value( iter, 1 ) ) == 0: - renderer.set_property( 'cell-background-set', True ) - renderer.set_property( 'cell-background', self.special_background_color ) - else: - renderer.set_property( 'cell-background-set', False ) - - def places_select_function( self, info, store ): - if len( store.get_value( store.get_iter( info[0] ), 1 ) ) == 0: - return False - return True - - def raise_application( self ): - raise_cmd = self.app_instance.raise_command() - if raise_cmd is None: - return True - - print( "Raise cmd: " + raise_cmd) - self.window.present_with_time( int(time.time()) ) - self.window.window.focus() - #self.window.present() - - if len( raise_cmd ) == 0: - return True - - print("Check if the main window is the only top level visible window") - for window in gtk.window_list_toplevels(): - if window.get_property( 'visible' ): - if window != self.window: - print("Failed") - return True - - print("OK") - - folder_and_file = self.get_cmd_startup_folder_and_file( raise_cmd ) - if folder_and_file is None: - return True - - folder_path, file_name, show_snapshots = folder_and_file - - #select now - self.snapshot_id = '/' - self.list_time_line.get_selection().select_iter( self.store_time_line.get_iter_first() ) - - #select the specified file - self.folder_path = folder_path - self.update_folder_view( 1, file_name, show_snapshots ) - - return True - - def update_backup_info( self, force_wait_lock = False ): - if None is self.builder.get_object( 'btn_backup' ): - return True - - #print "forceWaitLock: %s" % forceWaitLock - - if force_wait_lock: - self.force_wait_lock_counter = 10 - - busy = self.snapshots.is_busy() - - if busy: - self.force_wait_lock_counter = 0 - - if self.force_wait_lock_counter > 0: - self.force_wait_lock_counter = self.force_wait_lock_counter - 1 - - fake_busy = busy or self.force_wait_lock_counter > 0 - self.builder.get_object( 'btn_backup' ).set_sensitive( not fake_busy ) - - take_snapshot_message = self.snapshots.get_take_snapshot_message() - if take_snapshot_message is None: - if fake_busy: - take_snapshot_message = ( 0, '...' ) - else: - take_snapshot_message = self.last_take_snapshot_message - if take_snapshot_message is None: - take_snapshot_message = ( 0, _('Done') ) - - update_time_line = self.update_time_line - - if fake_busy: - if not self.update_time_line: - self.update_time_line = True - elif self.update_time_line: - self.update_time_line = False - snapshots_list = self.snapshots_list - - self.fill_time_line() - - if snapshots_list != self.snapshots_list: - take_snapshot_message = ( 0, _('Done') ) - else: - if take_snapshot_message[0] == 0: - take_snapshot_message = ( 0, _('Done, no backup needed') ) - - self.shutdown.shutdown() - - if take_snapshot_message != self.last_take_snapshot_message or update_time_line: - self.last_take_snapshot_message = take_snapshot_message - - if fake_busy: - message = _('Working:') + ' ' + self.last_take_snapshot_message[1].replace( '\n', ' ' ) - elif take_snapshot_message[0] == 0: - message = self.last_take_snapshot_message[1].replace( '\n', ' ' ) - else: - message = _('Error:') + ' ' + self.last_take_snapshot_message[1].replace( '\n', ' ' ) - - self.status_bar.push( 0, message ) - - #if not fake_busy: - # self.last_take_snapshot_message = None - - return True - - def fill_places( self ): - self.store_places.clear() - - #add global places - self.store_places.append( [ "%s" % _('Global'), '', '' ] ) - self.store_places.append( [ _('Root'), '/', gtk.STOCK_HARDDISK ] ) - self.store_places.append( [ _('Home'), os.path.expanduser( '~' ), gtk.STOCK_HOME ] ) - - #add bookmarks - rawbookmarks = '' - - try: - file = open( os.path.expanduser('~/.gtk-bookmarks') ) - rawbookmarks = file.read() - file.close() - except: - pass - - bookmarks = [] - for rawbookmark in rawbookmarks.split( '\n' ): - if rawbookmark.startswith( 'file://' ): - index = rawbookmark.find( ' ' ) - if index > 0 and os.path.exists( rawbookmark[ 7 : index ] ): - bookmarks.append( ( gnomevfs.unescape_string_for_display( rawbookmark[ 7 : index ] ), rawbookmark[ index + 1 : ] ) ) - elif index < 0 and os.path.exists( rawbookmark[ 7 : ] ): - index = rawbookmark.rfind( '/' ) - if index > 0: - bookmarks.append( ( gnomevfs.unescape_string_for_display( rawbookmark[ 7 : ] ), gnomevfs.unescape_string_for_display( rawbookmark[ index + 1 : ] ) ) ) - - if len( bookmarks ) > 0: - self.store_places.append( [ "%s" % _('Bookmarks'), '', '' ] ) - for bookmark in bookmarks: - self.store_places.append( [ bookmark[1], bookmark[0], self.icon_names.get_icon(bookmark[0]) ] ) - - #add backup folders - include_folders = self.config.get_include() - if len( include_folders ) > 0: - folders = [] - for item in include_folders: - if item[1] == 0: - folders.append( item[0] ) - - if len( folders ) > 0: - self.store_places.append( [ "%s" % _('Backup folders'), '', '' ] ) - for folder in folders: - #self.store_places.append( [ folder[0], folder[0], gtk.STOCK_SAVE ] ) - self.store_places.append( [ folder, folder, gtk.STOCK_SAVE ] ) - - def fill_time_line( self, update_folder_view = True ): - current_selection = '/' - iter = self.list_time_line.get_selection().get_selected()[1] - if not iter is None: - current_selection = self.store_time_line.get_value( iter, 1 ) - - self.store_time_line.clear() - self.store_time_line.append( [ gnometools.get_snapshot_display_markup( self.snapshots, '/' ), '/' ] ) - - self.snapshots_list = self.snapshots.get_snapshots_and_other_list() - - #print self.snapshots_list - #self.snapshots_list = [] - #for item in self.snapshots_list_complete: - # self.snapshots_list.append( item[0] ) - - groups = [] - now = datetime.date.today() - - #today - date = now - groups.append( (_('Today'), self.snapshots.get_snapshot_id( date ), []) ) - - #yesterday - date = now - datetime.timedelta( days = 1 ) - groups.append( (_('Yesterday'), self.snapshots.get_snapshot_id( date ), []) ) - - #this week - date = now - datetime.timedelta( days = now.weekday() ) - groups.append( (_('This week'), self.snapshots.get_snapshot_id( date ), []) ) - - #last week - date = now - datetime.timedelta( days = now.weekday() + 7 ) - groups.append( (_('Last week'), self.snapshots.get_snapshot_id( date ), []) ) - - #fill groups - for snapshot_id in self.snapshots_list: - found = False - - for group in groups: - if snapshot_id >= group[1]: - group[2].append( snapshot_id ) - found = True - break - - if not found: - year = int( snapshot_id[ 0 : 4 ] ) - month = int( snapshot_id[ 4 : 6 ] ) - date = datetime.date( year, month, 1 ) - - group_name = '' - if year == now.year: - group_name = date.strftime( '%B' ).capitalize() - else: - group_name = date.strftime( '%B, %Y' ).capitalize() - - groups.append( ( group_name, self.snapshots.get_snapshot_id( date ), [ snapshot_id ]) ) - - #fill time_line list - for group in groups: - if len( group[2] ) > 0: - self.store_time_line.append( [ "%s" % group[0], '' ] ); - for snapshot_id in group[2]: - self.store_time_line.append( [ gnometools.get_snapshot_display_markup( self.snapshots, snapshot_id ), snapshot_id ] ) - - #select previous item - iter = self.store_time_line.get_iter_first() - while not iter is None: - if current_selection == self.store_time_line.get_value( iter, 1 ): - break - iter = self.store_time_line.iter_next( iter ) - - changed = False - if iter is None: - changed = True - iter = self.store_time_line.get_iter_first() - - self.list_time_line.get_selection().select_iter( iter ) - - if changed and update_folder_view: - self.update_folder_view( 2 ) - - def on_close( self, *params ): - if self.shutdown.ask_before_quit(): - if gtk.RESPONSE_YES != messagebox.show_question( self.window, self.config, _('If you close this window Back In Time will not be able to shutdown your system when the snapshot has finished.\nDo you really want to close?') ): - return False - - main_window_x, main_window_y = self.window.get_position() - main_window_width, main_window_height = self.window.get_size() - main_window_hpaned1 = self.builder.get_object('hpaned1').get_position() - main_window_hpaned2 = self.builder.get_object('hpaned2').get_position() - - self.config.set_int_value( 'gnome.main_window.x', main_window_x ) - self.config.set_int_value( 'gnome.main_window.y', main_window_y ) - self.config.set_int_value( 'gnome.main_window.width', main_window_width ) - self.config.set_int_value( 'gnome.main_window.height', main_window_height ) - self.config.set_int_value( 'gnome.main_window.hpaned1', main_window_hpaned1 ) - self.config.set_int_value( 'gnome.main_window.hpaned2', main_window_hpaned2 ) - self.config.set_str_value( 'gnome.last_path', self.folder_path ) - self.config.set_bool_value( 'gnome.show_hidden_files', self.show_hidden_files ) - - #mount - try: - mnt = mount.Mount(cfg = self.config) - mnt.umount(self.config.current_hash_id) - except mount.MountException as ex: - messagebox.show_error( self.window, self.config, str(ex) ) - - self.config.save() - self.window.destroy() - return True - - def on_list_time_line_cursor_changed( self, _list ): - if _list.get_selection().path_is_selected( _list.get_cursor()[ 0 ] ): - self.update_folder_view( 2 ) - - def on_list_places_cursor_changed( self, _list ): - if _list.get_selection().path_is_selected( _list.get_cursor()[ 0 ] ): - iter = _list.get_selection().get_selected()[1] - folder_path = self.store_places.get_value( iter, 1 ) - if folder_path != self.folder_path: - self.folder_path = folder_path - self.update_folder_view( 0 ) - - def on_list_folder_view_drag_data_get( self, widget, drag_context, selection_data, info, timestamp, user_param1 = None ): - iter = self.list_folder_view.get_selection().get_selected()[1] - if not iter is None: - path = self.store_folder_view.get_value( iter, 1 ) - path = self.snapshots.get_snapshot_path_to( self.snapshot_id, path ) - path = gnomevfs.escape_path_string( path ) - selection_data.set_uris( [ 'file://' + path ] ) - - def on_list_folder_view_key_press_event( self, _list, event ): - if gtk.keysyms.BackSpace == event.keyval: - self.on_btn_fodler_up_clicked( None ) - return True - - if 32 != event.keyval: - return False - - if not self.use_gloobus_preview: - return False - - iter = self.list_folder_view.get_selection().get_selected() - if iter is None: - return True - - iter = iter[1] - if iter is None: - return True - - path = self.store_folder_view.get_value( iter, 1 ) - full_path = self.snapshots.get_snapshot_path_to( self.snapshot_id, path ) - - if not os.path.exists( full_path ): - return True - - if not self.snapshots.can_open_path( self.snapshot_id, full_path ): - return True - - cmd = "gloobus-preview \"%s\" &" % full_path - print(cmd) - os.system( cmd ) - return True - - def on_list_folder_view_button_press_event( self, _list, event ): - if event.button != 3: - return - - if len( self.store_folder_view ) <= 0: - return - - path = self.list_folder_view.get_path_at_pos( int( event.x ), int( event.y ) ) - if path is None: - return - path = path[0] - - self.list_folder_view.get_selection().select_path( path ) - self.show_folder_view_menu_popup( self.list_folder_view, event.button, event.time ) - - def on_list_folder_view_popup_menu( self, _list ): - self.show_folder_view_menu_popup( _list, 1, gtk.get_current_event_time() ) - - #def add_menu_item(menu, icon, label, callback): - # menu_item = gtk.ImageMenuItem() - # menu_item.set_label(label) - # menu_item.set_image(icon) - # if not icon is None: - # menu_item.set_always_show_image(True) - # menu_item.connect( 'activate', callback ) - # menu.append( menu_item ) - - def show_folder_view_menu_popup( self, _list, button, time ): - iter = _list.get_selection().get_selected()[1] - #print "popup-menu" - popup_menu = gtk.Menu() - - ok = False - - if not iter is None: - ok = True - popup_menu.append(gnometools.new_menu_item(gtk.image_new_from_icon_name( self.store_folder_view.get_value( iter, 2 ), gtk.ICON_SIZE_MENU ), _('Open'), self.on_list_folder_view_open_item)) - popup_menu.append(gtk.SeparatorMenuItem()) - popup_menu.append(gnometools.new_menu_item(gtk.STOCK_INDEX, _('Snapshots'), self.on_list_folder_view_snapshots_item)) - - if len( self.snapshot_id ) > 1: - popup_menu.append(gtk.SeparatorMenuItem()) - popup_menu.append(gnometools.new_menu_item(gtk.STOCK_UNDELETE, _('Restore'), self.on_restore_this)) - popup_menu.append(gnometools.new_menu_item(gtk.STOCK_UNDELETE, _('Restore to ...'), self.on_restore_this_to)) - - if len( self.snapshot_id ) > 1: - if ok: - popup_menu.append( gtk.SeparatorMenuItem() ) - else: - ok = True - - popup_menu.append(gnometools.new_menu_item(gtk.STOCK_UNDELETE, _('Restore \'%s\'') % self.folder_path, self.on_restore_parent)) - popup_menu.append(gnometools.new_menu_item(gtk.STOCK_UNDELETE, _('Restore \'%s\' to ...') % self.folder_path, self.on_restore_parent_to)) - - if ok: - popup_menu.show_all() - popup_menu.popup( None, None, None, button, time ) - - def on_list_folder_view_snapshots_item( self, widget, data = None ): - self.on_btn_snapshots_clicked( self.builder.get_object( 'btn_snapshots' ) ) - - def on_list_folder_view_open_item( self, widget, data = None ): - iter = self.list_folder_view.get_selection().get_selected()[1] - if iter is None: - return - - path = self.store_folder_view.get_value( iter, 1 ) - path = self.snapshots.get_snapshot_path_to( self.snapshot_id, path ) - - if not os.path.exists( path ): - return - - cmd = "gnome-open \"%s\" &" % path - print(cmd) - os.system( cmd ) - - def on_list_folder_view_row_activated( self, _list, path, column ): - iter = _list.get_selection().get_selected()[1] - path = self.store_folder_view.get_value( iter, 1 ) - full_path = self.snapshots.get_snapshot_path_to( self.snapshot_id, path ) - - if not os.path.exists( full_path ): - return - - if not self.snapshots.can_open_path( self.snapshot_id, full_path ): - return - - #directory - if 0 == self.store_folder_view.get_value( iter, 3 ): - self.folder_path = path - self.update_folder_view( 1 ) - return - - #file - cmd = "gnome-open \"%s\" &" % full_path - print(cmd) - os.system( cmd ) - - def on_btn_fodler_up_clicked( self, button ): - if len( self.folder_path ) <= 1: - return - - index = self.folder_path.rfind( '/' ) - if index < 1: - parent_path = "/" - else: - parent_path = self.folder_path[ : index ] - - self.folder_path = parent_path - self.update_folder_view( 1 ) - - def on_restore_this( self, *args ): - iter = self.list_folder_view.get_selection().get_selected()[1] - if not iter is None: - gnometools.restore(self, self.snapshot_id, self.store_folder_view.get_value( iter, 1 ) ) - - def on_restore_this_to( self, *args ): - iter = self.list_folder_view.get_selection().get_selected()[1] - if not iter is None: - gnometools.restore(self, self.snapshot_id, self.store_folder_view.get_value( iter, 1 ), True ) - - def on_restore_parent( self, *args ): - gnometools.restore(self, self.snapshot_id, self.folder_path ) - - def on_restore_parent_to( self, *args ): - gnometools.restore(self, self.snapshot_id, self.folder_path, True ) - - def on_btn_hidden_files_toggled( self, button ): - if self.folder_path is None: - return - - self.show_hidden_files = button.get_active() - self.update_folder_view( 0 ) - - def on_btn_snapshots_clicked( self, button ): - iter = self.list_folder_view.get_selection().get_selected()[1] - if iter is None: - return - - path = self.store_folder_view.get_value( iter, 1 ) - icon_name = self.store_folder_view.get_value( iter, 2 ) - - retVal = snapshotsdialog.SnapshotsDialog( self.snapshots, self.window, path, self.snapshots_list, self.snapshot_id, icon_name, self.use_gloobus_preview ).run() - - #select the specified file - if not retVal is None: - iter = self.store_time_line.get_iter_first() - while not iter is None: - snapshot_id = self.store_time_line.get_value( iter, 1 ) - if snapshot_id == retVal: - break - iter = self.store_time_line.iter_next( iter ) - - if not iter is None: - self.list_time_line.get_selection().select_iter( iter ) - self.update_folder_view( 2 ) - - def on_about( self, *args ): - AboutDialog( self.config, self.window ).run() - - def on_website( self, *args ): - os.system( "gnome-open http://backintime.le-web.org &" ) - - def on_help( self, *args ): - os.system( "gnome-open http://backintime.le-web.org/documentation &" ) - - def on_report_a_bug( self, *args ): - os.system( "gnome-open https://bugs.launchpad.net/backintime &" ) - - def on_faq( self, *args ): - os.system( "gnome-open https://answers.launchpad.net/backintime/+faqs &" ) - - def on_ask_a_question( self, *args ): - os.system( "gnome-open https://answers.launchpad.net/backintime &" ) - - def on_key_release_event( self, widget, event ): - if 'F1' == gtk.gdk.keyval_name( event.keyval ) and ( event.state & (gtk.gdk.CONTROL_MASK | gtk.gdk.MOD1_MASK) ) == 0: - self.on_help() - - def on_btn_settings_clicked( self, button ): - snapshots_full_path = self.config.get_snapshots_full_path() - include_folders = self.config.get_include() - hash_id = self.config.current_hash_id - - settingsdialog.SettingsDialog( self.config, self.snapshots, self ).run() - - #mount - try: - mnt = mount.Mount(cfg = self.config, parent = self.window) - new_hash_id = mnt.remount(self.config.get_current_profile()) - except mount.MountException as ex: - messagebox.show_error( self.window, self.config, str(ex) ) - else: - self.config.set_current_hash_id(new_hash_id) - - if snapshots_full_path != self.config.get_snapshots_full_path() \ - or include_folders != self.config.get_include() \ - or hash_id != self.config.current_hash_id: - self.update_all( False ) - self.update_profiles() - - def on_btn_snapshot_name_clicked( self, button ): - iter = self.list_time_line.get_selection().get_selected()[1] - if iter is None: - return - - snapshot_id = self.store_time_line.get_value( iter, 1 ) - if len( snapshot_id ) <= 1: - return - - old_name = self.snapshots.get_snapshot_name( snapshot_id ) - new_name = messagebox.text_input_dialog( self.window, self.config, _('Snapshot Name'), old_name ) - if new_name is None: - return - - if old_name == new_name: - return - - self.snapshots.set_snapshot_name( snapshot_id, new_name ) - self.store_time_line.set_value( iter, 0, gnometools.get_snapshot_display_markup( self.snapshots, snapshot_id ) ) - - def on_btn_remove_snapshot_clicked( self, button ): - iter = self.list_time_line.get_selection().get_selected()[1] - if iter is None: - return - - snapshot_id = self.store_time_line.get_value( iter, 1 ) - if len( snapshot_id ) <= 1: - return - - if gtk.RESPONSE_YES == messagebox.show_question( self.window, self.config, _('Are you sure you want to remove the snapshot:\n%s') % self.snapshots.get_snapshot_display_name( snapshot_id ) ): - print("Remove Snapshot: %s" % snapshot_id) - self.snapshots.remove_snapshot( snapshot_id ) - self.fill_time_line() - - def on_btn_view_snapshot_log_clicked( self, button ): - iter = self.list_time_line.get_selection().get_selected()[1] - if iter is None: - return - - snapshot_id = self.store_time_line.get_value( iter, 1 ) - if len( snapshot_id ) <= 1: - return - - logviewdialog.LogViewDialog( self, snapshot_id ).run() - - def on_btn_view_last_log_clicked( self, button ): - logviewdialog.LogViewDialog( self ).run() - - def on_btn_backup_clicked( self, button ): - button.set_sensitive( False ) - self.updatetime_line = True - - if self.snapshots.is_busy(): - self.update_backup_info() - return - - backintime.take_snapshot_now_async( self.config ) - self.update_backup_info( True ) - - def on_btn_update_snapshots_clicked( self, button ): - self.fill_time_line( False ) - self.update_folder_view( 2 ) - - def on_btn_shutdown_toggled(self, button): - self.shutdown.activate_shutdown = button.get_active() - - def update_folder_view( self, changed_from, selected_file = None, show_snapshots = False ): #0 - places, 1 - folder view, 2 - time_line - #update backup time - if 2 == changed_from: - iter = self.list_time_line.get_selection().get_selected()[1] - self.snapshot_id = self.store_time_line.get_value( iter, 1 ) - #self.lblTime.set_markup( "%s" % backupTime ) - - tooltip = '' - text = '' - if len( self.snapshot_id ) > 1: - name = self.snapshots.get_snapshot_display_id( self.snapshot_id ) - text = _('Snapshot: %s') % name - tooltip = _('View the snapshot made at %s') % name - else: - tooltip = _('View the current disk content') - text = _('Now') - - self.lbl_snapshot.set_markup( ' ' + text + ' ' ) - self.lbl_snapshot.set_tooltip_text( tooltip ) - - #update selected places item - if 1 == changed_from: - iter = self.store_places.get_iter_first() - while not iter is None: - place_path = self.store_places.get_value( iter, 1 ) - if place_path == self.folder_path: - break - iter = self.store_places.iter_next( iter ) - - if iter is None: - self.list_places.get_selection().unselect_all() - else: - self.list_places.get_selection().select_iter( iter ) - - self.rm_restore_parent.set_label(_('Restore \'%s\'') % self.folder_path) - self.rm_restore_parent_to.set_label(_('Restore \'%s\' to ...') % self.folder_path) - - - #update folder view - - full_path = self.snapshots.get_snapshot_path_to( self.snapshot_id, self.folder_path ) - all_files = [] - files = [] - folder_exists = os.path.isdir( full_path ) - - if folder_exists: - try: - all_files = os.listdir( full_path ) - all_files.sort() - except: - pass - - files = [] - for file in all_files: - if len( file ) == 0: - continue - - if not self.show_hidden_files: - if file[ 0 ] == '.': - continue - if file[ -1 ] == '~': - continue - - path = os.path.join( full_path, file ) - - file_size = -1 - file_date = -1 - - try: - file_stat = os.stat( path ) - file_size = file_stat[stat.ST_SIZE] - file_date = file_stat[stat.ST_MTIME] - except: - pass - - #format size - file_size_int = file_size - if file_size_int < 0: - file_size_int = 0 - - if file_size < 0: - file_size = 'unknown' - elif file_size < 1024: - file_size = str( file_size ) + ' bytes' - elif file_size < 1024 * 1024: - file_size = file_size / 1024 - file_size = str( file_size ) + ' KB' - elif file_size < 1024 * 1024 * 1024: - file_size = file_size / ( 1024 * 1024 ) - file_size = str( file_size ) + ' MB' - else: - file_size = file_size / ( 1024 * 1024 * 1024 ) - file_size = str( file_size ) + ' GB' - - #format date - if file_date < 0: - file_date = 'unknown' - else: - file_date = datetime.datetime.fromtimestamp(file_date).isoformat(' ') - - markup = "%s" - if os.path.islink( path ): - if self.snapshots.can_open_path( self.snapshot_id, path ): - markup = "%s" - else: - markup = "!%s" - - if os.path.isdir( path ): - files.append( [ markup % file, '', file_date, self.icon_names.get_icon(path), file_size_int, 0, file ] ) - else: - files.append( [ markup % file, file_size, file_date, self.icon_names.get_icon(path), file_size_int, 1, file ] ) - - #try to keep old selected file - if selected_file is None: - selected_file = '' - iter = self.list_folder_view.get_selection().get_selected()[1] - if not iter is None: - selected_file = self.store_folder_view.get_value( iter, 1 ) - - self.list_folder_view_widget.show() - self.list_folder_view_shadow.hide() - else: - self.list_folder_view_widget.hide() - self.list_folder_view_shadow.show() - - #populate the list - self.store_folder_view.clear() - - selected_iter = None - for item in files: - rel_path = os.path.join( self.folder_path, item[6] ) - item[0] = item[0].replace( '&' , '&' ) - new_iter = self.store_folder_view.append( [ item[0], rel_path, item[3], item[5], item[1], item[2], item[4] ] ) - if selected_file == rel_path: - selected_iter = new_iter - - #select old item or the first item - if len( files ) > 0: - if selected_iter is None: - selected_iter = self.store_folder_view.get_iter_first() - self.list_folder_view.get_selection().select_iter( selected_iter ) - - #update folderup button state - self.builder.get_object( 'btn_folder_up' ).set_sensitive( len( self.folder_path ) > 1 ) - - #update restore button state - self.btn_restore.set_sensitive( len( self.snapshot_id ) > 1 and len( self.store_folder_view ) > 0 ) - - #update remove/name snapshot buttons - self.builder.get_object( 'btn_snapshot_name' ).set_sensitive( len( self.snapshot_id ) > 1 ) - self.builder.get_object( 'btn_remove_snapshot' ).set_sensitive( len( self.snapshot_id ) > 1 ) - self.builder.get_object( 'btn_view_snapshot_log' ).set_sensitive( len( self.snapshot_id ) > 1 ) - - #update snapshots button state - self.builder.get_object( 'btn_snapshots' ).set_sensitive( len( self.store_folder_view ) > 0 ) - - #display current folder - self.builder.get_object( 'edit_current_path' ).set_text( self.folder_path ) - - #show snapshots - if show_snapshots: - self.on_btn_snapshots_clicked( None ) - - -def open_url( dialog, link, user_data ): - os.system( "gnome-open \"%s\" &" % link ) - - -if __name__ == '__main__': - cfg = backintime.start_app( 'backintime-gnome', ['-s', '--snapshots'] ) - - raise_cmd = '' - if len( sys.argv ) > 1: - raise_cmd = '\n'.join( sys.argv[ 1 : ] ) - - app_instance = guiapplicationinstance.GUIApplicationInstance( cfg.get_app_instance_file(), raise_cmd ) - - gnome_props = { gnome.PARAM_APP_DATADIR : '/usr/share' } - gnome.program_init( 'backintime', cfg.VERSION, properties = gnome_props ) - - gtk.about_dialog_set_url_hook( open_url, None ) - - logger.openlog() - main_window = MainWindow( cfg, app_instance ) - - if cfg.is_configured(): - gtk.main() - logger.closelog() - - app_instance.exit_application() - diff -Nru backintime-1.0.36/gnome/backintime-gnome backintime-1.1.12/gnome/backintime-gnome --- backintime-1.0.36/gnome/backintime-gnome 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/gnome/backintime-gnome 1970-01-01 00:00:00.000000000 +0000 @@ -1,30 +0,0 @@ -#!/bin/sh - -# Back In Time -# Copyright (C) 2008-2009 Oprea Dan, Bart de Koning, Richard Bailey -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -if [ -f app.py ]; then - APP_PATH="." -else - APP_PATH="/usr/share/backintime/gnome" -fi - -#starting a new ssh-agent all the time is just a workaround for -#https://bugs.launchpad.net/ubuntu/+source/openssh/+bug/841672 -#normally we don't need to start ssh-agent for backintime-gnome -ssh-agent python ${APP_PATH}/app.py "$@" - diff -Nru backintime-1.0.36/gnome/backintime-gnome.desktop backintime-1.1.12/gnome/backintime-gnome.desktop --- backintime-1.0.36/gnome/backintime-gnome.desktop 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/gnome/backintime-gnome.desktop 1970-01-01 00:00:00.000000000 +0000 @@ -1,11 +0,0 @@ -[Desktop Entry] -Name=Back In Time -Exec=backintime-gnome -Icon=gtk-save -Terminal=false -X-MultipleArgs=false -Type=Application -StartupNotify=true -Categories=GNOME;GTK;System; -Comment=Simple backup system -Comment[sl]=Enostaven sistem ustvarjanja varnostnih kopij diff -Nru backintime-1.0.36/gnome/backintime-gnome-root.desktop backintime-1.1.12/gnome/backintime-gnome-root.desktop --- backintime-1.0.36/gnome/backintime-gnome-root.desktop 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/gnome/backintime-gnome-root.desktop 1970-01-01 00:00:00.000000000 +0000 @@ -1,11 +0,0 @@ -[Desktop Entry] -Name=Back In Time (root) -Exec=gksu backintime-gnome -Icon=gtk-save -Terminal=false -X-MultipleArgs=false -Type=Application -StartupNotify=true -Categories=GNOME;GTK;System; -Comment=Simple backup system -Comment[sl]=Enostaven sistem ustvarjanja varnostnih kopij diff -Nru backintime-1.0.36/gnome/clipboardtools.py backintime-1.1.12/gnome/clipboardtools.py --- backintime-1.0.36/gnome/clipboardtools.py 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/gnome/clipboardtools.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ -# Back In Time -# Copyright (C) 2008-2009 Oprea Dan, Bart de Koning, Richard Bailey -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - - -import pygtk -pygtk.require("2.0") -import gtk -import gnomevfs - - diff -Nru backintime-1.0.36/gnome/configure backintime-1.1.12/gnome/configure --- backintime-1.0.36/gnome/configure 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/gnome/configure 1970-01-01 00:00:00.000000000 +0000 @@ -1,47 +0,0 @@ -#!/bin/sh - -#set default options -CHECK="--check" -PYTHON="--python" - -USR_BIN_FILES="backintime-gnome" - -#get commandline arguments -for arg in $*; do - case $arg in - --check | --no-check) CHECK=$arg;; - --python | --python2) PYTHON=$arg;; - esac -done - -#patch python command -#use 'python' or 'python2' to start Python Version 2.x -case $PYTHON in - --python) sed -e "s/^python2\? /python /g" \ - -e "s/^ssh-agent python2\? /ssh-agent python /g" \ - -i $USR_BIN_FILES - ;; - --python2) sed -e "s/^python2\? /python2 /g" \ - -e "s/^ssh-agent python2\? /ssh-agent python2 /g" \ - -i $USR_BIN_FILES - ;; -esac - -if [ -e Makefile ]; then - rm Makefile; -fi - -#check GNOME -if [ $CHECK = "--check" ]; then - if [ -z `which gnome-session` ]; then - printf "ERROR: Can't find GNOME !\n" - exit 1 - fi -fi - -cp Makefile.template Makefile - -printf "All OK. Now run:\n" -printf " make\n" -printf " sudo make install\n" - diff -Nru backintime-1.0.36/gnome/debian_specific/compat backintime-1.1.12/gnome/debian_specific/compat --- backintime-1.0.36/gnome/debian_specific/compat 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/gnome/debian_specific/compat 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -5 diff -Nru backintime-1.0.36/gnome/debian_specific/control backintime-1.1.12/gnome/debian_specific/control --- backintime-1.0.36/gnome/debian_specific/control 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/gnome/debian_specific/control 1970-01-01 00:00:00.000000000 +0000 @@ -1,11 +0,0 @@ -Package: backintime-gnome -Version: 1.0.36 -Priority: optional -Section: gnome -Maintainer: BIT Team -Architecture: all -Homepage: http://backintime.le-web.org -Depends: x11-utils, python-glade2, python-gnome2, python-notify, meld, gksu, libnotify-bin, backintime-common (>= 1.0.36~), backintime-notify (>= 1.0.36~) -Suggests: python-secretstorage | python-keyring-gnome | python-gnomekeyring -Description: Simple backup system for GNOME Desktop - This is a GNOME GUI frontend for backintime-common. diff -Nru backintime-1.0.36/gnome/debian_specific/control.source backintime-1.1.12/gnome/debian_specific/control.source --- backintime-1.0.36/gnome/debian_specific/control.source 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/gnome/debian_specific/control.source 1970-01-01 00:00:00.000000000 +0000 @@ -1,8 +0,0 @@ -Source: backintime-gnome -Maintainer: BIT Team -Section: gnome -Build-Depends: debhelper (>= 7) -Priority: optional -Standards-Version: 3.9.5 -Homepage: http://backintime.le-web.org - diff -Nru backintime-1.0.36/gnome/debian_specific/postrm backintime-1.1.12/gnome/debian_specific/postrm --- backintime-1.0.36/gnome/debian_specific/postrm 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/gnome/debian_specific/postrm 1970-01-01 00:00:00.000000000 +0000 @@ -1,6 +0,0 @@ -#!/bin/sh -rm -rf /usr/share/backintime/gnome/*.pyc -rm -rf /usr/share/backintime/plugins/gnome*.pyc -exit 0 - -#DEBHELPER# diff -Nru backintime-1.0.36/gnome/debian_specific/rules backintime-1.1.12/gnome/debian_specific/rules --- backintime-1.0.36/gnome/debian_specific/rules 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/gnome/debian_specific/rules 1970-01-01 00:00:00.000000000 +0000 @@ -1,70 +0,0 @@ -#!/usr/bin/make -f - -package = backintime-gnome - -clean: - dh_testdir - dh_clean - rm -f build - -install: build - #install python - #dh_installdirs /usr/share/backintime/gnome - dh_install *.py /usr/share/backintime/gnome - dh_install *.glade /usr/share/backintime/gnome - - #install plugin - #dh_installdirs /usr/share/backintime/plugins - dh_install plugins/*.py /usr/share/backintime/plugins - - #install copyright file - #dh_installdirs /usr/share/doc/backintime-gnome - dh_install debian/copyright /usr/share/doc/backintime-gnome - - #install man file(s) - #dh_installdirs /usr/share/man/man1 - dh_install man/C/*.gz /usr/share/man/man1 - - #install application - #dh_installdirs /usr/bin - dh_install backintime-gnome /usr/bin - - #install .desktop file(s) - #dh_installdirs /usr/share/applications - dh_install *.desktop /usr/share/applications - - #install gnome-help file(s) - #dh_installdirs /usr/share/gnome/help/backintime/C/figures - dh_install docbook/C/*.xml /usr/share/gnome/help/backintime/C - #dh_install docbook/C/figures/*.png /usr/share/gnome/help/backintime/C/figures - - #dh_installdirs /usr/share/omf/backintime - dh_install docbook/C/*.omf /usr/share/omf/backintime - -build: - touch build - -build-arch: build - -build-indep: build - -binary-indep: install - dh_testdir -i - dh_testroot -i - #dh_installdocs -i NEWS - #dh_installchangelogs -i ChangeLog - #dh_strip -i - #dh_compress -i - dh_fixperms -i - dh_installdeb -i - #dh_shlibdeps -i - dh_gencontrol -i - dh_md5sums -i - dh_builddeb -i - -binary-arch: install - -binary: binary-indep - -.PHONY: binary binary-arch binary-indep clean - diff -Nru backintime-1.0.36/gnome/debian_specific/source/format backintime-1.1.12/gnome/debian_specific/source/format --- backintime-1.0.36/gnome/debian_specific/source/format 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/gnome/debian_specific/source/format 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -1.0 diff -Nru backintime-1.0.36/gnome/docbook/C/backintime-C.omf backintime-1.1.12/gnome/docbook/C/backintime-C.omf --- backintime-1.0.36/gnome/docbook/C/backintime-C.omf 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/gnome/docbook/C/backintime-C.omf 1970-01-01 00:00:00.000000000 +0000 @@ -1,20 +0,0 @@ - - - - (BIT Team) - (BIT Team) - Back In Time Manual - July 2010 - - - - Back In Time is a simple backup system for GNOME desktop. - - user's guide - - - - - - - diff -Nru backintime-1.0.36/gnome/docbook/C/backintime.xml backintime-1.1.12/gnome/docbook/C/backintime.xml --- backintime-1.0.36/gnome/docbook/C/backintime.xml 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/gnome/docbook/C/backintime.xml 1970-01-01 00:00:00.000000000 +0000 @@ -1,144 +0,0 @@ - - - -&appname;"> - - - -]> - - -
- - &app; Manual - - &app; is a simple backup tool for GNOME desktop. - - - - 2008 - Oprea Dan, Bart de Koning, Richard Bailey - - - - - Oprea Dan, Bart de Koning, Richard Bailey - - - - - - - - - - - - - - - - - - - - Back In Time Manual V&manrevision; - &date; - - BIT Team - - - BIT Team - - - - - - This manual describes version &appversion; of Back In Time. - - - Feedback - To report a bug or make a suggestion regarding the &app; application or - this manual, send an email to: - bit-team@lists.launchpad.net. - - - - - - - - - - Back In Time - &app; is a simple backup tool for Linux (this is Gnome version). The backup is done by taking snapshots of - a specified set of folders. - All you have to do is: - - configure where to save snapshots - cofigure what folders to backup - schedule automatic backup: disabled, every 5 minutes, every 10 minutes, every hour, every day, every week, every month - - &app; acts as a "user mode" backup tool. This means that you can backup/restore only folders - you have write access to (actually you can backup read-only folders, but you can't restore them). - If you want to run it as root you need to use "su" (command line), "gksu" (Gnome) or "kdesudo" (KDE). - A new snapshot is created only if something changed since the last snapshot (if any). - A snapshot contains all the files from the selected folders (except for exclude patterns). - In order to reduce disk space it use hard-links (if possible) between snapshots for unchanged files. - This way a file of 10Mb, unchanged for 10 snapshots, will use only 10Mb on the disk. - When you restore a file 'A', if it already exists on the file system it will be renamed to - 'A.backup.currentdate'. - This documentation is not maintained (at least for the moment), please use on-line documentation: - http://backintime.le-web.org/documentation - - - - - - About &app; - &app; was written by Oprea Dan - (dan@le-web.org), Bart de Koning (bratdaking@gmail.com), - Richard Bailey (rmjb@mail.com). To find more information about - &app;, please visit the - Back In Time Web - page. - - To report a bug or make a suggestion regarding this application or - this manual, sent a mail to - bit-team@lists.launchpad.net. - - - This program is distributed under the terms of the GNU - General Public license version 2 as published by the Free Software - Foundation. A copy of this license can be found in the file - LICENSE included with the source code of this program. - - -
diff -Nru backintime-1.0.36/gnome/docbook/C/legal.xml backintime-1.1.12/gnome/docbook/C/legal.xml --- backintime-1.0.36/gnome/docbook/C/legal.xml 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/gnome/docbook/C/legal.xml 1970-01-01 00:00:00.000000000 +0000 @@ -1,76 +0,0 @@ - - - Permission is granted to copy, distribute and/or modify this - document under the terms of the GNU Free Documentation - License (GFDL), Version 1.1 or any later version published - by the Free Software Foundation with no Invariant Sections, - no Front-Cover Texts, and no Back-Cover Texts. You can find - a copy of the GFDL at this link or in the file COPYING-DOCS - distributed with this manual. - - This manual is part of a collection of GNOME manuals - distributed under the GFDL. If you want to distribute this - manual separately from the collection, you can do so by - adding a copy of the license to the manual, as described in - section 6 of the license. - - - - Many of the names used by companies to distinguish their - products and services are claimed as trademarks. Where those - names appear in any GNOME documentation, and the members of - the GNOME Documentation Project are made aware of those - trademarks, then the names are in capital letters or initial - capital letters. - - - - DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT ARE PROVIDED - UNDER THE TERMS OF THE GNU FREE DOCUMENTATION LICENSE - WITH THE FURTHER UNDERSTANDING THAT: - - - - DOCUMENT IS PROVIDED ON AN "AS IS" BASIS, - WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR - IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES - THAT THE DOCUMENT OR MODIFIED VERSION OF THE - DOCUMENT IS FREE OF DEFECTS MERCHANTABLE, FIT FOR - A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE - RISK AS TO THE QUALITY, ACCURACY, AND PERFORMANCE - OF THE DOCUMENT OR MODIFIED VERSION OF THE - DOCUMENT IS WITH YOU. SHOULD ANY DOCUMENT OR - MODIFIED VERSION PROVE DEFECTIVE IN ANY RESPECT, - YOU (NOT THE INITIAL WRITER, AUTHOR OR ANY - CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY - SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER - OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS - LICENSE. NO USE OF ANY DOCUMENT OR MODIFIED - VERSION OF THE DOCUMENT IS AUTHORIZED HEREUNDER - EXCEPT UNDER THIS DISCLAIMER; AND - - - - UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL - THEORY, WHETHER IN TORT (INCLUDING NEGLIGENCE), - CONTRACT, OR OTHERWISE, SHALL THE AUTHOR, - INITIAL WRITER, ANY CONTRIBUTOR, OR ANY - DISTRIBUTOR OF THE DOCUMENT OR MODIFIED VERSION - OF THE DOCUMENT, OR ANY SUPPLIER OF ANY OF SUCH - PARTIES, BE LIABLE TO ANY PERSON FOR ANY - DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR - CONSEQUENTIAL DAMAGES OF ANY CHARACTER - INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS - OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR - MALFUNCTION, OR ANY AND ALL OTHER DAMAGES OR - LOSSES ARISING OUT OF OR RELATING TO USE OF THE - DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT, - EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF - THE POSSIBILITY OF SUCH DAMAGES. - - - - - - diff -Nru backintime-1.0.36/gnome/fileicons.py backintime-1.1.12/gnome/fileicons.py --- backintime-1.0.36/gnome/fileicons.py 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/gnome/fileicons.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,125 +0,0 @@ -# Back In Time -# Copyright (C) 2008-2009 Oprea Dan, Bart de Koning, Richard Bailey -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -import os.path -import pygtk -pygtk.require("2.0") -import gtk -import gnomevfs - - -class GnomeFileIcons: - def __init__( self ): - self.all_icons = gtk.icon_theme_get_default().list_icons() - self.cache = {} - self.user_path = os.path.expanduser( '~' ) - self.special_folders = {} - - self.update_special_folder_icons() - - def add_special_folder_( self, path, icon_name ): - if len( path ) <= 0: - return - - if not icon_name in self.all_icons: - icon_name = 'folder' - - self.special_folders[ path ] = icon_name - - def get_special_folder_path( self, name ): - path = '' - - try: - pipe = os.popen( "cat %s/.config/user-dirs.dirs 2>/dev/null | grep %s=" % ( self.user_path, name ), 'r' ) - path = pipe.read() - pipe.close() - except: - pass - - if len( path ) <= 0: - return '' - - path = path[ len( name ) + 1 : ] - if path[ 0 ] == '"': - path = path[ 1 : -2 ] - - path = path.replace( '$HOME', self.user_path ) - return path - - def update_special_folder_icons( self ): - self.special_folders = {} - - #add desktop - self.add_special_folder_( self.get_special_folder_path( 'XDG_DESKTOP_DIR' ), 'user-desktop' ) - - #add home - self.add_special_folder_( self.user_path, 'user-home' ) - - def get_icon( self, path ): - if not os.path.exists(path): - return gtk.STOCK_FILE - - #check if it is a special folder - if path in self.special_folders: - return self.special_folders[path] - - #get mime type - mime_type = gnomevfs.get_mime_type( gnomevfs.escape_path_string( path ) ) - mime_type = mime_type.replace( '/', '-' ) - - #search in the cache - if mime_type in self.cache: - return self.cache[mime_type] - - #print "path: " + path - #print "mime: " + mime_type - - #try gnome mime - items = mime_type.split('-') - for aux in xrange(len(items)-1): - icon_name = "gnome-mime-" + '-'.join(items[:len(items)-aux]) - if icon_name in self.all_icons: - #print "icon: " + icon_name - self.cache[mime_type] = icon_name - return icon_name - - #try folder - if os.path.isdir( path ): - icon_name = 'folder' - if icon_name in self.all_icons: - #print "icon: " + icon_name - self.cache[mime_type] = icon_name - return icon_name - - #print "icon: " + icon_name - icon_name = gtk.STOCK_DIRECTORY - self.cache[mime_type] = icon_name - return icon_name - - #try simple mime - for aux in xrange(len(items)-1): - icon_name = '-'.join(items[:len(items)-aux]) - if icon_name in self.all_icons: - #print "icon: " + icon_name - self.cache[mime_type] = icon_name - return icon_name - - #file icon - icon_name = gtk.STOCK_FILE - self.cache[mime_type] = icon_name - return icon_name - diff -Nru backintime-1.0.36/gnome/gnometools.py backintime-1.1.12/gnome/gnometools.py --- backintime-1.0.36/gnome/gnometools.py 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/gnome/gnometools.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,84 +0,0 @@ -# Back In Time -# Copyright (C) 2008-2009 Oprea Dan, Bart de Koning, Richard Bailey -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - - -import gtk -import glib -import gettext -import restoredialog -import tools - - -_=gettext.gettext - - -def get_snapshot_display_markup( snapshots, snapshot_id ): - display_name = snapshots.get_snapshot_display_id( snapshot_id ) - - name = snapshots.get_snapshot_name( snapshot_id ) - if len( name ) > 0: - display_name = display_name + ' - ' + glib.markup_escape_text( name ) + '' - - if snapshots.is_snapshot_failed( snapshot_id ): - display_name = display_name + " (%s)" % _("WITH ERRORS !") - - return display_name - - -def run_gtk_update_loop(): - gtk.gdk.window_process_all_updates() - - while gtk.events_pending(): - gtk.main_iteration( False ) - - -def new_menu_item(icon, label, callback): - menu_item = gtk.ImageMenuItem() - menu_item.set_label(label) - - if isinstance(icon, str): - icon = gtk.image_new_from_stock( icon, gtk.ICON_SIZE_MENU ) - - if not icon is None: - menu_item.set_image(icon) - - menu_item.connect( 'activate', callback ) - return menu_item - - -def restore(parent, snapshot_id, path, ask_where = False): - where = '' - if ask_where: - where = None - fcd = gtk.FileChooserDialog( _('Restore to ...'), parent.window, gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER, (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_OK) ) - if gtk.RESPONSE_OK == fcd.run(): - where = tools.prepare_path( fcd.get_filename() ) - fcd.destroy() - if where is None: - return - - print("Where: %s" % where) - restoredialog.restore(parent, snapshot_id, path, where ) - -def equal_indent(*args): - width = 0 - for widget in args: - widget.set_size_request(-1, -1) - width = max(width, widget.size_request()[0] ) - if len(args) > 1: - for widget in args: - widget.set_size_request(width, -1) diff -Nru backintime-1.0.36/gnome/logviewdialog.glade backintime-1.1.12/gnome/logviewdialog.glade --- backintime-1.0.36/gnome/logviewdialog.glade 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/gnome/logviewdialog.glade 1970-01-01 00:00:00.000000000 +0000 @@ -1,222 +0,0 @@ - - - - - 600 - 500 - False - 5 - Log View - True - center-on-parent - gtk-edit - dialog - True - True - - - 600 - 500 - True - False - vertical - 2 - - - True - False - end - - - gtk-close - True - True - True - True - True - False - True - - - False - False - 0 - - - - - False - True - end - 0 - - - - - True - False - 5 - - - True - False - 5 - - - True - False - 5 - - - True - False - Profile: - - - False - True - 0 - - - - - True - False - - - - True - True - 1 - - - - - True - True - 5 - 0 - - - - - True - False - 5 - - - True - False - Filter: - - - False - True - 0 - - - - - True - False - - - - True - True - 1 - - - - - True - True - 5 - 1 - - - - - False - True - 0 - - - - - True - True - in - - - True - True - False - - - - - True - True - 1 - - - - - True - False - 0 - [E] Error, [I] Information, [C] Change - - - False - True - 2 - - - - - scroll down automatic - False - True - False - False - True - - - - False - True - 3 - - - - - decode paths - False - True - False - False - True - - - - False - True - 4 - - - - - True - True - 1 - - - - - - button3 - - - diff -Nru backintime-1.0.36/gnome/logviewdialog.py backintime-1.1.12/gnome/logviewdialog.py --- backintime-1.0.36/gnome/logviewdialog.py 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/gnome/logviewdialog.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,188 +0,0 @@ -# Back In Time -# Copyright (C) 2008-2009 Oprea Dan -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - - -import os -import os.path -import sys -import copy -import pygtk -pygtk.require("2.0") -import gtk -import gobject -import datetime -import gettext - -import config -import snapshots -import tools -import encfstools - - -_=gettext.gettext - - -class LogViewDialog(object): - - def __init__( self, parent, snapshot_id = None ): - self.parent = parent - self.config = parent.config - self.snapshots = parent.snapshots - self.profile_id = self.config.get_current_profile() - self.snapshot_id = snapshot_id - self.decode = None - - builder = gtk.Builder() - self.builder = builder - self.builder.set_translation_domain('backintime') - - glade_file = os.path.join(self.config.get_app_path(), 'gnome', 'logviewdialog.glade') - - builder.add_from_file(glade_file) - - get = builder.get_object - - self.dialog = get('LogViewDialog') - self.dialog.set_transient_for( parent.window ) - - signals = { - 'on_combo_profiles_changed': self.on_combo_profiles_changed, - 'on_combo_filter_changed': self.on_combo_filter_changed, - 'on_cb_auto_scroll_toggled': self.dummy_handler, - 'on_cb_decode_toggled': self.on_cb_decode - } - - builder.connect_signals(signals) - - #hide unused - get('cb_auto_scroll').hide() - - #decode paths - self.cb_decode = get('cb_decode') - if self.config.get_snapshots_mode() == 'ssh_encfs': - self.cb_decode.show() - else: - self.cb_decode.hide() - - #log view - self.txt_log_view = get( 'txt_log_view' ) - - #profiles - self.hbox_profiles = get( 'hbox_profiles' ) - - self.store_profiles = gtk.ListStore( str, str ) - self.combo_profiles = get( 'combo_profiles' ) - - text_renderer = gtk.CellRendererText() - self.combo_profiles.pack_start( text_renderer, True ) - self.combo_profiles.add_attribute( text_renderer, 'text', 0 ) - - self.combo_profiles.set_model( self.store_profiles ) - - #filter - self.store_filter = gtk.ListStore( str, int ) - self.combo_filter = get( 'combo_filter' ) - - text_renderer = gtk.CellRendererText() - self.combo_filter.pack_start( text_renderer, True ) - self.combo_filter.add_attribute( text_renderer, 'text', 0 ) - - self.combo_filter.set_model( self.store_filter ) - - self.store_filter.append( [ _('All'), 0 ] ) - select_iter = self.store_filter.append( [ _('Errors'), 1 ] ) - set_active = True - if self.snapshot_id is None or self.snapshots.is_snapshot_failed( self.snapshot_id ): - self.combo_filter.set_active_iter( select_iter ) - set_active = False - select_iter = self.store_filter.append( [ _('Changes'), 2 ] ) - if not self.snapshot_id is None and set_active: - self.combo_filter.set_active_iter( select_iter ) - self.store_filter.append( [ _('Informations'), 3 ] ) - - #update title - if not snapshot_id is None: - self.hbox_profiles.hide() - self.dialog.set_title( "%s (%s)" % ( self.dialog.get_title(), self.snapshots.get_snapshot_display_name( self.snapshot_id ) ) ) - - self.update_profiles() - - def on_cb_decode(self, *args): - if self.cb_decode.get_active(): - self.decode = encfstools.Decode(self.config) - else: - if not self.decode is None: - self.decode.close() - self.decode = None - self.update_log_view() - - def dummy_handler(self, *args): - pass - - def on_combo_profiles_changed( self, *params ): - iter = self.combo_profiles.get_active_iter() - if iter is None: - return - - profile_id = self.store_profiles.get_value( iter, 1 ) - if profile_id != self.profile_id: - self.profile_id = profile_id - - self.update_log_view() - - def on_combo_filter_changed( self, *params ): - self.update_log_view() - - def update_profiles( self ): - profiles = self.config.get_profiles_sorted_by_name() - - select_iter = None - self.store_profiles.clear() - - counter = 0 - for profile_id in profiles: - counter = counter + 1 - iter = self.store_profiles.append( [ self.config.get_profile_name( profile_id ), profile_id ] ) - if profile_id == self.profile_id: - select_iter = iter - - if not select_iter is None: - self.combo_profiles.set_active_iter( select_iter ) - - if counter <= 1: - self.hbox_profiles.hide() - - self.update_log_view() - - def update_log_view( self ): - mode = 0 - iter = self.combo_filter.get_active_iter() - if not iter is None: - mode = self.store_filter.get_value( iter, 1 ) - - if self.snapshot_id is None: - self.txt_log_view.get_buffer().set_text( self.snapshots.get_take_snapshot_log( mode, self.profile_id, decode = self.decode ) ) - else: - self.txt_log_view.get_buffer().set_text( self.snapshots.get_snapshot_log( self.snapshot_id, mode, decode = self.decode ) ) - - def run( self ): - self.dialog.run() - if not self.decode is None: - self.decode.close() - self.dialog.destroy() - - diff -Nru backintime-1.0.36/gnome/mainwindow.glade backintime-1.1.12/gnome/mainwindow.glade --- backintime-1.0.36/gnome/mainwindow.glade 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/gnome/mainwindow.glade 1970-01-01 00:00:00.000000000 +0000 @@ -1,518 +0,0 @@ - - - - - - False - Back In Time - center - gtk-save - - - - - - True - False - - - True - False - - - True - False - False - - - True - False - - - - - - False - True - - - - - True - False - Take snapshot - False - Backup Now - gtk-save - - - - False - True - - - - - True - False - Refresh snapshots list - False - Refresh snapshots list - gtk-refresh - - - - False - True - - - - - True - False - Snapshot Name - False - Snapshot Name - gtk-edit - - - - False - True - - - - - True - False - Remove Snapshot - False - Remove Snapshot - gtk-delete - - - - False - True - - - - - True - False - View Snapshot Log - False - View Snapshot Log - True - gtk-file - - - - False - True - - - - - True - False - View Last Log - False - View Last Log - True - gtk-new - - - - False - True - - - - - True - False - - - False - - - - - True - False - Settings - False - Settings - gtk-preferences - - - - False - True - - - - - True - False - - - False - - - - - True - False - True - Shutdown system after snapshot has finished. - False - Shutdown - gnome-shutdown - - - - False - True - - - - - True - False - Exit - False - Exit - gtk-close - - - - False - True - - - - - True - False - False - - - - - - True - False - - - - - True - False - - - False - True - - - - - True - False - Website - False - Help - gtk-help - - - - False - True - - - - - False - True - 0 - - - - - True - True - - - 200 - True - True - automatic - automatic - in - - - True - True - 0 - - - - - - False - True - - - - - True - False - 3 - 0 - - - True - False - 5 - - - True - False - - - True - False - True - Parent folder - False - Up - gtk-go-up - - - - False - True - - - - - True - False - False - - - True - True - False - - False - False - True - True - - - - - False - - - - - True - False - True - Show hidden files - False - Hidden files - gtk-add - - - - False - True - - - - - True - False - - - False - - - - - True - False - True - Restore - False - Restore - gtk-undelete - - - - False - True - - - - - True - False - True - Snapshots - False - Snapshots - gtk-index - - - - False - True - - - - - False - True - 0 - - - - - True - True - - - 200 - True - True - automatic - automatic - in - - - True - True - 0 - - - - - - False - True - - - - - True - False - True - - - 350 - 400 - True - True - automatic - automatic - in - - - True - True - - - - - - - - - - True - True - 0 - - - - - False - 0 - in - - - True - False - <b>This folder doesn't exist -in the current snapshot !</b> - True - center - - - - - - - - True - True - 1 - - - - - True - True - - - - - True - True - 1 - - - - - - - True - False - True - - - - - True - True - - - - - True - True - 1 - - - - - True - False - 5 - - - False - True - end - 2 - - - - - - diff -Nru backintime-1.0.36/gnome/makedeb-src.sh backintime-1.1.12/gnome/makedeb-src.sh --- backintime-1.0.36/gnome/makedeb-src.sh 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/gnome/makedeb-src.sh 1970-01-01 00:00:00.000000000 +0000 @@ -1,61 +0,0 @@ -#!/bin/bash - -if [ -z $1 ]; then - echo "ERROR: You need to specify the install dir" - exit 1 -fi - -VERSION=`cat ../VERSION` - -DEST=$1 - -mkdir -p $DEST/debian/source -mkdir -p $DEST/man/C -mkdir -p $DEST/doc -mkdir -p $DEST/docbook -mkdir -p $DEST/plugins - -#app -cp backintime-gnome $DEST/ - -#python files -cp *.py $DEST/ - -#glade files -cp *.glade $DEST/ - -#desktop files -cp *.desktop $DEST/ - -#plugins -cp plugins/*.py $DEST/plugins - -#man pages -gzip --best -c man/C/backintime-gnome.1 >$DEST/man/C/backintime-gnome.1.gz - -#docbook -cp -R docbook/* $DEST/docbook - -#doc files -cp ../AUTHORS $DEST/doc -cp ../LICENSE $DEST/doc -cp ../README $DEST/doc -cp ../TRANSLATIONS $DEST/doc -cp ../VERSION $DEST/doc -cp ../CHANGES $DEST/doc - -#debian: copyright -cp ../common/debian_specific/copyright $DEST/debian - -#debian: postrm -cp debian_specific/postrm $DEST/debian - -#debian: rules -cp debian_specific/rules $DEST/debian - -#debian: dpkg-source format -cp debian_specific/source/format $DEST/debian/source - -#debian: compatibility level -cp debian_specific/compat $DEST/debian - diff -Nru backintime-1.0.36/gnome/Makefile.template backintime-1.1.12/gnome/Makefile.template --- backintime-1.0.36/gnome/Makefile.template 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/gnome/Makefile.template 1970-01-01 00:00:00.000000000 +0000 @@ -1,43 +0,0 @@ -PREFIX=/usr -DEST=$(DESTDIR)$(PREFIX) - -all: - -clean: - -install: - #install python - install -d $(DEST)/share/backintime/gnome - install --mode=644 *.py $(DEST)/share/backintime/gnome - install --mode=644 *.glade $(DEST)/share/backintime/gnome - - #install plugin - install -d $(DEST)/share/backintime/plugins - install --mode=644 plugins/*.py $(DEST)/share/backintime/plugins - - #install copyright file - install -d $(DEST)/share/doc/backintime-gnome - install --mode=644 ../common/debian_specific/copyright $(DEST)/share/doc/backintime-gnome - - #install man file(s) - for i in $$(ls -1 man/C/); do case $$i in *.gz|*~) continue;; *) gzip --best -c man/C/$$i > man/C/$${i}.gz;; esac; done - install -d $(DEST)/share/man/man1 - install --mode=644 man/C/*.gz $(DEST)/share/man/man1 - - #install application - install -d $(DEST)/bin - install backintime-gnome $(DEST)/bin - - #install .desktop file(s) - install -d $(DEST)/share/applications - install --mode=644 *.desktop $(DEST)/share/applications - - #install gnome-help file(s) - #install -d $(DEST)/share/gnome/help/backintime/C/figures - install -d $(DEST)/share/gnome/help/backintime/C - install --mode=644 docbook/C/*.xml $(DEST)/share/gnome/help/backintime/C - #install --mode=644 docbook/C/figures/*.png $(DEST)/share/gnome/help/backintime/C/figures - - install -d $(DEST)/share/omf/backintime - install --mode=644 docbook/C/*.omf $(DEST)/share/omf/backintime - diff -Nru backintime-1.0.36/gnome/man/C/backintime-gnome.1 backintime-1.1.12/gnome/man/C/backintime-gnome.1 --- backintime-1.0.36/gnome/man/C/backintime-gnome.1 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/gnome/man/C/backintime-gnome.1 1970-01-01 00:00:00.000000000 +0000 @@ -1,97 +0,0 @@ -.TH backintime-gnome 1 "Oct 2013" "version 1.0.36" "USER COMMANDS" -.SH NAME -backintime-gnome \- a simple backup tool for Gnome. -.SH SYNOPSIS -.B backintime-gnome -[ \-\-profile | -\-\-profile\-id ] -[ \-\-keep\-mount ] -[ \-\-quiet ] -[ \-\-config PATH ] -[ \-\-checksum ] -[ \-\-backup | \-\-backup\-job | -\-\-snapshots\-path | -\-\-snapshots\-list | \-\-snapshots\-list\-path | -\-\-last\-snapshot | \-\-last\-snapshot\-path | -\-\-unmount | -\-\-benchmark-cipher [SIZE] | -\-\-pw\-cache [start|stop|restart|reload|status] | -\-\-decode [PATH] | -\-\-restore [WHAT [WHERE [SNAPSHOT_ID]]] | -\-\-help | \-\-version | \-\-license ] -.SH DESCRIPTION -Back In Time is a simple backup tool for Linux. This is the Gnome version. -For more information about Back In Time see backintime man page. -.PP -If you want to run it as root you need to use 'gksu'. -.SH OPTIONS (use these before other actions) -.TP -\-\-profile -select profile by name -.TP -\-\-profile\-id -select profile by id -.TP -\-\-keep\-mount -Don't unmount on exit. Only valid with \-\-snapshots\-list\-path and \-\-last\-snapshot\-path. -.TP -\-\-quiet -suppress status messages on standard output. -.TP -\-\-config PATH -read config from PATH. -.TP -\-\-checksum -force to use checksum for checking if files have been changed. This is the same as 'Use checksum to detect changes' in Options. But you can use this to periodically run checksums from cronjobs. -.SH ACTIONS -.TP -\-b, \-\-backup -take a snapshot now (if needed) -.TP -\-\-backup\-job -take a snapshot (if needed) depending on schedule rules (used for cron jobs) -.TP -\-\-snapshots\-path -display path where is saves the snapshots (if configured) -.TP -\-\-snapshots\-list -display the list of snapshot IDs (if any) -.TP -\-\-snapshots\-list\-path -display the paths to snapshots (if any) -.TP -\-\-last\-snapshot -display last snapshot ID (if any) -.TP -\-\-last\-snapshot\-path -display the path to the last snapshot (if any) -.TP - \-\-unmount -Unmount the profile. -.TP -\-\-benchmark-cipher [SIZE] -Show a benchmark of all ciphers for ssh transfer. -.TP -\-\-pw\-cache [start|stop|restart|reload|status] -Control the Password Cache Daemon. If no argument is given the Password Cache will start in foreground. -.TP -\-\-decode [PATH] -decode encrypted PATH. If no PATH is given Backintime will read paths from standard input. -.TP -\-\-restore [WHAT [WHERE [SNAPSHOT_ID]]] -Restore file WHAT to path WHERE from snapshot SNAPSHOT_ID. If arguments are missing they will be prompted. To restore to the original path WHERE can be an empty string '' or just press Enter at the prompt. SNAPSHOT_ID can be an index (starting with 0 for the last snapshot) or the exact SnapshotID (19 caracters like '20130606-230501-984') -.TP -\-h, \-\-help -display a short help -.TP -\-v, \-\-version -show version -.TP -\-\-license -show license -.SH SEE ALSO -backintime, backintime-kde4, backintime-config. -.PP -Back In Time also has a website: http://backintime.le\-web.org -.SH AUTHOR -This manual page was written by BIT Team(). diff -Nru backintime-1.0.36/gnome/messagebox.py backintime-1.1.12/gnome/messagebox.py --- backintime-1.0.36/gnome/messagebox.py 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/gnome/messagebox.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,96 +0,0 @@ -# Back In Time -# Copyright (C) 2008-2009 Oprea Dan, Bart de Koning, Richard Bailey -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - - -import os -import os.path - -import pygtk -pygtk.require("2.0") -import gtk -import gettext -import gobject - -import config - - -_=gettext.gettext - - -def show_question( parent, config, message ): - dialog = gtk.MessageDialog( parent, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_QUESTION, gtk.BUTTONS_YES_NO ) - dialog.set_markup( message ) - dialog.set_title( config.APP_NAME ) - retVal = dialog.run() - dialog.destroy() - return retVal - -def show_error( parent, config, message ): - dialog = gtk.MessageDialog( parent, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_ERROR, gtk.BUTTONS_OK ) - dialog.set_markup( message ) - dialog.set_title( config.APP_NAME ) - retVal = dialog.run() - dialog.destroy() - return retVal - -def text_input_dialog( parent, config, title, default_value = '', prompt = None, hide_input = False , timeout = None): - - builder = gtk.Builder() - builder.set_translation_domain('backintime') - - glade_file = os.path.join(config.get_app_path(), 'gnome', - 'textinputdialog.glade') - - builder.add_from_file(glade_file) - - dialog = builder.get_object( 'TextInputDialog' ) - dialog.set_title( title ) - if not parent is None: - dialog.set_transient_for( parent ) - - prompt_text = builder.get_object('prompt_text') - if not prompt is None: - prompt_text.set_text(prompt) - prompt_text.set_visible(True) - - edit = builder.get_object( 'edit_text' ) - - if hide_input: - edit.set_visibility(False) - - if not default_value is None: - edit.set_text( default_value ) - - edit.grab_focus() - - if not timeout is None: - gobject.timeout_add(1000 * timeout, dialog.destroy) - - text = None - if gtk.RESPONSE_OK == dialog.run(): - text = edit.get_text() - else: - text = default_value - - dialog.destroy() - return text - -def ask_password_dialog(parent, config, title, prompt, timeout = None): - password = text_input_dialog(parent, config, title, - prompt = prompt, - hide_input = True, timeout = timeout) - return(password) diff -Nru backintime-1.0.36/gnome/plugins/gnomeplugin.py backintime-1.1.12/gnome/plugins/gnomeplugin.py --- backintime-1.0.36/gnome/plugins/gnomeplugin.py 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/gnome/plugins/gnomeplugin.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,148 +0,0 @@ -# Back In Time -# Copyright (C) 2008-2009 Oprea Dan, Bart de Koning, Richard Bailey -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - - -import os -import pluginmanager -import tools -import logger -import threading -import time -import gettext - -_=gettext.gettext - -if len( os.getenv( 'DISPLAY', '' ) ) == 0: - os.putenv( 'DISPLAY', ':0.0' ) - - -class GnomePlugin( pluginmanager.Plugin ): - - class Systray( threading.Thread ): - def __init__( self, snapshots ): - import pygtk - pygtk.require("2.0") - import gtk - import gnome - - threading.Thread.__init__( self ) - self.stop_flag = False - self.snapshots = snapshots - self.config = self.snapshots.config - - gnome_props = { gnome.PARAM_APP_DATADIR : '/usr/share' } - gnome.program_init( 'backintime', self.config.VERSION, properties = gnome_props ) - - def start( self ): - self.stop_flag = False - threading.Thread.start( self ) - - def stop( self ): - self.stop_flag = True - try: - self.join() - except: - pass - - def run( self ): - import gtk - - logger.info( '[GnomePlugin.Systray.run]' ) - - gtk.gdk.threads_init() - display = gtk.gdk.display_get_default() - - if display is None: - logger.info( '[GnomePlugin.Systray.run] display KO' ) - return - - status_icon = None - try: - status_icon = gtk.StatusIcon() - except: - pass - - if status_icon is None: - logger.info( '[GnomePlugin.Systray.run] no status_icon' ) - return - - last_message = None - - status_icon.set_from_stock( gtk.STOCK_SAVE ) - status_icon.set_visible( True ) - - logger.info( '[GnomePlugin.Systray.run] begin loop' ) - - while True: - gtk.main_iteration( False ) - if self.stop_flag: - break - - if not gtk.events_pending(): - message = self.snapshots.get_take_snapshot_message() - if message is None and last_message is None: - message = ( 0, _('Working...') ) - - if not message is None: - if message != last_message: - last_message = message - - status_icon_blinking = False - if last_message[0] != 0: - status_icon_blinking = True - - status_icon.set_blinking( status_icon_blinking ) - status_icon.set_tooltip( last_message[1] ) - - time.sleep( 0.2 ) - - status_icon.set_visible( False ) - gtk.main_iteration( False ) - - logger.info( '[GnomePlugin.Systray.run] end loop' ) - - def __init__( self ): - return - - def init( self, snapshots ): - if not any((tools.process_exists('gnome-settings-daemon'), \ - tools.process_exists('mate-settings-daemon'), \ - tools.process_exists('xfsettingsd') )): - return False - - if not tools.check_x_server(): - return False - - self.systray = None - try: - self.systray = GnomePlugin.Systray( snapshots ) - except: - self.systray = None - - return True - - def is_gui( self ): - return True - - def on_process_begins( self ): - if not self.systray is None: - self.systray.start() - - def on_process_ends( self ): - if not self.systray is None: - self.systray.stop() - diff -Nru backintime-1.0.36/gnome/restoredialog.py backintime-1.1.12/gnome/restoredialog.py --- backintime-1.0.36/gnome/restoredialog.py 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/gnome/restoredialog.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,128 +0,0 @@ -# Back In Time -# Copyright (C) 2008-2009 Oprea Dan -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - - -import os -import os.path -import sys -import copy -import pygtk -pygtk.require("2.0") -import gtk -import gobject -import datetime -import gettext - -import config -import snapshots -import tools -import gnometools - - -_=gettext.gettext - - -def restore( parent, snapshot_id, what, where = '' ): - RestoreDialog(parent, snapshot_id, what, where).run() - - -class RestoreDialog(object): - - def __init__( self, parent, snapshot_id, what, where = '' ): - self.parent = parent - self.config = parent.config - self.snapshots = parent.snapshots - self.snapshot_id = snapshot_id - self.what = what - self.where = where - - self.log_file = self.config.get_restore_log_file() - if os.path.exists(self.log_file): - os.remove(self.log_file) - - builder = gtk.Builder() - self.builder = builder - self.builder.set_translation_domain('backintime') - - glade_file = os.path.join(self.config.get_app_path(), 'gnome', 'logviewdialog.glade') - - builder.add_from_file(glade_file) - - get = builder.get_object - - self.dialog = get('LogViewDialog') - self.dialog.set_transient_for( parent.window ) - - #log view - self.txt_log_view = get( 'txt_log_view' ) - #self.txt_log_view.set_sensitive(False) - - #hide unused items - get('lbl_profile').hide() - get('combo_profiles').hide() - get('lbl_filter').hide() - get('combo_filter').hide() - get('hbox1').hide() - get('label1').hide() - get('cb_decode').hide() - - #update title - self.dialog.set_title( _('Restore') ) - - #disable close - self.btn_close = get('button3') - self.btn_close.set_sensitive(False) - - # - self.buffer = self.txt_log_view.get_buffer() - - #auto scroll - self.cb_auto_scroll = get('cb_auto_scroll') - self.cb_auto_scroll.show() - self.cb_auto_scroll.set_active(True) - - signals = { 'on_cb_auto_scroll_toggled': self.scroll, - 'on_combo_profiles_changed': self.dummy_handler, - 'on_combo_filter_changed': self.dummy_handler, - 'on_cb_decode_toggled': self.dummy_handler - } - builder.connect_signals(signals) - - def dummy_handler(self, *args): - pass - - def scroll(self, *args): - if self.cb_auto_scroll.get_active(): - self.txt_log_view.scroll_to_iter(self.buffer.get_end_iter(), 0) - gnometools.run_gtk_update_loop() - - def callback(self, line, *params ): - end_iter = self.buffer.get_end_iter() - self.buffer.insert(end_iter, line + "\n") - self.scroll() - with open(self.log_file, 'a') as log: - log.write(line + '\n') - - def run( self ): - self.dialog.show() - gnometools.run_gtk_update_loop() - self.snapshots.restore( self.snapshot_id, self.what, self.callback, self.where ) - self.btn_close.set_sensitive(True) - self.dialog.run() - self.dialog.destroy() - - diff -Nru backintime-1.0.36/gnome/settingsdialog.glade backintime-1.1.12/gnome/settingsdialog.glade --- backintime-1.0.36/gnome/settingsdialog.glade 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/gnome/settingsdialog.glade 1970-01-01 00:00:00.000000000 +0000 @@ -1,2453 +0,0 @@ - - - - - False - 5 - Settings - True - center-on-parent - True - gtk-preferences - dialog - - - True - False - vertical - 2 - - - False - end - - - gtk-cancel - False - True - True - True - False - True - - - False - False - 0 - - - - - gtk-ok - False - True - True - True - False - True - - - False - False - 1 - - - - - False - True - end - 0 - - - - - True - False - 5 - - - True - False - Profile: - - - False - True - 0 - - - - - True - False - - - - True - True - 1 - - - - - True - False - 5 - True - - - gtk-edit - False - True - True - True - False - True - - - - False - True - 0 - - - - - gtk-new - False - True - True - True - False - True - - - - False - True - 1 - - - - - gtk-delete - False - True - True - True - False - True - - - - False - True - 2 - - - - - False - True - 2 - - - - - False - True - 1 - - - - - True - False - - - False - True - 2 - - - - - True - True - - - True - False - 5 - 5 - - - True - False - 0 - none - - - True - False - - - True - False - 1 - Mode: - - - False - True - 0 - - - - - True - False - - - - True - True - 1 - - - - - - - False - True - 0 - - - - - False - 0 - none - - - True - False - 12 - - - True - False - - - True - True - False - - False - False - - - True - True - 0 - - - - - False - True - True - True - False - - - - True - False - gtk-directory - - - - - False - True - 1 - - - - - - - - - True - False - <b>Where to save snapshots</b> - True - - - - - False - True - 10 - - - - - False - 0 - none - - - True - False - 12 - - - True - False - 2 - - - True - False - 2 - - - True - False - 1 - Host: - - - False - True - 0 - - - - - True - True - - False - False - - - True - True - 1 - - - - - True - False - 1 - Port: - - - False - True - 2 - - - - - True - True - - False - False - - - True - True - 3 - - - - - True - False - 1 - User: - - - False - True - 4 - - - - - True - True - - False - False - - - True - True - 5 - - - - - True - True - 0 - - - - - True - False - 2 - - - True - False - 1 - Path: - - - False - True - 0 - - - - - True - True - - False - False - - - True - True - 1 - - - - - True - True - 1 - - - - - True - True - - - True - False - 2 - - - True - False - 1 - Cipher: - - - False - True - 0 - - - - - True - False - - - True - True - 1 - - - - - True - False - 1 - Private key: - - - False - True - 2 - - - - - True - True - False - - False - False - - - True - True - 3 - - - - - False - True - True - True - False - - - - True - False - gtk-directory - - - - - False - True - 4 - - - - - - - True - False - Advanced SSH Settings - - - - - True - True - 2 - - - - - - - - - True - False - <b>SSH Settings</b> - True - - - - - False - True - 20 - - - - - False - 0 - none - - - True - False - 12 - - - True - False - 2 - - - True - False - 1 - Host: - - - False - True - 0 - - - - - True - True - - False - False - - - True - True - 1 - - - - - True - False - 1 - Port: - - - False - True - 2 - - - - - True - True - - False - False - - - True - True - 3 - - - - - True - False - 1 - User: - - - False - True - 4 - - - - - True - True - - False - False - - - True - True - 5 - - - - - - - - - True - False - <b>Dummy Settings</b> - True - - - - - False - True - 800 - - - - - False - 0 - none - - - True - False - 12 - - - True - False - 2 - - - True - False - 2 - - - True - False - 1 - Password - True - - - False - True - 0 - - - - - True - True - - False - False - - - True - True - 1 - - - - - True - True - 0 - - - - - True - False - 2 - - - True - False - 1 - Password - True - - - False - True - 0 - - - - - True - True - - False - False - - - True - True - 1 - - - - - True - True - 1 - - - - - Save Password to Keyring - False - True - True - False - False - 0.5 - True - - - False - True - 2 - - - - - Cache Password for Cron (Security issue: root can read password) - False - True - True - False - False - 0.5 - True - - - False - True - 3 - - - - - - - - - True - False - <b>Password</b> - True - - - - - False - True - 850 - - - - - True - False - 0 - none - - - True - True - - - True - False - 12 - - - True - False - 2 - - - Auto Host / User / Profile Id - False - True - True - False - False - 0.5 - True - - - - True - True - 0 - - - - - True - False - 2 - - - True - False - 1 - Host: - 8 - - - False - True - 0 - - - - - True - True - - False - False - - - True - True - 1 - - - - - True - False - 1 - User: - 8 - - - False - True - 2 - - - - - True - True - - False - False - - - True - True - 3 - - - - - True - False - 1 - Profile Id: - 8 - - - False - True - 4 - - - - - True - True - - False - False - - - True - True - 5 - - - - - True - True - 1 - - - - - - - - - True - False - Advanced - - - - - - - False - True - 900 - - - - - True - False - 0 - none - - - True - False - 12 - - - True - False - 5 - 2 - 5 - 4 - - - True - False - - - - 2 - - - - - True - True - 0 - Run Back In Time periodically with anacron. This is useful if the computer is not running regular. - - - 5 - 2 - - - - - True - True - 0 - Run Back In Time as soon as the drive is connected (only once every X days). -You will be prompted for your sudo password. - - - 6 - 2 - - - - - True - False - 1 - 6 - Frequency in days: - - - 7 - GTK_FILL - - - - - True - False - 1 - 6 - Hours: - - - 4 - GTK_FILL - - - - - True - False - 1 - 6 - Hour: - - - 3 - GTK_FILL - - - - - True - False - 1 - 6 - Weekday: - - - 2 - GTK_FILL - - - - - True - False - 1 - 6 - Day: - - - 1 - GTK_FILL - - - - - True - True - adjustment_anacron_period - True - - - 1 - 7 - - - - - True - True - hours seperate by comma ( e.g. 8,12,18,23) or */3 for periodic backups every 3 hours (cron style) - - False - False - - - 1 - 4 - - - - - True - False - - - 1 - 3 - - - - - True - False - - - 1 - 2 - - - - - True - False - - - 1 - 1 - - - - - - - - - True - False - <b>Schedule</b> - True - - - - - False - True - 950 - - - - - True - False - - - True - False - 0 - 0.5 - - - False - True - 0 - - - - - - - - True - True - 1000 - - - - - - - True - False - General - - - False - - - - - True - False - 5 - 5 - - - 300 - 250 - True - True - in - - - True - True - - - - - True - True - 0 - - - - - True - False - 5 - True - - - Add file - False - True - True - True - False - - - - False - True - 0 - - - - - Add folder - False - True - True - True - False - - - - False - True - 1 - - - - - gtk-remove - False - True - True - True - False - True - - - - False - True - 2 - - - - - False - True - 1 - - - - - 1 - - - - - True - False - Include - - - 1 - False - - - - - True - False - 5 - 5 - - - True - False - 0 - <b>Warning:</b> Wildcards ('foo*', '[fF]oo', 'fo?') will be ignored with mode 'SSH encrypted'. -Only separate asterisk are allowed ('foo/*', 'foo/**/bar') - True - - - False - True - 0 - - - - - 180 - 120 - True - True - in - - - True - True - - - - - True - True - 1 - - - - - True - False - 0 - <b>Highly recommended:</b> - True - - - False - True - 2 - - - - - True - False - 0 - label - True - - - False - True - 3 - - - - - True - False - 5 - True - - - gtk-add - False - True - True - True - False - True - - - - False - True - 0 - - - - - Add file - False - True - True - True - False - - - - True - True - 1 - - - - - Add folder - False - True - True - True - False - - - - True - True - 2 - - - - - gtk-remove - False - True - True - True - False - True - - - - False - True - 3 - - - - - False - True - 4 - - - - - 2 - - - - - True - False - Exclude - - - 2 - False - - - - - True - False - vertical - - - True - False - 6 - 3 - 5 - 5 - - - Don't remove named snapshots - False - True - True - False - False - 0 - True - - - 3 - 5 - 6 - GTK_FILL - - - - - True - False - - - 2 - 3 - 1 - 2 - GTK_FILL - - - - - True - False - 0 - % - - - 2 - 3 - 2 - 3 - GTK_FILL - - - - - True - False - - - 2 - 3 - GTK_FILL - - - - - True - True - - True - False - False - adjustment2 - True - - - 1 - 2 - GTK_FILL - - - - - True - True - - True - False - False - adjustment1 - True - - - 1 - 2 - 1 - 2 - GTK_FILL - - - - - True - True - - True - False - False - adjustment_free_inodes - True - - - 1 - 2 - 2 - 3 - GTK_FILL - - - - - Older than: - False - True - True - False - False - 0 - True - - - - GTK_FILL - - - - - If free space is less than: - False - True - True - False - False - 0 - True - - - - 1 - 2 - GTK_FILL - - - - - If free inodes is less than: - False - True - True - False - False - 0 - True - - - - 2 - 3 - GTK_FILL - - - - - Smart remove - False - True - True - False - False - 0 - True - - - 3 - 3 - 4 - GTK_FILL - - - - - True - False - 40 - - - True - False - 5 - 3 - 5 - 2 - - - - - - True - False - 0 - Keep all snapshots for the last - - - - - True - False - 0 - day(s) - - - 2 - 3 - - - - - True - False - 0 - Keep one snapshot per day for the last - - - 1 - 2 - - - - - True - False - 0 - day(s) - - - 2 - 3 - 1 - 2 - - - - - True - False - 0 - Keep one snapshot per week for the last - - - 2 - 3 - - - - - True - False - 0 - week(s) - - - 2 - 3 - 2 - 3 - - - - - True - False - 0 - Keep one snapshot per month for the last - - - 3 - 4 - - - - - True - False - 0 - month(s) - - - 2 - 3 - 3 - 4 - - - - - True - False - 0 - Keep one snapshot per year for all years - - - 2 - 4 - 5 - - - - - True - True - - True - False - False - adjustment3 - True - - - 1 - 2 - GTK_FILL - - - - - True - True - - True - False - False - adjustment4 - True - - - 1 - 2 - 1 - 2 - GTK_FILL - - - - - True - True - - True - False - False - adjustment5 - True - - - 1 - 2 - 2 - 3 - GTK_FILL - - - - - True - True - - True - False - False - adjustment6 - True - - - 1 - 2 - 3 - 4 - GTK_FILL - - - - - - - 3 - 4 - 5 - - - - - False - True - 0 - - - - - - - - 3 - - - - - True - False - Auto-remove - - - 3 - False - - - - - True - False - 5 - 5 - - - Enable notifications - False - True - True - False - False - 0 - True - - - False - True - 0 - - - - - Disable snapshots when on battery - False - True - True - False - True - False - 0 - True - - - False - True - 1 - - - - - Backup files on restore - False - True - True - False - False - 0 - True - - - False - True - 2 - - - - - Continue on errors (keep incomplete snapshots) - False - True - True - False - False - 0 - True - - - False - True - 3 - - - - - Use checksum to detect changes - False - True - True - False - False - 0 - True - - - False - True - 4 - - - - - Full rsync mode. May be faster but: - False - True - True - False - False - 0 - True - - - - False - True - 5 - - - - - True - False - 24 - - - True - False - 0 - - snapshots are no read-only -- destination file-system must support all linux attributes (dates, rights, user, group ...) - - - - - False - True - 6 - - - - - Check for changes (don't take a new snapshot if nothing changed) - False - True - True - False - False - 0 - True - - - False - True - 7 - - - - - True - False - 5 - - - True - False - Log level: - - - False - True - 0 - - - - - True - False - - - True - True - 1 - - - - - False - True - 8 - - - - - 4 - - - - - True - False - Options - - - 4 - False - - - - - True - False - 5 - 5 - - - True - False - <b>Change these options only if you really know what you are doing !</b> - True - - - False - True - 10 - 0 - - - - - Run 'nice' as cron job (default: enabled) - False - True - True - False - False - 0 - True - - - False - True - 10 - - - - - Run 'ionice' as cron job (default: enabled) - False - True - True - False - False - 0 - True - - - False - True - 20 - - - - - Run 'ionice' when taking a manual snapshot (default: disabled) - False - True - True - False - False - 0 - True - - - False - True - 30 - - - - - Run 'nice' on remote host (default: disabled) - False - True - True - False - False - 0 - True - - - False - True - 40 - - - - - Run 'ionice' on remote host (default: disabled) - False - True - True - False - False - 0 - True - - - False - True - 50 - - - - - True - False - 0 - 5 - - - Limit rsync bandwidth usage: - False - True - True - False - False - 0 - True - - - False - True - 0 - - - - - True - True - - 100 - False - False - adjustment_bwlimit - True - - - False - True - 1 - - - - - - KB/sec - True - True - True - - - False - True - 2 - - - - - - False - True - 60 - - - - - Preserve ACL - False - True - True - False - False - 0 - True - - - False - True - 70 - - - - - Preserve extended attributes (xattr) - False - True - True - False - False - 0 - True - - - False - True - 80 - - - - - Copy unsafe links (works only with absolute links) - False - True - True - False - False - 0 - True - - - False - True - 90 - - - - - Copy links (dereference symbolic links) - False - True - True - False - False - 0 - True - - - False - True - 100 - - - - - True - False - - - True - True - 110 - - - - - 5 - - - - - True - False - Expert Options - - - 5 - False - - - - - True - True - 3 - - - - - - btn_cancel - btn_ok - - - - 1 - 1000 - 1 - 1 - - - 1 - 1000 - 1 - 1 - - - 1 - 10000 - 1 - 1 - - - 1 - 10000 - 1 - 1 - - - 1 - 10000 - 1 - 1 - - - 1 - 10000 - 1 - 1 - - - 1 - 10000 - 1 - 1 - - - 1 - 10000 - 1 - 1 - - - 1 - 1000000 - 1 - 100 - - - 1 - 10000 - 1 - 1 - - - 1 - 15 - 1 - 1 - - diff -Nru backintime-1.0.36/gnome/settingsdialog.py backintime-1.1.12/gnome/settingsdialog.py --- backintime-1.0.36/gnome/settingsdialog.py 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/gnome/settingsdialog.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,1286 +0,0 @@ -# Back In Time -# Copyright (C) 2008-2009 Oprea Dan, Bart de Koning, Richard Bailey -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - - -import os -import os.path -import sys -import copy -import pygtk -pygtk.require("2.0") -import gtk -import gobject -import datetime -import gettext -import subprocess - -import config -import messagebox -import tools -import mount -import password -import gnometools - -_=gettext.gettext - - -class SettingsDialog(object): - - def __init__( self, config, snapshots, parent ): - - self.config = config - self.parent = parent - self.snapshots = snapshots - self.profile_id = self.config.get_current_profile() - - builder = gtk.Builder() - self.builder = builder - self.builder.set_translation_domain('backintime') - - glade_file = os.path.join(self.config.get_app_path(), - 'gnome', 'settingsdialog.glade') - - builder.add_from_file(glade_file) - - get = builder.get_object - - self.dialog = get('SettingsDialog') - self.dialog.set_transient_for( parent.window ) - - signals = { - 'on_btn_add_profile_clicked' : self.on_add_profile, - 'on_btn_edit_profile_clicked' : self.on_edit_profile, - 'on_btn_remove_profile_clicked' : self.on_remove_profile, - 'on_btn_add_include_clicked' : self.on_add_include, - 'on_btn_add_include_file_clicked' : self.on_add_include_file, - 'on_btn_remove_include_clicked' : self.on_remove_include, - 'on_btn_add_exclude_clicked' : self.on_add_exclude, - 'on_btn_add_exclude_file_clicked' : self.on_add_exclude_file, - 'on_btn_add_exclude_folder_clicked' : self.on_add_exclude_folder, - 'on_btn_remove_exclude_clicked' : self.on_remove_exclude, - 'on_cb_remove_old_backup_toggled' : self.update_remove_old_backups, - 'on_cb_min_free_space_toggled' : self.update_min_free_space, - 'on_cb_min_free_inodes_toggled' : self.update_min_free_inodes, - #'on_cb_per_directory_schedule_toggled' : self.on_cb_per_directory_schedule_toggled, - 'on_combo_profiles_changed': self.on_combo_profiles_changed, - 'on_btn_where_clicked': self.on_btn_where_clicked, - 'on_cb_backup_mode_changed': self.on_cb_backup_mode_changed, - 'on_cb_auto_host_user_profile_toggled': self.update_host_user_profile, - 'on_combo_modes_changed': self.on_combo_modes_changed, - 'on_btn_ssh_private_key_file_clicked': self.on_btn_ssh_private_key_file_clicked, - 'on_cb_full_rsync_toggled': self.update_check_for_changes - } - - builder.connect_signals(signals) - - #profiles - self.btn_edit_profile = get( 'btn_edit_profile' ) - self.btn_add_profile = get( 'btn_add_profile' ) - self.btn_remove_profile = get( 'btn_remove_profile' ) - - self.disable_combo_changed = True - - self.store_profiles = gtk.ListStore( str, str ) - - self.combo_profiles = get( 'combo_profiles' ) - - text_renderer = gtk.CellRendererText() - self.combo_profiles.pack_start( text_renderer, True ) - self.combo_profiles.add_attribute( text_renderer, 'text', 0 ) - - self.combo_profiles.set_model( self.store_profiles ) - - self.disable_combo_changed = False - - #snapshots mode (local, ssh, ...) - self.store_modes = gtk.ListStore(str, str) - keys = self.config.SNAPSHOT_MODES.keys() - keys.sort() - for key in keys: - self.store_modes.append([self.config.SNAPSHOT_MODES[key][1], key]) - - self.combo_modes = get( 'combo_modes' ) - self.combo_modes.set_model( self.store_modes ) - - self.combo_modes.clear() - text_renderer = gtk.CellRendererText() - self.combo_modes.pack_start( text_renderer, True ) - self.combo_modes.add_attribute( text_renderer, 'text', 0 ) - - self.mode = None - self.mode_local = get('mode_local') - self.mode_ssh = get('mode_ssh') - self.mode_local_encfs = get('mode_local') - self.mode_ssh_encfs = get('mode_ssh') -## self.mode_dummy = get('mode_dummy') - - #set current folder - #self.fcb_where = get( 'fcb_where' ) - #self.fcb_where.set_show_hidden( self.parent.show_hidden_files ) - self.edit_where = get( 'edit_where' ) - - self.cb_auto_host_user_profile = get('cb_auto_host_user_profile') - self.lbl_host = get('lbl_host') - self.txt_host = get('txt_host') - self.lbl_user = get('lbl_user') - self.txt_user = get('txt_user') - self.lbl_profile = get('lbl_profile') - self.txt_profile = get('txt_profile') - - #ssh - self.lbl_ssh_host = get('lbl_ssh_host') - self.txt_ssh_host = get('txt_ssh_host') - self.lbl_ssh_port = get('lbl_ssh_port') - self.txt_ssh_port = get('txt_ssh_port') - self.lbl_ssh_user = get('lbl_ssh_user') - self.txt_ssh_user = get('txt_ssh_user') - self.lbl_ssh_path = get('lbl_ssh_path') - self.txt_ssh_path = get('txt_ssh_path') - self.lbl_private_key_file = get('lbl_ssh_private_key_file') - self.txt_private_key_file = get('txt_ssh_private_key_file') - self.lbl_ssh_cipher = get('lbl_ssh_cipher') - - self.store_ssh_cipher = gtk.ListStore(str, str) - keys = self.config.SSH_CIPHERS.keys() - keys.sort() - for key in keys: - self.store_ssh_cipher.append([self.config.SSH_CIPHERS[key], key]) - - self.combo_ssh_cipher = get( 'combo_ssh_cipher' ) - self.combo_ssh_cipher.set_model( self.store_ssh_cipher ) - - self.combo_ssh_cipher.clear() - text_renderer = gtk.CellRendererText() - self.combo_ssh_cipher.pack_start( text_renderer, True ) - self.combo_ssh_cipher.add_attribute( text_renderer, 'text', 0 ) - gnometools.equal_indent(self.lbl_ssh_host, self.lbl_ssh_path, self.lbl_ssh_cipher) - - #ssh_encfs - self.lbl_ssh_encfs_exclude_warning = get('label_ssh_encfs_exclude_warning') - -## #dummy -## self.txt_dummy_host = get('txt_dummy_host') -## self.txt_dummy_port = get('txt_dummy_port') -## self.txt_dummy_user = get('txt_dummy_user') - - #password - self.frame_password_1 = get('password') - self.lbl_password_1 = get('label_password_1') - self.txt_password_1 = get('txt_password_1') - self.txt_password_1.set_visibility(False) - self.frame_password_2 = get('hbox_password_2') - self.lbl_password_2 = get('label_password_2') - self.txt_password_2 = get('txt_password_2') - self.txt_password_2.set_visibility(False) - self.cb_password_save = get('cb_password_save') - self.cb_password_use_cache = get('cb_password_use_cache') - - self.keyring_supported = tools.keyring_supported() - self.cb_password_save.set_sensitive(self.keyring_supported) - - #automatic backup mode store - self.store_backup_mode = gtk.ListStore( str, int ) - map = self.config.AUTOMATIC_BACKUP_MODES - self.rev_automatic_backup_modes = {} - keys = map.keys() - keys.sort() - for key in keys: - self.rev_automatic_backup_modes[ map[key] ] = key - self.store_backup_mode.append( [ map[key], key ] ) - - #automatic backup time store - self.store_backup_time = gtk.ListStore( str, int ) - for t in xrange( 0, 2400, 100 ): - self.store_backup_time.append( [ datetime.time( t/100, t%100 ).strftime("%H:%M"), t ] ) - - #automatic backup day store - self.store_backup_day = gtk.ListStore( str, int ) - for t in xrange( 1, 29 ): - self.store_backup_day.append( [ str(t), t ] ) - - #automatic backup weekday store - self.store_backup_weekday = gtk.ListStore( str, int ) - for t in xrange( 1, 8 ): - self.store_backup_weekday.append( [ datetime.date(2011, 11, 6 + t).strftime("%A"), t ] ) - - #custom backup time - self.txt_backup_time_custom = get('txt_backup_time_custom') - self.lbl_backup_time_custom = get('lbl_backup_time_custom') - - #per directory schedule - #self.cb_per_directory_schedule = get( 'cb_per_directory_schedule' ) - #self.lbl_schedule = get( 'lbl_schedule' ) - - #setup include folders - self.list_include = get( 'list_include' ) - self.list_include.get_selection().set_mode(gtk.SELECTION_MULTIPLE) - - pix_renderer = gtk.CellRendererPixbuf() - text_renderer = gtk.CellRendererText() - - column = gtk.TreeViewColumn( _('Include files and folders') ) - column.pack_start( pix_renderer, False ) - column.pack_end( text_renderer, True ) - column.add_attribute( pix_renderer, 'stock-id', 1 ) - column.add_attribute( text_renderer, 'markup', 0 ) - self.list_include.append_column( column ) - - #column = gtk.TreeViewColumn( _('Schedule') ) - #combo_renderer = gtk.CellRendererCombo() - #combo_renderer.set_property( 'editable', True ) - #combo_renderer.set_property( 'has-entry', False ) - #combo_renderer.set_property( 'model', self.store_backup_mode ) - #combo_renderer.set_property( 'text-column', 0 ) - #combo_renderer.connect( 'edited', self.on_automatic_backup_mode_changed ) - #column.pack_end( combo_renderer, True ) - #column.add_attribute( combo_renderer, 'text', 2 ) - - #self.include_schedule_column = column - - self.store_include = gtk.ListStore( str, str, int ) #, str, int ) - self.list_include.set_model( self.store_include ) - - #setup exclude patterns - self.list_exclude = get( 'list_exclude' ) - self.list_exclude.get_selection().set_mode(gtk.SELECTION_MULTIPLE) - - pix_renderer = gtk.CellRendererPixbuf() - text_renderer = gtk.CellRendererText() - - column = gtk.TreeViewColumn( _('Exclude patterns, files or folders') ) - column.pack_start( pix_renderer, False ) - column.pack_end( text_renderer, True ) - column.add_attribute( pix_renderer, 'stock-id', 1 ) - column.add_attribute( text_renderer, 'text', 0 ) - self.list_exclude.append_column( column ) - - self.store_exclude = gtk.ListStore( str, str ) - self.list_exclude.set_model( self.store_exclude ) - - exclude = '' - i = 1 - prev_lines = 0 - for ex in self.config.DEFAULT_EXCLUDE: - exclude += ex - if i < len(self.config.DEFAULT_EXCLUDE): - exclude += ', ' - i += 1 - if len(exclude)-prev_lines > 80: - exclude += '\n' - prev_lines += len(exclude) - get( 'lbl_highly_recommended_excluded' ).set_text( exclude ) - - #setup automatic backup mode - self.cb_backup_mode = get( 'cb_backup_mode' ) - self.cb_backup_mode.set_model( self.store_backup_mode ) - - self.cb_backup_mode.clear() - renderer = gtk.CellRendererText() - self.cb_backup_mode.pack_start( renderer, True ) - self.cb_backup_mode.add_attribute( renderer, 'text', 0 ) - - #setup automatic backup time - self.cb_backup_time = get( 'cb_backup_time' ) - self.cb_backup_time.set_model( self.store_backup_time ) - - self.cb_backup_time.clear() - renderer = gtk.CellRendererText() - self.cb_backup_time.pack_start( renderer, True ) - self.cb_backup_time.add_attribute( renderer, 'text', 0 ) - - self.lbl_backup_time = get( 'lbl_backup_time' ) - - #setup automatic backup day - self.cb_backup_day = get( 'cb_backup_day' ) - self.cb_backup_day.set_model( self.store_backup_day ) - - self.cb_backup_day.clear() - renderer = gtk.CellRendererText() - self.cb_backup_day.pack_start( renderer, True ) - self.cb_backup_day.add_attribute( renderer, 'text', 0 ) - - self.lbl_backup_day = get( 'lbl_backup_day' ) - - #setup automatic backup weekday - self.cb_backup_weekday = get( 'cb_backup_weekday' ) - self.cb_backup_weekday.set_model( self.store_backup_weekday ) - - self.cb_backup_weekday.clear() - renderer = gtk.CellRendererText() - self.cb_backup_weekday.pack_start( renderer, True ) - self.cb_backup_weekday.add_attribute( renderer, 'text', 0 ) - - self.lbl_backup_weekday = get( 'lbl_backup_weekday' ) - - self.hbox_backup_time = get( 'hbox_backup_time' ) - - #automatic backup anacron - self.lbl_backup_anacron = get('lbl_backup_anacron') - self.lbl_backup_anacron_period = get('lbl_backup_anacron_period') - self.sb_backup_anacron_period = get('sb_backup_anacron_period') - - #automatic backup udev - self.lbl_backup_udev = get('lbl_backup_udev') - - #setup remove old backups older than - self.edit_remove_old_backup_value = get( 'edit_remove_old_backup_value' ) - self.cb_remove_old_backup_unit = get( 'cb_remove_old_backup_unit' ) - - self.store_remove_old_backup_unit = gtk.ListStore( str, int ) - self.cb_remove_old_backup_unit.set_model( self.store_remove_old_backup_unit ) - - renderer = gtk.CellRendererText() - self.cb_remove_old_backup_unit.pack_start( renderer, True ) - self.cb_remove_old_backup_unit.add_attribute( renderer, 'text', 0 ) - - self.store_remove_old_backup_unit.clear() - map = self.config.REMOVE_OLD_BACKUP_UNITS - keys = map.keys() - keys.sort() - for key in keys: - self.store_remove_old_backup_unit.append( [ map[ key ], key ] ) - - self.cb_remove_old_backup = get( 'cb_remove_old_backup' ) - - #setup min free space - self.edit_min_free_space_value = get( 'edit_min_free_space_value' ) - self.cb_min_free_space_unit = get( 'cb_min_free_space_unit' ) - - self.store_min_free_space_unit = gtk.ListStore( str, int ) - self.cb_min_free_space_unit.set_model( self.store_min_free_space_unit ) - - renderer = gtk.CellRendererText() - self.cb_min_free_space_unit.pack_start( renderer, True ) - self.cb_min_free_space_unit.add_attribute( renderer, 'text', 0 ) - - self.store_min_free_space_unit.clear() - map = self.config.MIN_FREE_SPACE_UNITS - keys = map.keys() - keys.sort() - for key in keys: - self.store_min_free_space_unit.append( [ map[ key ], key ] ) - - self.cb_min_free_space = get( 'cb_min_free_space' ) - - #setup min free inodes - self.edit_min_free_inodes_value = get('edit_min_free_inodes_value') - self.lbl_min_free_inodes_unit = get('lbl_min_free_inodes_unit') - self.cb_min_free_inodes = get('cb_min_free_inodes') - - #don't remove named snapshots - self.cb_dont_remove_named_snapshots = get( 'cb_dont_remove_named_snapshots' ) - - #smart remove - self.cb_smart_remove = get( 'cb_smart_remove' ) - self.edit_keep_all = get( 'edit_keep_all' ) - self.edit_keep_one_per_day = get( 'edit_keep_one_per_day' ) - self.edit_keep_one_per_week = get( 'edit_keep_one_per_week' ) - self.edit_keep_one_per_month= get( 'edit_keep_one_per_month' ) - - #enable notifications - self.cb_enable_notifications = get( 'cb_enable_notifications' ) - self.cb_backup_on_restore = get( 'cb_backup_on_restore' ) - self.cb_continue_on_errors = get( 'cb_continue_on_errors' ) - self.cb_use_checksum = get( 'cb_use_checksum' ) - self.cb_full_rsync = get( 'cb_full_rsync' ) - - #log level - self.store_log_level = gtk.ListStore( int, str ) - self.combo_log_level = get( 'combo_log_level' ) - - text_renderer = gtk.CellRendererText() - self.combo_log_level.pack_start( text_renderer, True ) - self.combo_log_level.add_attribute( text_renderer, 'text', 1 ) - - self.combo_log_level.set_model( self.store_log_level ) - - self.store_log_level.append( [ 0, _('None') ] ) - self.store_log_level.append( [ 1, _('Errors') ] ) - self.store_log_level.append( [ 2, _('Changes & Errors') ] ) - self.store_log_level.append( [ 3, _('All') ] ) - - #nice & ionice - self.cb_run_nice_from_cron = get('cb_run_nice_from_cron') - self.cb_run_ionice_from_cron = get('cb_run_ionice_from_cron') - self.cb_run_ionice_from_user = get('cb_run_ionice_from_user') - self.cb_run_nice_on_remote = get('cb_run_nice_on_remote') - self.cb_run_ionice_on_remote = get('cb_run_ionice_on_remote') - - #bwlimit - self.hbox_bwlimit = get('hbox_bwlimit') - self.cb_bwlimit = get('cb_bwlimit') - self.sb_bwlimit = get('sb_bwlimit') - - self.cb_preserve_acl = get('cb_preserve_acl') - self.cb_preserve_xattr = get('cb_preserve_xattr') - self.cb_copy_unsafe_links = get('cb_copy_unsafe_links') - self.cb_copy_links = get('cb_copy_links') - - #don't run when on battery - self.cb_no_on_battery = get( 'cb_no_on_battery' ) - if not tools.power_status_available (): - self.cb_no_on_battery.set_sensitive( False ) - self.cb_no_on_battery.set_tooltip_text( 'Power status not available from system' ) - - #check for changes - self.cb_check_for_changes = get('cb_check_for_changes') - - self.update_profiles() - - def error_handler( self, message ): - messagebox.show_error( self.dialog, self.config, message ) - - def question_handler( self, message ): - return gtk.RESPONSE_YES == messagebox.show_question( self.dialog, self.config, message ) - - #def on_automatic_backup_mode_changed( self, renderer, path, new_text ): - # iter = self.store_include.get_iter(path) - # self.store_include.set_value( iter, 2, new_text ) - # self.store_include.set_value( iter, 3, self.rev_automatic_backup_modes[new_text] ) - - def on_btn_where_clicked( self, button ): - path = self.edit_where.get_text() - - fcd = gtk.FileChooserDialog( _('Snapshots folder'), self.dialog, gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER, (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_OK) ) - if len( path ) > 0: - fcd.set_filename( path ) - - if fcd.run() == gtk.RESPONSE_OK: - new_path = tools.prepare_path( fcd.get_filename() ) - fcd.destroy() - if len( path ) > 0 and new_path != path: - if not self.question_handler( _('Are you sure you want to change snapshots folder ?') ): - return - self.edit_where.set_text( new_path ) - else: - fcd.destroy() - - def on_btn_ssh_private_key_file_clicked( self, button ): - file = self.txt_private_key_file.get_text() - - fcd = gtk.FileChooserDialog( _('SSH private key'), self.dialog, gtk.FILE_CHOOSER_ACTION_OPEN, (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_OK) ) - if len( file ) > 0: - fcd.set_filename( file ) - else: - fcd.set_filename(self.config.get_ssh_private_key_folder()) - - if fcd.run() == gtk.RESPONSE_OK: - new_file = tools.prepare_path( fcd.get_filename() ) - fcd.destroy() - self.txt_private_key_file.set_text( new_file ) - else: - fcd.destroy() - - def on_cb_backup_mode_changed( self, *params ): - iter = self.cb_backup_mode.get_active_iter() - if iter is None: - return - - backup_mode = self.store_backup_mode.get_value( iter, 1 ) - - if backup_mode >= self.config.DAY: - self.lbl_backup_time.show() - self.cb_backup_time.show() - else: - self.lbl_backup_time.hide() - self.cb_backup_time.hide() - - if backup_mode == self.config.WEEK: - self.lbl_backup_weekday.show() - self.cb_backup_weekday.show() - else: - self.lbl_backup_weekday.hide() - self.cb_backup_weekday.hide() - - if backup_mode == self.config.MONTH: - self.lbl_backup_day.show() - self.cb_backup_day.show() - else: - self.lbl_backup_day.hide() - self.cb_backup_day.hide() - - if backup_mode == self.config.CUSTOM_HOUR: - self.lbl_backup_time_custom.show() - self.txt_backup_time_custom.show() - self.txt_backup_time_custom.set_sensitive( True ) - self.txt_backup_time_custom.set_text( self.config.get_custom_backup_time( self.profile_id ) ) - else: - self.lbl_backup_time_custom.hide() - self.txt_backup_time_custom.hide() - - if self.config.DAY_ANACRON <= backup_mode <= self.config.UDEV: - self.lbl_backup_anacron_period.show() - self.sb_backup_anacron_period.show() - self.lbl_backup_time.hide() - self.cb_backup_time.hide() - else: - self.lbl_backup_anacron_period.hide() - self.sb_backup_anacron_period.hide() - - if backup_mode == self.config.DAY_ANACRON: - self.lbl_backup_anacron.show() - else: - self.lbl_backup_anacron.hide() - - if backup_mode == self.config.UDEV: - self.lbl_backup_udev.show() - else: - self.lbl_backup_udev.hide() - - def update_host_user_profile( self, *params ): - value = not self.cb_auto_host_user_profile.get_active() - self.lbl_host.set_sensitive( value ) - self.txt_host.set_sensitive( value ) - self.lbl_user.set_sensitive( value ) - self.txt_user.set_sensitive( value ) - self.lbl_profile.set_sensitive( value ) - self.txt_profile.set_sensitive( value ) - - def update_check_for_changes(self, *params): - value = not self.cb_full_rsync.get_active() - self.cb_check_for_changes.set_sensitive(value) - - def on_combo_modes_changed(self, *params): - iter = self.combo_modes.get_active_iter() - if iter is None: - return - - active_mode = self.store_modes.get_value( iter, 1 ) - if active_mode != self.mode: - for mode in self.config.SNAPSHOT_MODES.keys(): - getattr(self, 'mode_%s' % mode).hide() - for mode in self.config.SNAPSHOT_MODES.keys(): - if active_mode == mode: - getattr(self, 'mode_%s' % mode).show() - self.mode = active_mode - - if self.config.mode_need_password(active_mode): - self.lbl_password_1.set_text(self.config.SNAPSHOT_MODES[active_mode][2] + ':') - self.frame_password_1.show() - if self.config.mode_need_password(active_mode, 2): - self.lbl_password_2.set_text(self.config.SNAPSHOT_MODES[active_mode][3] + ':') - self.frame_password_2.show() - gnometools.equal_indent(self.lbl_password_1, self.lbl_password_2) - else: - self.frame_password_2.hide() - gnometools.equal_indent(self.lbl_password_1) - else: - self.frame_password_1.hide() - - if active_mode == 'ssh_encfs': - self.lbl_ssh_encfs_exclude_warning.show() - else: - self.lbl_ssh_encfs_exclude_warning.hide() - - sensitive = active_mode in ('ssh', 'ssh_encfs') - self.cb_run_nice_on_remote.set_sensitive(sensitive) - self.cb_run_ionice_on_remote.set_sensitive(sensitive) - self.hbox_bwlimit.set_sensitive(sensitive) - - def on_combo_profiles_changed( self, *params ): - if self.disable_combo_changed: - return - - iter = self.combo_profiles.get_active_iter() - if iter is None: - return - - profile_id = self.store_profiles.get_value( iter, 1 ) - if profile_id != self.profile_id: - self.save_profile() - self.profile_id = profile_id - - self.update_profile() - - def update_profiles( self ): - self.disable_combo_changed = True - - profiles = self.config.get_profiles_sorted_by_name() - - select_iter = None - self.store_profiles.clear() - - for profile_id in profiles: - iter = self.store_profiles.append( [ self.config.get_profile_name( profile_id ), profile_id ] ) - if profile_id == self.profile_id: - select_iter = iter - - self.disable_combo_changed = False - - if not select_iter is None: - self.combo_profiles.set_active_iter( select_iter ) - - def update_profile( self ): - if self.profile_id == '1': - self.btn_edit_profile.set_sensitive( False ) - self.btn_remove_profile.set_sensitive( False ) - else: - self.btn_edit_profile.set_sensitive( True ) - self.btn_remove_profile.set_sensitive( True ) - self.btn_add_profile.set_sensitive(self.config.is_configured('1')) - - #set mode - i = 0 - iter = self.store_modes.get_iter_first() - default_mode = self.config.get_snapshots_mode(self.profile_id) - while not iter is None: - if self.store_modes.get_value( iter, 1 ) == default_mode: - self.combo_modes.set_active( i ) - break - iter = self.store_modes.iter_next( iter ) - i = i + 1 - self.on_combo_modes_changed() - - #set current folder - #self.fcb_where.set_filename( self.config.get_snapshots_path() ) - self.edit_where.set_text( self.config.get_snapshots_path( self.profile_id, mode = 'local' ) ) - self.cb_auto_host_user_profile.set_active( self.config.get_auto_host_user_profile( self.profile_id ) ) - host, user, profile = self.config.get_host_user_profile( self.profile_id ) - self.txt_host.set_text( host ) - self.txt_user.set_text( user ) - self.txt_profile.set_text( profile ) - self.update_host_user_profile() - - #ssh - self.txt_ssh_host.set_text( self.config.get_ssh_host( self.profile_id ) ) - self.txt_ssh_port.set_text( str(self.config.get_ssh_port( self.profile_id )) ) - self.txt_ssh_user.set_text( self.config.get_ssh_user( self.profile_id ) ) - self.txt_ssh_path.set_text( self.config.get_snapshots_path_ssh( self.profile_id ) ) - self.txt_private_key_file.set_text( self.config.get_ssh_private_key_file( self.profile_id ) ) - #set chipher - i = 0 - iter = self.store_ssh_cipher.get_iter_first() - default_mode = self.config.get_ssh_cipher(self.profile_id) - while not iter is None: - if self.store_ssh_cipher.get_value( iter, 1 ) == default_mode: - self.combo_ssh_cipher.set_active( i ) - break - iter = self.store_ssh_cipher.iter_next( iter ) - i = i + 1 - - #local_encfs - if self.mode == 'local_encfs': - self.edit_where.set_text( self.config.get_local_encfs_path( self.profile_id ) ) - -## #dummy -## self.txt_dummy_host.set_text( self.config.get_dummy_host( self.profile_id ) ) -## self.txt_dummy_port.set_text( str(self.config.get_dummy_port( self.profile_id )) ) -## self.txt_dummy_user.set_text( self.config.get_dummy_user( self.profile_id ) ) - - #password - password_1 = self.config.get_password( profile_id = self.profile_id, mode = self.mode, pw_id = 1, only_from_keyring = True ) - password_2 = self.config.get_password( profile_id = self.profile_id, mode = self.mode, pw_id = 2, only_from_keyring = True ) - if password_1 is None: - password_1 = '' - if password_2 is None: - password_2 = '' - self.txt_password_1.set_text(password_1) - self.txt_password_2.set_text(password_2) - self.cb_password_save.set_active( self.keyring_supported and self.config.get_password_save( self.profile_id, self.mode ) ) - self.cb_password_use_cache.set_active( self.config.get_password_use_cache( self.profile_id, self.mode ) ) - - #per directory schedule - #self.cb_per_directory_schedule.set_active( self.config.get_per_directory_schedule() ) - - #setup include folders - #self.update_per_directory_option() - - self.store_include.clear() - include_folders = self.config.get_include( self.profile_id ) - if len( include_folders ) > 0: - for include_folder in include_folders: - if include_folder[1] == 0: - self.store_include.append( [include_folder[0], gtk.STOCK_DIRECTORY, 0] ) #, self.config.AUTOMATIC_BACKUP_MODES[include_folder[1]], include_folder[1] ] ) - else: - self.store_include.append( [include_folder[0], gtk.STOCK_FILE, include_folder[1]] ) #, self.config.AUTOMATIC_BACKUP_MODES[include_folder[1]], include_folder[1] ] ) - - #setup exclude patterns - self.store_exclude.clear() - exclude_patterns = self.config.get_exclude( self.profile_id ) - if len( exclude_patterns ) > 0: - for exclude_pattern in exclude_patterns: - self.store_exclude.append( [exclude_pattern, gtk.STOCK_DELETE] ) - - #setup automatic backup mode - i = 0 - iter = self.store_backup_mode.get_iter_first() - default_mode = self.config.get_automatic_backup_mode( self.profile_id ) - while not iter is None: - if self.store_backup_mode.get_value( iter, 1 ) == default_mode: - self.cb_backup_mode.set_active( i ) - break - iter = self.store_backup_mode.iter_next( iter ) - i = i + 1 - - #setup automatic backup time - i = 0 - iter = self.store_backup_time.get_iter_first() - default_mode = self.config.get_automatic_backup_time( self.profile_id ) - while not iter is None: - if self.store_backup_time.get_value( iter, 1 ) == default_mode: - self.cb_backup_time.set_active( i ) - break - iter = self.store_backup_time.iter_next( iter ) - i = i + 1 - - #setup automatic backup day - i = 0 - iter = self.store_backup_day.get_iter_first() - default_mode = self.config.get_automatic_backup_day( self.profile_id ) - while not iter is None: - if self.store_backup_day.get_value( iter, 1 ) == default_mode: - self.cb_backup_day.set_active( i ) - break - iter = self.store_backup_day.iter_next( iter ) - i = i + 1 - - #setup automatic backup weekday - i = 0 - iter = self.store_backup_weekday.get_iter_first() - default_mode = self.config.get_automatic_backup_weekday( self.profile_id ) - while not iter is None: - if self.store_backup_weekday.get_value( iter, 1 ) == default_mode: - self.cb_backup_weekday.set_active( i ) - break - iter = self.store_backup_weekday.iter_next( iter ) - i = i + 1 - - self.on_cb_backup_mode_changed() - - #setup custom backup time - self.txt_backup_time_custom.set_text( self.config.get_custom_backup_time( self.profile_id ) ) - - #setup automatic backup anacron - self.sb_backup_anacron_period.set_value(self.config.get_automatic_backup_anacron_period(self.profile_id)) - - #setup remove old backups older than - enabled, value, unit = self.config.get_remove_old_snapshots( self.profile_id ) - - self.edit_remove_old_backup_value.set_value( float( value ) ) - - i = 0 - iter = self.store_remove_old_backup_unit.get_iter_first() - while not iter is None: - if self.store_remove_old_backup_unit.get_value( iter, 1 ) == unit: - self.cb_remove_old_backup_unit.set_active( i ) - break - iter = self.store_remove_old_backup_unit.iter_next( iter ) - i = i + 1 - - self.cb_remove_old_backup.set_active( enabled ) - self.update_remove_old_backups( self.cb_remove_old_backup ) - - #setup min free space - enabled, value, unit = self.config.get_min_free_space( self.profile_id ) - - self.edit_min_free_space_value.set_value( float(value) ) - - i = 0 - iter = self.store_min_free_space_unit.get_iter_first() - while not iter is None: - if self.store_min_free_space_unit.get_value( iter, 1 ) == unit: - self.cb_min_free_space_unit.set_active( i ) - break - iter = self.store_min_free_space_unit.iter_next( iter ) - i = i + 1 - - self.cb_min_free_space.set_active( enabled ) - self.update_min_free_space( self.cb_min_free_space ) - - #setup min free inodes - self.cb_min_free_inodes.set_active(self.config.min_free_inodes_enabled(self.profile_id)) - self.edit_min_free_inodes_value.set_value(self.config.min_free_inodes(self.profile_id)) - self.update_min_free_inodes(self.cb_min_free_inodes) - - #don't remove named snapshots - self.cb_dont_remove_named_snapshots.set_active( self.config.get_dont_remove_named_snapshots( self.profile_id ) ) - - #smart remove - smart_remove, keep_all, keep_one_per_day, keep_one_per_week, keep_one_per_month = self.config.get_smart_remove( self.profile_id ) - - self.cb_smart_remove.set_active( smart_remove ) - self.edit_keep_all.set_value( float(keep_all) ) - self.edit_keep_one_per_day.set_value( float(keep_one_per_day) ) - self.edit_keep_one_per_week.set_value( float(keep_one_per_week) ) - self.edit_keep_one_per_month.set_value( float(keep_one_per_month) ) - - #enable notifications - self.cb_enable_notifications.set_active( self.config.is_notify_enabled( self.profile_id ) ) - - #backup on restore - self.cb_backup_on_restore.set_active( self.config.is_backup_on_restore_enabled( self.profile_id ) ) - - #continue on errors - self.cb_continue_on_errors.set_active( self.config.continue_on_errors( self.profile_id ) ) - - #use checksum - self.cb_use_checksum.set_active( self.config.use_checksum( self.profile_id ) ) - - #use checksum - self.cb_full_rsync.set_active( self.config.full_rsync( self.profile_id ) ) - self.update_check_for_changes() - - #log level - self.combo_log_level.set_active( self.config.log_level( self.profile_id ) ) - - #run 'nice' from cron - self.cb_run_nice_from_cron.set_active(self.config.is_run_nice_from_cron_enabled( self.profile_id )) - - #run 'ionice' from cron - self.cb_run_ionice_from_cron.set_active(self.config.is_run_ionice_from_cron_enabled( self.profile_id )) - - #run 'ionice' from user - self.cb_run_ionice_from_user.set_active(self.config.is_run_ionice_from_user_enabled( self.profile_id )) - - #run 'nice' or 'ionice' on remote - self.cb_run_nice_on_remote.set_active(self.config.is_run_nice_on_remote_enabled(self.profile_id)) - self.cb_run_ionice_on_remote.set_active(self.config.is_run_ionice_on_remote_enabled(self.profile_id)) - - #bwlimit - self.cb_bwlimit.set_active(self.config.bwlimit_enabled(self.profile_id) ) - self.sb_bwlimit.set_value(self.config.bwlimit(self.profile_id) ) - - #don't run when on battery - self.cb_no_on_battery.set_active( self.config.is_no_on_battery_enabled( self.profile_id ) ) - - #ACL & xattr - self.cb_preserve_acl.set_active(self.config.preserve_acl( self.profile_id )) - self.cb_preserve_xattr.set_active(self.config.preserve_xattr( self.profile_id )) - self.cb_copy_unsafe_links.set_active(self.config.copy_unsafe_links( self.profile_id )) - self.cb_copy_links.set_active(self.config.copy_links( self.profile_id )) - - #check for changes - self.cb_check_for_changes.set_active( self.config.check_for_changes( self.profile_id ) ) - - def save_profile( self ): - #profile_id = self.config.get_current_profile() - #snapshots path - iter = self.combo_modes.get_active_iter() - mode = self.store_modes.get_value( iter, 1 ) - if self.config.SNAPSHOT_MODES[mode][0] is None: - snapshots_path = self.edit_where.get_text() - else: - snapshots_path = self.config.get_snapshots_path(self.profile_id, mode = mode, tmp_mount = True) - - #hack - if snapshots_path.startswith( '//' ): - snapshots_path = snapshots_path[ 1 : ] - - #include list - include_list = [] - iter = self.store_include.get_iter_first() - while not iter is None: - #include_list.append( ( self.store_include.get_value( iter, 0 ), self.store_include.get_value( iter, 3 ) ) ) - value = self.store_include.get_value( iter, 0 ) - type = self.store_include.get_value( iter, 2 ) - include_list.append( ( value, type ) ) - iter = self.store_include.iter_next( iter ) - - #exclude patterns - exclude_list = [] - iter = self.store_exclude.get_iter_first() - while not iter is None: - exclude_list.append( self.store_exclude.get_value( iter, 0 ) ) - iter = self.store_exclude.iter_next( iter ) - - if self.store_backup_mode.get_value( self.cb_backup_mode.get_active_iter(), 1 ) == self.config.CUSTOM_HOUR: - if not tools.check_cron_pattern(self.txt_backup_time_custom.get_text()): - self.error_handler( _('Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or */3 for periodic backups every 3 hours') ) - return False - - #password - password_1 = self.txt_password_1.get_text() - password_2 = self.txt_password_2.get_text() - - mount_kwargs = {} - - #ssh settings - ssh_host = self.txt_ssh_host.get_text() - ssh_port = self.txt_ssh_port.get_text() - ssh_user = self.txt_ssh_user.get_text() - ssh_path = self.txt_ssh_path.get_text() - ssh_private_key_file = self.txt_private_key_file.get_text() - iter = self.combo_ssh_cipher.get_active_iter() - ssh_cipher = self.store_ssh_cipher.get_value( iter, 1 ) - if mode == 'ssh': - mount_kwargs = {'host': ssh_host, - 'port': int(ssh_port), - 'user': ssh_user, - 'path': ssh_path, - 'cipher': ssh_cipher, - 'private_key_file': ssh_private_key_file, - 'password': password_1 - } - - #local_encfs settings - local_encfs_path = self.edit_where.get_text() - if mode == 'local_encfs': - mount_kwargs = {'path': local_encfs_path, - 'password': password_1 - } - - #ssh_encfs settings - if mode == 'ssh_encfs': - mount_kwargs = {'host': ssh_host, - 'port': int(ssh_port), - 'user': ssh_user, - 'ssh_path': ssh_path, - 'cipher': ssh_cipher, - 'private_key_file': ssh_private_key_file, - 'ssh_password': password_1, - 'encfs_password': password_2 - } - -## #dummy settings -## dummy_host = self.txt_dummy_host.get_text() -## dummy_port = self.txt_dummy_port.get_text() -## dummy_user = self.txt_dummy_user.get_text() -## if mode == 'dummy': -## #values must have exactly the same Type (str, int or bool) -## #as they are set in config or you will run into false-positive -## #HashCollision warnings -## mount_kwargs = {'host': dummy_host, -## 'port': int(dummy_port), -## 'user': dummy_user, -## 'password': password_1 -## } - - if not self.config.SNAPSHOT_MODES[mode][0] is None: - #pre_mount_check - mnt = mount.Mount(cfg = self.config, profile_id = self.profile_id, tmp_mount = True, parent = self.dialog) - try: - mnt.pre_mount_check(mode = mode, first_run = True, **mount_kwargs) - except mount.MountException as ex: - self.error_handler(str(ex)) - return False - - #okay, lets try to mount - try: - hash_id = mnt.mount(mode = mode, check = False, **mount_kwargs) - except mount.MountException as ex: - self.error_handler(str(ex)) - return False - - #check if back folder changed - #if len( self.config.get_snapshots_path() ) > 0 and self.config.get_snapshots_path() != snapshots_path: - # if gtk.RESPONSE_YES != messagebox.show_question( self.dialog, self.config, _('Are you sure you want to change snapshots folder ?') ): - # return False - - #ok let's save to config - self.config.set_auto_host_user_profile( self.cb_auto_host_user_profile.get_active(), self.profile_id ) - self.config.set_host_user_profile( self.txt_host.get_text(), self.txt_user.get_text(), self.txt_profile.get_text(), self.profile_id ) - self.config.set_snapshots_path( snapshots_path, self.profile_id , mode) - - self.config.set_snapshots_mode(mode, self.profile_id) - - #save ssh - self.config.set_ssh_host(ssh_host, self.profile_id) - self.config.set_ssh_port(ssh_port, self.profile_id) - self.config.set_ssh_user(ssh_user, self.profile_id) - self.config.set_snapshots_path_ssh(ssh_path, self.profile_id) - self.config.set_ssh_cipher(ssh_cipher, self.profile_id) - self.config.set_ssh_private_key_file(ssh_private_key_file, self.profile_id) - - #save local_encfs - self.config.set_local_encfs_path(local_encfs_path, self.profile_id) - -## #save dummy -## self.config.set_dummy_host(dummy_host, self.profile_id) -## self.config.set_dummy_port(dummy_port, self.profile_id) -## self.config.set_dummy_user(dummy_user, self.profile_id) - - #save password - self.config.set_password_save(self.cb_password_save.get_active(), self.profile_id, mode) - self.config.set_password_use_cache(self.cb_password_use_cache.get_active(), self.profile_id, mode) - self.config.set_password(password_1, self.profile_id, mode) - self.config.set_password(password_2, self.profile_id, mode, 2) - - #if not msg is None: - # messagebox.show_error( self.dialog, self.config, msg ) - # return False - - self.config.set_include( include_list, self.profile_id ) - self.config.set_exclude( exclude_list, self.profile_id ) - - #global schedule - self.config.set_automatic_backup_mode( self.store_backup_mode.get_value( self.cb_backup_mode.get_active_iter(), 1 ), self.profile_id ) - self.config.set_automatic_backup_time( self.store_backup_time.get_value( self.cb_backup_time.get_active_iter(), 1 ), self.profile_id ) - self.config.set_automatic_backup_day( self.store_backup_day.get_value( self.cb_backup_day.get_active_iter(), 1 ), self.profile_id ) - self.config.set_automatic_backup_weekday( self.store_backup_weekday.get_value( self.cb_backup_weekday.get_active_iter(), 1 ), self.profile_id ) - self.config.set_custom_backup_time( self.txt_backup_time_custom.get_text(), self.profile_id ) - self.config.set_automatic_backup_anacron_period(self.sb_backup_anacron_period.get_value_as_int(), self.profile_id) - - #auto-remove snapshots - self.config.set_remove_old_snapshots( - self.cb_remove_old_backup.get_active(), - int( self.edit_remove_old_backup_value.get_value() ), - self.store_remove_old_backup_unit.get_value( self.cb_remove_old_backup_unit.get_active_iter(), 1 ), - self.profile_id ) - self.config.set_min_free_space( - self.cb_min_free_space.get_active(), - int( self.edit_min_free_space_value.get_value() ), - self.store_min_free_space_unit.get_value( self.cb_min_free_space_unit.get_active_iter(), 1 ), - self.profile_id ) - self.config.set_min_free_inodes( - self.cb_min_free_inodes.get_active(), - int(self.edit_min_free_inodes_value.get_value()), - self.profile_id ) - self.config.set_dont_remove_named_snapshots( self.cb_dont_remove_named_snapshots.get_active(), self.profile_id ) - self.config.set_smart_remove( - self.cb_smart_remove.get_active(), - int( self.edit_keep_all.get_value() ), - int( self.edit_keep_one_per_day.get_value() ), - int( self.edit_keep_one_per_week.get_value() ), - int( self.edit_keep_one_per_month.get_value() ), - self.profile_id ) - - #options - self.config.set_notify_enabled( self.cb_enable_notifications.get_active(), self.profile_id ) - self.config.set_backup_on_restore( self.cb_backup_on_restore.get_active(), self.profile_id ) - self.config.set_continue_on_errors( self.cb_continue_on_errors.get_active(), self.profile_id ) - self.config.set_use_checksum( self.cb_use_checksum.get_active(), self.profile_id ) - self.config.set_full_rsync( self.cb_full_rsync.get_active(), self.profile_id ) - self.config.set_check_for_changes( self.cb_check_for_changes.get_active(), self.profile_id ) - self.config.set_log_level( self.store_log_level.get_value( self.combo_log_level.get_active_iter(), 0 ), self.profile_id ) - - #expert options - #self.config.set_per_directory_schedule( self.cb_per_directory_schedule.get_active() ) - self.config.set_run_nice_from_cron_enabled( self.cb_run_nice_from_cron.get_active(), self.profile_id ) - self.config.set_run_ionice_from_cron_enabled( self.cb_run_ionice_from_cron.get_active(), self.profile_id ) - self.config.set_run_ionice_from_user_enabled( self.cb_run_ionice_from_user.get_active(), self.profile_id ) - self.config.set_run_nice_on_remote_enabled(self.cb_run_nice_on_remote.get_active(), self.profile_id) - self.config.set_run_ionice_on_remote_enabled(self.cb_run_ionice_on_remote.get_active(), self.profile_id) - self.config.set_no_on_battery_enabled( self.cb_no_on_battery.get_active(), self.profile_id ) - - #bwlimit - self.config.set_bwlimit_enabled(self.cb_bwlimit.get_active(), self.profile_id) - self.config.set_bwlimit(self.sb_bwlimit.get_value_as_int(), self.profile_id) - - self.config.set_preserve_acl( self.cb_preserve_acl.get_active(), self.profile_id ) - self.config.set_preserve_xattr( self.cb_preserve_xattr.get_active(), self.profile_id ) - self.config.set_copy_unsafe_links( self.cb_copy_unsafe_links.get_active(), self.profile_id ) - self.config.set_copy_links( self.cb_copy_links.get_active(), self.profile_id ) - - #umount - if not self.config.SNAPSHOT_MODES[mode][0] is None: - try: - mnt.umount(hash_id = hash_id) - except mount.MountException as ex: - self.error_handler(str(ex)) - return False - return True - - def update_remove_old_backups( self, button ): - enabled = self.cb_remove_old_backup.get_active() - self.edit_remove_old_backup_value.set_sensitive( enabled ) - self.cb_remove_old_backup_unit.set_sensitive( enabled ) - - def update_min_free_space( self, button ): - enabled = self.cb_min_free_space.get_active() - self.edit_min_free_space_value.set_sensitive( enabled ) - self.cb_min_free_space_unit.set_sensitive( enabled ) - - def update_min_free_inodes( self, button ): - enabled = self.cb_min_free_inodes.get_active() - self.edit_min_free_inodes_value.set_sensitive( enabled ) - self.lbl_min_free_inodes_unit.set_sensitive( enabled ) - - #def on_cb_per_directory_schedule_toggled( self, button ): - # self.update_per_directory_option() - - #def update_per_directory_option( self ): - # if self.cb_per_directory_schedule.get_active(): - # if self.list_include.get_column(1) == None: - # self.list_include.append_column( self.include_schedule_column ) - # self.cb_backup_mode.hide() - # self.lbl_schedule.hide() - # else: - # if self.list_include.get_column(1) != None: - # self.list_include.remove_column( self.include_schedule_column ) - # self.lbl_schedule.show() - # self.cb_backup_mode.show() - - def run( self ): - self.config.set_question_handler( self.question_handler ) - self.config.set_error_handler( self.error_handler ) - - self.config_copy_dict = copy.copy( self.config.dict ) - - while True: - if gtk.RESPONSE_OK == self.dialog.run(): - if not self.validate(): - continue - else: - self.config.dict = self.config_copy_dict - break - - self.config.clear_handlers() - self.dialog.destroy() - - def update_snapshots_location( self ): - '''Update snapshot location dialog''' - self.config.set_question_handler( self.question_handler ) - self.config.set_error_handler( self.error_handler ) - self.snapshots.update_snapshots_location() - - def on_add_profile(self, button, data=None): - - name = messagebox.text_input_dialog( self.dialog, self.config, _('New profile'), None ) - if name is None: - return - if len( name ) <= 0: - return - - profile_id = self.config.add_profile( name ) - if profile_id is None: - return - - self.profile_id = profile_id - self.update_profiles() - - def on_edit_profile( self, button ): - name = messagebox.text_input_dialog( self.dialog, self.config, _('Rename profile'), None ) - if name is None: - return - if len( name ) <= 0: - return - - if not self.config.set_profile_name( name, self.profile_id ): - return - - self.update_profiles() - - def on_remove_profile( self, button ): - if gtk.RESPONSE_YES == messagebox.show_question( self.dialog, self.config, _('Are you sure you want to delete the profile "%s" ?') % self.config.get_profile_name(self.profile_id) ): - self.config.remove_profile( self.profile_id ) - self.profile_id = '1' - self.update_profiles() - - def on_add_include( self, button ): - fcd = gtk.FileChooserDialog( _('Include folder'), self.dialog, gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER, (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_OK) ) - fcd.set_show_hidden( self.parent.show_hidden_files ) - fcd.set_select_multiple(True) - - if fcd.run() == gtk.RESPONSE_OK: - for include_folder in fcd.get_filenames(): - include_folder = tools.prepare_path(include_folder) - - iter = self.store_include.get_iter_first() - while not iter is None: - if self.store_include.get_value( iter, 0 ) == include_folder: - break - iter = self.store_include.iter_next( iter ) - - if iter is None: - self.store_include.append( [ include_folder, gtk.STOCK_DIRECTORY, 0 ] ) - - fcd.destroy() - - def on_add_include_file( self, button ): - fcd = gtk.FileChooserDialog( _('Include file'), self.dialog, gtk.FILE_CHOOSER_ACTION_OPEN, (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_OK) ) - fcd.set_show_hidden( self.parent.show_hidden_files ) - fcd.set_select_multiple(True) - - if fcd.run() == gtk.RESPONSE_OK: - for include_file in fcd.get_filenames(): - include_file = tools.prepare_path(include_file) - - iter = self.store_include.get_iter_first() - while not iter is None: - if self.store_include.get_value( iter, 0 ) == include_file: - break - iter = self.store_include.iter_next( iter ) - - if iter is None: - self.store_include.append( [ include_file, gtk.STOCK_FILE, 1 ] ) - - fcd.destroy() - - def on_remove_include( self, button ): - self.remove_selected_from_list(self.list_include) - - def remove_selected_from_list(self, widget): - store, paths = widget.get_selection().get_selected_rows() - iters = [store.get_iter(path[0]) for path in paths] - for iter in iters: - store.remove( iter ) - - def add_exclude_( self, pattern ): - pattern = pattern.strip() - if len( pattern ) == 0: - return - - iter = self.store_exclude.get_iter_first() - while not iter is None: - if self.store_exclude.get_value( iter, 0 ) == pattern: - return - iter = self.store_exclude.iter_next( iter ) - - self.store_exclude.append( [pattern, gtk.STOCK_DELETE] ) - - def on_add_exclude( self, button ): - pattern = messagebox.text_input_dialog( self.dialog, self.config, _('Exclude pattern') ) - if pattern is None: - return - - if pattern.find( ':' ) >= 0: - messagebox.show_error( self.dialog, self.config, _('Exclude patterns can\'t contain \':\' char !') ) - return - - self.add_exclude_( pattern ) - - def on_add_exclude_file( self, button ): - fcd = gtk.FileChooserDialog( _('Exclude file'), self.dialog, gtk.FILE_CHOOSER_ACTION_OPEN, (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_OK) ) - fcd.set_show_hidden( self.parent.show_hidden_files ) - fcd.set_select_multiple(True) - - if fcd.run() == gtk.RESPONSE_OK: - for path in fcd.get_filenames(): - self.add_exclude_(tools.prepare_path(path)) - - fcd.destroy() - - def on_add_exclude_folder( self, button ): - fcd = gtk.FileChooserDialog( _('Exclude folder'), self.dialog, gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER, (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_OK) ) - fcd.set_show_hidden( self.parent.show_hidden_files ) - fcd.set_select_multiple(True) - - if fcd.run() == gtk.RESPONSE_OK: - for path in fcd.get_filenames(): - self.add_exclude_(tools.prepare_path(path)) - - fcd.destroy() - - def on_remove_exclude( self, button ): - self.remove_selected_from_list(self.list_exclude) - - def on_cancel( self, button ): - self.dialog.destroy() - - def validate( self ): - if not self.save_profile(): - return False - - if not self.config.check_config(): - return False - - if not self.config.setup_cron(): - return False - - self.config.save() - return True - diff -Nru backintime-1.0.36/gnome/snapshotsdialog.glade backintime-1.1.12/gnome/snapshotsdialog.glade --- backintime-1.0.36/gnome/snapshotsdialog.glade 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/gnome/snapshotsdialog.glade 1970-01-01 00:00:00.000000000 +0000 @@ -1,410 +0,0 @@ - - - - - - False - 5 - Snapshots - True - center-on-parent - dialog - True - True - - - True - False - 2 - - - True - False - end - - - gtk-jump-to - True - True - True - True - True - False - True - - - False - False - 0 - - - - - gtk-cancel - True - True - False - False - True - - - False - False - 1 - - - - - False - True - end - 0 - - - - - True - False - 2 - - - True - True - False - False - False - True - True - - - False - True - 2 - 0 - - - - - List only different snapshots - True - True - False - False - 0 - True - - - - True - True - 1 - - - - - True - False - 2 - - - List only equal snapshots to: - True - True - False - False - 0 - True - - - - False - True - 0 - - - - - True - False - - - - True - True - 1 - - - - - True - True - 2 - - - - - Deep check (more accurate, but slow) - True - True - False - False - 0 - True - - - - True - True - 3 - - - - - True - False - - - True - False - Restore - False - Restore - gtk-undelete - - - - False - True - - - - - True - False - Delete - False - Delete - gtk-delete - - - - False - True - - - - - True - False - Select All - False - Select All - gtk-select-all - - - - False - True - - - - - False - True - 4 - - - - - 400 - 250 - True - True - in - - - True - True - True - - - - - - - - - - True - True - 2 - 5 - - - - - False - True - 1 - - - - - True - False - 2 - - - True - False - 2 - - - Diff with - True - True - True - False - - - - False - True - 0 - - - - - True - False - - - True - True - 1 - - - - - False - True - 0 - - - - - True - True - - - True - False - 15 - - - True - False - 3 - 2 - - - True - False - 0 - Command: - - - - - True - False - 0 - Parameters: - - - 1 - 2 - - - - - True - False - 0 - Use %1 and %2 for path parameters - True - - - 1 - 2 - 2 - 3 - - - - - True - True - False - False - True - True - - - 1 - 2 - - - - - True - True - False - False - True - True - - - 1 - 2 - 1 - 2 - - - - - - - - - - - - True - False - Diff Options - - - - - False - True - 1 - - - - - False - True - 5 - 2 - - - - - - btn_goto_snapshot - btn_cancel - - - diff -Nru backintime-1.0.36/gnome/snapshotsdialog.py backintime-1.1.12/gnome/snapshotsdialog.py --- backintime-1.0.36/gnome/snapshotsdialog.py 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/gnome/snapshotsdialog.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,466 +0,0 @@ -# Back In Time -# Copyright (C) 2008-2009 Oprea Dan, Bart de Koning, Richard Bailey -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - - -import os -import os.path -import sys -import pygtk -pygtk.require("2.0") -import gtk -import gnomevfs -import gobject -import datetime -import gettext - -import config -import tools -import messagebox -import gnometools -import restoredialog - - -_=gettext.gettext - -class SnapshotsDialog(object): - - def __init__( self, snapshots, parent, path, snapshots_list, current_snapshot_id, icon_name, use_gloobus_preview ): - self.snapshots = snapshots - self.path = path - self.snapshots_list = snapshots_list - self.current_snapshot_id = current_snapshot_id - self.icon_name = icon_name - self.config = snapshots.config - self.use_gloobus_preview = use_gloobus_preview - - builder = gtk.Builder() - self.builder = builder - self.builder.set_translation_domain('backintime') - - glade_file = os.path.join(self.config.get_app_path(), 'gnome', 'snapshotsdialog.glade') - - builder.add_from_file(glade_file) - - self.dialog = self.builder.get_object( 'SnapshotsDialog' ) - self.window = self.dialog - self.dialog.set_transient_for( parent ) - - signals = { - 'on_list_snapshots_row_activated' : self.on_list_snapshots_row_activated, - 'on_list_snapshots_popup_menu' : self.on_list_snapshots_popup_menu, - 'on_list_snapshots_button_press_event': self.on_list_snapshots_button_press_event, - 'on_list_snapshots_drag_data_get': self.on_list_snapshots_drag_data_get, - 'on_list_snapshots_key_press_event' : self.on_list_snapshots_key_press_event, - 'on_btn_diff_with_clicked' : self.on_btn_diff_with_clicked, - 'on_btn_restore_clicked' : self.on_restore_this, - 'on_btn_delete_clicked' : self.on_btn_delete_clicked, - 'on_btn_select_all_clicked' : self.on_btn_select_all_clicked, - 'on_check_list_diff_toggled' : self.on_check_list_diff_toggled, - 'on_check_list_equal_toggled' : self.on_check_list_diff_toggled, - 'on_check_deep_check_toggled' : self.on_check_deep_check_toggled, - 'on_combo_equal_to_changed' : self.on_combo_equal_to_changed - } - - #path - self.edit_path = self.builder.get_object( 'edit_path' ) - - #restore menu - self.restore_menu = gtk.Menu() - self.restore_menu.append(gnometools.new_menu_item(gtk.STOCK_UNDELETE, _('Restore'), self.on_restore_this)) - self.restore_menu.append(gnometools.new_menu_item(gtk.STOCK_UNDELETE, _('Restore to ...'), self.on_restore_this_to)) - self.restore_menu.show_all() - - self.btn_restore = self.builder.get_object('btn_restore') - self.btn_restore.set_menu(self.restore_menu) - - #delete - self.btn_delete = self.builder.get_object('btn_delete') - - #select all - self.btn_select_all = self.builder.get_object('btn_select_all') - - #popup now - #self.popup_now = gtk.Menu() - - #diff - self.edit_diff_cmd = self.builder.get_object( 'edit_diff_cmd' ) - self.edit_diff_cmd_params = self.builder.get_object( 'edit_diff_cmd_params' ) - - diff_cmd = self.config.get_str_value( 'gnome.diff.cmd', 'meld' ) - diff_cmd_params = self.config.get_str_value( 'gnome.diff.params', '%1 %2' ) - - self.edit_diff_cmd.set_text( diff_cmd ) - self.edit_diff_cmd_params.set_text( diff_cmd_params ) - - #setup backup folders - self.list_snapshots = self.builder.get_object( 'list_snapshots' ) - - # connect callbacks to widgets signals. - builder.connect_signals(signals) - - text_renderer = gtk.CellRendererText() - column = gtk.TreeViewColumn( _('Snapshots') ) - column.pack_end( text_renderer, True ) - column.add_attribute( text_renderer, 'markup', 0 ) - column.set_sort_column_id( 0 ) - self.list_snapshots.append_column( column ) - - #display name, snapshot_id - self.store_snapshots = gtk.ListStore( str, str ) - self.list_snapshots.set_model( self.store_snapshots ) - - self.store_snapshots.set_sort_column_id( 0, gtk.SORT_DESCENDING ) - self.list_snapshots.get_selection().set_mode(gtk.SELECTION_MULTIPLE) - self.list_snapshots.get_selection().connect('changed', self.on_list_snapshots_cursor_changed) - - #setup diff with combo - self.combo_diff_with = self.builder.get_object( 'combo_diff_with' ) - text_renderer = gtk.CellRendererText() - self.combo_diff_with.pack_start( text_renderer, True ) - self.combo_diff_with.add_attribute( text_renderer, 'markup', 0 ) - self.combo_diff_with.set_model( self.store_snapshots ) #use the same store - - #setup equal to combo - self.store_snapshots_combo_equal = gtk.ListStore( str, str ) - self.store_snapshots_combo_equal.set_sort_column_id( 0, gtk.SORT_DESCENDING ) - - self.combo_equal_to = self.builder.get_object( 'combo_equal_to' ) - text_renderer = gtk.CellRendererText() - self.combo_equal_to.pack_start( text_renderer, True ) - self.combo_equal_to.add_attribute( text_renderer, 'markup', 0 ) - self.combo_equal_to.set_model(self.store_snapshots_combo_equal) - - self.update_combo_equal_to() - self.combo_equal_to.set_sensitive(False) - - # update snapshot list - full_path = self.snapshots.get_snapshot_path_to( self.current_snapshot_id, self.path ) - if os.path.islink( full_path ): - self.builder.get_object( 'check_deep_check' ).hide() - elif os.path.isdir( full_path ): - self.builder.get_object( 'check_list_diff' ).hide() - self.builder.get_object('check_list_equal').hide() - self.combo_equal_to.hide() - self.builder.get_object( 'check_deep_check' ).hide() - - self.builder.get_object( 'check_deep_check' ).set_sensitive( False ) - - self.update_snapshots() - - def update_toolbar( self ): - snapshot_ids = self.get_list_snapshot_id(True) - - if len(snapshot_ids) <= 0: - enable_restore = False - enable_delete = False - elif len(snapshot_ids) == 1: - enable_restore = len( snapshot_ids[0] ) > 1 - enable_delete = len( snapshot_ids[0] ) > 1 - else: - enable_restore = False - enable_delete = True - for snapshot_id in snapshot_ids: - if len(snapshot_id) <= 1: - enable_delete = False - - self.btn_restore.set_sensitive(enable_restore) - self.btn_delete.set_sensitive(enable_delete) - - def on_restore_this( self, *args ): - snapshot_id = self.get_list_snapshot_id() - if not snapshot_id is None: - gnometools.restore(self, snapshot_id, self.path ) - - def on_restore_this_to( self, *args ): - snapshot_id = self.get_list_snapshot_id() - if not snapshot_id is None: - gnometools.restore(self, snapshot_id, self.path, True ) - - def on_list_snapshots_drag_data_get( self, widget, drag_context, selection_data, info, timestamp, user_param1 = None ): - path = self.get_list_snapshot_id(index = 2) - if not path is None: - path = gnomevfs.escape_path_string(path) - selection_data.set_uris( [ 'file://' + path ] ) - - def on_list_snapshots_key_press_event( self, _list, event ): - if 32 != event.keyval: - return False - - if not self.use_gloobus_preview: - return False - - self.open_item( True ) - return True - - def on_list_snapshots_cursor_changed( self, _list ): - self.update_toolbar() - - def on_list_snapshots_button_press_event( self, _list, event ): - if event.button != 3: - return - - if len( self.store_snapshots ) <= 0: - return - - path = self.list_snapshots.get_path_at_pos( int( event.x ), int( event.y ) ) - if path is None: - return - path = path[0] - - self.list_snapshots.get_selection().select_path( path ) - self.update_toolbar() - self.show_popup_menu( self.list_snapshots, event.button, event.time ) - - def on_list_snapshots_popup_menu( self, _list ): - self.show_popup_menu( _list, 1, gtk.get_current_event_time() ) - - def show_popup_menu( self, _list, button, time ): - path = self.get_list_snapshot_id() - if path is None: - return - - #print "popup-menu" - popup_menu = gtk.Menu() - popup_menu.append(gnometools.new_menu_item( gtk.image_new_from_icon_name( self.icon_name, gtk.ICON_SIZE_MENU ), _('Open'), self.on_list_snapshots_row_activated )) - popup_menu.append( gtk.SeparatorMenuItem() ) - popup_menu.append(gnometools.new_menu_item( gtk.STOCK_JUMP_TO, _('Jump to'), self.on_list_snapshots_jumpto_item )) - - if len( path ) > 1: - popup_menu.append( gtk.SeparatorMenuItem() ) - popup_menu.append(gnometools.new_menu_item( gtk.STOCK_UNDELETE, _('Restore'), self.on_restore_this )) - popup_menu.append(gnometools.new_menu_item( gtk.STOCK_UNDELETE, _('Restore to ...'), self.on_restore_this_to )) - - popup_menu.append(gtk.SeparatorMenuItem()) - popup_menu.append(gnometools.new_menu_item(None, _('Diff'), self.on_list_snapshots_diff_item) ) - - popup_menu.show_all() - popup_menu.popup( None, None, None, button, time ) - - def on_list_snapshots_diff_item( self, widget, data = None ): - self.on_btn_diff_with_clicked( self.builder.get_object( 'btn_diff_with' ) ) - - def on_list_snapshots_jumpto_item( self, widget, data = None ): - self.dialog.response( gtk.RESPONSE_OK ) - - def on_list_snapshots_open_item( self, widget, data = None ): - self.open_item() - - def on_btn_diff_with_clicked( self, button ): - if len( self.store_snapshots ) < 1: - return - - #get path from the list - snapshot_id = self.get_list_snapshot_id() - if snapshot_id is None: - return - path1 = self.snapshots.get_snapshot_path_to( snapshot_id, self.path ) - - #get path from the combo - path2 = self.snapshots.get_snapshot_path_to( self.store_snapshots.get_value( self.combo_diff_with.get_active_iter(), 1 ), self.path ) - - #check if the 2 paths are different - if path1 == path2: - messagebox.show_error( self.dialog, self.config, _('You can\'t compare a snapshot to itself') ) - return - - diff_cmd = self.edit_diff_cmd.get_text() - diff_cmd_params = self.edit_diff_cmd_params.get_text() - - if not tools.check_command( diff_cmd ): - messagebox.show_error( self.dialog, self.config, _('Command not found: %s') % diff_cmd ) - return - - params = diff_cmd_params - params = params.replace( '%1', "\"%s\"" % path1 ) - params = params.replace( '%2', "\"%s\"" % path2 ) - - cmd = diff_cmd + ' ' + params + ' &' - os.system( cmd ) - - #check if the command changed - old_diff_cmd = self.config.get_str_value( 'gnome.diff.cmd', 'meld' ) - old_diff_cmd_params = self.config.get_str_value( 'gnome.diff.params', '%1 %2' ) - if diff_cmd != old_diff_cmd or diff_cmd_params != old_diff_cmd_params: - self.config.set_str_value( 'gnome.diff.cmd', diff_cmd ) - self.config.set_str_value( 'gnome.diff.params', diff_cmd_params ) - self.config.save() - - def on_btn_delete_clicked(self, *args): - snapshot_ids = self.get_list_snapshot_id(True) - if len(snapshot_ids) == 0: - return - elif len(snapshot_ids) == 1: - msg = _('Do you really want to delete "%(file)s" in snapshot "%(snapshot_id)s?\n') \ - % {'file' : self.path, 'snapshot_id' : snapshot_ids[0]} - else: - msg = _('Do you really want to delete "%(file)s" in %(count)d snapshots?\n') \ - % {'file' : self.path, 'count' : len(snapshot_ids)} - msg += _('WARNING: This can not be revoked!') - if gtk.RESPONSE_YES == messagebox.show_question(self.dialog, self.config, msg): - for snapshot_id in snapshot_ids: - self.snapshots.delete_path(snapshot_id, self.path) - - msg = _('Exclude "%s" from future snapshots?' % self.path) - if gtk.RESPONSE_YES == messagebox.show_question(self.dialog, self.config, msg): - exclude = self.config.get_exclude() - exclude.append(self.path) - self.config.set_exclude(exclude) - self.update_combo_equal_to() - self.update_snapshots() - - def on_check_list_diff_toggled( self, widget, data = None ): - deep_btn = self.builder.get_object( 'check_deep_check' ) - diff_btn = self.builder.get_object('check_list_diff') - equal_btn = self.builder.get_object('check_list_equal') - - if widget == diff_btn: - equal_btn.set_sensitive(not widget.get_active()) - elif widget == equal_btn: - diff_btn.set_sensitive(not widget.get_active()) - - if diff_btn.get_active() or equal_btn.get_active() and tools.check_command("md5sum"): - deep_btn.set_sensitive(True) - else: - deep_btn.set_active(False) - deep_btn.set_sensitive( False ) - self.combo_equal_to.set_sensitive(equal_btn.get_active()) - self.update_snapshots() - - def on_check_deep_check_toggled( self, widget, data = None ): - self.update_snapshots() - - def on_combo_equal_to_changed(self, *args): - self.update_snapshots() - - def update_snapshots( self): - self.edit_path.set_text( self.path ) - - #fill snapshots - self.store_snapshots.clear() - - counter = 0 - index_combo_diff_with = 0 - - # filter snapshots for uniqueness (if requested) - list_diff = self.builder.get_object( 'check_list_diff' ).get_active() - deep_check = self.builder.get_object( 'check_deep_check' ).get_active() - list_equal_to = False - if self.builder.get_object('check_list_equal').get_active(): - iter = self.combo_equal_to.get_active_iter() - if not iter is None: - list_equal_to = self.snapshots.get_snapshot_path_to( self.store_snapshots_combo_equal.get_value( iter, 1 ), self.path ) - - snapshots_filtered = self.snapshots.filter_for( self.current_snapshot_id, self.path, self.snapshots_list, list_diff, deep_check, list_equal_to ) - - for snapshot_id in snapshots_filtered: - self.store_snapshots.append( [ gnometools.get_snapshot_display_markup( self.snapshots, snapshot_id ), snapshot_id ] ) - if snapshot_id == self.current_snapshot_id: - index_combo_diff_with = counter - counter += 1 - - #select first item - if len( self.store_snapshots ) > 0: - iter = self.store_snapshots.get_iter_first() - if not iter is None: - self.list_snapshots.get_selection().select_iter( iter ) - self.combo_diff_with.set_active( index_combo_diff_with ) - - self.builder.get_object( 'btn_diff_with' ).set_sensitive( True ) - self.combo_diff_with.set_sensitive( True ) - else: - self.builder.get_object( 'btn_diff_with' ).set_sensitive( False ) - self.combo_diff_with.set_sensitive( False ) - - self.list_snapshots.grab_focus() - self.update_toolbar() - - def update_combo_equal_to(self): - self.store_snapshots_combo_equal.clear() - counter = 0 - index_combo_equal_to = 0 - snapshots_filtered = self.snapshots.filter_for(self.current_snapshot_id, self.path, self.snapshots_list) - - for snapshot_id in snapshots_filtered: - self.store_snapshots_combo_equal.append( [ gnometools.get_snapshot_display_markup( self.snapshots, snapshot_id ), snapshot_id ] ) - if snapshot_id == self.current_snapshot_id: - index_combo_equal_to = counter - counter += 1 - - self.combo_equal_to.set_active(index_combo_equal_to) - - def on_list_snapshots_row_activated( self, _list, path, column ): - self.open_item() - - def open_item( self, use_gloobus_preview = False ): - snapshot_id = self.get_list_snapshot_id() - if snapshot_id is None: - return - - path = self.snapshots.get_snapshot_path_to( snapshot_id, self.path ) - if not os.path.exists( path ): - return - - if use_gloobus_preview: - cmd = "gloobus-preview \"%s\" &" % path - else: - cmd = "gnome-open \"%s\" &" % path - - os.system( cmd ) - - def get_list_snapshot_id(self, multiSelection = False, index = 1): - paths = self.list_snapshots.get_selection().get_selected_rows()[1] - if multiSelection: - _list = [] - for path in paths: - iter = self.store_snapshots.get_iter(path[0]) - if not iter is None: - _list.append(self.store_snapshots.get_value( iter, index )) - return _list - - iter = self.store_snapshots.get_iter(paths[0][0]) - if iter is None: - return None - return self.store_snapshots.get_value(iter, index) - - def on_btn_select_all_clicked(self, *args): - '''Select all except 'Now' ''' - def iterAllItems(self): - iter = self.get_iter_first() - while not iter is None: - yield iter - iter = self.iter_next(iter) - - self.list_snapshots.get_selection().unselect_all() - for iter in iterAllItems(self.store_snapshots): - if len(self.store_snapshots.get_value(iter, 1)) > 1: - self.list_snapshots.get_selection().select_iter(iter) - - def run( self ): - snapshot_id = None - while True: - ret_val = self.dialog.run() - - if gtk.RESPONSE_OK == ret_val: #go to - snapshot_id = self.get_list_snapshot_id() - break - else: - #cancel, close ... - break - - self.dialog.destroy() - return snapshot_id - diff -Nru backintime-1.0.36/gnome/textinputdialog.glade backintime-1.1.12/gnome/textinputdialog.glade --- backintime-1.0.36/gnome/textinputdialog.glade 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/gnome/textinputdialog.glade 1970-01-01 00:00:00.000000000 +0000 @@ -1,98 +0,0 @@ - - - - - False - 5 - Pattern - True - center-on-parent - gtk-edit - dialog - True - True - - - True - False - vertical - 2 - - - True - False - end - - - gtk-cancel - True - True - False - False - True - - - False - False - 0 - - - - - gtk-ok - True - True - True - True - True - False - True - - - False - False - 1 - - - - - False - True - end - 0 - - - - - False - False - 0 - Text - - - True - True - 1 - - - - - True - True - True - True - - - False - True - 2 - - - - - - button4 - button3 - - - diff -Nru backintime-1.0.36/kde4/app.py backintime-1.1.12/kde4/app.py --- backintime-1.0.36/kde4/app.py 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/kde4/app.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,1225 +0,0 @@ -# Back In Time -# Copyright (C) 2008-2009 Oprea Dan, Bart de Koning, Richard Bailey -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - - -import os -import os.path -import stat -import sys - -if len( os.getenv( 'DISPLAY', '' ) ) == 0: - os.putenv( 'DISPLAY', ':0.0' ) - -import datetime -import gettext -import time -import threading - -sys.path = [os.path.join( os.path.dirname( os.path.abspath( os.path.dirname( __file__ ) ) ), 'common' )] + sys.path - -import backintime -import config -import tools -import logger -import snapshots -import guiapplicationinstance -import mount - -from PyQt4.QtGui import * -from PyQt4.QtCore import * -from PyKDE4.kdecore import * -from PyKDE4.kdeui import * -from PyKDE4.kio import * - -import kde4tools -import settingsdialog -import snapshotsdialog -import logviewdialog -import restoredialog - - -_=gettext.gettext - - -class MainWindow( KMainWindow ): - def __init__( self, config, app_instance, kapp, kaboutdata ): - KMainWindow.__init__( self ) - - self.config = config - self.app_instance = app_instance - self.kapp = kapp - self.kaboutdata = kaboutdata - self.snapshots = snapshots.Snapshots( config ) - self.last_take_snapshot_message = None - - #main toolbar - self.main_toolbar = self.toolBar() - self.main_toolbar.setFloatable( False ) - - #profiles - #self.main_toolbar.addWidget( QLabel( QString.fromUtf8( _('Profile:') ), self ) ) - self.first_update_all = True - self.disable_profile_changed = False - self.combo_profiles = KComboBox( self ) - self.combo_profiles_action = self.main_toolbar.addWidget( self.combo_profiles ) - #self.combo_profiles.setMinimumWidth( 250 ) - - self.btn_take_snapshot = self.main_toolbar.addAction( KIcon( 'document-save' ), '' ) - self.btn_take_snapshot.setToolTip( QString.fromUtf8( _('Take snapshot') ) ) - QObject.connect( self.btn_take_snapshot, SIGNAL('triggered()'), self.on_btn_take_snapshot_clicked ) - - self.btn_update_snapshots = self.main_toolbar.addAction( KIcon( 'view-refresh' ), '' ) - self.btn_update_snapshots.setToolTip( QString.fromUtf8( _('Refresh snapshots list') ) ) - QObject.connect( self.btn_update_snapshots, SIGNAL('triggered()'), self.on_btn_update_snapshots_clicked ) - - self.btn_name_snapshot = self.main_toolbar.addAction( KIcon( 'edit-rename' ), '' ) - self.btn_name_snapshot.setToolTip( QString.fromUtf8( _('Snapshot Name') ) ) - QObject.connect( self.btn_name_snapshot, SIGNAL('triggered()'), self.on_btn_name_snapshot_clicked ) - - self.btn_remove_snapshot = self.main_toolbar.addAction( KIcon( 'edit-delete' ), '' ) - self.btn_remove_snapshot.setToolTip( QString.fromUtf8( _('Remove Snapshot') ) ) - QObject.connect( self.btn_remove_snapshot, SIGNAL('triggered()'), self.on_btn_remove_snapshot_clicked ) - - self.btn_snapshot_log_view = self.main_toolbar.addAction( KIcon( 'text-plain' ), '' ) - self.btn_snapshot_log_view.setToolTip( QString.fromUtf8( _('View Snapshot Log') ) ) - QObject.connect( self.btn_snapshot_log_view, SIGNAL('triggered()'), self.on_btn_snapshot_log_view_clicked ) - - self.btn_log_view = self.main_toolbar.addAction( KIcon( 'document-new' ), '' ) - self.btn_log_view.setToolTip( QString.fromUtf8( _('View Last Log') ) ) - QObject.connect( self.btn_log_view, SIGNAL('triggered()'), self.on_btn_log_view_clicked ) - - self.main_toolbar.addSeparator() - - self.btn_settings = self.main_toolbar.addAction( KIcon( 'configure' ), '' ) - self.btn_settings.setToolTip( QString.fromUtf8( _('Settings') ) ) - QObject.connect( self.btn_settings, SIGNAL('triggered()'), self.on_btn_settings_clicked ) - - self.main_toolbar.addSeparator() - - #self.btn_about = self.main_toolbar.addAction( KIcon( 'help-about' ), '' ) - #self.btn_about.setToolTip( QString.fromUtf8( _('About') ) ) - #QObject.connect( self.btn_about, SIGNAL('triggered()'), self.on_btn_about_clicked ) - - #self.btn_help = self.main_toolbar.addAction( KIcon( 'help-contents' ), '' ) - #self.btn_help.setToolTip( QString.fromUtf8( _('Help') ) ) - #QObject.connect( self.btn_help, SIGNAL('triggered()'), self.on_btn_help_clicked ) - - #self.main_toolbar.addSeparator() - - self.btn_shutdown = self.main_toolbar.addAction( KIcon( 'system-shutdown' ), '' ) - self.btn_shutdown.setToolTip( QString.fromUtf8( _('Shutdown system after snapshot has finished.') ) ) - self.btn_shutdown.setCheckable(True) - self.shutdown = tools.ShutDown() - self.btn_shutdown.setEnabled(self.shutdown.can_shutdown()) - QObject.connect( self.btn_shutdown, SIGNAL('toggled(bool)'), self.on_btn_shutdown_toggled ) - - self.btn_quit = self.main_toolbar.addAction( KIcon( 'application-exit' ), '' ) - self.btn_quit.setToolTip( QString.fromUtf8( _('Exit') ) ) - QObject.connect( self.btn_quit, SIGNAL('triggered()'), self.close ) - - self.main_toolbar.addAction( KToolBarSpacerAction( self ) ) - - self.main_toolbar.addSeparator() - - #self.btn_link = self.main_toolbar.addAction( KIcon( 'go-home' ), '' ) - #self.btn_link.setToolTip( QString.fromUtf8( 'backintime.le-web.org' ) ) - #QObject.connect( self.btn_link, SIGNAL('triggered()'), self.open_url ) - - help_menu = QMenu() - action = help_menu.addAction( KIcon( 'help-contents' ), QString.fromUtf8( _('Help') ) ) - QObject.connect( action, SIGNAL('triggered()'), self.on_help ) - help_menu.addSeparator() - action = help_menu.addAction( KIcon( 'go-home' ), QString.fromUtf8( _('Website') ) ) - QObject.connect( action, SIGNAL('triggered()'), self.on_website) - action = help_menu.addAction( KIcon( 'help-hint' ), QString.fromUtf8( _('FAQ') ) ) - QObject.connect( action, SIGNAL('triggered()'), self.on_faq) - action = help_menu.addAction( KIcon( 'help-feedback' ), QString.fromUtf8( _('Ask a question') ) ) - QObject.connect( action, SIGNAL('triggered()'), self.on_ask_a_question) - action = help_menu.addAction( KIcon( 'tools-report-bug' ), QString.fromUtf8( _('Report a bug') ) ) - QObject.connect( action, SIGNAL('triggered()'), self.on_report_a_bug) - help_menu.addSeparator() - action = help_menu.addAction( KIcon( 'help-about' ), QString.fromUtf8( _('About') ) ) - QObject.connect( action, SIGNAL('triggered()'), self.on_about) - - action = self.main_toolbar.addAction( KIcon( 'help-contents' ), '' ) - action.setToolTip( QString.fromUtf8( _('Help') ) ) - QObject.connect( action, SIGNAL('triggered()'), self.on_help ) - action.setMenu(help_menu) - - #main splitter - self.main_splitter = QSplitter( self ) - self.main_splitter.setOrientation( Qt.Horizontal ) - - #timeline - self.list_time_line = QTreeWidget( self ) - self.list_time_line.setRootIsDecorated( False ) - self.list_time_line.setEditTriggers( QAbstractItemView.NoEditTriggers ) - self.list_time_line.setHeaderLabel( QString.fromUtf8( _('Snapshots') ) ) - self.main_splitter.addWidget( self.list_time_line ) - - #right widget - self.right_widget = QGroupBox( self ) - self.main_splitter.addWidget( self.right_widget ) - right_layout = QVBoxLayout( self.right_widget ) - #left, top, right, bottom = right_layout.getContentsMargins() - #right_layout.setContentsMargins( 0, 0, 0, right ) - - #files toolbar - self.files_view_toolbar = KToolBar( self ) - self.files_view_toolbar.setFloatable( False ) - - self.btn_folder_up = self.files_view_toolbar.addAction( KIcon( 'go-up' ), '' ) - self.btn_folder_up.setToolTip( QString.fromUtf8( _('Up') ) ) - QObject.connect( self.btn_folder_up, SIGNAL('triggered()'), self.on_btn_folder_up_clicked ) - - self.edit_current_path = KLineEdit( self ) - self.edit_current_path.setReadOnly( True ) - self.files_view_toolbar.addWidget( self.edit_current_path ) - - #show hidden files - self.show_hidden_files = self.config.get_bool_value( 'kde4.show_hidden_files', False ) - - self.btn_show_hidden_files = self.files_view_toolbar.addAction( KIcon( 'list-add' ), '' ) - self.btn_show_hidden_files.setCheckable( True ) - self.btn_show_hidden_files.setChecked( self.show_hidden_files ) - self.btn_show_hidden_files.setToolTip( QString.fromUtf8( _('Show hidden files') ) ) - QObject.connect( self.btn_show_hidden_files, SIGNAL('toggled(bool)'), self.on_btn_show_hidden_files_toggled ) - - self.files_view_toolbar.addSeparator() - - #restore menu - self.menu_restore = QMenu() - action = self.menu_restore.addAction( KIcon( 'document-revert' ), QString.fromUtf8( _('Restore') ) ) - QObject.connect( action, SIGNAL('triggered()'), self.restore_this ) - action = self.menu_restore.addAction( KIcon( 'document-revert' ), QString.fromUtf8( _('Restore to ...') ) ) - QObject.connect( action, SIGNAL('triggered()'), self.restore_this_to ) - self.menu_restore_parent = self.menu_restore.addAction( KIcon( 'document-revert' ), '' ) - QObject.connect( self.menu_restore_parent, SIGNAL('triggered()'), self.restore_parent ) - self.menu_restore_parent_to = self.menu_restore.addAction( KIcon( 'document-revert' ), '' ) - QObject.connect( self.menu_restore_parent_to, SIGNAL('triggered()'), self.restore_parent_to ) - - self.btn_restore = self.files_view_toolbar.addAction( KIcon( 'document-revert' ), '' ) - self.btn_restore.setToolTip( QString.fromUtf8( _('Restore') ) ) - self.btn_restore.setMenu(self.menu_restore) - QObject.connect( self.btn_restore, SIGNAL('triggered()'), self.restore_this ) - - self.btn_snapshots = self.files_view_toolbar.addAction( KIcon( 'view-list-details' ), '' ) - self.btn_snapshots.setToolTip( QString.fromUtf8( _('Snapshots') ) ) - QObject.connect( self.btn_snapshots, SIGNAL('triggered()'), self.on_btn_snapshots_clicked ) - - right_layout.addWidget( self.files_view_toolbar ) - - #second spliter - self.second_splitter = QSplitter( self ) - self.second_splitter.setOrientation( Qt.Horizontal ) - right_layout.addWidget( self.second_splitter ) - - #places - self.list_places = QTreeWidget( self ) - self.list_places.setRootIsDecorated( False ) - self.list_places.setEditTriggers( QAbstractItemView.NoEditTriggers ) - self.list_places.setHeaderLabel( QString.fromUtf8( _('Shortcuts') ) ) - self.second_splitter.addWidget( self.list_places ) - - #files view stacked layout - widget = QWidget( self ) - self.files_view_layout = QStackedLayout( widget ) - self.second_splitter.addWidget( widget ) - - #folder don't exist label - self.lbl_folder_dont_exists = QLabel( QString.fromUtf8( _('This folder doesn\'t exist\nin the current snapshot !') ), self ) - kde4tools.set_font_bold( self.lbl_folder_dont_exists ) - self.lbl_folder_dont_exists.setFrameShadow( QFrame.Sunken ) - self.lbl_folder_dont_exists.setFrameShape( QFrame.Panel ) - self.lbl_folder_dont_exists.setAlignment( Qt.AlignHCenter | Qt.AlignVCenter ) - self.files_view_layout.addWidget( self.lbl_folder_dont_exists ) - - #list files view - self.list_files_view = QTreeView( self ) - self.files_view_layout.addWidget( self.list_files_view ) - self.list_files_view.setRootIsDecorated( False ) - self.list_files_view.setAlternatingRowColors( True ) - #self.list_files_view.setAllColumnsShowFocus( True ) - self.list_files_view.setEditTriggers( QAbstractItemView.NoEditTriggers ) - self.list_files_view.setItemsExpandable( False ) - self.list_files_view.setDragEnabled( False ) - - self.list_files_view.header().setClickable( True ) - self.list_files_view.header().setMovable( False ) - self.list_files_view.header().setSortIndicatorShown( True ) - - self.list_files_view_model = KDirModel( self ) - #self.list_files_view_model.removeColumns( 3, 2 ) - self.list_files_view_model.dirLister().setAutoErrorHandlingEnabled( False, self ) - self.list_files_view_model.dirLister().setAutoUpdate( False ) - self.list_files_view_model.dirLister().setDelayedMimeTypes( False ) - self.list_files_view_model.dirLister().setMainWindow( self ) - - self.list_files_view_sort_filter_proxy = KDirSortFilterProxyModel( self ) - self.list_files_view_sort_filter_proxy.setSourceModel( self.list_files_view_model ) - - self.list_files_view.setModel( self.list_files_view_sort_filter_proxy ) - - self.list_files_view_delegate = KFileItemDelegate( self ) - self.list_files_view.setItemDelegate( self.list_files_view_delegate ) - - for column_index in xrange( 3, self.list_files_view_model.columnCount() ): - self.list_files_view.hideColumn( column_index ) - - sort_column = self.config.get_int_value( 'kde4.main_window.files_view.sort.column', 0 ) - sort_order = self.config.get_bool_value( 'kde4.main_window.files_view.sort.ascending', True ) - if sort_order: - sort_order = Qt.AscendingOrder - else: - sort_order = Qt.DescendingOrder - - self.list_files_view.header().setSortIndicator( sort_column, sort_order ) - self.list_files_view_sort_filter_proxy.sort( self.list_files_view.header().sortIndicatorSection(), self.list_files_view.header().sortIndicatorOrder() ) - QObject.connect( self.list_files_view.header(), SIGNAL('sortIndicatorChanged(int,Qt::SortOrder)'), self.list_files_view_sort_filter_proxy.sort ) - - self.files_view_layout.setCurrentWidget( self.list_files_view ) - - # - self.setCentralWidget( self.main_splitter ) - - self.statusBar().showMessage( QString.fromUtf8( _('Done') ) ) - - self.snapshots_list = [] - self.snapshot_id = '/' - self.path = self.config.get_str_value( 'kde4.last_path', '/' ) - self.edit_current_path.setText( QString.fromUtf8( self.path ) ) - - #restore size and position - x = self.config.get_int_value( 'kde4.main_window.x', -1 ) - y = self.config.get_int_value( 'kde4.main_window.y', -1 ) - if x >= 0 and y >= 0: - self.move( x, y ) - - w = self.config.get_int_value( 'kde4.main_window.width', 800 ) - h = self.config.get_int_value( 'kde4.main_window.height', 500 ) - self.resize( w, h ) - - main_splitter_left_w = self.config.get_int_value( 'kde4.main_window.main_splitter_left_w', 150 ) - main_splitter_right_w = self.config.get_int_value( 'kde4.main_window.main_splitter_right_w', 450 ) - sizes = [ main_splitter_left_w, main_splitter_right_w ] - self.main_splitter.setSizes( sizes ) - - second_splitter_left_w = self.config.get_int_value( 'kde4.main_window.second_splitter_left_w', 150 ) - second_splitter_right_w = self.config.get_int_value( 'kde4.main_window.second_splitter_right_w', 300 ) - sizes = [ second_splitter_left_w, second_splitter_right_w ] - self.second_splitter.setSizes( sizes ) - - files_view_name_width = self.config.get_int_value( 'kde4.main_window.files_view.name_width', -1 ) - files_view_size_width = self.config.get_int_value( 'kde4.main_window.files_view.size_width', -1 ) - files_view_date_width = self.config.get_int_value( 'kde4.main_window.files_view.date_width', -1 ) - if files_view_name_width > 0 and files_view_size_width > 0 and files_view_date_width > 0: - self.list_files_view.header().resizeSection( 0, files_view_name_width ) - self.list_files_view.header().resizeSection( 1, files_view_size_width ) - self.list_files_view.header().resizeSection( 2, files_view_date_width ) - - self.text_validator = QRegExpValidator( QRegExp( '.*' ), self ) - - # - #kde4tools.set_font_bold( self.right_widget ) - - #force settingdialog if it is not configured - if not cfg.is_configured(): - settingsdialog.SettingsDialog( self ).exec_() - - if not cfg.is_configured(): - return - - if self.snapshots.has_old_snapshots(): - settingsdialog.SettingsDialog( self ).update_snapshots_location() - - profile_id = cfg.get_current_profile() - - #mount - try: - mnt = mount.Mount(cfg = self.config, profile_id = profile_id, parent = self) - hash_id = mnt.mount() - except mount.MountException as ex: - KMessageBox.error( self, QString.fromUtf8( str(ex) ) ) - else: - self.config.set_current_hash_id(hash_id) - - if not cfg.can_backup( profile_id ): - KMessageBox.error( self, QString.fromUtf8( _('Can\'t find snapshots folder.\nIf it is on a removable drive please plug it and then press OK') ) ) - - QObject.connect( self.list_files_view_model.dirLister(), SIGNAL('completed()'), self.on_dir_lister_completed ) - QObject.connect( self.list_files_view_model.dirLister(), SIGNAL('cancelled()'), self.on_dir_lister_completed ) - - #populate lists - self.update_profiles() - QObject.connect( self.combo_profiles, SIGNAL('currentIndexChanged(int)'), self.on_profile_changed ) - #self.update_time_line() - #self.update_places() - #self.update_files_view( 0 ) - - self.list_files_view.setFocus() - - self.update_snapshot_actions() - - QObject.connect( self.list_time_line, SIGNAL('currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)'), self.on_list_time_line_current_item_changed ) - QObject.connect( self.list_places, SIGNAL('currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)'), self.on_list_places_current_item_changed ) - QObject.connect( self.list_files_view, SIGNAL('activated(const QModelIndex&)'), self.on_list_files_view_item_activated ) - - self.force_wait_lock_counter = 0 - - self.timer_raise_application = QTimer( self ) - self.timer_raise_application.setInterval( 1000 ) - self.timer_raise_application.setSingleShot( False ) - QObject.connect( self.timer_raise_application, SIGNAL('timeout()'), self.raise_application ) - self.timer_raise_application.start() - - self.timer_update_take_snapshot = QTimer( self ) - self.timer_update_take_snapshot.setInterval( 1000 ) - self.timer_update_take_snapshot.setSingleShot( False ) - QObject.connect( self.timer_update_take_snapshot, SIGNAL('timeout()'), self.update_take_snapshot ) - self.timer_update_take_snapshot.start() - - def closeEvent( self, event ): - if self.shutdown.ask_before_quit(): - if KMessageBox.Yes != KMessageBox.warningYesNo(self, QString.fromUtf8( _('If you close this window Back In Time will not be able to shutdown your system when the snapshot has finished.\nDo you really want to close?') )): - return event.ignore() - - self.config.set_str_value( 'kde4.last_path', self.path ) - - self.config.set_int_value( 'kde4.main_window.x', self.x() ) - self.config.set_int_value( 'kde4.main_window.y', self.y() ) - self.config.set_int_value( 'kde4.main_window.width', self.width() ) - self.config.set_int_value( 'kde4.main_window.height', self.height() ) - - sizes = self.main_splitter.sizes() - self.config.set_int_value( 'kde4.main_window.main_splitter_left_w', sizes[0] ) - self.config.set_int_value( 'kde4.main_window.main_splitter_right_w', sizes[1] ) - - sizes = self.second_splitter.sizes() - self.config.set_int_value( 'kde4.main_window.second_splitter_left_w', sizes[0] ) - self.config.set_int_value( 'kde4.main_window.second_splitter_right_w', sizes[1] ) - - self.config.set_int_value( 'kde4.main_window.files_view.name_width', self.list_files_view.header().sectionSize( 0 ) ) - self.config.set_int_value( 'kde4.main_window.files_view.size_width', self.list_files_view.header().sectionSize( 1 ) ) - self.config.set_int_value( 'kde4.main_window.files_view.date_width', self.list_files_view.header().sectionSize( 2 ) ) - - self.config.set_bool_value( 'kde4.show_hidden_files', self.show_hidden_files ) - - self.config.set_int_value( 'kde4.main_window.files_view.sort.column', self.list_files_view.header().sortIndicatorSection() ) - self.config.set_bool_value( 'kde4.main_window.files_view.sort.ascending', self.list_files_view.header().sortIndicatorOrder() == Qt.AscendingOrder ) - - #umount - try: - mnt = mount.Mount(cfg = self.config, parent = self) - mnt.umount(self.config.current_hash_id) - except mount.MountException as ex: - KMessageBox.error( self, QString.fromUtf8( str(ex) ) ) - - self.config.save() - - event.accept() - - def update_profiles( self ): - if self.disable_profile_changed: - return - - self.disable_profile_changed = True - - self.combo_profiles.clear() - - index = 0 - profiles = self.config.get_profiles_sorted_by_name() - - for profile_id in profiles: - if profile_id == self.config.get_current_profile(): - index = self.combo_profiles.count() - self.combo_profiles.addItem( QString.fromUtf8( self.config.get_profile_name( profile_id ) ), QVariant( QString.fromUtf8( profile_id ) ) ) - - self.combo_profiles.setCurrentIndex( index ) - self.combo_profiles_action.setVisible( len( profiles ) > 1 ) - - self.update_profile() - - self.disable_profile_changed = False - - def update_profile( self ): - self.update_time_line() - self.update_places() - self.update_files_view( 0 ) - - def on_profile_changed( self, index ): - if self.disable_profile_changed: - return - - profile_id = str( self.combo_profiles.itemData( index ).toString().toUtf8() ) - if len( profile_id ) <= 0: - return - - if profile_id != self.config.get_current_profile(): - self.remount(profile_id, self.config.get_current_profile()) - self.config.set_current_profile( profile_id ) - self.update_profile() - - def remount( self, new_profile_id, old_profile_id): - try: - mnt = mount.Mount(cfg = self.config, profile_id = old_profile_id, parent = self) - hash_id = mnt.remount(new_profile_id) - except mount.MountException as ex: - KMessageBox.error( self, QString.fromUtf8( str(ex) ) ) - else: - self.config.set_current_hash_id(hash_id) - - def get_default_startup_folder_and_file( self ): - last_path = self.config.get_str_value( 'gnome.last_path', '' ) - if len(last_path) > 0 and os.path.isdir(last_path): - return ( last_path, None, False ) - return ( '/', None, False ) - - def get_cmd_startup_folder_and_file( self, cmd ): - if cmd is None: - cmd = self.app_instance.raise_cmd - - if len( cmd ) < 1: - return None - - path = None - show_snapshots = False - - for arg in cmd.split( '\n' ): - if len( arg ) < 1: - continue - if arg == '-s' or arg == '--snapshots': - show_snapshots = True - continue - if arg[0] == '-': - continue - if path is None: - path = arg - - if path is None: - return None - - if len( path ) < 1: - return None - - path = os.path.expanduser( path ) - path = os.path.abspath( path ) - - if os.path.isdir( path ): - if len( path ) < 1: - show_snapshots = False - - if show_snapshots: - return ( os.path.dirname( path ), path, True ) - else: - return ( path, '', False ) - - if os.path.isfile( path ): - return ( os.path.dirname( path ), path, show_snapshots ) - - return None - - def get_startup_folder_and_file( self, cmd = None ): - startup_folder = self.get_cmd_startup_folder_and_file( cmd ) - if startup_folder is None: - return self.get_default_startup_folder_and_file() - return startup_folder - - def raise_application( self ): - raise_cmd = self.app_instance.raise_command() - if raise_cmd is None: - return - - print("Raise cmd: " + raise_cmd) - self.kapp.alert( self ) - - def update_take_snapshot( self, force_wait_lock = False ): - if force_wait_lock: - self.force_wait_lock_counter = 10 - - busy = self.snapshots.is_busy() - if busy: - self.force_wait_lock_counter = 0 - - if self.force_wait_lock_counter > 0: - self.force_wait_lock_counter = self.force_wait_lock_counter - 1 - - fake_busy = busy or self.force_wait_lock_counter > 0 - - take_snapshot_message = self.snapshots.get_take_snapshot_message() - if fake_busy: - if take_snapshot_message is None: - take_snapshot_message = ( 0, '...' ) - elif take_snapshot_message is None: - take_snapshot_message = self.last_take_snapshot_message - if take_snapshot_message is None: - take_snapshot_message = ( 0, _('Done') ) - - force_update = False - - if fake_busy: - if self.btn_take_snapshot.isEnabled(): - self.btn_take_snapshot.setEnabled( False ) - elif not self.btn_take_snapshot.isEnabled(): - force_update = True - - self.btn_take_snapshot.setEnabled( True ) - - snapshots_list = self.snapshots.get_snapshots_and_other_list() - - if snapshots_list != self.snapshots_list: - self.snapshots_list = snapshots_list - self.update_time_line( False ) - take_snapshot_message = ( 0, _('Done') ) - else: - if take_snapshot_message[0] == 0: - take_snapshot_message = ( 0, _('Done, no backup needed') ) - - self.shutdown.shutdown() - - if take_snapshot_message != self.last_take_snapshot_message or force_update: - self.last_take_snapshot_message = take_snapshot_message - - if fake_busy: - message = _('Working:') + ' ' + self.last_take_snapshot_message[1].replace( '\n', ' ' ) - elif take_snapshot_message[0] == 0: - message = self.last_take_snapshot_message[1].replace( '\n', ' ' ) - else: - message = _('Error:') + ' ' + self.last_take_snapshot_message[1].replace( '\n', ' ' ) - - self.statusBar().showMessage( QString.fromUtf8( message ) ) - - #if not fake_busy: - # self.last_take_snapshot_message = None - - def on_list_places_current_item_changed( self, item, previous ): - if item is None: - return - - path = str( item.data( 0, Qt.UserRole ).toString().toUtf8() ) - if len( path ) == 0: - return - - if path == self.path: - return - - self.path = path - self.update_files_view( 3 ) - - def add_place( self, name, path, icon ): - item = QTreeWidgetItem() - - item.setText( 0, name ) - - if len( icon ) > 0: - item.setIcon( 0, KIcon( icon ) ) - - item.setData( 0, Qt.UserRole, QVariant( QString.fromUtf8( path ) ) ) - - if len( path ) == 0: - item.setFont( 0, kde4tools.get_font_bold( item.font( 0 ) ) ) - #item.setFlags( Qt.NoItemFlags ) - item.setFlags( Qt.ItemIsEnabled ) - item.setBackgroundColor( 0, QColor( 196, 196, 196 ) ) - item.setTextColor( 0, QColor( 60, 60, 60 )) - - self.list_places.addTopLevelItem( item ) - - if path == self.path: - self.list_places.setCurrentItem( item ) - - return item - - def update_places( self ): - self.list_places.clear() - self.add_place( QString.fromUtf8( _('Global') ), '', '' ) - self.add_place( QString.fromUtf8( _('Root') ), '/', 'computer' ) - self.add_place( QString.fromUtf8( _('Home') ), os.path.expanduser( '~' ), 'user-home' ) - - #add backup folders - include_folders = self.config.get_include() - if len( include_folders ) > 0: - folders = [] - for item in include_folders: - if item[1] == 0: - folders.append( item[0] ) - - if len( folders ) > 0: - self.add_place( QString.fromUtf8( _('Backup folders') ), '', '' ) - for folder in folders: - #self.add_place( QString.fromUtf8(folder[0]), folder[0], 'document-save' ) - self.add_place( QString.fromUtf8(folder), folder, 'document-save' ) - - def update_snapshot_actions( self ): - enabled = False - - item = self.list_time_line.currentItem() - if not item is None: - if len( self.time_line_get_snapshot_id( item ) ) > 1: - enabled = True - - #update remove/name snapshot buttons - self.btn_name_snapshot.setEnabled( enabled ) - self.btn_remove_snapshot.setEnabled( enabled ) - self.btn_snapshot_log_view.setEnabled( enabled ) - - def on_list_time_line_current_item_changed( self, item, previous ): - self.update_snapshot_actions() - - if item is None: - return - - snapshot_id = self.time_line_get_snapshot_id( item ) - if len( snapshot_id ) == 0: - #self.list_time_line.setCurrentItem( previous ) - return - - if snapshot_id == self.snapshot_id: - return - - self.snapshot_id = snapshot_id - self.update_files_view( 2 ) - - def time_line_get_snapshot_id( self, item ): - return str( item.data( 0, Qt.UserRole ).toString().toUtf8() ) - - def time_line_update_snapshot_name( self, item ): - snapshot_id = self.time_line_get_snapshot_id( item ) - if len( snapshot_id ) > 0: - item.setText( 0, self.snapshots.get_snapshot_display_name( snapshot_id ) ) - - def add_time_line( self, snapshot_name, snapshot_id ): - item = QTreeWidgetItem() - item.setText( 0, snapshot_name ) - item.setFont( 0, kde4tools.get_font_normal( item.font( 0 ) ) ) - item.setData( 0, Qt.UserRole, QVariant( QString.fromUtf8( snapshot_id ) ) ) - - if len( snapshot_id ) == 0: - item.setFont( 0, kde4tools.get_font_bold( item.font( 0 ) ) ) - #item.setFlags( Qt.NoItemFlags ) - item.setFlags( Qt.ItemIsEnabled ) - item.setBackgroundColor( 0, QColor( 196, 196, 196 ) ) - item.setTextColor( 0, QColor( 60, 60, 60 ) ) - - self.list_time_line.addTopLevelItem( item ) - - return item - - def update_time_line( self, get_snapshots_list = True ): - self.list_time_line.clear() - self.add_time_line( QString.fromUtf8( self.snapshots.get_snapshot_display_name( '/' ) ), '/' ) - - if get_snapshots_list: - self.snapshots_list = self.snapshots.get_snapshots_and_other_list() - - groups = [] - now = datetime.date.today() - - #today - date = now - groups.append( (QString.fromUtf8( _('Today') ), self.snapshots.get_snapshot_id( date ), []) ) - - #yesterday - date = now - datetime.timedelta( days = 1 ) - groups.append( (QString.fromUtf8( _('Yesterday') ), self.snapshots.get_snapshot_id( date ), []) ) - - #this week - date = now - datetime.timedelta( days = now.weekday() ) - groups.append( (QString.fromUtf8( _('This week') ), self.snapshots.get_snapshot_id( date ), []) ) - - #last week - date = now - datetime.timedelta( days = now.weekday() + 7 ) - groups.append( (QString.fromUtf8( _('Last week') ), self.snapshots.get_snapshot_id( date ), []) ) - - #fill groups - for snapshot_id in self.snapshots_list: - found = False - - for group in groups: - if snapshot_id >= group[1]: - group[2].append( snapshot_id ) - found = True - break - - if not found: - year = int( snapshot_id[ 0 : 4 ] ) - month = int( snapshot_id[ 4 : 6 ] ) - date = datetime.date( year, month, 1 ) - - group_name = '' - if year == now.year: - group_name = date.strftime( '%B' ).capitalize() - else: - group_name = date.strftime( '%B, %Y' ).capitalize() - - groups.append( ( QString.fromUtf8( group_name ), self.snapshots.get_snapshot_id( date ), [ snapshot_id ]) ) - - #fill time_line list - for group in groups: - if len( group[2] ) > 0: - self.add_time_line( group[0], '' ); - for snapshot_id in group[2]: - list_item = self.add_time_line( self.snapshots.get_snapshot_display_name( snapshot_id ), snapshot_id ) - if snapshot_id == self.snapshot_id: - self.list_time_line.setCurrentItem( list_item ) - - if self.list_time_line.currentItem() is None: - self.list_time_line.setCurrentItem( self.list_time_line.topLevelItem( 0 ) ) - if self.snapshot_id != '/': - self.snapshot_id = '/' - self.update_files_view( 2 ) - - def on_btn_take_snapshot_clicked( self ): - backintime.take_snapshot_now_async( self.config ) - self.update_take_snapshot( True ) - - def on_btn_update_snapshots_clicked( self ): - self.update_time_line() - self.update_files_view( 2 ) - - def on_btn_name_snapshot_clicked( self ): - item = self.list_time_line.currentItem() - if item is None: - return - - snapshot_id = self.time_line_get_snapshot_id( item ) - if len( snapshot_id ) <= 1: - return - - name = self.snapshots.get_snapshot_name( snapshot_id ) - - ret_val = KInputDialog.getText( QString.fromUtf8( _( 'Snapshot Name' ) ), '', name, self, self.text_validator ) - if not ret_val[1]: - return - - new_name = str( ret_val[0].toUtf8() ).strip() - if name == new_name: - return - - self.snapshots.set_snapshot_name( snapshot_id, new_name ) - self.time_line_update_snapshot_name( item ) - - def on_btn_log_view_clicked ( self ): - logviewdialog.LogViewDialog( self ).exec_() - - def on_btn_snapshot_log_view_clicked ( self ): - item = self.list_time_line.currentItem() - if item is None: - return - - snapshot_id = self.time_line_get_snapshot_id( item ) - if len( snapshot_id ) <= 1: - return - - logviewdialog.LogViewDialog( self, snapshot_id ).exec_() - - def on_btn_remove_snapshot_clicked ( self ): - item = self.list_time_line.currentItem() - if item is None: - return - - snapshot_id = self.time_line_get_snapshot_id( item ) - if len( snapshot_id ) <= 1: - return - - if KMessageBox.Yes != KMessageBox.warningYesNo( self, QString.fromUtf8( _('Are you sure you want to remove the snapshot:\n%s') % self.snapshots.get_snapshot_display_name( snapshot_id ) ) ): - return - - self.snapshots.remove_snapshot( snapshot_id ) - self.update_time_line() - - def on_btn_settings_clicked( self ): - if QDialog.Accepted == settingsdialog.SettingsDialog( self ).exec_(): - profile_id = self.config.get_current_profile() - self.remount(profile_id, profile_id) - self.update_profiles() - - def on_btn_shutdown_toggled(self, checked): - self.shutdown.activate_shutdown = checked - - def on_about( self ): - dlg = KAboutApplicationDialog( self.kaboutdata, self ) - dlg.exec_() - - def on_help( self ): - self.open_url( 'http://backintime.le-web.org/documentation' ); - - def on_website( self ): - self.open_url( 'http://backintime.le-web.org' ); - - def on_faq( self ): - self.open_url( 'https://answers.launchpad.net/backintime/+faqs' ); - - def on_ask_a_question( self ): - self.open_url( 'https://answers.launchpad.net/backintime' ); - - def on_report_a_bug( self ): - self.open_url( 'https://bugs.launchpad.net/backintime' ); - - def open_url( self, url ): - self.run = KRun( KUrl( QString.fromUtf8( url ) ), self, True ) - - def on_btn_show_hidden_files_toggled( self, checked ): - self.show_hidden_files = checked - self.update_files_view( 1 ) - - def restore_this( self ): - if len( self.snapshot_id ) <= 1: - return - - idx = self.list_files_view_sort_filter_proxy.index( self.list_files_view.currentIndex().row(), 0 ) - selected_file = str( self.list_files_view_sort_filter_proxy.data( idx ).toString().toUtf8() ) - if len( selected_file ) <= 0: - return - - rel_path = os.path.join( self.path, selected_file ) - restoredialog.restore( self, self.snapshot_id, rel_path ) - - def restore_this_to( self ): - if len( self.snapshot_id ) <= 1: - return - - idx = self.list_files_view_sort_filter_proxy.index( self.list_files_view.currentIndex().row(), 0 ) - selected_file = str( self.list_files_view_sort_filter_proxy.data( idx ).toString().toUtf8() ) - if len( selected_file ) <= 0: - return - - rel_path = os.path.join( self.path, selected_file ) - restoredialog.restore( self, self.snapshot_id, rel_path, None ) - - def restore_parent( self ): - if len( self.snapshot_id ) <= 1: - return - restoredialog.restore( self, self.snapshot_id, self.path) - - def restore_parent_to( self ): - if len( self.snapshot_id ) <= 1: - return - restoredialog.restore( self, self.snapshot_id, self.path, None ) - - def on_btn_snapshots_clicked( self ): - idx = self.list_files_view_sort_filter_proxy.index( self.list_files_view.currentIndex().row(), 0 ) - selected_file = str( self.list_files_view_sort_filter_proxy.data( idx ).toString().toUtf8() ) - if len( selected_file ) <= 0: - return - - rel_path = os.path.join( self.path, selected_file ) - icon = None - if self.list_files_view_sort_filter_proxy.data( idx, Qt.DecorationRole ).type() == QVariant.Icon: - icon = self.list_files_view_sort_filter_proxy.data( idx, Qt.DecorationRole ) - - dlg = snapshotsdialog.SnapshotsDialog( self, self.snapshot_id, rel_path, icon ) - if QDialog.Accepted == dlg.exec_(): - if dlg.snapshot_id != self.snapshot_id: - for index in xrange( self.list_time_line.topLevelItemCount() ): - item = self.list_time_line.topLevelItem( index ) - snapshot_id = self.time_line_get_snapshot_id( item ) - if snapshot_id == dlg.snapshot_id: - self.snapshot_id = dlg.snapshot_id - self.list_time_line.setCurrentItem( item ) - self.update_files_view( 2 ) - break - - def on_btn_folder_up_clicked( self ): - if len( self.path ) <= 1: - return - - path = os.path.dirname( self.path ) - if self.path == path: - return - - self.path = path - self.update_files_view( 0 ) - - def on_list_files_view_item_activated( self, model_index ): - if self.kapp.keyboardModifiers() and Qt.ControlModifier: - return - - if model_index is None: - return - - idx = self.list_files_view_sort_filter_proxy.index( model_index.row(), 0 ) - rel_path = str( self.list_files_view_sort_filter_proxy.data( idx ).toString().toUtf8() ) - if len( rel_path ) <= 0: - return - - rel_path = os.path.join( self.path, rel_path ) - full_path = self.snapshots.get_snapshot_path_to( self.snapshot_id, rel_path ) - - if os.path.exists( full_path ): - if self.snapshots.can_open_path( self.snapshot_id, full_path ): - if os.path.isdir( full_path ): - self.path = rel_path - self.update_files_view( 0 ) - else: - self.run = KRun( KUrl( QString.fromUtf8( full_path ) ), self, True ) - - def files_view_get_name( self, item ): - return str( item.text( 0 ).toUtf8() ) - - def files_view_get_type( self, item ): - return int( item.text( 4 ) ) - - def add_files_view( self, name, size_str, date_str, size_int, type ): - full_path = self.snapshots.get_snapshot_path_to( self.snapshot_id, os.path.join( self.path, name ) ) - icon = KIcon( KMimeType.iconNameForUrl( KUrl( QString.fromUtf8( full_path ) ) ) ) - - item = QTreeWidgetItem( self.list_files_view ) - - item.setIcon( 0, icon ) - item.setText( 0, name ) - item.setText( 1, size_str ) - item.setText( 2, date_str ) - item.setText( 3, str( size_int ) ) - item.setText( 4, str( type ) ) - - self.list_files_view.addTopLevelItem( item ) - return item - - def update_files_view( self, changed_from, selected_file = None, show_snapshots = False ): #0 - files view change directory, 1 - files view, 2 - time_line, 3 - places - if 0 == changed_from or 3 == changed_from: - selected_file = '' - - if 0 == changed_from: - #update places - self.list_places.setCurrentItem( None ) - for place_index in xrange( self.list_places.topLevelItemCount() ): - item = self.list_places.topLevelItem( place_index ) - if self.path == str( item.data( 0, Qt.UserRole ).toString().toUtf8() ): - self.list_places.setCurrentItem( item ) - break - - tooltip = '' - text = '' - if len( self.snapshot_id ) > 1: - name = self.snapshots.get_snapshot_display_id( self.snapshot_id ) - text = _('Snapshot: %s') % name - tooltip = _('View the snapshot made at %s') % name - else: - tooltip = _('View the current disk content') - text = _('Now') - - self.right_widget.setTitle( QString.fromUtf8( _( text ) ) ) - self.right_widget.setToolTip( QString.fromUtf8( _( tooltip ) ) ) - - #try to keep old selected file - if selected_file is None: - idx = self.list_files_view_sort_filter_proxy.index( self.list_files_view.currentIndex().row(), 0 ) - selected_file = str( self.list_files_view_sort_filter_proxy.data( idx ).toString().toUtf8() ) - - self.selected_file = selected_file - - #update files view - full_path = self.snapshots.get_snapshot_path_to( self.snapshot_id, self.path ) - - if os.path.isdir( full_path ): - self.list_files_view_model.dirLister().setShowingDotFiles( self.show_hidden_files ) - self.list_files_view_model.dirLister().openUrl( KUrl( QString.fromUtf8( full_path ) ), KDirLister.Reload ) - self.files_view_toolbar.setEnabled( False ) - self.files_view_layout.setCurrentWidget( self.list_files_view ) - else: - self.btn_restore.setEnabled( False ) - self.btn_snapshots.setEnabled( False ) - self.files_view_layout.setCurrentWidget( self.lbl_folder_dont_exists ) - - #show current path - self.edit_current_path.setText( QString.fromUtf8( self.path ) ) - self.menu_restore_parent.setText(QString.fromUtf8( _("Restore '%s'") % self.path )) - self.menu_restore_parent_to.setText(QString.fromUtf8( _("Restore '%s' to ...") % self.path )) - - #update folder_up button state - self.btn_folder_up.setEnabled( len( self.path ) > 1 ) - -# #show snapshots -# if show_snapshots: -# self.on_btn_snapshots_clicked( None ) - - def on_dir_lister_completed( self ): - has_files = ( self.list_files_view_model.rowCount() > 0 ) - - #update restore button state - self.btn_restore.setEnabled( len( self.snapshot_id ) > 1 and has_files ) - - #update snapshots button state - self.btn_snapshots.setEnabled( has_files ) - - #enable files toolbar - self.files_view_toolbar.setEnabled( True ) - - #select selected_file - found = False - - if len( self.selected_file ) > 0: - for index in xrange( self.list_files_view_sort_filter_proxy.rowCount() ): - model_index = self.list_files_view_sort_filter_proxy.index( index, 0 ) - file_name = str( self.list_files_view_sort_filter_proxy.data( model_index ).toString().toUtf8() ) - if file_name == self.selected_file: - self.list_files_view.setCurrentIndex( model_index ) - found = True - break - self.selected_file = '' - - if not found and has_files: - self.list_files_view.setCurrentIndex( self.list_files_view_sort_filter_proxy.index( 0, 0 ) ) - - -class KDE4TakeSnapshotCallback( threading.Thread ): #used to display status icon - def __init__( self ): - threading.Thread.__init__( self ) - self.stop_flag = False - self.cfg = None - - def init( self, cfg ): - self.cfg = cfg - self.snapshots = snapshots.Snapshots( self.cfg ) - - def snapshot_begin( self ): - self.stop_flag = False - self.start() - - def snapshot_end( self ): - self.stop_flag = True - try: - self.join() - except: - pass - - def show_popup( self ): - if not self.popup is None: - self.popup.deleteLater() - self.popup = None - - if not self.last_message is None: - self.popup = KPassivePopup.message( self.cfg.APP_NAME, QString.fromUtf8( self.last_message[1] ), self.status_icon ) - self.popup.setAutoDelete( False ) - - def run(self): - logger.info( '[KDE4TakeSnapshotCallback.run]' ) - - if not check_x_server(): - logger.info( '[KDE4TakeSnapshotCallback.run] no X server' ) - return - - logger.info( '[KDE4TakeSnapshotCallback.run] begin loop' ) - - kapp, kaboutdata = create_kapplication( self.cfg ) - self.last_message = None - - self.status_icon = KSystemTrayIcon() - self.status_icon.setIcon( KIcon('document-save') ) - #self.status_icon.actionCollection().clear() - self.status_icon.setContextMenu( None ) - self.status_icon.show() - self.popup = None - QObject.connect( self.status_icon, SIGNAL('activated(QSystemTrayIcon::ActivationReason)'), self.show_popup ) - first_error = self.cfg.is_notify_enabled() - - while True: - kapp.processEvents() - - if self.stop_flag: - break - - if not kapp.hasPendingEvents(): - message = self.snapshots.get_take_snapshot_message() - if message is None and self.last_message is None: - message = ( 0, _('Working...') ) - - if not message is None: - if message != self.last_message: - self.last_message = message - self.status_icon.setToolTip( QString.fromUtf8( self.last_message[1] ) ) - - if self.last_message[0] != 0: - self.status_icon.setIcon( KIcon('document-save-as') ) - if first_error: - first_error = False - self.show_popup() - else: - self.status_icon.setIcon( KIcon('document-save') ) - - time.sleep( 0.2 ) - - self.status_icon.hide() - kapp.processEvents() - - logger.info( '[KDE4TakeSnapshotCallback.run] end loop' ) - - -def create_kapplication( cfg ): - kaboutdata = KAboutData( 'backintime', '', ki18n( cfg.APP_NAME ), cfg.VERSION, ki18n( '' ), KAboutData.License_GPL_V2, ki18n( cfg.COPYRIGHT ), ki18n( '' ), 'http://backintime.le-web.org', 'bit-team@lists.launchpad.net' ) - kaboutdata.setProgramIconName( 'document-save' ) - - #extra_translations = _('about-translators') - #if extra_translations is None: - # extra_translations = '' - #elif extra_translations == 'about-translators': - # extra_translations = '' - # - #translation_text = cfg.get_translations() + extra_translations - translation_text = cfg.get_translations() - - translators = [] - translator_emails = [] - for line in translation_text.split( '\n' ): - line = line.strip() - if len( line ) == 0: - continue - - index1 = line.find( ':' ) - if index1 < 0: - continue - - index2 = line.find( '<', index1 ) - if index2 < 0: - continue - - index3 = line.find( '>', index2 ) - if index3 < 0: - continue - - translators.append( line[ index1 + 1 : index2 ].strip() ) - translator_emails.append( line[ index2 + 1 : index3 ].strip() ) - - kaboutdata.setTranslator( ki18n( ','.join( translators ) ), ki18n( ','.join( translator_emails ) ) ) - - #KCmdLineArgs.init( sys.argv, kaboutdata ) - KCmdLineArgs.init( [sys.argv[0]], kaboutdata ) - return ( KApplication(), kaboutdata ) - - -if __name__ == '__main__': - cfg = backintime.start_app( 'backintime-kde4' ) - - raise_cmd = '' - if len( sys.argv ) > 1: - raise_cmd = '\n'.join( sys.argv[ 1 : ] ) - - app_instance = guiapplicationinstance.GUIApplicationInstance( cfg.get_app_instance_file(), raise_cmd ) - - logger.openlog() - kapp, kaboutdata = create_kapplication( cfg ) - - main_window = MainWindow( cfg, app_instance, kapp, kaboutdata ) - - if cfg.is_configured(): - main_window.show() - kapp.exec_() - - logger.closelog() - - app_instance.exit_application() - diff -Nru backintime-1.0.36/kde4/backintime-kde4 backintime-1.1.12/kde4/backintime-kde4 --- backintime-1.0.36/kde4/backintime-kde4 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/kde4/backintime-kde4 1970-01-01 00:00:00.000000000 +0000 @@ -1,31 +0,0 @@ -#!/bin/sh - -# Back In Time -# Copyright (C) 2008-2009 Oprea Dan, Bart de Koning, Richard Bailey -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -if [ -f app.py ]; then - APP_PATH="." -else - APP_PATH="/usr/share/backintime/kde4" -fi - -if [ "x$SSH_AUTH_SOCK" = "x" ]; then - eval "$(ssh-agent)" -fi - -python ${APP_PATH}/app.py "$@" - diff -Nru backintime-1.0.36/kde4/backintime-kde4.desktop backintime-1.1.12/kde4/backintime-kde4.desktop --- backintime-1.0.36/kde4/backintime-kde4.desktop 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/kde4/backintime-kde4.desktop 1970-01-01 00:00:00.000000000 +0000 @@ -1,11 +0,0 @@ -[Desktop Entry] -Name=Back In Time -Exec=backintime-kde4 -Icon=document-save -Terminal=false -X-MultipleArgs=false -Type=Application -StartupNotify=true -Categories=Qt;KDE;System; -Comment=Simple backup system -Comment[sl]=Enostaven sistem ustvarjanja varnostnih kopij diff -Nru backintime-1.0.36/kde4/backintime-kde4-root.desktop backintime-1.1.12/kde4/backintime-kde4-root.desktop --- backintime-1.0.36/kde4/backintime-kde4-root.desktop 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/kde4/backintime-kde4-root.desktop 1970-01-01 00:00:00.000000000 +0000 @@ -1,11 +0,0 @@ -[Desktop Entry] -Name=Back In Time (root) -Exec=kdesudo -c backintime-kde4 -Icon=document-save -Terminal=false -X-MultipleArgs=false -Type=Application -StartupNotify=true -Categories=Qt;KDE;System; -Comment=Simple backup system -Comment[sl]=Enostaven sistem ustvarjanja varnostnih kopij diff -Nru backintime-1.0.36/kde4/configure backintime-1.1.12/kde4/configure --- backintime-1.0.36/kde4/configure 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/kde4/configure 1970-01-01 00:00:00.000000000 +0000 @@ -1,51 +0,0 @@ -#!/bin/sh - -#set default options -CHECK="--check" -SUDO="--kdesudo" -PYTHON="--python" - -USR_BIN_FILES="backintime-kde4" - -#get commandline arguments -for arg in $*; do - case $arg in - --check | --no-check) CHECK=$arg;; - --kdesu | --kdesudo) SUDO=$arg;; - --python | --python2) PYTHON=$arg;; - esac -done - -#check KDE4 -if [ $CHECK = "--check" ]; then - if [ -z `which kdeinit4` ]; then - printf "ERROR: Can't find KDE4 !\n" - exit 1 - fi -fi - -#set sudo -case $SUDO in - --kdesudo) sed -i -e "s/Exec=\(.*\)backintime-kde4/Exec=kdesudo -c backintime-kde4/" backintime-kde4-root.desktop;; - --kdesu) sed -i -e "s/Exec=\(.*\)backintime-kde4/Exec=kdesu -c backintime-kde4/" backintime-kde4-root.desktop;; -esac - -#patch python command -#use 'python' or 'python2' to start Python Version 2.x -case $PYTHON in - --python) sed -e "s/^python2\? /python /g" \ - -e "s/^ssh-agent python2\? /ssh-agent python /g" \ - -i $USR_BIN_FILES - ;; - --python2) sed -e "s/^python2\? /python2 /g" \ - -e "s/^ssh-agent python2\? /ssh-agent python2 /g" \ - -i $USR_BIN_FILES - ;; -esac - -cp Makefile.template Makefile - -printf "All OK. Now run:\n" -printf " make\n" -printf " sudo make install\n" - diff -Nru backintime-1.0.36/kde4/debian_specific/compat backintime-1.1.12/kde4/debian_specific/compat --- backintime-1.0.36/kde4/debian_specific/compat 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/kde4/debian_specific/compat 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -5 diff -Nru backintime-1.0.36/kde4/debian_specific/control backintime-1.1.12/kde4/debian_specific/control --- backintime-1.0.36/kde4/debian_specific/control 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/kde4/debian_specific/control 1970-01-01 00:00:00.000000000 +0000 @@ -1,14 +0,0 @@ -Package: backintime-kde4 -Source: backintime-kde4 -Version: 1.0.36 -Priority: optional -Section: kde -Maintainer: BIT Team -Architecture: all -Homepage: http://backintime.le-web.org -Depends: x11-utils, kdesudo, libnotify-bin, python-kde4 (>= 4.1), backintime-common (>= 1.0.36~), backintime-notify (>= 1.0.36~) -Suggests: kompare, python-keyring-kwallet -Conflicts: backintime-kde (<< 1.0.36~) -Replaces: backintime-kde (<< 1.0.36~) -Description: Simple backup system for KDE4 Desktop - This is a KDE4 (>= 4.1) GUI frontend for backintime-common. diff -Nru backintime-1.0.36/kde4/debian_specific/control.source backintime-1.1.12/kde4/debian_specific/control.source --- backintime-1.0.36/kde4/debian_specific/control.source 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/kde4/debian_specific/control.source 1970-01-01 00:00:00.000000000 +0000 @@ -1,8 +0,0 @@ -Source: backintime-kde4 -Maintainer: BIT Team -Section: kde -Priority: optional -Build-Depends: debhelper (>= 7) -Standards-Version: 3.9.5 -Homepage: http://backintime.le-web.org - diff -Nru backintime-1.0.36/kde4/debian_specific/control.virtual-kde backintime-1.1.12/kde4/debian_specific/control.virtual-kde --- backintime-1.0.36/kde4/debian_specific/control.virtual-kde 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/kde4/debian_specific/control.virtual-kde 1970-01-01 00:00:00.000000000 +0000 @@ -1,10 +0,0 @@ -Package: backintime-kde -Priority: optional -Section: oldlibs -Architecture: all -Homepage: http://backintime.le-web.org -Depends: backintime-kde4 -Description: Virtual package - This is a virtual package to replace backintime-kde from official repositories - with backintime-kde4 from PPA. It can safely be removed. - diff -Nru backintime-1.0.36/kde4/debian_specific/postrm backintime-1.1.12/kde4/debian_specific/postrm --- backintime-1.0.36/kde4/debian_specific/postrm 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/kde4/debian_specific/postrm 1970-01-01 00:00:00.000000000 +0000 @@ -1,6 +0,0 @@ -#!/bin/sh -rm -rf /usr/share/backintime/kde4/*.pyc -rm -rf /usr/share/backintime/plugins/kde4*.pyc -exit 0 - -#DEBHELPER# diff -Nru backintime-1.0.36/kde4/debian_specific/rules backintime-1.1.12/kde4/debian_specific/rules --- backintime-1.0.36/kde4/debian_specific/rules 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/kde4/debian_specific/rules 1970-01-01 00:00:00.000000000 +0000 @@ -1,62 +0,0 @@ -#!/usr/bin/make -f - -package = backintime-kde4 - -clean: - dh_testdir - dh_clean - rm -f build - -install: build - #install python - #dh_installdirs /usr/share/backintime/kde4 - dh_install *.py /usr/share/backintime/kde4 - - #install plugin - #dh_installdirs /usr/share/backintime/plugins - dh_install plugins/*.py /usr/share/backintime/plugins - - #install application - #dh_installdirs /usr/bin - dh_install backintime-kde4 /usr/bin - - #install copyright file - #dh_installdirs /usr/share/doc/backintime-kde4 - dh_install debian/copyright /usr/share/doc/backintime-kde4 - - #install .desktop file(s) - #dh_installdirs /usr/share/applications/kde4 - dh_install *.desktop /usr/share/applications/kde4 - - #install docbook - #dh_installdirs /usr/share/doc/kde4/HTML/en/backintime/figures - dh_install docbook/en/*.docbook /usr/share/doc/kde4/HTML/en/backintime - #dh_install docbook/en/figures/*.png /usr/share/doc/kde4/HTML/en/backintime/figures - -build: - touch build - -build-arch: build - -build-indep: build - -binary-indep: install - dh_testdir -i - dh_testroot -i - #dh_installdocs -i NEWS - #dh_installchangelogs -i ChangeLog - #dh_strip -i - #dh_compress -i - dh_fixperms -i - dh_installdeb -i - #dh_shlibdeps -i - dh_gencontrol -i - dh_md5sums -i - dh_builddeb -i - -binary-arch: install - -binary: binary-indep - -.PHONY: binary binary-arch binary-indep clean - diff -Nru backintime-1.0.36/kde4/debian_specific/source/format backintime-1.1.12/kde4/debian_specific/source/format --- backintime-1.0.36/kde4/debian_specific/source/format 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/kde4/debian_specific/source/format 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -1.0 diff -Nru backintime-1.0.36/kde4/docbook/en/index.docbook backintime-1.1.12/kde4/docbook/en/index.docbook --- backintime-1.0.36/kde4/docbook/en/index.docbook 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/kde4/docbook/en/index.docbook 1970-01-01 00:00:00.000000000 +0000 @@ -1,116 +0,0 @@ - - - -&appname;"> - - - -]> - - -
- - &app; Manual - - &app; is a simple backup tool for KDE4 desktop. - - - - 2008-2009 - Oprea Dan, Bart de Koning, Richard Bailey - - - - - - - - - - - - - - - - - - - - This manual describes version &appversion; of Back In Time. - - - Feedback - To report a bug or make a suggestion regarding the &app; application or - this manual, send an email to: - bit-team@lists.launchpad.net. - - - - - - - - - - Introduction - &app; is a simple backup tool for Linux (this is KDE4 version). The backup is done by taking snapshots of - a specified set of folders. - All you have to do is: - - configure where to save snapshots - cofigure what folders to backup - schedule automatic backup: disabled, every 5 minutes, every 10 minutes, every hour, every day, every week, every month - - &app; acts as a "user mode" backup tool. This means that you can backup/restore only folders - you have write access to (actually you can backup read-only folders, but you can't restore them). - If you want to run it as root you need to use "su" (command line), "gksu" (Gnome) or "kdesudo" (KDE). - A new snapshot is created only if something changed since the last snapshot (if any). - A snapshot contains all the files from the selected folders (except for exclude patterns). - In order to reduce disk space it use hard-links (if possible) between snapshots for unchanged files. - This way a file of 10Mb, unchanged for 10 snapshots, will use only 10Mb on the disk. - When you restore a file 'A', if it already exists on the file system it will be renamed to - 'A.backup.currentdate'. - This documentation is not maintained (at least for the moment), please use on-line documentation: - http://backintime.le-web.org/documentation - - - - - - About &app; - &app; was written by Oprea Dan - (dan@le-web.org), Bart de Koning (bratdaking@gmail.com), - Richard Bailey (rmjb@mail.com). To find more information about - &app;, please visit the - Back In Time Web - page. - - To report a bug or make a suggestion regarding this application or - this manual, sent a mail to - bit-team@lists.launchpad.net. - - - This program is distributed under the terms of the GNU - General Public license version 2 as published by the Free Software - Foundation. A copy of this license can be found in the file - LICENSE included with the source code of this program. - - -
diff -Nru backintime-1.0.36/kde4/docbook/en/legal.xml backintime-1.1.12/kde4/docbook/en/legal.xml --- backintime-1.0.36/kde4/docbook/en/legal.xml 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/kde4/docbook/en/legal.xml 1970-01-01 00:00:00.000000000 +0000 @@ -1,76 +0,0 @@ - - - Permission is granted to copy, distribute and/or modify this - document under the terms of the GNU Free Documentation - License (GFDL), Version 1.1 or any later version published - by the Free Software Foundation with no Invariant Sections, - no Front-Cover Texts, and no Back-Cover Texts. You can find - a copy of the GFDL at this link or in the file COPYING-DOCS - distributed with this manual. - - This manual is part of a collection of GNOME manuals - distributed under the GFDL. If you want to distribute this - manual separately from the collection, you can do so by - adding a copy of the license to the manual, as described in - section 6 of the license. - - - - Many of the names used by companies to distinguish their - products and services are claimed as trademarks. Where those - names appear in any GNOME documentation, and the members of - the GNOME Documentation Project are made aware of those - trademarks, then the names are in capital letters or initial - capital letters. - - - - DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT ARE PROVIDED - UNDER THE TERMS OF THE GNU FREE DOCUMENTATION LICENSE - WITH THE FURTHER UNDERSTANDING THAT: - - - - DOCUMENT IS PROVIDED ON AN "AS IS" BASIS, - WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR - IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES - THAT THE DOCUMENT OR MODIFIED VERSION OF THE - DOCUMENT IS FREE OF DEFECTS MERCHANTABLE, FIT FOR - A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE - RISK AS TO THE QUALITY, ACCURACY, AND PERFORMANCE - OF THE DOCUMENT OR MODIFIED VERSION OF THE - DOCUMENT IS WITH YOU. SHOULD ANY DOCUMENT OR - MODIFIED VERSION PROVE DEFECTIVE IN ANY RESPECT, - YOU (NOT THE INITIAL WRITER, AUTHOR OR ANY - CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY - SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER - OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS - LICENSE. NO USE OF ANY DOCUMENT OR MODIFIED - VERSION OF THE DOCUMENT IS AUTHORIZED HEREUNDER - EXCEPT UNDER THIS DISCLAIMER; AND - - - - UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL - THEORY, WHETHER IN TORT (INCLUDING NEGLIGENCE), - CONTRACT, OR OTHERWISE, SHALL THE AUTHOR, - INITIAL WRITER, ANY CONTRIBUTOR, OR ANY - DISTRIBUTOR OF THE DOCUMENT OR MODIFIED VERSION - OF THE DOCUMENT, OR ANY SUPPLIER OF ANY OF SUCH - PARTIES, BE LIABLE TO ANY PERSON FOR ANY - DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR - CONSEQUENTIAL DAMAGES OF ANY CHARACTER - INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS - OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR - MALFUNCTION, OR ANY AND ALL OTHER DAMAGES OR - LOSSES ARISING OUT OF OR RELATING TO USE OF THE - DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT, - EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF - THE POSSIBILITY OF SUCH DAMAGES. - - - - - - diff -Nru backintime-1.0.36/kde4/kde4systrayicon.py backintime-1.1.12/kde4/kde4systrayicon.py --- backintime-1.0.36/kde4/kde4systrayicon.py 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/kde4/kde4systrayicon.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,135 +0,0 @@ -# Back In Time -# Copyright (C) 2008-2009 Oprea Dan, Bart de Koning, Richard Bailey -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - - -import sys -import os -import time -import gettext - -_=gettext.gettext - -if len( os.getenv( 'DISPLAY', '' ) ) == 0: - os.putenv( 'DISPLAY', ':0.0' ) - -sys.path = [os.path.join( os.path.dirname( os.path.abspath( os.path.dirname( __file__ ) ) ), 'common' )] + sys.path - -import backintime -import config -import tools -import logger -import snapshots - -from PyQt4.QtCore import QObject, QString, SIGNAL, QTimer -from PyKDE4.kdecore import KAboutData, KCmdLineArgs, ki18n -from PyKDE4.kdeui import KApplication, KSystemTrayIcon, KIcon, KPassivePopup - - -class KDE4SysTrayIcon: - def __init__( self ): - self.snapshots = snapshots.Snapshots() - self.config = self.snapshots.config - - if len( sys.argv ) > 1: - try: - profile_id = int( sys.argv[1] ) - self.config.set_current_profile( profile_id ) - except: - pass - - kaboutdata = KAboutData( 'backintime', '', ki18n( self.config.APP_NAME ), self.config.VERSION, ki18n( '' ), KAboutData.License_GPL_V2, ki18n( self.config.COPYRIGHT ), ki18n( '' ), 'http://backintime.le-web.org', 'bit-team@lists.launchpad.net' ) - kaboutdata.setProgramIconName( 'document-save' ) - - KCmdLineArgs.init( [sys.argv[0]], kaboutdata ) - self.kapp = KApplication() - - self.status_icon = KSystemTrayIcon() - self.status_icon.setIcon( KIcon('document-save') ) - #self.status_icon.actionCollection().clear() - self.status_icon.setContextMenu( None ) - QObject.connect( self.status_icon, SIGNAL('activated(QSystemTrayIcon::ActivationReason)'), self.show_popup ) - - self.first_error = self.config.is_notify_enabled() - self.popup = None - self.last_message = None - - self.timer = QTimer() - QObject.connect( self.timer, SIGNAL('timeout()'), self.update_info ) - - self.ppid = os.getppid() - - def prepare_exit( self ): - self.timer.stop() - - if not self.status_icon is None: - self.status_icon.hide() - self.status_icon = None - - if not self.popup is None: - self.popup.deleteLater() - self.popup = None - - self.kapp.processEvents() - - def run( self ): - self.status_icon.show() - self.timer.start( 500 ) - - logger.info( "[kde4systrayicon] begin loop" ) - - self.kapp.exec_() - - logger.info( "[kde4systrayicon] end loop" ) - - self.prepare_exit() - - def show_popup( self ): - if not self.popup is None: - self.popup.deleteLater() - self.popup = None - - if not self.last_message is None: - self.popup = KPassivePopup.message( self.config.APP_NAME, QString.fromUtf8( self.last_message[1] ), self.status_icon ) - self.popup.setAutoDelete( False ) - - def update_info( self ): - if not tools.is_process_alive( self.ppid ): - self.prepare_exit() - self.kapp.exit(0) - return - - message = self.snapshots.get_take_snapshot_message() - if message is None and self.last_message is None: - message = ( 0, _('Working...') ) - - if not message is None: - if message != self.last_message: - self.last_message = message - self.status_icon.setToolTip( QString.fromUtf8( self.last_message[1] ) ) - - if self.last_message[0] != 0: - self.status_icon.setIcon( KIcon('document-save-as') ) - if self.first_error: - self.first_error = False - self.show_popup() - else: - self.status_icon.setIcon( KIcon('document-save') ) - - -if __name__ == '__main__': - KDE4SysTrayIcon().run() - diff -Nru backintime-1.0.36/kde4/kde4tools.py backintime-1.1.12/kde4/kde4tools.py --- backintime-1.0.36/kde4/kde4tools.py 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/kde4/kde4tools.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,60 +0,0 @@ -# Back In Time -# Copyright (C) 2008-2009 Oprea Dan, Bart de Koning, Richard Bailey -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - - -import os -import os.path - -from PyQt4.QtGui import * -from PyQt4.QtCore import * - - -def get_font_bold( font ): - font.setWeight( QFont.Bold ) - return font - - -def set_font_bold( widget ): - widget.setFont( get_font_bold( widget.font() ) ) - -def get_font_normal( font ): - font.setWeight( QFont.Normal ) - return font - -def set_font_normal( widget ): - widget.setFont( get_font_normal( widget.font() ) ) - -def equal_indent(*args): - width = 0 - for widget in args: - widget.setMinimumWidth(0) - width = max(width, widget.sizeHint().width()) - if len(args) > 1: - for widget in args: - widget.setMinimumWidth(width) - -class getExistingDirectories(QFileDialog): - """Workaround for selecting multiple directories - adopted from http://www.qtcentre.org/threads/34226-QFileDialog-select-multiple-directories?p=158482#post158482 - """ - def __init__(self, *args): - QFileDialog.__init__(self, *args) - self.setOption(self.DontUseNativeDialog, True) - self.setFileMode(self.Directory) - self.setOption(self.ShowDirsOnly, True) - self.findChildren(QListView)[0].setSelectionMode(QAbstractItemView.ExtendedSelection) - self.findChildren(QTreeView)[0].setSelectionMode(QAbstractItemView.ExtendedSelection) diff -Nru backintime-1.0.36/kde4/logviewdialog.py backintime-1.1.12/kde4/logviewdialog.py --- backintime-1.0.36/kde4/logviewdialog.py 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/kde4/logviewdialog.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,156 +0,0 @@ -# Back In Time -# Copyright (C) 2008-2009 Oprea Dan, Bart de Koning, Richard Bailey -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - - -import os -import os.path -import sys -import datetime -import gettext -import copy - -from PyQt4.QtGui import * -from PyQt4.QtCore import * -from PyKDE4.kdecore import * -from PyKDE4.kdeui import * -from PyKDE4.kio import * - -import config -import tools -import kde4tools -import encfstools - - -_=gettext.gettext - - -class LogViewDialog( KDialog ): - def __init__( self, parent, snapshot_id = None ): - KDialog.__init__( self, parent ) - self.setButtons(KDialog.Close) - self.resize( 600, 500 ) - - self.config = parent.config - self.snapshots = parent.snapshots - self.current_profile = self.config.get_current_profile() - self.snapshot_id = snapshot_id - self.enable_update = False - self.decode = None - - self.setWindowIcon( KIcon( 'text-plain' ) ) - self.setCaption( QString.fromUtf8( _( 'Error Log View' ) ) ) - - self.main_widget = QWidget( self ) - self.main_layout = QVBoxLayout( self.main_widget ) - self.setMainWidget( self.main_widget ) - - layout = QHBoxLayout() - self.main_layout.addLayout( layout ) - - #profiles - self.lbl_profiles = QLabel( QString.fromUtf8( _('Profile:') ), self ) - layout.addWidget( self.lbl_profiles ) - - self.combo_profiles = KComboBox( self ) - layout.addWidget( self.combo_profiles, 1 ) - QObject.connect( self.combo_profiles, SIGNAL('currentIndexChanged(int)'), self.current_profile_changed ) - - if self.snapshot_id is None: - self.lbl_profiles.hide() - self.combo_profiles.hide() - - #filter - layout.addWidget( QLabel( QString.fromUtf8( _('Filter:') ), self ) ) - - self.combo_filter = KComboBox( self ) - layout.addWidget( self.combo_filter, 1 ) - QObject.connect( self.combo_filter, SIGNAL('currentIndexChanged(int)'), self.current_filter_changed ) - - self.combo_filter.addItem( QString.fromUtf8( _('All') ), QVariant( 0 ) ) - self.combo_filter.addItem( QString.fromUtf8( _('Errors') ), QVariant( 1 ) ) - set_active = True - if self.snapshot_id is None or self.snapshots.is_snapshot_failed( self.snapshot_id ): - self.combo_filter.setCurrentIndex( self.combo_filter.count() - 1 ) - set_active = False - self.combo_filter.addItem( QString.fromUtf8( _('Changes') ), QVariant( 2 ) ) - if not self.snapshot_id is None and set_active: - self.combo_filter.setCurrentIndex( self.combo_filter.count() - 1 ) - self.combo_filter.addItem( QString.fromUtf8( _('Informations') ), QVariant( 3 ) ) - - #text view - self.txt_log_view = KTextEdit( self ) - self.txt_log_view.setReadOnly( True) - self.main_layout.addWidget( self.txt_log_view ) - - # - self.main_layout.addWidget( QLabel( QString.fromUtf8( _('[E] Error, [I] Information, [C] Change') ), self ) ) - - #decode path - self.cb_decode = QCheckBox( QString.fromUtf8( _('decode paths') ), self ) - QObject.connect( self.cb_decode, SIGNAL('stateChanged(int)'), self.on_cb_decode ) - self.main_layout.addWidget(self.cb_decode) - if self.config.get_snapshots_mode() == 'ssh_encfs': - self.cb_decode.show() - else: - self.cb_decode.hide() - - self.update_profiles() - - def on_cb_decode(self): - if self.cb_decode.isChecked(): - self.decode = encfstools.Decode(self.config) - else: - if not self.decode is None: - self.decode.close() - self.decode = None - self.update_log() - - def current_profile_changed( self, index ): - self.update_log() - - def current_filter_changed( self, index ): - self.update_log() - - def update_profiles( self ): - current_profile_id = self.config.get_current_profile() - - self.combo_profiles.clear() - - profiles = self.config.get_profiles_sorted_by_name() - for profile_id in profiles: - self.combo_profiles.addItem( QString.fromUtf8( self.config.get_profile_name( profile_id ) ), QVariant( QString.fromUtf8( profile_id ) ) ) - if profile_id == current_profile_id: - self.combo_profiles.setCurrentIndex( self.combo_profiles.count() - 1 ) - - self.enable_update = True - self.update_log() - - if len( profiles ) <= 1: - self.lbl_profiles.setVisible( False ) - self.combo_profiles.setVisible( False ) - - def update_log( self ): - if not self.enable_update: - return - - mode = self.combo_filter.itemData( self.combo_filter.currentIndex() ).toInt()[0] - - if self.snapshot_id is None: - profile_id = str( self.combo_profiles.itemData( self.combo_profiles.currentIndex() ).toString().toUtf8() ) - self.txt_log_view.setPlainText( self.snapshots.get_take_snapshot_log( mode, profile_id, decode = self.decode ) ) - else: - self.txt_log_view.setPlainText( self.snapshots.get_snapshot_log( self.snapshot_id, mode, decode = self.decode ) ) diff -Nru backintime-1.0.36/kde4/makedeb-src.sh backintime-1.1.12/kde4/makedeb-src.sh --- backintime-1.0.36/kde4/makedeb-src.sh 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/kde4/makedeb-src.sh 1970-01-01 00:00:00.000000000 +0000 @@ -1,58 +0,0 @@ -#!/bin/bash - -if [ -z $1 ]; then - echo "ERROR: You need to specify the install dir" - exit 1 -fi - -VERSION=`cat ../VERSION` - -DEST=$1 - -mkdir -p $DEST/debian/source -mkdir -p $DEST/man/C -mkdir -p $DEST/doc -mkdir -p $DEST/docbook -mkdir -p $DEST/plugins - -#app -cp backintime-kde4 $DEST/ - -#python files -cp *.py $DEST/ - -#desktop files -cp *.desktop $DEST/ - -#plugins -cp plugins/*.py $DEST/plugins - -#man pages -gzip --best -c man/C/backintime-kde4.1 >$DEST/man/C/backintime-kde4.1.gz - -#docbook -cp -R docbook/* $DEST/docbook - -#doc files -cp ../AUTHORS $DEST/doc -cp ../LICENSE $DEST/doc -cp ../README $DEST/doc -cp ../TRANSLATIONS $DEST/doc -cp ../VERSION $DEST/doc -cp ../CHANGES $DEST/doc - -#debian: copyright -cp ../common/debian_specific/copyright $DEST/debian - -#debian: postrm -cp debian_specific/postrm $DEST/debian - -#debian: rules -cp debian_specific/rules $DEST/debian - -#debian: dpkg-source format -cp debian_specific/source/format $DEST/debian/source - -#debian: compatibility level -cp debian_specific/compat $DEST/debian - diff -Nru backintime-1.0.36/kde4/Makefile.template backintime-1.1.12/kde4/Makefile.template --- backintime-1.0.36/kde4/Makefile.template 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/kde4/Makefile.template 1970-01-01 00:00:00.000000000 +0000 @@ -1,39 +0,0 @@ -PREFIX=/usr -DEST=$(DESTDIR)$(PREFIX) - -all: - -clean: - rm po/*.mo - -install: - #install python - install -d $(DEST)/share/backintime/kde4 - install --mode=644 *.py $(DEST)/share/backintime/kde4 - - #install plugin - install -d $(DEST)/share/backintime/plugins - install --mode=644 plugins/*.py $(DEST)/share/backintime/plugins - - #install application - install -d $(DEST)/bin - install backintime-kde4 $(DEST)/bin - - #install copyright file - install -d $(DEST)/share/doc/backintime-kde4 - install --mode=644 ../common/debian_specific/copyright $(DEST)/share/doc/backintime-kde4 - - #install .desktop file(s) - install -d $(DEST)/share/applications/kde4 - install --mode=644 *.desktop $(DEST)/share/applications/kde4 - - #install docbook - #install -d $(DEST)/share/doc/kde/HTML/en/backintime/figures - install -d $(DEST)/share/doc/kde/HTML/en/backintime - install --mode=644 docbook/en/*.docbook $(DEST)/share/doc/kde/HTML/en/backintime - #install --mode=644 docbook/en/figures/*.png $(DEST)/share/doc/kde/HTML/en/backintime/figures - - #install man file(s) - for i in $$(ls -1 man/C/); do case $$i in *.gz|*~) continue;; *) gzip --best -c man/C/$$i > man/C/$${i}.gz;; esac; done - install -d $(DEST)/share/man/man1 - install --mode=644 man/C/*.gz $(DEST)/share/man/man1 diff -Nru backintime-1.0.36/kde4/man/C/backintime-kde4.1 backintime-1.1.12/kde4/man/C/backintime-kde4.1 --- backintime-1.0.36/kde4/man/C/backintime-kde4.1 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/kde4/man/C/backintime-kde4.1 1970-01-01 00:00:00.000000000 +0000 @@ -1,97 +0,0 @@ -.TH backintime-kde4 1 "Oct 2013" "version 1.0.36" "USER COMMANDS" -.SH NAME -backintime-kde4 \- a simple backup tool for KDE4. -.SH SYNOPSIS -.B backintime-kde4 -[ \-\-profile | -\-\-profile\-id ] -[ \-\-keep\-mount ] -[ \-\-quiet ] -[ \-\-config PATH ] -[ \-\-checksum ] -[ \-\-backup | \-\-backup\-job | -\-\-snapshots\-path | -\-\-snapshots\-list | \-\-snapshots\-list\-path | -\-\-last\-snapshot | \-\-last\-snapshot\-path | -\-\-unmount | -\-\-benchmark-cipher [SIZE] | -\-\-pw\-cache [start|stop|restart|reload|status] | -\-\-decode [PATH] | -\-\-restore [WHAT [WHERE [SNAPSHOT_ID]]] | -\-\-help | \-\-version | \-\-license ] -.SH DESCRIPTION -Back In Time is a simple backup tool for Linux. This is the KDE4 version. -For more information about Back In Time see backintime man page. -.PP -If you want to run it as root you need to use 'kdesudo'. -.SH OPTIONS (use these before other actions) -.TP -\-\-profile -select profile by name -.TP -\-\-profile\-id -select profile by id -.TP -\-\-keep\-mount -Don't unmount on exit. Only valid with \-\-snapshots\-list\-path and \-\-last\-snapshot\-path. -.TP -\-\-quiet -suppress status messages on standard output. -.TP -\-\-config PATH -read config from PATH. -.TP -\-\-checksum -force to use checksum for checking if files have been changed. This is the same as 'Use checksum to detect changes' in Options. But you can use this to periodically run checksums from cronjobs. -.SH ACTIONS -.TP -\-b, \-\-backup -take a snapshot now (if needed) -.TP -\-\-backup\-job -take a snapshot (if needed) depending on schedule rules (used for cron jobs) -.TP -\-\-snapshots\-path -display path where is saves the snapshots (if configured) -.TP -\-\-snapshots\-list -display the list of snapshot IDs (if any) -.TP -\-\-snapshots\-list\-path -display the paths to snapshots (if any) -.TP -\-\-last\-snapshot -display last snapshot ID (if any) -.TP -\-\-last\-snapshot\-path -display the path to the last snapshot (if any) -.TP - \-\-unmount -Unmount the profile. -.TP -\-\-benchmark-cipher [SIZE] -Show a benchmark of all ciphers for ssh transfer. -.TP -\-\-pw\-cache [start|stop|restart|reload|status] -Control the Password Cache Daemon. If no argument is given the Password Cache will start in foreground. -.TP -\-\-decode [PATH] -decode encrypted PATH. If no PATH is given Backintime will read paths from standard input. -.TP -\-\-restore [WHAT [WHERE [SNAPSHOT_ID]]] -Restore file WHAT to path WHERE from snapshot SNAPSHOT_ID. If arguments are missing they will be prompted. To restore to the original path WHERE can be an empty string '' or just press Enter at the prompt. SNAPSHOT_ID can be an index (starting with 0 for the last snapshot) or the exact SnapshotID (19 caracters like '20130606-230501-984') -.TP -\-h, \-\-help -display a short help -.TP -\-v, \-\-version -show version -.TP -\-\-license -show license -.SH SEE ALSO -backintime, backintime-gnome, backintime-config. -.PP -Back In Time also has a website: http://backintime.le\-web.org -.SH AUTHOR -This manual page was written by BIT Team(). diff -Nru backintime-1.0.36/kde4/messagebox.py backintime-1.1.12/kde4/messagebox.py --- backintime-1.0.36/kde4/messagebox.py 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/kde4/messagebox.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,49 +0,0 @@ -# Copyright (c) 2012-2013 Germar Reitze -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -import sys -from PyKDE4.kdecore import ki18n, KAboutData, KCmdLineArgs -from PyKDE4.kdeui import KApplication, KPasswordDialog -from PyQt4.QtCore import QString, QTimer, SIGNAL - -import app - -def ask_password_dialog(parent, config, title, prompt, timeout = None): - if parent is None: - kapp, kaboutData = app.create_kapplication( config ) - - dialog = KPasswordDialog() - - timer = QTimer() - if not timeout is None: - dialog.connect(timer, SIGNAL("timeout()"), dialog.close) - timer.setInterval(timeout * 1000) - timer.start() - - dialog.setPrompt( QString.fromUtf8(prompt)) - KApplication.processEvents() - - if parent is None: - dialog.show() - kapp.exec_() - else: - dialog.exec_() - - timer.stop() - password = dialog.password().toUtf8() - del(dialog) - - return(password) diff -Nru backintime-1.0.36/kde4/plugins/kde4plugin.py backintime-1.1.12/kde4/plugins/kde4plugin.py --- backintime-1.0.36/kde4/plugins/kde4plugin.py 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/kde4/plugins/kde4plugin.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,72 +0,0 @@ -# Back In Time -# Copyright (C) 2008-2009 Oprea Dan, Bart de Koning, Richard Bailey -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - - -import sys -import os -import pluginmanager -import tools -import logger -import time -import gettext -import thread -import subprocess - - -_=gettext.gettext - - -if len( os.getenv( 'DISPLAY', '' ) ) == 0: - os.putenv( 'DISPLAY', ':0.0' ) - - -class KDE4Plugin( pluginmanager.Plugin ): - def __init__( self ): - self.process = None - self.snapshots = None - - def init( self, snapshots ): - self.snapshots = snapshots - - if not tools.process_exists( 'ksmserver' ): - return False - - if not tools.check_x_server(): - return False - - if len( tools.read_command_output( "ksmserver --version | grep \"KDE: 4.\"" ) ) <= 0: - return False - - return True - - def is_gui( self ): - return True - - def on_process_begins( self ): - try: - self.process = subprocess.Popen( [ sys.executable, '/usr/share/backintime/kde4/kde4systrayicon.py', self.snapshots.config.get_current_profile() ] ) - except: - pass - - def on_process_ends( self ): - if not self.process is None: - try: - #self.process.terminate() - return - except: - pass - diff -Nru backintime-1.0.36/kde4/restoredialog.py backintime-1.1.12/kde4/restoredialog.py --- backintime-1.0.36/kde4/restoredialog.py 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/kde4/restoredialog.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,95 +0,0 @@ -# Back In Time -# Copyright (C) 2008-2009 Oprea Dan, Bart de Koning, Richard Bailey -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - - -import os -import os.path -import sys -import datetime -import gettext -import copy - -from PyQt4.QtGui import * -from PyQt4.QtCore import * -from PyKDE4.kdecore import * -from PyKDE4.kdeui import * -from PyKDE4.kio import * - -import config -import tools -import kde4tools - - -_=gettext.gettext - - -def restore( parent, snapshot_id, what, where = '' ): - if where is None: - where = str( KFileDialog.getExistingDirectory( KUrl(), parent, QString.fromUtf8( _( 'Restore to ...' ) ) ).toUtf8() ) - if len( where ) == 0 : - return - where = parent.config.prepare_path( where ) - - RestoreDialog(parent, snapshot_id, what, where).exec_() - - -class RestoreDialog( KDialog ): - def __init__( self, parent, snapshot_id, what, where = '' ): - KDialog.__init__( self, parent ) - self.setButtons(KDialog.Close) - self.resize( 600, 500 ) - - self.config = parent.config - self.current_profile = self.config.get_current_profile() - self.snapshots = parent.snapshots - self.snapshot_id = snapshot_id - self.what = what - self.where = where - - self.log_file = self.config.get_restore_log_file() - if os.path.exists(self.log_file): - os.remove(self.log_file) - - self.setWindowIcon( KIcon( 'text-plain' ) ) - self.setCaption( QString.fromUtf8( _( 'Restore' ) ) ) - - self.main_widget = QWidget( self ) - self.main_layout = QVBoxLayout( self.main_widget ) - self.setMainWidget( self.main_widget ) - - #text view - self.txt_log_view = KTextEdit( self ) - self.txt_log_view.setReadOnly( True) - self.main_layout.addWidget( self.txt_log_view ) - - # - self.enableButton(KDialog.Close, False) - - def callback(self, line, *params ): - self.txt_log_view.append(QString(line)) - KApplication.processEvents() - with open(self.log_file, 'a') as log: - log.write(line + '\n') - - def exec_(self): - self.show() - KApplication.processEvents() - self.snapshots.restore( self.snapshot_id, self.what, self.callback, self.where ) - self.enableButton(KDialog.Close, True) - KDialog.exec_(self) - - diff -Nru backintime-1.0.36/kde4/settingsdialog.py backintime-1.1.12/kde4/settingsdialog.py --- backintime-1.0.36/kde4/settingsdialog.py 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/kde4/settingsdialog.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,1373 +0,0 @@ -# Back In Time -# Copyright (C) 2008-2009 Oprea Dan, Bart de Koning, Richard Bailey -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - - -import os -import os.path -import sys -import datetime -import gettext -import copy -import subprocess - -from PyQt4.QtGui import * -from PyQt4.QtCore import * -from PyKDE4.kdecore import * -from PyKDE4.kdeui import * -from PyKDE4.kio import * - -import config -import tools -import kde4tools -import mount -import password - - -_=gettext.gettext - - -#class PopupAutomaticBackupAction( KAction ): -# def __init__( self, list, id, label ): -# KAction.__init__( self, label, list ) -# self.list = list -# self.id = id -# self.label = label -# -# QObject.connect( self, SIGNAL('triggered()'), self.on_selected ) -# -# def on_selected( self ): -# item = self.list.currentItem() -# if not item is None: -# item.setText( 1, QString.fromUtf8( self.label ) ) -# item.setData( 0, Qt.UserRole, QVariant( self.id ) ) - - -class SettingsDialog( KDialog ): - def __init__( self, parent ): - KDialog.__init__( self, parent ) - - self.config = parent.config - self.snapshots = parent.snapshots - self.config_copy_dict = copy.copy( self.config.dict ) - self.current_profile_org = self.config.get_current_profile() - - self.setWindowIcon( KIcon( 'configure' ) ) - self.setCaption( QString.fromUtf8( _( 'Settings' ) ) ) - - self.main_widget = QWidget( self ) - self.main_layout = QVBoxLayout( self.main_widget ) - self.setMainWidget( self.main_widget ) - - #profiles - layout = QHBoxLayout() - self.main_layout.addLayout( layout ) - - layout.addWidget( QLabel( QString.fromUtf8( _('Profile:') ), self ) ) - - self.first_update_all = True - self.disable_profile_changed = True - self.combo_profiles = KComboBox( self ) - layout.addWidget( self.combo_profiles, 1 ) - QObject.connect( self.combo_profiles, SIGNAL('currentIndexChanged(int)'), self.current_profile_changed ) - self.disable_profile_changed = False - - self.btn_edit_profile = KPushButton( KIcon( 'edit-rename' ), QString.fromUtf8( _('Edit') ), self ) - QObject.connect( self.btn_edit_profile, SIGNAL('clicked()'), self.edit_profile ) - layout.addWidget( self.btn_edit_profile ) - - self.btn_add_profile = KPushButton( KStandardGuiItem.add(), self ) - QObject.connect( self.btn_add_profile, SIGNAL('clicked()'), self.add_profile ) - layout.addWidget( self.btn_add_profile ) - - self.btn_remove_profile = KPushButton( KStandardGuiItem.remove(), self ) - QObject.connect( self.btn_remove_profile, SIGNAL('clicked()'), self.remove_profile ) - layout.addWidget( self.btn_remove_profile ) - - #TABs - self.tabs_widget = KTabWidget( self ) - self.main_layout.addWidget( self.tabs_widget ) - - #TAB: General - tab_widget = QWidget( self ) - self.tabs_widget.addTab( tab_widget, QString.fromUtf8( _( 'General' ) ) ) - layout = QVBoxLayout( tab_widget ) - - #select mode - self.mode = None - vlayout = QVBoxLayout() - layout.addLayout( vlayout ) - - self.lbl_modes = QLabel( QString.fromUtf8( _( 'Mode:' ) ), self ) - vlayout.addWidget( self.lbl_modes ) - - self.combo_modes = KComboBox( self ) - vlayout.addWidget( self.combo_modes ) - store_modes = {} - for key in self.config.SNAPSHOT_MODES.keys(): - store_modes[key] = self.config.SNAPSHOT_MODES[key][1] - self.fill_combo( self.combo_modes, store_modes ) - - #Where to save snapshots - group_box = QGroupBox( self ) - self.mode_local = group_box - group_box.setTitle( QString.fromUtf8( _( 'Where to save snapshots' ) ) ) - layout.addWidget( group_box ) - - vlayout = QVBoxLayout( group_box ) - - hlayout = QHBoxLayout() - vlayout.addLayout( hlayout ) - - self.edit_snapshots_path = KLineEdit( self ) - self.edit_snapshots_path.setReadOnly( True ) - hlayout.addWidget( self.edit_snapshots_path ) - - self.btn_snapshots_path = KPushButton( KIcon( 'folder' ), '', self ) - hlayout.addWidget( self.btn_snapshots_path ) - QObject.connect( self.btn_snapshots_path, SIGNAL('clicked()'), self.on_btn_snapshots_path_clicked ) - - #SSH - group_box = QGroupBox( self ) - self.mode_ssh = group_box - group_box.setTitle( QString.fromUtf8( _( 'SSH Settings' ) ) ) - layout.addWidget( group_box ) - - vlayout = QVBoxLayout( group_box ) - - hlayout1 = QHBoxLayout() - vlayout.addLayout( hlayout1 ) - hlayout2 = QHBoxLayout() - vlayout.addLayout( hlayout2 ) - hlayout3 = QHBoxLayout() - vlayout.addLayout( hlayout3 ) - - self.lbl_ssh_host = QLabel( QString.fromUtf8( _( 'Host:' ) ), self ) - hlayout1.addWidget( self.lbl_ssh_host ) - self.txt_ssh_host = KLineEdit( self ) - hlayout1.addWidget( self.txt_ssh_host ) - - self.lbl_ssh_port = QLabel( QString.fromUtf8( _( 'Port:' ) ), self ) - hlayout1.addWidget( self.lbl_ssh_port ) - self.txt_ssh_port = KLineEdit( self ) - hlayout1.addWidget( self.txt_ssh_port ) - - self.lbl_ssh_user = QLabel( QString.fromUtf8( _( 'User:' ) ), self ) - hlayout1.addWidget( self.lbl_ssh_user ) - self.txt_ssh_user = KLineEdit( self ) - hlayout1.addWidget( self.txt_ssh_user ) - - self.lbl_ssh_path = QLabel( QString.fromUtf8( _( 'Path:' ) ), self ) - hlayout2.addWidget( self.lbl_ssh_path ) - self.txt_ssh_path = KLineEdit( self ) - hlayout2.addWidget( self.txt_ssh_path ) - - self.lbl_ssh_cipher = QLabel( QString.fromUtf8( _( 'Cipher:' ) ), self ) - hlayout3.addWidget( self.lbl_ssh_cipher ) - self.combo_ssh_cipher = KComboBox( self ) - hlayout3.addWidget( self.combo_ssh_cipher ) - self.fill_combo( self.combo_ssh_cipher, self.config.SSH_CIPHERS ) - - self.lbl_ssh_private_key_file = QLabel( QString.fromUtf8( _( 'Private Key:' ) ), self ) - hlayout3.addWidget( self.lbl_ssh_private_key_file ) - self.txt_ssh_private_key_file = KLineEdit( self ) - self.txt_ssh_private_key_file.setReadOnly( True ) - hlayout3.addWidget( self.txt_ssh_private_key_file ) - - self.btn_ssh_private_key_file = KPushButton( KIcon( 'folder' ), '', self ) - hlayout3.addWidget( self.btn_ssh_private_key_file ) - QObject.connect( self.btn_ssh_private_key_file, SIGNAL('clicked()'), self.on_btn_ssh_private_key_file_clicked ) - kde4tools.equal_indent(self.lbl_ssh_host, self.lbl_ssh_path, self.lbl_ssh_cipher) - - #encfs - self.mode_local_encfs = self.mode_local - self.mode_ssh_encfs = self.mode_ssh - -## #Dummy -## group_box = QGroupBox( self ) -## self.mode_dummy = group_box -## group_box.setTitle( QString.fromUtf8( _( 'Dummy Settings' ) ) ) -## layout.addWidget( group_box ) -## -## vlayout = QVBoxLayout( group_box ) -## -## hlayout = QHBoxLayout() -## vlayout.addLayout( hlayout ) -## -## self.lbl_dummy_host = QLabel( QString.fromUtf8( _( 'Host:' ) ), self ) -## hlayout.addWidget( self.lbl_dummy_host ) -## self.txt_dummy_host = KLineEdit( self ) -## hlayout.addWidget( self.txt_dummy_host ) -## -## self.lbl_dummy_port = QLabel( QString.fromUtf8( _( 'Port:' ) ), self ) -## hlayout.addWidget( self.lbl_dummy_port ) -## self.txt_dummy_port = KLineEdit( self ) -## hlayout.addWidget( self.txt_dummy_port ) -## -## self.lbl_dummy_user = QLabel( QString.fromUtf8( _( 'User:' ) ), self ) -## hlayout.addWidget( self.lbl_dummy_user ) -## self.txt_dummy_user = KLineEdit( self ) -## hlayout.addWidget( self.txt_dummy_user ) - - #password - group_box = QGroupBox( self ) - self.frame_password_1 = group_box - group_box.setTitle( QString.fromUtf8( _( 'Password' ) ) ) - layout.addWidget( group_box ) - - vlayout = QVBoxLayout( group_box ) - hlayout1 = QHBoxLayout() - vlayout.addLayout(hlayout1) - hlayout2 = QHBoxLayout() - vlayout.addLayout(hlayout2) - - self.lbl_password_1 = QLabel( QString.fromUtf8( _( 'Password' ) ), self ) - hlayout1.addWidget( self.lbl_password_1 ) - self.txt_password_1 = KLineEdit( self ) - self.txt_password_1.setPasswordMode(True) - hlayout1.addWidget( self.txt_password_1 ) - - self.lbl_password_2 = QLabel( QString.fromUtf8( _( 'Password' ) ), self ) - hlayout2.addWidget( self.lbl_password_2 ) - self.txt_password_2 = KLineEdit( self ) - self.txt_password_2.setPasswordMode(True) - hlayout2.addWidget( self.txt_password_2 ) - - self.cb_password_save = QCheckBox( QString.fromUtf8( _( 'Save Password to Keyring' ) ), self ) - vlayout.addWidget( self.cb_password_save ) - - self.cb_password_use_cache = QCheckBox( QString.fromUtf8( _( 'Cache Password for Cron (Security issue: root can read password)' ) ), self ) - vlayout.addWidget( self.cb_password_use_cache ) - - self.keyring_supported = tools.keyring_supported() - self.cb_password_save.setEnabled(self.keyring_supported) - - #mode change - QObject.connect( self.combo_modes, SIGNAL('currentIndexChanged(int)'), self.on_combo_modes_changed ) - - #host, user, profile id - group_box = QGroupBox( self ) - self.frame_advanced = group_box - group_box.setTitle( QString.fromUtf8( _( 'Advanced' ) ) ) - layout.addWidget( group_box ) - - hlayout = QHBoxLayout( group_box ) - hlayout.addSpacing( 12 ) - - vlayout2 = QVBoxLayout() - hlayout.addLayout( vlayout2 ) - - hlayout2 = QHBoxLayout() - vlayout2.addLayout( hlayout2 ) - - self.cb_auto_host_user_profile = QCheckBox( QString.fromUtf8( _( 'Auto Host / User / Profile Id' ) ), self ) - QObject.connect( self.cb_auto_host_user_profile, SIGNAL('stateChanged(int)'), self.update_host_user_profile ) - hlayout2.addWidget( self.cb_auto_host_user_profile ) - - hlayout2 = QHBoxLayout() - vlayout2.addLayout( hlayout2 ) - - self.lbl_host = QLabel( QString.fromUtf8( _( 'Host:' ) ), self ) - hlayout2.addWidget( self.lbl_host ) - self.txt_host = KLineEdit( self ) - hlayout2.addWidget( self.txt_host ) - - self.lbl_user = QLabel( QString.fromUtf8( _( 'User:' ) ), self ) - hlayout2.addWidget( self.lbl_user ) - self.txt_user = KLineEdit( self ) - hlayout2.addWidget( self.txt_user ) - - self.lbl_profile = QLabel( QString.fromUtf8( _( 'Profile:' ) ), self ) - hlayout2.addWidget( self.lbl_profile ) - self.txt_profile = KLineEdit( self ) - hlayout2.addWidget( self.txt_profile ) - - #Schedule - group_box = QGroupBox( self ) - self.global_schedule_group_box = group_box - group_box.setTitle( QString.fromUtf8( _( 'Schedule' ) ) ) - layout.addWidget( group_box ) - - glayout = QGridLayout( group_box ) - glayout.setColumnStretch(1, 2) - - self.combo_automatic_snapshots = KComboBox( self ) - glayout.addWidget( self.combo_automatic_snapshots, 0, 0, 1, 2 ) - self.fill_combo( self.combo_automatic_snapshots, self.config.AUTOMATIC_BACKUP_MODES ) - - self.lbl_automatic_snapshots_day = QLabel( QString.fromUtf8( _( 'Day:' ) ), self ) - self.lbl_automatic_snapshots_day.setContentsMargins( 5, 0, 0, 0 ) - self.lbl_automatic_snapshots_day.setAlignment( Qt.AlignRight | Qt.AlignVCenter ) - glayout.addWidget( self.lbl_automatic_snapshots_day, 1, 0 ) - - self.combo_automatic_snapshots_day = KComboBox( self ) - glayout.addWidget( self.combo_automatic_snapshots_day, 1, 1 ) - - for d in xrange( 1, 29 ): - self.combo_automatic_snapshots_day.addItem( QIcon(), QString.fromUtf8( str(d) ), QVariant( d ) ) - - self.lbl_automatic_snapshots_weekday = QLabel( QString.fromUtf8( _( 'Weekday:' ) ), self ) - self.lbl_automatic_snapshots_weekday.setContentsMargins( 5, 0, 0, 0 ) - self.lbl_automatic_snapshots_weekday.setAlignment( Qt.AlignRight | Qt.AlignVCenter ) - glayout.addWidget( self.lbl_automatic_snapshots_weekday, 2, 0 ) - - self.combo_automatic_snapshots_weekday = KComboBox( self ) - glayout.addWidget( self.combo_automatic_snapshots_weekday, 2, 1 ) - - for d in xrange( 1, 8 ): - self.combo_automatic_snapshots_weekday.addItem( QIcon(), QString.fromUtf8( datetime.date(2011, 11, 6 + d).strftime("%A") ), QVariant( d ) ) - - self.lbl_automatic_snapshots_time = QLabel( QString.fromUtf8( _( 'Hour:' ) ), self ) - self.lbl_automatic_snapshots_time.setContentsMargins( 5, 0, 0, 0 ) - self.lbl_automatic_snapshots_time.setAlignment( Qt.AlignRight | Qt.AlignVCenter ) - glayout.addWidget( self.lbl_automatic_snapshots_time, 3, 0 ) - - self.combo_automatic_snapshots_time = KComboBox( self ) - glayout.addWidget( self.combo_automatic_snapshots_time, 3, 1 ) - - for t in xrange( 0, 2300, 100 ): - self.combo_automatic_snapshots_time.addItem( QIcon(), QString.fromUtf8( datetime.time( t/100, t%100 ).strftime("%H:%M") ), QVariant( t ) ) - - self.lbl_automatic_snapshots_time_custom = QLabel( QString.fromUtf8( _( 'Hours:' ) ), self ) - self.lbl_automatic_snapshots_time_custom.setContentsMargins( 5, 0, 0, 0 ) - self.lbl_automatic_snapshots_time_custom.setAlignment( Qt.AlignRight | Qt.AlignVCenter ) - glayout.addWidget( self.lbl_automatic_snapshots_time_custom, 4, 0 ) - - self.txt_automatic_snapshots_time_custom = KLineEdit( self ) - glayout.addWidget( self.txt_automatic_snapshots_time_custom, 4, 1 ) - - #anacron - self.lbl_automatic_snapshots_anacron = QLabel(QString.fromUtf8(_('Run Back In Time periodically with anacron. This is useful if the computer is not running regular.'))) - self.lbl_automatic_snapshots_anacron.setWordWrap(True) - glayout.addWidget(self.lbl_automatic_snapshots_anacron, 5, 0, 1, 2) - - self.lbl_automatic_snapshots_anacron_period = QLabel(QString.fromUtf8(_('Frequency in days:'))) - self.lbl_automatic_snapshots_anacron_period.setContentsMargins( 5, 0, 0, 0 ) - self.lbl_automatic_snapshots_anacron_period.setAlignment( Qt.AlignRight | Qt.AlignVCenter ) - glayout.addWidget(self.lbl_automatic_snapshots_anacron_period, 7, 0) - - self.sb_automatic_snapshots_anacron_period = QSpinBox(self) - self.sb_automatic_snapshots_anacron_period.setSingleStep( 1 ) - self.sb_automatic_snapshots_anacron_period.setRange( 1, 10000 ) - glayout.addWidget(self.sb_automatic_snapshots_anacron_period, 7, 1) - - #udev - self.lbl_automatic_snapshots_udev = QLabel(QString.fromUtf8(_('Run Back In Time as soon as the drive is connected (only once every X days).\nYou will be prompted for your sudo password.'))) - self.lbl_automatic_snapshots_udev.setWordWrap(True) - glayout.addWidget(self.lbl_automatic_snapshots_udev, 6, 0, 1, 2) - - QObject.connect( self.combo_automatic_snapshots, SIGNAL('currentIndexChanged(int)'), self.current_automatic_snapshot_changed ) - - # - layout.addStretch() - - #TAB: Include - tab_widget = QWidget( self ) - self.tabs_widget.addTab( tab_widget, QString.fromUtf8( _( 'Include' ) ) ) - layout = QVBoxLayout( tab_widget ) - - self.list_include = QTreeWidget( self ) - self.list_include.setSelectionMode(QAbstractItemView.ExtendedSelection) - self.list_include.setRootIsDecorated( False ) - #self.list_include.setEditTriggers( QAbstractItemView.NoEditTriggers ) - #self.list_include.setHeaderLabels( [ QString.fromUtf8( _('Include folders') ), QString.fromUtf8( _('Automatic backup') ) ] ) - self.list_include.setHeaderLabels( [ QString.fromUtf8( _('Include files and folders') ) ] ) - self.list_include.header().setResizeMode( 0, QHeaderView.Stretch ) - - #self.popup_automatic_backup = KMenu( self ) - #keys = self.config.AUTOMATIC_BACKUP_MODES.keys() - #keys.sort() - #for key in keys: - # self.popup_automatic_backup.addAction( PopupAutomaticBackupAction( self.list_include, key, QString.fromUtf8( self.config.AUTOMATIC_BACKUP_MODES[ key ] ) ) ) - - #QObject.connect( self.list_include, SIGNAL('itemActivated(QTreeWidgetItem*,int)'), self.on_list_include_item_activated ) - layout.addWidget( self.list_include ) - - buttons_layout = QHBoxLayout() - layout.addLayout( buttons_layout ) - - self.btn_include_file_add = KPushButton( KStandardGuiItem.add(), self ) - self.btn_include_file_add.setText( QString.fromUtf8( _( 'Add file' ) ) ) - buttons_layout.addWidget( self.btn_include_file_add ) - QObject.connect( self.btn_include_file_add, SIGNAL('clicked()'), self.on_btn_include_file_add_clicked ) - - self.btn_include_add = KPushButton( KStandardGuiItem.add(), self ) - self.btn_include_add.setText( QString.fromUtf8( _( 'Add folder' ) ) ) - buttons_layout.addWidget( self.btn_include_add ) - QObject.connect( self.btn_include_add, SIGNAL('clicked()'), self.on_btn_include_add_clicked ) - - self.btn_include_remove = KPushButton( KStandardGuiItem.remove(), self ) - buttons_layout.addWidget( self.btn_include_remove ) - QObject.connect( self.btn_include_remove, SIGNAL('clicked()'), self.on_btn_include_remove_clicked ) - - #TAB: Exclude - tab_widget = QWidget( self ) - self.tabs_widget.addTab( tab_widget, QString.fromUtf8( _( 'Exclude' ) ) ) - layout = QVBoxLayout( tab_widget ) - - label = QLabel( QString.fromUtf8( _('Warning: Wildcards (\'foo*\', \'[fF]oo\', \'fo?\') will be ignored with mode \'SSH encrypted\'.\nOnly separate asterisk are allowed (\'foo/*\', \'foo/**/bar\')') ), self ) - label.setWordWrap(True) - self.lbl_ssh_encfs_exclude_warning = label - layout.addWidget( label ) - - self.list_exclude = KListWidget( self ) - self.list_exclude.setSelectionMode(QAbstractItemView.ExtendedSelection) - layout.addWidget( self.list_exclude ) - - label = QLabel( QString.fromUtf8( _('Highly recommended:') ), self ) - kde4tools.set_font_bold( label ) - layout.addWidget( label ) - label = QLabel( QString.fromUtf8( ', '.join(self.config.DEFAULT_EXCLUDE) ), self ) - label.setWordWrap(True) - layout.addWidget( label ) - - buttons_layout = QHBoxLayout() - layout.addLayout( buttons_layout ) - - self.btn_exclude_add = KPushButton( KStandardGuiItem.add(), self ) - buttons_layout.addWidget( self.btn_exclude_add ) - QObject.connect( self.btn_exclude_add, SIGNAL('clicked()'), self.on_btn_exclude_add_clicked ) - - self.btn_exclude_file = KPushButton( KStandardGuiItem.add(), self ) - self.btn_exclude_file.setText( QString.fromUtf8( _( 'Add file' ) ) ) - buttons_layout.addWidget( self.btn_exclude_file ) - QObject.connect( self.btn_exclude_file, SIGNAL('clicked()'), self.on_btn_exclude_file_clicked ) - - self.btn_exclude_folder = KPushButton( KStandardGuiItem.add(), self ) - self.btn_exclude_folder.setText( QString.fromUtf8( _( 'Add folder' ) ) ) - buttons_layout.addWidget( self.btn_exclude_folder ) - QObject.connect( self.btn_exclude_folder, SIGNAL('clicked()'), self.on_btn_exclude_folder_clicked ) - - self.btn_exclude_remove = KPushButton( KStandardGuiItem.remove(), self ) - buttons_layout.addWidget( self.btn_exclude_remove ) - QObject.connect( self.btn_exclude_remove, SIGNAL('clicked()'), self.on_btn_exclude_remove_clicked ) - - #TAB: Auto-remove - tab_widget = QWidget( self ) - self.tabs_widget.addTab( tab_widget, QString.fromUtf8( _( 'Auto-remove' ) ) ) - layout = QGridLayout( tab_widget ) - - #remove old snapshots - self.cb_remove_older_then = QCheckBox( QString.fromUtf8( _( 'Older than:' ) ), self ) - layout.addWidget( self.cb_remove_older_then, 0, 0 ) - QObject.connect( self.cb_remove_older_then, SIGNAL('stateChanged(int)'), self.update_remove_older_than ) - - self.edit_remove_older_then = KIntSpinBox( 1, 1000, 1, 1, self ) - layout.addWidget( self.edit_remove_older_then, 0, 1 ) - - self.combo_remove_older_then = KComboBox( self ) - layout.addWidget( self.combo_remove_older_then, 0, 2 ) - self.fill_combo( self.combo_remove_older_then, self.config.REMOVE_OLD_BACKUP_UNITS ) - - #min free space - enabled, value, unit = self.config.get_min_free_space() - - self.cb_min_free_space = QCheckBox( QString.fromUtf8( _( 'If free space is less than:' ) ), self ) - layout.addWidget( self.cb_min_free_space, 1, 0 ) - QObject.connect( self.cb_min_free_space, SIGNAL('stateChanged(int)'), self.update_min_free_space ) - - self.edit_min_free_space = KIntSpinBox( 1, 1000, 1, 1, self ) - layout.addWidget( self.edit_min_free_space, 1, 1 ) - - self.combo_min_free_space = KComboBox( self ) - layout.addWidget( self.combo_min_free_space, 1, 2 ) - self.fill_combo( self.combo_min_free_space, self.config.MIN_FREE_SPACE_UNITS ) - - #min free inodes - self.cb_min_free_inodes = QCheckBox(QString.fromUtf8( _('If free inodes is less than:') ), self) - layout.addWidget(self.cb_min_free_inodes, 2, 0) - QObject.connect( self.cb_min_free_inodes, SIGNAL('stateChanged(int)'), self.update_min_free_inodes) - - self.edit_min_free_inodes = QSpinBox(self) - self.edit_min_free_inodes.setSuffix( QString.fromUtf8(' %') ) - self.edit_min_free_inodes.setSingleStep( 1 ) - self.edit_min_free_inodes.setRange( 0, 15 ) - layout.addWidget(self.edit_min_free_inodes, 2, 1) - - #smart remove - self.cb_smart_remove = QCheckBox( QString.fromUtf8( _( 'Smart remove' ) ), self ) - layout.addWidget( self.cb_smart_remove, 3, 0 ) - - #label = QLabel( QString.fromUtf8( _( '- keep all snapshots from today and yesterday\n- keep one snapshot for the last week and one for two weeks ago\n- keep one snapshot per month for all previous months of this year and all months of the last year \n- keep one snapshot per year for all other years' ) ),self ) - #label.setContentsMargins( 25, 0, 0, 0 ) - #layout.addWidget( label, 3, 0, 1, 3 ) - - widget = QWidget( self ) - widget.setContentsMargins( 25, 0, 0, 0 ) - layout.addWidget( widget, 4, 0, 1, 3 ) - - smlayout = QGridLayout( widget ) - - smlayout.addWidget( QLabel( QString.fromUtf8( _( 'Keep all snapshots for the last' ) ), self ), 0, 0 ) - self.edit_keep_all = KIntSpinBox( 1, 10000, 1, 1, self ) - smlayout.addWidget( self.edit_keep_all, 0, 1 ) - smlayout.addWidget( QLabel( QString.fromUtf8( _( 'day(s)' ) ), self ), 0, 2 ) - - smlayout.addWidget( QLabel( QString.fromUtf8( _( 'Keep one snapshot per day for the last' ) ), self ), 1, 0 ) - self.edit_keep_one_per_day = KIntSpinBox( 1, 10000, 1, 1, self ) - smlayout.addWidget( self.edit_keep_one_per_day, 1, 1 ) - smlayout.addWidget( QLabel( QString.fromUtf8( _( 'day(s)' ) ), self ), 1, 2 ) - - smlayout.addWidget( QLabel( QString.fromUtf8( _( 'Keep one snapshot per week for the last' ) ), self ), 2, 0 ) - self.edit_keep_one_per_week = KIntSpinBox( 1, 10000, 1, 1, self ) - smlayout.addWidget( self.edit_keep_one_per_week, 2, 1 ) - smlayout.addWidget( QLabel( QString.fromUtf8( _( 'weeks(s)' ) ), self ), 2, 2 ) - - smlayout.addWidget( QLabel( QString.fromUtf8( _( 'Keep one snapshot per month for the last' ) ), self ), 3, 0 ) - self.edit_keep_one_per_month = KIntSpinBox( 1, 10000, 1, 1, self ) - smlayout.addWidget( self.edit_keep_one_per_month, 3, 1 ) - smlayout.addWidget( QLabel( QString.fromUtf8( _( 'month(s)' ) ), self ), 3, 2 ) - - smlayout.addWidget( QLabel( QString.fromUtf8( _( 'Keep one snapshot per year for all years' ) ), self ), 4, 0, 1, 3 ) - - #don't remove named snapshots - self.cb_dont_remove_named_snapshots = QCheckBox( QString.fromUtf8( _( 'Don\'t remove named snapshots' ) ), self ) - layout.addWidget( self.cb_dont_remove_named_snapshots, 5, 0, 1, 3 ) - - # - layout.addWidget( QWidget(), 6, 0 ) - layout.setRowStretch( 6, 2 ) - - #TAB: Options - tab_widget = QWidget( self ) - self.tabs_widget.addTab( tab_widget, QString.fromUtf8( _( 'Options' ) ) ) - layout = QVBoxLayout( tab_widget ) - - self.cb_notify_enabled = QCheckBox( QString.fromUtf8( _( 'Enable notifications' ) ), self ) - layout.addWidget( self.cb_notify_enabled ) - - self.cb_no_on_battery = QCheckBox( QString.fromUtf8( _( 'Disable snapshots when on battery' ) ), self ) - if not tools.power_status_available (): - self.cb_no_on_battery.setEnabled ( False ) - self.cb_no_on_battery.setToolTip ( QString.fromUtf8 ( _( 'Power status not available from system' ) ) ) - layout.addWidget( self.cb_no_on_battery ) - - self.cb_backup_on_restore = QCheckBox( QString.fromUtf8( _( 'Backup files on restore' ) ), self ) - layout.addWidget( self.cb_backup_on_restore ) - - self.cb_continue_on_errors = QCheckBox( QString.fromUtf8( _( 'Continue on errors (keep incomplete snapshots)' ) ), self ) - layout.addWidget( self.cb_continue_on_errors ) - - self.cb_use_checksum = QCheckBox( QString.fromUtf8( _( 'Use checksum to detect changes' ) ), self ) - layout.addWidget( self.cb_use_checksum ) - - self.cb_full_rsync = QCheckBox( QString.fromUtf8( _( 'Full rsync mode. May be faster but:' ) ), self ) - label = QLabel( QString.fromUtf8( _('- snapshots are no read-only\n- destination file-system must support all linux attributes (dates, rights, user, group ...)') ), self) - label.setIndent(36) - label.setWordWrap(True) - QObject.connect( self.cb_full_rsync, SIGNAL('stateChanged(int)'), self.update_check_for_changes ) - layout.addWidget( self.cb_full_rsync ) - layout.addWidget( label ) - - self.cb_check_for_changes = QCheckBox( QString.fromUtf8( _( 'Check for changes (don\'t take a new snapshot if nothing changed)' ) ), self ) - layout.addWidget( self.cb_check_for_changes ) - - #log level - hlayout = QHBoxLayout() - layout.addLayout( hlayout ) - - hlayout.addWidget( QLabel( QString.fromUtf8( _('Log Level:') ), self ) ) - - self.combo_log_level = KComboBox( self ) - hlayout.addWidget( self.combo_log_level, 1 ) - - self.combo_log_level.addItem( QIcon(), QString.fromUtf8( _('None') ), QVariant(0) ) - self.combo_log_level.addItem( QIcon(), QString.fromUtf8( _('Errors') ), QVariant(1) ) - self.combo_log_level.addItem( QIcon(), QString.fromUtf8( _('Changes & Errors') ), QVariant(2) ) - self.combo_log_level.addItem( QIcon(), QString.fromUtf8( _('All') ), QVariant(3) ) - - # - layout.addStretch() - - #TAB: Expert Options - tab_widget = QWidget( self ) - self.tabs_widget.addTab( tab_widget, QString.fromUtf8( _( 'Expert Options' ) ) ) - layout = QVBoxLayout( tab_widget ) - - label = QLabel( QString.fromUtf8( _('Change these options only if you really know what you are doing !') ), self ) - kde4tools.set_font_bold( label ) - layout.addWidget( label ) - - #self.cb_per_diretory_schedule = QCheckBox( QString.fromUtf8( _( 'Enable schedule per included folder (see Include tab; default: disabled)' ) ), self ) - #layout.addWidget( self.cb_per_diretory_schedule ) - #QObject.connect( self.cb_per_diretory_schedule, SIGNAL('clicked()'), self.update_include_columns ) - - self.cb_run_nice_from_cron = QCheckBox( QString.fromUtf8( _( 'Run \'nice\' as cron job (default: enabled)' ) ), self ) - layout.addWidget( self.cb_run_nice_from_cron ) - - self.cb_run_ionice_from_cron = QCheckBox( QString.fromUtf8( _( 'Run \'ionice\' as cron job (default: enabled)' ) ), self ) - layout.addWidget( self.cb_run_ionice_from_cron ) - - self.cb_run_ionice_from_user = QCheckBox( QString.fromUtf8( _( 'Run \'ionice\' when taking a manual snapshot (default: disabled)' ) ), self ) - layout.addWidget( self.cb_run_ionice_from_user ) - - self.cb_run_nice_on_remote = QCheckBox(QString.fromUtf8( _('Run \'nice\' on remote host (default: disabled)') ), self) - layout.addWidget(self.cb_run_nice_on_remote) - - self.cb_run_ionice_on_remote = QCheckBox(QString.fromUtf8( _('Run \'ionice\' on remote host (default: disabled)') ), self) - layout.addWidget(self.cb_run_ionice_on_remote) - - #bwlimit - hlayout = QHBoxLayout() - layout.addLayout(hlayout) - self.cb_bwlimit = QCheckBox( QString.fromUtf8( _( 'Limit rsync bandwidth usage: ' ) ), self ) - hlayout.addWidget( self.cb_bwlimit ) - self.sb_bwlimit = QSpinBox(self) - self.sb_bwlimit.setSuffix( QString.fromUtf8( _(' KB/sec') ) ) - self.sb_bwlimit.setSingleStep( 100 ) - self.sb_bwlimit.setRange( 0, 1000000 ) - hlayout.addWidget(self.sb_bwlimit) - - self.cb_preserve_acl = QCheckBox( QString.fromUtf8( _( 'Preserve ACL' ) ), self ) - layout.addWidget( self.cb_preserve_acl ) - - self.cb_preserve_xattr = QCheckBox( QString.fromUtf8( _( 'Preserve extended attributes (xattr)' ) ), self ) - layout.addWidget( self.cb_preserve_xattr ) - - self.cb_copy_unsafe_links = QCheckBox( QString.fromUtf8( _( 'Copy unsafe links (works only with absolute links)' ) ), self ) - layout.addWidget( self.cb_copy_unsafe_links ) - - self.cb_copy_links = QCheckBox( QString.fromUtf8( _( 'Copy links (dereference symbolic links)' ) ), self ) - layout.addWidget( self.cb_copy_links ) - - # - layout.addStretch() - - self.update_profiles() - self.on_combo_modes_changed() - - def add_profile( self ): - ret_val = KInputDialog.getText( QString.fromUtf8( _( 'New profile' ) ), '', '', self ) - if not ret_val[1]: - return - - name = str( ret_val[0].toUtf8() ).strip() - if len( name ) <= 0: - return - - profile_id = self.config.add_profile( name ) - if profile_id is None: - return - - self.config.set_current_profile( profile_id ) - self.update_profiles() - - def edit_profile( self ): - ret_val = KInputDialog.getText( QString.fromUtf8( _( 'Rename profile' ) ), '', '', self ) - if not ret_val[1]: - return - - name = str( ret_val[0].toUtf8() ).strip() - if len( name ) <= 0: - return - - if not self.config.set_profile_name( name ): - return - - self.update_profiles() - - def remove_profile( self ): - if self.question_handler( _('Are you sure you want to delete the profile "%s" ?') % self.config.get_profile_name() ): - self.config.remove_profile() - self.update_profiles() - - def update_automatic_snapshot_time( self, backup_mode ): - if backup_mode == self.config.CUSTOM_HOUR: - self.lbl_automatic_snapshots_time_custom.show() - self.txt_automatic_snapshots_time_custom.show() - else: - self.lbl_automatic_snapshots_time_custom.hide() - self.txt_automatic_snapshots_time_custom.hide() - - if backup_mode == self.config.WEEK: - self.lbl_automatic_snapshots_weekday.show() - self.combo_automatic_snapshots_weekday.show() - else: - self.lbl_automatic_snapshots_weekday.hide() - self.combo_automatic_snapshots_weekday.hide() - - if backup_mode == self.config.MONTH: - self.lbl_automatic_snapshots_day.show() - self.combo_automatic_snapshots_day.show() - else: - self.lbl_automatic_snapshots_day.hide() - self.combo_automatic_snapshots_day.hide() - - if backup_mode >= self.config.DAY: - self.lbl_automatic_snapshots_time.show() - self.combo_automatic_snapshots_time.show() - else: - self.lbl_automatic_snapshots_time.hide() - self.combo_automatic_snapshots_time.hide() - - if self.config.DAY_ANACRON <= backup_mode <= self.config.UDEV: - self.lbl_automatic_snapshots_anacron_period.show() - self.sb_automatic_snapshots_anacron_period.show() - self.lbl_automatic_snapshots_time.hide() - self.combo_automatic_snapshots_time.hide() - else: - self.lbl_automatic_snapshots_anacron_period.hide() - self.sb_automatic_snapshots_anacron_period.hide() - - if backup_mode == self.config.DAY_ANACRON: - self.lbl_automatic_snapshots_anacron.show() - else: - self.lbl_automatic_snapshots_anacron.hide() - - if backup_mode == self.config.UDEV: - self.lbl_automatic_snapshots_udev.show() - else: - self.lbl_automatic_snapshots_udev.hide() - - def current_automatic_snapshot_changed( self, index ): - backup_mode = self.combo_automatic_snapshots.itemData( index ).toInt()[0] - self.update_automatic_snapshot_time( backup_mode ) - - def current_profile_changed( self, index ): - if self.disable_profile_changed: - return - - profile_id = str( self.combo_profiles.itemData( index ).toString().toUtf8() ) - if len( profile_id ) <= 0: - return - - if profile_id != self.config.get_current_profile(): - self.save_profile() - self.config.set_current_profile( profile_id ) - self.update_profile() - - def update_host_user_profile( self ): - enabled = not self.cb_auto_host_user_profile.isChecked() - self.lbl_host.setEnabled( enabled ) - self.txt_host.setEnabled( enabled ) - self.lbl_user.setEnabled( enabled ) - self.txt_user.setEnabled( enabled ) - self.lbl_profile.setEnabled( enabled ) - self.txt_profile.setEnabled( enabled ) - - def update_check_for_changes(self): - enabled = not self.cb_full_rsync.isChecked() - self.cb_check_for_changes.setEnabled( enabled ) - - def update_profiles( self ): - self.update_profile() - current_profile_id = self.config.get_current_profile() - - self.disable_profile_changed = True - - self.combo_profiles.clear() - - profiles = self.config.get_profiles_sorted_by_name() - for profile_id in profiles: - self.combo_profiles.addItem( QString.fromUtf8( self.config.get_profile_name( profile_id ) ), QVariant( QString.fromUtf8( profile_id ) ) ) - if profile_id == current_profile_id: - self.combo_profiles.setCurrentIndex( self.combo_profiles.count() - 1 ) - - self.disable_profile_changed = False - - def update_profile( self ): - if self.config.get_current_profile() == '1': - self.btn_edit_profile.setEnabled( False ) - self.btn_remove_profile.setEnabled( False ) - else: - self.btn_edit_profile.setEnabled( True ) - self.btn_remove_profile.setEnabled( True ) - self.btn_add_profile.setEnabled(self.config.is_configured('1')) - - #TAB: General - #mode - self.set_combo_value( self.combo_modes, self.config.get_snapshots_mode(), type = 'str' ) - - #local - self.edit_snapshots_path.setText( QString.fromUtf8( self.config.get_snapshots_path( mode = 'local') ) ) - - #ssh - self.txt_ssh_host.setText( QString.fromUtf8( self.config.get_ssh_host() ) ) - self.txt_ssh_port.setText( QString.fromUtf8( str(self.config.get_ssh_port()) ) ) - self.txt_ssh_user.setText( QString.fromUtf8( self.config.get_ssh_user() ) ) - self.txt_ssh_path.setText( QString.fromUtf8( self.config.get_snapshots_path_ssh() ) ) - self.set_combo_value( self.combo_ssh_cipher, self.config.get_ssh_cipher(), type = 'str' ) - self.txt_ssh_private_key_file.setText( QString.fromUtf8( self.config.get_ssh_private_key_file() ) ) - - #local_encfs - if self.mode == 'local_encfs': - self.edit_snapshots_path.setText( QString.fromUtf8( self.config.get_local_encfs_path() ) ) - -## #dummy -## self.txt_dummy_host.setText( QString.fromUtf8( self.config.get_dummy_host() ) ) -## self.txt_dummy_port.setText( QString.fromUtf8( self.config.get_dummy_port() ) ) -## self.txt_dummy_user.setText( QString.fromUtf8( self.config.get_dummy_user() ) ) - - #password - password_1 = self.config.get_password( mode = self.mode, pw_id = 1, only_from_keyring = True ) - password_2 = self.config.get_password( mode = self.mode, pw_id = 2, only_from_keyring = True ) - if password_1 is None: - password_1 = '' - if password_2 is None: - password_2 = '' - self.txt_password_1.setText( QString.fromUtf8( password_1 ) ) - self.txt_password_2.setText( QString.fromUtf8( password_2 ) ) - self.cb_password_save.setChecked( self.keyring_supported and self.config.get_password_save( mode = self.mode ) ) - self.cb_password_use_cache.setChecked( self.config.get_password_use_cache( mode = self.mode ) ) - - self.cb_auto_host_user_profile.setChecked( self.config.get_auto_host_user_profile() ) - host, user, profile = self.config.get_host_user_profile() - self.txt_host.setText( QString.fromUtf8( host ) ) - self.txt_user.setText( QString.fromUtf8( user ) ) - self.txt_profile.setText( QString.fromUtf8( profile ) ) - self.update_host_user_profile() - - self.set_combo_value( self.combo_automatic_snapshots, self.config.get_automatic_backup_mode() ) - self.set_combo_value( self.combo_automatic_snapshots_time, self.config.get_automatic_backup_time() ) - self.set_combo_value( self.combo_automatic_snapshots_day, self.config.get_automatic_backup_day() ) - self.set_combo_value( self.combo_automatic_snapshots_weekday, self.config.get_automatic_backup_weekday() ) - self.txt_automatic_snapshots_time_custom.setText( self.config.get_custom_backup_time() ) - self.sb_automatic_snapshots_anacron_period.setValue(self.config.get_automatic_backup_anacron_period()) - self.update_automatic_snapshot_time( self.config.get_automatic_backup_mode() ) - - #TAB: Include - self.list_include.clear() - - for include in self.config.get_include(): - self.add_include( include ) - - #TAB: Exclude - self.list_exclude.clear() - - for exclude in self.config.get_exclude(): - self.add_exclude( exclude ) - - #TAB: Auto-remove - - #remove old snapshots - enabled, value, unit = self.config.get_remove_old_snapshots() - self.cb_remove_older_then.setChecked( enabled ) - self.edit_remove_older_then.setValue( value ) - self.set_combo_value( self.combo_remove_older_then, unit ) - - #min free space - enabled, value, unit = self.config.get_min_free_space() - self.cb_min_free_space.setChecked( enabled ) - self.edit_min_free_space.setValue( value ) - self.set_combo_value( self.combo_min_free_space, unit ) - - #min free inodes - self.cb_min_free_inodes.setChecked(self.config.min_free_inodes_enabled()) - self.edit_min_free_inodes.setValue(self.config.min_free_inodes()) - - #smart remove - smart_remove, keep_all, keep_one_per_day, keep_one_per_week, keep_one_per_month = self.config.get_smart_remove() - self.cb_smart_remove.setChecked( smart_remove ) - self.edit_keep_all.setValue( keep_all ) - self.edit_keep_one_per_day.setValue( keep_one_per_day ) - self.edit_keep_one_per_week.setValue( keep_one_per_week ) - self.edit_keep_one_per_month.setValue( keep_one_per_month ) - - #don't remove named snapshots - self.cb_dont_remove_named_snapshots.setChecked( self.config.get_dont_remove_named_snapshots() ) - - #TAB: Options - self.cb_notify_enabled.setChecked( self.config.is_notify_enabled() ) - self.cb_backup_on_restore.setChecked( self.config.is_backup_on_restore_enabled() ) - self.cb_continue_on_errors.setChecked( self.config.continue_on_errors() ) - self.cb_use_checksum.setChecked( self.config.use_checksum() ) - self.cb_full_rsync.setChecked( self.config.full_rsync() ) - self.update_check_for_changes() - self.cb_check_for_changes.setChecked( self.config.check_for_changes() ) - self.set_combo_value( self.combo_log_level, self.config.log_level() ) - - #TAB: Expert Options - #self.cb_per_diretory_schedule.setChecked( self.config.get_per_directory_schedule() ) - self.cb_run_nice_from_cron.setChecked( self.config.is_run_nice_from_cron_enabled() ) - self.cb_run_ionice_from_cron.setChecked( self.config.is_run_ionice_from_cron_enabled() ) - self.cb_run_ionice_from_user.setChecked( self.config.is_run_ionice_from_user_enabled() ) - self.cb_run_nice_on_remote.setChecked(self.config.is_run_nice_on_remote_enabled()) - self.cb_run_ionice_on_remote.setChecked(self.config.is_run_ionice_on_remote_enabled()) - self.cb_bwlimit.setChecked( self.config.bwlimit_enabled() ) - self.sb_bwlimit.setValue( self.config.bwlimit() ) - self.cb_no_on_battery.setChecked( self.config.is_no_on_battery_enabled() ) - self.cb_preserve_acl.setChecked( self.config.preserve_acl() ) - self.cb_preserve_xattr.setChecked( self.config.preserve_xattr() ) - self.cb_copy_unsafe_links.setChecked( self.config.copy_unsafe_links() ) - self.cb_copy_links.setChecked( self.config.copy_links() ) - - #update - #self.update_include_columns() - self.update_remove_older_than() - self.update_min_free_space() - - def save_profile( self ): - if self.combo_automatic_snapshots.itemData( self.combo_automatic_snapshots.currentIndex() ).toInt()[0] == self.config.CUSTOM_HOUR: - if not tools.check_cron_pattern(str( self.txt_automatic_snapshots_time_custom.text().toUtf8() ) ): - self.error_handler( _('Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or */3 for periodic backups every 3 hours') ) - return False - - #mode - mode = str( self.combo_modes.itemData( self.combo_modes.currentIndex() ).toString().toUtf8() ) - self.config.set_snapshots_mode( mode ) - mount_kwargs = {} - - #password - password_1 = str( self.txt_password_1.text().toUtf8() ) - password_2 = str( self.txt_password_2.text().toUtf8() ) - - #ssh - ssh_host = str( self.txt_ssh_host.text().toUtf8() ) - ssh_port = str( self.txt_ssh_port.text().toUtf8() ) - ssh_user = str( self.txt_ssh_user.text().toUtf8() ) - ssh_path = str( self.txt_ssh_path.text().toUtf8() ) - ssh_cipher = str( self.combo_ssh_cipher.itemData( self.combo_ssh_cipher.currentIndex() ).toString().toUtf8() ) - ssh_private_key_file = str( self.txt_ssh_private_key_file.text().toUtf8() ) - if mode == 'ssh': - mount_kwargs = {'host': ssh_host, - 'port': int(ssh_port), - 'user': ssh_user, - 'path': ssh_path, - 'cipher': ssh_cipher, - 'private_key_file': ssh_private_key_file, - 'password': password_1 - } - - #local-encfs settings - local_encfs_path = str( self.edit_snapshots_path.text().toUtf8() ) - if mode == 'local_encfs': - mount_kwargs = {'path': local_encfs_path, - 'password': password_1 - } - - #ssh_encfs settings - if mode == 'ssh_encfs': - mount_kwargs = {'host': ssh_host, - 'port': int(ssh_port), - 'user': ssh_user, - 'ssh_path': ssh_path, - 'cipher': ssh_cipher, - 'private_key_file': ssh_private_key_file, - 'ssh_password': password_1, - 'encfs_password': password_2 - } - -## #dummy -## dummy_host = str( self.txt_dummy_host.text().toUtf8() ) -## dummy_port = str( self.txt_dummy_port.text().toUtf8() ) -## dummy_user = str( self.txt_dummy_user.text().toUtf8() ) -## if mode == 'dummy': -## #values must have exactly the same Type (str, int or bool) -## #as they are set in config or you will run into false-positive -## #HashCollision warnings -## mount_kwargs = {'host': dummy_host, -## 'port': int(dummy_port), -## 'user': dummy_user, -## 'password': password_1 -## } - - if not self.config.SNAPSHOT_MODES[mode][0] is None: - #pre_mount_check - mnt = mount.Mount(cfg = self.config, tmp_mount = True, parent = self) - try: - mnt.pre_mount_check(mode = mode, first_run = True, **mount_kwargs) - except mount.MountException as ex: - self.error_handler(str(ex)) - return False - - #okay, lets try to mount - try: - hash_id = mnt.mount(mode = mode, check = False, **mount_kwargs) - except mount.MountException as ex: - self.error_handler(str(ex)) - return False - - #snapshots path - self.config.set_auto_host_user_profile( self.cb_auto_host_user_profile.isChecked() ) - self.config.set_host_user_profile( - str( self.txt_host.text().toUtf8() ), - str( self.txt_user.text().toUtf8() ), - str( self.txt_profile.text().toUtf8() ) ) - - if self.config.SNAPSHOT_MODES[mode][0] is None: - snapshots_path = str( self.edit_snapshots_path.text().toUtf8() ) - else: - snapshots_path = self.config.get_snapshots_path(mode = mode, tmp_mount = True) - - self.config.set_snapshots_path( snapshots_path, mode = mode ) - - #save ssh - self.config.set_ssh_host(ssh_host) - self.config.set_ssh_port(ssh_port) - self.config.set_ssh_user(ssh_user) - self.config.set_snapshots_path_ssh(ssh_path) - self.config.set_ssh_cipher(ssh_cipher) - self.config.set_ssh_private_key_file(ssh_private_key_file) - - #save local_encfs - self.config.set_local_encfs_path(local_encfs_path) - -## #save dummy -## self.config.set_dummy_host(dummy_host) -## self.config.set_dummy_port(dummy_port) -## self.config.set_dummy_user(dummy_user) - - #save password - self.config.set_password_save(self.cb_password_save.isChecked(), mode = mode) - self.config.set_password_use_cache(self.cb_password_use_cache.isChecked(), mode = mode) - self.config.set_password(password_1, mode = mode) - self.config.set_password(password_2, mode = mode, pw_id = 2) - - #include list - include_list = [] - for index in xrange( self.list_include.topLevelItemCount() ): - item = self.list_include.topLevelItem( index ) - #include_list.append( [ str( item.text(0).toUtf8() ), item.data( 0, Qt.UserRole ).toInt()[0] ] ) - include_list.append( ( str( item.text(0).toUtf8() ), item.data( 0, Qt.UserRole ).toInt()[0] ) ) - - self.config.set_include( include_list ) - - #exclude patterns - exclude_list = [] - for index in xrange( self.list_exclude.count() ): - exclude_list.append( str( self.list_exclude.item( index ).text().toUtf8() ) ) - - self.config.set_exclude( exclude_list ) - - #schedule - self.config.set_automatic_backup_mode( self.combo_automatic_snapshots.itemData( self.combo_automatic_snapshots.currentIndex() ).toInt()[0] ) - self.config.set_automatic_backup_time( self.combo_automatic_snapshots_time.itemData( self.combo_automatic_snapshots_time.currentIndex() ).toInt()[0] ) - self.config.set_automatic_backup_weekday( self.combo_automatic_snapshots_weekday.itemData( self.combo_automatic_snapshots_weekday.currentIndex() ).toInt()[0] ) - self.config.set_automatic_backup_day( self.combo_automatic_snapshots_day.itemData( self.combo_automatic_snapshots_day.currentIndex() ).toInt()[0] ) - self.config.set_custom_backup_time( str( self.txt_automatic_snapshots_time_custom.text().toUtf8() ) ) - self.config.set_automatic_backup_anacron_period(self.sb_automatic_snapshots_anacron_period.value()) - - #auto-remove - self.config.set_remove_old_snapshots( - self.cb_remove_older_then.isChecked(), - self.edit_remove_older_then.value(), - self.combo_remove_older_then.itemData( self.combo_remove_older_then.currentIndex() ).toInt()[0] ) - self.config.set_min_free_space( - self.cb_min_free_space.isChecked(), - self.edit_min_free_space.value(), - self.combo_min_free_space.itemData( self.combo_min_free_space.currentIndex() ).toInt()[0] ) - self.config.set_min_free_inodes( - self.cb_min_free_inodes.isChecked(), - self.edit_min_free_inodes.value() ) - self.config.set_dont_remove_named_snapshots( self.cb_dont_remove_named_snapshots.isChecked() ) - self.config.set_smart_remove( - self.cb_smart_remove.isChecked(), - self.edit_keep_all.value(), - self.edit_keep_one_per_day.value(), - self.edit_keep_one_per_week.value(), - self.edit_keep_one_per_month.value() ) - - #options - self.config.set_notify_enabled( self.cb_notify_enabled.isChecked() ) - self.config.set_backup_on_restore( self.cb_backup_on_restore.isChecked() ) - self.config.set_continue_on_errors( self.cb_continue_on_errors.isChecked() ) - self.config.set_use_checksum( self.cb_use_checksum.isChecked() ) - self.config.set_full_rsync( self.cb_full_rsync.isChecked() ) - self.config.set_check_for_changes( self.cb_check_for_changes.isChecked() ) - self.config.set_log_level( self.combo_log_level.itemData( self.combo_log_level.currentIndex() ).toInt()[0] ) - - #expert options - #self.config.set_per_directory_schedule( self.cb_per_diretory_schedule.isChecked() ) - self.config.set_run_nice_from_cron_enabled( self.cb_run_nice_from_cron.isChecked() ) - self.config.set_run_ionice_from_cron_enabled( self.cb_run_ionice_from_cron.isChecked() ) - self.config.set_run_ionice_from_user_enabled( self.cb_run_ionice_from_user.isChecked() ) - self.config.set_run_nice_on_remote_enabled(self.cb_run_nice_on_remote.isChecked()) - self.config.set_run_ionice_on_remote_enabled(self.cb_run_ionice_on_remote.isChecked()) - self.config.set_bwlimit_enabled( self.cb_bwlimit.isChecked() ) - self.config.set_bwlimit( self.sb_bwlimit.value() ) - self.config.set_no_on_battery_enabled( self.cb_no_on_battery.isChecked() ) - self.config.set_preserve_acl( self.cb_preserve_acl.isChecked() ) - self.config.set_preserve_xattr( self.cb_preserve_xattr.isChecked() ) - self.config.set_copy_unsafe_links( self.cb_copy_unsafe_links.isChecked() ) - self.config.set_copy_links( self.cb_copy_links.isChecked() ) - - #umount - if not self.config.SNAPSHOT_MODES[mode][0] is None: - try: - mnt.umount(hash_id = hash_id) - except mount.MountException as ex: - self.error_handler(str(ex)) - return False - return True - - def error_handler( self, message ): - KMessageBox.error( self, QString.fromUtf8( message ) ) - - def question_handler( self, message ): - return KMessageBox.Yes == KMessageBox.warningYesNo( self, QString.fromUtf8( message ) ) - - def exec_( self ): - self.config.set_question_handler( self.question_handler ) - self.config.set_error_handler( self.error_handler ) - ret_val = KDialog.exec_( self ) - self.config.clear_handlers() - - if ret_val != QDialog.Accepted: - self.config.dict = self.config_copy_dict - - self.config.set_current_profile( self.current_profile_org ) - - return ret_val - - def update_snapshots_location( self ): - '''Update snapshot location dialog''' - self.config.set_question_handler( self.question_handler ) - self.config.set_error_handler( self.error_handler ) - self.snapshots.update_snapshots_location() - - #def update_include_columns( self ): - # if self.cb_per_diretory_schedule.isChecked(): - # self.list_include.showColumn( 1 ) - # self.global_schedule_group_box.hide() - # else: - # self.list_include.hideColumn( 1 ) - # self.global_schedule_group_box.show() - - #def on_list_include_item_activated( self, item, column ): - # if not self.cb_per_diretory_schedule.isChecked(): - # return - # - # if item is None: - # return - - # #if column != 1: - # # return - - # self.popup_automatic_backup.popup( QCursor.pos() ) - - #def on_popup_automatic_backup( self ): - # print "ABC" - - def update_remove_older_than( self ): - enabled = self.cb_remove_older_then.isChecked() - self.edit_remove_older_then.setEnabled( enabled ) - self.combo_remove_older_then.setEnabled( enabled ) - - def update_min_free_space( self ): - enabled = self.cb_min_free_space.isChecked() - self.edit_min_free_space.setEnabled( enabled ) - self.combo_min_free_space.setEnabled( enabled ) - - def update_min_free_inodes(self): - enabled = self.cb_min_free_inodes.isChecked() - self.edit_min_free_inodes.setEnabled(enabled) - - def add_include( self, data ): - item = QTreeWidgetItem() - - if data[1] == 0: - item.setIcon( 0, KIcon('folder') ) - else: - item.setIcon( 0, KIcon('text-plain') ) - - item.setText( 0, QString.fromUtf8( data[0] ) ) - #item.setText( 0, QString.fromUtf8( data[0] ) ) - #item.setText( 1, QString.fromUtf8( self.config.AUTOMATIC_BACKUP_MODES[ data[1] ] ) ) - item.setData( 0, Qt.UserRole, QVariant( data[1] ) ) - self.list_include.addTopLevelItem( item ) - - if self.list_include.currentItem() is None: - self.list_include.setCurrentItem( item ) - - return item - - def add_exclude( self, pattern ): - item = QListWidgetItem( KIcon('edit-delete'), QString.fromUtf8( pattern ), self.list_exclude ) - - if self.list_exclude.currentItem() is None: - self.list_exclude.setCurrentItem( item ) - - return item - - def fill_combo( self, combo, dict ): - keys = dict.keys() - keys.sort() - - for key in keys: - combo.addItem( QIcon(), QString.fromUtf8( dict[ key ] ), QVariant( key ) ) - - def set_combo_value( self, combo, value, type = 'int' ): - for i in xrange( combo.count() ): - if type == 'int' and value == combo.itemData( i ).toInt()[0]: - combo.setCurrentIndex( i ) - break - if type == 'str' and value == combo.itemData( i ).toString(): - combo.setCurrentIndex( i ) - break - - def validate( self ): - if not self.save_profile(): - return False - - if not self.config.check_config(): - return False - - if not self.config.setup_cron(): - return False - - self.config.save() - return True - - def on_btn_exclude_remove_clicked ( self ): - for item in self.list_exclude.selectedItems(): - self.list_exclude.takeItem(self.list_exclude.row(item)) - - if self.list_exclude.count() > 0: - self.list_exclude.setCurrentItem( self.list_exclude.item(0) ) - - def add_exclude_( self, pattern ): - if len( pattern ) == 0: - return - - for index in xrange( self.list_exclude.count() ): - if pattern == self.list_exclude.item( index ).text().toUtf8(): - return - - self.add_exclude( pattern ) - - def on_btn_exclude_add_clicked( self ): - ret_val = KInputDialog.getText( QString.fromUtf8( _( 'Exclude pattern' ) ), '', '', self ) - if not ret_val[1]: - return - - pattern = str( ret_val[0].toUtf8() ).strip() - - if len( pattern ) == 0: - return - - if pattern.find( ':' ) >= 0: - KMessageBox.error( self, QString.fromUtf8( _('Exclude patterns can\'t contain \':\' char !') ) ) - return - - self.add_exclude_( pattern ) - - def on_btn_exclude_file_clicked( self ): - for path in KFileDialog.getOpenFileNames( KUrl(), '', self, QString.fromUtf8( _( 'Exclude file' ) ) ): - self.add_exclude_( str(path.toUtf8()) ) - - def on_btn_exclude_folder_clicked( self ): - dialog = kde4tools.getExistingDirectories( self, QString.fromUtf8( _( 'Exclude folder' ) ) ) - if dialog.exec_(): - for path in dialog.selectedFiles(): - self.add_exclude_( str(path.toUtf8()) ) - - def on_btn_include_remove_clicked ( self ): - for item in self.list_include.selectedItems(): - index = self.list_include.indexOfTopLevelItem( item ) - if index < 0: - continue - - self.list_include.takeTopLevelItem( index ) - - if self.list_include.topLevelItemCount() > 0: - self.list_include.setCurrentItem( self.list_include.topLevelItem(0) ) - - def on_btn_include_file_add_clicked( self ): - for path in KFileDialog.getOpenFileNames( KUrl(), '', self, QString.fromUtf8( _( 'Include file' ) ) ): - path = str(path.toUtf8()) - if len( path ) == 0 : - continue - - path = self.config.prepare_path( path ) - - for index in xrange( self.list_include.topLevelItemCount() ): - if path == str( self.list_include.topLevelItem( index ).text( 0 ).toUtf8() ): - continue - - self.add_include( ( path, 1 ) ) - - def on_btn_include_add_clicked( self ): - dialog = kde4tools.getExistingDirectories( self, QString.fromUtf8( _( 'Include folder' ) ) ) - if dialog.exec_(): - for path in dialog.selectedFiles(): - path = str(path.toUtf8()) - - if len( path ) == 0 : - continue - - path = self.config.prepare_path( path ) - - for index in xrange( self.list_include.topLevelItemCount() ): - if path == str( self.list_include.topLevelItem( index ).text( 0 ).toUtf8() ): - continue - - self.add_include( ( path, 0 ) ) - - def on_btn_snapshots_path_clicked( self ): - old_path = str( self.edit_snapshots_path.text().toUtf8() ) - - path = str( KFileDialog.getExistingDirectory( KUrl( self.edit_snapshots_path.text() ), self, QString.fromUtf8( _( 'Where to save snapshots' ) ) ).toUtf8() ) - if len( path ) > 0 : - if len( old_path ) > 0 and old_path != path: - if not self.question_handler( _('Are you sure you want to change snapshots folder ?') ): - return - self.edit_snapshots_path.setText( QString.fromUtf8( self.config.prepare_path( path ) ) ) - - def on_btn_ssh_private_key_file_clicked( self ): - old_file = str( self.txt_ssh_private_key_file.text().toUtf8() ) - - if len(old_file) > 0: - start_dir = KUrl( self.txt_ssh_private_key_file.text() ) - else: - start_dir = KUrl( self.config.get_ssh_private_key_folder() ) - file = str( KFileDialog.getOpenFileName( start_dir, QString.fromUtf8(''), self, QString.fromUtf8( _( 'SSH private key' ) ) ).toUtf8() ) - if len( file ) > 0 : - self.txt_ssh_private_key_file.setText( QString.fromUtf8( self.config.prepare_path( file ) ) ) - - def on_combo_modes_changed(self, *params): - if len(params) == 0: - index = self.combo_modes.currentIndex() - else: - index = params[0] - active_mode = str( self.combo_modes.itemData( index ).toString().toUtf8() ) - if active_mode != self.mode: - for mode in self.config.SNAPSHOT_MODES.keys(): - getattr(self, 'mode_%s' % mode).hide() - for mode in self.config.SNAPSHOT_MODES.keys(): - if active_mode == mode: - getattr(self, 'mode_%s' % mode).show() - self.mode = active_mode - - if self.config.mode_need_password(active_mode): - self.lbl_password_1.setText( QString.fromUtf8( self.config.SNAPSHOT_MODES[active_mode][2] + ':' ) ) - self.frame_password_1.show() - if self.config.mode_need_password(active_mode, 2): - self.lbl_password_2.setText( QString.fromUtf8( self.config.SNAPSHOT_MODES[active_mode][3] + ':' ) ) - self.lbl_password_2.show() - self.txt_password_2.show() - kde4tools.equal_indent(self.lbl_password_1, self.lbl_password_2) - else: - self.lbl_password_2.hide() - self.txt_password_2.hide() - kde4tools.equal_indent(self.lbl_password_1) - else: - self.frame_password_1.hide() - - if active_mode == 'ssh_encfs': - self.lbl_ssh_encfs_exclude_warning.show() - else: - self.lbl_ssh_encfs_exclude_warning.hide() - - enabled = active_mode in ('ssh', 'ssh_encfs') - self.cb_run_nice_on_remote.setEnabled(enabled) - self.cb_run_ionice_on_remote.setEnabled(enabled) - self.cb_bwlimit.setEnabled(enabled) - self.sb_bwlimit.setEnabled(enabled) - - def accept( self ): - if self.validate(): - KDialog.accept( self ) - diff -Nru backintime-1.0.36/kde4/snapshotsdialog.py backintime-1.1.12/kde4/snapshotsdialog.py --- backintime-1.0.36/kde4/snapshotsdialog.py 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/kde4/snapshotsdialog.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,401 +0,0 @@ -# Back In Time -# Copyright (C) 2008-2009 Oprea Dan, Bart de Koning, Richard Bailey -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - - -import os -import os.path -import sys -import datetime -import gettext - -from PyQt4.QtGui import * -from PyQt4.QtCore import * -from PyKDE4.kdecore import * -from PyKDE4.kdeui import * -from PyKDE4.kio import * - -import config -import tools -import kde4tools -import restoredialog - - -_=gettext.gettext - - -class DiffOptionsDialog( KDialog ): - def __init__( self, parent ): - KDialog.__init__( self, parent ) - self.config = parent.config - - self.setWindowIcon( KIcon( 'configure' ) ) - self.setCaption( QString.fromUtf8( _( 'Diff Options' ) ) ) - - self.main_widget = QWidget( self ) - self.main_layout = QGridLayout() - self.main_widget.setLayout( self.main_layout ) - self.setMainWidget( self.main_widget ) - - self.diff_cmd = self.config.get_str_value( 'kde4.diff.cmd', 'kompare' ) - self.diff_params = self.config.get_str_value( 'kde4.diff.params', '%1 %2' ) - - self.main_layout.addWidget( QLabel( QString.fromUtf8( _( 'Command:' ) ) ), 0, 0 ) - self.edit_command = KLineEdit( self.diff_cmd, self ) - self.main_layout.addWidget( self.edit_command, 0, 1 ) - - self.main_layout.addWidget( QLabel( QString.fromUtf8( _( 'Parameters:' ) ) ), 1, 0 ) - self.edit_params = KLineEdit( self.diff_params, self ) - self.main_layout.addWidget( self.edit_params, 1, 1 ) - - self.main_layout.addWidget( QLabel( QString.fromUtf8( _( 'Use %1 and %2 for path parameters' ) ) ), 2, 1 ) - - def accept( self ): - diff_cmd = str( self.edit_command.text().toUtf8() ) - diff_params = str( self.edit_params.text().toUtf8() ) - - if diff_cmd != self.diff_cmd or diff_params != self.diff_params: - self.config.set_str_value( 'kde4.diff.cmd', diff_cmd ) - self.config.set_str_value( 'kde4.diff.params', diff_params ) - self.config.save() - - KDialog.accept( self ) - - -class SnapshotsDialog( KDialog ): - def __init__( self, parent, snapshot_id, path, icon ): - KDialog.__init__( self, parent ) - self.config = parent.config - self.snapshots = parent.snapshots - self.snapshots_list = parent.snapshots_list - self.kapp = parent.kapp - - self.snapshot_id = snapshot_id - self.path = path - self.icon = icon - - self.setWindowIcon( KIcon( 'view-list-details' ) ) - self.setCaption( QString.fromUtf8( _( 'Snapshots' ) ) ) - - # - self.main_widget = QWidget( self ) - self.main_layout = QVBoxLayout() - self.main_widget.setLayout( self.main_layout ) - self.setMainWidget( self.main_widget ) - - #path - self.edit_path = KLineEdit( self.path, self ) - self.edit_path.setReadOnly( True ) - self.main_layout.addWidget( self.edit_path ) - - #toolbar - self.toolbar = KToolBar( self ) - self.toolbar.setFloatable( False ) - self.main_layout.addWidget( self.toolbar ) - - #toolbar restore - menu_restore = QMenu() - action = menu_restore.addAction( KIcon( 'document-revert' ), QString.fromUtf8( _('Restore') ) ) - QObject.connect( action, SIGNAL('triggered()'), self.restore_this ) - action = menu_restore.addAction( KIcon( 'document-revert' ), QString.fromUtf8( _('Restore to ...') ) ) - QObject.connect( action, SIGNAL('triggered()'), self.restore_this_to ) - - self.btn_restore = self.toolbar.addAction( KIcon( 'document-revert' ), '' ) - self.btn_restore.setToolTip( QString.fromUtf8( _('Restore') ) ) - self.btn_restore.setMenu(menu_restore) - QObject.connect( self.btn_restore, SIGNAL('triggered()'), self.restore_this ) - - #btn delete - self.btn_delete = self.toolbar.addAction(KIcon('edit-delete'),'') - self.btn_delete.setToolTip(QString.fromUtf8(_('Delete'))) - QObject.connect(self.btn_delete, SIGNAL('triggered()'), self.on_btn_delete_clicked) - - #btn select_all - self.btn_select_all = self.toolbar.addAction(KIcon('edit-select-all'),'') - self.btn_select_all.setToolTip(QString.fromUtf8(_('Select All'))) - QObject.connect(self.btn_select_all, SIGNAL('triggered()'), self.on_btn_select_all_clicked) - - #list different snapshots only - self.cb_only_different_snapshots = QCheckBox( QString.fromUtf8( _( 'List only different snapshots' ) ), self ) - self.main_layout.addWidget( self.cb_only_different_snapshots ) - QObject.connect( self.cb_only_different_snapshots, SIGNAL('stateChanged(int)'), self.cb_only_different_snapshots_changed ) - - #list equal snapshots only - layout = QHBoxLayout() - self.main_layout.addLayout(layout) - self.cb_only_equal_snapshots = QCheckBox(QString.fromUtf8(_('List only equal snapshots to: ')), self) - QObject.connect(self.cb_only_equal_snapshots, SIGNAL('stateChanged(int)'), self.cb_only_equal_snapshots_changed) - layout.addWidget(self.cb_only_equal_snapshots) - - self.combo_equal_to = KComboBox(self) - QObject.connect(self.combo_equal_to, SIGNAL('currentIndexChanged(int)'), self.on_combo_equal_to_changed) - self.combo_equal_to.setEnabled(False) - layout.addWidget(self.combo_equal_to) - - #deep check - self.cb_only_different_snapshots_deep_check = QCheckBox( QString.fromUtf8( _( 'Deep check (more accurate, but slow)' ) ), self ) - self.main_layout.addWidget( self.cb_only_different_snapshots_deep_check ) - QObject.connect( self.cb_only_different_snapshots_deep_check, SIGNAL('stateChanged(int)'), self.cb_only_different_snapshots_deep_check_changed ) - - #snapshots list - self.list_snapshots = KListWidget( self ) - self.list_snapshots.setSelectionMode(QAbstractItemView.ExtendedSelection) - self.main_layout.addWidget( self.list_snapshots ) - QObject.connect( self.list_snapshots, SIGNAL('itemSelectionChanged()'), self.on_list_snapshots_changed ) - QObject.connect( self.list_snapshots, SIGNAL('itemActivated(QListWidgetItem*)'), self.on_list_snapshots_executed ) - - #diff - layout = QHBoxLayout() - self.main_layout.addLayout( layout ) - - self.btn_diff = KPushButton( QString.fromUtf8( _('Diff') ), self ) - layout.addWidget( self.btn_diff ) - QObject.connect( self.btn_diff, SIGNAL('clicked()'), self.on_btn_diff_clicked ) - - self.combo_diff = KComboBox( self ) - layout.addWidget( self.combo_diff, 2 ) - - #diff options - self.setButtons( KDialog.ButtonCode( KDialog.Ok | KDialog.Cancel | KDialog.User1 ) ) - self.setButtonGuiItem( KDialog.User1, KGuiItem( QString.fromUtf8( _('Diff Options') ), KIcon( 'configure' ) ) ) - self.setButtonText( KDialog.Ok, QString.fromUtf8( _('Go To') ) ) - - QObject.connect( self, SIGNAL('user1Clicked()'), self.on_btn_diff_options_clicked ) - - self.setDefaultButton( KDialog.Ok ) - - # - self.cb_only_different_snapshots_deep_check.setEnabled( False ) - - full_path = self.snapshots.get_snapshot_path_to( self.snapshot_id, self.path ) - if os.path.islink( full_path ): - self.cb_only_different_snapshots_deep_check.hide() - elif os.path.isdir( full_path ): - self.cb_only_different_snapshots.hide() - self.cb_only_equal_snapshots.hide() - self.combo_equal_to.hide() - self.cb_only_different_snapshots_deep_check.hide() - - #update list and combobox - self.update_snapshots() - self.update_combo_equal_to() - - def add_snapshot_( self, snapshot_id ): - name = self.snapshots.get_snapshot_display_name( snapshot_id ) - - #add to list - item = QListWidgetItem( QString.fromUtf8( name ), self.list_snapshots ) - item.setData( Qt.UserRole, QVariant( snapshot_id ) ) - - if self.list_snapshots.currentItem() is None: - self.list_snapshots.setCurrentItem( item ) - - #add to combo - self.combo_diff.addItem( QString.fromUtf8( name ), QVariant( snapshot_id ) ) - - if self.snapshot_id == snapshot_id: - self.combo_diff.setCurrentIndex( self.combo_diff.count() - 1 ) - elif self.combo_diff.currentIndex() < 0: - self.combo_diff.setCurrentIndex( 0 ) - - def update_snapshots( self ): - self.list_snapshots.clear() - self.combo_diff.clear() - - combo_index = self.combo_equal_to.currentIndex() - if self.cb_only_equal_snapshots.isChecked() and combo_index >= 0: - equal_to_snapshot_id = str(self.combo_equal_to.itemData(combo_index).toString().toUtf8()) - equal_to = self.snapshots.get_snapshot_path_to(equal_to_snapshot_id, self.path) - else: - equal_to = False - snapshots_filtered = self.snapshots.filter_for(self.snapshot_id, self.path, - self.snapshots_list, - self.cb_only_different_snapshots.isChecked(), - self.cb_only_different_snapshots_deep_check.isChecked(), - equal_to) - for snapshot_id in snapshots_filtered: - self.add_snapshot_( snapshot_id ) - - self.update_toolbar() - - def update_combo_equal_to(self): - self.combo_equal_to.clear() - snapshots_filtered = self.snapshots.filter_for(self.snapshot_id, self.path, self.snapshots_list) - for snapshot_id in snapshots_filtered: - name = self.snapshots.get_snapshot_display_name(snapshot_id) - self.combo_equal_to.addItem(QString.fromUtf8(name), QVariant(snapshot_id)) - - if snapshot_id == self.snapshot_id: - self.combo_equal_to.setCurrentIndex(self.combo_equal_to.count() - 1) - elif self.combo_equal_to.currentIndex() < 0: - self.combo_equal_to.setCurrentIndex(0) - - def get_list_snapshot_id( self, multiSelection = False): - if multiSelection: - items = self.list_snapshots.selectedItems() - _list = [] - for item in items: - _list.append(str( item.data( Qt.UserRole ).toString().toUtf8() )) - return _list - - item = self.list_snapshots.currentItem() - if item is None: - return '' - return str( item.data( Qt.UserRole ).toString().toUtf8() ) - - def cb_only_different_snapshots_changed( self ): - enabled = self.cb_only_different_snapshots.isChecked() - self.cb_only_equal_snapshots.setEnabled(not enabled) - self.cb_only_different_snapshots_deep_check.setEnabled( enabled ) - - self.update_snapshots() - - def cb_only_equal_snapshots_changed( self ): - enabled = self.cb_only_equal_snapshots.isChecked() - self.combo_equal_to.setEnabled(enabled) - self.cb_only_different_snapshots.setEnabled(not enabled) - self.cb_only_different_snapshots_deep_check.setEnabled( enabled ) - - self.update_snapshots() - - def cb_only_different_snapshots_deep_check_changed( self ): - self.update_snapshots() - - def update_toolbar( self ): - snapshot_ids = self.get_list_snapshot_id(True) - - if len(snapshot_ids) <= 0: - enable_restore = False - enable_delete = False - elif len(snapshot_ids) == 1: - enable_restore = len( snapshot_ids[0] ) > 1 - enable_delete = len( snapshot_ids[0] ) > 1 - else: - enable_restore = False - enable_delete = True - for snapshot_id in snapshot_ids: - if len(snapshot_id) <= 1: - enable_delete = False - - self.btn_restore.setEnabled(enable_restore) - self.btn_delete.setEnabled(enable_delete) - - def restore_this( self ): - snapshot_id = self.get_list_snapshot_id() - if len( snapshot_id ) > 1: - restoredialog.restore( self, snapshot_id, self.path ) - - def restore_this_to( self ): - snapshot_id = self.get_list_snapshot_id() - if len( snapshot_id ) > 1: - restoredialog.restore( self, snapshot_id, self.path, None ) - - def on_list_snapshots_changed( self ): - self.update_toolbar() - - def on_list_snapshots_executed( self, item ): - if self.kapp.keyboardModifiers() and Qt.ControlModifier: - return - - snapshot_id = self.get_list_snapshot_id() - if len( snapshot_id ) <= 0: - return - - full_path = self.snapshots.get_snapshot_path_to( snapshot_id, self.path ) - if not os.path.exists( full_path ): - return - - self.run = KRun( KUrl( full_path ), self, True ) - - def on_btn_diff_clicked( self ): - snapshot_id = self.get_list_snapshot_id() - if len( snapshot_id ) <= 0: - return - - combo_index = self.combo_diff.currentIndex() - if combo_index < 0: - return - - snapshot2_id = str( self.combo_diff.itemData( combo_index ).toString().toUtf8() ) - - path1 = self.snapshots.get_snapshot_path_to( snapshot_id, self.path ) - path2 = self.snapshots.get_snapshot_path_to( snapshot2_id, self.path ) - - #check if the 2 paths are different - if path1 == path2: - KMessageBox.error( self, QString.fromUtf8( _('You can\'t compare a snapshot to itself') ) ) - return - - diff_cmd = self.config.get_str_value( 'kde4.diff.cmd', 'kompare' ) - diff_params = self.config.get_str_value( 'kde4.diff.params', '%1 %2' ) - - if not tools.check_command( diff_cmd ): - KMessageBox.error( self, QString.fromUtf8( _('Command not found: %s') % diff_cmd ) ) - return - - params = diff_params - params = params.replace( '%1', "\"%s\"" % path1 ) - params = params.replace( '%2', "\"%s\"" % path2 ) - - cmd = diff_cmd + ' ' + params + ' &' - os.system( cmd ) - - def on_btn_diff_options_clicked( self ): - DiffOptionsDialog( self ).exec_() - - def on_combo_equal_to_changed(self, index): - self.update_snapshots() - - def on_btn_delete_clicked(self): - snapshot_ids = self.get_list_snapshot_id(True) - if len(snapshot_ids) == 0: - return - elif len(snapshot_ids) == 1: - msg = _('Do you really want to delete "%(file)s" in snapshot "%(snapshot_id)s?\n') \ - % {'file' : self.path, 'snapshot_id' : snapshot_ids[0]} - else: - msg = _('Do you really want to delete "%(file)s" in %(count)d snapshots?\n') \ - % {'file' : self.path, 'count' : len(snapshot_ids)} - msg += _('WARNING: This can not be revoked!') - if KMessageBox.Yes == KMessageBox.warningYesNo(self, QString.fromUtf8(msg)): - for snapshot_id in snapshot_ids: - self.snapshots.delete_path(snapshot_id, self.path) - - msg = _('Exclude "%s" from future snapshots?' % self.path) - if KMessageBox.Yes == KMessageBox.warningYesNo(self, QString.fromUtf8(msg)): - exclude = self.config.get_exclude() - exclude.append(self.path) - self.config.set_exclude(exclude) - self.update_combo_equal_to() - self.update_snapshots() - - def on_btn_select_all_clicked(self): - '''select all expect 'Now' ''' - def iterAllItems(self): - for i in range(self.count()): - yield self.item(i) - - self.list_snapshots.clearSelection() - for item in iterAllItems(self.list_snapshots): - if len(str(item.data(Qt.UserRole).toString().toUtf8())) > 1: - item.setSelected(True) - - def accept( self ): - snapshot_id = self.get_list_snapshot_id() - if len( snapshot_id ) >= 1: - self.snapshot_id = snapshot_id - KDialog.accept( self ) - diff -Nru backintime-1.0.36/makedeb.sh backintime-1.1.12/makedeb.sh --- backintime-1.0.36/makedeb.sh 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/makedeb.sh 2016-01-11 18:07:58.000000000 +0000 @@ -1,30 +1,7 @@ #!/bin/bash -for i in common notify gnome kde4; do - PKGNAME=`cat $i/debian_specific/control | grep "^Package:" | cut -d" " -f2` - PKGVER=`cat $i/debian_specific/control | grep "^Version:" | cut -d" " -f2` - PKGARCH=`cat $i/debian_specific/control | grep "^Architecture:" | cut -d" " -f2` - - echo $PKGNAME $PKGVER $PKGARCH - - rm -rf tmp - mkdir -p tmp - - cd $i - ./configure $@ - make DESTDIR=../tmp install - cd .. - - #update control - mkdir -p tmp/DEBIAN - cp $i/debian_specific/control tmp/DEBIAN/control - echo "Installed-Size: `du -sk tmp | cut -f1`" >> tmp/DEBIAN/control - - cp $i/debian_specific/postrm tmp/DEBIAN/postrm - [ -e $i/debian_specific/conffiles ] && cp $i/debian_specific/conffiles tmp/DEBIAN/conffiles - - dpkg --build tmp/ $PKGNAME-${PKGVER}_$PKGARCH.deb - - rm -rf tmp -done +PKGNAME=backintime +PKGVER=$(cat VERSION) +ARCH=all +dpkg-buildpackage -us -uc diff -Nru backintime-1.0.36/makedeb-src.sh backintime-1.1.12/makedeb-src.sh --- backintime-1.0.36/makedeb-src.sh 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/makedeb-src.sh 1970-01-01 00:00:00.000000000 +0000 @@ -1,63 +0,0 @@ -#!/bin/bash - -RELEASES="precise trusty" - -for i in common notify gnome kde4; do - PKGNAME=`cat $i/debian_specific/control | grep "^Package:" | cut -d" " -f2` - PKGVER=`cat $i/debian_specific/control | grep "^Version:" | cut -d" " -f2` - PKGARCH=`cat $i/debian_specific/control | grep "^Architecture:" | cut -d" " -f2` - DST=${PKGNAME}-${PKGVER}~ - - echo $PKGNAME $PKGVER $PKGARCH - - rm -rf tmp - mkdir -p tmp/${DST} - - cd $i - ./makedeb-src.sh ../tmp/${DST} - cd .. - - cd tmp - - for release in $RELEASES; do - mv ${DST}* ${DST}${release} - cd ${DST}${release} - #debian: control - cp ../../$i/debian_specific/control.source debian/control - cat ../../$i/debian_specific/control | \ - sed -e '/^Version:\|^Source:\|^Maintainer:/d' \ - -e 's/^Depends: /Depends: ${misc:Depends}, /g' \ - -e "s/backintime-\(common\|notify\|kde\) (\(>=\|<<\) [^)]*)/backintime-\1 (\2 $PKGVER~$release)/g" \ - >> debian/control - #Unity 7.0 in Raring and Saucy need consolekit to be able to shutdown - #but consolekit isn't available in earlier releases - #so this will add consolekit only to Raring and Saucy - if [ "x$i" == "xgnome" ]; then - if [ "x$release" == "xraring" ] || [ "x$release" == "xsaucy" ]; then - sed -e 's/^Depends: /Depends: consolekit, /g' \ - -i debian/control - fi - fi - if [ -e ../../$i/debian_specific/control.virtual-kde ]; then - echo "" >> debian/control - cat ../../$i/debian_specific/control.virtual-kde | \ - sed -e 's/^Depends: /Depends: ${misc:Depends}, /g' \ - >> debian/control - fi - - #debian: changelog - cp ../../common/debian_specific/changelog debian - sed -e "s/\$BACKINTIME/backintime-$i/g" -e "s/\$VERSION/$PKGVER/g" -e "s/\$RELEASE/$release/g" -i debian/changelog - - debuild -i -S - #debuild -i -us -uc -S - cd .. - done - - rm -rf ${DST}* - mv * ../ - cd .. - - rm -rf tmp -done - diff -Nru backintime-1.0.36/make-tarball.sh backintime-1.1.12/make-tarball.sh --- backintime-1.0.36/make-tarball.sh 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/make-tarball.sh 1970-01-01 00:00:00.000000000 +0000 @@ -1,6 +0,0 @@ -#!/bin/bash - -VER=`cat VERSION` - -tar cfz backintime-$VER.tar.gz AUTHORS CHANGES LICENSE TODO README TRANSLATIONS VERSION *.sh common gnome kde4 notify - diff -Nru backintime-1.0.36/maketar.sh backintime-1.1.12/maketar.sh --- backintime-1.0.36/maketar.sh 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/maketar.sh 1970-01-01 00:00:00.000000000 +0000 @@ -1,23 +0,0 @@ -#!/bin/bash - -PKGNAME=backintime -PKGVER=`cat VERSION` - -echo $PKGNAME $PKGVER - -rm */Makefile -rm *~ -rm */*~ -rm *.deb -rm **/*.pyc -rm -rf tmp -rm -rf common/po/*.mo - -cd .. -mkdir $PKGNAME-$PKGVER -cp -a backintime/* $PKGNAME-$PKGVER - -tar cfz $PKGNAME-${PKGVER}_src.tar.gz $PKGNAME-$PKGVER -rm -rf $PKGNAME-$PKGVER -cd backintime - diff -Nru backintime-1.0.36/notify/configure backintime-1.1.12/notify/configure --- backintime-1.0.36/notify/configure 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/notify/configure 1970-01-01 00:00:00.000000000 +0000 @@ -1,12 +0,0 @@ -#!/bin/sh - -if [ -e Makefile ]; then - rm Makefile; -fi - -cp Makefile.template Makefile - -printf "All OK. Now run:\n" -printf " make\n" -printf " sudo make install\n" - diff -Nru backintime-1.0.36/notify/debian_specific/compat backintime-1.1.12/notify/debian_specific/compat --- backintime-1.0.36/notify/debian_specific/compat 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/notify/debian_specific/compat 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -5 diff -Nru backintime-1.0.36/notify/debian_specific/control backintime-1.1.12/notify/debian_specific/control --- backintime-1.0.36/notify/debian_specific/control 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/notify/debian_specific/control 1970-01-01 00:00:00.000000000 +0000 @@ -1,9 +0,0 @@ -Package: backintime-notify -Version: 1.0.36 -Priority: optional -Section: utils -Maintainer: BIT Team -Architecture: all -Homepage: http://backintime.le-web.org -Depends: libnotify-bin, backintime-common (>= 1.0.36~) -Description: Notifications using libnotify for BackInTime diff -Nru backintime-1.0.36/notify/debian_specific/control.source backintime-1.1.12/notify/debian_specific/control.source --- backintime-1.0.36/notify/debian_specific/control.source 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/notify/debian_specific/control.source 1970-01-01 00:00:00.000000000 +0000 @@ -1,8 +0,0 @@ -Source: backintime-notify -Maintainer: BIT Team -Section: gnome -Build-Depends: debhelper (>= 7) -Priority: optional -Standards-Version: 3.9.5 -Homepage: http://backintime.le-web.org - diff -Nru backintime-1.0.36/notify/debian_specific/postrm backintime-1.1.12/notify/debian_specific/postrm --- backintime-1.0.36/notify/debian_specific/postrm 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/notify/debian_specific/postrm 1970-01-01 00:00:00.000000000 +0000 @@ -1,5 +0,0 @@ -#!/bin/sh -rm -rf /usr/share/backintime/plugins/notifyplugin.pyc -exit 0 - -#DEBHELPER# diff -Nru backintime-1.0.36/notify/debian_specific/rules backintime-1.1.12/notify/debian_specific/rules --- backintime-1.0.36/notify/debian_specific/rules 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/notify/debian_specific/rules 1970-01-01 00:00:00.000000000 +0000 @@ -1,44 +0,0 @@ -#!/usr/bin/make -f - -package = backintime-notify - -clean: - dh_testdir - dh_clean - rm -f build - -install: build - #install plugin - dh_install plugins/*.py /usr/share/backintime/plugins - - #install copyright file - #dh_installdirs /usr/share/doc/backintime-gnome - dh_install debian/copyright /usr/share/doc/backintime-notify - -build: - touch build - -build-arch: build - -build-indep: build - -binary-indep: install - dh_testdir -i - dh_testroot -i - #dh_installdocs -i NEWS - #dh_installchangelogs -i ChangeLog - #dh_strip -i - #dh_compress -i - dh_fixperms -i - dh_installdeb -i - #dh_shlibdeps -i - dh_gencontrol -i - dh_md5sums -i - dh_builddeb -i - -binary-arch: install - -binary: binary-indep - -.PHONY: binary binary-arch binary-indep clean - diff -Nru backintime-1.0.36/notify/debian_specific/source/format backintime-1.1.12/notify/debian_specific/source/format --- backintime-1.0.36/notify/debian_specific/source/format 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/notify/debian_specific/source/format 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -1.0 diff -Nru backintime-1.0.36/notify/makedeb-src.sh backintime-1.1.12/notify/makedeb-src.sh --- backintime-1.0.36/notify/makedeb-src.sh 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/notify/makedeb-src.sh 1970-01-01 00:00:00.000000000 +0000 @@ -1,43 +0,0 @@ -#!/bin/bash - -if [ -z $1 ]; then - echo "ERROR: You need to specify the install dir" - exit 1 -fi - -VERSION=`cat ../VERSION` - -DEST=$1 - -mkdir -p $DEST/debian/source -mkdir -p $DEST/man/C -mkdir -p $DEST/doc -mkdir -p $DEST/docbook -mkdir -p $DEST/plugins - -#plugins -cp plugins/*.py $DEST/plugins - -#doc files -cp ../AUTHORS $DEST/doc -cp ../LICENSE $DEST/doc -cp ../README $DEST/doc -cp ../TRANSLATIONS $DEST/doc -cp ../VERSION $DEST/doc -cp ../CHANGES $DEST/doc - -#debian: copyright -cp ../common/debian_specific/copyright $DEST/debian - -#debian: postrm -cp debian_specific/postrm $DEST/debian - -#debian: rules -cp debian_specific/rules $DEST/debian - -#debian: dpkg-source format -cp debian_specific/source/format $DEST/debian/source - -#debian: compatibility level -cp debian_specific/compat $DEST/debian - diff -Nru backintime-1.0.36/notify/Makefile.template backintime-1.1.12/notify/Makefile.template --- backintime-1.0.36/notify/Makefile.template 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/notify/Makefile.template 1970-01-01 00:00:00.000000000 +0000 @@ -1,16 +0,0 @@ -PREFIX=/usr -DEST=$(DESTDIR)$(PREFIX) - -all: - -clean: - -install: - #install plugin - install -d $(DEST)/share/backintime/plugins - install --mode=644 plugins/*.py $(DEST)/share/backintime/plugins - - #install copyright file - install -d $(DEST)/share/doc/backintime-notify - install --mode=644 ../common/debian_specific/copyright $(DEST)/share/doc/backintime-notify - diff -Nru backintime-1.0.36/notify/plugins/notifyplugin.py backintime-1.1.12/notify/plugins/notifyplugin.py --- backintime-1.0.36/notify/plugins/notifyplugin.py 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/notify/plugins/notifyplugin.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,79 +0,0 @@ -# Back In Time -# Copyright (C) 2008-2009 Oprea Dan, Bart de Koning, Richard Bailey -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - - -import os -import pluginmanager -import gettext - -_=gettext.gettext - - -class NotifyPlugin( pluginmanager.Plugin ): - def __init__( self ): - self.user = '' - - try: - self.user = os.getlogin() - except: - pass - - if len(self.user) <= 0: - try: - user = os.environ['USER'] - except: - pass - - if len(self.user) <= 0: - try: - user = os.environ['LOGNAME'] - except: - pass - - def init( self, snapshots ): - return True - - def is_gui( self ): - return True - - def on_process_begins( self ): - pass - - def on_process_ends( self ): - pass - - def on_error( self, code, message ): - return - - def on_new_snapshot( self, snapshot_id, snapshot_path ): - return - - def on_message( self, profile_id, profile_name, level, message, timeout ): - if 1 == level: - cmd = "notify-send " - if timeout > 0: - cmd = cmd + " -t %s" % (1000 * timeout) - - title = "Back In Time (%s) : %s" % (self.user, profile_name) - message = message.replace("\n", ' ') - message = message.replace("\r", '') - - cmd = cmd + " \"%s\" \"%s\"" % (title, message) - print(cmd) - os.system(cmd) - return - diff -Nru backintime-1.0.36/qt4/app.py backintime-1.1.12/qt4/app.py --- backintime-1.0.36/qt4/app.py 1970-01-01 00:00:00.000000000 +0000 +++ backintime-1.1.12/qt4/app.py 2016-01-11 18:07:58.000000000 +0000 @@ -0,0 +1,1523 @@ +# Back In Time +# Copyright (C) 2008-2016 Oprea Dan, Bart de Koning, Richard Bailey, Germar Reitze +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + +import os +import sys + +if not os.getenv( 'DISPLAY', '' ): + os.putenv( 'DISPLAY', ':0.0' ) + +import datetime +import gettext +import re +import subprocess + +import qt4tools +qt4tools.register_backintime_path('common') + +import backintime +import tools +import logger +import snapshots +import guiapplicationinstance +import mount +import progress +from exceptions import MountException + +from PyQt4.QtGui import * +from PyQt4.QtCore import * + +import settingsdialog +import snapshotsdialog +import logviewdialog +import restoredialog +import messagebox + + +_=gettext.gettext + + +class MainWindow( QMainWindow ): + def __init__( self, config, app_instance, qapp ): + QMainWindow.__init__( self ) + + self.config = config + self.app_instance = app_instance + self.qapp = qapp + self.snapshots = snapshots.Snapshots( config ) + self.last_take_snapshot_message = None + + #window icon + import icon + self.qapp.setWindowIcon(icon.BIT_LOGO) + + #main toolbar + self.main_toolbar = self.addToolBar('main') + self.main_toolbar.setFloatable( False ) + + #profiles + self.first_update_all = True + self.disable_profile_changed = False + self.combo_profiles = QComboBox( self ) + self.combo_profiles_action = self.main_toolbar.addWidget( self.combo_profiles ) + + self.btn_take_snapshot = self.main_toolbar.addAction(icon.TAKE_SNAPSHOT, _('Take snapshot')) + QObject.connect( self.btn_take_snapshot, SIGNAL('triggered()'), self.on_btn_take_snapshot_clicked ) + + self.btn_update_snapshots = self.main_toolbar.addAction(icon.REFRESH_SNAPSHOT, _('Refresh snapshots list')) + self.btn_update_snapshots.setShortcuts([Qt.Key_F5, QKeySequence(Qt.CTRL + Qt.Key_R)]) + QObject.connect( self.btn_update_snapshots, SIGNAL('triggered()'), self.on_btn_update_snapshots_clicked ) + + self.btn_name_snapshot = self.main_toolbar.addAction(icon.SNAPSHOT_NAME, _('Snapshot Name')) + QObject.connect( self.btn_name_snapshot, SIGNAL('triggered()'), self.on_btn_name_snapshot_clicked ) + + self.btn_remove_snapshot = self.main_toolbar.addAction(icon.REMOVE_SNAPSHOT, _('Remove Snapshot')) + QObject.connect( self.btn_remove_snapshot, SIGNAL('triggered()'), self.on_btn_remove_snapshot_clicked ) + + self.btn_snapshot_log_view = self.main_toolbar.addAction(icon.VIEW_SNAPSHOT_LOG, _('View Snapshot Log')) + QObject.connect( self.btn_snapshot_log_view, SIGNAL('triggered()'), self.on_btn_snapshot_log_view_clicked ) + + self.btn_log_view = self.main_toolbar.addAction(icon.VIEW_LAST_LOG, _('View Last Log')) + QObject.connect( self.btn_log_view, SIGNAL('triggered()'), self.on_btn_log_view_clicked ) + + self.main_toolbar.addSeparator() + + self.btn_settings = self.main_toolbar.addAction(icon.SETTINGS, _('Settings')) + QObject.connect( self.btn_settings, SIGNAL('triggered()'), self.on_btn_settings_clicked ) + + self.main_toolbar.addSeparator() + + self.btn_shutdown = self.main_toolbar.addAction(icon.SHUTDOWN, _('Shutdown')) + self.btn_shutdown.setToolTip(_('Shutdown system after snapshot has finished.')) + self.btn_shutdown.setCheckable(True) + self.shutdown = tools.ShutDown() + self.btn_shutdown.setEnabled(self.shutdown.can_shutdown()) + QObject.connect( self.btn_shutdown, SIGNAL('toggled(bool)'), self.on_btn_shutdown_toggled ) + + self.btn_quit = self.main_toolbar.addAction(icon.EXIT, _('Exit')) + self.btn_quit.setShortcut(QKeySequence(Qt.CTRL + Qt.Key_W)) + QObject.connect( self.btn_quit, SIGNAL('triggered()'), self.close ) + + empty = QWidget(self) + empty.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) + self.main_toolbar.addWidget(empty) + + help_menu = QMenu(self) + self.btn_help = help_menu.addAction(icon.HELP, _('Help') ) + QObject.connect( self.btn_help, SIGNAL('triggered()'), self.on_help ) + self.btn_help_config = help_menu.addAction(icon.HELP, _('Config File Help')) + QObject.connect(self.btn_help_config, SIGNAL('triggered()'), self.on_help_config) + help_menu.addSeparator() + self.btn_website = help_menu.addAction(icon.WEBSITE, _('Website') ) + QObject.connect( self.btn_website, SIGNAL('triggered()'), self.on_website) + self.btn_changelog = help_menu.addAction(icon.CHANGELOG, _('Changelog') ) + QObject.connect( self.btn_changelog, SIGNAL('triggered()'), self.on_changelog) + self.btn_faq = help_menu.addAction(icon.FAQ, _('FAQ') ) + QObject.connect( self.btn_faq, SIGNAL('triggered()'), self.on_faq) + self.btn_question = help_menu.addAction(icon.QUESTION, _('Ask a question') ) + QObject.connect( self.btn_question, SIGNAL('triggered()'), self.on_ask_a_question) + self.btn_bug = help_menu.addAction(icon.BUG, _('Report a bug') ) + QObject.connect( self.btn_bug, SIGNAL('triggered()'), self.on_report_a_bug) + help_menu.addSeparator() + self.btn_about = help_menu.addAction(icon.ABOUT, _('About') ) + QObject.connect( self.btn_about, SIGNAL('triggered()'), self.on_about) + + action = self.main_toolbar.addAction(icon.HELP, _('Help') ) + QObject.connect( action, SIGNAL('triggered()'), self.on_help ) + action.setMenu(help_menu) + + #main splitter + self.main_splitter = QSplitter( self ) + self.main_splitter.setOrientation( Qt.Horizontal ) + + #timeline + self.list_time_line = qt4tools.TimeLine(self) + self.main_splitter.addWidget(self.list_time_line) + self.list_time_line.updateFilesView.connect(self.update_files_view) + + #right widget + self.right_widget = QGroupBox( self ) + self.main_splitter.addWidget( self.right_widget ) + right_layout = QVBoxLayout( self.right_widget ) + left, top, right, bottom = right_layout.getContentsMargins() + right_layout.setContentsMargins( 0, 0, right, 0 ) + + #files toolbar + self.files_view_toolbar = QToolBar( self ) + self.files_view_toolbar.setFloatable( False ) + + self.btn_folder_up = self.files_view_toolbar.addAction(icon.UP, _('Up')) + self.btn_folder_up.setShortcuts([QKeySequence(Qt.ALT + Qt.Key_Up), Qt.Key_Backspace]) + QObject.connect( self.btn_folder_up, SIGNAL('triggered()'), self.on_btn_folder_up_clicked ) + + self.edit_current_path = QLineEdit( self ) + self.edit_current_path.setReadOnly( True ) + self.files_view_toolbar.addWidget( self.edit_current_path ) + + #show hidden files + self.show_hidden_files = self.config.get_bool_value( 'qt4.show_hidden_files', False ) + + self.btn_show_hidden_files = self.files_view_toolbar.addAction(icon.SHOW_HIDDEN, _('Show hidden files')) + self.btn_show_hidden_files.setShortcut(QKeySequence(Qt.CTRL + Qt.Key_H)) + self.btn_show_hidden_files.setCheckable( True ) + self.btn_show_hidden_files.setChecked( self.show_hidden_files ) + QObject.connect( self.btn_show_hidden_files, SIGNAL('toggled(bool)'), self.on_btn_show_hidden_files_toggled ) + + self.files_view_toolbar.addSeparator() + + #restore menu + self.menu_restore = QMenu(self) + self.btn_restore = self.menu_restore.addAction(icon.RESTORE, _('Restore') ) + QObject.connect( self.btn_restore, SIGNAL('triggered()'), self.restore_this ) + self.btn_restore_to = self.menu_restore.addAction(icon.RESTORE_TO, _('Restore to ...') ) + QObject.connect( self.btn_restore_to, SIGNAL('triggered()'), self.restore_this_to ) + self.menu_restore.addSeparator() + self.menu_restore_parent = self.menu_restore.addAction(icon.RESTORE, '' ) + QObject.connect( self.menu_restore_parent, SIGNAL('triggered()'), self.restore_parent ) + self.menu_restore_parent_to = self.menu_restore.addAction(icon.RESTORE_TO, '' ) + QObject.connect( self.menu_restore_parent_to, SIGNAL('triggered()'), self.restore_parent_to ) + self.menu_restore.addSeparator() + self.btn_restore_delete = self.menu_restore.addAction(icon.RESTORE, _('Restore and delete new files')) + QObject.connect(self.btn_restore_delete, SIGNAL('triggered()'), lambda: self.restore_this(True)) + self.menu_restore_parent_delete = self.menu_restore.addAction(icon.RESTORE, '') + QObject.connect(self.menu_restore_parent_delete, SIGNAL('triggered()'), lambda: self.restore_parent(True)) + + self.btn_restore_menu = self.files_view_toolbar.addAction(icon.RESTORE, _('Restore')) + self.btn_restore_menu.setMenu(self.menu_restore) + self.btn_restore_menu.setToolTip( _('Restore selected file or folder.\n' + 'If this button is grayed out this is most likely ' + 'because "%(now)s" is selected in left hand snapshots list.') % {'now': _('Now')} ) + QObject.connect( self.btn_restore_menu, SIGNAL('triggered()'), self.restore_this ) + + self.btn_snapshots = self.files_view_toolbar.addAction(icon.SNAPSHOTS, _('Snapshots')) + QObject.connect( self.btn_snapshots, SIGNAL('triggered()'), self.on_btn_snapshots_clicked ) + + right_layout.addWidget( self.files_view_toolbar ) + + #menubar + self.menubar = self.menuBar() + self.menubar_snapshot = self.menubar.addMenu(_('Snapshot')) + self.menubar_snapshot.addAction(self.btn_take_snapshot) + self.menubar_snapshot.addAction(self.btn_update_snapshots) + self.menubar_snapshot.addAction(self.btn_name_snapshot) + self.menubar_snapshot.addAction(self.btn_remove_snapshot) + self.menubar_snapshot.addSeparator() + self.menubar_snapshot.addAction(self.btn_settings) + self.menubar_snapshot.addSeparator() + self.menubar_snapshot.addAction(self.btn_shutdown) + self.menubar_snapshot.addAction(self.btn_quit) + + self.menubar_view = self.menubar.addMenu(_('View')) + self.menubar_view.addAction(self.btn_folder_up) + self.menubar_view.addAction(self.btn_show_hidden_files) + self.menubar_view.addSeparator() + self.menubar_view.addAction(self.btn_snapshot_log_view) + self.menubar_view.addAction(self.btn_log_view) + self.menubar_view.addSeparator() + self.menubar_view.addAction(self.btn_snapshots) + + self.menubar_restore = self.menubar.addMenu(_('Restore')) + self.menubar_restore.addAction(self.btn_restore) + self.menubar_restore.addAction(self.btn_restore_to) + self.menubar_restore.addSeparator() + self.menubar_restore.addAction(self.menu_restore_parent) + self.menubar_restore.addAction(self.menu_restore_parent_to) + self.menubar_restore.addSeparator() + self.menubar_restore.addAction(self.btn_restore_delete) + self.menubar_restore.addAction(self.menu_restore_parent_delete) + + self.menubar_help = self.menubar.addMenu(_('Help')) + self.menubar_help.addAction(self.btn_help) + self.menubar_help.addAction(self.btn_help_config) + self.menubar_help.addSeparator() + self.menubar_help.addAction(self.btn_website) + self.menubar_help.addAction(self.btn_changelog) + self.menubar_help.addAction(self.btn_faq) + self.menubar_help.addAction(self.btn_question) + self.menubar_help.addAction(self.btn_bug) + self.menubar_help.addSeparator() + self.menubar_help.addAction(self.btn_about) + + #shortcuts without buttons + self.shortcut_previous_folder = QShortcut(QKeySequence(Qt.ALT + Qt.Key_Left), self) + QObject.connect(self.shortcut_previous_folder, SIGNAL('activated()'), self.on_btn_folder_history_previous_clicked) + self.shortcut_next_folder = QShortcut(QKeySequence(Qt.ALT + Qt.Key_Right), self) + QObject.connect(self.shortcut_next_folder, SIGNAL('activated()'), self.on_btn_folder_history_next_clicked) + self.shortcut_open_folder = QShortcut(QKeySequence(Qt.ALT + Qt.Key_Down), self) + QObject.connect(self.shortcut_open_folder, SIGNAL('activated()'), self.on_btn_open_current_item) + + #mouse button navigation + self.mouseButtonEventFilter = ExtraMouseButtonEventFilter(self) + self.setMouseButtonNavigation() + + #second spliter + self.second_splitter = QSplitter( self ) + self.second_splitter.setOrientation( Qt.Horizontal ) + self.second_splitter.setContentsMargins(0, 0, 0, 0) + right_layout.addWidget( self.second_splitter ) + + #places + self.list_places = QTreeWidget( self ) + self.list_places.setRootIsDecorated( False ) + self.list_places.setEditTriggers( QAbstractItemView.NoEditTriggers ) + self.list_places.setHeaderLabel( _('Shortcuts') ) + self.list_places.header().setClickable(True) + self.list_places.header().setSortIndicatorShown(True) + self.list_places.header().setSectionHidden(1, True) + self.list_places.header().setSortIndicator(int(self.config.get_profile_int_value('qt4.places.SortColumn', 1)), + int(self.config.get_profile_int_value('qt4.places.SortOrder', Qt.AscendingOrder))) + self.list_places_sort_loop = {self.config.get_current_profile(): False} + self.second_splitter.addWidget( self.list_places ) + QObject.connect(self.list_places.header(), + SIGNAL('sortIndicatorChanged(int,Qt::SortOrder)'), + self.sort_places) + + #files view stacked layout + widget = QWidget( self ) + self.files_view_layout = QStackedLayout( widget ) + self.second_splitter.addWidget( widget ) + + #folder don't exist label + self.lbl_folder_dont_exists = QLabel( _('This folder doesn\'t exist\nin the current selected snapshot!'), self ) + qt4tools.set_font_bold( self.lbl_folder_dont_exists ) + self.lbl_folder_dont_exists.setFrameShadow( QFrame.Sunken ) + self.lbl_folder_dont_exists.setFrameShape( QFrame.Panel ) + self.lbl_folder_dont_exists.setAlignment( Qt.AlignHCenter | Qt.AlignVCenter ) + self.files_view_layout.addWidget( self.lbl_folder_dont_exists ) + + #list files view + self.list_files_view = QTreeView( self ) + self.files_view_layout.addWidget( self.list_files_view ) + self.list_files_view.setRootIsDecorated( False ) + self.list_files_view.setAlternatingRowColors( True ) + self.list_files_view.setEditTriggers( QAbstractItemView.NoEditTriggers ) + self.list_files_view.setItemsExpandable( False ) + self.list_files_view.setDragEnabled( False ) + self.list_files_view.setSelectionMode(QAbstractItemView.ExtendedSelection) + + self.list_files_view_header = self.list_files_view.header() + self.list_files_view_header.setClickable( True ) + self.list_files_view_header.setMovable( False ) + self.list_files_view_header.setSortIndicatorShown( True ) + + self.list_files_view_model = QFileSystemModel(self) + self.list_files_view_model.setRootPath(QDir().rootPath()) + self.list_files_view_model.setReadOnly(True) + self.list_files_view_model.setFilter(QDir.AllDirs | QDir.AllEntries + | QDir.NoDotAndDotDot | QDir.Hidden) + + self.list_files_view_proxy_model = QSortFilterProxyModel(self) + self.list_files_view_proxy_model.setDynamicSortFilter(True) + self.list_files_view_proxy_model.setSourceModel(self.list_files_view_model) + + self.list_files_view.setModel(self.list_files_view_proxy_model) + + self.list_files_view_delegate = QStyledItemDelegate( self ) + self.list_files_view.setItemDelegate( self.list_files_view_delegate ) + + sort_column = self.config.get_int_value( 'qt4.main_window.files_view.sort.column', 0 ) + sort_order = self.config.get_bool_value( 'qt4.main_window.files_view.sort.ascending', True ) + if sort_order: + sort_order = Qt.AscendingOrder + else: + sort_order = Qt.DescendingOrder + + self.list_files_view_header.setSortIndicator( sort_column, sort_order ) + self.list_files_view_model.sort(self.list_files_view_header.sortIndicatorSection(), + self.list_files_view_header.sortIndicatorOrder() ) + QObject.connect(self.list_files_view_header, + SIGNAL('sortIndicatorChanged(int,Qt::SortOrder)'), + self.list_files_view_model.sort ) + + self.files_view_layout.setCurrentWidget( self.list_files_view ) + + # + self.setCentralWidget( self.main_splitter ) + + #context menu + self.list_files_view.setContextMenuPolicy(Qt.CustomContextMenu) + QObject.connect(self.list_files_view, SIGNAL('customContextMenuRequested(const QPoint&)'), self.on_context_menu) + self.contextMenu = QMenu(self) + self.contextMenu.addAction(self.btn_restore) + self.contextMenu.addAction(self.btn_restore_to) + self.contextMenu.addAction(self.btn_snapshots) + self.contextMenu.addSeparator() + self.btn_add_include = self.contextMenu.addAction(icon.ADD, _('Add to Include')) + self.btn_add_exclude = self.contextMenu.addAction(icon.ADD, _('Add to Exclude')) + QObject.connect(self.btn_add_include, SIGNAL('triggered()'), self.on_btn_add_include) + QObject.connect(self.btn_add_exclude, SIGNAL('triggered()'), self.on_btn_add_exclude) + self.contextMenu.addSeparator() + self.contextMenu.addAction(self.btn_show_hidden_files) + + #ProgressBar + self.progressBar = QProgressBar(self) + self.progressBar.setMinimum(0) + self.progressBar.setMaximum(100) + self.progressBar.setValue(0) + self.progressBar.setStyleSheet("text-align: left;") + self.progressBar.setVisible(False) + self.status = QLabel(self) + + self.statusBar().addWidget(self.progressBar, 100) + self.statusBar().addWidget(self.status, 100) + self.status.setText( _('Done') ) + + self.snapshots_list = [] + self.snapshot_id = '/' + self.path = self.config.get_profile_str_value('qt4.last_path', + self.config.get_str_value('qt4.last_path', '/' ) ) + self.edit_current_path.setText( self.path ) + self.path_history = tools.PathHistory(self.path) + + #restore size and position + x = self.config.get_int_value( 'qt4.main_window.x', -1 ) + y = self.config.get_int_value( 'qt4.main_window.y', -1 ) + if x >= 0 and y >= 0: + self.move( x, y ) + + w = self.config.get_int_value( 'qt4.main_window.width', 800 ) + h = self.config.get_int_value( 'qt4.main_window.height', 500 ) + self.resize( w, h ) + + main_splitter_left_w = self.config.get_int_value( 'qt4.main_window.main_splitter_left_w', 150 ) + main_splitter_right_w = self.config.get_int_value( 'qt4.main_window.main_splitter_right_w', 450 ) + sizes = [ main_splitter_left_w, main_splitter_right_w ] + self.main_splitter.setSizes( sizes ) + + second_splitter_left_w = self.config.get_int_value( 'qt4.main_window.second_splitter_left_w', 150 ) + second_splitter_right_w = self.config.get_int_value( 'qt4.main_window.second_splitter_right_w', 300 ) + sizes = [ second_splitter_left_w, second_splitter_right_w ] + self.second_splitter.setSizes( sizes ) + + files_view_name_width = self.config.get_int_value( 'qt4.main_window.files_view.name_width', -1 ) + files_view_size_width = self.config.get_int_value( 'qt4.main_window.files_view.size_width', -1 ) + files_view_date_width = self.config.get_int_value( 'qt4.main_window.files_view.date_width', -1 ) + if files_view_name_width > 0 and files_view_size_width > 0 and files_view_date_width > 0: + self.list_files_view_header.resizeSection( 0, files_view_name_width ) + self.list_files_view_header.resizeSection( 1, files_view_size_width ) + self.list_files_view_header.resizeSection( 2, files_view_date_width ) + + #force settingdialog if it is not configured + if not config.is_configured(): + message = _('%(appName)s is not configured. Would you like ' + 'to restore a previous configuration?' % {'appName': self.config.APP_NAME}) + if QMessageBox.Yes == messagebox.warningYesNo(self, message): + settingsdialog.RestoreConfigDialog(self).exec_() + settingsdialog.SettingsDialog( self ).exec_() + + if not config.is_configured(): + return + + if self.snapshots.has_old_snapshots(): + settingsdialog.SettingsDialog( self ).update_snapshots_location() + + profile_id = config.get_current_profile() + + #mount + try: + mnt = mount.Mount(cfg = self.config, profile_id = profile_id, parent = self) + hash_id = mnt.mount() + except MountException as ex: + messagebox.critical( self, str(ex) ) + else: + self.config.set_current_hash_id(hash_id) + + if not cfg.can_backup( profile_id ): + messagebox.critical( self, _('Can\'t find snapshots folder.\nIf it is on a removable drive please plug it and then press OK') ) + + QObject.connect(self.list_files_view_proxy_model, SIGNAL('layoutChanged()'), self.on_dir_lister_completed) + + #populate lists + self.update_profiles() + QObject.connect( self.combo_profiles, SIGNAL('currentIndexChanged(int)'), self.on_profile_changed ) + + self.list_files_view.setFocus() + + self.update_snapshot_actions() + + #signals + QObject.connect( self.list_time_line, SIGNAL('itemSelectionChanged()'), self.on_list_time_line_current_item_changed ) + QObject.connect( self.list_places, SIGNAL('currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)'), self.on_list_places_current_item_changed ) + QObject.connect( self.list_files_view, SIGNAL('activated(const QModelIndex&)'), self.on_list_files_view_item_activated ) + + self.force_wait_lock_counter = 0 + + self.timer_raise_application = QTimer( self ) + self.timer_raise_application.setInterval( 1000 ) + self.timer_raise_application.setSingleShot( False ) + QObject.connect( self.timer_raise_application, SIGNAL('timeout()'), self.raise_application ) + self.timer_raise_application.start() + + self.timer_update_take_snapshot = QTimer( self ) + self.timer_update_take_snapshot.setInterval( 1000 ) + self.timer_update_take_snapshot.setSingleShot( False ) + QObject.connect( self.timer_update_take_snapshot, SIGNAL('timeout()'), self.update_take_snapshot ) + self.timer_update_take_snapshot.start() + + def closeEvent( self, event ): + if self.shutdown.ask_before_quit(): + if QMessageBox.Yes != messagebox.warningYesNo(self, _('If you close this window Back In Time will not be able to shutdown your system when the snapshot has finished.\nDo you really want to close?') ): + return event.ignore() + + self.config.set_str_value( 'qt4.last_path', self.path ) + self.config.set_profile_str_value('qt4.last_path', self.path) + + self.config.set_profile_int_value('qt4.places.SortColumn', + self.list_places.header().sortIndicatorSection()) + self.config.set_profile_int_value('qt4.places.SortOrder', + self.list_places.header().sortIndicatorOrder()) + + self.config.set_int_value( 'qt4.main_window.x', self.x() ) + self.config.set_int_value( 'qt4.main_window.y', self.y() ) + self.config.set_int_value( 'qt4.main_window.width', self.width() ) + self.config.set_int_value( 'qt4.main_window.height', self.height() ) + + sizes = self.main_splitter.sizes() + self.config.set_int_value( 'qt4.main_window.main_splitter_left_w', sizes[0] ) + self.config.set_int_value( 'qt4.main_window.main_splitter_right_w', sizes[1] ) + + sizes = self.second_splitter.sizes() + self.config.set_int_value( 'qt4.main_window.second_splitter_left_w', sizes[0] ) + self.config.set_int_value( 'qt4.main_window.second_splitter_right_w', sizes[1] ) + + self.config.set_int_value( 'qt4.main_window.files_view.name_width', self.list_files_view_header.sectionSize( 0 ) ) + self.config.set_int_value( 'qt4.main_window.files_view.size_width', self.list_files_view_header.sectionSize( 1 ) ) + self.config.set_int_value( 'qt4.main_window.files_view.date_width', self.list_files_view_header.sectionSize( 2 ) ) + + self.config.set_bool_value( 'qt4.show_hidden_files', self.show_hidden_files ) + + self.config.set_int_value( 'qt4.main_window.files_view.sort.column', self.list_files_view_header.sortIndicatorSection() ) + self.config.set_bool_value( 'qt4.main_window.files_view.sort.ascending', self.list_files_view_header.sortIndicatorOrder() == Qt.AscendingOrder ) + + self.list_files_view_model.deleteLater() + + #umount + try: + mnt = mount.Mount(cfg = self.config, parent = self) + mnt.umount(self.config.current_hash_id) + except MountException as ex: + messagebox.critical( self, str(ex) ) + + self.config.save() + + event.accept() + + def update_profiles( self ): + if self.disable_profile_changed: + return + + self.disable_profile_changed = True + + self.combo_profiles.clear() + + index = 0 + profiles = self.config.get_profiles_sorted_by_name() + + for profile_id in profiles: + if profile_id == self.config.get_current_profile(): + index = self.combo_profiles.count() + self.combo_profiles.addItem( self.config.get_profile_name( profile_id ), profile_id ) + + self.combo_profiles.setCurrentIndex( index ) + self.combo_profiles_action.setVisible( len( profiles ) > 1 ) + + self.update_profile() + + self.disable_profile_changed = False + + def update_profile( self ): + self.update_time_line() + self.update_places() + self.update_files_view( 0 ) + + def on_profile_changed( self, index ): + if self.disable_profile_changed: + return + + profile_id = str( self.combo_profiles.itemData( index ) ) + if not profile_id: + return + old_profile_id = self.config.get_current_profile() + if profile_id != old_profile_id: + self.config.PLUGIN_MANAGER.do_unmount() + self.remount(profile_id, old_profile_id) + self.config.set_current_profile( profile_id ) + self.config.PLUGIN_MANAGER.load_plugins(cfg = self.config, force = True) + self.config.PLUGIN_MANAGER.do_mount() + + self.config.set_profile_int_value('qt4.places.SortColumn', + self.list_places.header().sortIndicatorSection(), + old_profile_id) + self.config.set_profile_int_value('qt4.places.SortOrder', + self.list_places.header().sortIndicatorOrder(), + old_profile_id) + self.list_places_sort_loop[old_profile_id] = False + self.list_places.header().setSortIndicator(int(self.config.get_profile_int_value('qt4.places.SortColumn', 1, profile_id)), + int(self.config.get_profile_int_value('qt4.places.SortOrder', Qt.AscendingOrder, profile_id))) + + self.config.set_profile_str_value('qt4.last_path', self.path, old_profile_id) + path = self.config.get_profile_str_value('qt4.last_path', self.path, profile_id) + if not path == self.path: + self.path = path + self.path_history.reset(self.path) + self.edit_current_path.setText( self.path ) + + self.update_profile() + + def remount( self, new_profile_id, old_profile_id): + try: + mnt = mount.Mount(cfg = self.config, profile_id = old_profile_id, parent = self) + hash_id = mnt.remount(new_profile_id) + except MountException as ex: + messagebox.critical( self, str(ex) ) + else: + self.config.set_current_hash_id(hash_id) + + def get_default_startup_folder_and_file( self ): + last_path = self.config.get_str_value( 'gnome.last_path', '' ) + if last_path and os.path.isdir(last_path): + return ( last_path, None, False ) + return ( '/', None, False ) + + def get_cmd_startup_folder_and_file( self, cmd ): + if cmd is None: + cmd = self.app_instance.raise_cmd + + if not cmd: + return None + + path = None + show_snapshots = False + + for arg in cmd.split( '\n' ): + if not arg: + continue + if arg == '-s' or arg == '--snapshots': + show_snapshots = True + continue + if arg.startswith('-'): + continue + if path is None: + path = arg + + if path is None: + return None + + if not path: + return None + + path = os.path.expanduser( path ) + path = os.path.abspath( path ) + + if os.path.isdir( path ): + if not path: + show_snapshots = False + + if show_snapshots: + return ( os.path.dirname( path ), path, True ) + else: + return ( path, '', False ) + + if os.path.isfile( path ): + return ( os.path.dirname( path ), path, show_snapshots ) + + return None + + def get_startup_folder_and_file( self, cmd = None ): + startup_folder = self.get_cmd_startup_folder_and_file( cmd ) + if startup_folder is None: + return self.get_default_startup_folder_and_file() + return startup_folder + + def raise_application( self ): + raise_cmd = self.app_instance.raise_command() + if raise_cmd is None: + return + + logger.debug("Raise cmd: %s" %raise_cmd, self) + self.qapp.alert( self ) + + def update_take_snapshot( self, force_wait_lock = False ): + if force_wait_lock: + self.force_wait_lock_counter = 10 + + busy = self.snapshots.is_busy() + if busy: + self.force_wait_lock_counter = 0 + + if self.force_wait_lock_counter > 0: + self.force_wait_lock_counter = self.force_wait_lock_counter - 1 + + fake_busy = busy or self.force_wait_lock_counter > 0 + + message = _('Working:') + take_snapshot_message = self.snapshots.get_take_snapshot_message() + if fake_busy: + if take_snapshot_message is None: + take_snapshot_message = ( 0, '...' ) + elif take_snapshot_message is None: + take_snapshot_message = self.last_take_snapshot_message + if take_snapshot_message is None: + take_snapshot_message = ( 0, _('Done') ) + + force_update = False + + if fake_busy: + if self.btn_take_snapshot.isEnabled(): + self.btn_take_snapshot.setEnabled( False ) + elif not self.btn_take_snapshot.isEnabled(): + force_update = True + + self.btn_take_snapshot.setEnabled( True ) + + snapshots_list = self.snapshots.get_snapshots_and_other_list() + + if snapshots_list != self.snapshots_list: + self.snapshots_list = snapshots_list + self.update_time_line( False ) + take_snapshot_message = ( 0, _('Done') ) + else: + if take_snapshot_message[0] == 0: + take_snapshot_message = ( 0, _('Done, no backup needed') ) + + self.shutdown.shutdown() + + if take_snapshot_message != self.last_take_snapshot_message or force_update: + self.last_take_snapshot_message = take_snapshot_message + + if fake_busy: + message = _('Working:') + ' ' + self.last_take_snapshot_message[1].replace( '\n', ' ' ) + elif take_snapshot_message[0] == 0: + message = self.last_take_snapshot_message[1].replace( '\n', ' ' ) + else: + message = _('Error:') + ' ' + self.last_take_snapshot_message[1].replace( '\n', ' ' ) + + self.status.setText(message) + + pg = progress.ProgressFile(self.config) + if pg.isFileReadable(): + self.progressBar.setVisible(True) + self.status.setVisible(False) + pg.load() + self.progressBar.setValue(pg.get_int_value('percent') ) + self.progressBar.setFormat(' | '.join(self.getProgressBarFormat(pg, self.status.text())) ) + else: + self.progressBar.setVisible(False) + self.status.setVisible(True) + + #if not fake_busy: + # self.last_take_snapshot_message = None + + def getProgressBarFormat(self, pg, message): + d = (('sent', _('Sent:')), \ + ('speed', _('Speed:')),\ + ('eta', _('ETA:')) ) + yield ' %p%' + for key, txt in d: + value = pg.get_str_value(key, '') + if not value: + continue + yield txt + ' ' + value + yield message + + def on_list_places_current_item_changed( self, item, previous ): + if item is None: + return + + path = str( item.data( 0, Qt.UserRole ) ) + if not path: + return + + if path == self.path: + return + + self.path = path + self.path_history.append(path) + self.update_files_view( 3 ) + + def add_place( self, name, path, icon ): + item = QTreeWidgetItem() + + item.setText( 0, name ) + + if icon: + item.setIcon( 0, QIcon.fromTheme( icon ) ) + + item.setData( 0, Qt.UserRole, path ) + + if not path: + item.setFont( 0, qt4tools.get_font_bold( item.font( 0 ) ) ) + item.setFlags( Qt.ItemIsEnabled ) + item.setBackgroundColor( 0, QColor( 196, 196, 196 ) ) + item.setTextColor( 0, QColor( 60, 60, 60 )) + + self.list_places.addTopLevelItem( item ) + + if path == self.path: + self.list_places.setCurrentItem( item ) + + return item + + def update_places( self ): + self.list_places.clear() + self.add_place( _('Global'), '', '' ) + self.add_place( _('Root'), '/', 'computer' ) + self.add_place( _('Home'), os.path.expanduser( '~' ), 'user-home' ) + + #add backup folders + include_folders = self.config.get_include() + if include_folders: + folders = [] + for item in include_folders: + if item[1] == 0: + folders.append( item[0] ) + + if folders: + sortColumn = self.list_places.header().sortIndicatorSection() + sortOrder = self.list_places.header().sortIndicatorOrder() + if not sortColumn: + folders.sort(key = lambda v: (v.upper(), v[0].islower()), reverse = sortOrder) + self.add_place( _('Backup folders'), '', '' ) + for folder in folders: + self.add_place( folder, folder, 'document-save' ) + + def sort_places(self, newColumn, newOrder, force = False): + profile_id = self.config.get_current_profile() + if newColumn == 0 and newOrder == Qt.AscendingOrder: + if profile_id in self.list_places_sort_loop and self.list_places_sort_loop[profile_id]: + newColumn, newOrder = 1, Qt.AscendingOrder + self.list_places.header().setSortIndicator(newColumn, newOrder) + self.list_places_sort_loop[profile_id] = False + else: + self.list_places_sort_loop[profile_id] = True + self.update_places() + + def update_snapshot_actions( self, item = None ): + enabled = False + + if item is None: + item = self.list_time_line.currentItem() + if not item is None: + if len(item.snapshotID()) > 1: + enabled = True + + #update remove/name snapshot buttons + self.btn_name_snapshot.setEnabled( enabled ) + self.btn_remove_snapshot.setEnabled( enabled ) + self.btn_snapshot_log_view.setEnabled( enabled ) + + def on_list_time_line_current_item_changed(self): + item = self.list_time_line.currentItem() + self.update_snapshot_actions(item) + + if item is None: + return + + snapshot_id = item.snapshotID() + if not snapshot_id: + return + + if snapshot_id == self.snapshot_id: + return + + self.snapshot_id = snapshot_id + self.update_files_view( 2 ) + + def time_line_update_snapshot_name( self, item ): + snapshot_id = item.snapshotID() + if snapshot_id: + item.setText( 0, self.snapshots.get_snapshot_display_name( snapshot_id ) ) + + def update_time_line( self, get_snapshots_list = True ): + self.list_time_line.clear() + self.list_time_line.addRoot('/', + self.snapshots.get_snapshot_display_name('/'), + _('This is NOT a snapshot but a live view of your local files')) + if get_snapshots_list: + self.snapshots_list = [] + thread = FillTimeLineThread(self) + thread.addSnapshot.connect(self.list_time_line.addSnapshot) + thread.finished.connect(self.list_time_line.checkSelection) + thread.start() + else: + for sid in self.snapshots_list: + item = self.list_time_line.addSnapshot(sid, + self.snapshots.get_snapshot_display_name(sid), + _('Last check %s') %self.snapshots.get_snapshot_last_check(sid)) + self.list_time_line.checkSelection() + + def time_line_set_current_snapshot(self, new_snapshot_id): + for item in self.list_time_line.iterSnapshotItems(): + if item.snapshotID() == new_snapshot_id: + self.snapshot_id = new_snapshot_id + self.list_time_line.setCurrentItem( item ) + self.update_files_view( 2 ) + break + + def on_btn_take_snapshot_clicked( self ): + backintime.take_snapshot_now_async( self.config ) + self.update_take_snapshot( True ) + + def on_btn_update_snapshots_clicked( self ): + self.update_time_line() + self.update_files_view( 2 ) + + def on_btn_name_snapshot_clicked( self ): + item = self.list_time_line.currentItem() + if item is None: + return + + snapshot_id = item.snapshotID() + if len( snapshot_id ) <= 1: + return + + name = self.snapshots.get_snapshot_name( snapshot_id ) + + ret_val = QInputDialog.getText(self, _('Snapshot Name'), str() ) + if not ret_val[1]: + return + + new_name = ret_val[0].strip() + if name == new_name: + return + + self.snapshots.set_snapshot_name( snapshot_id, new_name ) + self.time_line_update_snapshot_name( item ) + + def on_btn_log_view_clicked ( self ): + self.removeMouseButtonNavigation() + logviewdialog.LogViewDialog( self ).exec_() + self.setMouseButtonNavigation() + + def on_btn_snapshot_log_view_clicked ( self ): + item = self.list_time_line.currentItem() + if item is None: + return + + snapshot_id = item.snapshotID() + if len( snapshot_id ) <= 1: + return + + self.removeMouseButtonNavigation() + dlg = logviewdialog.LogViewDialog( self, snapshot_id ) + dlg.exec_() + if snapshot_id != dlg.snapshot_id: + self.time_line_set_current_snapshot(dlg.snapshot_id) + self.setMouseButtonNavigation() + + def on_btn_remove_snapshot_clicked ( self ): + items = [item for item in self.list_time_line.selectedItems() if len(item.snapshotID()) > 1] + if not items: + return + + if QMessageBox.Yes != messagebox.warningYesNo( self, \ + _('Are you sure you want to remove the snapshot:\n%s') \ + %'\n'.join([self.snapshots.get_snapshot_display_name(item.snapshotID()) \ + for item in items]) ): + return + + for item in items: + item.setDisabled(True) + thread = RemoveSnapshotThread(self, items) + thread.refreshSnapshotList.connect(self.update_time_line) + thread.start() + + def on_btn_settings_clicked( self ): + self.removeMouseButtonNavigation() + if QDialog.Accepted == settingsdialog.SettingsDialog( self ).exec_(): + profile_id = self.config.get_current_profile() + self.remount(profile_id, profile_id) + self.update_profiles() + self.setMouseButtonNavigation() + + def on_btn_shutdown_toggled(self, checked): + self.shutdown.activate_shutdown = checked + + def on_context_menu(self, point): + self.contextMenu.exec_(self.list_files_view.mapToGlobal(point) ) + + def on_about( self ): + self.removeMouseButtonNavigation() + dlg = About(self) + dlg.exec_() + self.setMouseButtonNavigation() + + def on_help( self ): + self.open_man_page('backintime') + + def on_help_config(self): + self.open_man_page('backintime-config') + + def on_website( self ): + self.open_url('https://github.com/bit-team/backintime') + + def on_changelog( self ): + def a_href(m): + if m.group(0).count('@'): + return '%(url)s' % {'url': m.group(0)} + else: + return '%(url)s' % {'url': m.group(0)} + + def a_href_lp(m): + return '%(txt)s' % {'txt': m.group(0), 'id': m.group(1)} + + msg = self.config.get_changelog() + msg = re.sub(r'https?://[^) \n]*', a_href, msg) + msg = re.sub(r'(?:LP:|bug) ?#?(\d+)', a_href_lp, msg) + msg = re.sub(r'\n', '
', msg) + messagebox.show_info(self, _('Changelog'), msg) + + def on_faq( self ): + self.open_url('https://github.com/bit-team/backintime/wiki/FAQ') + + def on_ask_a_question( self ): + self.open_url('https://github.com/bit-team/backintime/issues') + + def on_report_a_bug( self ): + self.open_url('https://github.com/bit-team/backintime/issues/new') + + def open_url( self, url ): + return QDesktopServices.openUrl(QUrl(url)) + + def open_man_page(self, man_page): + if not tools.check_command('man'): + messagebox.critical(self, "Couldn't find 'man' to show the help page. Please install 'man'") + return + env = os.environ + env['MANWIDTH'] = '80' + proc = subprocess.Popen(['man', man_page], + stdout = subprocess.PIPE, + universal_newlines = True, + env = env) + out, err = proc.communicate() + messagebox.show_info(self, 'Manual Page {}'.format(man_page), out) + + def on_btn_show_hidden_files_toggled( self, checked ): + self.show_hidden_files = checked + self.update_files_view( 1 ) + + def backup_on_restore(self): + cb = QCheckBox(_("Backup local files before overwriting or\nremoving with trailing '%(suffix)s'.") + % {'suffix': self.snapshots.backup_suffix()} ) + cb.setChecked(self.config.is_backup_on_restore_enabled()) + return {'widget': cb, 'retFunc': cb.isChecked, 'id': 'backup'} + + def confirm_delete_on_restore(self, paths, warn_root = False): + msg = _('Are you sure you want to remove all newer files in your ' + 'original folder?') + if warn_root: + msg += '\n\n' + msg += _('WARNING: deleting files in filesystem root could break your whole system!!!') + msg += '\n\n' + msg += _('Files to be restored:') + msg += '\n' + msg += '\n'.join(paths) + + confirm, opt = messagebox.warningYesNoOptions(self, msg, (self.backup_on_restore(), ) ) + ret = {'backup': False, 'no_backup': False} + if self.config.is_backup_on_restore_enabled(): + if not opt['backup']: + ret['no_backup'] = True + else: + if opt['backup']: + ret['backup'] = True + return (confirm, ret) + + def confirm_restore(self, paths): + msg = _('Do you really want to restore this files(s):') + msg += '\n' + msg += '\n'.join(paths) + confirm, opt = messagebox.warningYesNoOptions(self, msg, (self.backup_on_restore(), ) ) + ret = {'backup': False, 'no_backup': False} + if self.config.is_backup_on_restore_enabled(): + if not opt['backup']: + ret['no_backup'] = True + else: + if opt['backup']: + ret['backup'] = True + return (confirm, ret) + + def restore_this( self, delete = False ): + if len( self.snapshot_id ) <= 1: + return + + selected_file = [f for f, idx in self.multi_file_selected()] + if not selected_file: + return + rel_path = [os.path.join(self.path, x) for x in selected_file] + + self.removeMouseButtonNavigation() + if delete: + confirm, kwargs = self.confirm_delete_on_restore(rel_path, any([i == '/' for i in selected_file]) ) + else: + confirm, kwargs = self.confirm_restore(rel_path) + self.setMouseButtonNavigation() + if not confirm: + return + + restoredialog.restore(self, self.snapshot_id, rel_path, delete = delete, **kwargs) + + def restore_this_to( self ): + if len( self.snapshot_id ) <= 1: + return + + selected_file = [f for f, idx in self.multi_file_selected()] + if not selected_file: + return + rel_path = [os.path.join(self.path, x) for x in selected_file] + + confirm, kwargs = self.confirm_restore(rel_path) + if not confirm: + return + + restoredialog.restore(self, self.snapshot_id, rel_path, None, **kwargs) + + def restore_parent( self, delete = False ): + if len( self.snapshot_id ) <= 1: + return + + self.removeMouseButtonNavigation() + if delete: + confirm, kwargs = self.confirm_delete_on_restore((self.path,), self.path == '/') + else: + confirm, kwargs = self.confirm_restore((self.path,)) + self.setMouseButtonNavigation() + if not confirm: + return + + restoredialog.restore( self, self.snapshot_id, self.path, delete = delete, **kwargs) + + def restore_parent_to( self ): + if len( self.snapshot_id ) <= 1: + return + + if not self.confirm_restore((self.path,)): + return + + restoredialog.restore( self, self.snapshot_id, self.path, None ) + + def on_btn_snapshots_clicked( self ): + selected_file, idx = self.file_selected() + if not selected_file: + return + + rel_path = os.path.join( self.path, selected_file ) + + self.removeMouseButtonNavigation() + dlg = snapshotsdialog.SnapshotsDialog( self, self.snapshot_id, rel_path) + if QDialog.Accepted == dlg.exec_(): + if dlg.snapshot_id != self.snapshot_id: + self.time_line_set_current_snapshot(dlg.snapshot_id) + self.setMouseButtonNavigation() + + def on_btn_folder_up_clicked( self ): + if len( self.path ) <= 1: + return + + path = os.path.dirname( self.path ) + if self.path == path: + return + + self.path = path + self.path_history.append(self.path) + self.update_files_view( 0 ) + + def on_btn_folder_history_previous_clicked(self): + path = self.path_history.previous() + full_path = self.snapshots.get_snapshot_path_to(self.snapshot_id, path) + if os.path.isdir(full_path): + if self.snapshots.can_open_path(self.snapshot_id, full_path): + self.path = path + self.update_files_view(0) + + def on_btn_folder_history_next_clicked(self): + path = self.path_history.next() + full_path = self.snapshots.get_snapshot_path_to(self.snapshot_id, path) + if os.path.isdir(full_path): + if self.snapshots.can_open_path(self.snapshot_id, full_path): + self.path = path + self.update_files_view(0) + + def on_btn_open_current_item(self): + path, idx = self.file_selected() + if not path: + return + self.open_path(path) + + def on_btn_add_include(self): + selected_file = [f for f, idx in self.multi_file_selected()] + if not selected_file: + return + rel_path = [os.path.join(self.path, x) for x in selected_file] + include = self.config.get_include() + update_places = False + for item in rel_path: + if os.path.isdir(item): + include.append((item, 0)) + update_places = True + else: + include.append((item, 1)) + self.config.set_include(include) + if update_places: + self.update_places() + + def on_btn_add_exclude(self): + selected_file = [f for f, idx in self.multi_file_selected()] + if not selected_file: + return + rel_path = [os.path.join(self.path, x) for x in selected_file] + exclude = self.config.get_exclude() + exclude.extend(rel_path) + self.config.set_exclude(exclude) + + def on_list_files_view_item_activated( self, model_index ): + if self.qapp.keyboardModifiers() and Qt.ControlModifier: + return + + if model_index is None: + return + + rel_path = str( self.list_files_view_proxy_model.data( model_index ) ) + if not rel_path: + return + self.open_path(rel_path) + + def open_path(self, rel_path): + rel_path = os.path.join( self.path, rel_path ) + full_path = self.snapshots.get_snapshot_path_to( self.snapshot_id, rel_path ) + + if os.path.exists( full_path ): + if self.snapshots.can_open_path( self.snapshot_id, full_path ): + if os.path.isdir( full_path ): + self.path = rel_path + self.path_history.append(rel_path) + self.update_files_view( 0 ) + else: + self.run = QDesktopServices.openUrl(QUrl(full_path )) + + def files_view_get_name( self, item ): + return item.text( 0 ) + + def files_view_get_type( self, item ): + return int( item.text( 4 ) ) + + @pyqtSlot(int) + def update_files_view( self, changed_from, selected_file = None, show_snapshots = False ): #0 - files view change directory, 1 - files view, 2 - time_line, 3 - places + if 0 == changed_from or 3 == changed_from: + selected_file = '' + + if 0 == changed_from: + #update places + self.list_places.setCurrentItem( None ) + for place_index in range( self.list_places.topLevelItemCount() ): + item = self.list_places.topLevelItem( place_index ) + if self.path == str( item.data( 0, Qt.UserRole ) ): + self.list_places.setCurrentItem( item ) + break + + tooltip = '' + text = '' + if len( self.snapshot_id ) > 1: + name = self.snapshots.get_snapshot_display_id( self.snapshot_id ) + text = _('Snapshot: %s') % name + tooltip = _('View the snapshot made at %s') % name + else: + tooltip = _('View the current disk content') + text = _('Now') + + self.right_widget.setTitle( _( text ) ) + self.right_widget.setToolTip( _( tooltip ) ) + + #try to keep old selected file + if selected_file is None: + selected_file, idx = self.file_selected() + + self.selected_file = selected_file + + #update files view + full_path = self.snapshots.get_snapshot_path_to( self.snapshot_id, self.path ) + + if os.path.isdir( full_path ): + if self.show_hidden_files: + self.list_files_view_proxy_model.setFilterRegExp(r'') + else: + self.list_files_view_proxy_model.setFilterRegExp(r'^[^\.]') + + model_index = self.list_files_view_model.index(full_path) + proxy_model_index = self.list_files_view_proxy_model.mapFromSource(model_index) + self.list_files_view.setRootIndex(proxy_model_index) + + self.files_view_toolbar.setEnabled( False ) + self.files_view_layout.setCurrentWidget( self.list_files_view ) + #todo: find a signal for this + self.on_dir_lister_completed() + else: + self.btn_restore_menu.setEnabled( False ) + self.menubar_restore.setEnabled(False) + self.btn_restore.setEnabled(False) + self.btn_restore_to.setEnabled(False) + self.btn_snapshots.setEnabled( False ) + self.files_view_layout.setCurrentWidget( self.lbl_folder_dont_exists ) + + #show current path + self.edit_current_path.setText( self.path ) + self.menu_restore_parent.setText( _("Restore '%s'") % self.path ) + self.menu_restore_parent_to.setText( _("Restore '%s' to ...") % self.path ) + self.menu_restore_parent_delete.setText( _("Restore '%s' and delete new files") % self.path ) + + #update folder_up button state + self.btn_folder_up.setEnabled( len( self.path ) > 1 ) + + def on_dir_lister_completed( self ): + has_files = (self.list_files_view_proxy_model.rowCount(self.list_files_view.rootIndex() ) > 0 ) + + #update restore button state + enable = len(self.snapshot_id) > 1 and has_files + self.btn_restore_menu.setEnabled(enable) + self.menubar_restore.setEnabled(enable) + self.btn_restore.setEnabled(enable) + self.btn_restore_to.setEnabled(enable) + + #update snapshots button state + self.btn_snapshots.setEnabled( has_files ) + + #enable files toolbar + self.files_view_toolbar.setEnabled( True ) + + #select selected_file + found = False + + if self.selected_file: + index = self.list_files_view.indexAt(QPoint(0,0)) + if not index.isValid(): + return + while index.isValid(): + file_name = (str( self.list_files_view_proxy_model.data(index) )) + if file_name == self.selected_file: + self.list_files_view.setCurrentIndex(index) + found = True + break + index = self.list_files_view.indexBelow(index) + self.selected_file = '' + + if not found and has_files: + self.list_files_view.setCurrentIndex( self.list_files_view_proxy_model.index( 0, 0 ) ) + + def file_selected(self): + idx = self.list_files_view.currentIndex() + idx = self.index_first_column(idx) + selected_file = str( self.list_files_view_proxy_model.data( idx ) ) + if selected_file == '/': + #nothing is selected + return(None, None) + return(selected_file, idx) + + def multi_file_selected(self): + for idx in self.list_files_view.selectedIndexes(): + if idx.column() > 0: + continue + selected_file = str(self.list_files_view_proxy_model.data(idx)) + yield (selected_file, idx) + + def index_first_column(self, idx): + if idx.column() > 0: + idx = idx.sibling(idx.row(), 0) + return idx + + def setMouseButtonNavigation(self): + self.qapp.installEventFilter(self.mouseButtonEventFilter) + + def removeMouseButtonNavigation(self): + self.qapp.removeEventFilter(self.mouseButtonEventFilter) + +class About(QDialog): + def __init__(self, parent = None): + super(About, self).__init__(parent) + self.parent = parent + self.config = parent.config + import icon + + self.setWindowTitle(_('About') + ' ' + self.config.APP_NAME) + logo = QLabel('Icon') + logo.setPixmap(icon.BIT_LOGO.pixmap(QSize(48, 48)) ) + version = self.config.VERSION + ref, hashid = tools.get_git_ref_hash() + git_version = '' + if ref: + git_version = " git branch '{}' hash '{}'".format(ref, hashid) + name = QLabel('

' + self.config.APP_NAME + ' ' + version + '

' + git_version) + name.setAlignment(Qt.AlignLeft | Qt.AlignTop) + homepage = QLabel(self.mkurl('')) + homepage.setTextInteractionFlags(Qt.LinksAccessibleByMouse) + homepage.setOpenExternalLinks(True) + bit_copyright = QLabel(self.config.COPYRIGHT + '\n') + + vlayout = QVBoxLayout(self) + hlayout = QHBoxLayout() + hlayout.addWidget(logo) + hlayout.addWidget(name) + hlayout.addStretch() + vlayout.addLayout(hlayout) + vlayout.addWidget(homepage) + vlayout.addWidget(bit_copyright) + + button_box_left = QDialogButtonBox(self) + btn_authors = button_box_left.addButton(_('Authors'), QDialogButtonBox.ActionRole) + btn_translations = button_box_left.addButton(_('Translations'), QDialogButtonBox.ActionRole) + btn_license = button_box_left.addButton(_('License'), QDialogButtonBox.ActionRole) + + button_box_right = QDialogButtonBox(QDialogButtonBox.Ok) + + hlayout = QHBoxLayout() + hlayout.addWidget(button_box_left) + hlayout.addWidget(button_box_right) + vlayout.addLayout(hlayout) + + QObject.connect(btn_authors, SIGNAL('clicked()'), self.authors) + QObject.connect(btn_translations, SIGNAL('clicked()'), self.translations) + QObject.connect(btn_license, SIGNAL('clicked()'), self.license) + QObject.connect(button_box_right, SIGNAL('accepted()'), self.accept) + + def authors(self): + return messagebox.show_info(self, _('Authors'), self.mkurl(self.config.get_authors()) ) + + def translations(self): + return messagebox.show_info(self, _('Translations'), self.mkurl(self.config.get_translations()) ) + + def license(self): + return messagebox.show_info(self, _('License'), self.config.get_license()) + + def mkurl(self, msg): + msg = re.sub(r'<(.*?)>', self.a_href, msg) + msg = re.sub(r'\n', '
', msg) + return msg + + def a_href(self, m): + if m.group(1).count('@'): + return '%(url)s' % {'url': m.group(1)} + else: + return '%(url)s' % {'url': m.group(1)} + +class ExtraMouseButtonEventFilter(QObject): + '''globally catch mouse buttons 4 and 5 (mostly used as back and forward) + and assign it to browse in file history. + When updating to Qt5 use Qt.BackButton and Qt.ForwardButton instead. + ''' + def __init__(self, main_window): + self.main_window = main_window + super(ExtraMouseButtonEventFilter, self).__init__() + + def eventFilter(self, receiver, event): + if event.type() == QEvent.MouseButtonPress and event.button() in (Qt.XButton1, Qt.XButton2): + if event.button() == Qt.XButton1: + self.main_window.on_btn_folder_history_previous_clicked() + if event.button() == Qt.XButton2: + self.main_window.on_btn_folder_history_next_clicked() + return True + else: + return super(ExtraMouseButtonEventFilter, self).eventFilter(receiver, event) + +class RemoveSnapshotThread(QThread): + '''remove snapshots in background thread so GUI will not freeze + ''' + refreshSnapshotList = pyqtSignal() + def __init__(self, parent, items): + self.config = parent.config + self.snapshots = parent.snapshots + self.items = items + super(RemoveSnapshotThread, self).__init__(parent) + + def run(self): + last_snapshot = self.snapshots.get_snapshots_list()[0] + renew_last_snapshot = False + #inhibit suspend/hibernate during delete + self.config.inhibitCookie = tools.inhibitSuspend(toplevel_xid = self.config.xWindowId, + reason = 'deleting snapshots') + + for item in self.items: + self.snapshots.remove_snapshot(item.snapshotID()) + try: + item.setHidden(True) + except RuntimeError: + #item has been deleted + #probably because user pressed refresh + pass + if item.snapshotID() == last_snapshot: + renew_last_snapshot = True + + tools.update_cached_fs(self.config.get_snapshots_full_path()) + self.refreshSnapshotList.emit() + + #set correct last snapshot again + sids = self.snapshots.get_snapshots_list() + if renew_last_snapshot and len(sids): + self.snapshots.create_last_snapshot_symlink(sids[0]) + + #release inhibit suspend + if self.config.inhibitCookie: + self.config.inhibitCookie = tools.unInhibitSuspend(*self.config.inhibitCookie) + +class FillTimeLineThread(QThread): + '''add snapshot IDs to timeline in background + ''' + addSnapshot = pyqtSignal(str, str, str) + def __init__(self, parent): + self.parent = parent + self.snapshots = parent.snapshots + super(FillTimeLineThread, self).__init__(parent) + + def run(self): + for sid in self.snapshots.get_snapshots_and_other(): + self.addSnapshot.emit(sid, + self.snapshots.get_snapshot_display_name(sid), + _('Last check %s') %self.snapshots.get_snapshot_last_check(sid)) + self.parent.snapshots_list.append(sid) + + self.parent.snapshots_list.sort() + +def debug_trace(): + '''Set a tracepoint in the Python debugger that works with Qt''' + from pdb import set_trace + pyqtRemoveInputHook() + set_trace() + +if __name__ == '__main__': + cfg = backintime.start_app( 'backintime-qt4' ) + + raise_cmd = '' + if len( sys.argv ) > 1: + raise_cmd = '\n'.join( sys.argv[ 1 : ] ) + + app_instance = guiapplicationinstance.GUIApplicationInstance( cfg.get_app_instance_file(), raise_cmd ) + cfg.PLUGIN_MANAGER.load_plugins(cfg = cfg) + cfg.PLUGIN_MANAGER.on_app_start() + + logger.openlog() + qapp = qt4tools.create_qapplication(cfg.APP_NAME) + + main_window = MainWindow( cfg, app_instance, qapp ) + + if cfg.is_configured(): + cfg.xWindowId = main_window.winId() + main_window.show() + qapp.exec_() + + logger.closelog() + + cfg.PLUGIN_MANAGER.on_app_exit() + app_instance.exit_application() diff -Nru backintime-1.0.36/qt4/backintime-qt4 backintime-1.1.12/qt4/backintime-qt4 --- backintime-1.0.36/qt4/backintime-qt4 1970-01-01 00:00:00.000000000 +0000 +++ backintime-1.1.12/qt4/backintime-qt4 2016-01-11 18:07:58.000000000 +0000 @@ -0,0 +1,35 @@ +#!/bin/sh + +# Back In Time +# Copyright (C) 2008-2016 Oprea Dan, Bart de Koning, Richard Bailey, Germar Reitze +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +#fixing gray window error +#https://launchpad.net/bugs/1493020 +export QT_GRAPHICSSYSTEM="native" + +CUR_PATH="$(dirname $(readlink -m $0))" +if [ -f "${CUR_PATH}/app.py" ]; then + APP_PATH=$CUR_PATH +else + APP_PATH=$(readlink -m "${CUR_PATH}/../share/backintime/qt4") +fi + +#if [ "x$SSH_AUTH_SOCK" = "x" ]; then +# eval "$(ssh-agent)" +#fi + +ssh-agent python3 ${APP_PATH}/app.py "$@" diff -Nru backintime-1.0.36/qt4/backintime-qt4.desktop backintime-1.1.12/qt4/backintime-qt4.desktop --- backintime-1.0.36/qt4/backintime-qt4.desktop 1970-01-01 00:00:00.000000000 +0000 +++ backintime-1.1.12/qt4/backintime-qt4.desktop 2016-01-11 18:07:58.000000000 +0000 @@ -0,0 +1,13 @@ +[Desktop Entry] +Name=Back In Time +GenericName=Backup +Exec=backintime-qt4 +Icon=document-save +Terminal=false +X-MultipleArgs=false +Type=Application +StartupNotify=true +Categories=Qt;KDE;GNOME;System; +Comment=Simple backup system +Comment[sl]=Enostaven sistem ustvarjanja varnostnih kopij +Keywords=automatic;snapshot;restore;rsync; diff -Nru backintime-1.0.36/qt4/backintime-qt4-root.desktop backintime-1.1.12/qt4/backintime-qt4-root.desktop --- backintime-1.0.36/qt4/backintime-qt4-root.desktop 1970-01-01 00:00:00.000000000 +0000 +++ backintime-1.1.12/qt4/backintime-qt4-root.desktop 2016-01-11 18:07:58.000000000 +0000 @@ -0,0 +1,13 @@ +[Desktop Entry] +Name=Back In Time (root) +GenericName=Backup +Exec=pkexec backintime-qt4 +Icon=document-save +Terminal=false +X-MultipleArgs=false +Type=Application +StartupNotify=true +Categories=Qt;System; +Comment=Simple backup system +Comment[sl]=Enostaven sistem ustvarjanja varnostnih kopij +Keywords=automatic;snapshot;restore;rsync;root; diff -Nru backintime-1.0.36/qt4/configure backintime-1.1.12/qt4/configure --- backintime-1.0.36/qt4/configure 1970-01-01 00:00:00.000000000 +0000 +++ backintime-1.1.12/qt4/configure 2016-01-11 18:07:58.000000000 +0000 @@ -0,0 +1,245 @@ +#!/bin/sh + +#clean up +if [ -e Makefile ]; then + rm Makefile; +fi + +#tmp files +MAKEFILE="$(mktemp)" +UNINSTALL_FILES="$(mktemp)" +UNINSTALL_DIRS="$(mktemp)" + +#set default options +PYTHON="--python3" + +USR_BIN_FILES="backintime-qt4" +DBUS_SERVICE_FILES="net.launchpad.backintime.serviceHelper.service" + +usage () { +echo "Usage:" +echo "$0 [--python | --python3]" +echo "" +echo "--python" +echo "\tuse 'python' to start Python3" +echo "--python3" +echo "\tuse 'python3' to start Python3" +} + +addInstallFiles () { +file=$1 +dest=$2 +mode=$3 +if [ -z "$mode" ]; then + mode=644 +fi +for i in $(ls $file); do + addInstallFile "$i" "$dest" "$mode" +done +} + +addInstallFile () { +file=$1 +dest=$2 +mode=$3 +if [ -z "$mode" ]; then + mode=644 +fi +printf "\tinstall --mode=$mode $file \$(DEST)$dest\n" >> ${MAKEFILE} +addUninstallFile "$file" "$dest" +} + +addInstallFileRename () { +file=$1 +dest=$2 +mode=$3 +if [ -z "$mode" ]; then + mode=644 +fi +printf "\tinstall --mode=$mode $file \$(DEST)$dest\n" >> ${MAKEFILE} +addUninstallFileRename "$dest" +} + +addUninstallFile () { +file=$(basename "$1") +dest=$2 +printf "\trm -f \$(DEST)$dest/$file\n" >> ${UNINSTALL_FILES} +} + +addUninstallFileRename () { +file=$1 +printf "\trm -f \$(DEST)$file\n" >> ${UNINSTALL_FILES} +} + +addInstallDir () { +dest=$1 +printf "\tinstall -d \$(DEST)$dest\n" >> ${MAKEFILE} +addUninstallDir "$dest" +} + +addUninstallDir () { +dest=$1 +printf "\tif [ -d \$(DEST)$dest ]; then rmdir --ignore-fail-on-non-empty \$(DEST)$dest; fi\n" >> ${UNINSTALL_DIRS} +} + +addComment () { +printf "\t#install $1\n" >> ${MAKEFILE} +printf "\t#uninstall files $1\n" >> ${UNINSTALL_FILES} +printf "\t#uninstall directory $1\n" >> ${UNINSTALL_DIRS} +} + +addNewline () { +printf "\n" >> ${MAKEFILE} +printf "\n" >> ${UNINSTALL_FILES} +printf "\n" >> ${UNINSTALL_DIRS} +} + +#get commandline arguments +for arg in $*; do + case $arg in + --python | --python3) PYTHON=$arg;; + --help | -h | *) usage; exit 0;; + esac +done + +#patch python command +#use 'python' or 'python3' to start Python Version 3.x +case $PYTHON in + --python) PYVERSION="" ;; + --python3) PYVERSION="3";; +esac +sed -e "s#^python3\? #python${PYVERSION} #g" \ + -e "s#^ssh-agent python3\? #ssh-agent python${PYVERSION} #g" \ + -i $USR_BIN_FILES +sed -e "s#^Exec=/usr/bin/python3\? #Exec=/usr/bin/python${PYVERSION} #g" \ + -i $DBUS_SERVICE_FILES + +#start Makefile +printf "PREFIX=/usr\n" >> ${MAKEFILE} +printf "DEST=\$(DESTDIR)\$(PREFIX)\n\n" >> ${MAKEFILE} + +printf "all:\tbuild\n\n" >> ${MAKEFILE} + +printf "build:\tcompress\n\n" >> ${MAKEFILE} + +printf "clean:\n" >> ${MAKEFILE} +printf "\trm -f po/*.mo\n" >> ${MAKEFILE} +printf "\trm -f man/C/*.gz\n\n" >> ${MAKEFILE} + +#create install and uninstall target +printf "install:\n" >> ${MAKEFILE} +addComment "python" +addUninstallDir "/share/backintime/qt4/__pycache__" +addUninstallFile "*.pyc" "/share/backintime/qt4/__pycache__" +addInstallDir "/share/backintime/qt4" +addInstallFiles "*.py" "/share/backintime/qt4" +addNewline + +addComment "plugin" +addUninstallDir "/share/backintime/plugins/__pycache__" +addUninstallFile "*.pyc" "/share/backintime/plugins/__pycache__" +addInstallDir "/share/backintime/plugins" +addInstallFiles "plugins/*.py" "/share/backintime/plugins" +addUninstallDir "/share/backintime" +addNewline + +addComment "application" +addInstallDir "/bin" +addInstallFile "backintime-qt4" "/bin" "755" +addNewline + +addComment "dbus service" +addInstallDir "/share/dbus-1/system-services" +addInstallFiles "net.launchpad.backintime*.service" "/share/dbus-1/system-services" +addUninstallDir "/share/dbus-1" +addNewline + +addComment "dbus conf" +addInstallDir "/../etc/dbus-1/system.d" +addInstallFiles "net.launchpad.backintime*.conf" "/../etc/dbus-1/system.d" +addUninstallDir "/../etc/dbus-1" +addUninstallDir "/../etc" +addNewline + +addComment "polkit action" +addInstallDir "/share/polkit-1/actions" +addInstallFiles "net.launchpad.backintime*.policy" "/share/polkit-1/actions" +addUninstallDir "/share/polkit-1" +addNewline + +addComment "documentation" +addInstallDir "/share/doc/backintime-qt4" +addInstallFile "../debian/copyright" "/share/doc/backintime-qt4" +addInstallFile "../AUTHORS" "/share/doc/backintime-qt4" +addInstallFile "../LICENSE" "/share/doc/backintime-qt4" +addInstallFile "../README.md" "/share/doc/backintime-qt4" +addInstallFile "../TRANSLATIONS" "/share/doc/backintime-qt4" +addInstallFile "../VERSION" "/share/doc/backintime-qt4" +addInstallFile "../CHANGES" "/share/doc/backintime-qt4" +addNewline + +addComment ".desktop" +addInstallDir "/share/applications" +addInstallFiles "*.desktop" "/share/applications" +addNewline + +addComment "docbook" +addInstallDir "/share/doc/qt/HTML/en/backintime" +addInstallFiles "docbook/en/*.docbook" "/share/doc/qt/HTML/en/backintime" +addUninstallDir "/share/doc/qt/HTML/en" +addUninstallDir "/share/doc/qt/HTML" +addUninstallDir "/share/doc/qt" +addUninstallDir "/share/doc" +addNewline + +addComment "man" +addInstallDir "/share/man/man1" +addInstallFile "man/C/backintime-qt4.1.gz" "/share/man/man1" +addUninstallDir "/share/man" +addNewline + +addComment "icons" +for f in "scalable" "48x48" "32x32" "24x24" "22x22" "16x16"; do + addInstallDir "/share/icons/hicolor/${f}/actions" + addInstallFile "icons/${f}/actions/show-hidden.svg" "/share/icons/hicolor/${f}/actions" + addUninstallDir "/share/icons/hicolor/${f}" +done +addUninstallDir "/share/icons/hicolor" +addUninstallDir "/share/icons" +addUninstallDir "/share" +addNewline + +#compress +printf "compress:\n" >> ${MAKEFILE} +printf "\t#man pages\n" >> ${MAKEFILE} +printf "\tfor i in \$\$(ls -1 man/C/); do case \$\$i in *.gz|*~) continue;; *) gzip -n --best -c man/C/\$\$i > man/C/\$\${i}.gz;; esac; done\n\n" >> ${MAKEFILE} + +#uninstall +printf "uninstall: uninstall_files uninstall_dirs\n\n" >> ${MAKEFILE} +printf "uninstall_files:\n" >> ${MAKEFILE} +cat ${UNINSTALL_FILES} >> ${MAKEFILE} + +printf "uninstall_dirs:\n" >> ${MAKEFILE} +cat ${UNINSTALL_DIRS} >> ${MAKEFILE} + +#copy Makefile +mv ${MAKEFILE} Makefile +chmod 644 Makefile + +#clean up +for i in "${UNINSTALL_FILES}" "${UNINSTALL_DIRS}"; do + if [ -e "$i" ]; then + rm "$i" + fi +done + +#check python version +if [ $(python${PYVERSION} --version 2>&1 | grep -c "^Python 3") -ne 1 ]; then + printf "Wrong Python version.\n" + printf "Please make sure Python 3.x is used by adding '--python' or '--python3'.\n" + exit 1 +fi + +printf "All OK. Now run:\n" +printf " make\n" +printf " sudo make install\n" diff -Nru backintime-1.0.36/qt4/docbook/en/index.docbook backintime-1.1.12/qt4/docbook/en/index.docbook --- backintime-1.0.36/qt4/docbook/en/index.docbook 1970-01-01 00:00:00.000000000 +0000 +++ backintime-1.1.12/qt4/docbook/en/index.docbook 2016-01-11 18:07:58.000000000 +0000 @@ -0,0 +1,116 @@ + + + +&appname;"> + + + +]> + + +
+ + &app; Manual + + &app; is a simple backup tool for KDE4 desktop. + + + + 2008-2009 + Oprea Dan, Bart de Koning, Richard Bailey + + + + + + + + + + + + + + + + + + + + This manual describes version &appversion; of Back In Time. + + + Feedback + To report a bug or make a suggestion regarding the &app; application or + this manual, send an email to: + bit-team@lists.launchpad.net. + + + + + + + + + + Introduction + &app; is a simple backup tool for Linux (this is KDE4 version). The backup is done by taking snapshots of + a specified set of folders. + All you have to do is: + + configure where to save snapshots + cofigure what folders to backup + schedule automatic backup: disabled, every 5 minutes, every 10 minutes, every hour, every day, every week, every month + + &app; acts as a "user mode" backup tool. This means that you can backup/restore only folders + you have write access to (actually you can backup read-only folders, but you can't restore them). + If you want to run it as root you need to use "sudo -i backintime" (command line) or "pkexec backintime-qt4" (GUI). + A new snapshot is created only if something changed since the last snapshot (if any). + A snapshot contains all the files from the selected folders (except for exclude patterns). + In order to reduce disk space it use hard-links (if possible) between snapshots for unchanged files. + This way a file of 10MiB, unchanged for 10 snapshots, will use only 10Mb on the disk. + When you restore a file 'A', if it already exists on the file system it will be renamed to + 'A.backup.currentdate'. + This documentation is not maintained (at least for the moment), please use the man-page 'man backintime' + + + + + + + About &app; + &app; was written by Oprea Dan + (dan@le-web.org), Bart de Koning (bratdaking@gmail.com), + Richard Bailey (rmjb@mail.com). To find more information about + &app;, please visit the + Back In Time Web + page. + + To report a bug or make a suggestion regarding this application or + this manual, sent a mail to + bit-team@lists.launchpad.net. + + + This program is distributed under the terms of the GNU + General Public license version 2 as published by the Free Software + Foundation. A copy of this license can be found in the file + LICENSE included with the source code of this program. + + +
diff -Nru backintime-1.0.36/qt4/docbook/en/legal.xml backintime-1.1.12/qt4/docbook/en/legal.xml --- backintime-1.0.36/qt4/docbook/en/legal.xml 1970-01-01 00:00:00.000000000 +0000 +++ backintime-1.1.12/qt4/docbook/en/legal.xml 2016-01-11 18:07:58.000000000 +0000 @@ -0,0 +1,75 @@ + + + Permission is granted to copy, distribute and/or modify this + document under the terms of the GNU Free Documentation + License (GFDL), Version 1.1 or any later version published + by the Free Software Foundation with no Invariant Sections, + no Front-Cover Texts, and no Back-Cover Texts. You can find + a copy of the GFDL at this link or in the file COPYING-DOCS + distributed with this manual. + + This manual is part of a collection of GNOME manuals + distributed under the GFDL. If you want to distribute this + manual separately from the collection, you can do so by + adding a copy of the license to the manual, as described in + section 6 of the license. + + + + Many of the names used by companies to distinguish their + products and services are claimed as trademarks. Where those + names appear in any GNOME documentation, and the members of + the GNOME Documentation Project are made aware of those + trademarks, then the names are in capital letters or initial + capital letters. + + + + DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT ARE PROVIDED + UNDER THE TERMS OF THE GNU FREE DOCUMENTATION LICENSE + WITH THE FURTHER UNDERSTANDING THAT: + + + + DOCUMENT IS PROVIDED ON AN "AS IS" BASIS, + WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR + IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES + THAT THE DOCUMENT OR MODIFIED VERSION OF THE + DOCUMENT IS FREE OF DEFECTS MERCHANTABLE, FIT FOR + A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE + RISK AS TO THE QUALITY, ACCURACY, AND PERFORMANCE + OF THE DOCUMENT OR MODIFIED VERSION OF THE + DOCUMENT IS WITH YOU. SHOULD ANY DOCUMENT OR + MODIFIED VERSION PROVE DEFECTIVE IN ANY RESPECT, + YOU (NOT THE INITIAL WRITER, AUTHOR OR ANY + CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY + SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER + OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS + LICENSE. NO USE OF ANY DOCUMENT OR MODIFIED + VERSION OF THE DOCUMENT IS AUTHORIZED HEREUNDER + EXCEPT UNDER THIS DISCLAIMER; AND + + + + UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL + THEORY, WHETHER IN TORT (INCLUDING NEGLIGENCE), + CONTRACT, OR OTHERWISE, SHALL THE AUTHOR, + INITIAL WRITER, ANY CONTRIBUTOR, OR ANY + DISTRIBUTOR OF THE DOCUMENT OR MODIFIED VERSION + OF THE DOCUMENT, OR ANY SUPPLIER OF ANY OF SUCH + PARTIES, BE LIABLE TO ANY PERSON FOR ANY + DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR + CONSEQUENTIAL DAMAGES OF ANY CHARACTER + INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS + OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR + MALFUNCTION, OR ANY AND ALL OTHER DAMAGES OR + LOSSES ARISING OUT OF OR RELATING TO USE OF THE + DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT, + EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF + THE POSSIBILITY OF SUCH DAMAGES. + + + + + diff -Nru backintime-1.0.36/qt4/icon.py backintime-1.1.12/qt4/icon.py --- backintime-1.0.36/qt4/icon.py 1970-01-01 00:00:00.000000000 +0000 +++ backintime-1.1.12/qt4/icon.py 2016-01-11 18:07:58.000000000 +0000 @@ -0,0 +1,85 @@ +# Copyright (C) 2012-2016 Germar Reitze +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +from PyQt4.QtGui import QIcon + +for theme in ('ubuntu-mono-dark', 'gnome', 'oxygen'): + if not QIcon.fromTheme('document-save').isNull(): + break + QIcon.setThemeName(theme) + +#BackInTime Logo +BIT_LOGO = QIcon.fromTheme('document-save') +BIT_LOGO_INFO = QIcon.fromTheme('document-save-as') + +#Main toolbar +TAKE_SNAPSHOT = BIT_LOGO +REFRESH_SNAPSHOT = QIcon.fromTheme('view-refresh') +SNAPSHOT_NAME = QIcon.fromTheme('stock_edit', + QIcon.fromTheme('gtk-edit', + QIcon.fromTheme('edit-rename', + QIcon.fromTheme('accessories-text-editor') ) ) ) +REMOVE_SNAPSHOT = QIcon.fromTheme('edit-delete') +VIEW_SNAPSHOT_LOG = QIcon.fromTheme('text-plain', + QIcon.fromTheme('text-x-generic') ) +VIEW_LAST_LOG = QIcon.fromTheme('document-new') +SETTINGS = QIcon.fromTheme('gtk-preferences', + QIcon.fromTheme('configure') ) +SHUTDOWN = QIcon.fromTheme('system-shutdown') +EXIT = QIcon.fromTheme('gtk-close', + QIcon.fromTheme('application-exit') ) + +#Help menu +HELP = QIcon.fromTheme('help-contents') +WEBSITE = QIcon.fromTheme('go-home') +CHANGELOG = QIcon.fromTheme('format-justify-fill') +FAQ = QIcon.fromTheme('help-faq', + QIcon.fromTheme('help-hint') ) +QUESTION = QIcon.fromTheme('stock_dialog-question', + QIcon.fromTheme('help-feedback') ) +BUG = QIcon.fromTheme('stock_dialog-error', + QIcon.fromTheme('tools-report-bug') ) +ABOUT = QIcon.fromTheme('help-about') + +#Files toolbar +UP = QIcon.fromTheme('go-up') +SHOW_HIDDEN = QIcon.fromTheme('show-hidden', + QIcon.fromTheme('list-add')) +RESTORE = QIcon.fromTheme('edit-undo') +RESTORE_TO = QIcon.fromTheme('document-revert') +SNAPSHOTS = QIcon.fromTheme('file-manager', + QIcon.fromTheme('view-list-details', + QIcon.fromTheme('system-file-manager') ) ) + +#Snapshot dialog +DIFF_OPTIONS = SETTINGS +DELETE_FILE = REMOVE_SNAPSHOT +SELECT_ALL = QIcon.fromTheme('edit-select-all') + +#Restore dialog +RESTORE_DIALOG = VIEW_SNAPSHOT_LOG + +#Settings dialog +SETTINGS_DIALOG = SETTINGS +PROFILE_EDIT = SNAPSHOT_NAME +ADD = QIcon.fromTheme('list-add') +REMOVE = QIcon.fromTheme('list-remove') +FOLDER = QIcon.fromTheme('folder') +FILE = VIEW_SNAPSHOT_LOG +EXCLUDE = REMOVE_SNAPSHOT +DEFAULT_EXCLUDE = QIcon.fromTheme('emblem-important') +INVALID_EXCLUDE = QIcon.fromTheme('emblem-ohno', + QIcon.fromTheme('face-surprise') ) diff -Nru backintime-1.0.36/qt4/icons/16x16/actions/show-hidden.svg backintime-1.1.12/qt4/icons/16x16/actions/show-hidden.svg --- backintime-1.0.36/qt4/icons/16x16/actions/show-hidden.svg 1970-01-01 00:00:00.000000000 +0000 +++ backintime-1.1.12/qt4/icons/16x16/actions/show-hidden.svg 2016-01-11 18:07:58.000000000 +0000 @@ -0,0 +1,336 @@ + + + + + + + show-hidden + + + + image/svg+xml + + show-hidden + + 2015-12-22 + + + Germar Reitze + + + + + eye + + + Icon for showing hidden files in BackInTime + https://github.com/bit-team/backintime + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru backintime-1.0.36/qt4/icons/22x22/actions/show-hidden.svg backintime-1.1.12/qt4/icons/22x22/actions/show-hidden.svg --- backintime-1.0.36/qt4/icons/22x22/actions/show-hidden.svg 1970-01-01 00:00:00.000000000 +0000 +++ backintime-1.1.12/qt4/icons/22x22/actions/show-hidden.svg 2016-01-11 18:07:58.000000000 +0000 @@ -0,0 +1,336 @@ + + + + + + + show-hidden + + + + image/svg+xml + + show-hidden + + 2015-12-22 + + + Germar Reitze + + + + + eye + + + Icon for showing hidden files in BackInTime + https://github.com/bit-team/backintime + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru backintime-1.0.36/qt4/icons/24x24/actions/show-hidden.svg backintime-1.1.12/qt4/icons/24x24/actions/show-hidden.svg --- backintime-1.0.36/qt4/icons/24x24/actions/show-hidden.svg 1970-01-01 00:00:00.000000000 +0000 +++ backintime-1.1.12/qt4/icons/24x24/actions/show-hidden.svg 2016-01-11 18:07:58.000000000 +0000 @@ -0,0 +1,336 @@ + + + + + + + show-hidden + + + + image/svg+xml + + show-hidden + + 2015-12-22 + + + Germar Reitze + + + + + eye + + + Icon for showing hidden files in BackInTime + https://github.com/bit-team/backintime + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru backintime-1.0.36/qt4/icons/32x32/actions/show-hidden.svg backintime-1.1.12/qt4/icons/32x32/actions/show-hidden.svg --- backintime-1.0.36/qt4/icons/32x32/actions/show-hidden.svg 1970-01-01 00:00:00.000000000 +0000 +++ backintime-1.1.12/qt4/icons/32x32/actions/show-hidden.svg 2016-01-11 18:07:58.000000000 +0000 @@ -0,0 +1,336 @@ + + + + + + + show-hidden + + + + image/svg+xml + + show-hidden + + 2015-12-22 + + + Germar Reitze + + + + + eye + + + Icon for showing hidden files in BackInTime + https://github.com/bit-team/backintime + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru backintime-1.0.36/qt4/icons/48x48/actions/show-hidden.svg backintime-1.1.12/qt4/icons/48x48/actions/show-hidden.svg --- backintime-1.0.36/qt4/icons/48x48/actions/show-hidden.svg 1970-01-01 00:00:00.000000000 +0000 +++ backintime-1.1.12/qt4/icons/48x48/actions/show-hidden.svg 2016-01-11 18:07:58.000000000 +0000 @@ -0,0 +1,335 @@ + + + + + + + show-hidden + + + + image/svg+xml + + show-hidden + + 2015-12-22 + + + Germar Reitze + + + + + eye + + + Icon for showing hidden files in BackInTime + https://github.com/bit-team/backintime + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru backintime-1.0.36/qt4/icons/scalable/actions/show-hidden.svg backintime-1.1.12/qt4/icons/scalable/actions/show-hidden.svg --- backintime-1.0.36/qt4/icons/scalable/actions/show-hidden.svg 1970-01-01 00:00:00.000000000 +0000 +++ backintime-1.1.12/qt4/icons/scalable/actions/show-hidden.svg 2016-01-11 18:07:58.000000000 +0000 @@ -0,0 +1,335 @@ + + + + + + + show-hidden + + + + image/svg+xml + + show-hidden + + 2015-12-22 + + + Germar Reitze + + + + + eye + + + Icon for showing hidden files in BackInTime + https://github.com/bit-team/backintime + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru backintime-1.0.36/qt4/logviewdialog.py backintime-1.1.12/qt4/logviewdialog.py --- backintime-1.0.36/qt4/logviewdialog.py 1970-01-01 00:00:00.000000000 +0000 +++ backintime-1.1.12/qt4/logviewdialog.py 2016-01-11 18:07:58.000000000 +0000 @@ -0,0 +1,197 @@ +# Back In Time +# Copyright (C) 2008-2016 Oprea Dan, Bart de Koning, Richard Bailey, Germar Reitze +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + +import gettext + +from PyQt4.QtGui import * +from PyQt4.QtCore import * + +import encfstools + + +_=gettext.gettext + + +class LogViewDialog( QDialog ): + def __init__( self, parent, snapshot_id = None ): + super(LogViewDialog, self).__init__(parent) + + self.config = parent.config + self.snapshots = parent.snapshots + self.main_window = parent + self.current_profile = self.config.get_current_profile() + self.snapshot_id = snapshot_id + self.enable_update = False + self.decode = None + + w = self.config.get_int_value('qt4.logview.width', 800) + h = self.config.get_int_value('qt4.logview.height', 500) + self.resize(w, h) + + import icon + self.setWindowIcon(icon.VIEW_SNAPSHOT_LOG) + if self.snapshot_id is None: + self.setWindowTitle(_('Last Log View')) + else: + self.setWindowTitle(_('Snapshot Log View')) + + self.main_layout = QVBoxLayout(self) + + layout = QHBoxLayout() + self.main_layout.addLayout( layout ) + + #profiles + self.lbl_profiles = QLabel( _('Profile:'), self ) + layout.addWidget( self.lbl_profiles ) + + self.combo_profiles = QComboBox( self ) + layout.addWidget( self.combo_profiles, 1 ) + QObject.connect( self.combo_profiles, SIGNAL('currentIndexChanged(int)'), self.current_profile_changed ) + + #snapshots + self.lbl_snapshots = QLabel(_('Snapshots') + ':', self) + layout.addWidget(self.lbl_snapshots) + self.combo_snapshots = QComboBox(self) + layout.addWidget(self.combo_snapshots, 1) + QObject.connect(self.combo_snapshots, SIGNAL('currentIndexChanged(int)'), self.current_snapshot_changed) + + if self.snapshot_id is None: + self.lbl_snapshots.hide() + self.combo_snapshots.hide() + else: + self.lbl_profiles.hide() + self.combo_profiles.hide() + + #filter + layout.addWidget( QLabel(_('Filter:')) ) + + self.combo_filter = QComboBox( self ) + layout.addWidget( self.combo_filter, 1 ) + QObject.connect( self.combo_filter, SIGNAL('currentIndexChanged(int)'), self.current_filter_changed ) + + self.combo_filter.addItem( _('All'), 0 ) + self.combo_filter.addItem(' + '.join((_('Errors'), _('Changes'))), 4) + self.combo_filter.setCurrentIndex( self.combo_filter.count() - 1 ) + self.combo_filter.addItem( _('Errors'), 1 ) + self.combo_filter.addItem( _('Changes'), 2 ) + self.combo_filter.addItem( _('Informations'), 3 ) + + #text view + self.txt_log_view = QPlainTextEdit(self) + self.txt_log_view.setReadOnly(True) + self.txt_log_view.setLineWrapMode(QPlainTextEdit.NoWrap) + self.main_layout.addWidget( self.txt_log_view ) + + # + self.main_layout.addWidget( QLabel(_('[E] Error, [I] Information, [C] Change')) ) + + #decode path + self.cb_decode = QCheckBox( _('decode paths'), self ) + QObject.connect( self.cb_decode, SIGNAL('stateChanged(int)'), self.on_cb_decode ) + self.main_layout.addWidget(self.cb_decode) + + #buttons + button_box = QDialogButtonBox(QDialogButtonBox.Close) + self.main_layout.addWidget(button_box) + QObject.connect(button_box, SIGNAL('rejected()'), self.close) + + self.update_snapshots() + self.update_cb_decode() + self.update_profiles() + + def on_cb_decode(self): + if self.cb_decode.isChecked(): + self.decode = encfstools.Decode(self.config) + else: + if not self.decode is None: + self.decode.close() + self.decode = None + self.update_log() + + def current_profile_changed( self, index ): + if not self.enable_update: + return + profile_id = str(self.combo_profiles.itemData(index)) + for idx in range(self.main_window.combo_profiles.count()): + if self.main_window.combo_profiles.itemData(idx) == profile_id: + self.main_window.combo_profiles.setCurrentIndex(idx) + self.main_window.on_profile_changed(idx) + break + self.update_cb_decode() + self.update_log() + + def current_snapshot_changed(self, index): + if not self.enable_update: + return + self.snapshot_id = str(self.combo_snapshots.itemData(self.combo_snapshots.currentIndex())) + self.update_log() + + def current_filter_changed( self, index ): + self.update_log() + + def update_profiles( self ): + current_profile_id = self.config.get_current_profile() + + self.combo_profiles.clear() + + profiles = self.config.get_profiles_sorted_by_name() + for profile_id in profiles: + self.combo_profiles.addItem( self.config.get_profile_name( profile_id ), profile_id ) + if profile_id == current_profile_id: + self.combo_profiles.setCurrentIndex( self.combo_profiles.count() - 1 ) + + self.enable_update = True + self.update_log() + + if len( profiles ) <= 1: + self.lbl_profiles.setVisible( False ) + self.combo_profiles.setVisible( False ) + + def update_snapshots(self): + self.combo_snapshots.clear() + for snapshot in self.snapshots.get_snapshots_list(): + self.combo_snapshots.addItem(self.snapshots.get_snapshot_display_name(snapshot), snapshot) + if snapshot == self.snapshot_id: + self.combo_snapshots.setCurrentIndex(self.combo_snapshots.count() - 1) + + def update_cb_decode(self): + if self.config.get_snapshots_mode() == 'ssh_encfs': + self.cb_decode.show() + else: + self.cb_decode.hide() + if self.cb_decode.isChecked(): + self.cb_decode.setChecked(False) + + def update_log( self ): + if not self.enable_update: + return + + mode = self.combo_filter.itemData( self.combo_filter.currentIndex() ) + + if self.snapshot_id is None: + self.txt_log_view.setPlainText(self.snapshots.get_take_snapshot_log(mode, self.get_selected_profile(), decode = self.decode) ) + else: + self.txt_log_view.setPlainText(self.snapshots.get_snapshot_log(self.snapshot_id, mode, decode = self.decode) ) + + def get_selected_profile(self): + return str(self.combo_profiles.itemData(self.combo_profiles.currentIndex()) ) + + def closeEvent(self, event): + self.config.set_int_value('qt4.logview.width', self.width()) + self.config.set_int_value('qt4.logview.height', self.height()) + event.accept() diff -Nru backintime-1.0.36/qt4/man/C/backintime-qt4.1 backintime-1.1.12/qt4/man/C/backintime-qt4.1 --- backintime-1.0.36/qt4/man/C/backintime-qt4.1 1970-01-01 00:00:00.000000000 +0000 +++ backintime-1.1.12/qt4/man/C/backintime-qt4.1 2016-01-11 18:07:58.000000000 +0000 @@ -0,0 +1,151 @@ +.TH backintime-qt4 1 "July 2015" "version 1.1.12" "USER COMMANDS" +.SH NAME +backintime-qt4 \- a simple backup tool. +.SH SYNOPSIS +.B backintime-qt4 +[\-\-checksum] +[\-\-config PATH] +[\-\-debug] +[\-\-delete] +[\-\-help | \-h] +[\-\-keep\-mount] +[\-\-license] +[\-\-local\-backup] +[\-\-no\-crontab] +[\-\-no\-local\-backup] +[\-\-profile NAME | +\-\-profile\-id ID] +[\-\-quiet] +[\-\-version] + +{ backup | backup\-job | +benchmark-cipher [FILE-SIZE] | +check-config | +decode [PATH] | +last\-snapshot | last\-snapshot\-path | +pw\-cache [start|stop|restart|reload|status] | +remove[\-and\-do\-not\-ask\-again] [SNAPSHOT_ID] | +restore [WHAT [WHERE [SNAPSHOT_ID]]] | +snapshots\-list | snapshots\-list\-path | +snapshots\-path | +unmount } + +.SH DESCRIPTION +Back In Time is a simple backup tool for Linux. This is the Qt4 version. +For more information about Back In Time see backintime man page. +.PP +If you want to run it as root you need to use 'pkexec backintime-qt4'. +.SH OPTIONS +.TP +\-\-checksum +Force to use checksum for checking if files have been changed. This is the same +as 'Use checksum to detect changes' in Options. But you can use this to +periodically run checksums from cronjobs. Only valid with \fIbackup\fR, +\fIbackup-job\fR and \fIrestore\fR. +.TP +\-\-config PATH +Read config from PATH. +.TP +--debug +Show debug messages. +.TP +--delete +Restore and delete newer files which are not in the snapshot. +WARNING: deleting files in filesystem root could break your whole system!!! +Only valid with \fIrestore\fR. +.TP +\-h, \-\-help +Display a short help +.TP +\-\-keep\-mount +Don't unmount on exit. Only valid with \fIsnapshots\-path\fR, \fIsnapshots\-list\-path\fR and +\fIlast\-snapshot\-path\fR. +.TP +\-\-license +Show license +.TP +--local-backup +Create backup files before changing local files. +Only valid with \fIrestore\fR. +.TP +--no-crontab +Do not install crontab entries. +Only valid with \fIcheck-config\fR. +.TP +--no-local-backup +Temporary disable creation of backup files before changing local files. +Only valid with \fIrestore\fR. +.TP +\-\-profile NAME +Select profile by name +.TP +\-\-profile\-id ID +Select profile by id +.TP +\-\-quiet +Suppress status messages on standard output. +.TP +\-v, \-\-version +Show version + +.SH COMMANDS +.TP +backup | \-b | \-\-backup +Take a snapshot now (if needed) +.TP +backup\-job | \-\-backup\-job +Take a snapshot (if needed) depending on schedule rules (used for cron jobs). +Back In Time will run in background for this. +.TP +benchmark-cipher | \-\-benchmark-cipher [FILE-SIZE] +Show a benchmark of all ciphers for ssh transfer. +.TP +check-config +Verify the profile in config, create snapshot path and crontab entries. +.TP +decode | \-\-decode [PATH] +Decode encrypted PATH. If no PATH is given Back In Time will read paths from +standard input. +.TP +last\-snapshot | \-\-last\-snapshot +Display last snapshot ID (if any) +.TP +last\-snapshot\-path | \-\-last\-snapshot\-path +Display the path to the last snapshot (if any) +.TP +pw\-cache | \-\-pw\-cache [start|stop|restart|reload|status] +Control the Password Cache Daemon. If no argument is given the Password Cache +will start in foreground. +.TP +remove[\-and\-do\-not\-ask\-again] | \-\-remove[\-and\-do\-not\-ask\-again] [SNAPSHOT_ID] +Remove the snapshot. If SNAPSHOT_ID is missing it will be prompted. SNAPSHOT_ID +can be an index (starting with 0 for the last snapshot) or the exact SnapshotID +(19 caracters like '20130606-230501-984'). +\fIremove\-and\-do\-not\-ask\-again\fR will remove the snapshot immediately. +Be careful with this! +.TP +restore | \-\-restore [WHAT [WHERE [SNAPSHOT_ID]]] +Restore file WHAT to path WHERE from snapshot SNAPSHOT_ID. If arguments are +missing they will be prompted. To restore to the original path WHERE can be an +empty string '' or just press Enter at the prompt. SNAPSHOT_ID can be an index +(starting with 0 for the last snapshot) or the exact SnapshotID +(19 caracters like '20130606-230501-984') +.TP +snapshots\-list | \-\-snapshots\-list +Display the list of snapshot IDs (if any) +.TP +snapshots\-list\-path | \-\-snapshots\-list\-path +Display the paths to snapshots (if any) +.TP +snapshots\-path | \-\-snapshots\-path +Display path where is saves the snapshots (if configured) +.TP +unmount | \-\-unmount +Unmount the profile. + +.SH SEE ALSO +backintime, backintime-config. +.PP +Back In Time also has a website: https://github.com/bit-team/backintime +.SH AUTHOR +This manual page was written by BIT Team(). diff -Nru backintime-1.0.36/qt4/messagebox.py backintime-1.1.12/qt4/messagebox.py --- backintime-1.0.36/qt4/messagebox.py 1970-01-01 00:00:00.000000000 +0000 +++ backintime-1.1.12/qt4/messagebox.py 2016-01-11 18:07:58.000000000 +0000 @@ -0,0 +1,101 @@ +# Copyright (C) 2012-2016 Germar Reitze +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +import gettext +from PyQt4.QtCore import QTimer, SIGNAL, Qt +from PyQt4.QtGui import QApplication, QMessageBox, QInputDialog, QLineEdit,\ + QDialog, QVBoxLayout, QLabel, QDialogButtonBox, QScrollArea +import qt4tools + +_ = gettext.gettext + +def ask_password_dialog(parent, title, prompt, timeout = None): + if parent is None: + qt4tools.create_qapplication() + + import icon + dialog = QInputDialog() + + timer = QTimer() + if not timeout is None: + dialog.connect(timer, SIGNAL("timeout()"), dialog.reject) + timer.setInterval(timeout * 1000) + timer.start() + + dialog.setWindowIcon(icon.BIT_LOGO) + dialog.setWindowTitle(title) + dialog.setLabelText(prompt) + dialog.setTextEchoMode(QLineEdit.Password) + QApplication.processEvents() + + ret = dialog.exec_() + + timer.stop() + if ret: + password = dialog.textValue() + else: + password = '' + del(dialog) + + return(password) + +def critical(parent, msg): + return QMessageBox.critical(parent, _('Error'), + msg, + buttons = QMessageBox.Ok, + defaultButton = QMessageBox.Ok ) + +def warningYesNo(parent, msg): + return QMessageBox.question(parent, _('Question'), msg, + buttons = QMessageBox.Yes | QMessageBox.No, + defaultButton = QMessageBox.No ) + +def warningYesNoOptions(parent, msg, options = ()): + dlg = QDialog(parent) + dlg.setWindowTitle(_('Question')) + layout = QVBoxLayout() + dlg.setLayout(layout) + label = QLabel(msg) + layout.addWidget(label) + + for opt in options: + layout.addWidget(opt['widget']) + + buttonBox = QDialogButtonBox(QDialogButtonBox.Yes | QDialogButtonBox.No) + buttonBox.button(QDialogButtonBox.No).setDefault(True) + layout.addWidget(buttonBox) + dlg.connect(buttonBox, SIGNAL('accepted()'), dlg.accept) + dlg.connect(buttonBox, SIGNAL('rejected()'), dlg.reject) + ret = dlg.exec_() + return (ret, {opt['id']:opt['retFunc']() for opt in options}) + +def show_info(parent, title, msg): + dlg = QDialog(parent) + dlg.setWindowTitle(title) + vlayout = QVBoxLayout(dlg) + label = QLabel(msg) + label.setTextInteractionFlags(Qt.LinksAccessibleByMouse) + label.setOpenExternalLinks(True) + + scroll_area = QScrollArea() + scroll_area.setWidget(label) + + button_box = QDialogButtonBox(QDialogButtonBox.Ok) + dlg.connect(button_box, SIGNAL('accepted()'), dlg.accept) + + vlayout.addWidget(scroll_area) + vlayout.addWidget(button_box) + return dlg.exec_() diff -Nru backintime-1.0.36/qt4/net.launchpad.backintime.policy backintime-1.1.12/qt4/net.launchpad.backintime.policy --- backintime-1.0.36/qt4/net.launchpad.backintime.policy 1970-01-01 00:00:00.000000000 +0000 +++ backintime-1.1.12/qt4/net.launchpad.backintime.policy 2016-01-11 18:07:58.000000000 +0000 @@ -0,0 +1,43 @@ + + + + + BackInTime + https://github.com/bit-team/backintime + document-save + + + Authentication is required to run Back In Time as root. + Start Back In Time GUI as root. + + auth_admin + auth_admin + auth_admin_keep + + /usr/bin/backintime-qt4 + true + + + + Authentication is required to add Udev rules. + This will install Udev rules which will start Back In Time if a drive get connected. + + auth_admin + auth_admin_keep + auth_admin_keep + + + + + Authentication is required to delete Udev rules. + This will delete Udev rules. + + auth_admin + auth_admin_keep + auth_admin_keep + + + + diff -Nru backintime-1.0.36/qt4/net.launchpad.backintime.serviceHelper.conf backintime-1.1.12/qt4/net.launchpad.backintime.serviceHelper.conf --- backintime-1.0.36/qt4/net.launchpad.backintime.serviceHelper.conf 1970-01-01 00:00:00.000000000 +0000 +++ backintime-1.1.12/qt4/net.launchpad.backintime.serviceHelper.conf 2016-01-11 18:07:58.000000000 +0000 @@ -0,0 +1,19 @@ + + + + + system + + + + + + + + + + + + + diff -Nru backintime-1.0.36/qt4/net.launchpad.backintime.serviceHelper.service backintime-1.1.12/qt4/net.launchpad.backintime.serviceHelper.service --- backintime-1.0.36/qt4/net.launchpad.backintime.serviceHelper.service 1970-01-01 00:00:00.000000000 +0000 +++ backintime-1.1.12/qt4/net.launchpad.backintime.serviceHelper.service 2016-01-11 18:07:58.000000000 +0000 @@ -0,0 +1,4 @@ +[D-BUS Service] +Name=net.launchpad.backintime.serviceHelper +Exec=/usr/bin/python3 /usr/share/backintime/qt4/serviceHelper.py +User=root diff -Nru backintime-1.0.36/qt4/plugins/notifyplugin.py backintime-1.1.12/qt4/plugins/notifyplugin.py --- backintime-1.0.36/qt4/plugins/notifyplugin.py 1970-01-01 00:00:00.000000000 +0000 +++ backintime-1.1.12/qt4/plugins/notifyplugin.py 2016-01-11 18:07:58.000000000 +0000 @@ -0,0 +1,78 @@ +# Back In Time +# Copyright (C) 2008-2016 Oprea Dan, Bart de Koning, Richard Bailey, Germar Reitze +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + +import os +import pluginmanager +import gettext + +_=gettext.gettext + + +class NotifyPlugin( pluginmanager.Plugin ): + def __init__( self ): + self.user = '' + + try: + self.user = os.getlogin() + except: + pass + + if not self.user: + try: + user = os.environ['USER'] + except: + pass + + if not self.user: + try: + user = os.environ['LOGNAME'] + except: + pass + + def init( self, snapshots ): + return True + + def is_gui( self ): + return True + + def on_process_begins( self ): + pass + + def on_process_ends( self ): + pass + + def on_error( self, code, message ): + return + + def on_new_snapshot( self, snapshot_id, snapshot_path ): + return + + def on_message( self, profile_id, profile_name, level, message, timeout ): + if 1 == level: + cmd = "notify-send " + if timeout > 0: + cmd = cmd + " -t %s" % (1000 * timeout) + + title = "Back In Time (%s) : %s" % (self.user, profile_name) + message = message.replace("\n", ' ') + message = message.replace("\r", '') + + cmd = cmd + " \"%s\" \"%s\"" % (title, message) + print(cmd) + os.system(cmd) + return diff -Nru backintime-1.0.36/qt4/plugins/qt4plugin.py backintime-1.1.12/qt4/plugins/qt4plugin.py --- backintime-1.0.36/qt4/plugins/qt4plugin.py 1970-01-01 00:00:00.000000000 +0000 +++ backintime-1.1.12/qt4/plugins/qt4plugin.py 2016-01-11 18:07:58.000000000 +0000 @@ -0,0 +1,65 @@ +# Back In Time +# Copyright (C) 2008-2016 Oprea Dan, Bart de Koning, Richard Bailey, Germar Reitze +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + +import sys +import os +import pluginmanager +import tools +import logger +import time +import gettext +import _thread +import subprocess + + +_=gettext.gettext + + +if not os.getenv( 'DISPLAY', '' ): + os.putenv( 'DISPLAY', ':0.0' ) + + +class Qt4Plugin( pluginmanager.Plugin ): + def __init__( self ): + self.process = None + self.snapshots = None + + def init( self, snapshots ): + self.snapshots = snapshots + + if not tools.check_x_server(): + return False + return True + + def is_gui( self ): + return True + + def on_process_begins( self ): + try: + path = os.path.join(tools.get_backintime_path('qt4'), 'qt4systrayicon.py') + self.process = subprocess.Popen( [ sys.executable, path, self.snapshots.config.get_current_profile() ] ) + except: + pass + + def on_process_ends( self ): + if not self.process is None: + try: + #self.process.terminate() + return + except: + pass diff -Nru backintime-1.0.36/qt4/qt4systrayicon.py backintime-1.1.12/qt4/qt4systrayicon.py --- backintime-1.0.36/qt4/qt4systrayicon.py 1970-01-01 00:00:00.000000000 +0000 +++ backintime-1.1.12/qt4/qt4systrayicon.py 2016-01-11 18:07:58.000000000 +0000 @@ -0,0 +1,170 @@ +# Back In Time +# Copyright (C) 2008-2016 Oprea Dan, Bart de Koning, Richard Bailey, Germar Reitze +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + +import sys +import os +import gettext +import subprocess + +_=gettext.gettext + +if not os.getenv( 'DISPLAY', '' ): + os.putenv( 'DISPLAY', ':0.0' ) + +import qt4tools +qt4tools.register_backintime_path('common') + +import tools +import logger +import snapshots +import progress + +from PyQt4.QtCore import QObject, SIGNAL, QTimer +from PyQt4.QtGui import QSystemTrayIcon, QIcon, QMenu, QProgressBar, QWidget, QRegion + + +class Qt4SysTrayIcon: + def __init__( self ): + self.snapshots = snapshots.Snapshots() + self.config = self.snapshots.config + + if len( sys.argv ) > 1: + if not self.config.set_current_profile(sys.argv[1]): + logger.warning("Failed to change Profile_ID %s" + %sys.argv[1], self) + + self.qapp = qt4tools.create_qapplication(self.config.APP_NAME) + + import icon + self.icon = icon + self.qapp.setWindowIcon(icon.BIT_LOGO) + + self.status_icon = QSystemTrayIcon(icon.BIT_LOGO) + #self.status_icon.actionCollection().clear() + self.contextMenu = QMenu() + + self.menuProfileName = self.contextMenu.addAction(_('Profile: "%s"') % self.config.get_profile_name()) + qt4tools.set_font_bold(self.menuProfileName) + self.contextMenu.addSeparator() + + self.menuStatusMessage = self.contextMenu.addAction(_('Done')) + self.menuProgress = self.contextMenu.addAction('') + self.menuProgress.setVisible(False) + self.contextMenu.addSeparator() + self.startBIT = self.contextMenu.addAction(icon.BIT_LOGO, _('Start BackInTime')) + QObject.connect(self.startBIT, SIGNAL('triggered()'), self.onStartBIT) + self.status_icon.setContextMenu(self.contextMenu) + + self.pixmap = icon.BIT_LOGO.pixmap(24) + self.progressBar = QProgressBar() + self.progressBar.setMinimum(0) + self.progressBar.setMaximum(100) + self.progressBar.setValue(0) + self.progressBar.setTextVisible(False) + self.progressBar.resize(24, 6) + self.progressBar.render(self.pixmap, sourceRegion = QRegion(0, -14, 24, 6), flags = QWidget.RenderFlags(QWidget.DrawChildren)) + + self.first_error = self.config.is_notify_enabled() + self.popup = None + self.last_message = None + + self.timer = QTimer() + QObject.connect( self.timer, SIGNAL('timeout()'), self.update_info ) + + self.ppid = os.getppid() + + def prepare_exit( self ): + self.timer.stop() + + if not self.status_icon is None: + self.status_icon.hide() + self.status_icon = None + + if not self.popup is None: + self.popup.deleteLater() + self.popup = None + + self.qapp.processEvents() + + def run( self ): + self.status_icon.show() + self.timer.start( 500 ) + + logger.info("[qt4systrayicon] begin loop", self) + + self.qapp.exec_() + + logger.info("[qt4systrayicon] end loop", self) + + self.prepare_exit() + + def update_info( self ): + if not tools.is_process_alive( self.ppid ): + self.prepare_exit() + self.qapp.exit(0) + return + + message = self.snapshots.get_take_snapshot_message() + if message is None and self.last_message is None: + message = ( 0, _('Working...') ) + + if not message is None: + if message != self.last_message: + self.last_message = message + self.menuStatusMessage.setText('\n'.join(tools.wrap_line(self.last_message[1],\ + size = 80,\ + delimiters = '',\ + new_line_indicator = '') \ + )) + self.status_icon.setToolTip( self.last_message[1] ) + + pg = progress.ProgressFile(self.config) + if pg.isFileReadable(): + pg.load() + percent = pg.get_int_value('percent') + if percent != self.progressBar.value(): + self.progressBar.setValue(percent) + self.progressBar.render(self.pixmap, sourceRegion = QRegion(0, -14, 24, 6), flags = QWidget.RenderFlags(QWidget.DrawChildren)) + self.status_icon.setIcon(QIcon(self.pixmap)) + + self.menuProgress.setText(' | '.join(self.getMenuProgress(pg)) ) + self.menuProgress.setVisible(True) + else: + self.status_icon.setIcon(self.icon.BIT_LOGO) + self.menuProgress.setVisible(False) + + + def getMenuProgress(self, pg): + d = (('sent', _('Sent:')), \ + ('speed', _('Speed:')),\ + ('eta', _('ETA:')) ) + for key, txt in d: + value = pg.get_str_value(key, '') + if not value: + continue + yield txt + ' ' + value + + def onStartBIT(self): + profileID = self.config.get_current_profile() + cmd = ['backintime-qt4',] + if not profileID == '1': + cmd += ['--profile-id', profileID] + proc = subprocess.Popen(cmd) + +if __name__ == '__main__': + Qt4SysTrayIcon().run() diff -Nru backintime-1.0.36/qt4/qt4tools.py backintime-1.1.12/qt4/qt4tools.py --- backintime-1.0.36/qt4/qt4tools.py 1970-01-01 00:00:00.000000000 +0000 +++ backintime-1.1.12/qt4/qt4tools.py 2016-01-11 18:07:58.000000000 +0000 @@ -0,0 +1,307 @@ +# Back In Time +# Copyright (C) 2008-2016 Oprea Dan, Bart de Koning, Richard Bailey, Germar Reitze +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +import os +import sys +import gettext +from PyQt4.QtGui import QFont, QFileDialog, QListView, QAbstractItemView, \ + QTreeView, QDialog, QApplication, QStyleFactory, \ + QTreeWidget, QTreeWidgetItem, QColor +from PyQt4.QtCore import QDir, SIGNAL, Qt, pyqtSlot, pyqtSignal, QModelIndex +from datetime import datetime, date, timedelta +from calendar import monthrange + +_ = gettext.gettext + +def get_backintime_path(*path): + return os.path.abspath(os.path.join(__file__, os.pardir, os.pardir, *path)) + +def register_backintime_path(*path): + '''find duplicate in common/tools.py + ''' + path = get_backintime_path(*path) + if not path in sys.path: + sys.path.insert(0, path) + +def get_font_bold( font ): + font.setWeight( QFont.Bold ) + return font + +def set_font_bold( widget ): + widget.setFont( get_font_bold( widget.font() ) ) + +def get_font_normal( font ): + font.setWeight( QFont.Normal ) + return font + +def set_font_normal( widget ): + widget.setFont( get_font_normal( widget.font() ) ) + +def equal_indent(*args): + width = 0 + for widget in args: + widget.setMinimumWidth(0) + width = max(width, widget.sizeHint().width()) + if len(args) > 1: + for widget in args: + widget.setMinimumWidth(width) + +def getExistingDirectories(parent, *args, **kwargs): + """Workaround for selecting multiple directories + adopted from http://www.qtcentre.org/threads/34226-QFileDialog-select-multiple-directories?p=158482#post158482 + This also give control about hidden folders + """ + dlg = QFileDialog(parent, *args, **kwargs) + dlg.setOption(dlg.DontUseNativeDialog, True) + dlg.setOption(dlg.HideNameFilterDetails, True) + dlg.setFileMode(dlg.Directory) + dlg.setOption(dlg.ShowDirsOnly, True) + if hidden_files(parent): + dlg.setFilter(dlg.filter() | QDir.Hidden) + dlg.findChildren(QListView)[0].setSelectionMode(QAbstractItemView.ExtendedSelection) + dlg.findChildren(QTreeView)[0].setSelectionMode(QAbstractItemView.ExtendedSelection) + if dlg.exec_() == QDialog.Accepted: + return dlg.selectedFiles() + return [str(), ] + +def getExistingDirectory(parent, *args, **kwargs): + """Workaround to give control about hidden folders + """ + dlg = QFileDialog(parent, *args, **kwargs) + dlg.setOption(dlg.DontUseNativeDialog, True) + dlg.setOption(dlg.HideNameFilterDetails, True) + dlg.setFileMode(dlg.Directory) + dlg.setOption(dlg.ShowDirsOnly, True) + if hidden_files(parent): + dlg.setFilter(dlg.filter() | QDir.Hidden) + if dlg.exec_() == QDialog.Accepted: + return dlg.selectedFiles()[0] + return str() + +def getOpenFileNames(parent, *args, **kwargs): + """Workaround to give control about hidden files + """ + dlg = QFileDialog(parent, *args, **kwargs) + dlg.setOption(dlg.DontUseNativeDialog, True) + dlg.setOption(dlg.HideNameFilterDetails, True) + dlg.setFileMode(dlg.ExistingFiles) + if hidden_files(parent): + dlg.setFilter(dlg.filter() | QDir.Hidden) + if dlg.exec_() == QDialog.Accepted: + return dlg.selectedFiles() + return [str(), ] + +def getOpenFileName(parent, *args, **kwargs): + """Workaround to give control about hidden files + """ + dlg = QFileDialog(parent, *args, **kwargs) + dlg.setOption(dlg.DontUseNativeDialog, True) + dlg.setOption(dlg.HideNameFilterDetails, True) + dlg.setFileMode(dlg.ExistingFile) + if hidden_files(parent): + dlg.setFilter(dlg.filter() | QDir.Hidden) + if dlg.exec_() == QDialog.Accepted: + return dlg.selectedFiles()[0] + return str() + +def hidden_files(parent): + try: + return parent.parent.show_hidden_files + except: pass + try: + return parent.show_hidden_files + except: pass + return False + +def create_qapplication(app_name = 'Back In Time'): + global qapp + try: + return qapp + except NameError: + pass + qapp = QApplication(sys.argv + ['-title', app_name]) + if os.geteuid() == 0 and \ + qapp.style().objectName().lower() == 'windows' and \ + 'GTK+' in QStyleFactory.keys(): + qapp.setStyle('GTK+') + return qapp + +class MyTreeView(QTreeView): + """subclass QTreeView to emit a SIGNAL myCurrentIndexChanged + if the SLOT currentChanged is called""" + myCurrentIndexChanged = pyqtSignal(QModelIndex, QModelIndex) + + def currentChanged(self, current, previous): + self.myCurrentIndexChanged.emit(current, previous) + super(MyTreeView, self).currentChanged(current, previous) + +class TimeLine(QTreeWidget): + updateFilesView = pyqtSignal(int) + + def __init__(self, parent): + super(TimeLine, self).__init__(parent) + self.setRootIsDecorated(False) + self.setEditTriggers(QAbstractItemView.NoEditTriggers) + self.setSelectionMode(QAbstractItemView.ExtendedSelection) + self.setHeaderLabels([_('Snapshots'),'foo']) + self.setSortingEnabled(True) + self.sortByColumn(1, Qt.DescendingOrder) + self.hideColumn(1) + self.header().setClickable(False) + + self.parent = parent + self.snapshots = parent.snapshots + self._resetHeaderData() + + def clear(self): + self._resetHeaderData() + return super(TimeLine, self).clear() + + def _resetHeaderData(self): + self.now = date.today() + #list of tuples with (text, startDate, endDate) + self.headerData = [ (#today + _('Today'), + datetime.combine(self.now, datetime.min.time()), + datetime.combine(self.now, datetime.max.time()) + ), + (#yesterday + _('Yesterday'), + datetime.combine(self.now - timedelta(days = 1), datetime.min.time()), + datetime.combine(self.now - timedelta(days = 1), datetime.max.time()) + ), + (#this week + _('This week'), + datetime.combine(self.now - timedelta(self.now.weekday()), datetime.min.time()), + datetime.combine(self.now - timedelta(days = 2), datetime.max.time()) + ), + (#last week + _('Last week'), + datetime.combine(self.now - timedelta(self.now.weekday() + 7), datetime.min.time()), + datetime.combine(self.now - timedelta(self.now.weekday() + 1), datetime.max.time()) + ), + (#the rest of current month. Otherwise this months header would be above today + date(self.now.year, self.now.month, 1).strftime('%B').capitalize(), + datetime.combine(self.now - timedelta(self.now.day), datetime.min.time()), + datetime.combine(self.now - timedelta(self.now.weekday() + 8), datetime.max.time()) + )] + + def addRoot(self, sid, sName, tooltip = None): + self.rootItem = self.addSnapshot(sid, sName, tooltip) + return self.rootItem + + @pyqtSlot(str, str, str) + def addSnapshot(self, sid, sName, tooltip = None): + item = SnapshotItem() + item.setName(sName) + item.setSnapshotID(sid) + item.setSort(self.snapshots.get_snapshot_datetime(sid)) + if not tooltip is None: + item.setToolTip(0, tooltip) + + self.addTopLevelItem(item) + + #select the snapshot that was selected before + if sid == self.parent.snapshot_id: + self.setCurrentItem(item) + + if self.snapshots.is_snapshot_id(sid): + self.addHeader(sid) + return item + + def addHeader(self, sid): + sidDatetime = self.snapshots.get_snapshot_datetime(sid) + + for text, startDate, endDate in self.headerData: + if startDate <= sidDatetime <= endDate: + return self._createHeaderItem(text, endDate) + + #any previous months + year = int(sid[0 : 4]) + month = int(sid[4 : 6]) + if year == self.now.year: + text = date(year, month, 1).strftime('%B').capitalize() + else: + text = date(year, month, 1).strftime('%B, %Y').capitalize() + startDate = datetime.combine(date(year, month, 1), datetime.min.time()) + endDate = datetime.combine(date(year, month, monthrange(year, month)[1]), datetime.max.time()) + if self._createHeaderItem(text, endDate): + self.headerData.append((text, startDate, endDate)) + + def _createHeaderItem(self, text, endDate): + for item in self.iterHeaderItems(): + if item.data(0, Qt.UserRole) == endDate: + return False + item = HeaderItem() + item.setName(text) + item.setSort(endDate) + self.addTopLevelItem(item) + return True + + @pyqtSlot() + def checkSelection(self): + if self.currentItem() is None: + self.setCurrentItem(self.rootItem) + if self.parent.snapshot_id != '/': + self.parent.snapshot_id = '/' + self.updateFilesView.emit(2) + + def selectedSnapshotIDs(self): + return [i.snapshotID() for i in self.selectedItems()] + + def currentSnapshotID(self): + return self.currentItem().snapshotID() + + def iterItems(self): + for index in range(self.topLevelItemCount()): + yield self.topLevelItem(index) + + def iterSnapshotItems(self): + for item in self.iterItems(): + if isinstance(item, SnapshotItem): + yield item + + def iterHeaderItems(self): + for item in self.iterItems(): + if isinstance(item, HeaderItem): + yield item + +class SnapshotItem(QTreeWidgetItem): + def setName(self, name): + self.setText(0, name) + self.setFont(0, get_font_normal(self.font(0))) + + def setSnapshotID(self, sid): + self.setData(0, Qt.UserRole, sid) + + def setSort(self, date): + self.setText(1, str(date)) + + def snapshotID(self): + return str(self.data(0, Qt.UserRole)) + +class HeaderItem(QTreeWidgetItem): + def setName(self, name): + self.setText(0, name) + self.setFont(0, get_font_bold(self.font(0))) + self.setBackgroundColor(0, QColor(196, 196, 196)) + self.setTextColor(0, QColor(60, 60, 60)) + self.setFlags(Qt.NoItemFlags) + + def setSort(self, date): + self.setData(0, Qt.UserRole, date) + self.setText(1, str(date)) diff -Nru backintime-1.0.36/qt4/restoredialog.py backintime-1.1.12/qt4/restoredialog.py --- backintime-1.0.36/qt4/restoredialog.py 1970-01-01 00:00:00.000000000 +0000 +++ backintime-1.1.12/qt4/restoredialog.py 2016-01-11 18:07:58.000000000 +0000 @@ -0,0 +1,140 @@ +# Back In Time +# Copyright (C) 2008-2016 Oprea Dan, Bart de Koning, Richard Bailey, Germar Reitze +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + +import os +import gettext + +import tools + +from PyQt4.QtGui import * +from PyQt4.QtCore import * + +import qt4tools + + +_=gettext.gettext + + +def restore( parent, snapshot_id, what, where = '', **kwargs ): + if where is None: + where = qt4tools.getExistingDirectory( parent, _('Restore to ...') ) + if not where: + return + where = parent.config.prepare_path( where ) + + rd = RestoreDialog(parent, snapshot_id, what, where, **kwargs) + rd.exec() + +class RestoreDialog( QDialog ): + def __init__( self, parent, snapshot_id, what, where = '', **kwargs ): + super(RestoreDialog, self).__init__(parent) + self.resize( 600, 500 ) + + self.config = parent.config + self.current_profile = self.config.get_current_profile() + self.snapshots = parent.snapshots + self.snapshot_id = snapshot_id + self.what = what + self.where = where + self.kwargs = kwargs + import icon + + self.log_file = self.config.get_restore_log_file() + if os.path.exists(self.log_file): + os.remove(self.log_file) + + self.setWindowIcon(icon.RESTORE_DIALOG) + self.setWindowTitle( _( 'Restore' ) ) + + self.main_layout = QVBoxLayout(self) + + #text view + self.txt_log_view = QPlainTextEdit(self) + self.txt_log_view.setReadOnly(True) + self.txt_log_view.setLineWrapMode(QPlainTextEdit.NoWrap) + self.txt_log_view.setMaximumBlockCount(100000) + self.main_layout.addWidget(self.txt_log_view) + + #buttons + button_box = QDialogButtonBox(QDialogButtonBox.Close) + showLog = button_box.addButton(_('Show full Log'), QDialogButtonBox.ActionRole) + self.main_layout.addWidget(button_box) + self.btn_close = button_box.button(QDialogButtonBox.Close) + self.btn_close.setEnabled(False) + button_box.rejected.connect(self.close) + showLog.clicked.connect(lambda: QDesktopServices.openUrl(QUrl(self.log_file))) + + #restore in separate thread + self.thread = RestoreThread(self) + self.thread.finished.connect(self.threadFinished) + + #refresh log every 200ms + self.refreshTimer = QTimer(self) + self.refreshTimer.setInterval(200) + self.refreshTimer.setSingleShot(False) + self.refreshTimer.timeout.connect(self.refreshLog) + + def refreshLog(self): + """get new log from thread + """ + newLog = self.thread.buffer[:] + size = len(newLog) + if size: + self.thread.mutex.lock() + self.thread.buffer = self.thread.buffer[size:] + self.thread.mutex.unlock() + self.txt_log_view.appendPlainText(newLog.rstrip('\n')) + + def exec(self): + #inhibit suspend/hibernate during restore + self.config.inhibitCookie = tools.inhibitSuspend(toplevel_xid = self.config.xWindowId, reason = 'restoring') + self.show() + self.refreshTimer.start() + self.thread.start() + super(RestoreDialog, self).exec() + self.refreshTimer.stop() + self.thread.wait() + + def threadFinished(self): + self.btn_close.setEnabled(True) + #release inhibit suspend + if self.config.inhibitCookie: + self.config.inhibitCookie = tools.unInhibitSuspend(*self.config.inhibitCookie) + +class RestoreThread(QThread): + """run restore in a separate Thread to prevent GUI freeze and speed up restore + """ + def __init__(self, parent): + super(RestoreThread, self).__init__() + self.parent = parent + self.log = open(parent.log_file, 'wt') + self.mutex = QMutex() + self.buffer = '' + + def run(self): + self.parent.snapshots.restore(self.parent.snapshot_id, self.parent.what, self.callback, self.parent.where, **self.parent.kwargs) + self.log.close() + + def callback(self, line, *args): + """write into log file and provide thread save string for log window + """ + line += '\n' + self.log.write(line) + self.mutex.lock() + self.buffer += line + self.mutex.unlock() diff -Nru backintime-1.0.36/qt4/serviceHelper.py backintime-1.1.12/qt4/serviceHelper.py --- backintime-1.0.36/qt4/serviceHelper.py 1970-01-01 00:00:00.000000000 +0000 +++ backintime-1.1.12/qt4/serviceHelper.py 2016-01-11 18:07:58.000000000 +0000 @@ -0,0 +1,272 @@ +# (from BackInTime) +# Copyright (C) 2015-2016 Germar Reitze +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +# (from jockey) +# (c) 2008 Canonical Ltd. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +# (from python-dbus-docs) +# Copyright (C) 2004-2006 Red Hat Inc. +# Copyright (C) 2005-2007 Collabora Ltd. +# +# Permission is hereby granted, free of charge, to any person +# obtaining a copy of this software and associated documentation +# files (the "Software"), to deal in the Software without +# restriction, including without limitation the rights to use, copy, +# modify, merge, publish, distribute, sublicense, and/or sell copies +# of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# +# This file was modified by David D. Lowe in 2009. +# To the extent possible under law, David D. Lowe has waived all +# copyright and related or neighboring rights to his modifications to +# this file under this license: http://creativecommons.org/publicdomain/zero/1.0/ + +import os +import re +from subprocess import Popen, PIPE +try: + import pwd +except ImportError: + pwd = None + +import dbus +import dbus.service +import dbus.mainloop.qt +from PyQt4.QtCore import QCoreApplication + +UDEV_RULES_PATH = '/etc/udev/rules.d/99-backintime-%s.rules' + +class InvalidChar(dbus.DBusException): + _dbus_error_name = 'net.launchpad.backintime.InvalidChar' + +class PermissionDeniedByPolicy(dbus.DBusException): + _dbus_error_name = 'com.ubuntu.DeviceDriver.PermissionDeniedByPolicy' + +class UdevRules(dbus.service.Object): + def __init__(self, conn=None, object_path=None, bus_name=None): + super(UdevRules, self).__init__(conn, object_path, bus_name) + + # the following variables are used by _checkPolkitPrivilege + self.polkit = None + self.enforce_polkit = True + + self.tmpDict = {} + + #find su path + proc = Popen(['which', 'su'], stdout = PIPE) + self.su = proc.communicate()[0].strip().decode() + if proc.returncode or not self.su: + self.su = '/bin/su' + + @dbus.service.method("net.launchpad.backintime.serviceHelper.UdevRules", + in_signature='ss', out_signature='', + sender_keyword='sender', connection_keyword='conn') + def addRule(self, cmd, uuid, sender=None, conn=None): + """Receive command and uuid and create an Udev rule out of this. + This is done on the service side to prevent malicious code to + run as root. + """ + #prevent breaking out of su command + chars = re.findall(r'[^a-zA-Z0-9-/\.>& ]', cmd) + if chars: + raise InvalidChar("Parameter 'cmd' contains invalid character(s) %s" + % '|'.join(set(chars)) ) + #only allow relevant chars in uuid + chars = re.findall(r'[^a-zA-Z0-9-]', uuid) + if chars: + raise InvalidChar("Parameter 'uuid' contains invalid character(s) %s" + % '|'.join(set(chars)) ) + + info = SenderInfo(sender, conn) + user = info.connectionUnixUser() + owner = info.nameOwner() + + #create su command + sucmd = "%s - '%s' -c '%s'" %(self.su, user, cmd) + #create Udev rule + rule = 'ACTION=="add", ENV{ID_FS_UUID}=="%s", RUN+="%s"\n' %(uuid, sucmd) + + #store rule + if not owner in self.tmpDict: + self.tmpDict[owner] = [] + self.tmpDict[owner].append(rule) + + @dbus.service.method("net.launchpad.backintime.serviceHelper.UdevRules", + in_signature='', out_signature='b', + sender_keyword='sender', connection_keyword='conn') + def save(self, sender=None, conn=None): + """Save rules to destiantion file after user authenticated as admin. + This will first check if there are any changes between + temporary added rules and current rules in destiantion file. + Returns False if files are identical or no rules to be installed. + """ + info = SenderInfo(sender, conn) + user = info.connectionUnixUser() + owner = info.nameOwner() + + #delete rule if no rules in tmp + if not owner in self.tmpDict or not self.tmpDict[owner]: + self.delete(sender, conn) + return False + #return False if rule already exist. + if os.path.exists(UDEV_RULES_PATH % user): + with open(UDEV_RULES_PATH % user, 'r') as f: + if self.tmpDict[owner] == f.readlines(): + self._clean(owner) + return False + #auth to save changes + self._checkPolkitPrivilege(sender, conn, 'net.launchpad.backintime.UdevRuleSave') + with open(UDEV_RULES_PATH % user, 'w') as f: + f.writelines(self.tmpDict[owner]) + self._clean(owner) + return True + + @dbus.service.method("net.launchpad.backintime.serviceHelper.UdevRules", + in_signature='', out_signature='', + sender_keyword='sender', connection_keyword='conn') + def delete(self, sender=None, conn=None): + """Delete existing Udev rule + """ + info = SenderInfo(sender, conn) + user = info.connectionUnixUser() + owner = info.nameOwner() + self._clean(owner) + if os.path.exists(UDEV_RULES_PATH % user): + #auth to delete rule + self._checkPolkitPrivilege(sender, conn, 'net.launchpad.backintime.UdevRuleDelete') + os.remove(UDEV_RULES_PATH % user) + + @dbus.service.method("net.launchpad.backintime.serviceHelper.UdevRules", + in_signature='', out_signature='', + sender_keyword='sender', connection_keyword='conn') + def clean(self, sender=None, conn=None): + """clean up previous cached rules + """ + info = SenderInfo(sender, conn) + self._clean(info.nameOwner()) + + def _clean(self, owner): + if owner in self.tmpDict: + del self.tmpDict[owner] + + def _initPolkit(self): + if self.polkit is None: + self.polkit = dbus.Interface(dbus.SystemBus().get_object( + 'org.freedesktop.PolicyKit1', + '/org/freedesktop/PolicyKit1/Authority', False), + 'org.freedesktop.PolicyKit1.Authority') + + def _checkPolkitPrivilege(self, sender, conn, privilege): + # from jockey + '''Verify that sender has a given PolicyKit privilege. + + sender is the sender's (private) D-BUS name, such as ":1:42" + (sender_keyword in @dbus.service.methods). conn is + the dbus.Connection object (connection_keyword in + @dbus.service.methods). privilege is the PolicyKit privilege string. + + This method returns if the caller is privileged, and otherwise throws a + PermissionDeniedByPolicy exception. + ''' + if sender is None and conn is None: + # called locally, not through D-BUS + return + if not self.enforce_polkit: + # that happens for testing purposes when running on the session + # bus, and it does not make sense to restrict operations here + return + + info = SenderInfo(sender, conn) + + # get peer PID + pid = info.connectionPid() + + # query PolicyKit + self._initPolkit() + try: + # we don't need is_challenge return here, since we call with AllowUserInteraction + (is_auth, _, details) = self.polkit.CheckAuthorization( + ('unix-process', {'pid': dbus.UInt32(pid, variant_level=1), + 'start-time': dbus.UInt64(0, variant_level=1)}), + privilege, {'': ''}, dbus.UInt32(1), '', timeout=3000) + except dbus.DBusException as e: + if e._dbus_error_name == 'org.freedesktop.DBus.Error.ServiceUnknown': + # polkitd timed out, connect again + self.polkit = None + return self._checkPolkitPrivilege(sender, conn, privilege) + else: + raise + + if not is_auth: + raise PermissionDeniedByPolicy(privilege) + +class SenderInfo(object): + def __init__(self, sender, conn): + self.sender = sender + self.dbus_info = dbus.Interface(conn.get_object('org.freedesktop.DBus', + '/org/freedesktop/DBus/Bus', False), 'org.freedesktop.DBus') + + def connectionUnixUser(self): + uid = self.dbus_info.GetConnectionUnixUser(self.sender) + if pwd: + return pwd.getpwuid(uid).pw_name + else: + return uid + + def nameOwner(self): + return self.dbus_info.GetNameOwner(self.sender) + + def connectionPid(self): + return self.dbus_info.GetConnectionUnixProcessID(self.sender) + +if __name__ == '__main__': + dbus.mainloop.qt.DBusQtMainLoop(set_as_default=True) + + app = QCoreApplication([]) + + bus = dbus.SystemBus() + name = dbus.service.BusName("net.launchpad.backintime.serviceHelper", bus) + object = UdevRules(bus, '/UdevRules') + + print("Running BIT service.") + app.exec_() diff -Nru backintime-1.0.36/qt4/settingsdialog.py backintime-1.1.12/qt4/settingsdialog.py --- backintime-1.0.36/qt4/settingsdialog.py 1970-01-01 00:00:00.000000000 +0000 +++ backintime-1.1.12/qt4/settingsdialog.py 2016-01-11 18:07:58.000000000 +0000 @@ -0,0 +1,1993 @@ +# Back In Time +# Copyright (C) 2008-2016 Oprea Dan, Bart de Koning, Richard Bailey, Germar Reitze, Taylor Raack +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + +import os +import datetime +import gettext +import copy +import grp + +from PyQt4.QtGui import * +from PyQt4.QtCore import * + +import config +import tools +import qt4tools +import mount +import messagebox +from exceptions import MountException + +_=gettext.gettext + + +class SettingsDialog( QDialog ): + def __init__( self, parent ): + super(SettingsDialog, self).__init__(parent) + + self.parent = parent + self.config = parent.config + self.snapshots = parent.snapshots + self.config_copy_dict = copy.copy( self.config.dict ) + self.current_profile_org = self.config.get_current_profile() + import icon + self.icon = icon + + self.setWindowIcon(icon.SETTINGS_DIALOG) + self.setWindowTitle( _( 'Settings' ) ) + + self.main_layout = QVBoxLayout(self) + + #profiles + layout = QHBoxLayout() + self.main_layout.addLayout( layout ) + + layout.addWidget( QLabel( _('Profile:'), self ) ) + + self.first_update_all = True + self.disable_profile_changed = True + self.combo_profiles = QComboBox( self ) + layout.addWidget( self.combo_profiles, 1 ) + QObject.connect( self.combo_profiles, SIGNAL('currentIndexChanged(int)'), self.current_profile_changed ) + self.disable_profile_changed = False + + self.btn_edit_profile = QPushButton(icon.PROFILE_EDIT, _('Edit'), self ) + QObject.connect( self.btn_edit_profile, SIGNAL('clicked()'), self.edit_profile ) + layout.addWidget( self.btn_edit_profile ) + + # update to full system backup button + self.btn_modify_profile_for_full_system_backup = QPushButton(icon.ADD, _('Modify for Full System Backup'), self ) + QObject.connect( self.btn_modify_profile_for_full_system_backup, SIGNAL('clicked()'), self.modify_profile_for_full_system_backup ) + layout.addWidget( self.btn_modify_profile_for_full_system_backup ) + + self.btn_add_profile = QPushButton(icon.ADD, _('Add'), self) + QObject.connect( self.btn_add_profile, SIGNAL('clicked()'), self.add_profile ) + layout.addWidget( self.btn_add_profile ) + + self.btn_remove_profile = QPushButton(icon.REMOVE, _('Remove'), self) + QObject.connect( self.btn_remove_profile, SIGNAL('clicked()'), self.remove_profile ) + layout.addWidget( self.btn_remove_profile ) + + #TABs + self.tabs_widget = QTabWidget( self ) + self.main_layout.addWidget( self.tabs_widget ) + + #occupy whole space for tabs + scrollButtonDefault = self.tabs_widget.usesScrollButtons() + self.tabs_widget.setUsesScrollButtons(False) + + #TAB: General + scrollArea = QScrollArea(self) + scrollArea.setFrameStyle(QFrame.NoFrame) + self.tabs_widget.addTab( scrollArea, _( 'General' ) ) + + layoutWidget = QWidget(self) + layout = QVBoxLayout(layoutWidget) + + #select mode + self.mode = None + vlayout = QVBoxLayout() + layout.addLayout( vlayout ) + + self.lbl_modes = QLabel( _( 'Mode:' ), self ) + + self.combo_modes = QComboBox( self ) + hlayout = QHBoxLayout() + hlayout.addWidget(self.lbl_modes) + hlayout.addWidget(self.combo_modes, 1) + vlayout.addLayout(hlayout) + store_modes = {} + for key in list(self.config.SNAPSHOT_MODES.keys()): + store_modes[key] = self.config.SNAPSHOT_MODES[key][1] + self.fill_combo( self.combo_modes, store_modes ) + + #encfs security warning + self.encfsWarning = QLabel(_("Warning: %(app)s uses EncFS for encryption. A recent security audit " + "revealed several possible attack vectors for this. " + "Please take a look at 'A NOTE ON SECURITY' in 'man backintime'.") \ + % {'app': self.config.APP_NAME} ) + self.encfsWarning.setWordWrap(True) + layout.addWidget(self.encfsWarning) + + #Where to save snapshots + group_box = QGroupBox( self ) + self.mode_local = group_box + group_box.setTitle( _( 'Where to save snapshots' ) ) + layout.addWidget( group_box ) + + vlayout = QVBoxLayout( group_box ) + + hlayout = QHBoxLayout() + vlayout.addLayout( hlayout ) + + self.edit_snapshots_path = QLineEdit( self ) + self.edit_snapshots_path.setReadOnly( True ) + QObject.connect( self.edit_snapshots_path, SIGNAL('textChanged(QString)'), self.on_full_path_changed ) + hlayout.addWidget( self.edit_snapshots_path ) + + self.btn_snapshots_path = QToolButton(self) + self.btn_snapshots_path.setToolButtonStyle(Qt.ToolButtonIconOnly) + self.btn_snapshots_path.setIcon(icon.FOLDER) + self.btn_snapshots_path.setText(_('Folder')) + self.btn_snapshots_path.setMinimumSize(32,28) + hlayout.addWidget( self.btn_snapshots_path ) + QObject.connect( self.btn_snapshots_path, SIGNAL('clicked()'), self.on_btn_snapshots_path_clicked ) + + #SSH + group_box = QGroupBox( self ) + self.mode_ssh = group_box + group_box.setTitle( _( 'SSH Settings' ) ) + layout.addWidget( group_box ) + + vlayout = QVBoxLayout( group_box ) + + hlayout1 = QHBoxLayout() + vlayout.addLayout( hlayout1 ) + hlayout2 = QHBoxLayout() + vlayout.addLayout( hlayout2 ) + hlayout3 = QHBoxLayout() + vlayout.addLayout( hlayout3 ) + + self.lbl_ssh_host = QLabel( _( 'Host:' ), self ) + hlayout1.addWidget( self.lbl_ssh_host ) + self.txt_ssh_host = QLineEdit( self ) + hlayout1.addWidget( self.txt_ssh_host ) + + self.lbl_ssh_port = QLabel( _( 'Port:' ), self ) + hlayout1.addWidget( self.lbl_ssh_port ) + self.txt_ssh_port = QLineEdit( self ) + hlayout1.addWidget( self.txt_ssh_port ) + + self.lbl_ssh_user = QLabel( _( 'User:' ), self ) + hlayout1.addWidget( self.lbl_ssh_user ) + self.txt_ssh_user = QLineEdit( self ) + hlayout1.addWidget( self.txt_ssh_user ) + + self.lbl_ssh_path = QLabel( _( 'Path:' ), self ) + hlayout2.addWidget( self.lbl_ssh_path ) + self.txt_ssh_path = QLineEdit( self ) + QObject.connect( self.txt_ssh_path, SIGNAL('textChanged(QString)'), self.on_full_path_changed ) + hlayout2.addWidget( self.txt_ssh_path ) + + self.lbl_ssh_cipher = QLabel( _( 'Cipher:' ), self ) + hlayout3.addWidget( self.lbl_ssh_cipher ) + self.combo_ssh_cipher = QComboBox( self ) + hlayout3.addWidget( self.combo_ssh_cipher ) + self.fill_combo( self.combo_ssh_cipher, self.config.SSH_CIPHERS ) + + self.lbl_ssh_private_key_file = QLabel( _( 'Private Key:' ), self ) + hlayout3.addWidget( self.lbl_ssh_private_key_file ) + self.txt_ssh_private_key_file = QLineEdit( self ) + self.txt_ssh_private_key_file.setReadOnly( True ) + hlayout3.addWidget( self.txt_ssh_private_key_file ) + + self.btn_ssh_private_key_file = QToolButton(self) + self.btn_ssh_private_key_file.setToolButtonStyle(Qt.ToolButtonIconOnly) + self.btn_ssh_private_key_file.setIcon(icon.FOLDER) + self.btn_ssh_private_key_file.setText(_('Key File')) + self.btn_ssh_private_key_file.setMinimumSize(32,28) + hlayout3.addWidget( self.btn_ssh_private_key_file ) + QObject.connect( self.btn_ssh_private_key_file, SIGNAL('clicked()'), self.on_btn_ssh_private_key_file_clicked ) + qt4tools.equal_indent(self.lbl_ssh_host, self.lbl_ssh_path, self.lbl_ssh_cipher) + + #encfs + self.mode_local_encfs = self.mode_local + self.mode_ssh_encfs = self.mode_ssh + + #password + group_box = QGroupBox( self ) + self.frame_password_1 = group_box + group_box.setTitle( _( 'Password' ) ) + layout.addWidget( group_box ) + + vlayout = QVBoxLayout( group_box ) + hlayout1 = QHBoxLayout() + vlayout.addLayout(hlayout1) + hlayout2 = QHBoxLayout() + vlayout.addLayout(hlayout2) + + self.lbl_password_1 = QLabel( _( 'Password' ), self ) + hlayout1.addWidget( self.lbl_password_1 ) + self.txt_password_1 = QLineEdit( self ) + self.txt_password_1.setEchoMode(QLineEdit.Password) + hlayout1.addWidget( self.txt_password_1 ) + + self.lbl_password_2 = QLabel( _( 'Password' ), self ) + hlayout2.addWidget( self.lbl_password_2 ) + self.txt_password_2 = QLineEdit( self ) + self.txt_password_2.setEchoMode(QLineEdit.Password) + hlayout2.addWidget( self.txt_password_2 ) + + self.cb_password_save = QCheckBox( _( 'Save Password to Keyring' ), self ) + vlayout.addWidget( self.cb_password_save ) + + self.cb_password_use_cache = QCheckBox( _( 'Cache Password for Cron (Security issue: root can read password)' ), self ) + vlayout.addWidget( self.cb_password_use_cache ) + + self.keyring_supported = tools.keyring_supported() + self.cb_password_save.setEnabled(self.keyring_supported) + + #mode change + QObject.connect( self.combo_modes, SIGNAL('currentIndexChanged(int)'), self.on_combo_modes_changed ) + + #host, user, profile id + group_box = QGroupBox( self ) + self.frame_advanced = group_box + group_box.setTitle( _( 'Advanced' ) ) + layout.addWidget( group_box ) + + hlayout = QHBoxLayout( group_box ) + hlayout.addSpacing( 12 ) + + vlayout2 = QVBoxLayout() + hlayout.addLayout( vlayout2 ) + + hlayout2 = QHBoxLayout() + vlayout2.addLayout( hlayout2 ) + + self.lbl_host = QLabel( _( 'Host:' ), self ) + hlayout2.addWidget( self.lbl_host ) + self.txt_host = QLineEdit( self ) + QObject.connect( self.txt_host, SIGNAL('textChanged(QString)'), self.on_full_path_changed ) + hlayout2.addWidget( self.txt_host ) + + self.lbl_user = QLabel( _( 'User:' ), self ) + hlayout2.addWidget( self.lbl_user ) + self.txt_user = QLineEdit( self ) + QObject.connect( self.txt_user, SIGNAL('textChanged(QString)'), self.on_full_path_changed ) + hlayout2.addWidget( self.txt_user ) + + self.lbl_profile = QLabel( _( 'Profile:' ), self ) + hlayout2.addWidget( self.lbl_profile ) + self.txt_profile = QLineEdit( self ) + QObject.connect( self.txt_profile, SIGNAL('textChanged(QString)'), self.on_full_path_changed ) + hlayout2.addWidget( self.txt_profile ) + + self.lbl_full_path = QLabel(_('Full snapshot path: '), self) + self.lbl_full_path.setWordWrap(True) + vlayout2.addWidget(self.lbl_full_path) + + #Schedule + group_box = QGroupBox( self ) + self.global_schedule_group_box = group_box + group_box.setTitle( _( 'Schedule' ) ) + layout.addWidget( group_box ) + + glayout = QGridLayout( group_box ) + glayout.setColumnStretch(1, 2) + + self.combo_automatic_snapshots = QComboBox( self ) + glayout.addWidget( self.combo_automatic_snapshots, 0, 0, 1, 2 ) + self.fill_combo( self.combo_automatic_snapshots, self.config.AUTOMATIC_BACKUP_MODES ) + + self.lbl_automatic_snapshots_day = QLabel( _( 'Day:' ), self ) + self.lbl_automatic_snapshots_day.setContentsMargins( 5, 0, 0, 0 ) + self.lbl_automatic_snapshots_day.setAlignment( Qt.AlignRight | Qt.AlignVCenter ) + glayout.addWidget( self.lbl_automatic_snapshots_day, 1, 0 ) + + self.combo_automatic_snapshots_day = QComboBox( self ) + glayout.addWidget( self.combo_automatic_snapshots_day, 1, 1 ) + + for d in range( 1, 29 ): + self.combo_automatic_snapshots_day.addItem( QIcon(), str(d), d ) + + self.lbl_automatic_snapshots_weekday = QLabel( _( 'Weekday:' ), self ) + self.lbl_automatic_snapshots_weekday.setContentsMargins( 5, 0, 0, 0 ) + self.lbl_automatic_snapshots_weekday.setAlignment( Qt.AlignRight | Qt.AlignVCenter ) + glayout.addWidget( self.lbl_automatic_snapshots_weekday, 2, 0 ) + + self.combo_automatic_snapshots_weekday = QComboBox( self ) + glayout.addWidget( self.combo_automatic_snapshots_weekday, 2, 1 ) + + for d in range( 1, 8 ): + self.combo_automatic_snapshots_weekday.addItem( QIcon(), datetime.date(2011, 11, 6 + d).strftime("%A"), d ) + + self.lbl_automatic_snapshots_time = QLabel( _( 'Hour:' ), self ) + self.lbl_automatic_snapshots_time.setContentsMargins( 5, 0, 0, 0 ) + self.lbl_automatic_snapshots_time.setAlignment( Qt.AlignRight | Qt.AlignVCenter ) + glayout.addWidget( self.lbl_automatic_snapshots_time, 3, 0 ) + + self.combo_automatic_snapshots_time = QComboBox( self ) + glayout.addWidget( self.combo_automatic_snapshots_time, 3, 1 ) + + for t in range( 0, 2300, 100 ): + self.combo_automatic_snapshots_time.addItem( QIcon(), datetime.time( t//100, t%100 ).strftime("%H:%M"), t ) + + self.lbl_automatic_snapshots_time_custom = QLabel( _( 'Hours:' ), self ) + self.lbl_automatic_snapshots_time_custom.setContentsMargins( 5, 0, 0, 0 ) + self.lbl_automatic_snapshots_time_custom.setAlignment( Qt.AlignRight | Qt.AlignVCenter ) + glayout.addWidget( self.lbl_automatic_snapshots_time_custom, 4, 0 ) + + self.txt_automatic_snapshots_time_custom = QLineEdit( self ) + glayout.addWidget( self.txt_automatic_snapshots_time_custom, 4, 1 ) + + #anacron + self.lbl_automatic_snapshots_anacron = QLabel(_('Run Back In Time repeatedly. This is useful if the computer is not running regular.')) + self.lbl_automatic_snapshots_anacron.setContentsMargins( 5, 0, 0, 0 ) + self.lbl_automatic_snapshots_anacron.setWordWrap(True) + glayout.addWidget(self.lbl_automatic_snapshots_anacron, 5, 0, 1, 2) + + self.lbl_automatic_snapshots_anacron_period = QLabel(_('Every:')) + self.lbl_automatic_snapshots_anacron_period.setContentsMargins( 5, 0, 0, 0 ) + self.lbl_automatic_snapshots_anacron_period.setAlignment( Qt.AlignRight | Qt.AlignVCenter ) + glayout.addWidget(self.lbl_automatic_snapshots_anacron_period, 7, 0) + + hlayout = QHBoxLayout() + self.sb_automatic_snapshots_anacron_period = QSpinBox(self) + self.sb_automatic_snapshots_anacron_period.setSingleStep( 1 ) + self.sb_automatic_snapshots_anacron_period.setRange( 1, 10000 ) + hlayout.addWidget(self.sb_automatic_snapshots_anacron_period) + + self.combo_automatic_snapshots_anacron_unit = QComboBox( self ) + self.fill_combo( self.combo_automatic_snapshots_anacron_unit, self.config.REPEATEDLY_UNITS ) + hlayout.addWidget(self.combo_automatic_snapshots_anacron_unit) + hlayout.addStretch() + glayout.addLayout(hlayout, 7, 1) + + #udev + self.lbl_automatic_snapshots_udev = QLabel(_('Run Back In Time as soon as the drive is connected (only once every X days).\nYou will be prompted for your sudo password.')) + self.lbl_automatic_snapshots_udev.setWordWrap(True) + glayout.addWidget(self.lbl_automatic_snapshots_udev, 6, 0, 1, 2) + + QObject.connect( self.combo_automatic_snapshots, SIGNAL('currentIndexChanged(int)'), self.current_automatic_snapshot_changed ) + + # + layout.addStretch() + scrollArea.setWidget(layoutWidget) + scrollArea.setWidgetResizable(True) + + #TAB: Include + tab_widget = QWidget( self ) + self.tabs_widget.addTab( tab_widget, _( 'Include' ) ) + layout = QVBoxLayout( tab_widget ) + + self.list_include = QTreeWidget( self ) + self.list_include.setSelectionMode(QAbstractItemView.ExtendedSelection) + self.list_include.setRootIsDecorated( False ) + self.list_include.setHeaderLabels( [ _('Include files and folders'), + 'Count' ] ) + + self.list_include_header = self.list_include.header() + self.list_include_header.setResizeMode( 0, QHeaderView.Stretch ) + self.list_include_header.setClickable(True) + self.list_include_header.setSortIndicatorShown(True) + self.list_include_header.setSectionHidden(1, True) + self.list_include_sort_loop = False + QObject.connect(self.list_include_header, + SIGNAL('sortIndicatorChanged(int,Qt::SortOrder)'), + self.includeCustomSortOrder ) + + layout.addWidget( self.list_include ) + self.list_include_count = 0 + + buttons_layout = QHBoxLayout() + layout.addLayout( buttons_layout ) + + self.btn_include_file_add = QPushButton(icon.ADD, _('Add file'), self) + buttons_layout.addWidget( self.btn_include_file_add ) + QObject.connect( self.btn_include_file_add, SIGNAL('clicked()'), self.on_btn_include_file_add_clicked ) + + self.btn_include_add = QPushButton(icon.ADD, _('Add folder'), self) + buttons_layout.addWidget( self.btn_include_add ) + QObject.connect( self.btn_include_add, SIGNAL('clicked()'), self.on_btn_include_add_clicked ) + + self.btn_include_remove = QPushButton(icon.REMOVE, _('Remove'), self) + buttons_layout.addWidget( self.btn_include_remove ) + QObject.connect( self.btn_include_remove, SIGNAL('clicked()'), self.on_btn_include_remove_clicked ) + + #TAB: Exclude + tab_widget = QWidget( self ) + self.tabs_widget.addTab( tab_widget, _( 'Exclude' ) ) + layout = QVBoxLayout( tab_widget ) + + label = QLabel( _('Warning: Wildcards (\'foo*\', \'[fF]oo\', \'fo?\') will be ignored with mode \'SSH encrypted\'.\nOnly separate asterisk are allowed (\'foo/*\', \'foo/**/bar\')'), self ) + label.setWordWrap(True) + self.lbl_ssh_encfs_exclude_warning = label + layout.addWidget( label ) + + self.list_exclude = QTreeWidget( self ) + self.list_exclude.setSelectionMode(QAbstractItemView.ExtendedSelection) + self.list_exclude.setRootIsDecorated( False ) + self.list_exclude.setHeaderLabels( [ _('Exclude patterns, files or folders') , + 'Count' ] ) + + self.list_exclude_header = self.list_exclude.header() + self.list_exclude_header.setResizeMode( 0, QHeaderView.Stretch ) + self.list_exclude_header.setClickable(True) + self.list_exclude_header.setSortIndicatorShown(True) + self.list_exclude_header.setSectionHidden(1, True) + self.list_exclude_sort_loop = False + QObject.connect(self.list_exclude_header, + SIGNAL('sortIndicatorChanged(int,Qt::SortOrder)'), + self.excludeCustomSortOrder ) + + layout.addWidget( self.list_exclude ) + self.list_exclude_count = 0 + + label = QLabel( _('Highly recommended:'), self ) + qt4tools.set_font_bold( label ) + layout.addWidget( label ) + label = QLabel( ', '.join(sorted(self.config.DEFAULT_EXCLUDE)), self ) + label.setWordWrap(True) + layout.addWidget( label ) + + buttons_layout = QHBoxLayout() + layout.addLayout( buttons_layout ) + + self.btn_exclude_add = QPushButton(icon.ADD, _('Add'), self) + buttons_layout.addWidget( self.btn_exclude_add ) + QObject.connect( self.btn_exclude_add, SIGNAL('clicked()'), self.on_btn_exclude_add_clicked ) + + self.btn_exclude_file = QPushButton(icon.ADD, _('Add file'), self) + buttons_layout.addWidget( self.btn_exclude_file ) + QObject.connect( self.btn_exclude_file, SIGNAL('clicked()'), self.on_btn_exclude_file_clicked ) + + self.btn_exclude_folder = QPushButton(icon.ADD, _('Add folder'), self) + buttons_layout.addWidget( self.btn_exclude_folder ) + QObject.connect( self.btn_exclude_folder, SIGNAL('clicked()'), self.on_btn_exclude_folder_clicked ) + + self.btn_exclude_default = QPushButton(icon.DEFAULT_EXCLUDE, _('Add default'), self) + buttons_layout.addWidget(self.btn_exclude_default) + QObject.connect(self.btn_exclude_default, SIGNAL('clicked()'), self.on_btn_exclude_default_clicked) + + self.btn_exclude_remove = QPushButton(icon.REMOVE, _('Remove'), self) + buttons_layout.addWidget( self.btn_exclude_remove ) + QObject.connect( self.btn_exclude_remove, SIGNAL('clicked()'), self.on_btn_exclude_remove_clicked ) + + #exclude files by size + hlayout = QHBoxLayout() + layout.addLayout(hlayout) + self.cb_exclude_files_by_size = QCheckBox(_('Exclude files bigger than: '), self) + self.cb_exclude_files_by_size.setToolTip(_('Exclude files bigger than value in %(prefix)s.\n' +\ + 'With \'Full rsync mode\' disabled this will only affect new files\n' +\ + 'because for rsync this is a transfer option, not an exclude option.\n' +\ + 'So big files that has been backed up before will remain in snapshots\n' +\ + 'even if they had changed.' %{'prefix': 'MiB'})) + hlayout.addWidget(self.cb_exclude_files_by_size) + self.sb_exclude_files_by_size = QSpinBox(self) + self.sb_exclude_files_by_size.setSuffix(' MiB') + self.sb_exclude_files_by_size.setRange( 0, 100000000 ) + hlayout.addWidget(self.sb_exclude_files_by_size) + hlayout.addStretch() + enabled = lambda state: self.sb_exclude_files_by_size.setEnabled(state) + enabled(False) + QObject.connect(self.cb_exclude_files_by_size, SIGNAL('stateChanged(int)'), enabled) + + #TAB: Auto-remove + scrollArea = QScrollArea(self) + scrollArea.setFrameStyle(QFrame.NoFrame) + self.tabs_widget.addTab( scrollArea, _( 'Auto-remove' ) ) + + layoutWidget = QWidget(self) + layout = QGridLayout(layoutWidget) + + + #remove old snapshots + self.cb_remove_older_then = QCheckBox( _( 'Older than:' ), self ) + layout.addWidget( self.cb_remove_older_then, 0, 0 ) + QObject.connect( self.cb_remove_older_then, SIGNAL('stateChanged(int)'), self.update_remove_older_than ) + + self.edit_remove_older_then = QSpinBox(self) + self.edit_remove_older_then.setRange(1, 1000) + layout.addWidget( self.edit_remove_older_then, 0, 1 ) + + self.combo_remove_older_then = QComboBox( self ) + layout.addWidget( self.combo_remove_older_then, 0, 2 ) + self.fill_combo( self.combo_remove_older_then, self.config.REMOVE_OLD_BACKUP_UNITS ) + + #min free space + enabled, value, unit = self.config.get_min_free_space() + + self.cb_min_free_space = QCheckBox( _( 'If free space is less than:' ), self ) + layout.addWidget( self.cb_min_free_space, 1, 0 ) + QObject.connect( self.cb_min_free_space, SIGNAL('stateChanged(int)'), self.update_min_free_space ) + + self.edit_min_free_space = QSpinBox(self) + self.edit_min_free_space.setRange(1, 1000) + layout.addWidget( self.edit_min_free_space, 1, 1 ) + + self.combo_min_free_space = QComboBox( self ) + layout.addWidget( self.combo_min_free_space, 1, 2 ) + self.fill_combo( self.combo_min_free_space, self.config.MIN_FREE_SPACE_UNITS ) + + #min free inodes + self.cb_min_free_inodes = QCheckBox( _('If free inodes is less than:'), self) + layout.addWidget(self.cb_min_free_inodes, 2, 0) + + self.edit_min_free_inodes = QSpinBox(self) + self.edit_min_free_inodes.setSuffix(' %') + self.edit_min_free_inodes.setSingleStep( 1 ) + self.edit_min_free_inodes.setRange( 0, 15 ) + layout.addWidget(self.edit_min_free_inodes, 2, 1) + + enabled = lambda state: self.edit_min_free_inodes.setEnabled(state) + enabled(False) + QObject.connect( self.cb_min_free_inodes, SIGNAL('stateChanged(int)'), enabled) + + #smart remove + self.cb_smart_remove = QCheckBox( _( 'Smart remove' ), self ) + layout.addWidget( self.cb_smart_remove, 3, 0 ) + + widget = QWidget( self ) + widget.setContentsMargins( 25, 0, 0, 0 ) + layout.addWidget( widget, 4, 0, 1, 3 ) + + smlayout = QGridLayout( widget ) + + self.cb_run_smart_remove_remote_in_background = QCheckBox(_('Run in background on remote Host.') + _(' EXPERIMENTAL!'), self) + smlayout.addWidget(self.cb_run_smart_remove_remote_in_background, 0, 0, 1, 3) + + smlayout.addWidget( QLabel( _( 'Keep all snapshots for the last' ), self ), 1, 0 ) + self.edit_keep_all = QSpinBox(self) + self.edit_keep_all.setRange(1, 10000) + smlayout.addWidget( self.edit_keep_all, 1, 1 ) + smlayout.addWidget( QLabel( _( 'day(s)' ), self ), 1, 2 ) + + smlayout.addWidget( QLabel( _( 'Keep one snapshot per day for the last' ), self ), 2, 0 ) + self.edit_keep_one_per_day = QSpinBox(self) + self.edit_keep_one_per_day.setRange(1, 10000) + smlayout.addWidget( self.edit_keep_one_per_day, 2, 1 ) + smlayout.addWidget( QLabel( _( 'day(s)' ), self ), 2, 2 ) + + smlayout.addWidget( QLabel( _( 'Keep one snapshot per week for the last' ), self ), 3, 0 ) + self.edit_keep_one_per_week = QSpinBox(self) + self.edit_keep_one_per_week.setRange(1, 10000) + smlayout.addWidget( self.edit_keep_one_per_week, 3, 1 ) + smlayout.addWidget( QLabel( _( 'weeks(s)' ), self ), 3, 2 ) + + smlayout.addWidget( QLabel( _( 'Keep one snapshot per month for the last' ), self ), 4, 0 ) + self.edit_keep_one_per_month = QSpinBox(self) + self.edit_keep_one_per_month.setRange(1, 1000) + smlayout.addWidget( self.edit_keep_one_per_month, 4, 1 ) + smlayout.addWidget( QLabel( _( 'month(s)' ), self ), 4, 2 ) + + smlayout.addWidget( QLabel( _( 'Keep one snapshot per year for all years' ), self ), 5, 0, 1, 3 ) + + enabled = lambda state: [smlayout.itemAt(x).widget().setEnabled(state) for x in range(smlayout.count())] + enabled(False) + QObject.connect( self.cb_smart_remove, SIGNAL('stateChanged(int)'), enabled) + + #don't remove named snapshots + self.cb_dont_remove_named_snapshots = QCheckBox( _( 'Don\'t remove named snapshots' ), self ) + layout.addWidget( self.cb_dont_remove_named_snapshots, 5, 0, 1, 3 ) + + # + layout.addWidget( QWidget(self), 6, 0 ) + layout.setRowStretch( 6, 2 ) + scrollArea.setWidget(layoutWidget) + scrollArea.setWidgetResizable(True) + + #TAB: Options + scrollArea = QScrollArea(self) + scrollArea.setFrameStyle(QFrame.NoFrame) + self.tabs_widget.addTab( scrollArea, _( 'Options' ) ) + + layoutWidget = QWidget(self) + layout = QVBoxLayout(layoutWidget) + + self.cb_notify_enabled = QCheckBox( _( 'Enable notifications' ), self ) + layout.addWidget( self.cb_notify_enabled ) + + self.cb_no_on_battery = QCheckBox( _( 'Disable snapshots when on battery' ), self ) + if not tools.power_status_available (): + self.cb_no_on_battery.setEnabled ( False ) + self.cb_no_on_battery.setToolTip ( _( 'Power status not available from system' ) ) + layout.addWidget( self.cb_no_on_battery ) + + self.cb_use_global_flock = QCheckBox(_('Run only one snapshot at a time')) + self.cb_use_global_flock.setToolTip(_('Other snapshots will be blocked until the current snapshot is done.\n' + 'This is a global option. So it will effect all profiles for this user.\n' + 'But you need to activate this for all other users, too.')) + layout.addWidget(self.cb_use_global_flock) + + self.cb_backup_on_restore = QCheckBox(_('Backup replaced files on restore'), self) + self.cb_backup_on_restore.setToolTip( _('Newer versions of files will be ' + 'renamed with trailing \'%(suffix)s\' ' + 'before restoring.\n' + 'If you don\'t need them anymore ' + 'you can remove them with \'%(cmd)s\'') + %{'suffix': self.snapshots.backup_suffix(), + 'cmd': 'find ./ -name "*%s" -delete' % self.snapshots.backup_suffix() }) + layout.addWidget( self.cb_backup_on_restore ) + + self.cb_continue_on_errors = QCheckBox( _( 'Continue on errors (keep incomplete snapshots)' ), self ) + layout.addWidget( self.cb_continue_on_errors ) + + self.cb_use_checksum = QCheckBox( _( 'Use checksum to detect changes' ), self ) + layout.addWidget( self.cb_use_checksum ) + + self.cb_full_rsync = QCheckBox( _( 'Full rsync mode. May be faster but:' ), self ) + label = QLabel( _('- snapshots are not read-only\n- destination file-system must support all Linux attributes (dates, rights, user, group ...)'), self) + label.setIndent(36) + label.setWordWrap(True) + QObject.connect( self.cb_full_rsync, SIGNAL('stateChanged(int)'), self.update_check_for_changes ) + layout.addWidget( self.cb_full_rsync ) + layout.addWidget( label ) + + self.cb_take_snapshot_regardless_of_changes = QCheckBox(_('Take a new snapshot regardless of there were changes or not.')) + layout.addWidget(self.cb_take_snapshot_regardless_of_changes) + + self.cb_check_for_changes = QCheckBox( _( 'Check for changes (don\'t take a new snapshot if nothing changed)' ), self ) + layout.addWidget( self.cb_check_for_changes ) + + #log level + hlayout = QHBoxLayout() + layout.addLayout( hlayout ) + + hlayout.addWidget( QLabel( _('Log Level:'), self ) ) + + self.combo_log_level = QComboBox( self ) + hlayout.addWidget( self.combo_log_level, 1 ) + + self.combo_log_level.addItem( QIcon(), _('None'), 0 ) + self.combo_log_level.addItem( QIcon(), _('Errors'), 1 ) + self.combo_log_level.addItem( QIcon(), _('Changes & Errors'), 2 ) + self.combo_log_level.addItem( QIcon(), _('All'), 3 ) + + # + layout.addStretch() + scrollArea.setWidget(layoutWidget) + scrollArea.setWidgetResizable(True) + + #TAB: Expert Options + scrollArea = QScrollArea(self) + scrollArea.setFrameStyle(QFrame.NoFrame) + self.tabs_widget.addTab( scrollArea, _( 'Expert Options' ) ) + + layoutWidget = QWidget(self) + layout = QVBoxLayout(layoutWidget) + + label = QLabel( _('Change these options only if you really know what you are doing !'), self ) + qt4tools.set_font_bold( label ) + layout.addWidget( label ) + + label = QLabel(_("Run 'nice':")) + layout.addWidget(label) + grid = QGridLayout() + grid.setColumnMinimumWidth(0, 20) + layout.addLayout(grid) + + self.cb_run_nice_from_cron = QCheckBox(_('as cron job') + self.printDefault(self.config.DEFAULT_RUN_NICE_FROM_CRON), self) + grid.addWidget(self.cb_run_nice_from_cron, 0, 1) + + self.cb_run_nice_on_remote = QCheckBox(_('on remote host') + self.printDefault(self.config.DEFAULT_RUN_NICE_ON_REMOTE), self) + grid.addWidget(self.cb_run_nice_on_remote, 1, 1) + + label = QLabel(_("Run 'ionice':")) + layout.addWidget(label) + grid = QGridLayout() + grid.setColumnMinimumWidth(0, 20) + layout.addLayout(grid) + + self.cb_run_ionice_from_cron = QCheckBox(_('as cron job') + self.printDefault(self.config.DEFAULT_RUN_IONICE_FROM_CRON), self) + grid.addWidget(self.cb_run_ionice_from_cron, 0, 1) + + self.cb_run_ionice_from_user = QCheckBox(_('when taking a manual snapshot') + self.printDefault(self.config.DEFAULT_RUN_IONICE_FROM_USER), self ) + grid.addWidget(self.cb_run_ionice_from_user, 1, 1) + + self.cb_run_ionice_on_remote = QCheckBox(_('on remote host') + self.printDefault(self.config.DEFAULT_RUN_IONICE_ON_REMOTE), self) + grid.addWidget(self.cb_run_ionice_on_remote, 2, 1) + + self.nocacheAvailable = tools.check_command('nocache') + label = QLabel(_("Run 'rsync' with 'nocache':")) + layout.addWidget(label) + grid = QGridLayout() + grid.setColumnMinimumWidth(0, 20) + layout.addLayout(grid) + + self.cb_run_nocache_on_local = QCheckBox(_('on local machine') + self.printDefault(self.config.DEFAULT_RUN_NOCACHE_ON_LOCAL), self) + self.cb_run_nocache_on_local.setEnabled(self.nocacheAvailable) + grid.addWidget(self.cb_run_nocache_on_local, 0, 1) + + self.cb_run_nocache_on_remote = QCheckBox(_('on remote host') + self.printDefault(self.config.DEFAULT_RUN_NOCACHE_ON_REMOTE), self) + grid.addWidget(self.cb_run_nocache_on_remote, 2, 1) + + self.cb_redirect_stdout = QCheckBox(_('Redirect stdout to /dev/null in cronjobs.') + + self.printDefault(self.config.DEFAULT_REDIRECT_STDOUT_IN_CRON), + self) + self.cb_redirect_stdout.setToolTip('cron will automatically send an email with attached output of cronjobs if a MTA is installed.') + layout.addWidget(self.cb_redirect_stdout) + + self.cb_redirect_stderr = QCheckBox(_('Redirect stderr to /dev/null in cronjobs.') + + self.printDefault(self.config.DEFAULT_REDIRECT_STDERR_IN_CRON), + self) + self.cb_redirect_stderr.setToolTip('cron will automatically send an email with attached errors of cronjobs if a MTA is installed.') + layout.addWidget(self.cb_redirect_stderr) + + #bwlimit + hlayout = QHBoxLayout() + layout.addLayout(hlayout) + self.cb_bwlimit = QCheckBox( _( 'Limit rsync bandwidth usage: ' ), self ) + hlayout.addWidget( self.cb_bwlimit ) + self.sb_bwlimit = QSpinBox(self) + self.sb_bwlimit.setSuffix( _(' KB/sec') ) + self.sb_bwlimit.setSingleStep( 100 ) + self.sb_bwlimit.setRange( 0, 1000000 ) + hlayout.addWidget(self.sb_bwlimit) + hlayout.addStretch() + enabled = lambda state: self.sb_bwlimit.setEnabled(state) + enabled(False) + QObject.connect( self.cb_bwlimit, SIGNAL('stateChanged(int)'), enabled) + self.cb_bwlimit.setToolTip( + 'uses \'rsync --bwlimit=RATE\'\n' + 'From \'man rsync\':\n' + 'This option allows you to specify the maximum transfer rate for\n' + 'the data sent over the socket, specified in units per second.\n' + 'The RATE value can be suffixed with a string to indicate a size\n' + 'multiplier, and may be a fractional value (e.g. "--bwlimit=1.5m").\n' + 'If no suffix is specified, the value will be assumed to be in\n' + 'units of 1024 bytes (as if "K" or "KiB" had been appended).\n' + 'See the --max-size option for a description of all the available\n' + 'suffixes. A value of zero specifies no limit.\n\n' + 'For backward-compatibility reasons, the rate limit will be\n' + 'rounded to the nearest KiB unit, so no rate smaller than\n' + '1024 bytes per second is possible.\n\n' + 'Rsync writes data over the socket in blocks, and this option\n' + 'both limits the size of the blocks that rsync writes, and tries\n' + 'to keep the average transfer rate at the requested limit.\n' + 'Some "burstiness" may be seen where rsync writes out a block\n' + 'of data and then sleeps to bring the average rate into compliance.\n\n' + 'Due to the internal buffering of data, the --progress option\n' + 'may not be an accurate reflection on how fast the data is being\n' + 'sent. This is because some files can show up as being rapidly\n' + 'sent when the data is quickly buffered, while other can show up\n' + 'as very slow when the flushing of the output buffer occurs.\n' + 'This may be fixed in a future version.' + ) + + self.cb_preserve_acl = QCheckBox( _( 'Preserve ACL' ), self ) + self.cb_preserve_acl.setToolTip( + 'uses \'rsync -A\'\n' + 'From \'man rsync\':\n' + 'This option causes rsync to update the destination ACLs to be\n' + 'the same as the source ACLs. The option also implies --perms.\n\n' + 'The source and destination systems must have compatible ACL\n' + 'entries for this option to work properly.\n' + 'See the --fake-super option for a way to backup and restore\n' + 'ACLs that are not compatible.' + ) + layout.addWidget( self.cb_preserve_acl ) + + self.cb_preserve_xattr = QCheckBox( _( 'Preserve extended attributes (xattr)' ), self ) + self.cb_preserve_xattr.setToolTip( + 'uses \'rsync -X\'\n' + 'From \'man rsync\':\n' + 'This option causes rsync to update the destination extended\n' + 'attributes to be the same as the source ones.\n\n' + 'For systems that support extended-attribute namespaces, a copy\n' + 'being done by a super-user copies all namespaces except\n' + 'system.*. A normal user only copies the user.* namespace.\n' + 'To be able to backup and restore non-user namespaces as a normal\n' + 'user, see the --fake-super option.\n\n' + 'Note that this option does not copy rsyncs special xattr values\n' + '(e.g. those used by --fake-super) unless you repeat the option\n' + '(e.g. -XX). This "copy all xattrs" mode cannot be used\n' + 'with --fake-super.' + ) + layout.addWidget( self.cb_preserve_xattr ) + + self.cb_copy_unsafe_links = QCheckBox( _( 'Copy unsafe links (works only with absolute links)' ), self ) + self.cb_copy_unsafe_links.setToolTip( + 'uses \'rsync --copy-unsafe-links\'\n' + 'From \'man rsync\':\n' + 'This tells rsync to copy the referent of symbolic links that\n' + 'point outside the copied tree. Absolute symlinks are also\n' + 'treated like ordinary files, and so are any symlinks in the\n' + 'source path itself when --relative is used. This option has\n' + 'no additional effect if --copy-links was also specified.\n' + ) + layout.addWidget( self.cb_copy_unsafe_links ) + + self.cb_copy_links = QCheckBox( _( 'Copy links (dereference symbolic links)' ), self ) + self.cb_copy_links.setToolTip( + 'uses \'rsync --copy-links\'\n' + 'From \'man rsync\':\n' + 'When symlinks are encountered, the item that they point to\n' + '(the referent) is copied, rather than the symlink. In older\n' + 'versions of rsync, this option also had the side-effect of\n' + 'telling the receiving side to follow symlinks, such as\n' + 'symlinks to directories. In a modern rsync such as this one,\n' + 'you\'ll need to specify --keep-dirlinks (-K) to get this extra\n' + 'behavior. The only exception is when sending files to an rsync\n' + 'that is too old to understand -K -- in that case, the -L option\n' + 'will still have the side-effect of -K on that older receiving rsync.' + ) + layout.addWidget( self.cb_copy_links ) + + #additional rsync options + hlayout = QHBoxLayout() + layout.addLayout(hlayout) + self.cb_rsync_options = QCheckBox( _('Paste additional options to rsync'), self) + hlayout.addWidget(self.cb_rsync_options) + self.txt_rsync_options = QLineEdit(self) + self.txt_rsync_options.setToolTip( _('Options must be quoted e.g. --exclude-from="/path/to/my exclude file".') ) + hlayout.addWidget(self.txt_rsync_options) + + enabled = lambda state: self.txt_rsync_options.setEnabled(state) + enabled(False) + QObject.connect( self.cb_rsync_options, SIGNAL('stateChanged(int)'), enabled) + + #ssh prefix + hlayout = QHBoxLayout() + layout.addLayout(hlayout) + self.cb_ssh_prefix = QCheckBox( _('Add prefix to SSH commands'), self) + hlayout.addWidget(self.cb_ssh_prefix) + self.txt_ssh_prefix = QLineEdit(self) + self.txt_ssh_prefix.setToolTip( _('Prefix to run before every command on remote host.\n' + 'Variables need to be escaped with \$FOO.\n' + 'This doesn\'t touch rsync. So to add a prefix\n' + 'for rsync use "%(cb_rsync_options)s" with\n' + '%(rsync_options_value)s\n\n' + '%(default)s: %(def_value)s') + % {'cb_rsync_options': self.cb_rsync_options.text(), + 'rsync_options_value': '--rsync-path="FOO=bar:\$FOO /usr/bin/rsync"', + 'default': _('default'), + 'def_value': self.config.DEFAULT_SSH_PREFIX}) + hlayout.addWidget(self.txt_ssh_prefix) + + enabled = lambda state: self.txt_ssh_prefix.setEnabled(state) + enabled(False) + QObject.connect( self.cb_ssh_prefix, SIGNAL('stateChanged(int)'), enabled) + + qt4tools.equal_indent(self.cb_rsync_options, self.cb_ssh_prefix) + + # + layout.addStretch() + scrollArea.setWidget(layoutWidget) + scrollArea.setWidgetResizable(True) + + #buttons + button_box = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel, parent = self) + btnRestore = button_box.addButton(_('Restore Config'), QDialogButtonBox.ResetRole) + QObject.connect(button_box, SIGNAL('accepted()'), self.accept) + QObject.connect(button_box, SIGNAL('rejected()'), self.reject) + QObject.connect(btnRestore, SIGNAL('clicked()'), self.restoreConfig) + self.main_layout.addWidget(button_box) + + self.update_profiles() + self.on_combo_modes_changed() + + #enable tabs scroll buttons again but keep dialog size + size = self.sizeHint() + self.tabs_widget.setUsesScrollButtons(scrollButtonDefault) + self.resize(size) + + def modify_profile_for_full_system_backup( self ): + # verify to user that settings will change + message = _("Full system backup can only create a snapshot to be restored to the same physical disk(s) " + "with the same disk partitioning as from the source; restoring to new physical disks or the same disks " + "with different partitioning will yield a potentially broken and unusable system.\n\n" + "Full system backup will override some settings that may have been customized. Continue?") + if QMessageBox.No == messagebox.warningYesNo(self, message): + return + + # configure for full system backup + # need full rsync + self.config.set_full_rsync(True) + # don't want to create a backup with any errors and give user false sense that backup was ok + self.config.set_continue_on_errors(False) + # make sure all files are backed up + self.config.set_exclude_by_size_enabled(False) + # when we restore the full system, don't want to keep old files (since we back up everything) + self.config.set_backup_on_restore(False) + # no need for checksum mode + self.config.set_use_checksum(False) + # must preserve ACLs and xattrs + self.config.set_preserve_acl(True) + self.config.set_preserve_xattr(True) + # don't want links + self.config.set_copy_links(False) + self.config.set_copy_unsafe_links(False) + # backup root + self.config.set_include( [ ("/", 0) ] ) + + # set UI + self.update_profiles() + + def add_profile( self ): + ret_val = QInputDialog.getText(self, _('New profile'), str() ) + if not ret_val[1]: + return + + name = ret_val[0].strip() + if not name: + return + + profile_id = self.config.add_profile( name ) + if profile_id is None: + return + + self.config.set_current_profile( profile_id ) + self.update_profiles() + + def edit_profile( self ): + ret_val = QInputDialog.getText(self, _('Rename profile'), str() ) + if not ret_val[1]: + return + + name = ret_val[0].strip() + if not name: + return + + if not self.config.set_profile_name( name ): + return + + self.update_profiles() + + def remove_profile( self ): + if self.question_handler( _('Are you sure you want to delete the profile "%s" ?') % self.config.get_profile_name() ): + self.config.remove_profile() + self.update_profiles() + + def update_automatic_snapshot_time( self, backup_mode ): + if backup_mode == self.config.CUSTOM_HOUR: + self.lbl_automatic_snapshots_time_custom.show() + self.txt_automatic_snapshots_time_custom.show() + else: + self.lbl_automatic_snapshots_time_custom.hide() + self.txt_automatic_snapshots_time_custom.hide() + + if backup_mode == self.config.WEEK: + self.lbl_automatic_snapshots_weekday.show() + self.combo_automatic_snapshots_weekday.show() + else: + self.lbl_automatic_snapshots_weekday.hide() + self.combo_automatic_snapshots_weekday.hide() + + if backup_mode == self.config.MONTH: + self.lbl_automatic_snapshots_day.show() + self.combo_automatic_snapshots_day.show() + else: + self.lbl_automatic_snapshots_day.hide() + self.combo_automatic_snapshots_day.hide() + + if backup_mode >= self.config.DAY: + self.lbl_automatic_snapshots_time.show() + self.combo_automatic_snapshots_time.show() + else: + self.lbl_automatic_snapshots_time.hide() + self.combo_automatic_snapshots_time.hide() + + if self.config.REPEATEDLY <= backup_mode <= self.config.UDEV: + self.lbl_automatic_snapshots_anacron_period.show() + self.sb_automatic_snapshots_anacron_period.show() + self.combo_automatic_snapshots_anacron_unit.show() + self.lbl_automatic_snapshots_time.hide() + self.combo_automatic_snapshots_time.hide() + else: + self.lbl_automatic_snapshots_anacron_period.hide() + self.sb_automatic_snapshots_anacron_period.hide() + self.combo_automatic_snapshots_anacron_unit.hide() + + if backup_mode == self.config.REPEATEDLY: + self.lbl_automatic_snapshots_anacron.show() + else: + self.lbl_automatic_snapshots_anacron.hide() + + if backup_mode == self.config.UDEV: + self.lbl_automatic_snapshots_udev.show() + else: + self.lbl_automatic_snapshots_udev.hide() + + def current_automatic_snapshot_changed( self, index ): + backup_mode = self.combo_automatic_snapshots.itemData( index ) + self.update_automatic_snapshot_time( backup_mode ) + + def current_profile_changed( self, index ): + if self.disable_profile_changed: + return + + profile_id = str( self.combo_profiles.itemData( index ) ) + if not profile_id: + return + + if profile_id != self.config.get_current_profile(): + self.save_profile() + self.config.set_current_profile( profile_id ) + self.update_profile() + + def update_check_for_changes(self): + enabled = not self.cb_full_rsync.isChecked() + self.cb_check_for_changes.setVisible(enabled) + self.cb_take_snapshot_regardless_of_changes.setVisible(not enabled) + + def update_profiles( self ): + self.update_profile() + current_profile_id = self.config.get_current_profile() + + self.disable_profile_changed = True + + self.combo_profiles.clear() + + profiles = self.config.get_profiles_sorted_by_name() + for profile_id in profiles: + self.combo_profiles.addItem( self.config.get_profile_name( profile_id ), profile_id ) + if profile_id == current_profile_id: + self.combo_profiles.setCurrentIndex( self.combo_profiles.count() - 1 ) + + self.disable_profile_changed = False + + def update_profile( self ): + if self.config.get_current_profile() == '1': + self.btn_edit_profile.setEnabled( False ) + self.btn_remove_profile.setEnabled( False ) + else: + self.btn_edit_profile.setEnabled( True ) + self.btn_remove_profile.setEnabled( True ) + self.btn_add_profile.setEnabled(self.config.is_configured('1')) + + #TAB: General + #mode + self.set_combo_value( self.combo_modes, self.config.get_snapshots_mode(), t = 'str' ) + + #local + self.edit_snapshots_path.setText( self.config.get_snapshots_path( mode = 'local') ) + + #ssh + self.txt_ssh_host.setText( self.config.get_ssh_host() ) + self.txt_ssh_port.setText( str(self.config.get_ssh_port()) ) + self.txt_ssh_user.setText( self.config.get_ssh_user() ) + self.txt_ssh_path.setText( self.config.get_snapshots_path_ssh() ) + self.set_combo_value( self.combo_ssh_cipher, self.config.get_ssh_cipher(), t = 'str' ) + self.txt_ssh_private_key_file.setText( self.config.get_ssh_private_key_file() ) + + #local_encfs + if self.mode == 'local_encfs': + self.edit_snapshots_path.setText( self.config.get_local_encfs_path() ) + + #password + password_1 = self.config.get_password( mode = self.mode, pw_id = 1, only_from_keyring = True ) + password_2 = self.config.get_password( mode = self.mode, pw_id = 2, only_from_keyring = True ) + if password_1 is None: + password_1 = '' + if password_2 is None: + password_2 = '' + self.txt_password_1.setText( password_1 ) + self.txt_password_2.setText( password_2 ) + self.cb_password_save.setChecked( self.keyring_supported and self.config.get_password_save( mode = self.mode ) ) + self.cb_password_use_cache.setChecked( self.config.get_password_use_cache( mode = self.mode ) ) + + host, user, profile = self.config.get_host_user_profile() + self.txt_host.setText( host ) + self.txt_user.setText( user ) + self.txt_profile.setText( profile ) + + self.set_combo_value( self.combo_automatic_snapshots, self.config.get_automatic_backup_mode() ) + self.set_combo_value( self.combo_automatic_snapshots_time, self.config.get_automatic_backup_time() ) + self.set_combo_value( self.combo_automatic_snapshots_day, self.config.get_automatic_backup_day() ) + self.set_combo_value( self.combo_automatic_snapshots_weekday, self.config.get_automatic_backup_weekday() ) + self.txt_automatic_snapshots_time_custom.setText( self.config.get_custom_backup_time() ) + self.sb_automatic_snapshots_anacron_period.setValue(self.config.get_automatic_backup_anacron_period()) + self.set_combo_value(self.combo_automatic_snapshots_anacron_unit, self.config.get_automatic_backup_anacron_unit()) + self.update_automatic_snapshot_time( self.config.get_automatic_backup_mode() ) + + #TAB: Include + self.list_include.clear() + + for include in self.config.get_include(): + self.add_include( include ) + + includeSortColumn = int(self.config.get_profile_int_value('qt4.settingsdialog.include.SortColumn', 1)) + includeSortOrder = int(self.config.get_profile_int_value('qt4.settingsdialog.include.SortOrder', Qt.AscendingOrder)) + self.list_include.sortItems(includeSortColumn, includeSortOrder) + + #TAB: Exclude + self.list_exclude.clear() + + for exclude in self.config.get_exclude(): + self.add_exclude( exclude ) + self.cb_exclude_files_by_size.setChecked(self.config.exclude_by_size_enabled()) + self.sb_exclude_files_by_size.setValue(self.config.exclude_by_size()) + + excludeSortColumn = int(self.config.get_profile_int_value('qt4.settingsdialog.exclude.SortColumn', 1)) + excludeSortOrder = int(self.config.get_profile_int_value('qt4.settingsdialog.exclude.SortOrder', Qt.AscendingOrder)) + self.list_exclude.sortItems(excludeSortColumn, excludeSortOrder) + + #TAB: Auto-remove + + #remove old snapshots + enabled, value, unit = self.config.get_remove_old_snapshots() + self.cb_remove_older_then.setChecked( enabled ) + self.edit_remove_older_then.setValue( value ) + self.set_combo_value( self.combo_remove_older_then, unit ) + + #min free space + enabled, value, unit = self.config.get_min_free_space() + self.cb_min_free_space.setChecked( enabled ) + self.edit_min_free_space.setValue( value ) + self.set_combo_value( self.combo_min_free_space, unit ) + + #min free inodes + self.cb_min_free_inodes.setChecked(self.config.min_free_inodes_enabled()) + self.edit_min_free_inodes.setValue(self.config.min_free_inodes()) + + #smart remove + smart_remove, keep_all, keep_one_per_day, keep_one_per_week, keep_one_per_month = self.config.get_smart_remove() + self.cb_smart_remove.setChecked( smart_remove ) + self.edit_keep_all.setValue( keep_all ) + self.edit_keep_one_per_day.setValue( keep_one_per_day ) + self.edit_keep_one_per_week.setValue( keep_one_per_week ) + self.edit_keep_one_per_month.setValue( keep_one_per_month ) + self.cb_run_smart_remove_remote_in_background.setChecked(self.config.get_smart_remove_run_remote_in_background()) + + #don't remove named snapshots + self.cb_dont_remove_named_snapshots.setChecked( self.config.get_dont_remove_named_snapshots() ) + + #TAB: Options + self.cb_notify_enabled.setChecked( self.config.is_notify_enabled() ) + self.cb_no_on_battery.setChecked( self.config.is_no_on_battery_enabled() ) + self.cb_use_global_flock.setChecked(self.config.use_global_flock()) + self.cb_backup_on_restore.setChecked( self.config.is_backup_on_restore_enabled() ) + self.cb_continue_on_errors.setChecked( self.config.continue_on_errors() ) + self.cb_use_checksum.setChecked( self.config.use_checksum() ) + self.cb_full_rsync.setChecked( self.config.full_rsync() ) + self.update_check_for_changes() + self.cb_take_snapshot_regardless_of_changes.setChecked(self.config.take_snapshot_regardless_of_changes()) + self.cb_check_for_changes.setChecked( self.config.check_for_changes() ) + self.set_combo_value( self.combo_log_level, self.config.log_level() ) + + #TAB: Expert Options + self.cb_run_nice_from_cron.setChecked( self.config.is_run_nice_from_cron_enabled() ) + self.cb_run_ionice_from_cron.setChecked( self.config.is_run_ionice_from_cron_enabled() ) + self.cb_run_ionice_from_user.setChecked( self.config.is_run_ionice_from_user_enabled() ) + self.cb_run_nice_on_remote.setChecked(self.config.is_run_nice_on_remote_enabled()) + self.cb_run_ionice_on_remote.setChecked(self.config.is_run_ionice_on_remote_enabled()) + self.cb_run_nocache_on_local.setChecked(self.config.is_run_nocache_on_local_enabled() and self.nocacheAvailable) + self.cb_run_nocache_on_remote.setChecked(self.config.is_run_nocache_on_remote_enabled()) + self.cb_redirect_stdout.setChecked(self.config.redirect_stdout_in_cron()) + self.cb_redirect_stderr.setChecked(self.config.redirect_stderr_in_cron()) + self.cb_bwlimit.setChecked( self.config.bwlimit_enabled() ) + self.sb_bwlimit.setValue( self.config.bwlimit() ) + self.cb_preserve_acl.setChecked( self.config.preserve_acl() ) + self.cb_preserve_xattr.setChecked( self.config.preserve_xattr() ) + self.cb_copy_unsafe_links.setChecked( self.config.copy_unsafe_links() ) + self.cb_copy_links.setChecked( self.config.copy_links() ) + self.cb_rsync_options.setChecked(self.config.rsync_options_enabled() ) + self.txt_rsync_options.setText(self.config.rsync_options() ) + self.cb_ssh_prefix.setChecked(self.config.ssh_prefix_enabled() ) + self.txt_ssh_prefix.setText(self.config.ssh_prefix() ) + + #update + self.update_remove_older_than() + self.update_min_free_space() + + def save_profile( self ): + if self.combo_automatic_snapshots.itemData( self.combo_automatic_snapshots.currentIndex() ) == self.config.CUSTOM_HOUR: + if not tools.check_cron_pattern(self.txt_automatic_snapshots_time_custom.text() ): + self.error_handler( _('Custom Hours can only be a comma seperate list of hours (e.g. 8,12,18,23) or */3 for periodic backups every 3 hours') ) + return False + + #mode + mode = str( self.combo_modes.itemData( self.combo_modes.currentIndex() ) ) + self.config.set_snapshots_mode( mode ) + mount_kwargs = {} + + #password + password_1 = self.txt_password_1.text() + password_2 = self.txt_password_2.text() + + + if mode in ('ssh', 'local_encfs'): + mount_kwargs = {'password': password_1 + } + + if mode == 'ssh_encfs': + mount_kwargs = {'ssh_password': password_1, + 'encfs_password': password_2, + } + + #snapshots path + self.config.set_host_user_profile( + self.txt_host.text(), + self.txt_user.text(), + self.txt_profile.text() ) + + #save ssh + self.config.set_ssh_host(self.txt_ssh_host.text()) + self.config.set_ssh_port(self.txt_ssh_port.text()) + self.config.set_ssh_user(self.txt_ssh_user.text()) + self.config.set_snapshots_path_ssh(self.txt_ssh_path.text()) + self.config.set_ssh_cipher(self.combo_ssh_cipher.itemData( self.combo_ssh_cipher.currentIndex() )) + self.config.set_ssh_private_key_file(self.txt_ssh_private_key_file.text()) + + #save local_encfs + self.config.set_local_encfs_path(self.edit_snapshots_path.text()) + + #include list + self.config.set_profile_int_value('qt4.settingsdialog.include.SortColumn', + self.list_include_header.sortIndicatorSection()) + self.config.set_profile_int_value('qt4.settingsdialog.include.SortOrder', + self.list_include_header.sortIndicatorOrder()) + self.list_include.sortItems(1, Qt.AscendingOrder) + + include_list = [] + for index in range( self.list_include.topLevelItemCount() ): + item = self.list_include.topLevelItem( index ) + include_list.append( ( item.text(0), item.data( 0, Qt.UserRole ) ) ) + + self.config.set_include( include_list ) + + #exclude patterns + self.config.set_profile_int_value('qt4.settingsdialog.exclude.SortColumn', + self.list_exclude_header.sortIndicatorSection()) + self.config.set_profile_int_value('qt4.settingsdialog.exclude.SortOrder', + self.list_exclude_header.sortIndicatorOrder()) + self.list_exclude.sortItems(1, Qt.AscendingOrder) + + exclude_list = [] + for index in range( self.list_exclude.topLevelItemCount() ): + item = self.list_exclude.topLevelItem( index ) + exclude_list.append( item.text(0) ) + + self.config.set_exclude( exclude_list ) + self.config.set_exclude_by_size_enabled(self.cb_exclude_files_by_size.isChecked()) + self.config.set_exclude_by_size(self.sb_exclude_files_by_size.value()) + + #schedule + self.config.set_automatic_backup_mode( self.combo_automatic_snapshots.itemData( self.combo_automatic_snapshots.currentIndex() ) ) + self.config.set_automatic_backup_time( self.combo_automatic_snapshots_time.itemData( self.combo_automatic_snapshots_time.currentIndex() ) ) + self.config.set_automatic_backup_weekday( self.combo_automatic_snapshots_weekday.itemData( self.combo_automatic_snapshots_weekday.currentIndex() ) ) + self.config.set_automatic_backup_day( self.combo_automatic_snapshots_day.itemData( self.combo_automatic_snapshots_day.currentIndex() ) ) + self.config.set_custom_backup_time( self.txt_automatic_snapshots_time_custom.text() ) + self.config.set_automatic_backup_anacron_period(self.sb_automatic_snapshots_anacron_period.value()) + self.config.set_automatic_backup_anacron_unit(self.combo_automatic_snapshots_anacron_unit.itemData(self.combo_automatic_snapshots_anacron_unit.currentIndex() )) + + #auto-remove + self.config.set_remove_old_snapshots( + self.cb_remove_older_then.isChecked(), + self.edit_remove_older_then.value(), + self.combo_remove_older_then.itemData( self.combo_remove_older_then.currentIndex() ) ) + self.config.set_min_free_space( + self.cb_min_free_space.isChecked(), + self.edit_min_free_space.value(), + self.combo_min_free_space.itemData( self.combo_min_free_space.currentIndex() ) ) + self.config.set_min_free_inodes( + self.cb_min_free_inodes.isChecked(), + self.edit_min_free_inodes.value() ) + self.config.set_dont_remove_named_snapshots( self.cb_dont_remove_named_snapshots.isChecked() ) + self.config.set_smart_remove( + self.cb_smart_remove.isChecked(), + self.edit_keep_all.value(), + self.edit_keep_one_per_day.value(), + self.edit_keep_one_per_week.value(), + self.edit_keep_one_per_month.value() ) + self.config.set_smart_remove_run_remote_in_background(self.cb_run_smart_remove_remote_in_background.isChecked()) + + #options + self.config.set_notify_enabled( self.cb_notify_enabled.isChecked() ) + self.config.set_no_on_battery_enabled( self.cb_no_on_battery.isChecked() ) + self.config.set_use_global_flock(self.cb_use_global_flock.isChecked()) + self.config.set_backup_on_restore( self.cb_backup_on_restore.isChecked() ) + self.config.set_continue_on_errors( self.cb_continue_on_errors.isChecked() ) + self.config.set_use_checksum( self.cb_use_checksum.isChecked() ) + self.config.set_full_rsync( self.cb_full_rsync.isChecked() ) + self.config.set_take_snapshot_regardless_of_changes(self.cb_take_snapshot_regardless_of_changes.isChecked()) + self.config.set_check_for_changes( self.cb_check_for_changes.isChecked() ) + self.config.set_log_level( self.combo_log_level.itemData( self.combo_log_level.currentIndex() ) ) + + #expert options + self.config.set_run_nice_from_cron_enabled( self.cb_run_nice_from_cron.isChecked() ) + self.config.set_run_ionice_from_cron_enabled( self.cb_run_ionice_from_cron.isChecked() ) + self.config.set_run_ionice_from_user_enabled( self.cb_run_ionice_from_user.isChecked() ) + self.config.set_run_nice_on_remote_enabled(self.cb_run_nice_on_remote.isChecked()) + self.config.set_run_ionice_on_remote_enabled(self.cb_run_ionice_on_remote.isChecked()) + self.config.set_run_nocache_on_local_enabled(self.cb_run_nocache_on_local.isChecked()) + self.config.set_run_nocache_on_remote_enabled(self.cb_run_nocache_on_remote.isChecked()) + self.config.set_redirect_stdout_in_cron(self.cb_redirect_stdout.isChecked()) + self.config.set_redirect_stderr_in_cron(self.cb_redirect_stderr.isChecked()) + self.config.set_bwlimit_enabled( self.cb_bwlimit.isChecked() ) + self.config.set_bwlimit( self.sb_bwlimit.value() ) + self.config.set_preserve_acl( self.cb_preserve_acl.isChecked() ) + self.config.set_preserve_xattr( self.cb_preserve_xattr.isChecked() ) + self.config.set_copy_unsafe_links( self.cb_copy_unsafe_links.isChecked() ) + self.config.set_copy_links( self.cb_copy_links.isChecked() ) + self.config.set_rsync_options_enabled(self.cb_rsync_options.isChecked() ) + self.config.set_rsync_options(self.txt_rsync_options.text() ) + self.config.set_ssh_prefix_enabled(self.cb_ssh_prefix.isChecked() ) + self.config.set_ssh_prefix(self.txt_ssh_prefix.text() ) + + if not self.config.SNAPSHOT_MODES[mode][0] is None: + #pre_mount_check + mnt = mount.Mount(cfg = self.config, tmp_mount = True, parent = self) + try: + mnt.pre_mount_check(mode = mode, first_run = True, **mount_kwargs) + except MountException as ex: + self.error_handler(str(ex)) + return False + + #okay, lets try to mount + try: + hash_id = mnt.mount(mode = mode, check = False, **mount_kwargs) + except MountException as ex: + self.error_handler(str(ex)) + return False + + #save password + self.config.set_password_save(self.cb_password_save.isChecked(), mode = mode) + self.config.set_password_use_cache(self.cb_password_use_cache.isChecked(), mode = mode) + self.config.set_password(password_1, mode = mode) + self.config.set_password(password_2, mode = mode, pw_id = 2) + + #save snaphots_path + if self.config.SNAPSHOT_MODES[mode][0] is None: + snapshots_path = self.edit_snapshots_path.text() + else: + snapshots_path = self.config.get_snapshots_path(mode = mode, tmp_mount = True) + + ret = self.config.set_snapshots_path( snapshots_path, mode = mode ) + if not ret: + return ret + + #umount + if not self.config.SNAPSHOT_MODES[mode][0] is None: + try: + mnt.umount(hash_id = hash_id) + except MountException as ex: + self.error_handler(str(ex)) + return False + return True + + def error_handler( self, message ): + messagebox.critical( self, message ) + + def question_handler( self, message ): + return QMessageBox.Yes == messagebox.warningYesNo( self, message ) + + def exec_( self ): + self.config.set_question_handler( self.question_handler ) + self.config.set_error_handler( self.error_handler ) + ret_val = super(SettingsDialog, self).exec_() + self.config.clear_handlers() + + if ret_val != QDialog.Accepted: + self.config.dict = self.config_copy_dict + + self.config.set_current_profile( self.current_profile_org ) + + return ret_val + + def update_snapshots_location( self ): + '''Update snapshot location dialog''' + self.config.set_question_handler( self.question_handler ) + self.config.set_error_handler( self.error_handler ) + self.snapshots.update_snapshots_location() + + def update_remove_older_than( self ): + enabled = self.cb_remove_older_then.isChecked() + self.edit_remove_older_then.setEnabled( enabled ) + self.combo_remove_older_then.setEnabled( enabled ) + + def update_min_free_space( self ): + enabled = self.cb_min_free_space.isChecked() + self.edit_min_free_space.setEnabled( enabled ) + self.combo_min_free_space.setEnabled( enabled ) + + + def add_include( self, data ): + item = QTreeWidgetItem() + + if data[1] == 0: + item.setIcon(0, self.icon.FOLDER) + else: + item.setIcon(0, self.icon.FILE) + + item.setText( 0, data[0] ) + item.setData( 0, Qt.UserRole, data[1] ) + self.list_include_count += 1 + item.setText(1, str(self.list_include_count).zfill(6)) + item.setData(1, Qt.UserRole, self.list_include_count ) + self.list_include.addTopLevelItem( item ) + + if self.list_include.currentItem() is None: + self.list_include.setCurrentItem( item ) + + return item + + def add_exclude( self, pattern ): + item = QTreeWidgetItem() + item.setText(0, pattern) + item.setData(0, Qt.UserRole, pattern ) + self.list_exclude_count += 1 + item.setText(1, str(self.list_exclude_count).zfill(6)) + item.setData(1, Qt.UserRole, self.list_exclude_count ) + self.formatExcludeItem(item) + self.list_exclude.addTopLevelItem(item) + + if self.list_exclude.currentItem() is None: + self.list_exclude.setCurrentItem( item ) + + return item + + def fill_combo( self, combo, d ): + keys = list(d.keys()) + keys.sort() + + for key in keys: + combo.addItem( QIcon(), d[ key ], key ) + + def set_combo_value( self, combo, value, t = 'int' ): + for i in range( combo.count() ): + if t == 'int' and value == combo.itemData( i ): + combo.setCurrentIndex( i ) + break + if t == 'str' and value == combo.itemData( i ): + combo.setCurrentIndex( i ) + break + + def validate( self ): + if not self.save_profile(): + return False + + if not self.config.check_config(): + return False + + if not self.config.setup_cron(): + return False + + return self.config.save() + + + def on_btn_exclude_remove_clicked ( self ): + for item in self.list_exclude.selectedItems(): + index = self.list_exclude.indexOfTopLevelItem( item ) + if index < 0: + continue + + self.list_exclude.takeTopLevelItem( index ) + + if self.list_exclude.topLevelItemCount() > 0: + self.list_exclude.setCurrentItem( self.list_exclude.topLevelItem(0) ) + + def add_exclude_( self, pattern ): + if not pattern: + return + + for index in range( self.list_exclude.topLevelItemCount() ): + item = self.list_exclude.topLevelItem( index ) + if pattern == item.text(0): + return + + self.add_exclude( pattern ) + + def on_btn_exclude_add_clicked( self ): + dlg = QInputDialog(self) + dlg.setInputMode(QInputDialog.TextInput) + dlg.setWindowTitle(_('Exclude pattern')) + dlg.setLabelText('') + dlg.resize(400, 0) + if not dlg.exec(): + return + pattern = dlg.textValue().strip() + + if not pattern: + return + + self.add_exclude_( pattern ) + + def on_btn_exclude_file_clicked( self ): + for path in qt4tools.getOpenFileNames(self, _('Exclude file')): + self.add_exclude_( path ) + + def on_btn_exclude_folder_clicked( self ): + for path in qt4tools.getExistingDirectories(self, _('Exclude folder')) : + self.add_exclude_( path ) + + def on_btn_exclude_default_clicked(self): + for path in self.config.DEFAULT_EXCLUDE: + self.add_exclude_(path) + + def on_btn_include_remove_clicked ( self ): + for item in self.list_include.selectedItems(): + index = self.list_include.indexOfTopLevelItem( item ) + if index < 0: + continue + + self.list_include.takeTopLevelItem( index ) + + if self.list_include.topLevelItemCount() > 0: + self.list_include.setCurrentItem( self.list_include.topLevelItem(0) ) + + def on_btn_include_file_add_clicked( self ): + for path in qt4tools.getOpenFileNames(self, _('Include file')): + if not path: + continue + + if os.path.islink(path) \ + and not (self.cb_copy_unsafe_links.isChecked() \ + or self.cb_copy_links.isChecked()): + if self.question_handler( \ + _('"%s" is a symlink. The linked target will not be backed up until you include it, too.\nWould you like to include the symlinks target instead?') % path ): + path = os.path.realpath(path) + + path = self.config.prepare_path( path ) + + for index in range( self.list_include.topLevelItemCount() ): + if path == self.list_include.topLevelItem( index ).text( 0 ): + continue + + self.add_include( ( path, 1 ) ) + + def on_btn_include_add_clicked( self ): + for path in qt4tools.getExistingDirectories(self, _('Include folder')): + if not path: + continue + + if os.path.islink(path) \ + and not (self.cb_copy_unsafe_links.isChecked() \ + or self.cb_copy_links.isChecked()): + if self.question_handler( \ + _('"%s" is a symlink. The linked target will not be backed up until you include it, too.\nWould you like to include the symlinks target instead?') % path ): + path = os.path.realpath(path) + + path = self.config.prepare_path( path ) + + for index in range( self.list_include.topLevelItemCount() ): + if path == self.list_include.topLevelItem( index ).text( 0 ): + continue + + self.add_include( ( path, 0 ) ) + + def on_btn_snapshots_path_clicked( self ): + old_path = self.edit_snapshots_path.text() + + path = str(qt4tools.getExistingDirectory(self, + _('Where to save snapshots'), + self.edit_snapshots_path.text() ) ) + if path: + if old_path and old_path != path: + if not self.question_handler( _('Are you sure you want to change snapshots folder ?') ): + return + self.edit_snapshots_path.setText( self.config.prepare_path( path ) ) + + def on_btn_ssh_private_key_file_clicked( self ): + old_file = self.txt_ssh_private_key_file.text() + + if old_file: + start_dir = self.txt_ssh_private_key_file.text() + else: + start_dir = self.config.get_ssh_private_key_folder() + f = qt4tools.getOpenFileName(self, _('SSH private key'), start_dir) + if f: + self.txt_ssh_private_key_file.setText(f) + + def on_combo_modes_changed(self, *params): + if not params: + index = self.combo_modes.currentIndex() + else: + index = params[0] + active_mode = str( self.combo_modes.itemData( index ) ) + if active_mode != self.mode: + for mode in list(self.config.SNAPSHOT_MODES.keys()): + getattr(self, 'mode_%s' % mode).hide() + for mode in list(self.config.SNAPSHOT_MODES.keys()): + if active_mode == mode: + getattr(self, 'mode_%s' % mode).show() + self.mode = active_mode + + if self.config.mode_need_password(active_mode): + self.lbl_password_1.setText( self.config.SNAPSHOT_MODES[active_mode][2] + ':' ) + self.frame_password_1.show() + if self.config.mode_need_password(active_mode, 2): + self.lbl_password_2.setText( self.config.SNAPSHOT_MODES[active_mode][3] + ':' ) + self.lbl_password_2.show() + self.txt_password_2.show() + qt4tools.equal_indent(self.lbl_password_1, self.lbl_password_2) + else: + self.lbl_password_2.hide() + self.txt_password_2.hide() + qt4tools.equal_indent(self.lbl_password_1) + else: + self.frame_password_1.hide() + + if active_mode == 'ssh_encfs': + self.lbl_ssh_encfs_exclude_warning.show() + else: + self.lbl_ssh_encfs_exclude_warning.hide() + self.updateExcludeItems() + + enabled = active_mode in ('ssh', 'ssh_encfs') + self.cb_run_nice_on_remote.setEnabled(enabled) + self.cb_run_ionice_on_remote.setEnabled(enabled) + self.cb_bwlimit.setEnabled(enabled) + self.sb_bwlimit.setEnabled(enabled and self.cb_bwlimit.isChecked()) + self.cb_run_nocache_on_remote.setEnabled(enabled) + self.cb_run_smart_remove_remote_in_background.setHidden(not enabled) + self.cb_ssh_prefix.setHidden(not enabled) + self.txt_ssh_prefix.setHidden(not enabled) + + self.encfsWarning.setHidden(active_mode not in ('local_encfs', 'ssh_encfs')) + + def on_full_path_changed(self, dummy): + if self.mode in ('ssh', 'ssh_encfs'): + path = self.txt_ssh_path.text() + else: + path = self.edit_snapshots_path.text() + self.lbl_full_path.setText( + _('Full snapshot path: ') + + os.path.join( + path, + 'backintime', + self.txt_host.text(), + self.txt_user.text(), + self.txt_profile.text() + )) + + def updateExcludeItems(self): + for index in range(self.list_exclude.topLevelItemCount()): + item = self.list_exclude.topLevelItem(index) + self.formatExcludeItem(item) + + def formatExcludeItem(self, item): + if self.mode == 'ssh_encfs' and tools.patternHasNotEncryptableWildcard(item.text(0)): + item.setIcon(0, self.icon.INVALID_EXCLUDE) + item.setBackground(0, QBrush(Qt.lightGray)) + elif item.text(0) in self.config.DEFAULT_EXCLUDE: + item.setIcon(0, self.icon.DEFAULT_EXCLUDE) + item.setBackground(0, QBrush()) + else: + item.setIcon(0, self.icon.EXCLUDE) + item.setBackground(0, QBrush()) + + def customSortOrder(self, header, loop, newColumn, newOrder): + if newColumn == 0 and newOrder == Qt.AscendingOrder: + if loop: + newColumn, newOrder = 1, Qt.AscendingOrder + header.setSortIndicator(newColumn, newOrder) + loop = False + else: + loop = True + header.model().sort(newColumn, newOrder) + return loop + + def includeCustomSortOrder(self, *args): + self.list_include_sort_loop = self.customSortOrder(self.list_include_header, + self.list_include_sort_loop, + *args) + + def excludeCustomSortOrder(self, *args): + self.list_exclude_sort_loop = self.customSortOrder(self.list_exclude_header, + self.list_exclude_sort_loop, + *args) + + def printDefault(self, value): + if value: + value_ = _('enabled') + else: + value_ = _('disabled') + return ' (%s: %s)' %(_('default'), value_) + + def restoreConfig(self, *args): + RestoreConfigDialog(self).exec_() + self.update_profiles() + + def accept( self ): + if self.validate(): + super(SettingsDialog, self).accept() + +class RestoreConfigDialog(QDialog): + """Show a dialog that will help to restore BITs configuration. + User can select a config from previous snapshots. + """ + def __init__(self, parent): + super(RestoreConfigDialog, self).__init__(parent) + + self.parent = parent + self.config = parent.config + self.snapshots = parent.snapshots + + import icon + self.icon = icon + self.setWindowIcon(icon.SETTINGS_DIALOG) + self.setWindowTitle(_( 'Restore Settings' )) + + layout = QVBoxLayout(self) + #show a hint on how the snapshot path will look like. + samplePath = os.path.join( 'backintime', + self.config.get_host(), + self.config.get_user(), '1', + self.snapshots.get_snapshot_id(datetime.datetime.now()) + ) + + #inform user to join group fuse if he hasn't already. + #If there is no group fuse than it is most likly not nessesary. + addFuse = '' + try: + user = self.config.get_user() + fuse_grp_members = grp.getgrnam('fuse')[3] + if not user in fuse_grp_members: + addFuse = _(' and add your user to group \'fuse\'') + except KeyError: + pass + + label = QLabel(_('Please navigate to the snapshot from which you want ' + 'to restore %(appName)s\'s configuration. The path ' + 'may look like: \n%(samplePath)s\n\n' + 'If your snapshots are on a remote drive or if they are ' + 'encrypted you need to manually mount them first. ' + 'If you use Mode SSH you also may need to set up public key ' + 'login to the remote host%(addFuse)s.\n' + 'Take a look at \'man backintime\'.') + % {'appName': self.config.APP_NAME, 'samplePath': samplePath, + 'addFuse': addFuse}, self) + label.setWordWrap(True) + layout.addWidget(label) + + #treeView + self.treeView = qt4tools.MyTreeView(self) + self.treeViewModel = QFileSystemModel(self) + self.treeViewModel.setRootPath(QDir().rootPath()) + self.treeViewModel.setReadOnly(True) + self.treeViewModel.setFilter(QDir.AllDirs | + QDir.NoDotAndDotDot | QDir.Hidden) + + self.treeViewFilterProxy = QSortFilterProxyModel(self) + self.treeViewFilterProxy.setDynamicSortFilter(True) + self.treeViewFilterProxy.setSourceModel(self.treeViewModel) + + self.treeViewFilterProxy.setFilterRegExp(r'^[^\.]') + + self.treeView.setModel(self.treeViewFilterProxy) + for col in range(self.treeView.header().count()): + self.treeView.setColumnHidden(col, col != 0) + self.treeView.header().hide() + + #expand users home + self.expandAll(os.path.expanduser('~')) + layout.addWidget(self.treeView) + + #context menu + self.treeView.setContextMenuPolicy(Qt.CustomContextMenu) + self.connect(self.treeView, SIGNAL('customContextMenuRequested(const QPoint&)'), self.onContextMenu) + self.contextMenu = QMenu(self) + self.btnShowHidden = self.contextMenu.addAction(icon.SHOW_HIDDEN, _('Show hidden files')) + self.btnShowHidden.setCheckable(True) + self.connect(self.btnShowHidden, SIGNAL('toggled(bool)'), self.onBtnShowHidden) + + #colors + self.colorRed = QPalette() + self.colorRed.setColor(QPalette.WindowText, QColor(205, 0, 0)) + self.colorGreen = QPalette() + self.colorGreen.setColor(QPalette.WindowText, QColor(0, 160, 0)) + + #wait indicator which will show that the scan for snapshots is still running + self.wait = QProgressBar(self) + self.wait.setMinimum(0) + self.wait.setMaximum(0) + self.wait.setMaximumHeight(7) + layout.addWidget(self.wait) + + #show where a snapshot with config was found + self.lblFound = QLabel(_('No config found'), self) + self.lblFound.setWordWrap(True) + self.lblFound.setPalette(self.colorRed) + layout.addWidget(self.lblFound) + + #show profiles inside the config + self.widgetProfiles = QWidget(self) + self.widgetProfiles.setContentsMargins(0, 0, 0, 0) + self.widgetProfiles.hide() + self.gridProfiles = QGridLayout() + self.gridProfiles.setContentsMargins(0, 0, 0, 0) + self.gridProfiles.setHorizontalSpacing(20) + self.widgetProfiles.setLayout(self.gridProfiles) + layout.addWidget(self.widgetProfiles) + + self.restoreConfig = None + + self.scan = ScanFileSystem(self) + + self.treeView.myCurrentIndexChanged.connect(self.indexChanged) + self.connect(self.scan, SIGNAL('foundConfig'), self.scanFound) + self.connect(self.scan, SIGNAL('finished()'), self.scanFinished) + + button_box = QDialogButtonBox(self) + self.restoreButton = button_box.addButton(_('Restore'), QDialogButtonBox.AcceptRole) + self.restoreButton.setEnabled(False) + button_box.addButton(QDialogButtonBox.Cancel) + QObject.connect(button_box, SIGNAL('accepted()'), self.accept) + QObject.connect(button_box, SIGNAL('rejected()'), self.reject) + layout.addWidget(button_box) + + self.scan.start() + + self.resize(600, 700) + + def pathFromIndex(self, index): + """return a path string for a given treeView index + """ + sourceIndex = self.treeViewFilterProxy.mapToSource(index) + return str(self.treeViewModel.filePath(sourceIndex)) + + def indexFromPath(self, path): + """return the index for path which can be used in treeView + """ + indexSource = self.treeViewModel.index(path) + return self.treeViewFilterProxy.mapFromSource(indexSource) + + def indexChanged(self, current, previous): + """called everytime a new item is choosen in treeView. + If there was a config found inside the selected folder, show + available informations about the config. + """ + cfg = self.searchConfig(self.pathFromIndex(current)) + if cfg: + self.expandAll(os.path.dirname(os.path.dirname(cfg._LOCAL_CONFIG_PATH))) + self.lblFound.setText(cfg._LOCAL_CONFIG_PATH) + self.lblFound.setPalette(self.colorGreen) + self.showProfile(cfg) + self.restoreConfig = cfg + else: + self.lblFound.setText(_('No config found')) + self.lblFound.setPalette(self.colorRed) + self.widgetProfiles.hide() + self.restoreConfig = None + self.restoreButton.setEnabled(bool(cfg)) + + def searchConfig(self, path): + """try to find config in couple possible subfolders + """ + snapshotPath = os.path.join('backintime', + self.config.get_host(), + self.config.get_user()) + tryPaths = ['', '..', 'last_snapshot'] + tryPaths.extend([os.path.join(snapshotPath, str(i), 'last_snapshot') for i in range(10)]) + + for p in tryPaths: + cfgPath = os.path.join(path, p, 'config') + if os.path.exists(cfgPath): + try: + cfg = config.Config(cfgPath) + if cfg.is_configured(): + return cfg + except: + pass + return + + def expandAll(self, path): + """expand all folders from filesystem root to given path + """ + paths = [path, ] + while len(path) > 1: + path = os.path.dirname(path) + paths.append(path) + paths.append('/') + paths.reverse() + [self.treeView.expand(self.indexFromPath(p)) for p in paths] + + def showProfile(self, cfg): + """show information about the profiles inside cfg + """ + child = self.gridProfiles.takeAt(0) + while child: + child.widget().deleteLater() + child = self.gridProfiles.takeAt(0) + for row, profileId in enumerate(cfg.get_profiles()): + for col, txt in enumerate( (_('Profile:') + ' ' + str(profileId), + cfg.get_profile_name(profileId), + _('Mode:') + ' ' + cfg.SNAPSHOT_MODES[cfg.get_snapshots_mode(profileId)][1] + ) ): + self.gridProfiles.addWidget(QLabel(txt, self), row, col) + self.gridProfiles.setColumnStretch(col, 1) + self.widgetProfiles.show() + + def scanFound(self, path): + """scan hit a config. Expand the snapshot folder. + """ + self.expandAll(os.path.dirname(path)) + + def scanFinished(self): + """scan is done. Delete the wait indicator + """ + self.wait.deleteLater() + + def onContextMenu(self, point): + self.contextMenu.exec_(self.treeView.mapToGlobal(point)) + + def onBtnShowHidden(self, checked): + if checked: + self.treeViewFilterProxy.setFilterRegExp(r'') + else: + self.treeViewFilterProxy.setFilterRegExp(r'^[^\.]') + + def accept(self): + """handle over the dict from the selected config. The dict contains + all settings from the config. + """ + if self.restoreConfig: + self.config.dict = self.restoreConfig.dict + super(RestoreConfigDialog, self).accept() + + def exec_(self): + """stop the scan thread if it is still running after dialog was closed. + """ + ret = super(RestoreConfigDialog, self).exec_() + self.scan.stop() + return ret + +class ScanFileSystem(QThread): + CONFIG = 'config' + BACKUP = 'backup' + BACKINTIME = 'backintime' + + def __init__(self, parent): + super(ScanFileSystem, self).__init__(parent) + self.stopper = False + + def stop(self): + """prepair stop and wait for finish. + """ + self.stopper = True + return self.wait() + + def run(self): + """search in order of hopefully fastest way to find the snapshots. + 1. /home/USER 2. /media 3. /mnt and at last filesystem root. + Already searched paths will be excluded. + """ + searchOrder = [os.path.expanduser('~'), '/media', '/mnt', '/'] + for scan in searchOrder: + exclude = searchOrder[:] + exclude.remove(scan) + for path in self.scanPath(scan, exclude): + self.emit(SIGNAL('foundConfig'), path) + + def scanPath(self, path, excludes = ()): + """walk through all folders and try to find 'config' file. + If found make sure it is nested in backintime/FOO/BAR/1/2345/config and + return its path. + Exclude all paths from excludes and also all backintime/FOO/BAR/1/2345/backup + """ + for root, dirs, files in os.walk(path, topdown = True): + if self.stopper: + return + for exclude in excludes: + exDir, exBase = os.path.split(exclude) + if root == exDir: + if exBase in dirs: + del dirs[dirs.index(exBase)] + if self.CONFIG in files: + rootdirs = root.split(os.sep) + if len(rootdirs) > 4 and rootdirs[-5].startswith(self.BACKINTIME): + if self.BACKUP in dirs: + del dirs[dirs.index(self.BACKUP)] + yield root + +def debug_trace(): + '''Set a tracepoint in the Python debugger that works with Qt''' + from pdb import set_trace + pyqtRemoveInputHook() + set_trace() diff -Nru backintime-1.0.36/qt4/snapshotsdialog.py backintime-1.1.12/qt4/snapshotsdialog.py --- backintime-1.0.36/qt4/snapshotsdialog.py 1970-01-01 00:00:00.000000000 +0000 +++ backintime-1.1.12/qt4/snapshotsdialog.py 2016-01-11 18:07:58.000000000 +0000 @@ -0,0 +1,418 @@ +# Back In Time +# Copyright (C) 2008-2016 Oprea Dan, Bart de Koning, Richard Bailey, Germar Reitze +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + +import os +import gettext + +from PyQt4.QtGui import * +from PyQt4.QtCore import * + +import tools +import restoredialog +import messagebox +import qt4tools + +_=gettext.gettext + +if tools.check_command('meld'): + DIFF_CMD = 'meld' + DIFF_PARAMS = '%1 %2' +elif tools.check_command('kompare'): + DIFF_CMD = 'kompare' + DIFF_PARAMS = '%1 %2' +else: + DIFF_CMD = 'false' + DIFF_PARAMS = '%1 %2' + +class DiffOptionsDialog( QDialog ): + def __init__( self, parent ): + super(DiffOptionsDialog, self).__init__(parent) + self.config = parent.config + + import icon + self.setWindowIcon(icon.DIFF_OPTIONS) + self.setWindowTitle( _( 'Diff Options' ) ) + + self.main_layout = QGridLayout(self) + + self.diff_cmd = self.config.get_str_value( 'qt4.diff.cmd', DIFF_CMD ) + self.diff_params = self.config.get_str_value( 'qt4.diff.params', DIFF_PARAMS ) + + self.main_layout.addWidget( QLabel( _( 'Command:' ) ), 0, 0 ) + self.edit_command = QLineEdit( self.diff_cmd, self ) + self.main_layout.addWidget( self.edit_command, 0, 1 ) + + self.main_layout.addWidget( QLabel( _( 'Parameters:' ) ), 1, 0 ) + self.edit_params = QLineEdit( self.diff_params, self ) + self.main_layout.addWidget( self.edit_params, 1, 1 ) + + self.main_layout.addWidget( QLabel( _( 'Use %1 and %2 for path parameters' ) ), 2, 1 ) + + button_box = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel) + QObject.connect(button_box, SIGNAL('accepted()'), self.accept) + QObject.connect(button_box, SIGNAL('rejected()'), self.reject) + self.main_layout.addWidget(button_box, 3, 0, 3, 2) + + def accept( self ): + diff_cmd = str( self.edit_command.text().toUtf8() ) + diff_params = str( self.edit_params.text().toUtf8() ) + + if diff_cmd != self.diff_cmd or diff_params != self.diff_params: + self.config.set_str_value( 'qt4.diff.cmd', diff_cmd ) + self.config.set_str_value( 'qt4.diff.params', diff_params ) + self.config.save() + + super(DiffOptionsDialog, self).accept() + + +class SnapshotsDialog( QDialog ): + def __init__( self, parent, snapshot_id, path ): + super(SnapshotsDialog, self).__init__(parent) + self.config = parent.config + self.snapshots = parent.snapshots + self.snapshots_list = parent.snapshots_list + self.qapp = parent.qapp + import icon + + self.snapshot_id = snapshot_id + self.path = path + + self.setWindowIcon(icon.SNAPSHOTS) + self.setWindowTitle(_('Snapshots')) + + self.main_layout = QVBoxLayout(self) + + #path + self.edit_path = QLineEdit( self.path, self ) + self.edit_path.setReadOnly( True ) + self.main_layout.addWidget( self.edit_path ) + + #list different snapshots only + self.cb_only_different_snapshots = QCheckBox( _( 'List only different snapshots' ), self ) + self.main_layout.addWidget( self.cb_only_different_snapshots ) + QObject.connect( self.cb_only_different_snapshots, SIGNAL('stateChanged(int)'), self.cb_only_different_snapshots_changed ) + + #list equal snapshots only + layout = QHBoxLayout() + self.main_layout.addLayout(layout) + self.cb_only_equal_snapshots = QCheckBox(_('List only equal snapshots to: '), self) + QObject.connect(self.cb_only_equal_snapshots, SIGNAL('stateChanged(int)'), self.cb_only_equal_snapshots_changed) + layout.addWidget(self.cb_only_equal_snapshots) + + self.combo_equal_to = QComboBox(self) + QObject.connect(self.combo_equal_to, SIGNAL('currentIndexChanged(int)'), self.on_combo_equal_to_changed) + self.combo_equal_to.setEnabled(False) + layout.addWidget(self.combo_equal_to) + + #deep check + self.cb_only_different_snapshots_deep_check = QCheckBox( _( 'Deep check (more accurate, but slow)' ), self ) + self.main_layout.addWidget( self.cb_only_different_snapshots_deep_check ) + QObject.connect( self.cb_only_different_snapshots_deep_check, SIGNAL('stateChanged(int)'), self.cb_only_different_snapshots_deep_check_changed ) + + #toolbar + self.toolbar = QToolBar( self ) + self.toolbar.setFloatable( False ) + self.main_layout.addWidget( self.toolbar ) + + #toolbar restore + menu_restore = QMenu(self) + action = menu_restore.addAction(icon.RESTORE, _('Restore') ) + QObject.connect( action, SIGNAL('triggered()'), self.restore_this ) + action = menu_restore.addAction(icon.RESTORE_TO, _('Restore to ...') ) + QObject.connect( action, SIGNAL('triggered()'), self.restore_this_to ) + + self.btn_restore = self.toolbar.addAction(icon.RESTORE, _('Restore')) + self.btn_restore.setMenu(menu_restore) + QObject.connect( self.btn_restore, SIGNAL('triggered()'), self.restore_this ) + + #btn delete + self.btn_delete = self.toolbar.addAction(icon.DELETE_FILE, _('Delete')) + QObject.connect(self.btn_delete, SIGNAL('triggered()'), self.on_btn_delete_clicked) + + #btn select_all + self.btn_select_all = self.toolbar.addAction(icon.SELECT_ALL, _('Select All')) + QObject.connect(self.btn_select_all, SIGNAL('triggered()'), self.on_btn_select_all_clicked) + + #snapshots list + self.list_snapshots = qt4tools.TimeLine(self) + self.main_layout.addWidget( self.list_snapshots ) + QObject.connect( self.list_snapshots, SIGNAL('itemSelectionChanged()'), self.on_list_snapshots_changed ) + QObject.connect( self.list_snapshots, SIGNAL('itemActivated(QTreeWidgetItem*, int)'), self.on_list_snapshots_executed ) + + #diff + layout = QHBoxLayout() + self.main_layout.addLayout( layout ) + + self.btn_diff = QPushButton( _('Diff'), self ) + layout.addWidget( self.btn_diff ) + QObject.connect( self.btn_diff, SIGNAL('clicked()'), self.on_btn_diff_clicked ) + + self.combo_diff = QComboBox( self ) + layout.addWidget( self.combo_diff, 2 ) + + #buttons + button_box = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel) + self.btn_goto = button_box.button(QDialogButtonBox.Ok) + self.btn_cancel = button_box.button(QDialogButtonBox.Cancel) + self.btn_goto.setText(_('Go To')) + btn_diff_options = button_box.addButton(_('Diff Options'), QDialogButtonBox.HelpRole) + btn_diff_options.setIcon(icon.DIFF_OPTIONS) + + self.main_layout.addWidget(button_box) + + QObject.connect(button_box, SIGNAL('accepted()'), self.accept) + QObject.connect(button_box, SIGNAL('rejected()'), self.reject) + QObject.connect(btn_diff_options, SIGNAL('clicked()'), self.on_btn_diff_options_clicked) + + # + self.cb_only_different_snapshots_deep_check.setEnabled( False ) + + full_path = self.snapshots.get_snapshot_path_to( self.snapshot_id, self.path ) + if os.path.islink( full_path ): + self.cb_only_different_snapshots_deep_check.hide() + elif os.path.isdir( full_path ): + self.cb_only_different_snapshots.hide() + self.cb_only_equal_snapshots.hide() + self.combo_equal_to.hide() + self.cb_only_different_snapshots_deep_check.hide() + + #update list and combobox + self.update_snapshots_and_combo_equal_to() + + def add_snapshot_( self, snapshot_id ): + name = self.snapshots.get_snapshot_display_name( snapshot_id ) + + self.list_snapshots.addSnapshot(snapshot_id, name) + + #add to combo + self.combo_diff.addItem( name, snapshot_id ) + + if self.snapshot_id == snapshot_id: + self.combo_diff.setCurrentIndex( self.combo_diff.count() - 1 ) + elif self.combo_diff.currentIndex() < 0: + self.combo_diff.setCurrentIndex( 0 ) + + def update_snapshots( self ): + self.list_snapshots.clear() + self.combo_diff.clear() + + combo_index = self.combo_equal_to.currentIndex() + if self.cb_only_equal_snapshots.isChecked() and combo_index >= 0: + equal_to_snapshot_id = str(self.combo_equal_to.itemData(combo_index)) + equal_to = self.snapshots.get_snapshot_path_to(equal_to_snapshot_id, self.path) + else: + equal_to = False + snapshots_filtered = self.snapshots.filter_for(self.snapshot_id, self.path, + self.snapshots_list, + self.cb_only_different_snapshots.isChecked(), + self.cb_only_different_snapshots_deep_check.isChecked(), + equal_to) + for snapshot_id in snapshots_filtered: + self.add_snapshot_( snapshot_id ) + + self.update_toolbar() + + def update_combo_equal_to(self): + self.combo_equal_to.clear() + snapshots_filtered = self.snapshots.filter_for(self.snapshot_id, self.path, self.snapshots_list) + for snapshot_id in snapshots_filtered: + name = self.snapshots.get_snapshot_display_name(snapshot_id) + self.combo_equal_to.addItem(name, snapshot_id) + + if snapshot_id == self.snapshot_id: + self.combo_equal_to.setCurrentIndex(self.combo_equal_to.count() - 1) + elif self.combo_equal_to.currentIndex() < 0: + self.combo_equal_to.setCurrentIndex(0) + + def update_snapshots_and_combo_equal_to(self): + self.update_snapshots() + self.update_combo_equal_to() + + def cb_only_different_snapshots_changed( self ): + enabled = self.cb_only_different_snapshots.isChecked() + self.cb_only_equal_snapshots.setEnabled(not enabled) + self.cb_only_different_snapshots_deep_check.setEnabled( enabled ) + + self.update_snapshots() + + def cb_only_equal_snapshots_changed( self ): + enabled = self.cb_only_equal_snapshots.isChecked() + self.combo_equal_to.setEnabled(enabled) + self.cb_only_different_snapshots.setEnabled(not enabled) + self.cb_only_different_snapshots_deep_check.setEnabled( enabled ) + + self.update_snapshots() + + def cb_only_different_snapshots_deep_check_changed( self ): + self.update_snapshots() + + def update_toolbar( self ): + snapshot_ids = self.list_snapshots.selectedSnapshotIDs() + + if not snapshot_ids: + enable_restore = False + enable_delete = False + elif len(snapshot_ids) == 1: + enable_restore = len( snapshot_ids[0] ) > 1 + enable_delete = len( snapshot_ids[0] ) > 1 + else: + enable_restore = False + enable_delete = True + for snapshot_id in snapshot_ids: + if len(snapshot_id) <= 1: + enable_delete = False + + self.btn_restore.setEnabled(enable_restore) + self.btn_delete.setEnabled(enable_delete) + + def restore_this( self ): + snapshot_id = self.list_snapshots.currentSnapshotID() + if len( snapshot_id ) > 1: + restoredialog.restore( self, snapshot_id, self.path ) + + def restore_this_to( self ): + snapshot_id = self.list_snapshots.currentSnapshotID() + if len( snapshot_id ) > 1: + restoredialog.restore( self, snapshot_id, self.path, None ) + + def on_list_snapshots_changed( self ): + self.update_toolbar() + + def on_list_snapshots_executed( self, item, column): + if self.qapp.keyboardModifiers() and Qt.ControlModifier: + return + + snapshot_id = self.list_snapshots.currentSnapshotID() + if not snapshot_id: + return + + full_path = self.snapshots.get_snapshot_path_to( snapshot_id, self.path ) + if not os.path.exists( full_path ): + return + + self.run = QDesktopServices.openUrl(QUrl(full_path )) + + def on_btn_diff_clicked( self ): + snapshot_id = self.list_snapshots.currentSnapshotID() + if not snapshot_id: + return + + combo_index = self.combo_diff.currentIndex() + if combo_index < 0: + return + + snapshot2_id = str( self.combo_diff.itemData( combo_index ) ) + + path1 = self.snapshots.get_snapshot_path_to( snapshot_id, self.path ) + path2 = self.snapshots.get_snapshot_path_to( snapshot2_id, self.path ) + + #check if the 2 paths are different + if path1 == path2: + messagebox.critical( self, _('You can\'t compare a snapshot to itself') ) + return + + diff_cmd = self.config.get_str_value( 'qt4.diff.cmd', DIFF_CMD ) + diff_params = self.config.get_str_value( 'qt4.diff.params', DIFF_PARAMS ) + + if not tools.check_command( diff_cmd ): + messagebox.critical( self, _('Command not found: %s') % diff_cmd ) + return + + params = diff_params + params = params.replace( '%1', "\"%s\"" % path1 ) + params = params.replace( '%2', "\"%s\"" % path2 ) + + cmd = diff_cmd + ' ' + params + ' &' + os.system( cmd ) + + def on_btn_diff_options_clicked( self ): + DiffOptionsDialog( self ).exec_() + + def on_combo_equal_to_changed(self, index): + self.update_snapshots() + + def on_btn_delete_clicked(self): + items = self.list_snapshots.selectedItems() + if not items: + return + elif len(items) == 1: + msg = _('Do you really want to delete "%(file)s" in snapshot "%(snapshot_id)s?\n') \ + % {'file' : self.path, 'snapshot_id' : items[0].snapshotID()} + else: + msg = _('Do you really want to delete "%(file)s" in %(count)d snapshots?\n') \ + % {'file' : self.path, 'count' : len(items)} + msg += _('WARNING: This can not be revoked!') + if QMessageBox.Yes == messagebox.warningYesNo(self, msg): + for item in items: + item.setFlags(Qt.NoItemFlags) + + thread = RemoveFileThread(self, items) + thread.started.connect(lambda: self.btn_goto.setDisabled(True)) + thread.finished.connect(lambda: self.btn_goto.setDisabled(False)) + thread.started.connect(lambda: self.btn_delete.setDisabled(True)) + thread.finished.connect(lambda: self.btn_delete.setDisabled(False)) + thread.finished.connect(self.update_snapshots_and_combo_equal_to) + self.btn_cancel.clicked.connect(thread.terminate) + thread.start() + + exclude = self.config.get_exclude() + msg = _('Exclude "%s" from future snapshots?' % self.path) + if self.path not in exclude and QMessageBox.Yes == messagebox.warningYesNo(self, msg): + exclude.append(self.path) + self.config.set_exclude(exclude) + + def on_btn_select_all_clicked(self): + '''select all expect 'Now' ''' + self.list_snapshots.clearSelection() + for item in self.list_snapshots.iterSnapshotItems(): + if len(item.snapshotID()) > 1: + item.setSelected(True) + + def accept( self ): + snapshot_id = self.list_snapshots.currentSnapshotID() + if snapshot_id: + self.snapshot_id = snapshot_id + super(SnapshotsDialog, self).accept() + +class RemoveFileThread(QThread): + '''remove files in background thread so GUI will not freeze + ''' + def __init__(self, parent, items): + self.parent = parent + self.config = parent.config + self.snapshots = parent.snapshots + self.items = items + super(RemoveFileThread, self).__init__(parent) + + def run(self): + #inhibit suspend/hibernate during delete + self.config.inhibitCookie = tools.inhibitSuspend(toplevel_xid = self.config.xWindowId, + reason = 'deleting files') + + for item in self.items: + self.snapshots.delete_path(item.snapshotID(), self.parent.path) + try: + item.setHidden(True) + except RuntimeError: + #item has been deleted + #probably because user refreshed treeview + pass + + #release inhibit suspend + if self.config.inhibitCookie: + self.config.inhibitCookie = tools.unInhibitSuspend(*self.config.inhibitCookie) diff -Nru backintime-1.0.36/README backintime-1.1.12/README --- backintime-1.0.36/README 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/README 1970-01-01 00:00:00.000000000 +0000 @@ -1,114 +0,0 @@ -Back In Time - -Copyright (C) 2008-2013 Oprea Dan, Bart de Koning, Richard Bailey, Germar Reitze - -1. About - - Back In Time is a simple backup tool for Linux, inspired by "flyback project". - Currently there are 2 interfaces available: GNOME and KDE4. - You only need to specify 3 things: - * where to save snapshots - * what folders to backup - * backup frequency (manual, every hour, every day, every month) - -1.1. Credits - - * Francisco Manuel García Claramonte : Spanish translation - * Michael Wiedmann : German translation - * Niklas Grahn : Swedish translation - * Vanja Cvelbar : Slovenian translation - * Michel Corps : French translation - * Tomáš Vadina : Slovak translation - * Paweł Hołuj : Polish translation - * Vadim Peretokin : Russian translation - * translators from Launchpad (https://translations.launchpad.net/backintime/trunk/+pots/back-in-time) - -2. INSTALL - -2.1. Debian/Ubuntu packages - - GNOME: - - ./makedeb.sh - sudo dpkg -i backintime-common-.deb - sudo dpkg -i backintime-gnome-.deb - sudo dpkg -i backintime-notify-.deb - - KDE4: (KDE4 >= 4.1) - - ./makedeb.sh - sudo dpkg -i backintime-common-.deb - sudo dpkg -i backintime-kde4-.deb - sudo dpkg -i backintime-notify-.deb - -2.2. From sources - - Common (dependencies: python, rsync, cron, openssh-client, - python-keyring, python-dbus - recomended: powermgmt-base, sshfs, encfs): - - cd common - ./configure - make - sudo make install - - GNOME (dependencies: x11-utils, python-glade2, python-gnome2, meld, - gksu, libnotify-bin - recomended: python-secretstorage | python-gnomekeyring): - - cd gnome - ./configure - make - sudo make install - - KDE4 (dependencies: x11-utils, python-kde4 (>= 4.1), kompare, kdesudo, - libnotify-bin - recomended: python-secretstorage | python-keyring-kwallet): - - cd kde4 - ./configure - make - sudo make install - - NOTIFY (dependencies: libnotify-bin): - cd notify - ./configure - make - sudo make install - - -2.3. configure options - first value is default: - --check | --no-check (only GNOME and KDE4) - Check if Gnome respectively KDE4 is available - - --fuse-group | --no-fuse-group (only COMMON) - Some distributions require user to be in group 'fuse' to use - sshfs and encfs. This toggles the check on or off. - - --kdesudo | --kdesu (only KDE4) - Use either 'kdesudo' or 'kdesu' to start Backintime as root - - --python | --python2 (all) - Use either 'python' or 'python2' to start Python Version 2.x - - -3. Integrate with filemanager - -3.1. Nautilus - - You can make a simple Nautilus integration using nautilus-actions. - * Run System => Preferences => Nautilus Actions Configuration. - * Add a new action - * Menu Item & Action tab: - * Label: Open with Back In Time - * Icon: gtk-save - * Path: backintime - * Parameters: %M - * Conditions Tab: - * Appears is selection contains: Both - * Press OK and you will see the new actions called "Open with Back In Time" when you - right-click an item - -Dec 2013 - diff -Nru backintime-1.0.36/README.md backintime-1.1.12/README.md --- backintime-1.0.36/README.md 1970-01-01 00:00:00.000000000 +0000 +++ backintime-1.1.12/README.md 2016-01-11 18:07:58.000000000 +0000 @@ -0,0 +1,140 @@ +#Back In Time + +Copyright (C) 2008-2016 Oprea Dan, Bart de Koning, Richard Bailey, Germar Reitze, Taylor Raack + +[![Build Status](https://travis-ci.org/bit-team/backintime.svg?branch=master)](https://travis-ci.org/bit-team/backintime) +[![Coverage Status](https://coveralls.io/repos/bit-team/backintime/badge.svg?branch=master&service=github)](https://coveralls.io/github/bit-team/backintime?branch=master) + +##About + +Back In Time is a simple backup tool for Linux, inspired by "flyback project". + +It provides a command line client 'backintime' and a Qt4 GUI 'backintime-qt4' +both written in Python3. + +You only need to specify 3 things: +* where to save snapshots +* what folders to backup +* backup frequency (manual, every hour, every day, every month) + +#####Credits + +* Francisco Manuel García Claramonte: Spanish translation +* Michael Wiedmann: German translation +* Niklas Grahn: Swedish translation +* Vanja Cvelbar: Slovenian translation +* Michel Corps: French translation +* Tomáš Vadina: Slovak translation +* Paweł Hołuj: Polish translation +* Vadim Peretokin: Russian translation +* translators from [Launchpad](https://translations.launchpad.net/backintime/trunk/+pots/back-in-time) + +##Support + +Please ask questions and report bug on +https://github.com/bit-team/backintime/issues + +##Download + +Please find the latest versions on +https://launchpad.net/backintime/+download + +##INSTALL + +Back In Time is included in many distributions and can be installed from their +repositories. + +#####Ubuntu PPA + +We provide a PPA (private package archive) with current stable version (ppa:bit-team/stable) +and a testing PPA (ppa:bit-team/testing) + + sudo add-apt-repository ppa:bit-team/stable + sudo apt-get update + sudo apt-get install backintime-qt4 + +#####Debian/Ubuntu make packages + + ./makedeb.sh + sudo dpkg -i ../backintime-common-.deb + sudo dpkg -i ../backintime-qt4-.deb + +#####ArchLinux + +Back In Time is available through AUR. You need to import a public key once +before installing + + gpg --keyserver pgp.mit.edu --recv-keys 615F366D944B4826 + wget https://aur.archlinux.org/cgit/aur.git/snapshot/backintime.tar.gz + tar xvzf backintime.tar.gz + cd backintime + makepkg -src + sudo pacman -U backintime-.pkg.tar.xz + +###From sources + +#####Common + +* dependencies + - python3 (>= 3.3) + - rsync + - cron-daemon + - openssh-client + - python3-keyring + - python3-dbus + +* recomended + - powermgmt-base + - sshfs + - encfs + +* Command + + cd common + ./configure + make + make test + sudo make install + + +#####Qt4 GUI + +* dependencies + - x11-utils + - python3-pyqt4 + - libnotify-bin + - policykit-1 + - python3-dbus.mainloop.qt + - backintime-common + +* recomended + - python3-secretstorage or + - python3-keyring-kwallet or + - python3-gnomekeyring + - kompare or + - meld + +* Command + + cd qt4 + ./configure + make + sudo make install + + +##configure options + + first value is default: + --fuse-group | --no-fuse-group (only COMMON) + Some distributions require user to be in group 'fuse' to use + sshfs and encfs. This toggles the check on or off. + + --python3 | --python (all) + Use either 'python3' or 'python' to start Python Version 3.x + +##NewsFeed + +Back In Time has a RSS feed +http://feeds.launchpad.net/backintime/announcements.atom + +Dec 2015 diff -Nru backintime-1.0.36/TODO backintime-1.1.12/TODO --- backintime-1.0.36/TODO 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/TODO 2016-01-11 18:07:58.000000000 +0000 @@ -1,9 +1,3 @@ TODO: -* add custom cronjob time -* add expert option to specify extra rsync arguments * use rsync return code to check that the snapshot was really taken (no out of space, copy error ...) -* Toolbars: add different texts for labels and tooltips -* KDE4: handle command line parameters -* KDE4: handle application raise -* KDE4: add right-click menu -* KDE4: better integration with kde/dolphin +* uid/gid translate table with 'Full rsync mode' diff -Nru backintime-1.0.36/updateversion.sh backintime-1.1.12/updateversion.sh --- backintime-1.0.36/updateversion.sh 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/updateversion.sh 1970-01-01 00:00:00.000000000 +0000 @@ -1,70 +0,0 @@ -#!/bin/bash - -VERSION=`cat VERSION` -echo VERSION: $VERSION - -update_control () { - echo "Update '$1'" - sed -e "s/^Version: .*$/Version: $VERSION/" \ - -e "s/backintime-\(common\|notify\|kde\) (\(>=\|<<\) [^)]*)/backintime-\1 (\2 $VERSION~)/g" \ - -i $1 -} - -update_config () { - echo "Update '$1'" - sed -e "s/^\(\s*\)VERSION = '.*'$/\1VERSION = '$VERSION'/" \ - -i $1 -} - -update_man_page () { - echo "Update '$1'" - sed -e "s/\.TH\(.*\)\"version\([^\"]*\)\"\(.*\)$/.TH\1\"version $VERSION\"\3/" \ - -i $1 -} - -update_omf () { - echo "Update '$1'" - sed -e "s/^\([ \]*\)$//" \ - -e "s/^$//" \ - -i $1 -} - -update_changelog () { - echo "Update '$1'" - echo '$BACKINTIME ($VERSION~$RELEASE) $RELEASE; urgency=low' > $1 - cat CHANGES | awk 'BEGIN {ins=0} /^Version '$VERSION'/ {ins=1; next} /^Version [0-9.]+/ && (ins == 1) {exit 0} /^\*/ && (ins == 1) {print " "$0}' >> $1 - echo " -- BIT Team $(date -R)" >> $1 -} - -update_control common/debian_specific/control - -update_control gnome/debian_specific/control - -update_control kde4/debian_specific/control - -update_control notify/debian_specific/control - -update_config common/config.py - -update_man_page common/man/C/backintime.1 - -update_man_page common/man/C/backintime-config.1 - -update_man_page gnome/man/C/backintime-gnome.1 - -update_man_page kde4/man/C/backintime-kde4.1 - -update_omf gnome/docbook/C/backintime-C.omf - -update_xml gnome/docbook/C/backintime.xml - -update_xml kde4/docbook/en/index.docbook - -update_changelog common/debian_specific/changelog - diff -Nru backintime-1.0.36/VERSION backintime-1.1.12/VERSION --- backintime-1.0.36/VERSION 2014-08-09 12:41:07.000000000 +0000 +++ backintime-1.1.12/VERSION 2016-01-11 18:07:58.000000000 +0000 @@ -1 +1 @@ -1.0.36 +1.1.12