backintime-1.1.12/AUTHORS0000664000175000017500000000026112644767576014317 0ustar germargermarOprea Dan () Bart de Koning () Richard Bailey () Germar Reitze () Taylor Raack (taylor@raack.info) backintime-1.1.12/CHANGES0000664000175000017500000011111612644767576014244 0ustar germargermarBack 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) * 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 Version 1.0.34 * sync/flush all disks before shutdown (https://bugs.launchpad.net/bugs/1261031) * Fix bug: BIT running as root shutdown after snapshot, regardless of option checked (https://bugs.launchpad.net/bugs/1261022) Version 1.0.32 * Fix bug: cron scheduled snapshots won't start with 1.0.30 Version 1.0.30 * scheduled and manual snapshots use --config * make configure scripts portable (https://bugs.launchpad.net/backintime/+bug/377429) * Fix bug: udev rule doesn't finish (https://bugs.launchpad.net/backintime/+bug/1249466) * add symlink last_snapshot (https://bugs.launchpad.net/backintime/+bug/787118) * add virtual package backintime-kde for PPA * Fix multiple errors in PPA build process; reorganise updateversion.sh * Fix bug: Mate and xfce desktop didn't show systray icon (https://bugs.launchpad.net/backintime/+bug/658424/comments/31) * add option to run rsync with 'nice' or 'ionice' on remote host (https://bugs.launchpad.net/backintime/+bug/1240301) * add Shutdown button to shutdown system after snapshot has finished (https://bugs.launchpad.net/backintime/+bug/838742) * Fix bug: Ubuntu Lucid dosn't provide SecretServiceKeyring (https://bugs.launchpad.net/backintime/+bug/1243911) * wrap long lines for syslog * Fix bug: 'gksu backintime-gnome' failed with dbus.exceptions.DBusException Version 1.0.28 * remove config on 'apt-get purge' * add more options for configure scripts; update README * add udev schedule (run BIT as soon as the drive is connected) * Fix bug: AttributeError with python-keyring>1.6.1 (https://bugs.launchpad.net/backintime/+bug/1234024) * Fix bug: TypeError: KDirModel.removeColumns() is a private method in kde4/app.py (https://bugs.launchpad.net/backintime/+bug/1232694) * add '--checksum' commandline option (https://bugs.launchpad.net/backintime/+bug/886021) * Fix bug: sshfs mount disconnect after a while due to some firewalls (add ServerAliveInterval) (https://answers.launchpad.net/backintime/+question/235685) * Fix bug: Ping fails if ICMP is disabled on remote host (https://bugs.launchpad.net/backintime/+bug/1226718) * Fix bug: KeyError in getgrnam if there is no 'fuse' group (https://bugs.launchpad.net/backintime/+bug/1225561) * Fix bug: anacrontab won't work with profilename with spaces (https://bugs.launchpad.net/backintime/+bug/1224620) * Fix bug: NameError in tools.move_snapshots_folder (https://bugs.launchpad.net/backintime/+bug/871466) * Fix bug: KPassivePopup is not defined (https://bugs.launchpad.net/backintime/+bug/871475) * multi selection for include and exclude list (https://bugs.launchpad.net/backintime/+bug/660753) * Fix bug: ValueError while reading pw-cache PID (https://answers.launchpad.net/backintime/+question/235407) Version 1.0.26 * add feature: keep min free inodes * roll back commit 836.1.5 (check free-space on ssh remote host): statvfs DOES work over sshfs. But not with quite outdated sshd * add daily anacron schedule * add delete button and 'list only equal' in Snapshot dialog; multiSelect in snapshot list * add manpage backintime-config and config-examples * Fix bug: Restore makes files public during the operation * Fix bug: Cannot keep modifications to cron (https://bugs.launchpad.net/backintime/+bug/698106) * add feature: restore from command line; add option --config * Fix bug: cannot stat 'backintime-kde4-root.desktop.kdesudo' (https://bugs.launchpad.net/backintime/+bug/696659) * Fix bug: unreadable dark KDE color schemes (https://bugs.launchpad.net/backintime/+bug/1184920) * use 'ps ax' to check if 'backintime --pw-cache' is still running * mount after locking, unmount before unlocking in take_snapshot * Fix bug: permission denied if remote uid wasn't the same as local uid * add option --bwlimit for rsync * redirect logger.error and .warning to stderr; new argument --quiet * deactivate 'Save Password' if no keyring is available * use Password-cache for user-input too * handle two Passwords * add 'SSH encrypted': mount / with encfs reverse and sync encrypted with rsync. EXPERIMENTEL! * add 'Local encrypted': mount encfs Version 1.0.24 * hide check_for_canges if full_rsync_mode is checked * DEFAULT_EXCLUDE system folders with /foo/* so at least the folder itself will backup * DEFAULT_EXCLUDE /run; exclude MOUNT_ROOT with higher priority and not with DEFAULT_EXCLUDE anymore * Fix bug: 'CalledProcessError' object has no attribute 'strerror' * Fix bug: quote rsync remote path with spaces * 'Save Password' default off to avoid problems with existing profiles * if restore uid/gid failed try to restore at least gid * SSH need to store permissions in seperate file with "Full rsync mode" because remote user might not be able to store ownership * Fix bug: restore permission failed on "Full rsync mode" * Fix bug: glib.GError: Unknown internal child: selection * Fix bug: GtkWarning: Unknown property: GtkLabel.margin-top * Fix bug: check keyring backend only if password is needed * switch to 'find -exec cmd {} +' (https://bugs.launchpad.net/backintime/+bug/1157639) * change all indent tabs to 4 spaces Version 1.0.22 * check free-space on ssh remote host (statvfs didn't work over sshfs) * Add Password storage mode ssh * Add "Full rsync mode" (can be faster but ...) * Fix bug: "Restore to..." failed due to spaces in directory name (https://bugs.launchpad.net/backintime/+bug/1096319) * Fix bug: host not found in known_hosts if port != 22 (https://bugs.launchpad.net/backintime/+bug/1130356) * Fix bug: sshtools.py used not POSIX conform conditionals Version 1.0.20 * Fix bug: restore remote path with spaces using mode ssh returned error Version 1.0.18 * Fix packages: man & translations * Fix bug: https://bugs.launchpad.net/backintime/+bug/1077446 * Fix bug: https://bugs.launchpad.net/backintime/+bug/1078979 * Fix bug: https://bugs.launchpad.net/backintime/+bug/1079479 * Map multiple arguments for gettext so they can be rearranged by translators Version 1.0.16 * Fix a package dependecy problem ... this time for good (https://bugs.launchpad.net/backintime/+bug/1077446) Version 1.0.14 * Fix a package dependecy problem Versoin 1.0.12 * Add links to: website, documentation, report a bug, answers, faq * Use libnotify for gnome/kde4 notifications instead of gnome specific libraries * Fix bug: https://bugs.launchpad.net/backintime/+bug/1059247 * Add more schedule options: every 30 min, every 2 hours, every 4 hours, every 6 hours & every 12 hours * Add generic mount-framework * Add mode 'SSH' for backups on remote host using ssh protocol. * Fix bug: wrong path if restore system root * Fix bug: glade (xml) files did not translate * 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 Version 1.0.8 * Fix bug: https://bugs.launchpad.net/backintime/+bug/723545 * Fix bug: https://bugs.launchpad.net/backintime/+bug/705237 * Fix bug: https://bugs.launchpad.net/backintime/+bug/696663 * Fix bug: https://bugs.launchpad.net/backintime/+bug/671946 Version 1.0.6 * Fix bug: https://bugs.launchpad.net/backintime/+bug/676223 * Smart remove: configurable options (https://bugs.launchpad.net/backintime/+bug/406765) * Fix bug: https://bugs.launchpad.net/backintime/+bug/672705 Version 1.0.4 * SettingsDialog: show highly recommended excludes * Fix bug: https://bugs.launchpad.net/backintime/+bug/664783 * Option to use checksum to detect changes (https://bugs.launchpad.net/backintime/+bug/666964) * Option to select log verbosity (https://bugs.launchpad.net/backintime/+bug/664423) * Gnome: use gloobus-preview if installed Version 1.0.2 * reduce log file (no more duplicate "Compare with..." lines) * declare backintime-kde4 packages as a replacement of backintime-kde Version 1.0 * add '.dropbox*' to default exclude patterns (https://bugs.launchpad.net/backintime/+bug/628172) * add option to take a snapshot at every boot (https://bugs.launchpad.net/backintime/+bug/621810) * fix xattr * add continue on errors (https://bugs.launchpad.net/backintime/+bug/616299) * add expert options: copy unsafe links & copy links * "user-callback" replace "user.callback" and receive profile informations * documentation: on-line only (easier to maintain) * add error log and error log view dialog (Gnome & KDE4) * merge with: lp:~dave2010/backintime/minor-edits * merge with: lp:~mcfonty/backintime/unique-snapshots-view * fix bug: https://bugs.launchpad.net/backintime/+bug/588841 * fix bug: https://bugs.launchpad.net/backintime/+bug/588215 * fix bug: https://bugs.launchpad.net/backintime/+bug/588393 * fix bug: https://bugs.launchpad.net/backintime/+bug/426400 * fix bug: https://bugs.launchpad.net/backintime/+bug/575022 * fix bug: https://bugs.launchpad.net/backintime/+bug/571894 * fix bug: https://bugs.launchpad.net/backintime/+bug/553441 * fix bug: https://bugs.launchpad.net/backintime/+bug/550765 * fix bug: https://bugs.launchpad.net/backintime/+bug/507246 * fix bug: https://bugs.launchpad.net/backintime/+bug/538855 * fix bug: https://bugs.launchpad.net/backintime/+bug/386230 * fix bug: https://bugs.launchpad.net/backintime/+bug/527039 * reduce memory usage during compare with previous snapshot process * fix bug: https://bugs.launchpad.net/backintime/+bug/520956 * fix bug: https://bugs.launchpad.net/backintime/+bug/520930 * fix bug: https://bugs.launchpad.net/backintime/+bug/521223 * custom backup hour (for daily backups or mode): https://bugs.launchpad.net/backintime/+bug/507451 * fix bug: https://bugs.launchpad.net/backintime/+bug/516066 * fix bug: https://bugs.launchpad.net/backintime/+bug/512813 * smart remove was slightly changed (https://bugs.launchpad.net/backintime/+bug/502435) * fix bug: https://bugs.launchpad.net/backintime/+bug/503859 * make backup on restore optional * fix bug: https://bugs.launchpad.net/backintime/+bug/501285 * add ionice support for user/cron backup process * fix bug: https://bugs.launchpad.net/backintime/+bug/493558 * fix bug that could cause "ghost" folders in snapshots (LP: 406092) * fix bug that converted / into // (LP: #455149) * fix bug: https://bugs.launchpad.net/backintime/+bug/441628 * remove "schedule per included directory" (profiles do that) (+ bug LP: #412470) * fig bug: https://bugs.launchpad.net/backintime/+bug/489380 * fix bug: https://bugs.launchpad.net/backintime/+bug/489319 * fix bug: https://bugs.launchpad.net/backintime/+bug/447841 * fix bug: https://bugs.launchpad.net/backintime/+bug/412695 * update Slovak translation (Tomáš Vadina ) * multiple profiles support * GNOME: fix notification * backintime snapshot folder is restructured to ../backintime/machine/user/profile_id/ * added the possibility to include other snapshot folders within a profile, it can only read those, there is not a GUI implementation yet * added a tag suffix to the snapshot_id, to avoid double snapshot_ids * added a desktop file for kdesu and a test if kdesu or kdesudo should be used (LP: #389988) * added expert option to disable snapshots when on battery (LP: #388178) * fix bug handling big files by the GNOME GUI (LP: #409130) * fix bug in handling of & characters by GNOME GUI (LP: #415848) * fix a security bug in chmods before snapshot removal (LP: #419774) * snapshots are stored entirely read-only (LP: #386275) * fix exclude patterns in KDE4 (LP:#432537) * fix opening german files with external applications in KDE (LP: #404652) * changed default exclude patterns to caches, thumbnails, trashbins, and backups (LP: #422132) * write access to snapshot folder is checked & change to snapshot version 2 (LP: #423086) * fix small bugs (a.o. LP: #474307) * Used a more standard crontab syntax (LP: #409783) * Stop the "Over zealous removal of crontab entries" (LP: #451811) Version 0.9.26 * update translations from Launchpad * Fix a bug in smart-remove algorithm (https://bugs.launchpad.net/backintime/+bug/376104) * Fix bug: https://bugs.launchpad.net/backintime/+bug/374477 * Fix bug: https://bugs.launchpad.net/backintime/+bug/375113 * update German translation (Michael Wiedmann ) * add '--no-check' option to configure scripts * use only 'folder' term (more consistent with GNOME/KDE) * add 'expert option': enable/disable nice for cron jobs * GNOME & KDE4: refresh snapshots button force files view to update too * you can include a backup parent directory (backup directory will auto-exclude itself) * fix some small bugs Version 0.9.24 * update translations * KDE4: fix python string <=> QString problems * KDE4 FilesView/SnapshotsDialog: ctrl-click just select (don't execute) * KDE4: fix crush after "take snapshot" process (https://bugs.launchpad.net/backintime/+bug/366241) * store basic permission in a special file so it can restore them correctly (event from NTFS) * add config version * implement Gnome/KDE4 systray icons and user.callback as plugins * reorganize code: common/GNOME/KDE4 * GNOME: break the big glade file in multiple file * backintime is no longer aware of 'backintime-gnome' and 'backintime-kde4' (you need run 'backintime-gnome' for GNOME version and 'backintime-kde4' for KDE4 version) Version 0.9.22.1 * fix French translation Version 0.9.22 * update translations from Launchpad * KDE4: fix some translation problems * remove --safe-links for save/restore (this means copy symlinks as symlinks) * update German translation (Michael Wiedmann ) * create directory now use python os.makedirs (replace use of mkdir command) * KDE4: fix a crush related to QString - python string conversion * GNOME & KDE4 SettingsDialog: if schedule automatic backups per directory is set, global schedule is hidden * GNOME FilesView: thread "*~" files (backup files) as hidden files * GNOME: use gtk-preferences icon for SettingsDialog (replace gtk-execute icon) * expert option: $XDG_CONFIG_HOME/backintime/user.callback (if exists) is called a different steps of a "take snapshot" process (before, after, on error, is a new snapshot was taken). * add more command line options: --snapshots-list, --snapshots-list-path, --last-snapshot, --last-snapshot-path * follow FreeDesktop directories specs: $XDG_DATA_HOME (default: $HOME/.local/share) to store app.lock files $XDG_CONFIG_HOME (default: $HOME/.config) to save settings * new install system: use more common steps (./configure; make; sudo make install) Version 0.9.20 * smart remove: fix an important bug and make it more verbose in syslog * update Spanish translation (Francisco Manuel García Claramonte ) Version 0.9.18 * update translations from Launchpad * update Slovak translation (Tomáš Vadina ) * update French translation (Michel Corps ) * update German translation (Michael Wiedmann ) * 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 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 * SettingDialog: add an expert option to enable to schedule automatic backups per directory * SettingDialog: schedule automatic backups - if the application can't find crontab it show an error * SettingDialog: if the application can't write in snapshots directory there should be an error message * add Polish translation (Paweł Hołuj ) * add cron in common package dependencies * GNOME & KDE4: rework settings dialog * SettingDialog: add an option to enable/disable notifications Version 0.9.16.1 * fix a bug/crush for French version Version 0.9.16 * update Spanish translation (Francisco Manuel García Claramonte ) * add Slovak translation (Tomáš Vadina ) * update Swedish translation (Niklas Grahn ) * update French translation (Michel Corps ) * update German translation (Michael Wiedmann ) * update Slovenian translation (Vanja Cvelbar ) * don't show the snapshot that is being taken in snapshots list * GNOME & KDE4: when the application starts and snapshots directory don't exists show a messagebox * 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 (for the drive to be plugged) * GNOME & KDE4: add notify if the snapshots directory don't exists * KDE4: rework MainWindow Version 0.9.14 * update German translation (Michael Wiedmann ) * update Swedish translation (Niklas Grahn ) * update Spanish translation (Francisco Manuel García Claramonte ) * update French translation (Michel Corps ) * GNOME & KDE4: rework MainWindow * GNOME & KDE4: rework SettingsDialog * GNOME & KDE4: add "smart" remove Version 0.9.12 * bug fix: now if you include ".abc" folder and exclude ".*", ".abc" will be saved in the snapshot * KDE4: add help * add Slovenian translation (Vanja Cvelbar ) * bug fix (GNOME): bookmarks with special characters Version 0.9.10 * add Swedish translation (Niklas Grahn ) * KDE4: drop and drop from backintime files view to any file manager * bug fix: fix a segfault when running from cron Version 0.9.8 * update Spanish translation (Francisco Manuel García Claramonte ) * bug fix: unable to restore files that contains space char in their name * unsafe links are ignored (that means that a link to a file/directory outside of include directories are ignored) * KDE4: add copy to clipboard * KDE4: sort files by name, size or date * cron 5/10 minutes: replace mutiple lines with a single crontab line using divide (*/5 or */10) * cron: when called from cron redirect output (stdout & stderr) to /dev/null Version 0.9.6 * update Spanish translation (Francisco Manuel García Claramonte ) * update German translation (Michael Wiedmann ) * GNOME: update docbook * KDE4: add snapshots dialog * GNOME & KDE4: add update snapshots button * GNOME: handle special folders icons (home, desktop) Version 0.9.4 * update German translation (Michael Wiedmann ) * gnome: better handling of 'take snapshot' status icon * KDE4 (>= 4.1): first version (not finished) * update man Version 0.9.2 * update Spanish translation (Francisco Manuel García Claramonte ) * update German translation (Michael Wiedmann ) * bug fix: if you add "/a" in include directories and "/a/b" in exclude patterns, "/a/b*" items are not excluded * replace diff with rsync to check if a new snapshot is needed * code cleanup * add show hidden & backup files toggle button for files view * bug fix: it does not include ".*" items even if they are not excluded (the items was included but not showed because hidden & backup files was never displayed in files view in previous versions) Version 0.9 * 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 the current one * 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 Version 0.8.20 * bug fix: sorting files/directories by name is now case insensitive * getmessages.sh: ignore "gtk-" items (this are gtk stock item ids and should not be changed) Version 0.8.18 * update man/docbook * add sort columns in MainWindow/FileView (by name, by size or by date) and SnapshotsDialog (by date) * fix German translation (Michael Wiedmann ) Version 0.8.16 * add Drag & Drop from MainWindow:FileView/SnapshotsDialog to Nautilus * update German translation (Michael Wiedmann ) Version 0.8.14 * add more command line parameters ( --version, --snapshots, --help ) * fix a crush for getting info on dead symbolic links * when taking a new backup based on the previous one don't copy the previous extra info (ex: name) * copy unsafe links when taking a snapshot Version 0.8.12 * add German translation (Michael Wiedmann ) * add SnapshotNameDialog * add Name/Remove snapshot in main toolbar * change the way it detects if the mainwindow is the ative window (no dialogs) * toolbars: show icons only * update Spanish translation (Francisco Manuel García Claramonte ) Version 0.8.10 * SnapshotsDialog: add right-click popup-menu and a toolbar with copy & restore buttons * use a more robust backup lock file * log using syslog * fix a small bug in copy to clipboard * update Spanish translation (Francisco Manuel García Claramonte ) Version 0.8.8 * SnapshotsDialog: add diff * update Spanish translation (Francisco Manuel García Claramonte ) Version 0.8.6 * fix change backup path crush * add SnapshotsDialog Version 0.8.2 * add right-click menu in files list: open (using gnome-open), copy (you can paste in Nautilus), restore (for snapshots only) * add Copy toolbar button for files list Version 0.8.1 * add every 5/10 minutes automatic backup Version 0.8 * don't show backup files (*~) * add backup files to default exclude patterns (*~) * makedeb.sh: make a single package with all languages included * install.sh: install all languages * add English manual (man) * add English help (docbook) * add help button in main toolbar * the application can be started with a 'path' to a folder or file as command line parameter * when the application start, if it is already runnig pass it's command line to the first instance (this allow a basic integration with file-managers - see README) * bug fix: when the application was started a second time it raise the first application's window but not always focused Version 0.7.4 * if there is already a GUI instance running raise it * add Spanish translation (Francisco Manuel García Claramonte ) Version 0.7.2 * better integration with gnome icons (use mime-types) * remember last path * capitalize month in timeline (bug in french translation) Version 0.7 * fix cron segfault * fix a crush when launched the very first time (not configured) * multi-lingual support * add French translation Version 0.6.4 * remove About & Settings dialogs from the pager * allow only one instance of the application Version 0.6.2 * remember window position & size Version 0.6 * when it make a snapshot it display an icon in systray area * the background color for group items in timeline and places reflect more the system color scheme * during restore only restore button is grayed ( even if everything is blocked ) Version 0.5.1 * add size & date columns in files view * changed some texts Version 0.5 * This is the first release. backintime-1.1.12/LICENSE0000664000175000017500000004310312644767576014256 0ustar germargermar GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 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. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. backintime-1.1.12/TODO0000664000175000017500000000023512644767576013740 0ustar germargermarTODO: * use rsync return code to check that the snapshot was really taken (no out of space, copy error ...) * uid/gid translate table with 'Full rsync mode' backintime-1.1.12/README.md0000664000175000017500000000653012644767576014533 0ustar germargermar#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 backintime-1.1.12/TRANSLATIONS0000664000175000017500000000100512644767576015110 0ustar germargermarSpanish: Francisco Manuel García Claramonte German: Michael Wiedmann Swedish: Niklas Grahn Slovenian: Vanja Cvelbar French: Michel Corps Slovak: Tomáš Vadina Polish: Paweł Hołuj Russian: Vadim Peretokin Other languages: Launchpad translators backintime-1.1.12/VERSION0000664000175000017500000000000712644767576014315 0ustar germargermar1.1.12 backintime-1.1.12/makedeb.sh0000775000175000017500000000013212644767576015173 0ustar germargermar#!/bin/bash PKGNAME=backintime PKGVER=$(cat VERSION) ARCH=all dpkg-buildpackage -us -uc backintime-1.1.12/common/0000775000175000017500000000000012644767576014540 5ustar germargermarbackintime-1.1.12/common/backintime0000775000175000017500000000277512644767576016607 0ustar germargermar#!/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. CUR_PATH="$(dirname $(readlink -m $0))" if [ -f "${CUR_PATH}/backintime.py" ]; then APP_PATH=$CUR_PATH else 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 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 backintime-1.1.12/common/man/0000775000175000017500000000000012644767576015313 5ustar germargermarbackintime-1.1.12/common/man/C/0000775000175000017500000000000012644767576015475 5ustar germargermarbackintime-1.1.12/common/man/C/backintime-config.10000664000175000017500000004522412644767576021137 0ustar germargermar.TH backintime-config 1 "Dec 2015" "version 1.1.12" "USER COMMANDS" .SH NAME config \- BackInTime configuration files. .SH SYNOPSIS ~/.config/backintime/config .br /etc/backintime/config .SH DESCRIPTION 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\-common/examples/ for examples. .PP The configuration file has the following format: .br keyword=arguments .PP Arguments don't need to be quoted. All characters are allowed except '='. .PP 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 Type: int Allowed Values: 0-99999 .br Internal value used to prevent hash collisions on mountpoints. Do not change this. .PP 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 .br Name of this profile. .PP Default: Main profile .RE .IP "\fIprofile.snapshots.automatic_backup_anacron_period\fR" 6 .RS Type: int Allowed Values: 0-99999 .br 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 .br Which day of month the cronjob should run? Only valid for \fIprofile.snapshots.automatic_backup_mode\fR >= 40 .PP Default: 1 .RE .IP "\fIprofile.snapshots.automatic_backup_mode\fR" 6 .RS Type: int Allowed Values: 0|1|2|4|7|10|12|14|16|18|19|20|25|27|30|40|80 .br Which schedule used for crontab. The crontab entry will be generated with 'backintime check-config'. .br 0 = Disabled .br 1 = at every boot .br 2 = every 5 minute .br 4 = every 10 minute .br 7 = every 30 minute .br 10 = every hour .br 12 = every 2 hours .br 14 = every 4 hours .br 16 = every 6 hours .br 18 = every 12 hours .br 19 = custom defined hours .br 20 = every day .br 25 = daily anacron .br 27 = when drive get connected .br 30 = every week .br 40 = every month .br 80 = every year .PP Default: 0 .RE .IP "\fIprofile.snapshots.automatic_backup_time\fR" 6 .RS Type: int Allowed Values: 0-24 .br What time the cronjob should run? Only valid for \fIprofile.snapshots.automatic_backup_mode\fR >= 20 .PP Default: 0 .RE .IP "\fIprofile.snapshots.automatic_backup_weekday\fR" 6 .RS 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 Default: 7 .RE .IP "\fIprofile.snapshots.backup_on_restore.enabled\fR" 6 .RS Type: bool Allowed Values: true|false .br Rename existing files before restore into FILE.backup.YYYYMMDD .PP Default: true .RE .IP "\fIprofile.snapshots.bwlimit.enabled\fR" 6 .RS Type: bool Allowed Values: true|false .br Limit rsync bandwidth usage over network. Use this with mode SSH. For mode Local you should rather use ionice. .PP Default: false .RE .IP "\fIprofile.snapshots.bwlimit.value\fR" 6 .RS Type: int Allowed Values: 0-99999 .br Bandwidth limit in KB/sec. .PP Default: 3000 .RE .IP "\fIprofile.snapshots.check_for_changes\fR" 6 .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. Only valid with \fIprofile.snapshots.full_rsync\fR = false .PP Default: true .RE .IP "\fIprofile.snapshots.continue_on_errors\fR" 6 .RS Type: bool Allowed Values: true|false .br Continue on errors. This will keep incomplete snapshots rather than deleting and start over again. .PP Default: true .RE .IP "\fIprofile.snapshots.copy_links\fR" 6 .RS Type: bool Allowed Values: true|false .br When symlinks are encountered, the item that they point to (the reference) is copied, rather than the symlink. .PP Default: false .RE .IP "\fIprofile.snapshots.copy_unsafe_links\fR" 6 .RS Type: bool Allowed Values: true|false .br This tells rsync to copy the referent of symbolic links that point outside the copied tree. Absolute symlinks are also treated like ordinary files. .PP Default: false .RE .IP "\fIprofile.snapshots.cron.ionice\fR" 6 .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. .PP Default: true .RE .IP "\fIprofile.snapshots.cron.nice\fR" 6 .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. .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 redirect stdout to /dev/null in cronjobs .PP Default: true .RE .IP "\fIprofile.snapshots.custom_backup_time\fR" 6 .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 .PP Default: 8,12,18,23 .RE .IP "\fIprofile.snapshots.dont_remove_named_snapshots\fR" 6 .RS Type: bool Allowed Values: true|false .br Keep snapshots with names during smart_remove. .PP 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) .br Exclude this file or folder. must be a counter starting with 1 .PP Default: '' .RE .IP "\fIprofile.snapshots.exclude.size\fR" 6 .RS Type: int Allowed Values: 0-99999 .br Quantity of profile.snapshots.exclude. entries. .PP Default: \-1 .RE .IP "\fIprofile.snapshots.full_rsync\fR" 6 .RS Type: bool Allowed Values: true|false .br 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...) .PP 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 {} +). .PP Default: true .RE .IP "\fIprofile.snapshots.include..type\fR" 6 .RS Type: int Allowed Values: 0|1 .br Specify if \fIprofile.snapshots.include..value\fR is a folder (0) or a file (1). .PP Default: 0 .RE .IP "\fIprofile.snapshots.include..value\fR" 6 .RS Type: str Allowed Values: absolute path .br Include this file or folder. must be a counter starting with 1 .PP Default: '' .RE .IP "\fIprofile.snapshots.include.size\fR" 6 .RS Type: int Allowed Values: 0-99999 .br Quantity of profile.snapshots.include. entries. .PP Default: \-1 .RE .IP "\fIprofile.snapshots.keep_only_one_snapshot.enabled\fR" 6 .RS Type: bool Allowed Values: true|false .br NOT YET IMPLEMENTED. Remove all snapshots but one. .PP 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'. .PP Default: '' .RE .IP "\fIprofile.snapshots.log_level\fR" 6 .RS Type: int Allowed Values: 1-3 .br Log level used during take_snapshot. .br 1 = Error .br 2 = Changes .br 3 = Info .PP Default: 3 .RE .IP "\fIprofile.snapshots.min_free_inodes.enabled\fR" 6 .RS Type: bool Allowed Values: true|false .br Remove snapshots until \fIprofile.snapshots.min_free_inodes.value\fR free inodes in % is reached. .PP Default: true .RE .IP "\fIprofile.snapshots.min_free_inodes.value\fR" 6 .RS Type: int Allowed Values: 1-15 .br Keep at least value % free inodes. .PP Default: 2 .RE .IP "\fIprofile.snapshots.min_free_space.enabled\fR" 6 .RS Type: bool Allowed Values: true|false .br Remove snapshots until \fIprofile.snapshots.min_free_space.value\fR free space is reached. .PP Default: true .RE .IP "\fIprofile.snapshots.min_free_space.unit\fR" 6 .RS Type: int Allowed Values: 10|20 .br 10 = MB .br 20 = GB .PP Default: 20 .RE .IP "\fIprofile.snapshots.min_free_space.value\fR" 6 .RS Type: int Allowed Values: 1-99999 .br Keep at least value + unit free space. .PP Default: 1 .RE .IP "\fIprofile.snapshots.mode\fR" 6 .RS Type: str Allowed Values: local|local_encfs|ssh|ssh_encfs .br Use mode (or backend) for this snapshot. Look at 'man backintime' section 'Modes'. .PP Default: local .RE .IP "\fIprofile.snapshots..password.save\fR" 6 .RS Type: bool Allowed Values: true|false .br Save password to system keyring (gnome-keyring or kwallet). must be the same as \fIprofile.snapshots.mode\fR .PP Default: false .RE .IP "\fIprofile.snapshots..password.use_cache\fR" 6 .RS Type: bool Allowed Values: true|false .br 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 .PP Default: true if home is not encrypted .RE .IP "\fIprofile.snapshots.no_on_battery\fR" 6 .RS Type: bool Allowed Values: true|false .br Don't take snapshots if the Computer runs on battery. .PP Default: false .RE .IP "\fIprofile.snapshots.notify.enabled\fR" 6 .RS Type: bool Allowed Values: true|false .br Display notifications (errors, warnings) through libnotify. .PP Default: true .RE .IP "\fIprofile.snapshots.path\fR" 6 .RS Type: str Allowed Values: absolute path .br Where to save snapshots in mode 'local'. This path must contain a folderstructure like 'backintime///' .PP Default: '' .RE .IP "\fIprofile.snapshots.path.host\fR" 6 .RS Type: str Allowed Values: text .br Set Host for snapshot path .PP Default: local hostname .RE .IP "\fIprofile.snapshots.path.profile\fR" 6 .RS Type: str Allowed Values: 1-99999 .br Set Profile-ID for snapshot path .PP Default: current Profile-ID .RE .IP "\fIprofile.snapshots.path.user\fR" 6 .RS Type: str Allowed Values: text .br 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 .br Preserve ACL. The source and destination systems must have compatible ACL entries for this option to work properly. .PP Default: false .RE .IP "\fIprofile.snapshots.preserve_xattr\fR" 6 .RS Type: bool Allowed Values: true|false .br Preserve extended attributes (xattr). .PP Default: false .RE .IP "\fIprofile.snapshots.remove_old_snapshots.enabled\fR" 6 .RS Type: bool Allowed Values: true|false .br Remove all snapshots older than value + unit .PP Default: true .RE .IP "\fIprofile.snapshots.remove_old_snapshots.unit\fR" 6 .RS Type: int Allowed Values: 20|30|80 .br 20 = days .br 30 = weeks .br 80 = years .PP Default: 80 .RE .IP "\fIprofile.snapshots.remove_old_snapshots.value\fR" 6 .RS Type: int Allowed Values: 0-99999 .br Snapshots older than this times units will be removed .PP 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 .br Run smart_remove to clean up old snapshots after a new snapshot was created. .PP Default: false .RE .IP "\fIprofile.snapshots.smart_remove.keep_all\fR" 6 .RS Type: int Allowed Values: 0-99999 .br Keep all snapshots for X days. .PP Default: 2 .RE .IP "\fIprofile.snapshots.smart_remove.keep_one_per_day\fR" 6 .RS Type: int Allowed Values: 0-99999 .br Keep one snapshot per day for X days. .PP Default: 7 .RE .IP "\fIprofile.snapshots.smart_remove.keep_one_per_month\fR" 6 .RS Type: int Allowed Values: 0-99999 .br Keep one snapshot per month for X month. .PP Default: 24 .RE .IP "\fIprofile.snapshots.smart_remove.keep_one_per_week\fR" 6 .RS Type: int Allowed Values: 0-99999 .br Keep one snapshot per week for X weeks. .PP 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 .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 Default: default .RE .IP "\fIprofile.snapshots.ssh.host\fR" 6 .RS Type: str Allowed Values: IP or domain address .br Remote host used for mode 'ssh' and 'ssh_encfs'. .PP Default: '' .RE .IP "\fIprofile.snapshots.ssh.ionice\fR" 6 .RS Type: bool Allowed Values: true|false .br 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' .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 .IP "\fIprofile.snapshots.ssh.path\fR" 6 .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 './'. .PP Default: '' .RE .IP "\fIprofile.snapshots.ssh.port\fR" 6 .RS Type: int Allowed Values: 0-65535 .br SSH Port on remote host. .PP 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. .PP Default: ~/.ssh/id_dsa .RE .IP "\fIprofile.snapshots.ssh.user\fR" 6 .RS Type: str Allowed Values: text .br Remote SSH user .PP Default: local users name .RE .IP "\fIprofile.snapshots.take_snapshot..user.script\fR" 6 .RS Type: str Allowed Values: absolute path .br Run this scrip on events defined by . .br Possible events for : .br before .br after .br new_snapshot .br error .PP Default: '' .RE .IP "\fIprofile.snapshots.use_checksum\fR" 6 .RS Type: bool Allowed Values: true|false .br Use checksum to detect changes rather than size + time. .PP Default: false .RE .IP "\fIprofile.snapshots.user_backup.ionice\fR" 6 .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. .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 separated by colon (e.g. 1:3:4) .br All active Profiles ( in profile.snapshots...). .PP Default: 1 .RE .IP "\fIprofiles.version\fR" 6 .RS Type: int Allowed Values: 1 .br Internal version of profiles config. .PP Default: 1 .RE .SH SEE ALSO backintime, backintime-qt4. .PP Back In Time also has a website: https://github.com/bit-team/backintime .SH AUTHOR This manual page was written by BIT Team(). backintime-1.1.12/common/man/C/backintime.10000664000175000017500000003221212644767576017665 0ustar germargermar.TH backintime 1 "July 2015" "version 1.1.12" "USER COMMANDS" .SH NAME backintime \- a simple backup tool for Linux. .PP This is the command line tool. The graphical tool is backintime-qt4. .SH SYNOPSIS .B backintime [\-\-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). .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, but you can't restore them). .PP 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). .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 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'. .PP 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. .RE .IP "\fILocal encrypted\fR" 4 .RS 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 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. .PP \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 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 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'. 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 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 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 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). .PP The first argument is the profile id (1=Main Profile, ...). .PP The second argument is the profile name. .PP The third argument is the reason: .RS .TP 1 Backup process begins. .TP 2 Backup process ends. .TP 3 A new snapshot was taken. The extra arguments are snapshot ID and snapshot path. .TP 4 There was an error. The second argument is the error code. .RS Error codes: .TP 1 The application is not configured. .TP 2 A "take snapshot" process is already running. .TP 3 Can't find snapshots folder (is it on a removable drive ?). .TP 4 A snapshot for "now" already exist. .RE .TP 5 On (graphical) App start. .TP 6 On (graphical) App close. .TP 7 Mount all necessary drives. .TP 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. .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 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-qt4, 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(). backintime-1.1.12/common/man/C/backintime-askpass.10000664000175000017500000000164312644767576021334 0ustar germargermar.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(). backintime-1.1.12/common/sshtools.py0000664000175000017500000006601412644767576016777 0ustar germargermar# 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 grp import subprocess import gettext import string import random import tempfile import socket from time import sleep import config import mount import logger import tools import password_ipc from exceptions import MountException import bcolors _=gettext.gettext class SSH(mount.MountControl): """ Mount remote path with sshfs. The real take_snapshot process will use rsync over ssh. Other commands run remote over ssh. """ CHECK_FUSE_GROUP = True def __init__(self, cfg = None, profile_id = None, hash_id = None, tmp_mount = False, parent = None, symlink = True, **kwargs): 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 super(SSH, self).__init__() self.all_kwargs = {} #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--------------------------------------------------------- self.setattr_kwargs('user', self.config.get_ssh_user(self.profile_id), **kwargs) self.setattr_kwargs('host', self.config.get_ssh_host(self.profile_id), **kwargs) self.setattr_kwargs('port', self.config.get_ssh_port(self.profile_id), **kwargs) 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 not self.path: self.path = './' self.set_default_args() self.symlink_subfolder = None # config strings used in ssh-calls self.user_host_path = '%s@%s:%s' % (self.user, self.host, self.path) self.user_host = '%s@%s' % (self.user, self.host) # 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 if not self.cipher == 'default': sshfs.extend(['-o', 'Ciphers=%s' % self.cipher]) sshfs.extend(['-o', 'idmap=user']) sshfs.extend([self.user_host_path, self.mountpoint]) #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 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: 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: 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 return True if everything is okay all pre|post_[u]mount_check can also be used to prepare things or clean up""" 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: self.check_cipher() self.check_remote_folder() 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, 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 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. #But because of this we can NOT use getpass inside backintime-askpass #if password is not saved and there is no x-server. #So, let's just keep ssh-add asking for the password in that case. alarm = tools.Alarm() alarm.start(10) try: proc = subprocess.call(['ssh-add', self.private_key_file]) alarm.stop() except tools.Timeout: pass else: 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, universal_newlines = True) output, error = proc.communicate() if proc.returncode: logger.error('Failed to unlock SSH private key %s: %s' %(self.private_key_file, error), self) if self.password: thread.stop() 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'): 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: 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=subprocess.DEVNULL) except subprocess.CalledProcessError: 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=subprocess.DEVNULL, stderr=subprocess.PIPE, universal_newlines = True) err = proc.communicate()[1] if proc.returncode: 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'): temp = tempfile.mkstemp()[1] print('create random data file') subprocess.call(['dd', 'if=/dev/urandom', 'of=%s' % temp, 'bs=1M', 'count=%s' % size]) keys = list(self.config.SSH_CIPHERS.keys()) keys.sort() for cipher in keys: if cipher == 'default': continue 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]) 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)): 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 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 cmd += 'test $d -eq 1 && exit $err;' #return errorcode from mkdir cmd += 'test -d %s || exit 11;' % self.path #path is no directory 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, 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 MountException( _('Remote path exists but is not a directory:\n %s') % self.path) elif ex.returncode == 12: raise MountException( _('Remote path is not writeable:\n %s') % self.path) elif ex.returncode == 13: raise MountException( _('Remote path is not executable:\n %s') % self.path) else: raise MountException( _('Couldn\'t create remote path:\n %s') % self.path) else: #returncode is 0 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: with socket.create_connection((self.host, self.port), 2.0) as s: result = s.connect_ex(s.getpeername()) except: result = -1 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: 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 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 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()) head = 'tmp=%s ; ' % remote_tmp_dir #first define a function to clean up and exit 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; ' 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 += '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; ' tail.append(cmd) #try to 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 += '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 += '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 += 'test $err_rm -ne 0 && cleanup $err_rm; ' tail.append(cmd) #try nice -n 19 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; ' 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; ' 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\"' 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 output_split and not output_split[-1]: output_split = output_split[:-1] else: break 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 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' for line in output_split: if line.startswith('cp'): try: inode1 = output_split[i].split(' ')[0] inode2 = output_split[i+1].split(' ')[0] except IndexError: pass if not inode1 == inode2: 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)) backintime-1.1.12/common/backintime.desktop0000664000175000017500000000034512644767576020243 0ustar germargermar[Desktop Entry] Version=1.0 Name=Backintime Password Cache 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 Type=Application backintime-1.1.12/common/applicationinstance.py0000664000175000017500000001534312644767576021150 0ustar germargermar# 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 fcntl import errno import logger class ApplicationInstance: '''class used to handle one application instance mechanism 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() 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 self.pid, self.procname = self.readPidFile() #check if the process with specified by pid exists if 0 == self.pid: return True try: 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: #exit the application print("The application is already running !") exit(0) #exit raise an exception so don't put it in a try/except block return False def start_application( self ): '''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() 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' ) #do something here print("Start MyApp") time.sleep(5) #sleep 5 seconds print("End MyApp") #remove pid file app_instance.exit_application() backintime-1.1.12/common/cli.py0000664000175000017500000001527512644767576015673 0ustar germargermar# -*- coding: utf-8 -*- # Back In Time # 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 sys import tools import snapshots import bcolors def restore(cfg, snapshot_id = None, what = None, where = None, **kwargs): if what is None: what = input('File to restore: ') what = tools.prepare_path(os.path.abspath(os.path.expanduser(what))) if where is None: 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_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 snapshot_id in snapshot_list: return snapshot_id else: print('SnapshotID %s not found.' % snapshot_id) else: try: index = int(snapshot_id) return snapshot_list[index] except (ValueError, IndexError): print('Invalid SnaphotID index: %s' % snapshot_id) 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('') 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, **kwargs): self.config = cfg 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.kwargs) print('\nLog saved to %s' % self.log_file) backintime-1.1.12/common/test/0000775000175000017500000000000012644767576015517 5ustar germargermarbackintime-1.1.12/common/test/test_snapshots.py0000664000175000017500000000316112644767576021153 0ustar germargermar# 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() backintime-1.1.12/common/test/test_tools.py0000664000175000017500000001424212644767576020273 0ustar germargermar# 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() backintime-1.1.12/common/test/config0000664000175000017500000000124512644767576016711 0ustar germargermarprofile1.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=1backintime-1.1.12/common/test/test_argparser.py0000664000175000017500000002445012644767576021123 0ustar germargermar# 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() backintime-1.1.12/common/test/test.sh0000775000175000017500000001110412644767576017032 0ustar germargermar#!/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 backintime-1.1.12/common/test/test_configfile.py0000664000175000017500000006062112644767576021242 0ustar germargermar# 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() backintime-1.1.12/common/test/__init__.py0000664000175000017500000000170112644767576017627 0ustar germargermar# 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 backintime-1.1.12/common/test/test_applicationinstance.py0000664000175000017500000001455612644767576023173 0ustar germargermar# 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() backintime-1.1.12/common/config-example-local0000664000175000017500000000462312644767576020456 0ustar germargermarprofile1.snapshots.automatic_backup_day=1 profile1.snapshots.automatic_backup_mode=0 profile1.snapshots.automatic_backup_time=0 profile1.snapshots.automatic_backup_weekday=7 profile1.snapshots.backup_on_restore.enabled=true profile1.snapshots.bwlimit.enabled=false profile1.snapshots.bwlimit.value=3000 profile1.snapshots.check_for_changes=true profile1.snapshots.continue_on_errors=true profile1.snapshots.copy_links=false profile1.snapshots.copy_unsafe_links=false profile1.snapshots.cron.ionice=true profile1.snapshots.cron.nice=true profile1.snapshots.custom_backup_time=8,12,18,23 profile1.snapshots.dont_remove_named_snapshots=true profile1.snapshots.exclude.1.value=.gvfs profile1.snapshots.exclude.10.value=/proc/* profile1.snapshots.exclude.11.value=/sys/* profile1.snapshots.exclude.12.value=/dev/* profile1.snapshots.exclude.13.value=/run/* profile1.snapshots.exclude.2.value=.cache* profile1.snapshots.exclude.3.value=[Cc]ache* profile1.snapshots.exclude.4.value=.thumbnails* profile1.snapshots.exclude.5.value=[Tt]rash* profile1.snapshots.exclude.6.value=*.backup* profile1.snapshots.exclude.7.value=*~ profile1.snapshots.exclude.8.value=/home/USER/Ubuntu One profile1.snapshots.exclude.9.value=.dropbox* profile1.snapshots.exclude.size=13 profile1.snapshots.full_rsync=false profile1.snapshots.include.1.type=0 profile1.snapshots.include.1.value=/home/USER profile1.snapshots.include.size=1 profile1.snapshots.local_encfs.path= profile1.snapshots.log_level=3 profile1.snapshots.min_free_space.enabled=true profile1.snapshots.min_free_space.unit=20 profile1.snapshots.min_free_space.value=1 profile1.snapshots.mode=local profile1.snapshots.no_on_battery=false profile1.snapshots.notify.enabled=true profile1.snapshots.path=/mnt/backup profile1.snapshots.path.auto=true profile1.snapshots.path.host=HOST profile1.snapshots.path.profile=1 profile1.snapshots.path.user=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.smart_remove=false profile1.snapshots.smart_remove.keep_all=2 profile1.snapshots.smart_remove.keep_one_per_day=7 profile1.snapshots.smart_remove.keep_one_per_month=24 profile1.snapshots.smart_remove.keep_one_per_week=4 profile1.snapshots.use_checksum=false profile1.snapshots.user_backup.ionice=false profiles.version=1 backintime-1.1.12/common/dummytools.py0000664000175000017500000001056712644767576017337 0ustar germargermar# 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 import config import mount _=gettext.gettext class Dummy(mount.MountControl): """ This is a template for mounting services. For simple mount services all you need to do is: - add your settings in gnome|kde/settingsdialog.py (search for the dummy examples) - 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. Methodes from MountControl also can be overriden in here if you need something different.""" def __init__(self, cfg = None, profile_id = None, hash_id = None, tmp_mount = False, parent = None, symlink = True, **kwargs): 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 super(Dummy, self).__init__() self.all_kwargs = {} #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) 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--------------------------------------------------------- self.setattr_kwargs('user', self.config.get_dummy_user(self.profile_id), **kwargs) 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 backintime-1.1.12/common/plugins/0000775000175000017500000000000012644767576016221 5ustar germargermarbackintime-1.1.12/common/plugins/userscriptsplugin.py0000664000175000017500000000400012644767576022372 0ustar germargermar# 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 tools import logger import gettext _=gettext.gettext class UserScriptsPlugin( pluginmanager.Plugin ): def __init__( self ): return def init( self, snapshots ): self.config = snapshots.config return True def notify_script( self, path, args = '' ): if not path: return logger.info("[UserScriptsPlugin.notify_script] %s %s" %(path, args), self) os.system( "sh \"%s\" %s" % ( self.callback, args ) ) def on_process_begins( self ): self.notify_script( self.config.get_take_snapshot_user_script_before() ) def on_process_ends( self ): self.notify_script( self.config.get_take_snapshot_user_script_after() ) def on_error( self, code, message ): code = str( code ) 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 ) ) backintime-1.1.12/common/plugins/usercallbackplugin.py0000664000175000017500000000613712644767576022454 0ustar germargermar# 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 logger import gettext from subprocess import Popen, PIPE from exceptions import StopException _=gettext.gettext class UserCallbackPlugin( pluginmanager.Plugin ): def __init__( self ): return def init( self, snapshots ): self.config = snapshots.config self.callback = self.config.get_take_snapshot_user_callback() if not os.path.exists( self.callback ): return False return True 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(cmd, stdout = stdout, stderr = stderr, universal_newlines = True) output = callback.communicate() if output[0]: logger.info('user-callback returned \'%s\'' %output[0].strip('\n'), self) if output[1]: logger.error('user-callback returned \'%s\'' %output[1].strip('\n'), self) if callback.returncode != 0: 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' ) def on_process_ends( self ): self.notify_callback( '2' ) def on_error(self, code, message): if not message: self.notify_callback('4', code) else: self.notify_callback('4', code, message) def on_new_snapshot( self, 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') backintime-1.1.12/common/encfstools.py0000664000175000017500000007157212644767576017305 0ustar germargermar# 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 grp import gettext import subprocess import re import shutil import tempfile from datetime import datetime from distutils.version import StrictVersion import config import mount import password import password_ipc import tools import sshtools import logger from exceptions import MountException, EncodeValueError _=gettext.gettext class EncFS_mount(mount.MountControl): """ Mount encrypted paths with encfs. """ CHECK_FUSE_GROUP = True def __init__(self, cfg = None, profile_id = None, hash_id = None, tmp_mount = False, parent = None, symlink = True, **kwargs): 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 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) self.setattr_kwargs('reverse', False, **kwargs) self.setattr_kwargs('config_path', None, **kwargs) 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, universal_newlines = True) output = proc.communicate()[0] self.backup_config() if proc.returncode: 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 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() 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""" f = '.encfs6.xml' if self.config_path is None: cfg = os.path.join(self.path, f) else: 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""" 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 MountException( msg ) else: if not self.config.ask_question( msg + _('\nCreate a new encrypted folder?')): 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 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'): 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: 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, universal_newlines = True) output = proc.communicate()[0] m = re.search(r'(\d\.\d\.\d)', output) 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 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. Mount / with encfs --reverse. rsync will then sync the encrypted view on / to the remote path""" def __init__(self, cfg = None, profile_id = None, mode = None, parent = None,*args, **kwargs): 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.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')) 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) 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() 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 \ 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""" 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 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: 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': 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: 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': d['reverse'] = True d['path'] = '/' d['config_path'] = self.ssh.mountpoint if 'encfs_password' in d: d['password'] = d.pop('encfs_password') else: 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. ENCFS_SSH will replace config.ENCODE whit this""" def __init__(self, encfs): self.encfs = encfs self.password = self.encfs.password self.chroot = self.encfs.rev_root.mountpoint if not self.chroot[-1] == os.sep: self.chroot += os.sep 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_separate_asterisk = re.compile(r'(.*?)(\*+)(.*)') def __del__(self): self.close() def start_process(self): """start 'encfsctl encode' process in pipe mode.""" thread = password_ipc.TempPasswordThread(self.password) env = self.encfs.get_env() env['ASKPASS_TEMP'] = thread.temp_file thread.start() logger.debug('start \'encfsctl encode\' process', self) encfsctl = ['encfsctl', 'encode', '--extpass=backintime-askpass', '/'] logger.debug('Call command: %s' %' '.join(encfsctl), self) self.p = subprocess.Popen(encfsctl, env = env, bufsize = 0, stdin=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.', self) del self.p self.start_process() self.p.stdin.write(path + '\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. """ if tools.patternHasNotEncryptableWildcard(path): return None enc = '' m = self.re_asterisk.search(path) if not m is None: 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_) if m is None: return None 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 m.group(3): if not m.group(3).startswith(os.sep): return 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) continue else: break else: enc = self.path(path) 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.debug('stop \'encfsctl encode\' process', self) self.p.communicate() class Bounce(object): """Dummy class that will simply return all input. 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, string = True): self.mode = cfg.get_snapshots_mode() if self.mode == 'local_encfs': self.password = cfg.get_password(pw_id = 1) elif self.mode == 'ssh_encfs': 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 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("...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\(".*?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("...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\(".*?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') 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() def start_process(self): """start 'encfsctl decode' process in pipe mode.""" thread = password_ipc.TempPasswordThread(self.password) env = os.environ.copy() env['ASKPASS_TEMP'] = thread.temp_file thread.start() 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, 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.', self) del self.p self.start_process() self.p.stdin.write(path + self.newline) ret = self.p.stdout.readline() 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_: output.append(self.path(path)) return output def log(self, line): """decode paths in takesnapshot.log""" #rsync cmd 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) return line #[C] Change lines m = self.re_change.match(line) if not m is None: return m.group(1) + self.path_with_arrow(m.group(2)) #[I] Information lines m = self.re_skip.match(line) if not m is None: return line m = self.re_info.match(line) if not m is None: return m.group(1) + self.path_with_arrow(m.group(2)) + m.group(3) #[E] Error lines m = self.re_error.match(line) if not m is None: return m.group(1) + self.path(m.group(2)) + m.group(3) #cp cmd m = self.re_info_cp.match(line) if not m is None: return m.group(1) + self.path(m.group(2)) + m.group(3) + self.path(m.group(4)) + m.group(5) return line def replace(self, m): """return decoded string for re.sub""" decrypt = self.re_all_except_asterisk.sub(self.path_m, m.group(2)) if os.path.isabs(m.group(2)): decrypt = os.path.join(os.sep, decrypt) return m.group(1) + decrypt + m.group(3) def path_m(self, m): """return decoded path of a match object""" return self.path(m.group(0)) def path_with_arrow(self, path): """rsync print symlinks like 'dest -> src'. This will decode both and also normal paths""" m = self.re_all_except_arrow.match(path) if not m is None: return self.path(m.group(1)) + m.group(2) + self.path(m.group(3)) else: return self.path(path) def remote(self, path): """decode the path on remote host starting from backintime/host/user/...""" 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.debug('stop \'encfsctl decode\' process', self) self.p.communicate() backintime-1.1.12/common/password.py0000664000175000017500000003676112644767576016771 0ustar germargermar# 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 sys import os import time import atexit import signal 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/ """ def __init__(self, pidfile, stdin='/dev/null', stdout='/dev/stdout', stderr='/dev/null'): self.stdin = stdin 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.debug('start', self) try: pid = os.fork() if pid > 0: # exit first parent sys.exit(0) except OSError as e: logger.error("fork #1 failed: %d (%s)" % (e.errno, str(e)), self) sys.exit(1) # decouple from parent environment os.chdir("/") os.setsid() os.umask(0) # do second fork try: pid = os.fork() if pid > 0: # exit from second parent sys.exit(0) 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 = 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.debug('write pidfile', self) atexit.register(self.appInstance.exit_application) signal.signal(signal.SIGTERM, self._cleanup_handler) self.appInstance.start_application() def _cleanup_handler(self, signum, frame): self.fifo.delfifo() self.appInstance.exit_application() sys.exit(0) def start(self): """ Start the daemon """ # Check for a pidfile to see if the daemon already runs if not self.appInstance.check(): message = "pidfile %s already exist. Daemon already running?\n" logger.error(message % self.pidfile, self) sys.exit(1) # Start the daemon self.daemonize() self.run() def stop(self): """ Stop the daemon """ # Get the pid from the pidfile pid, procname = self.appInstance.readPidFile() if not pid: message = "pidfile %s does not exist. Daemon not running?\n" logger.error(message % self.pidfile, self) return # not an error in a restart # Try killing the daemon process try: while True: os.kill(pid, signal.SIGTERM) time.sleep(0.1) except OSError as err: if err.errno == errno.ESRCH: #no such process self.appInstance.exit_application() else: logger.error(str(err), self) sys.exit(1) def restart(self): """ Restart the daemon """ self.stop() self.start() def reload(self): """ send SIGHUP signal to process """ # Get the pid from the pidfile pid, procname = self.appInstance.readPidFile() if not pid: message = "pidfile %s does not exist. Daemon not running?\n" logger.error(message % self.pidfile, self) return # Try killing the daemon process try: os.kill(pid, signal.SIGHUP) except OSError as err: if err.errno == errno.ESRCH: #no such process self.appInstance.exit_application() else: sys.stderr.write(str(err)) sys.exit(1) def status(self): """ return status """ return not self.appInstance.check() def run(self): """ You should override this method when you subclass Daemon. It will be called after the process has been daemonized by start() or restart(). """ pass class Password_Cache(Daemon): """ Password_Cache get started on User login. It provides passwords for BIT cronjobs because keyring is not available when the User is not logged in. Does not start if there is no password to cache (e.g. no profile allows to cache). """ PW_CACHE_VERSION = 3 def __init__(self, cfg = None, *args, **kwargs): self.config = cfg if self.config is None: 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, 0o700) else: 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 from self.db through FIFO. """ 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(), 0o600) logger.debug('Keyring supported: %s' %self.keyring_supported, self) tools.save_env(self.config.get_cron_env_file()) if not self._collect_passwords(): 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.debug('Start loop', self) while True: try: request = self.fifo.read() request = request.split('\n')[0] task, value = request.split(':', 1) if task == 'get_pw': key = value if key in list(self.db_keyring.keys()): answer = 'pw:' + self.db_keyring[key] elif key in list(self.db_usr.keys()): answer = 'pw:' + self.db_usr[key] else: answer = 'none:' self.fifo.write(answer, 5) elif task == 'set_pw': key, value = value.split(':', 1) self.db_usr[key] = value except IOError as e: logger.error('Error in writing answer to FIFO: %s' % str(e), self) except KeyboardInterrupt: logger.debug('Quit.', self) break 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(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. """ run_daemon = False profiles = self.config.get_profiles() for profile_id in profiles: mode = self.config.get_snapshots_mode(profile_id) for pw_id in (1, 2): if self.config.mode_need_password(mode, pw_id): if self.config.get_password_use_cache(profile_id): run_daemon = True 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 self.db_keyring['%s/%s' %(service_name, user_name)] = password return run_daemon def check_version(self): info = configfile.ConfigFile() info.load(self.config.get_password_cache_info()) if info.get_int_value('version') < self.PW_CACHE_VERSION: return False return True class Password(object): """ provide passwords for BIT either from keyring, Password_Cache or by asking User. """ def __init__(self, cfg = None): self.config = cfg if self.config is None: self.config = config.Config() 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, Password_Cache or by asking User. """ if not self.config.mode_need_password(mode, pw_id): return '' service_name = self.config.get_keyring_service_name(profile_id, mode, pw_id) user_name = self.config.get_keyring_user_name(profile_id) try: return self.db['%s/%s' %(service_name, user_name)] except KeyError: pass password = '' if self.config.get_password_use_cache(profile_id) and not only_from_keyring: #from pw_cache password = self._get_password_from_pw_cache(service_name, user_name) if not password is None: self._set_password_db(service_name, user_name, password) return password if self.config.get_password_save(profile_id): #from keyring password = self._get_password_from_keyring(service_name, user_name) if not password is None: self._set_password_db(service_name, user_name, password) return password if not only_from_keyring: #ask user and write to cache password = self._get_password_from_user(parent, profile_id, mode, pw_id) 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) return password return password def _get_password_from_keyring(self, service_name, user_name): """ get password from system keyring (seahorse). The keyring is only available if User is logged in. """ if self.keyring_supported: try: return tools.get_password(service_name, user_name) except Exception: 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 """ if self.pw_cache.status(): 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 = answer.split(':', 1) if mode == 'none': return None 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 and user is logged in. """ 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]} tools.register_backintime_path('qt4') x_server = tools.check_x_server() import_successful = False if x_server: try: import messagebox import_successful = True except ImportError: pass if not import_successful or not x_server: import getpass alarm = tools.Alarm() alarm.start(300) try: password = getpass.getpass(prompt) alarm.stop() except Timeout: password = '' return password 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 """ 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): return tools.set_password(service_name, user_name, password) def _set_password_to_cache(self, service_name, user_name, password): if self.pw_cache.status(): self.pw_cache.check_version() self.fifo.write('set_pw:%s/%s:%s' %(service_name, user_name, password), timeout = 5) backintime-1.1.12/common/pluginmanager.py0000664000175000017500000001443712644767576017754 0ustar germargermar# 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 tools tools.register_backintime_path( 'common' ) tools.register_backintime_path( 'plugins' ) import logger from exceptions import StopException class Plugin: def __init__( self ): return def init( self, snapshots ): return True def is_gui( self ): return False def on_process_begins( self ): return def on_process_ends( self ): return 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 ): 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 ): self.plugins = [] self.has_gui_plugins_ = False self.plugins_loaded = 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 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 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 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 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 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 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) backintime-1.1.12/common/progress.py0000664000175000017500000000255112644767576016761 0ustar germargermar# 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) backintime-1.1.12/common/create-manpage-backintime-config.py0000664000175000017500000002066512644767576023343 0ustar germargermar# Back In Time # 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 re import os import sys from time import strftime, gmtime PATH = os.path.join(os.getcwd(), os.path.dirname(sys.argv[0])) CONFIG = os.path.join(PATH, 'config.py') MAN = os.path.join(PATH, 'man/C/backintime-config.1') 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_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 config \- BackInTime configuration files. .SH SYNOPSIS ~/.config/backintime/config .br /etc/backintime/config .SH DESCRIPTION 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\-common/examples/ for examples. .PP The configuration file has the following format: .br keyword=arguments .PP Arguments don't need to be quoted. All characters are allowed except '='. .PP 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-qt4. .PP Back In Time also has a website: https://github.com/bit-team/backintime .SH AUTHOR This manual page was written by BIT Team(). ''' INSTANCE = 'instance' NAME = 'name' VALUES = 'values' DEFAULT = 'default' COMMENT = 'comment' REFERENCE = 'reference' LINE = 'line' 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' %(instance, values) ret += '.br\n' ret += '%s\n' % comment ret += '.PP\n' if SORT: ret += 'Default: %s\n' % default else: ret += 'Default: %-18s %s line: %d\n' % (default, reference, line) ret += '.RE\n' return ret def select(a, b): if a: return a return b def select_values(instance, values): if values: return values if instance == 'bool': return 'true|false' if instance == 'str': return 'text' 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(): 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: commentline = '' 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_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('% ') 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) values = force_var = force_default = instance = name = var = default = None commentline = '' with open(MAN, 'w') as f: f.write(HEADER) if SORT: s = lambda x: x else: 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__": main() backintime-1.1.12/common/backintime.py0000664000175000017500000010275612644767576017233 0ustar germargermar# 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 import argparse import config import logger import snapshots import tools import sshtools import mount 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 ' cmd += 'backintime ' if '1' != cfg.get_current_profile(): 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 if logger.DEBUG: cmd += '--debug ' cmd += 'backup &' os.system( cmd ) def take_snapshot( cfg, force = True ): '''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 MountException as ex: logger.error(str(ex)) 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 MountException as ex: logger.error(str(ex)) def create_parsers(app_name = 'backintime'): '''define parsers for commandline arguments. 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: ' + 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 `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 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. args: argparse.ArgumentParser instance ''' force_stdout = sys.stdout 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) 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() backintime-1.1.12/common/configfile.py0000664000175000017500000005710512644767576017227 0ustar germargermar# 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 logger _=gettext.gettext 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: 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 ): '''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: 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.strip('\n').split( '=', maxsplit ) if len( items ) == 2: 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 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 ): '''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 = '' ): '''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(): return True return False except: 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 ): '''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.keys(): if key.startswith( prefix ): remove_keys.append( key ) for key in remove_keys: del self.dict[ key ] def get_keys(self): return list(self.dict.keys()) class ConfigFileWithProfiles( ConfigFile ): def __init__( self, default_profile_name = '' ): ConfigFile.__init__( self ) self.default_profile_name = default_profile_name 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' super(ConfigFileWithProfiles, self).load(filename) def 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() for profile_id in profiles: if profile_id == self.current_profile_id: found = True break 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.keys(): if key.startswith( 'profile.0.' ): rename_keys.append( key ) for old_key in rename_keys: new_key = 'profile1.' + old_key[ 10 : ] self.dict[ new_key ] = self.dict[ old_key ] del self.dict[ old_key ] if self.get_int_value( 'profiles.version' ) != 1: 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 profiles_dict = {} for profile_id in profiles_unsorted: profiles_dict[ self.get_profile_name( profile_id ).upper() ] = profile_id keys = list(profiles_dict.keys()) keys.sort() profiles_sorted = [] for key in keys: profiles_sorted.append( profiles_dict[key] ) 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 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 ): '''True if the profile exists. profile_id: profile ID 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: if self.get_profile_name( profile_id ) == name: return True return False def get_profile_name( self, profile_id = None ): '''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: if self.get_profile_name( profile_id ) == name: self.notify_error( _('Profile "%s" already exists !') % name ) return None new_id = 1 while True: ok = True if str(new_id) in profiles: ok = False if ok: break new_id = new_id + 1 new_id = str( new_id ) profiles.append( new_id ) self.set_str_value( 'profiles', ':'.join(profiles) ) self.set_profile_str_value( 'name', name, new_id ) 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 profiles = self.get_profiles() if len( profiles ) <= 1: self.notify_error( _('You can\'t remove the last profile !') ) return False found = False index = 0 for profile in profiles: if profile == profile_id: self.remove_keys_starts_with( self._get_profile_key_( '', profile_id ) ) del profiles[index] self.set_str_value( 'profiles', ':'.join( profiles ) ) found = True break index = index + 1 if not found: return False if self.current_profile_id == profile_id: self.current_profile_id = '1' 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 profiles = self.get_profiles() for profile in profiles: if self.get_profile_name( profile ) == name: if profile[0] != profile_id: self.notify_error( _('Profile "%s" already exists !') % name ) return False self.set_profile_str_value( 'name', name, profile_id ) 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 ): '''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 ) def set_profile_str_value( self, key, value, profile_id = None ): self.set_str_value( self._get_profile_key_( key, profile_id ), value ) def get_profile_int_value( self, key, default_value = 0, profile_id = None ): return self.get_int_value( self._get_profile_key_( key, profile_id ), default_value ) def set_profile_int_value( self, key, value, profile_id = None ): self.set_int_value( self._get_profile_key_( key, profile_id ), value ) def get_profile_bool_value( self, key, default_value = False, profile_id = None ): return self.get_bool_value( self._get_profile_key_( key, profile_id ), default_value ) 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) backintime-1.1.12/common/tools.py0000664000175000017500000012675012644767576016265 0ustar germargermar# 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 subprocess import signal import re import errno import gzip import tempfile from datetime import datetime from distutils.version import StrictVersion keyring = None keyring_warn = False try: if os.getenv('BIT_USE_KEYRING', 'true') == 'true' and os.geteuid() != 0: import keyring except: keyring = None 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 POWER_ERROR = 255 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.abspath(os.path.join(__file__, os.pardir, os.pardir, *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.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 try: 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 try: 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 return ret_val def read_command_output( cmd ): ret_val = '' try: pipe = os.popen( cmd ) ret_val = pipe.read().strip() pipe.close() except: return '' return ret_val def check_command( cmd ): cmd = cmd.strip() if not cmd: return False if os.path.isfile( cmd ): return True return not which(cmd) is None def which(filename): """Checks if 'filename' is present in the system PATH.""" pathenv = os.getenv('PATH', '') path = pathenv.split(":") path.insert(0, os.getcwd()) for directory in path: fullpath = os.path.join(directory, filename) if os.path.isfile(fullpath) and os.access(fullpath, os.X_OK): return fullpath return None def make_dirs( path ): path = path.rstrip( os.sep ) if not path: return False if os.path.isdir(path): return True else: try: os.makedirs( path ) 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 ) return len( output ) > 0 def check_x_server(): return 0 == os.system( 'xdpyinfo >/dev/null 2>&1' ) def prepare_path( path ): path = path.strip( "/" ) path = os.sep + path return path def power_status_available(): """Uses the on_ac_power command to detect if the the system is able to return the power status.""" try: rt = subprocess.call( 'on_ac_power' ) if rt == ON_AC or rt == ON_BATTERY: return True except: pass return False def on_battery(): """Checks if the system is on battery power.""" if power_status_available (): return subprocess.call ( 'on_ac_power' ) == ON_BATTERY else: return False def get_snapshots_list_in_folder( folder, sort_reverse = True ): biglist = [] try: biglist = os.listdir( folder ) except: pass list_ = [] for item in biglist: if len( item ) != 15 and len( item ) != 19: continue if os.path.isdir( os.path.join( folder, item, 'backup' ) ): list_.append( item ) list_.sort( reverse = sort_reverse ) return list_ def get_nonsnapshots_list_in_folder( folder, sort_reverse = True ): biglist = [] try: biglist = os.listdir( folder ) except: pass list_ = [] for item in biglist: if len( item ) != 15 and len( item ) != 19: list_.append( item ) else: if os.path.isdir( os.path.join( folder, item, 'backup' ) ): continue else: list_.append( item ) list_.sort( reverse = sort_reverse ) return list_ def move_snapshots_folder( old_folder, new_folder ): '''Moves all the snapshots from one folder to another''' print("\nMove snapshots from %s to %s" %( old_folder, new_folder )) # Fetch a list with snapshots for verification snapshots_to_move = get_snapshots_list_in_folder( old_folder ) snapshots_already_there = [] if os.path.exists( new_folder ) == True: snapshots_already_there = get_snapshots_list_in_folder( new_folder ) else: 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 if device_old == device_new: # Use move for snapshot in snapshots_to_move: cmd = "mv -f \"%s/%s\" \"%s\"" %( old_folder, snapshot, new_folder ) _execute( cmd ) else: # Use rsync # 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) items = [] for nonsnapshot in nonsnapshots: for item in items: if nonsnapshot == item: break items.append( "--exclude=\"%s\"" % nonsnapshot ) rsync_exclude = ' '.join( items ) # 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 {} \\;" % ( snapshot_to_hardlink_path, first_snapshot_path ) ) # Remove old ones snapshots_not_moved = [] for snapshot in snapshots_to_move: if os.path.exists( os.path.join( new_folder, snapshot, "backup" ) ): if os.path.exists( os.path.join( old_folder, snapshot) ): print("Remove: %s" %snapshot) path_to_remove = os.path.join( old_folder, snapshot ) cmd = "find \"%s\" -type d -exec chmod u+wx {} \\;" % path_to_remove #Debian patch _execute( cmd ) cmd = "rm -rfv \"%s\"" % path_to_remove _execute( cmd ) else: print("%s was already removed" %snapshot) else: snapshots_not_moved.append( snapshot ) # Check snapshot list 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: ret_val = os.system( cmd ) else: pipe = os.popen( cmd, 'r' ) while True: line = temp_failure_retry( pipe.readline ) if not line: break 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), traceDepth = 1) else: logger.debug("Command \"%s...\" returns %s" %(cmd[:min(16, len(cmd))], ret_val), traceDepth = 1) return ret_val def is_process_alive( pid ): try: os.kill( pid, 0 ) #this will raise an exception if the pid is not valid except: return False return True 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 caps si = data.find( '\n', si ) if si < 0: return caps ei = data.find( '\n\n', si ) if ei < 0: return caps data = data[ si + 1 : ei - 1 ] data = data.split( '\n' ) all_caps = '' for line in data: line = line.strip() if not line: continue if all_caps: all_caps = all_caps + ' ' all_caps = all_caps + line caps.extend(all_caps.split( ", " )) return caps def use_rsync_fast( config ): return not (config.preserve_acl() or config.preserve_xattr()) def get_rsync_prefix( config, no_perms = True, use_modes = ['ssh', 'ssh_encfs'] ): caps = get_rsync_caps() 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' if config.copy_unsafe_links(): cmd = cmd + ' --copy-unsafe-links' if config.copy_links(): cmd = cmd + ' --copy-links' else: cmd = cmd + ' --links' if config.preserve_acl() and "ACLs" in caps: cmd = cmd + ' -A' no_perms = False if config.preserve_xattr() and "xattrs" in caps: cmd = cmd + ' -X' no_perms = False if no_perms: cmd = cmd + ' --no-p --no-g --no-o' 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() ssh_cipher = config.get_ssh_cipher() if ssh_cipher == 'default': ssh_cipher_suffix = '' else: ssh_cipher_suffix = '-c %s' % ssh_cipher # 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() \ 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): while True: try: return func(*args, **kwargs) 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()''' if check_command("md5sum"): 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 ? 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)) return unique_key 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 s.startswith('*/'): if int(s[2:]) <= 24: return True else: return False list_ = s.split(',') for s in list_: if int(s) <= 24: continue else: return False return True except ValueError: return False def check_home_encrypt(): '''return True if users home is encrypted''' home = os.path.expanduser('~') if not os.path.ismount(home): return False if check_command('ecryptfs-verify'): try: subprocess.check_call(['ecryptfs-verify', '--home'], stdout=open(os.devnull, 'w'), stderr=open(os.devnull, 'w')) except subprocess.CalledProcessError: pass else: return True if check_command('encfs'): 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(f): env = os.environ.copy() env_file = configfile.ConfigFile() 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 list(env.keys()): os.environ[key] = value del(env_file) 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() 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: 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) except: pass try: backends.append(keyring.backends.Gnome.Keyring) except: pass try: backends.append(keyring.backends.kwallet.Keyring) except: pass try: backends.append(keyring.backend.SecretServiceKeyring) except: pass try: backends.append(keyring.backend.GnomeKeyring) except: pass try: backends.append(keyring.backend.KDEKWallet) except: pass 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: return keyring.get_password(*args) return None def set_password(*args): if not keyring is None: return keyring.set_password(*args) return False def get_mountpoint(path): '''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 = os.path.realpath(dev) for uuid in os.listdir(DISK_BY_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_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 msg: if len(msg) <= size: yield(msg) break else: line = '' 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 line: line, msg = msg[:size], new_line_indicator + msg[size:] yield(line) def syncfs(): """writes any data buffered in memory out to disk """ 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): 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.list_equal_to = list_equal_to if list_equal_to: st = os.stat(list_equal_to) if self.deep_check: self.reference = (st.st_size, _get_md5sum_from_path(list_equal_to)) else: self.reference = (st.st_size, int(st.st_mtime)) 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) else: return self.check_unique(path) 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: logger.debug("[deep test] : skip, it's a duplicate (size, inode)", self) return False self._size_inode.add( (size,inode) ) if size not in list(self._uniq_dict.keys()): # first item of that size unique_key = size 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) self._uniq_dict[size] = None 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)) # store if not already present, then return True if unique_key not in list(self._uniq_dict.keys()): logger.debug(" >> ok, store !", self) self._uniq_dict[unique_key] = path return True logger.debug(" >> skip (it's a duplicate)", self) return False def check_equal(self, path): '''return True if path and reference are equal''' st = os.stat(path) if self.deep_check: if self.reference[0] == st.st_size: return self.reference[1] == _get_md5sum_from_path(path) return False else: return self.reference == (st.st_size, int(st.st_mtime)) 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 """ try: signal.signal(signal.SIGALRM, self.handler) signal.alarm(timeout) except ValueError: pass def stop(self): """ stop timer before it come to an end """ try: signal.alarm(0) except: pass def handler(self, signum, frame): """ timeout occur. """ if self.callback is None: raise Timeout() else: self.callback() class ShutDown(object): """Shutdown the system after the current snapshot has finished. This should work for KDE, Gnome, Unity, Cinnamon, XFCE, Mate and E17. """ DBUS_SHUTDOWN ={'gnome': {'bus': 'sessionbus', 'service': 'org.gnome.SessionManager', 'objectPath': '/org/gnome/SessionManager', 'method': 'Shutdown', #methods Shutdown # Reboot # Logout 'interface': 'org.gnome.SessionManager', 'arguments': () #arg (only with Logout) # 0 normal # 1 no confirm # 2 force }, 'kde': {'bus': 'sessionbus', 'service': 'org.kde.ksmserver', 'objectPath': '/KSMServer', 'method': 'logout', 'interface': 'org.kde.KSMServerInterface', 'arguments': (-1, 2, -1) #1st arg -1 confirm # 0 no confirm #2nd arg -1 full dialog with default logout # 0 logout # 1 restart # 2 shutdown #3rd arg -1 wait 30sec # 2 immediately }, 'xfce': {'bus': 'sessionbus', 'service': 'org.xfce.SessionManager', 'objectPath': '/org/xfce/SessionManager', 'method': 'Shutdown', #methods Shutdown # Restart # Suspend (no args) # Hibernate (no args) # Logout (two args) 'interface': 'org.xfce.Session.Manager', 'arguments': (True,) #arg True allow saving # False don't allow saving #1nd arg (only with Logout) # True show dialog # False don't show dialog #2nd arg (only with Logout) # True allow saving # False don't allow saving }, 'mate': {'bus': 'sessionbus', 'service': 'org.mate.SessionManager', 'objectPath': '/org/mate/SessionManager', 'method': 'Shutdown', #methods Shutdown # Logout 'interface': 'org.mate.SessionManager', 'arguments': () #arg (only with Logout) # 0 normal # 1 no confirm # 2 force }, 'e17': {'bus': 'sessionbus', 'service': 'org.enlightenment.Remote.service', 'objectPath': '/org/enlightenment/Remote/RemoteObject', 'method': 'Halt', #methods Halt -> Shutdown # Reboot # Logout # Suspend # Hibernate 'interface': 'org.enlightenment.Remote.Core', 'arguments': () }, '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 = isRoot() if self.is_root: self.proxy, self.args = None, None else: self.proxy, self.args = self._prepair() self.activate_shutdown = False self.started = False def _prepair(self): """try to connect to the given dbus services. If successful it will return a callable dbus proxy and those arguments. """ try: 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 = list(self.DBUS_SHUTDOWN.keys()) des.sort() for de in des: if de == 'gnome' and self.unity_7(): continue dbus_props = self.DBUS_SHUTDOWN[de] try: if dbus_props['bus'] == 'sessionbus': bus = sessionbus else: bus = systembus interface = bus.get_object(dbus_props['service'], dbus_props['objectPath']) proxy = interface.get_dbus_method(dbus_props['method'], dbus_props['interface']) return( (proxy, dbus_props['arguments']) ) except dbus.exceptions.DBusException: continue return( (None, None) ) def can_shutdown(self): """indicate if a valid dbus service is available to shutdown system. """ return(not self.proxy is None or self.is_root) def ask_before_quit(self): """indicate if ShutDown is ready to fire and so the application shouldn't be closed. """ return(self.activate_shutdown and not self.started) def shutdown(self): """run 'shutdown -h now' if we are root or call the dbus proxy to start the shutdown. """ if not self.activate_shutdown: return(False) if self.is_root: syncfs() self.started = True proc = subprocess.Popen(['shutdown', '-h', 'now']) proc.communicate() return proc.returncode if self.proxy is None: return(False) else: syncfs() self.started = True return(self.proxy(*self.args)) def unity_7(self): """Unity >= 7.0 doesn't shutdown automatically. It will only show shutdown dialog and wait for user input. """ 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: 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) 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') backintime-1.1.12/common/exceptions.py0000664000175000017500000000254212644767576017276 0ustar germargermar# 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 backintime-1.1.12/common/mount.py0000664000175000017500000004557612644767576016275 0ustar germargermar# 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 subprocess import json import gettext from zlib import crc32 from time import sleep import config import logger import tools import password from exceptions import MountException, HashCollision _=gettext.gettext 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' 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, 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' else: while True: try: mounttools = self.config.SNAPSHOT_MODES[mode][0] tools = mounttools(cfg = self.config, profile_id = self.profile_id, tmp_mount = self.tmp_mount, mode = mode, parent = self.parent, **kwargs) return tools.mount(check = check) except HashCollision as ex: logger.warning(str(ex), self) del tools check = False continue break 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._LOCAL_MOUNT_ROOT, hash_id, 'umount') with open(umount_info, 'r') as f: data_string = f.read() f.close() kwargs = json.loads(data_string) mode = kwargs.pop('mode') mounttools = self.config.SNAPSHOT_MODES[mode][0] tools = mounttools(cfg = self.config, profile_id = self.profile_id, 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 else: mounttools = self.config.SNAPSHOT_MODES[mode][0] tools = mounttools(cfg = self.config, profile_id = self.profile_id, 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 hash_id <= old profile self.profile_id <= old profile""" if mode is None: 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, 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, 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.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, plugins = False) self.profile_id = new_profile_id 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 = 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._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() try: if self.is_mounted(): if not self.compare_umount_info(): #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, 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), self) self.write_umount_info() except Exception: raise else: self.set_mount_lock() self.set_symlink() 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, self) else: if not self.is_mounted(): 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, self) else: self.pre_umount_check() self._umount() self.post_umount_check() 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), self) except Exception: raise else: self.del_mount_lock() self.remove_symlink() finally: self.mountprocess_lock_release() def is_mounted(self): """return True if path is is already mounted""" if os.path.ismount(self.mountpoint): return True else: if os.listdir(self.mountpoint): raise MountException( _('mountpoint %s not empty.') % self.mountpoint) return False def create_mountstructure(self): """ 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, 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 = self.mount_root lock_suffix = '.lock' 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) logger.debug('Acquire mountprocess lock %s' %lock, self) with open(lock, 'w') as f: f.write(self.pid) def mountprocess_lock_release(self): 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 = 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) def check_mount_lock(self): """return True if mount is locked by other processes""" 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 = 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 f in os.listdir(path): if not f[-len(lock_suffix):] == lock_suffix: continue is_tmp = False 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(f)[:-len('.tmp')-len(lock_suffix)] else: 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, f)) for symlink in os.listdir(self.mount_root): if symlink.endswith('_%s' % lock_pid): 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""" if arg in kwargs: value = kwargs[arg] else: value = default setattr(self, arg, value) 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.close def read_umount_info(self, umount_info = None): """load dictionary kwargs from umount_info file""" if umount_info is None: umount_info = self.umount_info with open(umount_info, 'r') as f: 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. return True if both are identical""" #run self.all_kwargs through json first current_kwargs = json.loads(json.dumps(self.all_kwargs)) saved_kwargs = self.read_umount_info(umount_info) if not len(current_kwargs) == len(saved_kwargs): return False 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 if profile_id is None: profile_id = self.profile_id if hash_id is None: hash_id = self.hash_id if tmp_mount is None: tmp_mount = self.tmp_mount dst = self.config.get_snapshots_path(profile_id = profile_id, mode = self.mode, tmp_mount = tmp_mount) mountpoint = self.get_mountpoint(hash_id) if self.symlink_subfolder is None: src = mountpoint else: src = os.path.join(mountpoint, self.symlink_subfolder) 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 if profile_id is None: profile_id = self.profile_id 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, 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_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') backintime-1.1.12/common/.coveragerc0000664000175000017500000000025312644767576016661 0ustar germargermar# default options for coverage from coveralls-python [run] omit = */virtualenv/python3* [report] exclude_lines = pragma: no cover if __name__ == '__main__': backintime-1.1.12/common/snapshots.py0000664000175000017500000025474312644767576017153 0ustar germargermar# 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 stat import datetime import gettext import bz2 import pwd import grp import subprocess import shutil import time import re import fcntl import config import configfile import logger import applicationinstance import tools 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 if self.config is None: self.config = config.Config() self.clear_uid_gid_cache() self.clear_uid_gid_names_cache() #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 if type( date ) is datetime.date: snapshot_id = date.strftime( '%Y%m%d-000000' ) + '-' + tag return snapshot_id 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 ): if type( date ) is datetime.datetime: snapshot_id = date.strftime( '%Y%m%d-%H%M%S' ) return snapshot_id if type( date ) is datetime.date: snapshot_id = date.strftime( '%Y%m%d-000000' ) return snapshot_id if type( date ) is str: snapshot_id = date return snapshot_id return "" def get_snapshot_path( self, date, use_mode = [] ): profile_id = self.config.get_current_profile() current_mode = self.config.get_snapshots_mode() if 'ssh' in use_mode and current_mode == 'ssh': path = os.path.join( self.config.get_snapshots_full_path_ssh( profile_id ), self.get_snapshot_id( date ) ) return path if 'ssh_encfs' in use_mode and current_mode == 'ssh_encfs': path = os.path.join( self.config.get_snapshots_full_path_ssh( profile_id ), self.get_snapshot_id( date ) ) 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 ): 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 ): return path_other if os.path.exists( 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 ): return path_other return path def get_snapshot_info_path( self, date ): return os.path.join( self.get_snapshot_path( date ), 'info' ) def get_snapshot_fileinfo_path( self, date ): return os.path.join( self.get_snapshot_path( date ), 'fileinfo.bz2' ) def get_snapshot_log_path( self, snapshot_id ): return os.path.join( self.get_snapshot_path( snapshot_id ), 'takesnapshot.log.bz2' ) def get_snapshot_failed_path( self, snapshot_id ): return os.path.join( self.get_snapshot_path( snapshot_id ), 'failed' ) def _get_snapshot_data_path( self, snapshot_id, use_mode = [] ): current_mode = self.config.get_snapshots_mode() if len( snapshot_id ) <= 1: return '/'; path = 'backup' snapshot_path = self.get_snapshot_path( snapshot_id, use_mode ) 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 ) ) if 'ssh_encfs' in use_mode and current_mode == 'ssh_encfs': enc_path = self.config.ENCODE.path( toPath[ 1 : ] ) return os.path.join( snapshot_data_path, enc_path ) return os.path.join( snapshot_data_path, toPath[ 1 : ] ) def can_open_path( self, snapshot_id, full_path ): if not os.path.exists( full_path ): return False if not os.path.islink( full_path ): return True 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 ) 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 name: display_name = display_name + ' - ' + name if self.is_snapshot_failed( snapshot_id ): display_name = display_name + " (%s)" % _("WITH ERRORS !") return display_name def get_snapshot_name( self, snapshot_id ): name = '' if len( snapshot_id ) <= 1: #not a snapshot return name path = self.get_snapshot_path( snapshot_id ) nameFile = os.path.join(path, 'name') if not os.path.isdir( path ): return name if not os.path.exists(nameFile): return name try: 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 def set_snapshot_name( self, snapshot_id, name ): if len( snapshot_id ) <= 1: #not a snapshot return path = self.get_snapshot_path( snapshot_id ) if not os.path.isdir( path ): return name_path = os.path.join( path, 'name' ) os.system( "chmod +w \"%s\"" % path ) try: 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 ): if len( snapshot_id ) <= 1: #not a snapshot return False 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 ): 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: 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 mid = 0 try: 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( mid, message ) def set_take_snapshot_message( self, type_id, message, timeout = -1 ): data = str(type_id) + '\n' + message try: 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: self.append_to_take_snapshot_log( '[E] ' + message, 1 ) else: self.append_to_take_snapshot_log( '[I] ' + message, 3 ) try: profile_id =self.config.get_current_profile() profile_name = self.config.get_profile_name( profile_id ) 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 int(profile_id) > 1: decode_msg += ' --profile %s' % self.config.get_profile_name(profile_id) decode_msg += ' --decode \'\n\n' if 0 == mode: if not decode is None: ret = decode_msg for line in log.split('\n'): line = decode.log(line) ret += line + '\n' return ret return log lines = log.split( '\n' ) log = '' if not decode is None: log = decode_msg for line in lines: if line.startswith( '[' ): if mode == 1 and line[1] != 'E': continue elif mode == 2 and line[1] != 'C': 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) log = log + line + '\n' return log def get_snapshot_log( self, snapshot_id, mode = 0, profile_id = None , **kwargs ): try: 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 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: with open(logFile, 'rt') as f: data = f.read() return self._filter_take_snapshot_log( data, mode, **kwargs ) 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 ): 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: 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 ): instance = applicationinstance.ApplicationInstance( self.config.get_take_snapshot_instance_file(), False ) return not instance.check() def load_fileinfo_dict( self, snapshot_id, version = None ): if version is None: info_file = configfile.ConfigFile() info_file.load( self.get_snapshot_info_path( snapshot_id ) ) version = info_file.get_int_value( 'snapshot_version' ) info_file = None file_info_dict = {} if 0 == version: return file_info_dict fileinfo_path = self.get_snapshot_fileinfo_path( snapshot_id ) if not os.path.exists( fileinfo_path ): return file_info_dict with bz2.BZ2File( fileinfo_path, 'rb' ) as fileinfo: for line in fileinfo: if not line: break line = line[ : -1 ] if not line: continue index = line.find( b'/' ) if index < 0: continue f = line[ index: ] if not f: continue info = line[ : index ].strip() info = info.split( b' ' ) if len( info ) == 3: file_info_dict[f] = (int(info[0]), info[1], info[2]) #perms, user, group return file_info_dict def clear_uid_gid_names_cache(self): self.user_cache = {} self.group_cache = {} def clear_uid_gid_cache(self): self.uid_cache = {} self.gid_cache = {} def get_uid(self, name, callback = None, backup = None): if name in self.uid_cache: return self.uid_cache[name] else: uid = -1 try: 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, callback = None, backup = None): if name in self.gid_cache: return self.gid_cache[name] else: gid = -1 try: 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 ): if uid in self.user_cache: return self.user_cache[uid] else: name = '-' try: name = pwd.getpwuid(uid).pw_name 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 ): if gid in self.group_cache: return self.group_cache[gid] else: name = '-' try: name = grp.getgrgid(gid).gr_name 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 return name def restore_callback( self, callback, ok, msg ): 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, 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 = file_info_dict[key_path] #restore uid/gid 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 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 and gid != st.st_gid: try: os.chown( path, -1, gid ) ok = True except: pass self.restore_callback( callback, ok, "chgrp %s %s" % ( path.decode(errors = 'ignore'), gid ) ) #restore perms ok = False 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 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" %(', '.join(paths), restore_to), self) info_file = configfile.ConfigFile() info_file.load( self.get_snapshot_info_path( snapshot_id ) ) 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_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) 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' ) ) #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) 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 = [] if profile_id is None: 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 Exception as e: logger.debug('Failed to get snapshots list: %s' %str(e), self) pass list_ = [] for item in biglist: if not self.is_snapshot_id(item): continue if os.path.isdir( os.path.join( snapshots_path, item, 'backup' ) ): list_.append( item ) list_.sort( reverse = sort_reverse ) return list_ 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: 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 if snapshots_other_paths: for folder in snapshots_other_paths: try: 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 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'] ) 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', 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?') ) if answer_change == True: logger.info('Update snapshot locations', self) if len( profiles ) == 1: 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 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)), 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', self) return False # Moving old snapshots per profile_id profile_id = profiles[0] main_folder = self.config.get_snapshots_path( profile_id ) old_snapshots_paths=[] counter = 0 success = [] for profile_id in profiles: old_snapshots_paths.append( self.config.get_snapshots_path( profile_id ) ) old_folder = os.path.join( self.config.get_snapshots_path( profile_id ), 'backintime' ) if profile_id != "1" and answer_same == True: self.config.set_snapshots_path( main_folder, profile_id ) 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), self) new_folder = self.config.get_snapshots_full_path( profile_id ) 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 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!', 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, 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', self) self.config.set_snapshots_path( old_snapshots_paths[counter], 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 overall_success = True for item in success: if item == False: overall_success = False if overall_success == True: 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', 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: 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)), 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: 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 ): 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, ret_error = False, True sleep = True self.config.PLUGIN_MANAGER.load_plugins( self ) if not self.config.is_configured(): 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!)', 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, 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) 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: 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', self) instance.start_application() self.flockExclusive() logger.info('Lock', self) now = datetime.datetime.today() #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 MountException as ex: logger.error(str(ex), self) instance.exit_application() logger.info('Unlock', self) time.sleep(2) return False else: self.config.set_current_hash_id(hash_id) #include_folders, ignore_folders, dict = self._get_backup_folders( now, force ) include_folders = self.config.get_include() 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: #take snapshot process begin self.set_take_snapshot_message( 0, '...' ) self.new_take_snapshot_log( now ) profile_id = self.config.get_current_profile() 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.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 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) 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) self.config.PLUGIN_MANAGER.on_error( 4, snapshot_id ) #This snapshots already exists else: 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 !!!', self) self.set_take_snapshot_message( 1, _('Failed to take snapshot %s !!!') % now.strftime( '%x %H:%M:%S' ) ) time.sleep(2) else: 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') ) time.sleep(2) sleep = False if ret_val: self.config.PLUGIN_MANAGER.on_new_snapshot( snapshot_id, snapshot_path ) #new snapshot self.config.PLUGIN_MANAGER.on_process_ends() #take snapshot process end if sleep: time.sleep(2) sleep = False if not ret_error: self.clear_take_snapshot_message() #unmount try: mount.Mount(cfg = self.config).umount(self.config.current_hash_id) except MountException as ex: logger.error(str(ex), self) instance.exit_application() self.flockRelease() logger.info('Unlock', self) if sleep: 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( ')' ): if line.startswith( 'rsync:' ): if not line.startswith( 'rsync: chgrp ' ) and not line.startswith( 'rsync: chown ' ): params[0] = True self.set_take_snapshot_message( 1, 'Error: ' + line ) if len(line) >= 13: if line.startswith( 'BACKINTIME: ' ): if line[12] != '.' and line[12:14] != 'cd': params[1] = True self.append_to_take_snapshot_log( '[C] ' + line[ 12 : ], 2 ) def _exec_rsync_compare_callback( self, line, params ): 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_: if item == list_item: return 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, self) self.set_take_snapshot_message( 1, _('Can\'t create folder: %s') % folder ) time.sleep(2) #max 1 backup / second return False return True def _save_path_info( self, fileinfo, path ): 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, _('...') ) def snapshot_path(**kwargs): return self.get_snapshot_path(snapshot_id, **kwargs) def new_snapshot_path(**kwargs): return self.get_snapshot_path(self.NEW_SNAPSHOT_ID, **kwargs) def new_snapshot_path_to(**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) #find find_suffix = self.config.find_suffix() #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(), self ) self.set_take_snapshot_message( 1, _('Can\'t remove folder: %s') % new_snapshot_path() ) time.sleep(2) #max 1 backup / second return [ False, True ] #create exclude patterns string items = [] encode = self.config.ENCODE for exclude in self.config.get_exclude(): exclude = encode.exclude(exclude) if exclude is None: continue self._append_item_to_list( "--exclude=\"%s\"" % exclude, items ) rsync_exclude = ' '.join( items ) #create include patterns list items = [] items2 = [] for include_folder in include_folders: folder = include_folder[0] if folder == "/": # If / is selected as included folder it should be changed to "" #folder = "" # because an extra / is added below. Patch thanks to Martin Hoefling self._append_item_to_list( "--include=\"/\"" , items2 ) self._append_item_to_list( "--include=\"/**\"" , items2 ) continue folder = encode.include(folder) if include_folder[1] == 0: self._append_item_to_list( "--include=\"%s/**\"" % folder, items2 ) else: self._append_item_to_list( "--include=\"%s\"" % folder, items2 ) folder = os.path.split( folder )[0] while True: self._append_item_to_list( "--include=\"%s/\"" % folder, items ) folder = os.path.split( folder )[0] if len( folder) <= 1: break rsync_include = ' '.join( items ) rsync_include2 = ' '.join( items2 ) #check previous backup #should only contain the personal snapshots check_for_changes = self.config.check_for_changes() #full rsync full_rsync = self.config.full_rsync() #rsync prefix & suffix 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=Du+wx ' + rsync_exclude_backup_directory rsync_suffix += rsync_include + ' ' + rsync_exclude + ' ' + rsync_include2 rsync_suffix += ' --exclude=\"*\" ' + encode.chroot + ' ' prev_snapshot_id = '' snapshots = self.get_snapshots_list() 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 snapshots and not saveToContinueFlag.exists(): prev_snapshot_id = snapshots[0] if not full_rsync: changed = True 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, 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 ] self.append_to_take_snapshot_log( '[I] ' + cmd, 3 ) self._execute( cmd, self._exec_rsync_compare_callback, params ) changed = params[1] if not changed: 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", 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 #clone snapshot cmd = self.cmd_ssh( "cp -aRl \"%s\"* \"%s\"" % ( prev_snapshot_path_to(use_mode = ['ssh', 'ssh_encfs']), new_snapshot_path_to(use_mode = ['ssh', 'ssh_encfs']) ) ) self.append_to_take_snapshot_log( '[I] ' + cmd, 3 ) cmd_ret_val = self._execute( cmd ) self.append_to_take_snapshot_log( "[I] returns: %s" % cmd_ret_val, 3 ) #make source snapshot folders read-only self._execute( self.cmd_ssh( 'find \"%s\" -type d -exec chmod a-w \"{}\" %s' % (prev_snapshot_path_to(use_mode = ['ssh', 'ssh_encfs']), find_suffix), quote = True) ) #Debian patch #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: 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", 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 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, 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]: if not self.config.continue_on_errors(): 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']) ) ) if not full_rsync: #fix previous snapshot: make read-only again 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(self.NEW_SNAPSHOT_ID) ) if full_rsync: 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", 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', self) self.set_take_snapshot_message( 0, _('Save config file ...') ) 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', self) self.set_take_snapshot_message( 0, _('Save permission ...') ) 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, False) path_to_explore_ssh = decode.remote(path_to_explore_ssh.encode()) else: decode = encfstools.Bounce() 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 ) #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 ) info_file = configfile.ConfigFile() info_file.set_int_value( 'snapshot_version', self.SNAPSHOT_VERSION ) info_file.set_str_value( 'snapshot_date', snapshot_id[0:15] ) info_file.set_str_value( 'snapshot_machine', machine ) 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.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: 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.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()), self) self.set_take_snapshot_message( 1, _('Can\'t rename %(new_path)s to %(path)s') % { 'new_path' : new_snapshot_path(), 'path' : snapshot_path() } ) time.sleep(2) #max 1 backup / second return [ False, True ] if not full_rsync: #make new snapshot read-only self._execute( self.cmd_ssh( "chmod -R a-w \"%s\"" % snapshot_path(use_mode = ['ssh', 'ssh_encfs']) ) ) #create last_snapshot symlink self.create_last_snapshot_symlink(snapshot_id) return [ True, has_errors ] def _smart_remove_keep_all_( self, snapshots, keep_snapshots, min_date, max_date ): min_id = self.get_snapshot_id( min_date ) max_id = self.get_snapshot_id( max_date ) 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: if snapshot_id not in keep_snapshots: keep_snapshots.append( snapshot_id ) return keep_snapshots def _smart_remove_keep_first_( self, snapshots, keep_snapshots, min_date, max_date ): min_id = self.get_snapshot_id( min_date ) max_id = self.get_snapshot_id( max_date ) 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: if snapshot_id not in keep_snapshots: keep_snapshots.append( snapshot_id ) break return keep_snapshots def inc_month( self, date ): y = date.year m = date.month + 1 if m > 12: m = 1 y = y + 1 return datetime.date( y, m, 1 ) def dec_month( self, date ): y = date.year m = date.month - 1 if m < 1: m = 12 y = y - 1 return datetime.date( y, m, 1 ) 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.debug("Considered: %s" %snapshots, self) if len( snapshots ) <= 1: 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() #keep the last snapshot keep_snapshots = [ snapshots[0] ] #keep all for the last keep_all days if keep_all > 0: keep_snapshots = self._smart_remove_keep_all_( snapshots, keep_snapshots, now - datetime.timedelta( days=keep_all-1), now + datetime.timedelta(days=1) ) #keep one per days for the last keep_one_per_day days if keep_one_per_day > 0: d = now 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 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) #keep one per month for the last keep_one_per_month months if keep_one_per_month > 0: d1 = datetime.date( now.year, now.month, 1 ) d2 = self.inc_month( d1 ) 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 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.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 self.get_snapshot_name( snapshot_id ): logger.debug("Keep snapshot: %s, it has a name" %snapshot_id, self) continue 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') ) 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], self) while True: if len( snapshots ) <= 1: break if snapshots[0] >= old_backup_id: break if self.config.get_dont_remove_named_snapshots(): if self.get_snapshot_name( snapshots[0] ): del snapshots[0] continue self.remove_snapshot( snapshots[0] ) del snapshots[0] #smart remove smart_remove, keep_all, keep_one_per_day, keep_one_per_week, keep_one_per_month = self.config.get_smart_remove() if smart_remove: self.set_take_snapshot_message( 0, _('Smart remove') ) self.smart_remove( now, keep_all, keep_one_per_day, keep_one_per_week, keep_one_per_month ) #try to keep min free space if self.config.is_min_free_space_enabled(): self.set_take_snapshot_message( 0, _('Try to keep min free space') ) min_free_space = self.config.get_min_free_space_in_mb() logger.info("Keep min free disk space: %s MiB" %min_free_space, self) snapshots = self.get_snapshots_list( False ) while True: if len( snapshots ) <= 1: break 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 self.get_snapshot_name( snapshots[0] ): del snapshots[0] continue logger.info("free disk space: %s MiB" %free_space, self) self.remove_snapshot( snapshots[0] ) del snapshots[0] #try to keep free inodes 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, self) snapshots = self.get_snapshots_list( False ) while True: if len( snapshots ) <= 1: break 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 self.get_snapshot_name( snapshots[0] ): del snapshots[0] continue logger.info("free inodes: %.2f%%" %(100.0 / max_inodes * free_inodes), self) self.remove_snapshot( snapshots[0] ) del snapshots[0] #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: ret_val = os.system( cmd ) else: pipe = os.popen( cmd, 'r' ) while True: line = tools.temp_failure_retry( pipe.readline ) if not line: break 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%s%s" %(cmd, bcolors.WARNING, ret_val, bcolors.ENDC), self, 1) else: logger.debug("Command \"%s...\" returns %s" %(cmd[:min(16, len(cmd))], ret_val), self, 1) return ret_val 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 = [] base_full_path = self.get_snapshot_path_to( base_snapshot_id, base_path ) if not os.path.lexists( base_full_path ): return [] all_snapshots_list = [ '/' ] all_snapshots_list.extend( snapshots_list ) #links if os.path.islink( base_full_path ): targets = [] for snapshot_id in all_snapshots_list: path = self.get_snapshot_path_to( snapshot_id, base_path ) if os.path.lexists( path ) and os.path.islink( path ): if list_diff_only: target = os.readlink( path ) if target in targets: continue targets.append( target ) snapshots_filtered.append(snapshot_id) return snapshots_filtered #directories if os.path.isdir( base_full_path ): 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.isdir( path ): snapshots_filtered.append(snapshot_id) return snapshots_filtered #files if not list_diff_only and not 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 ): snapshots_filtered.append(snapshot_id) return snapshots_filtered # check for duplicates 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): snapshots_filtered.append(snapshot_id) return snapshots_filtered def cmd_ssh(self, cmd, quote = False, use_modes = ['ssh', 'ssh_encfs'] ): 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 %s' \ % ( str(ssh_port), ssh_cipher_suffix, ssh_private_key,\ ssh_user, ssh_host, cmd ) if isinstance(cmd, tuple): cmd = list(cmd) if isinstance(cmd, list): suffix = ['ssh', '-p', str(ssh_port)] 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 def rsync_remote_path(self, path, use_modes = ['ssh', 'ssh_encfs'] ): mode = self.config.get_snapshots_mode() if mode in ['ssh', 'ssh_encfs'] and mode in use_modes: user = self.config.get_ssh_user() host = self.config.get_ssh_host() return '\'%s@%s:"%s"\'' % (user, host, path) else: return '"%s"' % path def delete_path(self, snapshot_id, path): def handle_error(fn, path, excinfo): 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) os.chmod(dirname, dir_st.st_mode | stat.S_IWUSR) if os.path.isdir(full_path) and not os.path.islink(full_path): shutil.rmtree(full_path, onerror = handle_error) else: st = os.stat(full_path) os.chmod(full_path, st.st_mode | stat.S_IWUSR) os.remove(full_path) os.chmod(dirname, dir_st.st_mode) def create_last_snapshot_symlink(self, snapshot_id): symlink = self.config.get_last_snapshot_symlink() try: 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 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() backintime-1.1.12/common/config-example-ssh0000664000175000017500000000531212644767576020155 0ustar germargermarprofile1.snapshots.automatic_backup_day=1 profile1.snapshots.automatic_backup_mode=0 profile1.snapshots.automatic_backup_time=0 profile1.snapshots.automatic_backup_weekday=7 profile1.snapshots.backup_on_restore.enabled=true profile1.snapshots.bwlimit.enabled=false profile1.snapshots.bwlimit.value=3000 profile1.snapshots.check_for_changes=true profile1.snapshots.continue_on_errors=true profile1.snapshots.copy_links=false profile1.snapshots.copy_unsafe_links=false profile1.snapshots.cron.ionice=true profile1.snapshots.cron.nice=true profile1.snapshots.custom_backup_time=8,12,18,23 profile1.snapshots.dont_remove_named_snapshots=true profile1.snapshots.exclude.1.value=.gvfs profile1.snapshots.exclude.10.value=/proc/* profile1.snapshots.exclude.11.value=/sys/* profile1.snapshots.exclude.12.value=/dev/* profile1.snapshots.exclude.13.value=/run/* profile1.snapshots.exclude.2.value=.cache* profile1.snapshots.exclude.3.value=[Cc]ache* profile1.snapshots.exclude.4.value=.thumbnails* profile1.snapshots.exclude.5.value=[Tt]rash* profile1.snapshots.exclude.6.value=*.backup* profile1.snapshots.exclude.7.value=*~ profile1.snapshots.exclude.8.value=/home/USER/Ubuntu One profile1.snapshots.exclude.9.value=.dropbox* profile1.snapshots.exclude.size=13 profile1.snapshots.full_rsync=false profile1.snapshots.include.1.type=0 profile1.snapshots.include.1.value=/home/USER profile1.snapshots.include.size=1 profile1.snapshots.local_encfs.path= profile1.snapshots.log_level=3 profile1.snapshots.min_free_space.enabled=true profile1.snapshots.min_free_space.unit=20 profile1.snapshots.min_free_space.value=1 profile1.snapshots.mode=ssh profile1.snapshots.no_on_battery=false profile1.snapshots.notify.enabled=true profile1.snapshots.path= profile1.snapshots.path.auto=true profile1.snapshots.path.host=HOST profile1.snapshots.path.profile=1 profile1.snapshots.path.user=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.smart_remove=false profile1.snapshots.smart_remove.keep_all=2 profile1.snapshots.smart_remove.keep_one_per_day=7 profile1.snapshots.smart_remove.keep_one_per_month=24 profile1.snapshots.smart_remove.keep_one_per_week=4 profile1.snapshots.ssh.cipher=default profile1.snapshots.ssh.host=REMOTE_HOST profile1.snapshots.ssh.password.save=false profile1.snapshots.ssh.password.use_cache=true profile1.snapshots.ssh.path= profile1.snapshots.ssh.port=22 profile1.snapshots.ssh.private_key_file=/home/USER/.ssh/id_dsa profile1.snapshots.ssh.user=USER profile1.snapshots.use_checksum=false profile1.snapshots.user_backup.ionice=false profiles.version=1 backintime-1.1.12/common/logger.py0000664000175000017500000000553712644767576016403 0ustar germargermar# 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 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("%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 , 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 , 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 , 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) backintime-1.1.12/common/bcolors.py0000664000175000017500000000220612644767576016555 0ustar germargermar#!/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 = '' backintime-1.1.12/common/driveinfo.py0000664000175000017500000001315612644767576017105 0ustar germargermar# 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 configfile import sys import tools class DriveInfo( configfile.ConfigFile ): def __init__( self, path ): configfile.ConfigFile.__init__( self ) self.path = path self.load( self._get_driveinfo_file_() ) dirty = False if sys.platform == 'win32': #there is nothing to do pass else: if not self.has_value( 'hardlinks' ): self.set_bool_value( 'hardlinks', self._check_hardlinks_() ) dirty = True if not self.has_value( 'permissions' ): self.set_bool_value( 'permissions', self._check_perms_() ) dirty = True if not self.has_value( 'usergroup' ): self.set_bool_value( 'usergroup', self._check_usergroup_() ) dirty = True if dirty: self.save( self._get_driveinfo_file_() ) 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' ) def _check_hardlinks_( self ): tmp_path = os.path.join( self.path, 'driveinfo.tmp' ) tools.make_dirs( tmp_path ) if not os.path.isdir( tmp_path ): return False file1_path = os.path.join( tmp_path, 'file1' ) file2_path = os.path.join( tmp_path, 'file2' ) ret_val = False os.system( "echo abc > \"%s\"" % file1_path ) os.system( "ln \"%s\" \"%s\"" % ( file1_path, file2_path ) ) os.system( "echo abc > \"%s\"" % file2_path ) if os.path.exists( file1_path ) and os.path.exists( file2_path ): try: info1 = os.stat( file1_path ) info2 = os.stat( file2_path ) if info1.st_size == info2.st_size: ret_val = True except: pass os.system( "rm -rf \"%s\"" % tmp_path ) return ret_val def _check_perms_for_file_( self, file_path, mode ): ret_val = False os.system( "chmod %s \"%s\"" % ( mode, file_path ) ) try: info = "%o" % os.stat( file_path ).st_mode info = info[ -3 : ] if info == mode: ret_val = True except: pass return ret_val def _check_perms_( self ): tmp_path = os.path.join( self.path, 'driveinfo.tmp' ) tools.make_dirs( tmp_path ) if not os.path.isdir( tmp_path ): return False file_path = os.path.join( tmp_path, 'file' ) os.system( "echo abc > \"%s\"" % file_path ) if not os.path.isfile( file_path ): return False ret_val = False if self._check_perms_for_file_( file_path, '111' ): if self._check_perms_for_file_( file_path, '700' ): if self._check_perms_for_file_( file_path, '600' ): if self._check_perms_for_file_( file_path, '711' ): if self._check_perms_for_file_( file_path, '300' ): if self._check_perms_for_file_( file_path, '666' ): ret_val = True os.system( "rm -rf \"%s\"" % tmp_path ) return ret_val def _check_usergroup_( self ): tmp_path = os.path.join( self.path, 'driveinfo.tmp' ) tools.make_dirs( tmp_path ) if not os.path.isdir( tmp_path ): return False file_path = os.path.join( tmp_path, 'file' ) os.system( "echo abc > \"%s\"" % file_path ) if not os.path.isfile( file_path ): return False ret_val = False uid = os.getuid() gid = os.getgid() try: info = os.stat( file_path ) if info.st_uid == uid and info.st_gid == gid: ret_val = True except: pass if ret_val and uid == 0: #try to change the group import grp #search for another group new_gid = gid new_name = '' for group in grp.getgrall(): if group.gr_gid != gid: new_gid = group.gr_gid new_name = group.gr_name break if new_gid != gid: os.system( "chgrp %s \"%s\"" % ( new_name, file_path ) ) try: info = os.stat( file_path ) if info.st_gid != new_gid: ret_val = False except: ret_val = False os.system( "rm -rf \"%s\"" % tmp_path ) return ret_val backintime-1.1.12/common/po/0000775000175000017500000000000012644767576015156 5ustar germargermarbackintime-1.1.12/common/po/ja.po0000664000175000017500000011543212644767576016116 0ustar germargermar# Japanese translation for backintime # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the backintime package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \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: 2016-01-11 17:52+0000\n" "X-Generator: Launchpad (build 17881)\n" #: ../../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:77 msgid "At every boot/reboot" msgstr "起動/再起動毎に" #: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "5分毎" #: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "10分毎" #: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "" #: ../../common/config.py:81 msgid "Every hour" msgstr "" #: ../../common/config.py:82 msgid "Every 2 hours" msgstr "" #: ../../common/config.py:83 msgid "Every 4 hours" msgstr "" #: ../../common/config.py:84 msgid "Every 6 hours" msgstr "" #: ../../common/config.py:85 msgid "Every 12 hours" msgstr "" #: ../../common/config.py:86 msgid "Custom Hours" msgstr "" #: ../../common/config.py:87 msgid "Every Day" msgstr "毎日" #: ../../common/config.py:88 msgid "Repeatedly (anacron)" msgstr "" #: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "" #: ../../common/config.py:90 msgid "Every Week" msgstr "毎週" #: ../../common/config.py:91 msgid "Every Month" msgstr "毎月" #: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "日" #: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "週" #: ../../common/config.py:97 msgid "Year(s)" msgstr "年" #: ../../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:129 msgid "Local" msgstr "" #: ../../common/config.py:130 msgid "SSH" msgstr "" #: ../../common/config.py:130 ../../common/config.py:132 #: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "" #: ../../common/config.py:131 msgid "Local encrypted" msgstr "" #: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "" #: ../../common/config.py:132 msgid "SSH encrypted" msgstr "" #: ../../common/config.py:135 msgid "Default" msgstr "" #: ../../common/config.py:136 msgid "AES128-CTR" msgstr "" #: ../../common/config.py:137 msgid "AES192-CTR" msgstr "" #: ../../common/config.py:138 msgid "AES256-CTR" msgstr "" #: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "" #: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "" #: ../../common/config.py:141 msgid "AES128-CBC" msgstr "" #: ../../common/config.py:142 msgid "3DES-CBC" msgstr "" #: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "" #: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "" #: ../../common/config.py:145 msgid "AES192-CBC" msgstr "" #: ../../common/config.py:146 msgid "AES256-CBC" msgstr "" #: ../../common/config.py:147 msgid "ARCFOUR" msgstr "" #: ../../common/config.py:153 msgid "Main profile" msgstr "メインプロファイル" #: ../../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:289 msgid "Snapshots folder is not valid !" msgstr "スナップショットのフォルダは有効ではありません!" #: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "バックアップするためには最低1つのフォルダを選択しなくてはなりません!" #: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "バックアップフォルダを含むことはできません!" #: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "バックアップサブフォルダを含むことはできません!" #: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s はフォルダではありません!" #: ../../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 "" "%s に書き込めません。\\n\n" "書き込み権限を持っていますか?" #: ../../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" "If not you should disable all automatic backups." msgstr "" "crontab がみつかりません。\\n\n" "cron をインストールしてもよろしいですか?\\n\n" "インストールしないのであれば、全ての自動バックアップは無効になります。" #: ../../common/config.py:1411 msgid "Failed to write new crontab." msgstr "" #: ../../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/config.py:1517 #, python-format msgid "Schedule udev doesn't work with mode %s" msgstr "" #: ../../common/config.py:1526 #, python-format msgid "Couldn't find UUID for \"%s\"" msgstr "" #: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" "\n" "%(error)s" msgstr "" #: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "" #: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "" #: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" #: ../../common/encfstools.py:171 msgid "Cancel" msgstr "" #: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "" #: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "" #: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" #: ../../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 "" #: ../../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:512 ../../common/snapshots.py:1131 #: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "スナップショット取得" #: ../../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:259 #, python-format msgid "mountpoint %s not empty." msgstr "" #: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" #: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" #: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "現在" #: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "" #: ../../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:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "" #: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "" #: ../../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 "" "Back In Time はバックアップフォーマットを変更しました。\\n\n" "\\n\n" "あなたの古いスナップショットはこの新たなフォーマットにより変更されます。よろしいですか?" #: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" "\n" "The 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)" msgstr "" "%s のプロファイルが見つかりました。\\n\n" "新しいバックアップフォーマットは、同位置で異なるユーザーとプロファイルの保存をサポートします。両方のプロファイルで同位置にしたいですか?\\n\n" "\\n\n" "(プログラムでは今までどおりそれらを区別できます)" #: ../../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:918 #, python-format msgid "" "%(snapshots_left)s\n" "of profile %(profile_id)s are not moved to their new location\n" "Do 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" "\n" "If not Back In Time will restore former settings for this profile, however " "cannot continue taking snapshots" msgstr "" #: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" "Back In Time cannot continue taking new snapshots.\n" "\n" "You can manually move the snapshots, \n" "if you are done restart Back In Time to proceed" msgstr "" #: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" msgstr "" "アップデートが成功しました!\\n\n" "\\n\n" "Back In Time は再度スケジュール通りスナップショットを取得し続けます" #: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" "\n" "If 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" "\n" "If you do not, you will be asked again next time you start Back In Time." msgstr "" #: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "Back In Time は再度スケジュール通りスナップショットを取得し続けます" #: ../../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 はまだ新たなスナップショットを取得できません。\\n\n" "質問を見直して Back In Time を再起動してください。" #: ../../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 "" "スナップショットフォルダがみつかりません。\\n\n" "もしリムーバブルドライブ上にあるのなら、接続して下さい。" #: ../../common/snapshots.py:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "%s 秒待っています。" #: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "スナップショット %s の取得に失敗しました!!!" #: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "ファイナライズ中" #: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "フォルダ %s を作成できません" #: ../../common/snapshots.py:1217 msgid "..." msgstr "…" #: ../../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:1340 #, python-format msgid "Compare with snapshot %s" msgstr "スナップショット %s と比較" #: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "ハードリンクを作成" #: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "設定ファイルを保存..." #: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "パーミッションを保存..." #: ../../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:1695 ../../common/snapshots.py:1728 #: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "賢く削除" #: ../../common/snapshots.py:1704 msgid "Remove old snapshots" msgstr "古いスナップショットを削除" #: ../../common/snapshots.py:1733 msgid "Try to keep min free space" msgstr "最小限のフリースペースの確保を試みる" #: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" #: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "" #: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "" #: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" #: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" #: ../../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:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" #: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" #: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" #: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" #: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" #: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" #: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" #: ../../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 "" #: ../../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 "" #: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" 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 "終了" #: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 msgid "Help" msgstr "ヘルプ" #: ../../qt4/app.py:122 msgid "Config File Help" msgstr "" #: ../../qt4/app.py:125 msgid "Website" msgstr "ウェブサイト" #: ../../qt4/app.py:127 ../../qt4/app.py:982 msgid "Changelog" msgstr "" #: ../../qt4/app.py:129 msgid "FAQ" msgstr "" #: ../../qt4/app.py:131 msgid "Ask a question" msgstr "" #: ../../qt4/app.py:133 msgid "Report a bug" msgstr "" #: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "情報" #: ../../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 "復元" #: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 #: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "" #: ../../qt4/app.py:194 msgid "Restore and delete new files" msgstr "" #: ../../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 "" #: ../../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 "ショートカット" #: ../../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" msgstr "" "スナップショットフォルダがみつかりません。\\n\n" "もしリムーバブルドライブ上にあるのなら、接続後に OK を押して下さい。" #: ../../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 "作業中:" #: ../../qt4/app.py:695 msgid "Done, no backup needed" msgstr "完了、バックアップの必要はありませんでした" #: ../../qt4/app.py:707 msgid "Error:" msgstr "エラー:" #: ../../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 "全体" #: ../../qt4/app.py:778 msgid "Root" msgstr "ルート" #: ../../qt4/app.py:779 msgid "Home" msgstr "ホーム" #: ../../qt4/app.py:794 msgid "Backup folders" msgstr "バックアップフォルダ" #: ../../qt4/app.py:849 msgid "This is NOT a snapshot but a live view of your local files" msgstr "" #: ../../qt4/app.py:860 ../../qt4/app.py:1476 #, python-format msgid "Last check %s" msgstr "" #: ../../qt4/app.py:928 #, python-format msgid "" "Are you sure you want to remove the snapshot:\n" "%s" msgstr "" "スナップショット %s を\\n\n" "削除してもよろしいですか" #: ../../qt4/app.py:1004 #, python-format msgid "" "Backup local files before overwriting or\n" "removing with trailing '%(suffix)s'." msgstr "" #: ../../qt4/app.py:1010 msgid "" "Are you sure you want to remove all newer files in your original folder?" msgstr "" #: ../../qt4/app.py:1014 msgid "" "WARNING: deleting files in filesystem root could break your whole system!!!" msgstr "" #: ../../qt4/app.py:1016 msgid "Files to be restored:" msgstr "" #: ../../qt4/app.py:1031 msgid "Do you really want to restore this files(s):" msgstr "" #: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "スナップショット:%s" #: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "%s に作成したスナップショットを閲覧" #: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "現在のディスクの内容を閲覧" #: ../../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 "全て" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 #: ../../qt4/settingsdialog.py:657 msgid "Errors" msgstr "エラー" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 msgid "Changes" msgstr "変更点" #: ../../qt4/logviewdialog.py:92 msgid "Informations" msgstr "情報" #: ../../qt4/logviewdialog.py:101 msgid "[E] Error, [I] Information, [C] Change" msgstr "[E] エラー、 [I] インフォメーション、 [C] 変更点" #: ../../qt4/logviewdialog.py:104 msgid "decode paths" msgstr "" #: ../../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 "作業中..." #: ../../qt4/qt4tools.py:178 msgid "Today" msgstr "今日" #: ../../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 "" #: ../../qt4/settingsdialog.py:68 msgid "Edit" msgstr "編集" #: ../../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 "一般" #: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "" #: ../../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 "スナップショットの保存場所" #: ../../qt4/settingsdialog.py:145 msgid "Folder" msgstr "" #: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" #: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "ホスト:" #: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "" #: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "ユーザ:" #: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" #: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" #: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "" #: ../../qt4/settingsdialog.py:201 msgid "Key File" msgstr "" #: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 #: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "" #: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" #: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" #: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "上級設定" #: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 msgid "Full snapshot path: " msgstr "" #: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "スケジュール" #: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "" #: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "" #: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "時:" #: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "" #: ../../qt4/settingsdialog.py:339 msgid "" "Run Back In Time repeatedly. This is useful if the computer is not running " "regular." msgstr "" #: ../../qt4/settingsdialog.py:344 msgid "Every:" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "内包" #: ../../qt4/settingsdialog.py:381 msgid "Include files and folders" msgstr "含むファイルとフォルダ" #: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "ファイルを追加" #: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "フォルダを追加" #: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "除外" #: ../../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 "" #: ../../qt4/settingsdialog.py:425 msgid "Exclude patterns, files or folders" msgstr "ファイルやフォルダの除外パターン" #: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "いち押し:" #: ../../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 "自動削除" #: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "以下より古い場合:" #: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "以下より空き容量が少ない場合:" #: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" #: ../../qt4/settingsdialog.py:551 msgid "Run in background on remote Host." msgstr "" #: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "" #: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "" #: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "" #: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "" #: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "" #: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "" #: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "" #: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "" #: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "名付けたスナップショットは削除しない" #: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "オプション" #: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "通知を有効にする" #: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "バッテリ駆動の際はスナップショット取得を無効化" #: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" 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 "" #: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "エラー発生時に継続 (不完全なスナップショットをキープ)" #: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "変更の検出にチェックサムを使用" #: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "" #: ../../qt4/settingsdialog.py:634 msgid "" "- snapshots are not read-only\n" "- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "ログレベル:" #: ../../qt4/settingsdialog.py:656 msgid "None" msgstr "" #: ../../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 "何をしているか本当に理解している場合に限りこれらのオプションを変更してください!" #: ../../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 "" #: ../../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 "" #: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" #: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "ACL を保存" #: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "拡張属性を維持(xattr)" #: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute 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 "" #: ../../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 のオプション" #: ../../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 "異なるスナップショットだけを列挙" #: ../../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 "" #: ../../qt4/snapshotsdialog.py:148 msgid "Select All" msgstr "" #: ../../qt4/snapshotsdialog.py:161 msgid "Diff" msgstr "Diff (差分)" #: ../../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 "" backintime-1.1.12/common/po/is.po0000664000175000017500000011574712644767576016150 0ustar germargermar# translation of 20110902-common_po_common-is.po to Icelandic # Icelandic translation for backintime # Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 # This file is distributed under the same license as the backintime package. # # FIRST AUTHOR , 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: 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: 2016-01-11 17:52+0000\n" "X-Generator: Launchpad (build 17881)\n" "Language: is\n" #: ../../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:77 msgid "At every boot/reboot" msgstr "Við hverja ræsingu/endurræsingu" #: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Á 5 mínútna fresti" #: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Á 10 mínútna fresti" #: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "Á 30 mínútna fresti" #: ../../common/config.py:81 msgid "Every hour" msgstr "Á klukkustundar fresti" #: ../../common/config.py:82 msgid "Every 2 hours" msgstr "Á 2 klukkustunda fresti" #: ../../common/config.py:83 msgid "Every 4 hours" msgstr "Á 4 klukkustunda fresti" #: ../../common/config.py:84 msgid "Every 6 hours" msgstr "Á 6 klukkustunda fresti" #: ../../common/config.py:85 msgid "Every 12 hours" msgstr "Á 12 klukkustunda fresti" #: ../../common/config.py:86 msgid "Custom Hours" msgstr "Sérsniðnar klukkustundir" #: ../../common/config.py:87 msgid "Every Day" msgstr "Daglega" #: ../../common/config.py:88 msgid "Repeatedly (anacron)" msgstr "Endurtekið (anacron)" #: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "Þegar drif er tengt (udev)" #: ../../common/config.py:90 msgid "Every Week" msgstr "Vikulega" #: ../../common/config.py:91 msgid "Every Month" msgstr "Mánaðarlega" #: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "dag(a)" #: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "viku(r)" #: ../../common/config.py:97 msgid "Year(s)" msgstr "ár" #: ../../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 " Á tilraunastigi!" #: ../../common/config.py:129 msgid "Local" msgstr "Staðvært" #: ../../common/config.py:130 msgid "SSH" msgstr "SSH" #: ../../common/config.py:130 ../../common/config.py:132 #: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "SSH einkalykill" #: ../../common/config.py:131 msgid "Local encrypted" msgstr "Staðvært dulritað" #: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "Dulritun" #: ../../common/config.py:132 msgid "SSH encrypted" msgstr "SSH dulritað" #: ../../common/config.py:135 msgid "Default" msgstr "Sjálfgefið" #: ../../common/config.py:136 msgid "AES128-CTR" msgstr "AES128-CTR" #: ../../common/config.py:137 msgid "AES192-CTR" msgstr "AES192-CTR" #: ../../common/config.py:138 msgid "AES256-CTR" msgstr "AES256-CTR" #: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "ARCFOUR256" #: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "ARCFOUR128" #: ../../common/config.py:141 msgid "AES128-CBC" msgstr "AES128-CBC" #: ../../common/config.py:142 msgid "3DES-CBC" msgstr "3DES-CBC" #: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "Blowfish-CBC" #: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "Cast128-CBC" #: ../../common/config.py:145 msgid "AES192-CBC" msgstr "AES192-CBC" #: ../../common/config.py:146 msgid "AES256-CBC" msgstr "AES256-CBC" #: ../../common/config.py:147 msgid "ARCFOUR" msgstr "ARCFOUR" #: ../../common/config.py:153 msgid "Main profile" msgstr "Aðalsnið" #: ../../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:289 msgid "Snapshots folder is not valid !" msgstr "Mappa fyrir skyndiafrit er ekki gild !" #: ../../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:307 msgid "You can't include backup folder !" msgstr "Þú mátt ekki hafa með möppuna sem öryggisafritin eiga að fara í !" #: ../../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:371 #, python-format msgid "%s is not a folder !" msgstr "%s er ekki mappa !" #: ../../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 "" "Get ekki skrifað í: %s\n" "Ertu viss um að þú hafir skrifaðgang þarna ?" #: ../../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 "Ítarlegri valkostir" #: ../../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" "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:1411 msgid "Failed to write new crontab." msgstr "" #: ../../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/config.py:1517 #, python-format msgid "Schedule udev doesn't work with mode %s" msgstr "" #: ../../common/config.py:1526 #, python-format msgid "Couldn't find UUID for \"%s\"" msgstr "Gat ekki fundið UUID fyrir \"%s\"" #: ../../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:114 #, python-format msgid "Can't unmount encfs %s" msgstr "Get ekki aftengt encfs %s" #: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "" #: ../../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:171 msgid "Cancel" msgstr "Hætta við" #: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "Staðfestu aðgangsorð" #: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "Lykilorðin stemma ekki" #: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" #: ../../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 "" #: ../../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:512 ../../common/snapshots.py:1131 #: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "Taka skyndiafrit" #: ../../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:259 #, python-format msgid "mountpoint %s not empty." msgstr "tengipunkturinn %s ekki laus." #: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" #: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" #: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Núna" #: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "MEÐ VILLUM !" #: ../../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:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "MISTÓKST" #: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" 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: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:868 #, python-format msgid "" "%s profiles found. \n" "\n" "The 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)" msgstr "" #: ../../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:918 #, python-format msgid "" "%(snapshots_left)s\n" "of profile %(profile_id)s are not moved to their new location\n" "Do 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" "\n" "If not Back In Time will restore former settings for this profile, however " "cannot continue taking snapshots" msgstr "" #: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" "Back In Time cannot continue taking new snapshots.\n" "\n" "You can manually move the snapshots, \n" "if you are done restart Back In Time to proceed" msgstr "" #: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" msgstr "" #: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" "\n" "If 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" "\n" "If you do not, you will be asked again next time you start Back In Time." msgstr "" #: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "" #: ../../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: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: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:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "Mistókst að taka skyndiafritið %s !!!" #: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "Geng frá" #: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "Get ekki búið til möppu: %s" #: ../../common/snapshots.py:1217 msgid "..." msgstr "..." #: ../../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:1340 #, python-format msgid "Compare with snapshot %s" msgstr "Bera saman við skyndiafritið %s" #: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "" #: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "Vista stillingaskrá ..." #: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "Vista aðgangsheimildir ..." #: ../../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:1695 ../../common/snapshots.py:1728 #: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "Snjöll fjarlæging" #: ../../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:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "Reyna að halda a.m.k. %d%% af lausum ihnútum (inodes)" #: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "Get ekki tengt %s" #: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "Get ekki aftengt sshfs %s" #: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" #: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" #: ../../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:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" #: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" #: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" #: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" #: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" #: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" #: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" #: ../../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 "" #: ../../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 "" #: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "" #: ../../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" #: ../../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" #: ../../qt4/app.py:122 msgid "Config File Help" msgstr "" #: ../../qt4/app.py:125 msgid "Website" msgstr "Vefsvæði" #: ../../qt4/app.py:127 ../../qt4/app.py:982 msgid "Changelog" msgstr "Breytingasaga" #: ../../qt4/app.py:129 msgid "FAQ" msgstr "FAQ / Algengar spurningar" #: ../../qt4/app.py:131 msgid "Ask a question" msgstr "Spyrja spurninga" #: ../../qt4/app.py:133 msgid "Report a bug" msgstr "Tilkynna um villu" #: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "Um forritið" #: ../../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" #: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 #: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "Endurheimta í ..." #: ../../qt4/app.py:194 msgid "Restore and delete new files" msgstr "Endurheimta og eyða nýjum skrám" #: ../../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 "" #: ../../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" #: ../../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" 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 "" #: ../../qt4/app.py:667 ../../qt4/app.py:703 msgid "Working:" msgstr "Að vinna:" #: ../../qt4/app.py:695 msgid "Done, no backup needed" msgstr "Búið, engin öryggisafritun nauðsynleg" #: ../../qt4/app.py:707 msgid "Error:" msgstr "Villa:" #: ../../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" #: ../../qt4/app.py:778 msgid "Root" msgstr "Kerfisstjóri (root)" #: ../../qt4/app.py:779 msgid "Home" msgstr "Einkamappa (Home)" #: ../../qt4/app.py:794 msgid "Backup folders" msgstr "Öryggisafritunarmöppur" #: ../../qt4/app.py:849 msgid "This is NOT a snapshot but a live view of your local files" msgstr "" #: ../../qt4/app.py:860 ../../qt4/app.py:1476 #, python-format msgid "Last check %s" msgstr "Síðasta athugun %s" #: ../../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" #: ../../qt4/app.py:1004 #, python-format msgid "" "Backup local files before overwriting or\n" "removing with trailing '%(suffix)s'." msgstr "" #: ../../qt4/app.py:1010 msgid "" "Are you sure you want to remove all newer files in your original folder?" msgstr "" #: ../../qt4/app.py:1014 msgid "" "WARNING: deleting files in filesystem root could break your whole system!!!" msgstr "" #: ../../qt4/app.py:1016 msgid "Files to be restored:" msgstr "Skrár sem á að endurheimta:" #: ../../qt4/app.py:1031 msgid "Do you really want to restore this files(s):" msgstr "" #: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "Skyndiafrit: %s" #: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "Skoða skyndiafritið sem búið var til %s" #: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "Skoða innihald á diski" #: ../../qt4/app.py:1268 #, python-format msgid "Restore '%s'" msgstr "Endurheimta '%s'" #: ../../qt4/app.py:1269 #, python-format msgid "Restore '%s' to ..." msgstr "Endurheimta '%s' í ..." #: ../../qt4/app.py:1270 #, python-format msgid "Restore '%s' and delete new files" msgstr "Endurheimta '%s' og eyða nýjum skrám" #: ../../qt4/app.py:1368 ../../qt4/app.py:1385 msgid "Authors" msgstr "Höfundar" #: ../../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 "" #: ../../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 "Snið:" #: ../../qt4/logviewdialog.py:81 msgid "Filter:" msgstr "Sía:" #: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 msgid "All" msgstr "Allt" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 #: ../../qt4/settingsdialog.py:657 msgid "Errors" msgstr "Villur" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 msgid "Changes" msgstr "Breytingar" #: ../../qt4/logviewdialog.py:92 msgid "Informations" msgstr "Upplýsingar" #: ../../qt4/logviewdialog.py:101 msgid "[E] Error, [I] Information, [C] Change" msgstr "[E] Villa, [I] Upplýsingar, [C] Breyta" #: ../../qt4/logviewdialog.py:104 msgid "decode paths" msgstr "afkóða slóðir" #: ../../qt4/messagebox.py:56 msgid "Error" msgstr "Villa" #: ../../qt4/messagebox.py:62 ../../qt4/messagebox.py:68 msgid "Question" msgstr "Spurning" #: ../../qt4/qt4systrayicon.py:69 msgid "Start BackInTime" msgstr "Ræsa BackInTime" #: ../../qt4/qt4systrayicon.py:124 msgid "Working..." msgstr "Í vinnslu..." #: ../../qt4/qt4tools.py:178 msgid "Today" msgstr "Í dag" #: ../../qt4/qt4tools.py:183 msgid "Yesterday" msgstr "Í gær" #: ../../qt4/qt4tools.py:188 msgid "This week" msgstr "Í þessari viku" #: ../../qt4/qt4tools.py:193 msgid "Last week" msgstr "Í síðustu viku" #: ../../qt4/restoredialog.py:75 msgid "Show full Log" msgstr "Birta fullan annál" #: ../../qt4/settingsdialog.py:68 msgid "Edit" msgstr "Breyta" #: ../../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" #: ../../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 "" #: ../../qt4/settingsdialog.py:129 ../../qt4/settingsdialog.py:1568 msgid "Where to save snapshots" msgstr "Hvar á að vista skyndiafrit" #: ../../qt4/settingsdialog.py:145 msgid "Folder" msgstr "Mappa" #: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "SSH stillingar" #: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "Miðlari:" #: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "Gátt:" #: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "Notandi:" #: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "Slóð:" #: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "Dulkóðunarlykill:" #: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "Einkalykill:" #: ../../qt4/settingsdialog.py:201 msgid "Key File" msgstr "Lykilskrá" #: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 #: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "Lykilorð" #: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" #: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" #: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "Nánar" #: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 msgid "Full snapshot path: " msgstr "Heildarslóð skyndiafrita: " #: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "Vinnuáætlun" #: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "Dagur:" #: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "Vikudagur:" #: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "Klukkustund:" #: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "Klukkustundir:" #: ../../qt4/settingsdialog.py:339 msgid "" "Run Back In Time repeatedly. This is useful if the computer is not running " "regular." msgstr "" #: ../../qt4/settingsdialog.py:344 msgid "Every:" msgstr "Hverjar:" #: ../../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 "" #: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Taka með" #: ../../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á" #: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Bæta við möppu" #: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Undanskilja" #: ../../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 "" #: ../../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ð:" #: ../../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" #: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "Eldri en:" #: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "Ef laust pláss er minna en:" #: ../../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 "" #: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "Geyma öll skyndiafrit síðustu" #: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "dag(a)" #: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "Geyma eitt skyndiafrit á dag síðustu" #: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "Geyma eitt skyndiafrit á viku síðustu" #: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "viku(r)" #: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "Geyma eitt skyndiafrit á mánuði síðustu" #: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "mánuði(r)" #: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "Geyma eitt skyndiafrit á dári síðustu" #: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "Ekki fjarlægja nefnd skyndiafrit" #: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Valkostir" #: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Virkja tilkynningar" #: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "Koma í veg fyrir skyndiafritun þegar rafhlaða er í notkun" #: ../../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 "" #: ../../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 "Ö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 "" #: ../../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" #: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "Fullur rsync hamur. Gæti verið hraðvirkari, en:" #: ../../qt4/settingsdialog.py:634 msgid "" "- 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." #: ../../qt4/settingsdialog.py:644 msgid "Check for changes (don't take a new snapshot if nothing changed)" msgstr "Athuga með breytingar (ekki taka skyndiafrit ef ekkert hefur breyst)" #: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "Annálsstig:" #: ../../qt4/settingsdialog.py:656 msgid "None" msgstr "Ekkert" #: ../../qt4/settingsdialog.py:658 msgid "Changes & Errors" msgstr "Breytingar og villuboð" #: ../../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 !" #: ../../qt4/settingsdialog.py:678 msgid "Run 'nice':" msgstr "Keyra 'nice':" #: ../../qt4/settingsdialog.py:684 ../../qt4/settingsdialog.py:696 msgid "as cron job" msgstr "sem cron-verk" #: ../../qt4/settingsdialog.py:687 ../../qt4/settingsdialog.py:702 #: ../../qt4/settingsdialog.py:716 msgid "on remote host" msgstr "á fjartengdri vél" #: ../../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 "" #: ../../qt4/settingsdialog.py:725 msgid "Redirect stderr to /dev/null in cronjobs." msgstr "" #: ../../qt4/settingsdialog.py:734 msgid "Limit rsync bandwidth usage: " msgstr "Takmarka notkun rsync á bandbreidd: " #: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr " KB/sek" #: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "Varðveita ACL" #: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "Varðveita ítarleg eigindi (xattr)" #: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute links)" msgstr "" #: ../../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 "" #: ../../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 "sjálfgefið" #: ../../qt4/settingsdialog.py:875 msgid "Restore Config" msgstr "Endurheimta stillingaskrá" #: ../../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 "Nýtt snið" #: ../../qt4/settingsdialog.py:938 msgid "Rename profile" msgstr "Endurnefna snið" #: ../../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\" ?" #: ../../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 "Útilokunarmynstur" #: ../../qt4/settingsdialog.py:1502 msgid "Exclude file" msgstr "Undanskilja skrá" #: ../../qt4/settingsdialog.py:1506 msgid "Exclude folder" msgstr "Undanskilja möppu" #: ../../qt4/settingsdialog.py:1525 msgid "Include file" msgstr "Hafa með skrá" #: ../../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 "Hafa með möppu" #: ../../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 ?" #: ../../qt4/settingsdialog.py:1688 msgid "enabled" msgstr "virkt" #: ../../qt4/settingsdialog.py:1690 msgid "disabled" msgstr "óvirkt" #: ../../qt4/settingsdialog.py:1715 msgid "Restore Settings" msgstr "Endurheimta stillingar" #: ../../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 "Engin stillingaskrá fannst" #: ../../qt4/snapshotsdialog.py:49 ../../qt4/snapshotsdialog.py:173 msgid "Diff Options" msgstr "Diff valkostir" #: ../../qt4/snapshotsdialog.py:56 msgid "Command:" msgstr "Skipun:" #: ../../qt4/snapshotsdialog.py:60 msgid "Parameters:" msgstr "Viðföng:" #: ../../qt4/snapshotsdialog.py:64 msgid "Use %1 and %2 for path parameters" msgstr "" #: ../../qt4/snapshotsdialog.py:106 msgid "List only different snapshots" msgstr "" #: ../../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 "Eyða" #: ../../qt4/snapshotsdialog.py:148 msgid "Select All" msgstr "Velja allt" #: ../../qt4/snapshotsdialog.py:161 msgid "Diff" msgstr "Diff" #: ../../qt4/snapshotsdialog.py:172 msgid "Go To" msgstr "Fara í" #: ../../qt4/snapshotsdialog.py:326 msgid "You can't compare a snapshot to itself" msgstr "Þú getur ekki borið skyndiafrit saman við sjálft sig" #: ../../qt4/snapshotsdialog.py:333 #, python-format msgid "Command not found: %s" msgstr "Skipun fannst ekki: %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 "" backintime-1.1.12/common/po/ar.po0000664000175000017500000012250612644767576016126 0ustar germargermar# Arabic translation for backintime # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the backintime package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \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: 2016-01-11 17:52+0000\n" "X-Generator: Launchpad (build 17881)\n" #: ../../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:77 msgid "At every boot/reboot" msgstr "في كل اقلاع/اعادة اقلاع" #: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "كل ٥ دقائق" #: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "كل ١٠ دقائق" #: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "كل ٣٠ دقيقة" #: ../../common/config.py:81 msgid "Every hour" msgstr "كل ساعة" #: ../../common/config.py:82 msgid "Every 2 hours" msgstr "" #: ../../common/config.py:83 msgid "Every 4 hours" msgstr "كل ٤ ساعات" #: ../../common/config.py:84 msgid "Every 6 hours" msgstr "كل ٦ ساعات" #: ../../common/config.py:85 msgid "Every 12 hours" msgstr "كل ١٢ ساعات" #: ../../common/config.py:86 msgid "Custom Hours" msgstr "ساعات مخصصة" #: ../../common/config.py:87 msgid "Every Day" msgstr "كل يوم" #: ../../common/config.py:88 msgid "Repeatedly (anacron)" msgstr "" #: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "" #: ../../common/config.py:90 msgid "Every Week" msgstr "كل أسبوع" #: ../../common/config.py:91 msgid "Every Month" msgstr "كل شهر" #: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "يوم(أيام)" #: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "أسبوع(أسابيع)" #: ../../common/config.py:97 msgid "Year(s)" msgstr "سنة(سنين)" #: ../../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:129 msgid "Local" msgstr "محلي" #: ../../common/config.py:130 msgid "SSH" msgstr "SSH" #: ../../common/config.py:130 ../../common/config.py:132 #: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "" #: ../../common/config.py:131 msgid "Local encrypted" msgstr "" #: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "" #: ../../common/config.py:132 msgid "SSH encrypted" msgstr "" #: ../../common/config.py:135 msgid "Default" msgstr "إفتراضيّ" #: ../../common/config.py:136 msgid "AES128-CTR" msgstr "AES128-CTR" #: ../../common/config.py:137 msgid "AES192-CTR" msgstr "AES192-CTR" #: ../../common/config.py:138 msgid "AES256-CTR" msgstr "AES256-CTR" #: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "ARCFOUR256" #: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "ARCFOUR128" #: ../../common/config.py:141 msgid "AES128-CBC" msgstr "AES128-CBC" #: ../../common/config.py:142 msgid "3DES-CBC" msgstr "3DES-CBC" #: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "Blowfish-CBC" #: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "Cast128-CBC" #: ../../common/config.py:145 msgid "AES192-CBC" msgstr "AES192-CBC" #: ../../common/config.py:146 msgid "AES256-CBC" msgstr "AES256-CBC" #: ../../common/config.py:147 msgid "ARCFOUR" msgstr "ARCFOUR" #: ../../common/config.py:153 msgid "Main profile" msgstr "الملف الشخصي الرئيسي" #: ../../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:289 msgid "Snapshots folder is not valid !" msgstr "مُجلد اللقطات غير صالح !" #: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "يجب أن تُحدد على الأقل مُجلداً واحداً للنسخ الأحتياطي !" #: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "لا يُمكنك أن تُضَمْن مُجلد النسخ الإحتياطي !" #: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "لا يُمكنك أن تُضَمْن مُجلد نسخ إحتياطي فرعي !" #: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s ليس مُجلداً !" #: ../../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 "" "لا يستطيع الكتابة على %s\n" "هل انت مُتأكد بأن لديك حق الكتابة ؟" #: ../../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" "If not you should disable all automatic backups." msgstr "" "لا يستطيع إيجاد crontab.\n" "ِِِِِِِِِِهل أنت مُتأكد بأن cron مثبت فعلاً ؟\n" "أن لم يكن كذلك فعليك بإظهار جميع نُسخ الإحتياطية التلّقائية." #: ../../common/config.py:1411 msgid "Failed to write new crontab." msgstr "" #: ../../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/config.py:1517 #, python-format msgid "Schedule udev doesn't work with mode %s" msgstr "" #: ../../common/config.py:1526 #, python-format msgid "Couldn't find UUID for \"%s\"" msgstr "" #: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" "\n" "%(error)s" msgstr "" #: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "" #: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "" #: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" #: ../../common/encfstools.py:171 msgid "Cancel" msgstr "" #: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "" #: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "" #: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" #: ../../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 "" #: ../../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:512 ../../common/snapshots.py:1131 #: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "خذ لقطة" #: ../../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:259 #, python-format msgid "mountpoint %s not empty." msgstr "" #: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" #: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" #: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "الآن" #: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "بأخطاء" #: ../../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:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "فشل" #: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "إستعادة التراخيص:" #: ../../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 "" "باك إن تايم غيّرَ طريقة النسخ.\n" "\n" "يمكن نقل لقطات القديمة الخاصة بك وفقاً لِهذه الطريقة الجديدة. مُوافق؟" #: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" "\n" "The 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)" msgstr "" "%s وجدت الملفات الشخصية. \n" "\n" "الطريقة الجديدة للنسخ تدعم الخزنْ لِمُختلف المُستخدمين و الملفات الشخصية في " "ذات المسار. هل تُريد ذات المسار لكِلا ملفي الشخصيين؟ \n" "\n" "(البرنامج سيظلُ قادراً على التمييز بينهُما)" #: ../../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:918 #, python-format msgid "" "%(snapshots_left)s\n" "of profile %(profile_id)s are not moved to their new location\n" "Do 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" "\n" "If not Back In Time will restore former settings for this profile, however " "cannot continue taking snapshots" msgstr "" #: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" "Back In Time cannot continue taking new snapshots.\n" "\n" "You can manually move the snapshots, \n" "if you are done restart Back In Time to proceed" msgstr "" "الإعدادات السابقة لملف الشخصي %s تم إسترجاعها.\n" "باك إن تايم لا يستطيع الأستمرار بأخذ لقطات جديدة.\n" "\n" "بإمكانك نقل اللقطات يدوياً، \n" "إذا انتهيت, أعِد تشغيل باك إن تايم للأستكمال" #: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" msgstr "" "التحديث تم بنجاح!\n" "\n" "باك إن تايم سيستمر بأخذ لقطات مُجدداً كما هو مُجدول" #: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" "\n" "If 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" "\n" "If you do not, you will be asked again next time you start Back In Time." msgstr "" "هل أنت مُتأكد بأنك لا تُريد نقل لقطات المأخوذة قديماً؟\n" "\n" "\n" "إذا كنت تُريد ذلك, سوف لن ترى هذه الأسئلة مجدداً المرة القادمة, باك إن تايم " "سيستمر بأخذ لقطات مُجدداً, ولكن المُزيل-الذكي لا يستطيع أخذ اللقطات القديمة " "في الحساب بعد الآن!\n" "\n" "إذا لم تكن تُريد ذلك, ستُسأل مُجدداً المرة القادمة حينَ تُشغلّ باك إن تايم." #: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "باك إن تايم سيستمر بأخذ لقطات مجدداً كما هو مُجدول" #: ../../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 "" "باك إن تايم لا يزال غير قادراً على أخذ لقطات جديدة.\n" "أعِد تشغيل باك إن تايم لِترى الأسئلة مجدداً" #: ../../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 "" "لا يستطيع إيجاد مُجلد اللقطات.\n" "إذا كان في قرص قابل للإزالة من فضلك وَصْلّهُ." #: ../../common/snapshots.py:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "ينتظر %s ثانية." msgstr[1] "ينتظر %s ثواني." msgstr[2] "ينتظر %s ثانية." msgstr[3] "ينتظر %s ثواني." msgstr[4] "ينتظر %s ثانية." msgstr[5] "ينتظر %s ثواني." #: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "فشل بأخذ لقطة %s !!!" #: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "يُنْهيّ" #: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "لا يُمكن إنشاء مُجلد: %s" #: ../../common/snapshots.py:1217 msgid "..." msgstr "..." #: ../../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:1340 #, python-format msgid "Compare with snapshot %s" msgstr "قارن مع لقطة %s" #: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "انشئ hard-links" #: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "أحفظ ملف التعديل ..." #: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "أحفظ ترخيص ..." #: ../../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:1695 ../../common/snapshots.py:1728 #: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "إزالة ذكية" #: ../../common/snapshots.py:1704 msgid "Remove old snapshots" msgstr "أزل اللقطات القديمة" #: ../../common/snapshots.py:1733 msgid "Try to keep min free space" msgstr "حاول أبقاء حد أدنى من المساحة فارغة" #: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" #: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "" #: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "" #: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" #: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" #: ../../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:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" #: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" #: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" #: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" #: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" #: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" #: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" #: ../../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 "" #: ../../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 "" #: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" 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 "أخرج" #: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 msgid "Help" msgstr "مُساعدة" #: ../../qt4/app.py:122 msgid "Config File Help" msgstr "" #: ../../qt4/app.py:125 msgid "Website" msgstr "موقع إلكتروني" #: ../../qt4/app.py:127 ../../qt4/app.py:982 msgid "Changelog" msgstr "" #: ../../qt4/app.py:129 msgid "FAQ" msgstr "الأسئلة الأكثر شيوعاً" #: ../../qt4/app.py:131 msgid "Ask a question" msgstr "إسأل سُؤالاً" #: ../../qt4/app.py:133 msgid "Report a bug" msgstr "بلّغ عن عِلة" #: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "عنْ" #: ../../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 "إسترجع" #: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 #: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "إسترجع إلى ..." #: ../../qt4/app.py:194 msgid "Restore and delete new files" msgstr "" #: ../../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 "" #: ../../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 "إختصارات" #: ../../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" msgstr "" "لا يُمكن إيجاد مُجلد اللقطات.\n" "إذا كان على قرص قابل للإزالة من فضلك وَصْلّهُ ومن ثم أضغط موافق" #: ../../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 "يعمل:" #: ../../qt4/app.py:695 msgid "Done, no backup needed" msgstr "تم، لا حاجة للنسخ الاحتياطي" #: ../../qt4/app.py:707 msgid "Error:" msgstr "خطأ:" #: ../../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 "عام" #: ../../qt4/app.py:778 msgid "Root" msgstr "جذر" #: ../../qt4/app.py:779 msgid "Home" msgstr "Home" #: ../../qt4/app.py:794 msgid "Backup folders" msgstr "مجلدات النسخ الاحتياطي" #: ../../qt4/app.py:849 msgid "This is NOT a snapshot but a live view of your local files" msgstr "" #: ../../qt4/app.py:860 ../../qt4/app.py:1476 #, python-format msgid "Last check %s" msgstr "" #: ../../qt4/app.py:928 #, python-format msgid "" "Are you sure you want to remove the snapshot:\n" "%s" msgstr "" "هل أنت مُتأكد بأنك تُريد إزالة اللقطة:\n" "%s" #: ../../qt4/app.py:1004 #, python-format msgid "" "Backup local files before overwriting or\n" "removing with trailing '%(suffix)s'." msgstr "" #: ../../qt4/app.py:1010 msgid "" "Are you sure you want to remove all newer files in your original folder?" msgstr "" #: ../../qt4/app.py:1014 msgid "" "WARNING: deleting files in filesystem root could break your whole system!!!" msgstr "" #: ../../qt4/app.py:1016 msgid "Files to be restored:" msgstr "" #: ../../qt4/app.py:1031 msgid "Do you really want to restore this files(s):" msgstr "" #: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "لقطة: %s" #: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "أعرض اللقطة المُعِدة في %s" #: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "أعرض مُحتوى القرص الحالي" #: ../../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 "كل" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 #: ../../qt4/settingsdialog.py:657 msgid "Errors" msgstr "أخطاء" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 msgid "Changes" msgstr "تغييرات" #: ../../qt4/logviewdialog.py:92 msgid "Informations" msgstr "معلومات" #: ../../qt4/logviewdialog.py:101 msgid "[E] Error, [I] Information, [C] Change" msgstr "[E] خطأ، [I] معلومات، [C] غيّر" #: ../../qt4/logviewdialog.py:104 msgid "decode paths" msgstr "" #: ../../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 "يعمل..." #: ../../qt4/qt4tools.py:178 msgid "Today" msgstr "اليوم" #: ../../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 "" #: ../../qt4/settingsdialog.py:68 msgid "Edit" msgstr "تعديل" #: ../../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 "عام" #: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "" #: ../../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 "أين سيتم حفظ اللقطات" #: ../../qt4/settingsdialog.py:145 msgid "Folder" msgstr "" #: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" #: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "المُضيف:" #: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "" #: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "مستخدم:" #: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" #: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" #: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "" #: ../../qt4/settingsdialog.py:201 msgid "Key File" msgstr "" #: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 #: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "" #: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" #: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" #: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "مُتقدم" #: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 msgid "Full snapshot path: " msgstr "" #: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "جدول" #: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "يوم:" #: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "يوم الأسبوع:" #: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "ساعة:" #: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "ساعات:" #: ../../qt4/settingsdialog.py:339 msgid "" "Run Back In Time repeatedly. This is useful if the computer is not running " "regular." msgstr "" #: ../../qt4/settingsdialog.py:344 msgid "Every:" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "ضمْن" #: ../../qt4/settingsdialog.py:381 msgid "Include files and folders" msgstr "ضمْن ملفات ومُجلدات" #: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "أضف ملف" #: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "أضف مُجلد" #: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "أستثني" #: ../../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 "" #: ../../qt4/settingsdialog.py:425 msgid "Exclude patterns, files or folders" msgstr "إستثني الأنماط, ملفات أو مُجلدات" #: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "مُوصى بشدة:" #: ../../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 "إزالة-تلقائية" #: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "أقدم من:" #: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "إذا كانت المساحة الفارغة أقل من:" #: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" #: ../../qt4/settingsdialog.py:551 msgid "Run in background on remote Host." msgstr "" #: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "أبقي كل اللقطات حتى نهاية" #: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "يوم (أيّام)" #: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "أبقي لقطة واحدة ليوم واحد حتى النهاية" #: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "أبقي لقطة واحدة للأسبوع حتى النهاية" #: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "أسبوع(أسابيع)" #: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "أبقي لقطة واحدة لكل شهر حتى النهاية" #: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "شهر(أشهر)" #: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "أبقي لقطة واحدة للسنة وهكذا لكل السنين" #: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "لا تُزيل اللقطات المُسماّة" #: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "خيارات" #: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "فَعْلّ التنبيهات" #: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "عطلّ اللقطات عندما تعمل بالجهاز على البطارية" #: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" 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 "" #: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "أستمر عند الأخطاء (أبقي اللقطات الغير مُكتملة)" #: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "أستخدم تدقيق المجموع لِكشف التغيُّرات" #: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "وضع التزَامُنْ المُتكامل. قد يكون أسرع ولكن:" #: ../../qt4/settingsdialog.py:634 msgid "" "- snapshots are not read-only\n" "- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" "- اللقطات ليست read-only\n" "- الوجهة file-system يجب أن تدعم جميع الخصائص (تواريخ, حقوق, مستخدم, " "مجموعة...)" #: ../../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 "تفحص من وجود تغييرات (لا تأخذ لقطات جديدة إذا لم يتغير شيء)" #: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "مستوي السجل:" #: ../../qt4/settingsdialog.py:656 msgid "None" msgstr "لا شيء" #: ../../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 "غيّر هذه الخيارات فقط عندما تكون واثق مما تفعله !" #: ../../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 "" #: ../../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 "" #: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" #: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "حِفاظ ACL" #: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "المُحافظة على الصفات المُوسعة (xattr)" #: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute 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 "" #: ../../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 "خيارات الاختلافات" #: ../../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 "استعمل ١٪ و ٢٪ لِمسار الموسطات" #: ../../qt4/snapshotsdialog.py:106 msgid "List only different snapshots" msgstr "سرد لقطات المُختلفة فقط" #: ../../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 "" #: ../../qt4/snapshotsdialog.py:148 msgid "Select All" msgstr "" #: ../../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 "" "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 "" backintime-1.1.12/common/po/el.po0000664000175000017500000011445512644767576016130 0ustar germargermar# Greek translation for backintime # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the backintime package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \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: 2016-01-11 17:52+0000\n" "X-Generator: Launchpad (build 17881)\n" #: ../../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:77 msgid "At every boot/reboot" msgstr "Σε κάθε εκκίνηση/επανεκκίνηση" #: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Κάθε 5 λεπτά" #: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Κάθε 10 λεπτά" #: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "Κάθε 30 λεπτά" #: ../../common/config.py:81 msgid "Every hour" msgstr "Κάθε ώρα" #: ../../common/config.py:82 msgid "Every 2 hours" msgstr "Κάθε 2 ώρες" #: ../../common/config.py:83 msgid "Every 4 hours" msgstr "Κάθε 4 ώρες" #: ../../common/config.py:84 msgid "Every 6 hours" msgstr "Κάθε 6 ώρες" #: ../../common/config.py:85 msgid "Every 12 hours" msgstr "Κάθε 12 ώρες" #: ../../common/config.py:86 msgid "Custom Hours" msgstr "" #: ../../common/config.py:87 msgid "Every Day" msgstr "Καθημερινά" #: ../../common/config.py:88 msgid "Repeatedly (anacron)" msgstr "" #: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "Όταν συνδέεται δίσκος" #: ../../common/config.py:90 msgid "Every Week" msgstr "Κάθε εβδομάδα" #: ../../common/config.py:91 msgid "Every Month" msgstr "Κάθε μήνα" #: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Ημέρα(ες)" #: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Εβδομάδα(ες)" #: ../../common/config.py:97 msgid "Year(s)" msgstr "Έτος(η)" #: ../../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:129 msgid "Local" msgstr "Τοπικό" #: ../../common/config.py:130 msgid "SSH" msgstr "SSH" #: ../../common/config.py:130 ../../common/config.py:132 #: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "" #: ../../common/config.py:131 msgid "Local encrypted" msgstr "Τοπικό κρυπτογραφημένο" #: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "Κρυπτογράφηση" #: ../../common/config.py:132 msgid "SSH encrypted" msgstr "SSH κρυπτογραφημένο" #: ../../common/config.py:135 msgid "Default" msgstr "Προεπιλογή" #: ../../common/config.py:136 msgid "AES128-CTR" msgstr "AES128-CTR" #: ../../common/config.py:137 msgid "AES192-CTR" msgstr "AES192-CTR" #: ../../common/config.py:138 msgid "AES256-CTR" msgstr "AES256-CTR" #: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "ARCFOUR256" #: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "ARCFOUR128" #: ../../common/config.py:141 msgid "AES128-CBC" msgstr "AES128-CBC" #: ../../common/config.py:142 msgid "3DES-CBC" msgstr "3DES-CBC" #: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "Blowfish-CBC" #: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "Cast128-CBC" #: ../../common/config.py:145 msgid "AES192-CBC" msgstr "AES192-CBC" #: ../../common/config.py:146 msgid "AES256-CBC" msgstr "AES256-CBC" #: ../../common/config.py:147 msgid "ARCFOUR" msgstr "ARCFOUR" #: ../../common/config.py:153 msgid "Main profile" msgstr "Κύριο Προφίλ" #: ../../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:289 msgid "Snapshots folder is not valid !" msgstr "Ο φάκελος στιγμιοτύπων δεν είναι έγκυρος !" #: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "Πρέπει να διαλέξετε τουλάχιστον ένα φάκελο για backup!" #: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "Δεν μπορείτε να συμπεριλάβετε φάκελο backup !" #: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "Δεν μπορείτε να συμπεριλάβετε υποφάκελο backup !" #: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "Το %s δεν είναι φάκελος !" #: ../../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 "" "Αδύνατη η εγγραφή στο: %s\n" "Είστε σίγουροι ότι έχετε δικαίωμα εγγραφής;" #: ../../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" "If not you should disable all automatic backups." msgstr "" "Δε βρέθηκε crontab.\n" "Είστε σίγουροι ότι το cron είναι εγκατεστημένο ;\n" "Αν όχι, θα πρέπει να απενεργοποιήσετε όλα τα αυτοματοποιημένα back up." #: ../../common/config.py:1411 msgid "Failed to write new crontab." msgstr "" #: ../../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/config.py:1517 #, python-format msgid "Schedule udev doesn't work with mode %s" msgstr "" #: ../../common/config.py:1526 #, python-format msgid "Couldn't find UUID for \"%s\"" msgstr "Δεν βρέθηκε UUID για \"%s\"" #: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" "\n" "%(error)s" msgstr "" #: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "" #: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "" #: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" "\n" "Δημιουργία νέου κρυπτογραφημένου φακέλου;" #: ../../common/encfstools.py:171 msgid "Cancel" msgstr "Ακύρωση" #: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "Παρακαλώ επιβεβαιώστε τον κωδικό" #: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "Ο κωδικός δεν ταιριάζει" #: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" #: ../../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 "" #: ../../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:512 ../../common/snapshots.py:1131 #: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "Λήψη στιγμιοτύπου" #: ../../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:259 #, python-format msgid "mountpoint %s not empty." msgstr "" #: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" #: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" #: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Τώρα" #: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "ΜΕ ΛΑΘΗ !" #: ../../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:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "ΑΠΟΤΥΧΙΑ" #: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "" #: ../../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 "" "Το Back in Time άλλαξε το μορφότυπο backup.\n" "\n" "Τα παλιά σας στιγμιότυπα μπορούν να μετακινηθούν σύμφωνα με το νέο " "μορφότυπο. ΟΚ;" #: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" "\n" "The 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)" msgstr "" "Βρέθηκαν %s προφίλ. \n" "\n" "Το νέο μορφότυπο backup υποστηρίζει την αποθήκευση διαφορετικών χρηστών και " "προφίλ στην ίδια τοποθεσία. Επιθυμείτε την ίδια τοποθεσία και για τα δύο " "προφίλ; \n" "\n" "(Το πρόγραμμα θα μπορεί να κάνει τη διαφοροποίηση μεταξύ των δύο)" #: ../../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:918 #, python-format msgid "" "%(snapshots_left)s\n" "of profile %(profile_id)s are not moved to their new location\n" "Do 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" "\n" "If not Back In Time will restore former settings for this profile, however " "cannot continue taking snapshots" msgstr "" #: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" "Back In Time cannot continue taking new snapshots.\n" "\n" "You can manually move the snapshots, \n" "if you are done restart Back In Time to proceed" msgstr "" "Οι προγενέστερες ρυθμίσεις του προφίλ %s αποκαταστάθηκαν.\n" "Το Back In Time δεν μπορεί αν συνεχίσει να λαμβάνει στιγμιότυπα.\n" "\n" "Μπορείτε να μετακινήσετε χειροκίνητα τα στιγμιότυπα, \n" "εάν είστε έτοιμοι επανεκκινήστε στο Back in Time για αν συνεχίσετε" #: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" msgstr "" "Η ανανέωση ολοκληρώθηκε !\n" "\n" "Το Back In Time θα ξαναρχίσει να λαμβάνει στιγμιότυπα σύμφωνα με τον " "προγραμματισμό." #: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" "\n" "If 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" "\n" "If you do not, you will be asked again next time you start Back In Time." msgstr "" "Είστε σίγουροι ότι δεν επιθυμείτε τη μετακίνηση των παλιών στιγμιοτύπων;\n" "\n" "\n" "Εάν δεν την επιθυμείτε, δεν θα ερωτηθείτε ξανά την επόμενη φορά, το Back In " "Time θα ξαναρχίσει να λαμβάνει στιγμιότυπα, αλλά η έξυπνη-αφαίρεση δε θα " "λαμβάνει πλέον υπόψη τα παλιά σας στιγμιότυπα!\n" "\n" "Εάν επιθυμείτε τη μετακίνηση, θα ερωτηθείτε ξανά την επόμενη φορά που θα " "εκκινήσετε το Back In Time." #: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "" "Το Back In Time θα ξαναρχίσει να λαμβάνει στιγμιότυπα σύμφωνα με τον " "προγραμματισμό" #: ../../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 δεν μπορεί να λαμβάνει νέα στιγμιότυπα. \n" "Επανεκκινήστε το Back In Time για να δείτε ξανά την ερώτηση" #: ../../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 "" "Δε βρέθηκε ο φάκελος στιγμιοτύπων.\n" "Εάν βρίσκεται σε αφαιρούμενη συσκευή, παρακαλώ συνδέστε την." #: ../../common/snapshots.py:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "Αναμονή %s δευτερόλεπτο." msgstr[1] "Αναμονή %s δευτερόλεπτα." #: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "Αποτυχία λήψης στιγμιοτύπου %s !!!" #: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "Οριστικοποίηση" #: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "Αδύνατη η δημιουργία του φακέλου: %s" #: ../../common/snapshots.py:1217 msgid "..." msgstr "..." #: ../../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:1340 #, python-format msgid "Compare with snapshot %s" msgstr "" #: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "" #: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "" #: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "" #: ../../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:1695 ../../common/snapshots.py:1728 #: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "" #: ../../common/snapshots.py:1704 msgid "Remove old snapshots" msgstr "" #: ../../common/snapshots.py:1733 msgid "Try to keep min free space" msgstr "" #: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" #: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "" #: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "" #: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" #: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" #: ../../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:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" #: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" #: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" #: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" #: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" #: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" #: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" #: ../../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 "" #: ../../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 "" #: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" 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 "" #: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 msgid "Help" msgstr "" #: ../../qt4/app.py:122 msgid "Config File Help" msgstr "" #: ../../qt4/app.py:125 msgid "Website" msgstr "" #: ../../qt4/app.py:127 ../../qt4/app.py:982 msgid "Changelog" msgstr "" #: ../../qt4/app.py:129 msgid "FAQ" msgstr "" #: ../../qt4/app.py:131 msgid "Ask a question" msgstr "" #: ../../qt4/app.py:133 msgid "Report a bug" msgstr "" #: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "" #: ../../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 "" #: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 #: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "" #: ../../qt4/app.py:194 msgid "Restore and delete new files" msgstr "" #: ../../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 "" #: ../../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 "" #: ../../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" 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 "" #: ../../qt4/app.py:667 ../../qt4/app.py:703 msgid "Working:" msgstr "" #: ../../qt4/app.py:695 msgid "Done, no backup needed" msgstr "" #: ../../qt4/app.py:707 msgid "Error:" msgstr "" #: ../../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 "" #: ../../qt4/app.py:778 msgid "Root" msgstr "" #: ../../qt4/app.py:779 msgid "Home" msgstr "" #: ../../qt4/app.py:794 msgid "Backup folders" msgstr "" #: ../../qt4/app.py:849 msgid "This is NOT a snapshot but a live view of your local files" msgstr "" #: ../../qt4/app.py:860 ../../qt4/app.py:1476 #, python-format msgid "Last check %s" msgstr "" #: ../../qt4/app.py:928 #, python-format msgid "" "Are you sure you want to remove the snapshot:\n" "%s" msgstr "" #: ../../qt4/app.py:1004 #, python-format msgid "" "Backup local files before overwriting or\n" "removing with trailing '%(suffix)s'." msgstr "" #: ../../qt4/app.py:1010 msgid "" "Are you sure you want to remove all newer files in your original folder?" msgstr "" #: ../../qt4/app.py:1014 msgid "" "WARNING: deleting files in filesystem root could break your whole system!!!" msgstr "" #: ../../qt4/app.py:1016 msgid "Files to be restored:" msgstr "" #: ../../qt4/app.py:1031 msgid "Do you really want to restore this files(s):" msgstr "" #: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "" #: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "" #: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "" #: ../../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 "" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 #: ../../qt4/settingsdialog.py:657 msgid "Errors" msgstr "" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 msgid "Changes" msgstr "" #: ../../qt4/logviewdialog.py:92 msgid "Informations" msgstr "" #: ../../qt4/logviewdialog.py:101 msgid "[E] Error, [I] Information, [C] Change" msgstr "" #: ../../qt4/logviewdialog.py:104 msgid "decode paths" msgstr "" #: ../../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 "" #: ../../qt4/qt4tools.py:178 msgid "Today" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:68 msgid "Edit" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:145 msgid "Folder" msgstr "" #: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" #: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "" #: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "" #: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "" #: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" #: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" #: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "" #: ../../qt4/settingsdialog.py:201 msgid "Key File" msgstr "" #: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 #: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "" #: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" #: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" #: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "" #: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 msgid "Full snapshot path: " msgstr "" #: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "" #: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "" #: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "" #: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "" #: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "" #: ../../qt4/settingsdialog.py:339 msgid "" "Run Back In Time repeatedly. This is useful if the computer is not running " "regular." msgstr "" #: ../../qt4/settingsdialog.py:344 msgid "Every:" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "" #: ../../qt4/settingsdialog.py:381 msgid "Include files and folders" msgstr "" #: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "" #: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "" #: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:425 msgid "Exclude patterns, files or folders" msgstr "" #: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "" #: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "" #: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" #: ../../qt4/settingsdialog.py:551 msgid "Run in background on remote Host." msgstr "" #: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "" #: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "" #: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "" #: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "" #: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "" #: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "" #: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "" #: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "" #: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "" #: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "" #: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "" #: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "" #: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" 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 "" #: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "" #: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "" #: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "" #: ../../qt4/settingsdialog.py:634 msgid "" "- snapshots are not read-only\n" "- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "" #: ../../qt4/settingsdialog.py:656 msgid "None" msgstr "" #: ../../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 "" #: ../../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 "" #: ../../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 "" #: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" #: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "" #: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "" #: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute 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 "" #: ../../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 "" #: ../../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 "" #: ../../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 "" #: ../../qt4/snapshotsdialog.py:106 msgid "List only different snapshots" msgstr "" #: ../../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 "" #: ../../qt4/snapshotsdialog.py:148 msgid "Select All" msgstr "" #: ../../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 "" #: ../../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 "" backintime-1.1.12/common/po/bs.po0000664000175000017500000010471312644767576016130 0ustar germargermar# Bosnian translation for backintime # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the backintime package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \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" "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: 2016-01-11 17:52+0000\n" "X-Generator: Launchpad (build 17881)\n" #: ../../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:77 msgid "At every boot/reboot" msgstr "" #: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Svakih 5 minuta" #: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Svakih 10 minuta" #: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "" #: ../../common/config.py:81 msgid "Every hour" msgstr "" #: ../../common/config.py:82 msgid "Every 2 hours" msgstr "" #: ../../common/config.py:83 msgid "Every 4 hours" msgstr "" #: ../../common/config.py:84 msgid "Every 6 hours" msgstr "" #: ../../common/config.py:85 msgid "Every 12 hours" msgstr "" #: ../../common/config.py:86 msgid "Custom Hours" msgstr "" #: ../../common/config.py:87 msgid "Every Day" msgstr "Svaki dan" #: ../../common/config.py:88 msgid "Repeatedly (anacron)" msgstr "" #: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "" #: ../../common/config.py:90 msgid "Every Week" msgstr "Svake sedmice" #: ../../common/config.py:91 msgid "Every Month" msgstr "Svaki mjesec" #: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Dan(i)" #: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Sedmica(e)" #: ../../common/config.py:97 msgid "Year(s)" msgstr "Godina(e)" #: ../../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:129 msgid "Local" msgstr "" #: ../../common/config.py:130 msgid "SSH" msgstr "" #: ../../common/config.py:130 ../../common/config.py:132 #: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "" #: ../../common/config.py:131 msgid "Local encrypted" msgstr "" #: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "" #: ../../common/config.py:132 msgid "SSH encrypted" msgstr "" #: ../../common/config.py:135 msgid "Default" msgstr "" #: ../../common/config.py:136 msgid "AES128-CTR" msgstr "" #: ../../common/config.py:137 msgid "AES192-CTR" msgstr "" #: ../../common/config.py:138 msgid "AES256-CTR" msgstr "" #: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "" #: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "" #: ../../common/config.py:141 msgid "AES128-CBC" msgstr "" #: ../../common/config.py:142 msgid "3DES-CBC" msgstr "" #: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "" #: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "" #: ../../common/config.py:145 msgid "AES192-CBC" msgstr "" #: ../../common/config.py:146 msgid "AES256-CBC" msgstr "" #: ../../common/config.py:147 msgid "ARCFOUR" msgstr "" #: ../../common/config.py:153 msgid "Main profile" msgstr "Glavni profil!" #: ../../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:289 msgid "Snapshots folder is not valid !" msgstr "Folder za slike zaslona nije validan !" #: ../../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:307 msgid "You can't include backup folder !" msgstr "Ne možeš dodati folder rezerve !" #: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "" #: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s nije direktorij !" #: ../../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: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" "If not you should disable all automatic backups." msgstr "" #: ../../common/config.py:1411 msgid "Failed to write new crontab." msgstr "" #: ../../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/config.py:1517 #, python-format msgid "Schedule udev doesn't work with mode %s" msgstr "" #: ../../common/config.py:1526 #, python-format msgid "Couldn't find UUID for \"%s\"" msgstr "" #: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" "\n" "%(error)s" msgstr "" #: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "" #: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "" #: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" #: ../../common/encfstools.py:171 msgid "Cancel" msgstr "" #: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "" #: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "" #: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" #: ../../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 "" #: ../../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:512 ../../common/snapshots.py:1131 #: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "" #: ../../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:259 #, python-format msgid "mountpoint %s not empty." msgstr "" #: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" #: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" #: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Sad" #: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "" #: ../../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:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "" #: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "" #: ../../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:868 #, python-format msgid "" "%s profiles found. \n" "\n" "The 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)" msgstr "" #: ../../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:918 #, python-format msgid "" "%(snapshots_left)s\n" "of profile %(profile_id)s are not moved to their new location\n" "Do 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" "\n" "If not Back In Time will restore former settings for this profile, however " "cannot continue taking snapshots" msgstr "" #: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" "Back In Time cannot continue taking new snapshots.\n" "\n" "You can manually move the snapshots, \n" "if you are done restart Back In Time to proceed" msgstr "" #: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" msgstr "" #: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" "\n" "If 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" "\n" "If you do not, you will be asked again next time you start Back In Time." msgstr "" #: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "" #: ../../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: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:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "" msgstr[1] "" #: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "" #: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "" #: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "Nemoguće kreirati direktorij: %s" #: ../../common/snapshots.py:1217 msgid "..." msgstr "..." #: ../../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:1340 #, python-format msgid "Compare with snapshot %s" msgstr "" #: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "" #: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "" #: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "Spremi dozvole ..." #: ../../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:1695 ../../common/snapshots.py:1728 #: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "Pametno brisanje" #: ../../common/snapshots.py:1704 msgid "Remove old snapshots" msgstr "" #: ../../common/snapshots.py:1733 msgid "Try to keep min free space" msgstr "" #: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" #: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "" #: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "" #: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" #: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" #: ../../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:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" #: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" #: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" #: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" #: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" #: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" #: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" #: ../../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 "" #: ../../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 "" #: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" 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 "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ć" #: ../../qt4/app.py:122 msgid "Config File Help" msgstr "" #: ../../qt4/app.py:125 msgid "Website" msgstr "" #: ../../qt4/app.py:127 ../../qt4/app.py:982 msgid "Changelog" msgstr "" #: ../../qt4/app.py:129 msgid "FAQ" msgstr "" #: ../../qt4/app.py:131 msgid "Ask a question" msgstr "" #: ../../qt4/app.py:133 msgid "Report a bug" msgstr "" #: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "O" #: ../../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" #: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 #: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "" #: ../../qt4/app.py:194 msgid "Restore and delete new files" msgstr "" #: ../../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 "" #: ../../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 "Prečice" #: ../../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" 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 "" #: ../../qt4/app.py:667 ../../qt4/app.py:703 msgid "Working:" msgstr "" #: ../../qt4/app.py:695 msgid "Done, no backup needed" msgstr "" #: ../../qt4/app.py:707 msgid "Error:" msgstr "" #: ../../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" #: ../../qt4/app.py:778 msgid "Root" msgstr "Korijen" #: ../../qt4/app.py:779 msgid "Home" msgstr "" #: ../../qt4/app.py:794 msgid "Backup folders" msgstr "" #: ../../qt4/app.py:849 msgid "This is NOT a snapshot but a live view of your local files" msgstr "" #: ../../qt4/app.py:860 ../../qt4/app.py:1476 #, python-format msgid "Last check %s" msgstr "" #: ../../qt4/app.py:928 #, python-format msgid "" "Are you sure you want to remove the snapshot:\n" "%s" msgstr "" #: ../../qt4/app.py:1004 #, python-format msgid "" "Backup local files before overwriting or\n" "removing with trailing '%(suffix)s'." msgstr "" #: ../../qt4/app.py:1010 msgid "" "Are you sure you want to remove all newer files in your original folder?" msgstr "" #: ../../qt4/app.py:1014 msgid "" "WARNING: deleting files in filesystem root could break your whole system!!!" msgstr "" #: ../../qt4/app.py:1016 msgid "Files to be restored:" msgstr "" #: ../../qt4/app.py:1031 msgid "Do you really want to restore this files(s):" msgstr "" #: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "" #: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "" #: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "Pogledaj trenutni sadržaj diska" #: ../../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 "" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 #: ../../qt4/settingsdialog.py:657 msgid "Errors" msgstr "" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 msgid "Changes" msgstr "" #: ../../qt4/logviewdialog.py:92 msgid "Informations" msgstr "" #: ../../qt4/logviewdialog.py:101 msgid "[E] Error, [I] Information, [C] Change" msgstr "" #: ../../qt4/logviewdialog.py:104 msgid "decode paths" msgstr "" #: ../../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 "" #: ../../qt4/qt4tools.py:178 msgid "Today" msgstr "Danas" #: ../../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 "" #: ../../qt4/settingsdialog.py:68 msgid "Edit" msgstr "" #: ../../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 "Opšte" #: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:145 msgid "Folder" msgstr "" #: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" #: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "" #: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "" #: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "" #: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" #: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" #: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "" #: ../../qt4/settingsdialog.py:201 msgid "Key File" msgstr "" #: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 #: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "" #: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" #: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" #: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "" #: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 msgid "Full snapshot path: " msgstr "" #: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "" #: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "" #: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "" #: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "" #: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "" #: ../../qt4/settingsdialog.py:339 msgid "" "Run Back In Time repeatedly. This is useful if the computer is not running " "regular." msgstr "" #: ../../qt4/settingsdialog.py:344 msgid "Every:" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Uključi" #: ../../qt4/settingsdialog.py:381 msgid "Include files and folders" msgstr "" #: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "Dodaje datoteku" #: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Dodaj direktorij" #: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Isključi" #: ../../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 "" #: ../../qt4/settingsdialog.py:425 msgid "Exclude patterns, files or folders" msgstr "" #: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "" #: ../../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" #: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "Starije od:" #: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "Ako je sloboni prostor manji od:" #: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" #: ../../qt4/settingsdialog.py:551 msgid "Run in background on remote Host." msgstr "" #: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "" #: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "" #: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "" #: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "" #: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "" #: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "" #: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "" #: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "" #: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "" #: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Opcije" #: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Uključi obavijesti" #: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "" #: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" 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 "" #: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "" #: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "" #: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "" #: ../../qt4/settingsdialog.py:634 msgid "" "- snapshots are not read-only\n" "- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "" #: ../../qt4/settingsdialog.py:656 msgid "None" msgstr "" #: ../../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 "" #: ../../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 "" #: ../../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 "" #: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" #: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "" #: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "" #: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute 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 "" #: ../../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 "" #: ../../qt4/settingsdialog.py:1545 msgid "Include folder" msgstr "Uključi direktorij" #: ../../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 "" #: ../../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 "" #: ../../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 "" #: ../../qt4/snapshotsdialog.py:148 msgid "Select All" msgstr "" #: ../../qt4/snapshotsdialog.py:161 msgid "Diff" msgstr "" #: ../../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 "" "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 "" backintime-1.1.12/common/po/cs.po0000664000175000017500000014341112644767576016127 0ustar germargermar# Czech translation for backintime # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the backintime package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \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: 2016-01-11 17:52+0000\n" "X-Generator: Launchpad (build 17881)\n" #: ../../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 "Vypnuto" #: ../../common/config.py:77 msgid "At every boot/reboot" msgstr "Při každém startu/restartu" #: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Každých 5 minut" #: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Každých 10 minut" #: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "Každých 30 minut" #: ../../common/config.py:81 msgid "Every hour" msgstr "Každou hodinu" #: ../../common/config.py:82 msgid "Every 2 hours" msgstr "Každé 2 hodiny" #: ../../common/config.py:83 msgid "Every 4 hours" msgstr "Každé 4 hodiny" #: ../../common/config.py:84 msgid "Every 6 hours" msgstr "Každých 6 hodin" #: ../../common/config.py:85 msgid "Every 12 hours" msgstr "Každých 12 hodin" #: ../../common/config.py:86 msgid "Custom Hours" msgstr "Vlastní interval" #: ../../common/config.py:87 msgid "Every Day" msgstr "Každý den" #: ../../common/config.py:88 msgid "Repeatedly (anacron)" msgstr "Opakovaně (anacron)" #: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "Při připojení (flash)disku (udev)" #: ../../common/config.py:90 msgid "Every Week" msgstr "Každý týden" #: ../../common/config.py:91 msgid "Every Month" msgstr "Každý měsíc" #: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Dnů" #: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Týdnů" #: ../../common/config.py:97 msgid "Year(s)" msgstr "Let" #: ../../common/config.py:101 msgid "Hour(s)" msgstr "Hodin" #: ../../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:129 msgid "Local" msgstr "Místní" #: ../../common/config.py:130 msgid "SSH" msgstr "Vzdálené (SSH)" #: ../../common/config.py:130 ../../common/config.py:132 #: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "Soukromá část SSH klíče" #: ../../common/config.py:131 msgid "Local encrypted" msgstr "Místní šifrované" #: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "Šifrování" #: ../../common/config.py:132 msgid "SSH encrypted" msgstr "Vzdálené (SSH) šifrované" #: ../../common/config.py:135 msgid "Default" msgstr "Výchozí" #: ../../common/config.py:136 msgid "AES128-CTR" msgstr "" #: ../../common/config.py:137 msgid "AES192-CTR" msgstr "" #: ../../common/config.py:138 msgid "AES256-CTR" msgstr "" #: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "" #: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "" #: ../../common/config.py:141 msgid "AES128-CBC" msgstr "" #: ../../common/config.py:142 msgid "3DES-CBC" msgstr "" #: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "" #: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "" #: ../../common/config.py:145 msgid "AES192-CBC" msgstr "" #: ../../common/config.py:146 msgid "AES256-CBC" msgstr "" #: ../../common/config.py:147 msgid "ARCFOUR" msgstr "" #: ../../common/config.py:153 msgid "Main profile" msgstr "Hlavní profil" #: ../../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:289 msgid "Snapshots folder is not valid !" msgstr "Složka zachycených stavů není platná!" #: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "Vyberte alespoň jednu složku, která má být zálohovaná!" #: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "" "Složku se zálohami nelze zahrnout mezi zálohované položky (zacyklení)!" #: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "" "Podsložku složky se zálohami nelze zahrnout mezi zálohované položky " "(zacyklení)!" #: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s není složka!" #: ../../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 "" "Nedaří se zapisovat do: %s\n" "Máte zde oprávnění k zápisu?" #: ../../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 "" "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: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 "" "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:408 ../../qt4/settingsdialog.py:815 msgid "Copy links (dereference symbolic links)" msgstr "Kopírovat cíle odkazů (vyřadí symbolické odkazy)" #: ../../common/config.py:409 ../../qt4/settingsdialog.py:669 msgid "Expert Options" msgstr "Pokročilé předvolby" #: ../../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:1407 msgid "" "Can't find crontab.\n" "Are you sure cron is installed ?\n" "If not you should disable all automatic backups." msgstr "" "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:1411 msgid "Failed to write new crontab." msgstr "Nezdařilo se zapsat novou úlohu (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 "" "Nelze nainstalovat Udev pravidlo pro profil %(profile_id)s. Služba DBus " "'%(dbus_interface)s' nebyla k dispozici" #: ../../common/config.py:1517 #, python-format 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/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:104 #, python-format msgid "" "Can't mount '%(command)s':\n" "\n" "%(error)s" msgstr "" "Nelze připojit %(command)s:\n" "\n" "%(error)s" #: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "Nelze odpojit souborový systém encfs %s" #: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "Nastavení pro šifrovanou složku nebylo nalezeno." #: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" "\n" "Vytvořit novou šifrovanou složku?" #: ../../common/encfstools.py:171 msgid "Cancel" msgstr "Storno" #: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "Potvrďte heslo" #: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "Zadání hesla se neshodují" #: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" "Podporu pro encfs nelze nalézt. Nainstalujte příslušný balíček, např.: apt-" "get install encfs" #: ../../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 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:211 msgid "" "encfs version 1.7.2 and before has a bug with option --reverse. Please " "update encfs" msgstr "" "Implementace encfs verze 1.7.2 a starší obsahují chybu ve volbě --reverse . " "Aktualizujte encfs" #: ../../common/encfstools.py:512 ../../common/snapshots.py:1131 #: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "Pořídit zachycený stav" #: ../../common/mount.py:204 #, python-format msgid "" "Hash collision occurred in hash_id %s. Incrementing global value " "hash_collision and try again." msgstr "" "Nastala kolize otisku v hash_id %s. Zvyšte celkovou hodnotu hash_collision a " "zkuste to znovu." #: ../../common/mount.py:259 #, python-format msgid "mountpoint %s not empty." msgstr "Přípojný bod %s není prázdný." #: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "Vypršel časový limit zámku procesu připojování (mount)" #: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "Profil %(profile)s: Zadejte heslo pro %(mode)s: " #: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Nyní" #: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "S CHYBAMI!" #: ../../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 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:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "NEZDAŘILO SE" #: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" 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:860 msgid "" "Back In Time changed its backup format.\n" "\n" "Your old snapshots can be moved according to this new format. OK?" msgstr "" "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. Provést?" #: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" "\n" "The 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)" msgstr "" "%s profily nalezeny. \n" "\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" "(Aplikace mezi nimi bude stále schopen rozlišovat)" #: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" msgstr "" "Nebyly nalezeny žádné profily. Nejprve bude třeba je aktualizovat - " "restartujte aplikaci Back in Time." #: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" "of profile %(profile_id)s are not moved to their new location\n" "Do 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" "\n" "If not Back In Time will restore former settings for this profile, however " "cannot continue taking snapshots" msgstr "" "%(snapshots_left)s\n" "profilu %(profile_id)s nejsou přesunuty do jejich nového umístění\n" "Chcete pokračovat?\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 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:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" "Back In Time cannot continue taking new snapshots.\n" "\n" "You can manually move the snapshots, \n" "if you are done restart Back In Time to proceed" msgstr "" "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" "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:936 msgid "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" msgstr "" "Aktualizace proběhla úspěšně!\n" "\n" "Aplikace Back In Time tak bude nadále pořizovat zachycené stavy dle plánu" #: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" "\n" "If 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" "\n" "If you do not, you will be asked again next time you start Back In Time." msgstr "" "Opravdu nechcete staré zachycené stavy přesunout?\n" "\n" "\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 staré zachycené stavy přesunout nechcete, aplikace se při příštím " "spuštění opět dotáže." #: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "Back in Time bude opět pořizovat zachycené stavy dle plánu" #: ../../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 "" "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: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 zachycenými stavy.\n" "Pokud je umístěna na vyjímatelném zařízení, připojte jej." #: ../../common/snapshots.py:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "Čekání %s sekundu." msgstr[1] "Čekání %s sekundy." msgstr[2] "Čekání %s sekund." #: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "Pořízení zachyceného stavu %s se nezdařilo!!!" #: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "Dokončování" #: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "Nelze vytvořit složku: %s" #: ../../common/snapshots.py:1217 msgid "..." msgstr "…" #: ../../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 "Nelze odstranit složku: %s" #: ../../common/snapshots.py:1340 #, python-format msgid "Compare with snapshot %s" msgstr "Porovnat se zachyceným stavem %s" #: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "Vytvořit pevné odkazy" #: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "Uložit soubor s nastaveními…" #: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "Uložit přístupová práva…" #: ../../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:1695 ../../common/snapshots.py:1728 #: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "Chytré odstranění" #: ../../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žit se zachovat neobsazený prostor alespoň" #: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" 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:128 #, python-format msgid "Can't mount %s" msgstr "%s se nedaří připojit" #: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "Souborový systém sshfs %s se nedaří odpojit" #: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" "Nelze odemknout soukromou část ssh klíče. Chybné heslo nebo heslo není k " "dispozici pro plánovač cron." #: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" "Podpora pro souborový systém sshfs nebyla nalezena. Nainstalujte např.: apt-" "get install sshfs" #: ../../common/sshtools.py:278 #, python-format msgid "" "Password-less authentication for %(user)s@%(host)s failed. Look at 'man " "backintime' for further instructions." msgstr "" "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:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" "Použití šifry %(cipher)s se na stroji %(host)s nezdařilo:\n" "%(err)s" #: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "%s nebyl nalezen v souboru ssh_known_hosts." #: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" "Vzdálené umístění existuje, ale není to složka:\n" " %s" #: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" "Do vzdáleného umístění nelze zapisovat:\n" " %s" #: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" "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:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" "Vzdálené umístění nelze vytvořit:\n" " %s" #: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" "Zkouška nástrojem ping %s nedopadla úspěšně. Stroj je nedostupný a nebo je " "chybná adresa." #: ../../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ý stroj %(host)s nepodporuje %(command)s:\n" "%(err)s\n" "Další pokyny naleznete v manuálové stránce aplikace (man backintime)" #: ../../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 "" "Kontrolní příkazy na stroji %(host)s vrátily neznámou chybu:\n" "%(err)s\n" "Další pokyny naleznete v manuálové stránce aplikace (man backintime)" #: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "Na vzdáleném stroji %s nejsou podporovány pevné odkazy" #: ../../qt4/app.py:81 msgid "Refresh snapshots list" msgstr "Znovu načíst seznam zachycených stavů" #: ../../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" #: ../../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ánky projektu" #: ../../qt4/app.py:127 ../../qt4/app.py:982 msgid "Changelog" msgstr "Změny provedené v aplikaci" #: ../../qt4/app.py:129 msgid "FAQ" msgstr "Často kladené dotazy (FAQ)" #: ../../qt4/app.py:131 msgid "Ask a question" msgstr "Položit dotaz" #: ../../qt4/app.py:133 msgid "Report a bug" msgstr "Nahlásit chybu / podnět pro vylepšení" #: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "O aplikaci" #: ../../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" #: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 #: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "Obnovit do…" #: ../../qt4/app.py:194 msgid "Restore and delete new files" msgstr "Obnovit a smazat přitom nové soubory" #: ../../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 "" "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" #: ../../qt4/app.py:224 msgid "View" msgstr "Zobrazit" #: ../../qt4/app.py:277 msgid "Shortcuts" msgstr "Klávesové zkratky" #: ../../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í?" #: ../../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 zachycenými stavy nebyla nalezena.\n" "Pokud se nachází na vyjímatelném médiu, připojte jej a stiskněte OK" #: ../../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?" #: ../../qt4/app.py:667 ../../qt4/app.py:703 msgid "Working:" msgstr "Zpracovává se:" #: ../../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:" #: ../../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 "Celkové" #: ../../qt4/app.py:778 msgid "Root" msgstr "Kořen" #: ../../qt4/app.py:779 msgid "Home" msgstr "Domovská složka" #: ../../qt4/app.py:794 msgid "Backup folders" msgstr "Složky pro zálohu" #: ../../qt4/app.py:849 msgid "This is NOT a snapshot but a live view of your local files" msgstr "" "Toto NENÍ zachycený stav, ale pohled přímo do stávajících místních souborů" #: ../../qt4/app.py:860 ../../qt4/app.py:1476 #, python-format msgid "Last check %s" msgstr "Minulá kontrola %s" #: ../../qt4/app.py:928 #, python-format msgid "" "Are you sure you want to remove the snapshot:\n" "%s" msgstr "" "Opravdu chcete odstranit zachycený stav:\n" "%s" #: ../../qt4/app.py:1004 #, python-format 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." #: ../../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?" #: ../../qt4/app.py:1014 msgid "" "WARNING: deleting files in filesystem root could break your whole system!!!" msgstr "" "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!!!" #: ../../qt4/app.py:1016 msgid "Files to be restored:" msgstr "Soubory k obnovení:" #: ../../qt4/app.py:1031 msgid "Do you really want to restore this files(s):" msgstr "Opravdu chcete obnovit tyto soubory? :" #: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "Zachycený stav: %s" #: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "Zobrazit zachycený stav vytvořený k %s" #: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "Zobrazit stávající data" #: ../../qt4/app.py:1268 #, python-format msgid "Restore '%s'" msgstr "Obnovit %s" #: ../../qt4/app.py:1269 #, python-format msgid "Restore '%s' to ..." msgstr "Obnovit %s na…" #: ../../qt4/app.py:1270 #, python-format msgid "Restore '%s' and delete new files" msgstr "Obnovit %s a smazat nové soubory" #: ../../qt4/app.py:1368 ../../qt4/app.py:1385 msgid "Authors" msgstr "Autoři" #: ../../qt4/app.py:1369 ../../qt4/app.py:1388 msgid "Translations" msgstr "Překlady" #: ../../qt4/app.py:1370 ../../qt4/app.py:1391 msgid "License" msgstr "Licence" #: ../../qt4/logviewdialog.py:49 msgid "Last Log View" msgstr "Zobrazení nedávných událostí" #: ../../qt4/logviewdialog.py:51 msgid "Snapshot Log View" msgstr "Zobrazení událostí pořízení zachyceného stavu" #: ../../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 "Filtr:" #: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 msgid "All" msgstr "Vše" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 #: ../../qt4/settingsdialog.py:657 msgid "Errors" msgstr "Chyby" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 msgid "Changes" msgstr "Změny" #: ../../qt4/logviewdialog.py:92 msgid "Informations" msgstr "Informace" #: ../../qt4/logviewdialog.py:101 msgid "[E] Error, [I] Information, [C] Change" msgstr "[E] Chyba, [I] Informace, [C] Změna" #: ../../qt4/logviewdialog.py:104 msgid "decode paths" msgstr "dekódovat popisy umístění" #: ../../qt4/messagebox.py:56 msgid "Error" msgstr "Chyba" #: ../../qt4/messagebox.py:62 ../../qt4/messagebox.py:68 msgid "Question" msgstr "Otázka" #: ../../qt4/qt4systrayicon.py:69 msgid "Start BackInTime" msgstr "Spustit BackInTime" #: ../../qt4/qt4systrayicon.py:124 msgid "Working..." msgstr "Zpracování…" #: ../../qt4/qt4tools.py:178 msgid "Today" msgstr "Dnes" #: ../../qt4/qt4tools.py:183 msgid "Yesterday" msgstr "Včera" #: ../../qt4/qt4tools.py:188 msgid "This week" msgstr "Tento týden" #: ../../qt4/qt4tools.py:193 msgid "Last week" msgstr "Minulý týden" #: ../../qt4/restoredialog.py:75 msgid "Show full Log" msgstr "Zobrazit úplný záznam událostí" #: ../../qt4/settingsdialog.py:68 msgid "Edit" msgstr "Upravit" #: ../../qt4/settingsdialog.py:73 msgid "Modify for Full System Backup" msgstr "" #: ../../qt4/settingsdialog.py:77 ../../qt4/settingsdialog.py:451 msgid "Add" msgstr "Přidat" #: ../../qt4/settingsdialog.py:81 ../../qt4/settingsdialog.py:408 #: ../../qt4/settingsdialog.py:467 msgid "Remove" msgstr "Odebrat" #: ../../qt4/settingsdialog.py:96 msgid "General" msgstr "Obecné" #: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "Režim:" #: ../../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 "Kam ukládat zachycené stavy" #: ../../qt4/settingsdialog.py:145 msgid "Folder" msgstr "Složka" #: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "Nastavení SSH" #: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "Stroj:" #: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "Port:" #: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "Uživatel:" #: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "Umístění:" #: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "Šifra:" #: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "Soukromá část klíče:" #: ../../qt4/settingsdialog.py:201 msgid "Key File" msgstr "Soubor s klíčem" #: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 #: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "Heslo pro" #: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "Uložit heslo do klíčenky" #: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" 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)" #: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "Pokročilé" #: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 msgid "Full snapshot path: " msgstr "Úplný popis umístění zachyceného stavu: " #: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "Plán" #: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "Den:" #: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "Pracovní den" #: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "Hodina:" #: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "Hodiny:" #: ../../qt4/settingsdialog.py:339 msgid "" "Run Back In Time repeatedly. This is useful if the computer is not running " "regular." msgstr "" "Spouštět aplikaci Back In Time opakovaně. Užitečné v případě, že počítač " "není zapínán pravidelně." #: ../../qt4/settingsdialog.py:344 msgid "Every:" msgstr "Každý:" #: ../../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 "" "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)." #: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Zahrnout" #: ../../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" #: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Přidat složku" #: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Vynechat" #: ../../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 "" "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" #: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" 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." #: ../../qt4/settingsdialog.py:493 msgid "Auto-remove" msgstr "Automatické odstranění" #: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "Starší než:" #: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "Pokud zbývá volného místa méně než:" #: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" 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í." #: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "Ponechat všechny zachycené stavy za minulých" #: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "dnů" #: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "Ponechat jeden zachycený stav z dne za minulých" #: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "Ponechat jeden zachycený stav z týdne za minulých" #: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "týdnů" #: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "Ponechat jeden zachycený stav z měsíce za minulých" #: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "měsíců" #: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "Ponechat jeden zachycený stav z roku za všechna léta" #: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "Neodstraňovat ty zachycené stavy, které uživatel nějak nazval" #: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Předvolby" #: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Zapnout oznamování" #: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "Vypnout pořizování zachycených stavů při provozu na akumulátor" #: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" msgstr "Údaje o stavu napájení nejsou dispozici" #: ../../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ášť." #: ../../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 i v případě výskytu chyb (zachovat neúplné zachycené stavy)" #: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "Změny zjišťovat pomocí kontrolního součtu (přesnější)" #: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "Úplný režim rsync. Může být rychlejší, ale:" #: ../../qt4/settingsdialog.py:634 msgid "" "- snapshots are not read-only\n" "- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" "- 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." #: ../../qt4/settingsdialog.py:644 msgid "Check for changes (don't take a new snapshot if nothing changed)" msgstr "" "Zjišťovat změny (nevytvářet nový zachycený stav, pokud se nic nezměnilo)" #: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "Podrobnost zaznamenávání událostí (log):" #: ../../qt4/settingsdialog.py:656 msgid "None" msgstr "Žádné" #: ../../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 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)" #: ../../qt4/settingsdialog.py:687 ../../qt4/settingsdialog.py:702 #: ../../qt4/settingsdialog.py:716 msgid "on remote host" msgstr "na vzdáleném stroji" #: ../../qt4/settingsdialog.py:690 msgid "Run 'ionice':" msgstr "Spustit s nižší prioritou na vst./výst. (ionice):" #: ../../qt4/settingsdialog.py:699 msgid "when taking a manual snapshot" msgstr "při ručně spuštěném pořízení zachyceného stavu" #: ../../qt4/settingsdialog.py:706 msgid "Run 'rsync' with 'nocache':" msgstr "Spustit nástroj rsync s parametrem nocache:" #: ../../qt4/settingsdialog.py:712 msgid "on local machine" msgstr "na místním stroji" #: ../../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 rychlost přenosu dat nástrojem rsync na: " #: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr " KB/s" #: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "Zachovat ACL seznamy" #: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "Zachovat rozšířené atributy (xattr)" #: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute links)" msgstr "Kopírovat nejisté odkazy (funguje pouze s absolutními odkazy)" #: ../../qt4/settingsdialog.py:834 msgid "Paste additional options to rsync" msgstr "Zadejte další parametry pro nástroj rsync" #: ../../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\"." #: ../../qt4/settingsdialog.py:847 msgid "Add prefix to SSH commands" msgstr "Přidat předponu k SSH příkazům" #: ../../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" #: ../../qt4/settingsdialog.py:858 ../../qt4/settingsdialog.py:1691 msgid "default" msgstr "výchozí" #: ../../qt4/settingsdialog.py:875 msgid "Restore Config" msgstr "Obnovit nastavení" #: ../../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 "Nový profil" #: ../../qt4/settingsdialog.py:938 msgid "Rename profile" msgstr "Přejmenovat profil" #: ../../qt4/settingsdialog.py:952 #, python-format msgid "Are you sure you want to delete the profile \"%s\" ?" msgstr "Opravdu chcete smazat 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 "" "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" #: ../../qt4/settingsdialog.py:1489 msgid "Exclude pattern" msgstr "Zástupné vyjádření vynechaného" #: ../../qt4/settingsdialog.py:1502 msgid "Exclude file" msgstr "Vynechat soubor" #: ../../qt4/settingsdialog.py:1506 msgid "Exclude folder" msgstr "Vynechat složku" #: ../../qt4/settingsdialog.py:1525 msgid "Include file" msgstr "Zahrnout soubor" #: ../../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 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?" #: ../../qt4/settingsdialog.py:1545 msgid "Include folder" msgstr "Zahrnout složku" #: ../../qt4/settingsdialog.py:1572 msgid "Are you sure you want to change snapshots folder ?" msgstr "Opravdu změnit složku se zachycenými stavy?" #: ../../qt4/settingsdialog.py:1688 msgid "enabled" msgstr "zapnuto" #: ../../qt4/settingsdialog.py:1690 msgid "disabled" msgstr "vypnuto" #: ../../qt4/settingsdialog.py:1715 msgid "Restore Settings" msgstr "Obnovit nastavení" #: ../../qt4/settingsdialog.py:1732 msgid " and add your user to group 'fuse'" msgstr " a přidat svůj uživatelský účet do skupiny fuse" #: ../../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 "" "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í" #: ../../qt4/snapshotsdialog.py:49 ../../qt4/snapshotsdialog.py:173 msgid "Diff Options" msgstr "Předvolby nástroje diff" #: ../../qt4/snapshotsdialog.py:56 msgid "Command:" msgstr "Příkaz:" #: ../../qt4/snapshotsdialog.py:60 msgid "Parameters:" msgstr "Parametry:" #: ../../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ší)" #: ../../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ů?" backintime-1.1.12/common/po/zh_TW.po0000664000175000017500000010674612644767576016567 0ustar germargermar# Chinese (Traditional) translation for backintime # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the backintime package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \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" "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: 2016-01-11 17:52+0000\n" "X-Generator: Launchpad (build 17881)\n" #: ../../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:77 msgid "At every boot/reboot" msgstr "" #: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "每五分鐘" #: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "每十分鐘" #: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "" #: ../../common/config.py:81 msgid "Every hour" msgstr "" #: ../../common/config.py:82 msgid "Every 2 hours" msgstr "" #: ../../common/config.py:83 msgid "Every 4 hours" msgstr "" #: ../../common/config.py:84 msgid "Every 6 hours" msgstr "" #: ../../common/config.py:85 msgid "Every 12 hours" msgstr "" #: ../../common/config.py:86 msgid "Custom Hours" msgstr "" #: ../../common/config.py:87 msgid "Every Day" msgstr "每天" #: ../../common/config.py:88 msgid "Repeatedly (anacron)" msgstr "" #: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "" #: ../../common/config.py:90 msgid "Every Week" msgstr "每週" #: ../../common/config.py:91 msgid "Every Month" msgstr "每月" #: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "天" #: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "週" #: ../../common/config.py:97 msgid "Year(s)" msgstr "年" #: ../../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:129 msgid "Local" msgstr "" #: ../../common/config.py:130 msgid "SSH" msgstr "" #: ../../common/config.py:130 ../../common/config.py:132 #: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "" #: ../../common/config.py:131 msgid "Local encrypted" msgstr "" #: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "" #: ../../common/config.py:132 msgid "SSH encrypted" msgstr "" #: ../../common/config.py:135 msgid "Default" msgstr "" #: ../../common/config.py:136 msgid "AES128-CTR" msgstr "" #: ../../common/config.py:137 msgid "AES192-CTR" msgstr "" #: ../../common/config.py:138 msgid "AES256-CTR" msgstr "" #: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "" #: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "" #: ../../common/config.py:141 msgid "AES128-CBC" msgstr "" #: ../../common/config.py:142 msgid "3DES-CBC" msgstr "" #: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "" #: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "" #: ../../common/config.py:145 msgid "AES192-CBC" msgstr "" #: ../../common/config.py:146 msgid "AES256-CBC" msgstr "" #: ../../common/config.py:147 msgid "ARCFOUR" msgstr "" #: ../../common/config.py:153 msgid "Main profile" msgstr "主要設定檔" #: ../../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:289 msgid "Snapshots folder is not valid !" msgstr "快照資料夾不存在!" #: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "必須選擇一個資料夾進行備份" #: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "不能包含備份資料夾" #: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "不能包含備份子目錄" #: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s並不是資料夾!" #: ../../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 "" "不能寫入:%s\n" "請確認是否有寫入權限?" #: ../../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" "If not you should disable all automatic backups." msgstr "" "找不到crontab檔案!\n" "請確認cron是否安裝?\n" "如果沒有的話,你應該停用所有自動備份。" #: ../../common/config.py:1411 msgid "Failed to write new crontab." msgstr "" #: ../../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/config.py:1517 #, python-format msgid "Schedule udev doesn't work with mode %s" msgstr "" #: ../../common/config.py:1526 #, python-format msgid "Couldn't find UUID for \"%s\"" msgstr "" #: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" "\n" "%(error)s" msgstr "" #: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "" #: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "" #: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" #: ../../common/encfstools.py:171 msgid "Cancel" msgstr "" #: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "" #: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "" #: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" #: ../../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 "" #: ../../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:512 ../../common/snapshots.py:1131 #: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "進行快照" #: ../../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:259 #, python-format msgid "mountpoint %s not empty." msgstr "" #: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" #: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" #: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "現在" #: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "" #: ../../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:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "" #: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "" #: ../../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:868 #, python-format msgid "" "%s profiles found. \n" "\n" "The 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)" msgstr "" "%s設定檔存在。\n" "新備份格式支援不同用戶及設定檔存放於相同位置。想要進行這樣的配置?\n" "(程式仍可保持區分)" #: ../../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:918 #, python-format msgid "" "%(snapshots_left)s\n" "of profile %(profile_id)s are not moved to their new location\n" "Do 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" "\n" "If not Back In Time will restore former settings for this profile, however " "cannot continue taking snapshots" msgstr "" #: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" "Back In Time cannot continue taking new snapshots.\n" "\n" "You can manually move the snapshots, \n" "if you are done restart Back In Time to proceed" msgstr "" #: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" msgstr "" #: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" "\n" "If 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" "\n" "If you do not, you will be asked again next time you start Back In Time." msgstr "" #: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "" #: ../../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: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 "" "快照資料夾不存在。\n" "若存在於移動儲存設備,請插入裝置" #: ../../common/snapshots.py:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "等待%s秒。" #: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "快照 %s 執行失敗!!!" #: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "關閉光碟中" #: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "無法新增資料夾:%s" #: ../../common/snapshots.py:1217 msgid "..." msgstr "..." #: ../../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:1340 #, python-format msgid "Compare with snapshot %s" msgstr "比對快照紀錄%s" #: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "建立hard-links" #: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "保留組態檔..." #: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "保留存取權限..." #: ../../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:1695 ../../common/snapshots.py:1728 #: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "智慧移除" #: ../../common/snapshots.py:1704 msgid "Remove old snapshots" msgstr "刪除快照" #: ../../common/snapshots.py:1733 msgid "Try to keep min free space" msgstr "嘗試保留最小剩餘空間" #: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" #: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "" #: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "" #: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" #: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" #: ../../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:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" #: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" #: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" #: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" #: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" #: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" #: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" #: ../../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 "" #: ../../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 "" #: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" 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 "離開" #: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 msgid "Help" msgstr "求助" #: ../../qt4/app.py:122 msgid "Config File Help" msgstr "" #: ../../qt4/app.py:125 msgid "Website" msgstr "網站" #: ../../qt4/app.py:127 ../../qt4/app.py:982 msgid "Changelog" msgstr "" #: ../../qt4/app.py:129 msgid "FAQ" msgstr "" #: ../../qt4/app.py:131 msgid "Ask a question" msgstr "" #: ../../qt4/app.py:133 msgid "Report a bug" msgstr "" #: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "關於" #: ../../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 "還原" #: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 #: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "" #: ../../qt4/app.py:194 msgid "Restore and delete new files" msgstr "" #: ../../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 "" #: ../../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 "快速鍵" #: ../../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" msgstr "" "快照資料夾不存在。\n" "若存在於移動儲存設備,請插入裝置並確認" #: ../../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 "運作中 :" #: ../../qt4/app.py:695 msgid "Done, no backup needed" msgstr "已完成,不需要進行備份" #: ../../qt4/app.py:707 msgid "Error:" msgstr "錯誤:" #: ../../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 "全域設定" #: ../../qt4/app.py:778 msgid "Root" msgstr "主目錄" #: ../../qt4/app.py:779 msgid "Home" msgstr "家目錄" #: ../../qt4/app.py:794 msgid "Backup folders" msgstr "備份資料夾" #: ../../qt4/app.py:849 msgid "This is NOT a snapshot but a live view of your local files" msgstr "" #: ../../qt4/app.py:860 ../../qt4/app.py:1476 #, python-format msgid "Last check %s" msgstr "" #: ../../qt4/app.py:928 #, python-format msgid "" "Are you sure you want to remove the snapshot:\n" "%s" msgstr "" "確認要刪除此快照:\n" "%s" #: ../../qt4/app.py:1004 #, python-format msgid "" "Backup local files before overwriting or\n" "removing with trailing '%(suffix)s'." msgstr "" #: ../../qt4/app.py:1010 msgid "" "Are you sure you want to remove all newer files in your original folder?" msgstr "" #: ../../qt4/app.py:1014 msgid "" "WARNING: deleting files in filesystem root could break your whole system!!!" msgstr "" #: ../../qt4/app.py:1016 msgid "Files to be restored:" msgstr "" #: ../../qt4/app.py:1031 msgid "Do you really want to restore this files(s):" msgstr "" #: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "快照:%s" #: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "檢視於%s完成之快照" #: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "檢視目前磁碟內容" #: ../../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 "" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 #: ../../qt4/settingsdialog.py:657 msgid "Errors" msgstr "" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 msgid "Changes" msgstr "" #: ../../qt4/logviewdialog.py:92 msgid "Informations" msgstr "" #: ../../qt4/logviewdialog.py:101 msgid "[E] Error, [I] Information, [C] Change" msgstr "" #: ../../qt4/logviewdialog.py:104 msgid "decode paths" msgstr "" #: ../../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 "作業中..." #: ../../qt4/qt4tools.py:178 msgid "Today" msgstr "今天" #: ../../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 "" #: ../../qt4/settingsdialog.py:68 msgid "Edit" msgstr "編輯" #: ../../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 "一般" #: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "" #: ../../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 "快照存放位置" #: ../../qt4/settingsdialog.py:145 msgid "Folder" msgstr "" #: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" #: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "" #: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "" #: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "" #: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" #: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" #: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "" #: ../../qt4/settingsdialog.py:201 msgid "Key File" msgstr "" #: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 #: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "" #: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" #: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" #: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "" #: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 msgid "Full snapshot path: " msgstr "" #: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "排程" #: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "" #: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "" #: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "時:" #: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "" #: ../../qt4/settingsdialog.py:339 msgid "" "Run Back In Time repeatedly. This is useful if the computer is not running " "regular." msgstr "" #: ../../qt4/settingsdialog.py:344 msgid "Every:" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "包含" #: ../../qt4/settingsdialog.py:381 msgid "Include files and folders" msgstr "" #: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "新增檔案" #: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "新增資料夾" #: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "不包含" #: ../../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 "" #: ../../qt4/settingsdialog.py:425 msgid "Exclude patterns, files or folders" msgstr "" #: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "" #: ../../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 "自動移除" #: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "時間超過:" #: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "剩餘空間少於:" #: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" #: ../../qt4/settingsdialog.py:551 msgid "Run in background on remote Host." msgstr "" #: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "" #: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "" #: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "" #: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "" #: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "" #: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "" #: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "" #: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "" #: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "不要移除命名的快照" #: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "選項" #: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "開啟通知" #: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "使用電池時停用快照功能" #: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" 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 "" #: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "" #: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "" #: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "" #: ../../qt4/settingsdialog.py:634 msgid "" "- snapshots are not read-only\n" "- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "" #: ../../qt4/settingsdialog.py:656 msgid "None" msgstr "" #: ../../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 "" #: ../../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 "" #: ../../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 "" #: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" #: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "" #: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "" #: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute 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 "" #: ../../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 "比對選項" #: ../../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 "" #: ../../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 "" #: ../../qt4/snapshotsdialog.py:148 msgid "Select All" msgstr "" #: ../../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 "" "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 "" backintime-1.1.12/common/po/jv.po0000664000175000017500000010322412644767576016137 0ustar germargermar# Javanese translation for backintime # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the backintime package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \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" "MIME-Version: 1.0\n" "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: 2016-01-11 17:52+0000\n" "X-Generator: Launchpad (build 17881)\n" #: ../../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:77 msgid "At every boot/reboot" msgstr "" #: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Sak Ben 5 Menit" #: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Sak Ben 10 Menit" #: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "" #: ../../common/config.py:81 msgid "Every hour" msgstr "" #: ../../common/config.py:82 msgid "Every 2 hours" msgstr "" #: ../../common/config.py:83 msgid "Every 4 hours" msgstr "" #: ../../common/config.py:84 msgid "Every 6 hours" msgstr "" #: ../../common/config.py:85 msgid "Every 12 hours" msgstr "" #: ../../common/config.py:86 msgid "Custom Hours" msgstr "" #: ../../common/config.py:87 msgid "Every Day" msgstr "Sak Ben Dino" #: ../../common/config.py:88 msgid "Repeatedly (anacron)" msgstr "" #: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "" #: ../../common/config.py:90 msgid "Every Week" msgstr "Sak Ben Minggu" #: ../../common/config.py:91 msgid "Every Month" msgstr "Sak Ben Wulan" #: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "" #: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "" #: ../../common/config.py:97 msgid "Year(s)" msgstr "" #: ../../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:129 msgid "Local" msgstr "" #: ../../common/config.py:130 msgid "SSH" msgstr "" #: ../../common/config.py:130 ../../common/config.py:132 #: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "" #: ../../common/config.py:131 msgid "Local encrypted" msgstr "" #: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "" #: ../../common/config.py:132 msgid "SSH encrypted" msgstr "" #: ../../common/config.py:135 msgid "Default" msgstr "" #: ../../common/config.py:136 msgid "AES128-CTR" msgstr "" #: ../../common/config.py:137 msgid "AES192-CTR" msgstr "" #: ../../common/config.py:138 msgid "AES256-CTR" msgstr "" #: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "" #: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "" #: ../../common/config.py:141 msgid "AES128-CBC" msgstr "" #: ../../common/config.py:142 msgid "3DES-CBC" msgstr "" #: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "" #: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "" #: ../../common/config.py:145 msgid "AES192-CBC" msgstr "" #: ../../common/config.py:146 msgid "AES256-CBC" msgstr "" #: ../../common/config.py:147 msgid "ARCFOUR" msgstr "" #: ../../common/config.py:153 msgid "Main profile" msgstr "" #: ../../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:289 msgid "Snapshots folder is not valid !" msgstr "" #: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "" #: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "" #: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "" #: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "" #: ../../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: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" "If not you should disable all automatic backups." msgstr "" #: ../../common/config.py:1411 msgid "Failed to write new crontab." msgstr "" #: ../../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/config.py:1517 #, python-format msgid "Schedule udev doesn't work with mode %s" msgstr "" #: ../../common/config.py:1526 #, python-format msgid "Couldn't find UUID for \"%s\"" msgstr "" #: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" "\n" "%(error)s" msgstr "" #: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "" #: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "" #: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" #: ../../common/encfstools.py:171 msgid "Cancel" msgstr "" #: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "" #: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "" #: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" #: ../../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 "" #: ../../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:512 ../../common/snapshots.py:1131 #: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "" #: ../../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:259 #, python-format msgid "mountpoint %s not empty." msgstr "" #: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" #: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" #: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "" #: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "" #: ../../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:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "" #: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "" #: ../../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:868 #, python-format msgid "" "%s profiles found. \n" "\n" "The 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)" msgstr "" #: ../../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:918 #, python-format msgid "" "%(snapshots_left)s\n" "of profile %(profile_id)s are not moved to their new location\n" "Do 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" "\n" "If not Back In Time will restore former settings for this profile, however " "cannot continue taking snapshots" msgstr "" #: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" "Back In Time cannot continue taking new snapshots.\n" "\n" "You can manually move the snapshots, \n" "if you are done restart Back In Time to proceed" msgstr "" #: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" msgstr "" #: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" "\n" "If 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" "\n" "If you do not, you will be asked again next time you start Back In Time." msgstr "" #: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "" #: ../../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: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:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "" msgstr[1] "" #: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "" #: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "" #: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "" #: ../../common/snapshots.py:1217 msgid "..." msgstr "" #: ../../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:1340 #, python-format msgid "Compare with snapshot %s" msgstr "" #: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "" #: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "" #: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "" #: ../../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:1695 ../../common/snapshots.py:1728 #: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "" #: ../../common/snapshots.py:1704 msgid "Remove old snapshots" msgstr "" #: ../../common/snapshots.py:1733 msgid "Try to keep min free space" msgstr "" #: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" #: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "" #: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "" #: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" #: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" #: ../../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:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" #: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" #: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" #: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" #: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" #: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" #: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" #: ../../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 "" #: ../../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 "" #: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" 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 "" #: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 msgid "Help" msgstr "" #: ../../qt4/app.py:122 msgid "Config File Help" msgstr "" #: ../../qt4/app.py:125 msgid "Website" msgstr "" #: ../../qt4/app.py:127 ../../qt4/app.py:982 msgid "Changelog" msgstr "" #: ../../qt4/app.py:129 msgid "FAQ" msgstr "" #: ../../qt4/app.py:131 msgid "Ask a question" msgstr "" #: ../../qt4/app.py:133 msgid "Report a bug" msgstr "" #: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "" #: ../../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 "" #: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 #: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "" #: ../../qt4/app.py:194 msgid "Restore and delete new files" msgstr "" #: ../../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 "" #: ../../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 "" #: ../../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" 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 "" #: ../../qt4/app.py:667 ../../qt4/app.py:703 msgid "Working:" msgstr "" #: ../../qt4/app.py:695 msgid "Done, no backup needed" msgstr "" #: ../../qt4/app.py:707 msgid "Error:" msgstr "" #: ../../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 "" #: ../../qt4/app.py:778 msgid "Root" msgstr "" #: ../../qt4/app.py:779 msgid "Home" msgstr "" #: ../../qt4/app.py:794 msgid "Backup folders" msgstr "" #: ../../qt4/app.py:849 msgid "This is NOT a snapshot but a live view of your local files" msgstr "" #: ../../qt4/app.py:860 ../../qt4/app.py:1476 #, python-format msgid "Last check %s" msgstr "" #: ../../qt4/app.py:928 #, python-format msgid "" "Are you sure you want to remove the snapshot:\n" "%s" msgstr "" #: ../../qt4/app.py:1004 #, python-format msgid "" "Backup local files before overwriting or\n" "removing with trailing '%(suffix)s'." msgstr "" #: ../../qt4/app.py:1010 msgid "" "Are you sure you want to remove all newer files in your original folder?" msgstr "" #: ../../qt4/app.py:1014 msgid "" "WARNING: deleting files in filesystem root could break your whole system!!!" msgstr "" #: ../../qt4/app.py:1016 msgid "Files to be restored:" msgstr "" #: ../../qt4/app.py:1031 msgid "Do you really want to restore this files(s):" msgstr "" #: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "" #: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "" #: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "" #: ../../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 "" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 #: ../../qt4/settingsdialog.py:657 msgid "Errors" msgstr "" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 msgid "Changes" msgstr "" #: ../../qt4/logviewdialog.py:92 msgid "Informations" msgstr "" #: ../../qt4/logviewdialog.py:101 msgid "[E] Error, [I] Information, [C] Change" msgstr "" #: ../../qt4/logviewdialog.py:104 msgid "decode paths" msgstr "" #: ../../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 "" #: ../../qt4/qt4tools.py:178 msgid "Today" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:68 msgid "Edit" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:145 msgid "Folder" msgstr "" #: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" #: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "" #: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "" #: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "" #: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" #: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" #: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "" #: ../../qt4/settingsdialog.py:201 msgid "Key File" msgstr "" #: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 #: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "" #: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" #: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" #: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "" #: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 msgid "Full snapshot path: " msgstr "" #: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "" #: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "" #: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "" #: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "" #: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "" #: ../../qt4/settingsdialog.py:339 msgid "" "Run Back In Time repeatedly. This is useful if the computer is not running " "regular." msgstr "" #: ../../qt4/settingsdialog.py:344 msgid "Every:" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "" #: ../../qt4/settingsdialog.py:381 msgid "Include files and folders" msgstr "" #: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "" #: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "" #: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:425 msgid "Exclude patterns, files or folders" msgstr "" #: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "" #: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "" #: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" #: ../../qt4/settingsdialog.py:551 msgid "Run in background on remote Host." msgstr "" #: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "" #: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "" #: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "" #: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "" #: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "" #: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "" #: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "" #: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "" #: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "" #: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "" #: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "" #: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "" #: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" 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 "" #: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "" #: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "" #: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "" #: ../../qt4/settingsdialog.py:634 msgid "" "- snapshots are not read-only\n" "- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "" #: ../../qt4/settingsdialog.py:656 msgid "None" msgstr "" #: ../../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 "" #: ../../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 "" #: ../../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 "" #: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" #: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "" #: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "" #: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute 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 "" #: ../../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 "" #: ../../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 "" #: ../../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 "" #: ../../qt4/snapshotsdialog.py:106 msgid "List only different snapshots" msgstr "" #: ../../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 "" #: ../../qt4/snapshotsdialog.py:148 msgid "Select All" msgstr "" #: ../../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 "" #: ../../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 "" backintime-1.1.12/common/po/et.po0000664000175000017500000010710012644767576016125 0ustar germargermar# Estonian translation for backintime # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the backintime package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \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: 2016-01-11 17:52+0000\n" "X-Generator: Launchpad (build 17881)\n" #: ../../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:77 msgid "At every boot/reboot" msgstr "Igal käivitamisel/taaskäivitamisel" #: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Iga 5 minuti tagant" #: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Iga 10 minuti tagant" #: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "" #: ../../common/config.py:81 msgid "Every hour" msgstr "" #: ../../common/config.py:82 msgid "Every 2 hours" msgstr "" #: ../../common/config.py:83 msgid "Every 4 hours" msgstr "" #: ../../common/config.py:84 msgid "Every 6 hours" msgstr "" #: ../../common/config.py:85 msgid "Every 12 hours" msgstr "" #: ../../common/config.py:86 msgid "Custom Hours" msgstr "" #: ../../common/config.py:87 msgid "Every Day" msgstr "Iga päev" #: ../../common/config.py:88 msgid "Repeatedly (anacron)" msgstr "" #: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "" #: ../../common/config.py:90 msgid "Every Week" msgstr "Iga nädal" #: ../../common/config.py:91 msgid "Every Month" msgstr "Iga kuu" #: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Päev(a)" #: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Nädal(at)" #: ../../common/config.py:97 msgid "Year(s)" msgstr "Aasta(t)" #: ../../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:129 msgid "Local" msgstr "" #: ../../common/config.py:130 msgid "SSH" msgstr "" #: ../../common/config.py:130 ../../common/config.py:132 #: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "" #: ../../common/config.py:131 msgid "Local encrypted" msgstr "" #: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "" #: ../../common/config.py:132 msgid "SSH encrypted" msgstr "" #: ../../common/config.py:135 msgid "Default" msgstr "" #: ../../common/config.py:136 msgid "AES128-CTR" msgstr "" #: ../../common/config.py:137 msgid "AES192-CTR" msgstr "" #: ../../common/config.py:138 msgid "AES256-CTR" msgstr "" #: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "" #: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "" #: ../../common/config.py:141 msgid "AES128-CBC" msgstr "" #: ../../common/config.py:142 msgid "3DES-CBC" msgstr "" #: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "" #: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "" #: ../../common/config.py:145 msgid "AES192-CBC" msgstr "" #: ../../common/config.py:146 msgid "AES256-CBC" msgstr "" #: ../../common/config.py:147 msgid "ARCFOUR" msgstr "" #: ../../common/config.py:153 msgid "Main profile" msgstr "Peamine profiil" #: ../../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:289 msgid "Snapshots folder is not valid !" msgstr "Tõmmise kataloog ei ole kehtiv!" #: ../../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:307 msgid "You can't include backup folder !" msgstr "Sa ei saa kaasata tagavarakoopia kataloogi ennast!" #: ../../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:371 #, python-format msgid "%s is not a folder !" msgstr "%s ei ole kataloog!" #: ../../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 "" "Ei saa kirjutada: %s\n" "Oled kindel, et sul kirjutamis õigused?" #: ../../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" "If not you should disable all automatic backups." msgstr "" #: ../../common/config.py:1411 msgid "Failed to write new crontab." msgstr "" #: ../../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/config.py:1517 #, python-format msgid "Schedule udev doesn't work with mode %s" msgstr "" #: ../../common/config.py:1526 #, python-format msgid "Couldn't find UUID for \"%s\"" msgstr "" #: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" "\n" "%(error)s" msgstr "" #: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "" #: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "" #: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" #: ../../common/encfstools.py:171 msgid "Cancel" msgstr "" #: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "" #: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "" #: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" #: ../../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 "" #: ../../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:512 ../../common/snapshots.py:1131 #: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "Võta tõmmis" #: ../../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:259 #, python-format msgid "mountpoint %s not empty." msgstr "" #: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" #: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" #: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Nüüd" #: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "VIGATEGA!" #: ../../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:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "EBAÕNNESTUS" #: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "Taastamise õigused:" #: ../../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:868 #, python-format msgid "" "%s profiles found. \n" "\n" "The 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)" msgstr "" #: ../../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:918 #, python-format msgid "" "%(snapshots_left)s\n" "of profile %(profile_id)s are not moved to their new location\n" "Do 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" "\n" "If not Back In Time will restore former settings for this profile, however " "cannot continue taking snapshots" msgstr "" #: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" "Back In Time cannot continue taking new snapshots.\n" "\n" "You can manually move the snapshots, \n" "if you are done restart Back In Time to proceed" msgstr "" #: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" msgstr "" #: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" "\n" "If 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" "\n" "If you do not, you will be asked again next time you start Back In Time." msgstr "" #: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "" #: ../../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: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 "" "Ei leia tagavarakoopia kataloogi.\n" "Kui see on eemaldatav seade palun ühenda see." #: ../../common/snapshots.py:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "" msgstr[1] "" #: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "" #: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "Lõpetan" #: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "Ei saa luua kataloogi: %s" #: ../../common/snapshots.py:1217 msgid "..." msgstr "..." #: ../../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:1340 #, python-format msgid "Compare with snapshot %s" msgstr "Võrdle tõmmisega %s" #: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "Tee kõvad lingid" #: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "Salvesta seade fail ..." #: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "Salvesta õigused ..." #: ../../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:1695 ../../common/snapshots.py:1728 #: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "Tark eemaldamine" #: ../../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:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" #: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "" #: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "" #: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" #: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" #: ../../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:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" #: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" #: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" #: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" #: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" #: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" #: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" #: ../../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 "" #: ../../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 "" #: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "" #: ../../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" #: ../../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" #: ../../qt4/app.py:122 msgid "Config File Help" msgstr "" #: ../../qt4/app.py:125 msgid "Website" msgstr "Veebileht" #: ../../qt4/app.py:127 ../../qt4/app.py:982 msgid "Changelog" msgstr "" #: ../../qt4/app.py:129 msgid "FAQ" msgstr "" #: ../../qt4/app.py:131 msgid "Ask a question" msgstr "" #: ../../qt4/app.py:133 msgid "Report a bug" msgstr "" #: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "Programmist" #: ../../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" #: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 #: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "Taasata ..." #: ../../qt4/app.py:194 msgid "Restore and delete new files" msgstr "" #: ../../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 "" #: ../../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" #: ../../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" msgstr "" "Ei leia tõmmiste kataloogi.\n" "Kui see on eemaldataval seadmel palun ühenda see ja vajuta OK" #: ../../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 "Töötan:" #: ../../qt4/app.py:695 msgid "Done, no backup needed" msgstr "" #: ../../qt4/app.py:707 msgid "Error:" msgstr "Veateade:" #: ../../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" #: ../../qt4/app.py:778 msgid "Root" msgstr "" #: ../../qt4/app.py:779 msgid "Home" msgstr "Kodukataloog" #: ../../qt4/app.py:794 msgid "Backup folders" msgstr "Tagavarakoopia kataloogid" #: ../../qt4/app.py:849 msgid "This is NOT a snapshot but a live view of your local files" msgstr "" #: ../../qt4/app.py:860 ../../qt4/app.py:1476 #, python-format msgid "Last check %s" msgstr "" #: ../../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" #: ../../qt4/app.py:1004 #, python-format msgid "" "Backup local files before overwriting or\n" "removing with trailing '%(suffix)s'." msgstr "" #: ../../qt4/app.py:1010 msgid "" "Are you sure you want to remove all newer files in your original folder?" msgstr "" #: ../../qt4/app.py:1014 msgid "" "WARNING: deleting files in filesystem root could break your whole system!!!" msgstr "" #: ../../qt4/app.py:1016 msgid "Files to be restored:" msgstr "" #: ../../qt4/app.py:1031 msgid "Do you really want to restore this files(s):" msgstr "" #: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "Tõmmis: %s" #: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "Vaata tõmmist, mis on tehtud %s" #: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "Vaata praeguse ketta sisu" #: ../../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 "Profiil:" #: ../../qt4/logviewdialog.py:81 msgid "Filter:" msgstr "Filter:" #: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 msgid "All" msgstr "Kõik" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 #: ../../qt4/settingsdialog.py:657 msgid "Errors" msgstr "Veateated" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 msgid "Changes" msgstr "Muutused" #: ../../qt4/logviewdialog.py:92 msgid "Informations" msgstr "Teave" #: ../../qt4/logviewdialog.py:101 msgid "[E] Error, [I] Information, [C] Change" msgstr "" #: ../../qt4/logviewdialog.py:104 msgid "decode paths" msgstr "" #: ../../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 "Töötan..." #: ../../qt4/qt4tools.py:178 msgid "Today" msgstr "Täna" #: ../../qt4/qt4tools.py:183 msgid "Yesterday" msgstr "Eile" #: ../../qt4/qt4tools.py:188 msgid "This week" msgstr "See nädal" #: ../../qt4/qt4tools.py:193 msgid "Last week" msgstr "Eelmine nädal" #: ../../qt4/restoredialog.py:75 msgid "Show full Log" msgstr "" #: ../../qt4/settingsdialog.py:68 msgid "Edit" msgstr "Muutmine" #: ../../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" #: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "" #: ../../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" #: ../../qt4/settingsdialog.py:145 msgid "Folder" msgstr "" #: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" #: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "Server:" #: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "" #: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "Kasutaja:" #: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" #: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" #: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "" #: ../../qt4/settingsdialog.py:201 msgid "Key File" msgstr "" #: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 #: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "" #: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" #: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" #: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "Põhjalikum" #: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 msgid "Full snapshot path: " msgstr "" #: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "" #: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "Päev:" #: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "Nädalapäev:" #: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "Tund:" #: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "" #: ../../qt4/settingsdialog.py:339 msgid "" "Run Back In Time repeatedly. This is useful if the computer is not running " "regular." msgstr "" #: ../../qt4/settingsdialog.py:344 msgid "Every:" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Kaasa" #: ../../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" #: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Lisa kaust" #: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Jäta välja" #: ../../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 "" #: ../../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:" #: ../../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" #: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "Vanem kui:" #: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "Kui vabaruumi on vähem kui:" #: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" #: ../../qt4/settingsdialog.py:551 msgid "Run in background on remote Host." msgstr "" #: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "" #: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "päev(ad)" #: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "" #: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "" #: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "nädal(ad)" #: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "" #: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "kuu(d)" #: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "" #: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "" #: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Valikud" #: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Luba teated" #: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "" #: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" 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 "" #: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "" #: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "" #: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "" #: ../../qt4/settingsdialog.py:634 msgid "" "- snapshots are not read-only\n" "- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "Logitase:" #: ../../qt4/settingsdialog.py:656 msgid "None" msgstr "Pole" #: ../../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 "" #: ../../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 "" #: ../../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 "" #: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" #: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "" #: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "" #: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute 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 "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 "" #: ../../qt4/settingsdialog.py:1489 msgid "Exclude pattern" msgstr "" #: ../../qt4/settingsdialog.py:1502 msgid "Exclude file" msgstr "Jäta välja fail" #: ../../qt4/settingsdialog.py:1506 msgid "Exclude folder" msgstr "Jäta välja kataloog" #: ../../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 "" #: ../../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?" #: ../../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 "" #: ../../qt4/snapshotsdialog.py:56 msgid "Command:" msgstr "Käsk:" #: ../../qt4/snapshotsdialog.py:60 msgid "Parameters:" msgstr "Parameetrid:" #: ../../qt4/snapshotsdialog.py:64 msgid "Use %1 and %2 for path parameters" msgstr "" #: ../../qt4/snapshotsdialog.py:106 msgid "List only different snapshots" msgstr "" #: ../../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 "" #: ../../qt4/snapshotsdialog.py:148 msgid "Select All" msgstr "" #: ../../qt4/snapshotsdialog.py:161 msgid "Diff" msgstr "Erinevus" #: ../../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" #: ../../qt4/snapshotsdialog.py:333 #, python-format msgid "Command not found: %s" msgstr "Käsku ei leitud: %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 "" backintime-1.1.12/common/po/uk.po0000664000175000017500000012241112644767576016136 0ustar germargermar# Ukrainian translation for backintime # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the backintime package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \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: 2016-01-11 17:52+0000\n" "X-Generator: Launchpad (build 17881)\n" #: ../../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:77 msgid "At every boot/reboot" msgstr "При кожній загрузці/перезагрузці" #: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Кожні 5 хвилин" #: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Кожні 10 хвилин" #: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "" #: ../../common/config.py:81 msgid "Every hour" msgstr "" #: ../../common/config.py:82 msgid "Every 2 hours" msgstr "" #: ../../common/config.py:83 msgid "Every 4 hours" msgstr "" #: ../../common/config.py:84 msgid "Every 6 hours" msgstr "" #: ../../common/config.py:85 msgid "Every 12 hours" msgstr "" #: ../../common/config.py:86 msgid "Custom Hours" msgstr "" #: ../../common/config.py:87 msgid "Every Day" msgstr "Щодня" #: ../../common/config.py:88 msgid "Repeatedly (anacron)" msgstr "" #: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "" #: ../../common/config.py:90 msgid "Every Week" msgstr "Щотижня" #: ../../common/config.py:91 msgid "Every Month" msgstr "Щомісяця" #: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "День(ів)" #: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Тиждень(нів)" #: ../../common/config.py:97 msgid "Year(s)" msgstr "Роки(ів)" #: ../../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:129 msgid "Local" msgstr "" #: ../../common/config.py:130 msgid "SSH" msgstr "" #: ../../common/config.py:130 ../../common/config.py:132 #: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "" #: ../../common/config.py:131 msgid "Local encrypted" msgstr "" #: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "" #: ../../common/config.py:132 msgid "SSH encrypted" msgstr "" #: ../../common/config.py:135 msgid "Default" msgstr "" #: ../../common/config.py:136 msgid "AES128-CTR" msgstr "" #: ../../common/config.py:137 msgid "AES192-CTR" msgstr "" #: ../../common/config.py:138 msgid "AES256-CTR" msgstr "" #: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "" #: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "" #: ../../common/config.py:141 msgid "AES128-CBC" msgstr "" #: ../../common/config.py:142 msgid "3DES-CBC" msgstr "" #: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "" #: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "" #: ../../common/config.py:145 msgid "AES192-CBC" msgstr "" #: ../../common/config.py:146 msgid "AES256-CBC" msgstr "" #: ../../common/config.py:147 msgid "ARCFOUR" msgstr "" #: ../../common/config.py:153 msgid "Main profile" msgstr "Основний профіль" #: ../../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:289 msgid "Snapshots folder is not valid !" msgstr "Неправильна тека" #: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "Потрібно обрати хоча б одну теку для резервування !" #: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "Ви не можете приєднати теку резервної копії !" #: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "Ви не можете приєднати підтеку резервної копії !" #: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s не є текою !" #: ../../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 "" "Неможливо записати у: %s\n" "Ви впевнені що маєете право на запис ?" #: ../../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" "If not you should disable all automatic backups." msgstr "" "Не можу знайти crontab.\n" "Ви впевнені, що cron встановлено ?\n" "Якщо ні, Вам варто вимкнути усе автоматичне резервування." #: ../../common/config.py:1411 msgid "Failed to write new crontab." msgstr "" #: ../../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/config.py:1517 #, python-format msgid "Schedule udev doesn't work with mode %s" msgstr "" #: ../../common/config.py:1526 #, python-format msgid "Couldn't find UUID for \"%s\"" msgstr "" #: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" "\n" "%(error)s" msgstr "" #: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "" #: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "" #: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" #: ../../common/encfstools.py:171 msgid "Cancel" msgstr "" #: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "" #: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "" #: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" #: ../../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 "" #: ../../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:512 ../../common/snapshots.py:1131 #: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "Зробити знімок" #: ../../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:259 #, python-format msgid "mountpoint %s not empty." msgstr "" #: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" #: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" #: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Зараз" #: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "З ПОМИЛКАМИ!" #: ../../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:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "НЕВДАЧА" #: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "Відновлення дозволів:" #: ../../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 "" "В Back In Time змінився виористовуваний формат.\n" "\n" "Ваші старі знімки можуть бути перетворені у відповідності з новим форматом. " "Перетворити?" #: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" "\n" "The 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)" msgstr "" "%s профілів знайдено. \n" "\n" "Новий формат резервування підтримує збереження різних користувачів та " "профілів в одному місці. Хочете зазначити місце для обох профілів?\n" "\n" "(Програма все ж зможе їх розрізняти)" #: ../../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:918 #, python-format msgid "" "%(snapshots_left)s\n" "of profile %(profile_id)s are not moved to their new location\n" "Do 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" "\n" "If not Back In Time will restore former settings for this profile, however " "cannot continue taking snapshots" msgstr "" #: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" "Back In Time cannot continue taking new snapshots.\n" "\n" "You can manually move the snapshots, \n" "if you are done restart Back In Time to proceed" msgstr "" "Попередні налаштування профілю %s відновлено.\n" "Back In Time не може продовжити створення нових резервних копій.\n" "\n" "Ви можете самостійно перемістити знімки, \n" "якщо це зробите, то перезапустіть Back In Time, щоб продовжити." #: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" msgstr "" "Оновлення відбулось успішно!\n" "Back In Time надалі буде працювати за розкладом" #: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" "\n" "If 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" "\n" "If you do not, you will be asked again next time you start Back In Time." msgstr "" "Ви впевнені, що бажаєте перемістити старі знімки?\n" "\n" "\n" "Якщо так, ви не побачите ці запитання при наступному старті, Back In Time " "продовжить створення знімків, але smart-remove більше не зможе " "використовувати старі знімки в обліковому записі!\n" "\n" "Якщо не впевнені, Back In Time повторно запитає при наступному старті." #: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "Back In Time продовжить резервне копіювання за розкладом" #: ../../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 все ще не може продовжити створення резервних копій.\n" "Перезапустіть Back In Time для повтору запитання" #: ../../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 "" "Не можу знайти теку знімків.\n" "Якщо вона на знімному пристрої, будь ласка приєднайте його." #: ../../common/snapshots.py:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "Очікую %s секунду." msgstr[1] "Очікую %s секунд." msgstr[2] "Очікую %s секунд." #: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "Не вийшло зробити знімок %s !!!" #: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "Завершення роботи" #: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "Не можу створити теку: %s" #: ../../common/snapshots.py:1217 msgid "..." msgstr "…" #: ../../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:1340 #, python-format msgid "Compare with snapshot %s" msgstr "Порівняти зі знімком %s" #: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "Створити тверді зв’язки" #: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "Зберегти файл конфігурації ..." #: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "Зберегти дозвіл ..." #: ../../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:1695 ../../common/snapshots.py:1728 #: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "Розумне видалення" #: ../../common/snapshots.py:1704 msgid "Remove old snapshots" msgstr "Видалити старі знімки" #: ../../common/snapshots.py:1733 msgid "Try to keep min free space" msgstr "Намагатись зберігати мінімум вільного місця" #: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" #: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "" #: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "" #: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" #: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" #: ../../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:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" #: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" #: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" #: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" #: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" #: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" #: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" #: ../../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 "" #: ../../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 "" #: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" 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 "Вийти" #: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 msgid "Help" msgstr "Допомога" #: ../../qt4/app.py:122 msgid "Config File Help" msgstr "" #: ../../qt4/app.py:125 msgid "Website" msgstr "Вебсайт" #: ../../qt4/app.py:127 ../../qt4/app.py:982 msgid "Changelog" msgstr "" #: ../../qt4/app.py:129 msgid "FAQ" msgstr "" #: ../../qt4/app.py:131 msgid "Ask a question" msgstr "" #: ../../qt4/app.py:133 msgid "Report a bug" msgstr "" #: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "Про програму" #: ../../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 "Відновити" #: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 #: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "Відновлення до ..." #: ../../qt4/app.py:194 msgid "Restore and delete new files" msgstr "" #: ../../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 "" #: ../../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 "Скорочення" #: ../../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" msgstr "" "Не можливо знайти робочу теку.\n" "Якщо вона знаходиться на змінному носії, тоді приєднайте його і натисніть ОК" #: ../../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 "Працюю:" #: ../../qt4/app.py:695 msgid "Done, no backup needed" msgstr "Виконано, резервування не потрібне" #: ../../qt4/app.py:707 msgid "Error:" msgstr "Помилка:" #: ../../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 "Загальні" #: ../../qt4/app.py:778 msgid "Root" msgstr "Root" #: ../../qt4/app.py:779 msgid "Home" msgstr "Home" #: ../../qt4/app.py:794 msgid "Backup folders" msgstr "Папки резервування" #: ../../qt4/app.py:849 msgid "This is NOT a snapshot but a live view of your local files" msgstr "" #: ../../qt4/app.py:860 ../../qt4/app.py:1476 #, python-format msgid "Last check %s" msgstr "" #: ../../qt4/app.py:928 #, python-format msgid "" "Are you sure you want to remove the snapshot:\n" "%s" msgstr "" "Бажаєте перемістити знімок:\n" "%s" #: ../../qt4/app.py:1004 #, python-format msgid "" "Backup local files before overwriting or\n" "removing with trailing '%(suffix)s'." msgstr "" #: ../../qt4/app.py:1010 msgid "" "Are you sure you want to remove all newer files in your original folder?" msgstr "" #: ../../qt4/app.py:1014 msgid "" "WARNING: deleting files in filesystem root could break your whole system!!!" msgstr "" #: ../../qt4/app.py:1016 msgid "Files to be restored:" msgstr "" #: ../../qt4/app.py:1031 msgid "Do you really want to restore this files(s):" msgstr "" #: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "Знімок: %s" #: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "Переглянути знімок зроблений %s" #: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "Переглянути вміст диску" #: ../../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 "Все" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 #: ../../qt4/settingsdialog.py:657 msgid "Errors" msgstr "Помилки" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 msgid "Changes" msgstr "Змінено" #: ../../qt4/logviewdialog.py:92 msgid "Informations" msgstr "Відомості" #: ../../qt4/logviewdialog.py:101 msgid "[E] Error, [I] Information, [C] Change" msgstr "[E] Помилка, [I] Інформація, [C] Зміна" #: ../../qt4/logviewdialog.py:104 msgid "decode paths" msgstr "" #: ../../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 "В процесі ..." #: ../../qt4/qt4tools.py:178 msgid "Today" msgstr "Сьогодні" #: ../../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 "" #: ../../qt4/settingsdialog.py:68 msgid "Edit" msgstr "Редагувати" #: ../../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 "Загальне" #: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "" #: ../../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 "Де зберігати резервні копії" #: ../../qt4/settingsdialog.py:145 msgid "Folder" msgstr "" #: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" #: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "Сервер:" #: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "" #: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "Користувач:" #: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" #: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" #: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "" #: ../../qt4/settingsdialog.py:201 msgid "Key File" msgstr "" #: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 #: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "" #: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" #: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" #: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "Додатково" #: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 msgid "Full snapshot path: " msgstr "" #: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "Розклад" #: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "День:" #: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "Тиждень:" #: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "Година:" #: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "" #: ../../qt4/settingsdialog.py:339 msgid "" "Run Back In Time repeatedly. This is useful if the computer is not running " "regular." msgstr "" #: ../../qt4/settingsdialog.py:344 msgid "Every:" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Включити" #: ../../qt4/settingsdialog.py:381 msgid "Include files and folders" msgstr "Включаючи файли і папки" #: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "Додати файл" #: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Додати теку" #: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Виключити" #: ../../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 "" #: ../../qt4/settingsdialog.py:425 msgid "Exclude patterns, files or folders" msgstr "Виключити шаблони, файли, або папки" #: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "Важлива рекомендація:" #: ../../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 "Автоматичне видалення" #: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "Старіше ніж:" #: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "Якщо вільного місця менше ніж:" #: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" #: ../../qt4/settingsdialog.py:551 msgid "Run in background on remote Host." msgstr "" #: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "" #: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "день(днів)" #: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "" #: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "" #: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "тижнів" #: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "" #: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "місяців" #: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "" #: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "Не видаляти названі резервні копії" #: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Параметри" #: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Увімкнути сповіщення" #: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "Вимкнути резервування при роботі від батареї" #: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" 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 "" #: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "Ігнорувати помилки (зберігати незавершені копії)" #: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "Використовувати контролюну суму для виявлення змін" #: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "" #: ../../qt4/settingsdialog.py:634 msgid "" "- snapshots are not read-only\n" "- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "Рівень ведення журналу:" #: ../../qt4/settingsdialog.py:656 msgid "None" msgstr "Нічого" #: ../../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 "Змінюйте ці налаштування тільки у випадку, якщо Ви знаєте що робите!" #: ../../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 "" #: ../../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 "" #: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" #: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "Зберігати ACL" #: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "Зберігати додаткові атрибути (xattr)" #: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute 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 "" #: ../../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" #: ../../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 "Список тільки знімків, що розрізняються" #: ../../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 "" #: ../../qt4/snapshotsdialog.py:148 msgid "Select All" msgstr "" #: ../../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 "" "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 "" backintime-1.1.12/common/po/fo.po0000664000175000017500000010722712644767576016133 0ustar germargermar# Faroese translation for backintime # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the backintime package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \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" "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: 2016-01-11 17:52+0000\n" "X-Generator: Launchpad (build 17881)\n" #: ../../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:77 msgid "At every boot/reboot" msgstr "Við hvørjari byrjan/endurbyrjan" #: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Hvønn 5 minutt" #: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Hvønn 10 minutt" #: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "" #: ../../common/config.py:81 msgid "Every hour" msgstr "" #: ../../common/config.py:82 msgid "Every 2 hours" msgstr "" #: ../../common/config.py:83 msgid "Every 4 hours" msgstr "" #: ../../common/config.py:84 msgid "Every 6 hours" msgstr "" #: ../../common/config.py:85 msgid "Every 12 hours" msgstr "" #: ../../common/config.py:86 msgid "Custom Hours" msgstr "" #: ../../common/config.py:87 msgid "Every Day" msgstr "Hvønn dag" #: ../../common/config.py:88 msgid "Repeatedly (anacron)" msgstr "" #: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "" #: ../../common/config.py:90 msgid "Every Week" msgstr "Hvørja viku" #: ../../common/config.py:91 msgid "Every Month" msgstr "Hvønn mánað" #: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Dag(ar)" #: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Vika(ur)" #: ../../common/config.py:97 msgid "Year(s)" msgstr "Ár" #: ../../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:129 msgid "Local" msgstr "" #: ../../common/config.py:130 msgid "SSH" msgstr "" #: ../../common/config.py:130 ../../common/config.py:132 #: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "" #: ../../common/config.py:131 msgid "Local encrypted" msgstr "" #: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "" #: ../../common/config.py:132 msgid "SSH encrypted" msgstr "" #: ../../common/config.py:135 msgid "Default" msgstr "" #: ../../common/config.py:136 msgid "AES128-CTR" msgstr "" #: ../../common/config.py:137 msgid "AES192-CTR" msgstr "" #: ../../common/config.py:138 msgid "AES256-CTR" msgstr "" #: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "" #: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "" #: ../../common/config.py:141 msgid "AES128-CBC" msgstr "" #: ../../common/config.py:142 msgid "3DES-CBC" msgstr "" #: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "" #: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "" #: ../../common/config.py:145 msgid "AES192-CBC" msgstr "" #: ../../common/config.py:146 msgid "AES256-CBC" msgstr "" #: ../../common/config.py:147 msgid "ARCFOUR" msgstr "" #: ../../common/config.py:153 msgid "Main profile" msgstr "Høvuðsumhvarv" #: ../../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:289 msgid "Snapshots folder is not valid !" msgstr "Støðumyndaskjáttan er ikki lóglig !" #: ../../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:307 msgid "You can't include backup folder !" msgstr "Tú kann ikki hava trygdarritsskjáttuna við !" #: ../../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:371 #, python-format msgid "%s is not a folder !" msgstr "%s er ikki ein skjatta" #: ../../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 "" "Kann ikki skriva til: %s\n" "Hevur tú skrivi rættindi ?" #: ../../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 "Framkomnir kostir" #: ../../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" "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:1411 msgid "Failed to write new crontab." msgstr "" #: ../../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/config.py:1517 #, python-format msgid "Schedule udev doesn't work with mode %s" msgstr "" #: ../../common/config.py:1526 #, python-format msgid "Couldn't find UUID for \"%s\"" msgstr "" #: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" "\n" "%(error)s" msgstr "" #: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "" #: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "" #: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" #: ../../common/encfstools.py:171 msgid "Cancel" msgstr "" #: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "" #: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "" #: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" #: ../../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 "" #: ../../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:512 ../../common/snapshots.py:1131 #: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "Tak eina løtumynd" #: ../../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:259 #, python-format msgid "mountpoint %s not empty." msgstr "" #: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" #: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" #: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Nú" #: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "VIÐ VILLUM !" #: ../../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:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "" #: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "" #: ../../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:868 #, python-format msgid "" "%s profiles found. \n" "\n" "The 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)" msgstr "" "%s umhvarv funnin. \n" "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:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" msgstr "" #: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" "of profile %(profile_id)s are not moved to their new location\n" "Do 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" "\n" "If not Back In Time will restore former settings for this profile, however " "cannot continue taking snapshots" msgstr "" #: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" "Back In Time cannot continue taking new snapshots.\n" "\n" "You can manually move the snapshots, \n" "if you are done restart Back In Time to proceed" msgstr "" #: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" msgstr "" #: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" "\n" "If 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" "\n" "If you do not, you will be asked again next time you start Back In Time." msgstr "" #: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "" #: ../../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: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: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:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "" #: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "" #: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "Kann ikki stovna skjáttuna: %s" #: ../../common/snapshots.py:1217 msgid "..." msgstr "..." #: ../../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:1340 #, python-format msgid "Compare with snapshot %s" msgstr "samanberð við støåumyndini %s" #: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "Stovna harð-leinkjur" #: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "Goymi samansetingarfíluna ..." #: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "Goymi loyvi ...." #: ../../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:1695 ../../common/snapshots.py:1728 #: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "" #: ../../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:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" #: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "" #: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "" #: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" #: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" #: ../../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:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" #: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" #: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" #: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" #: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" #: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" #: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" #: ../../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 "" #: ../../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 "" #: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "" #: ../../qt4/app.py:81 msgid "Refresh snapshots list" msgstr "" #: ../../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" #: ../../qt4/app.py:122 msgid "Config File Help" msgstr "" #: ../../qt4/app.py:125 msgid "Website" msgstr "Heimasíða" #: ../../qt4/app.py:127 ../../qt4/app.py:982 msgid "Changelog" msgstr "" #: ../../qt4/app.py:129 msgid "FAQ" msgstr "" #: ../../qt4/app.py:131 msgid "Ask a question" msgstr "" #: ../../qt4/app.py:133 msgid "Report a bug" msgstr "" #: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "Um forritið" #: ../../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" #: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 #: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "" #: ../../qt4/app.py:194 msgid "Restore and delete new files" msgstr "" #: ../../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 "" #: ../../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 "" #: ../../qt4/app.py:224 msgid "View" msgstr "" #: ../../qt4/app.py:277 msgid "Shortcuts" msgstr "Snarvegir" #: ../../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" 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 "" #: ../../qt4/app.py:667 ../../qt4/app.py:703 msgid "Working:" msgstr "Arbeiði:" #: ../../qt4/app.py:695 msgid "Done, no backup needed" msgstr "Liðug, eingin trygdarriting neyðug" #: ../../qt4/app.py:707 msgid "Error:" msgstr "Villa:" #: ../../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" #: ../../qt4/app.py:778 msgid "Root" msgstr "Rót" #: ../../qt4/app.py:779 msgid "Home" msgstr "Heim" #: ../../qt4/app.py:794 msgid "Backup folders" msgstr "Trygdarritingar-skjáttur" #: ../../qt4/app.py:849 msgid "This is NOT a snapshot but a live view of your local files" msgstr "" #: ../../qt4/app.py:860 ../../qt4/app.py:1476 #, python-format msgid "Last check %s" msgstr "" #: ../../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" #: ../../qt4/app.py:1004 #, python-format msgid "" "Backup local files before overwriting or\n" "removing with trailing '%(suffix)s'." msgstr "" #: ../../qt4/app.py:1010 msgid "" "Are you sure you want to remove all newer files in your original folder?" msgstr "" #: ../../qt4/app.py:1014 msgid "" "WARNING: deleting files in filesystem root could break your whole system!!!" msgstr "" #: ../../qt4/app.py:1016 msgid "Files to be restored:" msgstr "" #: ../../qt4/app.py:1031 msgid "Do you really want to restore this files(s):" msgstr "" #: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "Støðumynd: %s" #: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "Sýn støðumyndina ið gjørd varð við %s" #: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "Sýn núverandi innihald á diski" #: ../../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 "Umhvarv:" #: ../../qt4/logviewdialog.py:81 msgid "Filter:" msgstr "Filtur:" #: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 msgid "All" msgstr "Alt" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 #: ../../qt4/settingsdialog.py:657 msgid "Errors" msgstr "Villur" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 msgid "Changes" msgstr "Broytingar" #: ../../qt4/logviewdialog.py:92 msgid "Informations" msgstr "Upplýsingar" #: ../../qt4/logviewdialog.py:101 msgid "[E] Error, [I] Information, [C] Change" msgstr "" #: ../../qt4/logviewdialog.py:104 msgid "decode paths" msgstr "" #: ../../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 "Arbeiði..." #: ../../qt4/qt4tools.py:178 msgid "Today" msgstr "Í dag" #: ../../qt4/qt4tools.py:183 msgid "Yesterday" msgstr "Í gjár" #: ../../qt4/qt4tools.py:188 msgid "This week" msgstr "Henda vikan" #: ../../qt4/qt4tools.py:193 msgid "Last week" msgstr "Fyrra vikan" #: ../../qt4/restoredialog.py:75 msgid "Show full Log" msgstr "" #: ../../qt4/settingsdialog.py:68 msgid "Edit" msgstr "Ritstjórna" #: ../../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" #: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "" #: ../../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" #: ../../qt4/settingsdialog.py:145 msgid "Folder" msgstr "" #: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" #: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "Vertur:" #: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "" #: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "Brúkari:" #: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" #: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" #: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "" #: ../../qt4/settingsdialog.py:201 msgid "Key File" msgstr "" #: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 #: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "" #: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" #: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" #: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "Framkomið" #: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 msgid "Full snapshot path: " msgstr "" #: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "Skrá" #: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "" #: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "" #: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "Tími:" #: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "" #: ../../qt4/settingsdialog.py:339 msgid "" "Run Back In Time repeatedly. This is useful if the computer is not running " "regular." msgstr "" #: ../../qt4/settingsdialog.py:344 msgid "Every:" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Tak við" #: ../../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" #: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Legg skjáttu til" #: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Útiloka" #: ../../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 "" #: ../../qt4/settingsdialog.py:425 msgid "Exclude patterns, files or folders" msgstr "" #: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "Eldri enn:" #: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "Um tað tøka plássið er minni enn:" #: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" #: ../../qt4/settingsdialog.py:551 msgid "Run in background on remote Host." msgstr "" #: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "" #: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "" #: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "" #: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "" #: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "" #: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "" #: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "" #: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "" #: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "" #: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Kostir" #: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Virkja kunningar" #: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "" #: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" 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 "" #: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "" #: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "" #: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "" #: ../../qt4/settingsdialog.py:634 msgid "" "- snapshots are not read-only\n" "- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "" #: ../../qt4/settingsdialog.py:656 msgid "None" msgstr "Einki" #: ../../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 "" #: ../../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 "" #: ../../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 "" #: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" #: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "" #: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "" #: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute 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 "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 "" #: ../../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 "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 "" #: ../../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 "" #: ../../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 "" #: ../../qt4/snapshotsdialog.py:56 msgid "Command:" msgstr "Stýriboð:" #: ../../qt4/snapshotsdialog.py:60 msgid "Parameters:" msgstr "" #: ../../qt4/snapshotsdialog.py:64 msgid "Use %1 and %2 for path parameters" msgstr "" #: ../../qt4/snapshotsdialog.py:106 msgid "List only different snapshots" msgstr "" #: ../../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 "" #: ../../qt4/snapshotsdialog.py:148 msgid "Select All" msgstr "" #: ../../qt4/snapshotsdialog.py:161 msgid "Diff" msgstr "" #: ../../qt4/snapshotsdialog.py:172 msgid "Go To" msgstr "Far til" #: ../../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" #: ../../qt4/snapshotsdialog.py:333 #, python-format msgid "Command not found: %s" msgstr "Stýriboð ikki funni: %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 "" backintime-1.1.12/common/po/en_CA.po0000664000175000017500000010721212644767576016466 0ustar germargermar# English (Canada) translation for backintime # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the backintime package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \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" "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: 2016-01-11 17:52+0000\n" "X-Generator: Launchpad (build 17881)\n" #: ../../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:77 msgid "At every boot/reboot" msgstr "" #: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Every 5 minutes" #: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Every 10 minutes" #: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "" #: ../../common/config.py:81 msgid "Every hour" msgstr "" #: ../../common/config.py:82 msgid "Every 2 hours" msgstr "" #: ../../common/config.py:83 msgid "Every 4 hours" msgstr "" #: ../../common/config.py:84 msgid "Every 6 hours" msgstr "" #: ../../common/config.py:85 msgid "Every 12 hours" msgstr "" #: ../../common/config.py:86 msgid "Custom Hours" msgstr "" #: ../../common/config.py:87 msgid "Every Day" msgstr "Every Day" #: ../../common/config.py:88 msgid "Repeatedly (anacron)" msgstr "" #: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "" #: ../../common/config.py:90 msgid "Every Week" msgstr "Every Week" #: ../../common/config.py:91 msgid "Every Month" msgstr "Every Month" #: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Day(s)" #: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Week(s)" #: ../../common/config.py:97 msgid "Year(s)" msgstr "Year(s)" #: ../../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:129 msgid "Local" msgstr "" #: ../../common/config.py:130 msgid "SSH" msgstr "" #: ../../common/config.py:130 ../../common/config.py:132 #: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "" #: ../../common/config.py:131 msgid "Local encrypted" msgstr "" #: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "" #: ../../common/config.py:132 msgid "SSH encrypted" msgstr "" #: ../../common/config.py:135 msgid "Default" msgstr "" #: ../../common/config.py:136 msgid "AES128-CTR" msgstr "" #: ../../common/config.py:137 msgid "AES192-CTR" msgstr "" #: ../../common/config.py:138 msgid "AES256-CTR" msgstr "" #: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "" #: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "" #: ../../common/config.py:141 msgid "AES128-CBC" msgstr "" #: ../../common/config.py:142 msgid "3DES-CBC" msgstr "" #: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "" #: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "" #: ../../common/config.py:145 msgid "AES192-CBC" msgstr "" #: ../../common/config.py:146 msgid "AES256-CBC" msgstr "" #: ../../common/config.py:147 msgid "ARCFOUR" msgstr "" #: ../../common/config.py:153 msgid "Main profile" msgstr "Main profile" #: ../../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:289 msgid "Snapshots folder is not valid !" msgstr "Snapshots folder is not valid!" #: ../../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:307 msgid "You can't include backup folder !" msgstr "You can't include backup folder!" #: ../../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:371 #, python-format msgid "%s is not a folder !" msgstr "%s is not a folder!" #: ../../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 "" "Can't write to: %s\n" "Are you sure you have write access?" #: ../../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 "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" "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:1411 msgid "Failed to write new crontab." msgstr "" #: ../../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/config.py:1517 #, python-format msgid "Schedule udev doesn't work with mode %s" msgstr "" #: ../../common/config.py:1526 #, python-format msgid "Couldn't find UUID for \"%s\"" msgstr "" #: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" "\n" "%(error)s" msgstr "" #: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "" #: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "" #: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" #: ../../common/encfstools.py:171 msgid "Cancel" msgstr "" #: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "" #: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "" #: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" #: ../../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 "" #: ../../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:512 ../../common/snapshots.py:1131 #: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "Take snapshot" #: ../../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:259 #, python-format msgid "mountpoint %s not empty." msgstr "" #: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" #: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" #: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Now" #: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "" #: ../../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:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "" #: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "" #: ../../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:868 #, python-format msgid "" "%s profiles found. \n" "\n" "The 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)" msgstr "" "%s profiles found. \n" "\n" "The 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)" #: ../../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:918 #, python-format msgid "" "%(snapshots_left)s\n" "of profile %(profile_id)s are not moved to their new location\n" "Do 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" "\n" "If not Back In Time will restore former settings for this profile, however " "cannot continue taking snapshots" msgstr "" #: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" "Back In Time cannot continue taking new snapshots.\n" "\n" "You can manually move the snapshots, \n" "if you are done restart Back In Time to proceed" msgstr "" #: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" msgstr "" #: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" "\n" "If 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" "\n" "If you do not, you will be asked again next time you start Back In Time." msgstr "" #: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "" #: ../../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: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 "" "Can't find snapshots folder.\n" "If it is on a removable drive, please plug it in." #: ../../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:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "" #: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "Finalizing" #: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "Can't create folder: %s" #: ../../common/snapshots.py:1217 msgid "..." msgstr "..." #: ../../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:1340 #, python-format msgid "Compare with snapshot %s" msgstr "Compare with snapshot %s" #: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "Create hard-links" #: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "Save config file ..." #: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "Save permission..." #: ../../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:1695 ../../common/snapshots.py:1728 #: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "Smart remove" #: ../../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:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" #: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "" #: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "" #: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" #: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" #: ../../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:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" #: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" #: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" #: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" #: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" #: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" #: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" #: ../../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 "" #: ../../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 "" #: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "" #: ../../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" #: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 msgid "Help" msgstr "Help" #: ../../qt4/app.py:122 msgid "Config File Help" msgstr "" #: ../../qt4/app.py:125 msgid "Website" msgstr "Website" #: ../../qt4/app.py:127 ../../qt4/app.py:982 msgid "Changelog" msgstr "" #: ../../qt4/app.py:129 msgid "FAQ" msgstr "" #: ../../qt4/app.py:131 msgid "Ask a question" msgstr "" #: ../../qt4/app.py:133 msgid "Report a bug" msgstr "" #: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "About" #: ../../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" #: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 #: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "" #: ../../qt4/app.py:194 msgid "Restore and delete new files" msgstr "" #: ../../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 "" #: ../../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 "" #: ../../qt4/app.py:224 msgid "View" msgstr "" #: ../../qt4/app.py:277 msgid "Shortcuts" msgstr "Shortcuts" #: ../../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" msgstr "" "Can't find snapshots folder.\n" "If it is on a removable drive, please plug it in and then press OK" #: ../../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 "Working:" #: ../../qt4/app.py:695 msgid "Done, no backup needed" msgstr "Done, no backup needed" #: ../../qt4/app.py:707 msgid "Error:" msgstr "" #: ../../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" #: ../../qt4/app.py:778 msgid "Root" msgstr "Root" #: ../../qt4/app.py:779 msgid "Home" msgstr "Home" #: ../../qt4/app.py:794 msgid "Backup folders" msgstr "Backup folders" #: ../../qt4/app.py:849 msgid "This is NOT a snapshot but a live view of your local files" msgstr "" #: ../../qt4/app.py:860 ../../qt4/app.py:1476 #, python-format msgid "Last check %s" msgstr "" #: ../../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\"?" #: ../../qt4/app.py:1004 #, python-format msgid "" "Backup local files before overwriting or\n" "removing with trailing '%(suffix)s'." msgstr "" #: ../../qt4/app.py:1010 msgid "" "Are you sure you want to remove all newer files in your original folder?" msgstr "" #: ../../qt4/app.py:1014 msgid "" "WARNING: deleting files in filesystem root could break your whole system!!!" msgstr "" #: ../../qt4/app.py:1016 msgid "Files to be restored:" msgstr "" #: ../../qt4/app.py:1031 msgid "Do you really want to restore this files(s):" msgstr "" #: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "Snapshot: %s" #: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "View the snapshot made at %s" #: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "View the current disk content" #: ../../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 "Profile:" #: ../../qt4/logviewdialog.py:81 msgid "Filter:" msgstr "" #: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 msgid "All" msgstr "" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 #: ../../qt4/settingsdialog.py:657 msgid "Errors" msgstr "" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 msgid "Changes" msgstr "" #: ../../qt4/logviewdialog.py:92 msgid "Informations" msgstr "" #: ../../qt4/logviewdialog.py:101 msgid "[E] Error, [I] Information, [C] Change" msgstr "" #: ../../qt4/logviewdialog.py:104 msgid "decode paths" msgstr "" #: ../../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 "Working..." #: ../../qt4/qt4tools.py:178 msgid "Today" msgstr "Today" #: ../../qt4/qt4tools.py:183 msgid "Yesterday" msgstr "Yesterday" #: ../../qt4/qt4tools.py:188 msgid "This week" msgstr "This week" #: ../../qt4/qt4tools.py:193 msgid "Last week" msgstr "Last week" #: ../../qt4/restoredialog.py:75 msgid "Show full Log" msgstr "" #: ../../qt4/settingsdialog.py:68 msgid "Edit" msgstr "Edit" #: ../../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" #: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "" #: ../../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" #: ../../qt4/settingsdialog.py:145 msgid "Folder" msgstr "" #: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" #: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "" #: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "" #: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "" #: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" #: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" #: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "" #: ../../qt4/settingsdialog.py:201 msgid "Key File" msgstr "" #: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 #: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "" #: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" #: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" #: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "" #: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 msgid "Full snapshot path: " msgstr "" #: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "Schedule" #: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "" #: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "" #: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "" #: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "" #: ../../qt4/settingsdialog.py:339 msgid "" "Run Back In Time repeatedly. This is useful if the computer is not running " "regular." msgstr "" #: ../../qt4/settingsdialog.py:344 msgid "Every:" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Include" #: ../../qt4/settingsdialog.py:381 msgid "Include files and folders" msgstr "" #: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "Add file" #: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Add folder" #: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Exclude" #: ../../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 "" #: ../../qt4/settingsdialog.py:425 msgid "Exclude patterns, files or folders" msgstr "" #: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "" #: ../../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" #: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "Older than:" #: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "If free space is less than:" #: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" #: ../../qt4/settingsdialog.py:551 msgid "Run in background on remote Host." msgstr "" #: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "" #: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "" #: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "" #: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "" #: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "" #: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "" #: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "" #: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "" #: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "Don't remove named snapshots" #: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Options" #: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Enable notifications" #: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "Disable snapshots when on battery" #: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" msgstr "Power status not available from system" #: ../../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 "" #: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "" #: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "" #: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "" #: ../../qt4/settingsdialog.py:634 msgid "" "- snapshots are not read-only\n" "- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "" #: ../../qt4/settingsdialog.py:656 msgid "None" msgstr "" #: ../../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 "" #: ../../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 "" #: ../../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 "" #: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" #: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "" #: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "" #: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute 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 "New profile" #: ../../qt4/settingsdialog.py:938 msgid "Rename profile" msgstr "Rename profile" #: ../../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\"?" #: ../../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 "Exclude pattern" #: ../../qt4/settingsdialog.py:1502 msgid "Exclude file" msgstr "Exclude file" #: ../../qt4/settingsdialog.py:1506 msgid "Exclude folder" msgstr "Exclude folder" #: ../../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 "" #: ../../qt4/settingsdialog.py:1545 msgid "Include folder" msgstr "Include folder" #: ../../qt4/settingsdialog.py:1572 msgid "Are you sure you want to change snapshots folder ?" msgstr "Are you sure you want to change snapshots folder?" #: ../../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 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 "" #: ../../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 "" #: ../../qt4/snapshotsdialog.py:148 msgid "Select All" msgstr "" #: ../../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 "" "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 "" backintime-1.1.12/common/po/ca.po0000664000175000017500000012003212644767576016077 0ustar germargermar# Catalan translation for backintime # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the backintime package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \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: 2016-01-11 17:52+0000\n" "X-Generator: Launchpad (build 17881)\n" #: ../../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:77 msgid "At every boot/reboot" msgstr "En cada inici/reinici" #: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Cada 5 minuts" #: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Cada 10 minuts" #: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "Cada 30 minuts" #: ../../common/config.py:81 msgid "Every hour" msgstr "Cada hora" #: ../../common/config.py:82 msgid "Every 2 hours" msgstr "Cada 2 hores" #: ../../common/config.py:83 msgid "Every 4 hours" msgstr "Cada 4 hores" #: ../../common/config.py:84 msgid "Every 6 hours" msgstr "Cada 6 hores" #: ../../common/config.py:85 msgid "Every 12 hours" msgstr "Cada 12 hores" #: ../../common/config.py:86 msgid "Custom Hours" msgstr "Hores personalitzades" #: ../../common/config.py:87 msgid "Every Day" msgstr "Cada dia" #: ../../common/config.py:88 msgid "Repeatedly (anacron)" msgstr "" #: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "" #: ../../common/config.py:90 msgid "Every Week" msgstr "Cada setmana" #: ../../common/config.py:91 msgid "Every Month" msgstr "Cada mes" #: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Dia(es)" #: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Setmana(es)" #: ../../common/config.py:97 msgid "Year(s)" msgstr "Any(s)" #: ../../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:129 msgid "Local" msgstr "Local" #: ../../common/config.py:130 msgid "SSH" msgstr "SSH" #: ../../common/config.py:130 ../../common/config.py:132 #: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "Clau privada SSH" #: ../../common/config.py:131 msgid "Local encrypted" msgstr "Xifrat local" #: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "Xifrat" #: ../../common/config.py:132 msgid "SSH encrypted" msgstr "Xifrat amb SSH" #: ../../common/config.py:135 msgid "Default" msgstr "Predeterminat" #: ../../common/config.py:136 msgid "AES128-CTR" msgstr "AES128-CTR" #: ../../common/config.py:137 msgid "AES192-CTR" msgstr "AES192-CTR" #: ../../common/config.py:138 msgid "AES256-CTR" msgstr "AES256-CTR" #: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "ARCFOUR256" #: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "ARCFOUR128" #: ../../common/config.py:141 msgid "AES128-CBC" msgstr "AES128-CBC" #: ../../common/config.py:142 msgid "3DES-CBC" msgstr "3DES-CBC" #: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "Blowfish-CBC" #: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "Cast128-CBC" #: ../../common/config.py:145 msgid "AES192-CBC" msgstr "AES192-CBC" #: ../../common/config.py:146 msgid "AES256-CBC" msgstr "AES256-CBC" #: ../../common/config.py:147 msgid "ARCFOUR" msgstr "ARCFOUR" #: ../../common/config.py:153 msgid "Main profile" msgstr "Perfil principal" #: ../../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:289 msgid "Snapshots folder is not valid !" msgstr "La carpeta d'instantànies no es vàlida!" #: ../../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:307 msgid "You can't include backup folder !" msgstr "No podeu incloure la carpeta de còpies de seguretat!" #: ../../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:371 #, python-format msgid "%s is not a folder !" msgstr "%s no és una carpeta!" #: ../../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 "" "No es pot escriure a: %s\n" "Esteu segurs de que teniu permisos d'escriptura ?" #: ../../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 "Copia enllaços (desarbitra els enllaços simbòlics)" #: ../../common/config.py:409 ../../qt4/settingsdialog.py:669 msgid "Expert Options" msgstr "Opcions avançades" #: ../../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" "If not you should disable all automatic backups." 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:1411 msgid "Failed to write new crontab." msgstr "" #: ../../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/config.py:1517 #, python-format msgid "Schedule udev doesn't work with mode %s" msgstr "" #: ../../common/config.py:1526 #, python-format msgid "Couldn't find UUID for \"%s\"" msgstr "" #: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" "\n" "%(error)s" msgstr "" "No s'ha pogut muntar '%(command)s':\n" "\n" "%(error)s" #: ../../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:166 msgid "Config for encrypted folder not found." msgstr "No s'ha trobat la configuració de la carpeta xifrada." #: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" "\n" "Voleu crear una nova carpeta xifrada?" #: ../../common/encfstools.py:171 msgid "Cancel" msgstr "Canceŀla" #: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "Confirmeu la contrasenya" #: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "La contrasenya no concorda" #: ../../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: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 no és membre del grup 'fuse'.\n" " Executeu 'sudo adduser %(user)s fuse'. Per aplicar els canvis cal que " "sortiu i torneu a entrar a la sessió.\n" "Mireu a 'man backintime' per a més instruccions." #: ../../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:512 ../../common/snapshots.py:1131 #: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "Fes una instantània" #: ../../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:259 #, python-format msgid "mountpoint %s not empty." msgstr "el punt de muntatge %s no està buit." #: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" #: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" #: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Ara" #: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "AMB ERRORS !" #: ../../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:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "HA FALLAT" #: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "Restaura els permisos:" #: ../../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" "Your old snapshots can be moved according to this new format. OK?" msgstr "" "'Back In Time' ha canviat el format de les còpies de seguretat.\n" "\n" "Les vostres antigues instantànies poden ser convertides al nou format. Esteu " "d'acord?" #: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" "\n" "The 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)" msgstr "" "S'han trobat %s perfils. \n" "\n" "El nou format de copies suporta diferents usuaris i perfils en la mateixa " "localització. Voleu la mateixa direcció per tots dos perfils ? \n" "\n" "(El programa es capaç de discriminar entre ells)" #: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" msgstr "" "No s'han trobat perfils. Primer actualitzarem a perfils, sis plau reinicieu " "'Back In Time'" #: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" "of profile %(profile_id)s are not moved to their new location\n" "Do 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" "\n" "If not Back In Time will restore former settings for this profile, however " "cannot continue taking snapshots" msgstr "" #: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" "Back In Time cannot continue taking new snapshots.\n" "\n" "You can manually move the snapshots, \n" "if you are done restart Back In Time to proceed" msgstr "" "S'ha restaurat l'antiga configuració d'aquest perfil %s.\n" "'Back In Time' no pot continuar fent noves instantànies.\n" "\n" "Vostè pot moure manualment les instantànies, \n" "si està preparat, reinicii 'Back In Time' per avançar" #: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" msgstr "" "Actualització correcta!\n" "\n" "'Back In Time' continuarà prenent instantànies altre vegada tal i com ha " "estat programat" #: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" "\n" "If 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" "\n" "If you do not, you will be asked again next time you start Back In Time." msgstr "" "Està segur de que no vol moure les vostres antigues instantànies?\n" "\n" "\n" "Si ho fa, no tornarà a veure aquestes preguntes la propera vegada, 'Back In " "Time' continuarà fent instantànies altre vegada, però el sistema de esborrat-" "intel·ligent no podrà portar les vostres velles instantànies a la vostre " "compte!\n" "\n" "Si no ho feu, s'os preguntarà la propera vegada que inicieu 'Back In Time'." #: ../../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: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' encar no pot continuar fent noves instantànies.\n" "Reinicieu 'Back In Time' per veure de nou les preguntes" #: ../../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 "" "No es pot trobar la carpeta d'instantànies.\n" "Si està en una unitat extraïble, connecteu-la." #: ../../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:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "S'ha produït un error fent la instantània %s!!!" #: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "Finalitzant" #: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "No es pot crear la carpeta: %s" #: ../../common/snapshots.py:1217 msgid "..." msgstr "..." #: ../../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:1340 #, python-format msgid "Compare with snapshot %s" msgstr "Compara amb la instantània %s" #: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "Crea enllaços forts" #: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "Guarda el fixter de configuració ..." #: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "Guarda els permisos ..." #: ../../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:1695 ../../common/snapshots.py:1728 #: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "Eliminació intel·ligent" #: ../../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:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" #: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "No s'ha pogut muntar %s" #: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "No s'ha pogut desmuntar el sshfs %s" #: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" #: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" #: ../../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:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" #: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" #: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" #: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" #: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" #: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" #: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" #: ../../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 "" #: ../../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 "" #: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "" #: ../../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" #: ../../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" #: ../../qt4/app.py:122 msgid "Config File Help" msgstr "" #: ../../qt4/app.py:125 msgid "Website" msgstr "Lloc web" #: ../../qt4/app.py:127 ../../qt4/app.py:982 msgid "Changelog" msgstr "" #: ../../qt4/app.py:129 msgid "FAQ" msgstr "PMF" #: ../../qt4/app.py:131 msgid "Ask a question" msgstr "Fer una pregunta" #: ../../qt4/app.py:133 msgid "Report a bug" msgstr "Informar d'un error" #: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "Quant a" #: ../../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" #: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 #: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "Restaura a..." #: ../../qt4/app.py:194 msgid "Restore and delete new files" msgstr "" #: ../../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 "" #: ../../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 "" #: ../../qt4/app.py:277 msgid "Shortcuts" msgstr "Dreceres" #: ../../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" msgstr "" "No es pot trobar la carpeta d'instantànies.\n" "Si es troba en una unitat extraïble, connecteu-la i premeu OK" #: ../../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 "S'està treballant:" #: ../../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:" #: ../../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" #: ../../qt4/app.py:778 msgid "Root" msgstr "Arrel" #: ../../qt4/app.py:779 msgid "Home" msgstr "Inici" #: ../../qt4/app.py:794 msgid "Backup folders" msgstr "Carpetes de còpia de seguretat" #: ../../qt4/app.py:849 msgid "This is NOT a snapshot but a live view of your local files" msgstr "" #: ../../qt4/app.py:860 ../../qt4/app.py:1476 #, python-format msgid "Last check %s" msgstr "" #: ../../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" #: ../../qt4/app.py:1004 #, python-format msgid "" "Backup local files before overwriting or\n" "removing with trailing '%(suffix)s'." msgstr "" #: ../../qt4/app.py:1010 msgid "" "Are you sure you want to remove all newer files in your original folder?" msgstr "" #: ../../qt4/app.py:1014 msgid "" "WARNING: deleting files in filesystem root could break your whole system!!!" msgstr "" #: ../../qt4/app.py:1016 msgid "Files to be restored:" msgstr "" #: ../../qt4/app.py:1031 msgid "Do you really want to restore this files(s):" msgstr "" #: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "Instantània: %s" #: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "Visualitza la instantània creada a %s" #: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "Visualitza el contingut actual del disc" #: ../../qt4/app.py:1268 #, python-format msgid "Restore '%s'" msgstr "Restaura '%s'" #: ../../qt4/app.py:1269 #, python-format msgid "Restore '%s' to ..." msgstr "Restaura '%s' a..." #: ../../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 "Perfil:" #: ../../qt4/logviewdialog.py:81 msgid "Filter:" msgstr "Filtra:" #: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 msgid "All" msgstr "Tots" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 #: ../../qt4/settingsdialog.py:657 msgid "Errors" msgstr "Errors" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 msgid "Changes" msgstr "Canvis" #: ../../qt4/logviewdialog.py:92 msgid "Informations" msgstr "Informacions" #: ../../qt4/logviewdialog.py:101 msgid "[E] Error, [I] Information, [C] Change" msgstr "[E]Errors, [I]Informació, [C]Canvia" #: ../../qt4/logviewdialog.py:104 msgid "decode paths" msgstr "" #: ../../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 "S'està treballant..." #: ../../qt4/qt4tools.py:178 msgid "Today" msgstr "Avui" #: ../../qt4/qt4tools.py:183 msgid "Yesterday" msgstr "Ahir" #: ../../qt4/qt4tools.py:188 msgid "This week" msgstr "Aquesta setmana" #: ../../qt4/qt4tools.py:193 msgid "Last week" msgstr "La setmana passada" #: ../../qt4/restoredialog.py:75 msgid "Show full Log" msgstr "" #: ../../qt4/settingsdialog.py:68 msgid "Edit" msgstr "Edita" #: ../../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" #: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "Mode:" #: ../../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" #: ../../qt4/settingsdialog.py:145 msgid "Folder" msgstr "" #: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" #: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "Ordinador amfitrió:" #: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "Port:" #: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "Usuari:" #: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "Camí:" #: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "Xifrat:" #: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "Clau privada:" #: ../../qt4/settingsdialog.py:201 msgid "Key File" msgstr "" #: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 #: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "Contrasenya" #: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" #: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" #: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "Avançat" #: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 msgid "Full snapshot path: " msgstr "" #: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "Planificació" #: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "Dia:" #: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "Dia de la setmana:" #: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "Hora:" #: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "Hores:" #: ../../qt4/settingsdialog.py:339 msgid "" "Run Back In Time repeatedly. This is useful if the computer is not running " "regular." msgstr "" #: ../../qt4/settingsdialog.py:344 msgid "Every:" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Inclou" #: ../../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" #: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Afegeix un directori" #: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Exclou" #: ../../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 "" #: ../../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" #: ../../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" #: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "Més antics que:" #: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "Si l'espai lliure és inferior a:" #: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" #: ../../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" #: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "dia(es)" #: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "Mantingues una instantània al dia durant els darrers" #: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "Mantingues una instantània a la setmana durant les darreres" #: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "setmana(es)" #: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "Mantingues una instantània al mes durant els darrers" #: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "mes(os)" #: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "Mantingues una instantània a l'any durant els darrers" #: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "No eliminis les instantànies amb nom" #: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Opcions" #: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Activa les notificacions" #: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "Desactiva les instantànies treballant en bateria" #: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" msgstr "No està disponible l'estat de l'energia" #: ../../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 "" #: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "Continua amb errors (Mantingues instantànies incompletes)" #: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "Utilitza el checksum per detectar canvis" #: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "Mode rsync complet. Pot ser més ràpid, però:" #: ../../qt4/settingsdialog.py:634 msgid "" "- 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...)" #: ../../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)" #: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "Nivell de log" #: ../../qt4/settingsdialog.py:656 msgid "None" msgstr "Cap" #: ../../qt4/settingsdialog.py:658 msgid "Changes & Errors" msgstr "Canvis i Errors" #: ../../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 !" #: ../../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 "" #: ../../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 "" #: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" #: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "Preserva ACL" #: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "Preserva els atributs extesos (xattr)" #: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute links)" msgstr "Copia links insegurs (Només funciona amb links absoluts)" #: ../../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 "Perfil nou" #: ../../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" #: ../../qt4/settingsdialog.py:1489 msgid "Exclude pattern" msgstr "Exclou el patró" #: ../../qt4/settingsdialog.py:1502 msgid "Exclude file" msgstr "Exclou el fitxer" #: ../../qt4/settingsdialog.py:1506 msgid "Exclude folder" msgstr "Exclou el directori" #: ../../qt4/settingsdialog.py:1525 msgid "Include file" msgstr "Afegeix un fitxer" #: ../../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 "Inclou el directori" #: ../../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?" #: ../../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 "Opcions de diff" #: ../../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" #: ../../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 "" #: ../../qt4/snapshotsdialog.py:123 msgid "Deep check (more accurate, but slow)" msgstr "Comprovació a fons (més acurada, però lenta)" #: ../../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 "Vés a" #: ../../qt4/snapshotsdialog.py:326 msgid "You can't compare a snapshot to itself" msgstr "No podeu compara una instantània amb sí mateixa" #: ../../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 "" #: ../../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 "" backintime-1.1.12/common/po/ru.po0000664000175000017500000013035312644767576016151 0ustar germargermar# Russian translation for backintime # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the backintime package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \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" "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: 2016-01-11 17:52+0000\n" "X-Generator: Launchpad (build 17881)\n" #: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "Просмотр содержимого текущего диска" #: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Добавить каталог" #: ../../qt4/settingsdialog.py:493 msgid "Auto-remove" msgstr "Автоматическое удаление" #: ../../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:77 msgid "At every boot/reboot" msgstr "При каждой загрузке системы" #: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Каждые 5 минут" #: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Каждые 10 минут" #: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "Каждые 30 минут" #: ../../common/config.py:81 msgid "Every hour" msgstr "Каждый час" #: ../../common/config.py:82 msgid "Every 2 hours" msgstr "Каждые 2 часа" #: ../../common/config.py:83 msgid "Every 4 hours" msgstr "Каждые 4 часа" #: ../../common/config.py:84 msgid "Every 6 hours" msgstr "Каждые 6 часов" #: ../../common/config.py:85 msgid "Every 12 hours" msgstr "Каждые 12 часов" #: ../../common/config.py:86 msgid "Custom Hours" msgstr "Ручная настройка периодизации" #: ../../common/config.py:87 msgid "Every Day" msgstr "Ежедневно" #: ../../common/config.py:88 msgid "Repeatedly (anacron)" msgstr "" #: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "Когда подключено устройство (udev)" #: ../../common/config.py:90 msgid "Every Week" msgstr "Каждую неделю" #: ../../common/config.py:91 msgid "Every Month" msgstr "Каждый месяц" #: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Дней (Дня)" #: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "недель" #: ../../common/config.py:97 msgid "Year(s)" msgstr "Лет (Года)" #: ../../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:129 msgid "Local" msgstr "Локально" #: ../../common/config.py:130 msgid "SSH" msgstr "SSH" #: ../../common/config.py:130 ../../common/config.py:132 #: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "личный ключ SSH" #: ../../common/config.py:131 msgid "Local encrypted" msgstr "Локально с шифрованием" #: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "Шифрование" #: ../../common/config.py:132 msgid "SSH encrypted" msgstr "SSH зашифровано" #: ../../common/config.py:135 msgid "Default" msgstr "По умолчанию" #: ../../common/config.py:136 msgid "AES128-CTR" msgstr "AES128-CTR" #: ../../common/config.py:137 msgid "AES192-CTR" msgstr "AES192-CTR" #: ../../common/config.py:138 msgid "AES256-CTR" msgstr "AES256-CTR" #: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "ARCFOUR256" #: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "ARCFOUR128" #: ../../common/config.py:141 msgid "AES128-CBC" msgstr "AES128-CBC" #: ../../common/config.py:142 msgid "3DES-CBC" msgstr "3DES-CBC" #: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "Blowfish-CBC" #: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "Cast128-CBC" #: ../../common/config.py:145 msgid "AES192-CBC" msgstr "AES192-CBC" #: ../../common/config.py:146 msgid "AES256-CBC" msgstr "AES256-CBC" #: ../../common/config.py:147 msgid "ARCFOUR" msgstr "ARCFOUR" #: ../../common/config.py:153 msgid "Main profile" msgstr "Основной профиль" #: ../../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:289 msgid "Snapshots folder is not valid !" msgstr "Каталог резервных копий задан неверно!" #: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "Вы должны выбрать хотя бы одну папку для резервного копирования!" #: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "Вы не можете добавить папку для резервного копирования!" #: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "Вы не можете включить в архив вложенные каталоги" #: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s не папка !" #: ../../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 "" "Не удаётся произвести запись в: %s\n" "Вы уверены, что имеете право на запись?" #: ../../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" "If not you should disable all automatic backups." msgstr "" "Невозможно найти crontab\n" "Вы уверены, что cron установлен?\n" "Если не установлен, вы должны отключить автоматическое резервное копирование." #: ../../common/config.py:1411 msgid "Failed to write new crontab." msgstr "" #: ../../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/config.py:1517 #, python-format msgid "Schedule udev doesn't work with mode %s" msgstr "" #: ../../common/config.py:1526 #, python-format msgid "Couldn't find UUID for \"%s\"" msgstr "Не удалось найти UUID для \"%s\"" #: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" "\n" "%(error)s" msgstr "" "Не могу смонтировать '%(command)s':\n" "\n" "%(error)s" #: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "Не могу отмонтировать encfs %s" #: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "Не найдена конфигурация для зашифрованной директории." #: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" "\n" "Создать новую зашифрованную папку?" #: ../../common/encfstools.py:171 msgid "Cancel" msgstr "Отмена" #: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "Пожалуйста, подтвердите пароль" #: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "Пароль не подходит" #: ../../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: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 не является членом группы 'fuse'.\n" " Запустите 'sudo adduser %(user)s fuse'. Чтобы применить изменения, выйдите " "и войдите снова.\n" "Выполните 'man backintime' для дальнейших инструкций." #: ../../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:512 ../../common/snapshots.py:1131 #: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "Сделать резервную копию" #: ../../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:259 #, python-format msgid "mountpoint %s not empty." msgstr "точка монтирования %s не пустая." #: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" #: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "Профиль '%(profile)s': Введите пароль для %(mode)s: " #: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Сейчас" #: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "С ОШИБКАМИ!" #: ../../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:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "НЕУСПЕШНО" #: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "" #: ../../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 "" "В Back In Time сменился используемый формат.\n" "\n" "Ваши старые снимки могут быть преобразованы в соответствии с новым форматом. " "Преобразовать?" #: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" "\n" "The 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)" msgstr "" "%s профилей найдено. \n" "\n" "Новый формат сохранений резервных копий поддерживает хранилище различных " "пользователей в одном месте. Хотите ли Вы использовать одинаковое размещение " "для обоих пользователей?\n" "(Программа сможет различать профили)" #: ../../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:918 #, python-format msgid "" "%(snapshots_left)s\n" "of profile %(profile_id)s are not moved to their new location\n" "Do 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" "\n" "If not Back In Time will restore former settings for this profile, however " "cannot continue taking snapshots" msgstr "" #: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" "Back In Time cannot continue taking new snapshots.\n" "\n" "You can manually move the snapshots, \n" "if you are done restart Back In Time to proceed" msgstr "" "Предыдущие настройки профиля %s восстановлены.\n" "Back In Time не может продолжать создавать новые снимки.\n" "\n" "Вы можете вручную переместить снимки, \n" "если вы сделали, что хотели, то перезапустите Back In Time, чтобы продолжить." #: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" msgstr "" "Обновление завершено успешно!\n" "\n" "Back In Time продолжит выполнять резервное копирование по расписанию" #: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" "\n" "If 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" "\n" "If you do not, you will be asked again next time you start Back In Time." msgstr "" "Вы уверены что не хотите переместить старые снимки?\n" "\n" "\n" "Если уверены, вы не увидите эти вопросы при следующем запуске, Back In Time " "продоллит созданиеснимков, но smart-remove больше не может использовать " "старые снимки в учетной записи!\n" "\n" "Если не уверены, Back In Time повторно спросит Вас при следующем запуске." #: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "Back In Time продолжит выполнять резервное копирование по расписанию" #: ../../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 все еще не может продолжить создание новых снимков.\n" "Перезапустите Back In Time для повторения вопросов" #: ../../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 "" "Невозможно найти каталог резервных копий!\n" "Если он находится на съёмном диске, пожалуйста, подключите его." #: ../../common/snapshots.py:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "Ждать %s сек." msgstr[1] "Ждать %s сек." msgstr[2] "Ждать %s сек." #: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "Не удалось создать резервную копию %s !!!" #: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "Окончание" #: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "Не могу создать каталог: %s" #: ../../common/snapshots.py:1217 msgid "..." msgstr "..." #: ../../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:1340 #, python-format msgid "Compare with snapshot %s" msgstr "Сравнить с резервной копией %s" #: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "Создать жёсткие ссылки" #: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "Сохранить конфигурационный файл..." #: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "Сохранить разрешение ..." #: ../../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:1695 ../../common/snapshots.py:1728 #: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "Умное удаление" #: ../../common/snapshots.py:1704 msgid "Remove old snapshots" msgstr "Удалить старые резервные копии" #: ../../common/snapshots.py:1733 msgid "Try to keep min free space" msgstr "Стараться сохранять минимальное свободное место" #: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" #: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "Не могу смонтировать %s" #: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "Не могу отмонтировать sshfs %s" #: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" #: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" #: ../../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:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" #: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "%s не найдено в ssh_known_hosts." #: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" #: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" #: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" #: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" #: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" #: ../../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 "" #: ../../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 "" #: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" 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 "Выйти" #: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 msgid "Help" msgstr "Справка" #: ../../qt4/app.py:122 msgid "Config File Help" msgstr "" #: ../../qt4/app.py:125 msgid "Website" msgstr "Сайт" #: ../../qt4/app.py:127 ../../qt4/app.py:982 msgid "Changelog" msgstr "" #: ../../qt4/app.py:129 msgid "FAQ" msgstr "" #: ../../qt4/app.py:131 msgid "Ask a question" msgstr "Задать вопрос" #: ../../qt4/app.py:133 msgid "Report a bug" msgstr "Сообщить об ошибке" #: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "О программе" #: ../../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 "Восстановить" #: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 #: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "" #: ../../qt4/app.py:194 msgid "Restore and delete new files" msgstr "" #: ../../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 "" #: ../../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 "Ярлыки" #: ../../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" msgstr "" "Невозможно найти каталог резервных копий!\n" "Если он находится на съёмном диске, пожалуйста, подключите его и нажмите ОК" #: ../../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 "Работаю:" #: ../../qt4/app.py:695 msgid "Done, no backup needed" msgstr "Всё сделано, сохранять ничего не надо" #: ../../qt4/app.py:707 msgid "Error:" msgstr "Ошибка:" #: ../../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 "Общее" #: ../../qt4/app.py:778 msgid "Root" msgstr "Корневой каталог" #: ../../qt4/app.py:779 msgid "Home" msgstr "Домашний каталог" #: ../../qt4/app.py:794 msgid "Backup folders" msgstr "Резервные директории" #: ../../qt4/app.py:849 msgid "This is NOT a snapshot but a live view of your local files" msgstr "" #: ../../qt4/app.py:860 ../../qt4/app.py:1476 #, python-format msgid "Last check %s" msgstr "" #: ../../qt4/app.py:928 #, python-format msgid "" "Are you sure you want to remove the snapshot:\n" "%s" msgstr "" "Вы уверены что вы хотите удалить резервную копию:\n" "%s" #: ../../qt4/app.py:1004 #, python-format msgid "" "Backup local files before overwriting or\n" "removing with trailing '%(suffix)s'." msgstr "" #: ../../qt4/app.py:1010 msgid "" "Are you sure you want to remove all newer files in your original folder?" msgstr "" #: ../../qt4/app.py:1014 msgid "" "WARNING: deleting files in filesystem root could break your whole system!!!" msgstr "" #: ../../qt4/app.py:1016 msgid "Files to be restored:" msgstr "" #: ../../qt4/app.py:1031 msgid "Do you really want to restore this files(s):" msgstr "" #: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "Резервная копия: %s" #: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "Посмотреть резервную копию, которая сделана %s" #: ../../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 "Все" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 #: ../../qt4/settingsdialog.py:657 msgid "Errors" msgstr "Ошибки" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 msgid "Changes" msgstr "Изменения" #: ../../qt4/logviewdialog.py:92 msgid "Informations" msgstr "Оповещения" #: ../../qt4/logviewdialog.py:101 msgid "[E] Error, [I] Information, [C] Change" msgstr "[E] Ошибка, [I] Информация, [C] Изменение" #: ../../qt4/logviewdialog.py:104 msgid "decode paths" msgstr "" #: ../../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 "Выполняется..." #: ../../qt4/qt4tools.py:178 msgid "Today" msgstr "Сегодня" #: ../../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 "" #: ../../qt4/settingsdialog.py:68 msgid "Edit" msgstr "Изменить" #: ../../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 "Общие" #: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "Режим:" #: ../../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 "Место для сохранения резервных копий" #: ../../qt4/settingsdialog.py:145 msgid "Folder" msgstr "" #: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "Найстроки SSH" #: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "Хост:" #: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "Порт:" #: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "Пользователь:" #: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "Путь:" #: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" #: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "Приватный ключ:" #: ../../qt4/settingsdialog.py:201 msgid "Key File" msgstr "" #: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 #: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "Пароль" #: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" #: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" #: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "Дополнительно" #: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 msgid "Full snapshot path: " msgstr "" #: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "Расписание" #: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "День:" #: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "День недели:" #: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "Часы:" #: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "Часы:" #: ../../qt4/settingsdialog.py:339 msgid "" "Run Back In Time repeatedly. This is useful if the computer is not running " "regular." msgstr "" #: ../../qt4/settingsdialog.py:344 msgid "Every:" msgstr "" #: ../../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 "" "Запускать Back In Time как только устройство подключено (только раз в " "несколько дней).\n" "Будет запрошен sudo-пароль." #: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Включить" #: ../../qt4/settingsdialog.py:381 msgid "Include files and folders" msgstr "Включить файлы и папки" #: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "Добавить файл" #: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Исключить" #: ../../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 "" #: ../../qt4/settingsdialog.py:425 msgid "Exclude patterns, files or folders" msgstr "Исключить шаблоны, файлы или папки" #: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "Очень рекомендуется:" #: ../../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 "Старее чем:" #: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "Если свободного места меньше чем:" #: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" #: ../../qt4/settingsdialog.py:551 msgid "Run in background on remote Host." msgstr "" #: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "" #: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "" #: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "" #: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "" #: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "" #: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "" #: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "" #: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "" #: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "Не удалять переименованные резервные копии" #: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Опции" #: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Включить уведомления" #: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "Отключить создание резервных копий при работе от батареи" #: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" 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 "" #: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "Игнорировать ошибки (сохранять незавершенные копии)" #: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "Использовать контрольную сумму для обнаружения изменений" #: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "" #: ../../qt4/settingsdialog.py:634 msgid "" "- snapshots are not read-only\n" "- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "Уровень журналирования" #: ../../qt4/settingsdialog.py:656 msgid "None" msgstr "Нет" #: ../../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 "Изменяйте эти параметры, только если вы точно знаете, что делаете!" #: ../../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 "" #: ../../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 "" #: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" #: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "Сохранять ACL" #: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "Сохранять дополнительные атрибуты (xattr)" #: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute 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: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 "" #: ../../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 "Параметры сравнения" #: ../../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 "Показать только различающиеся снимки состояния" #: ../../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 "Удалить" #: ../../qt4/snapshotsdialog.py:148 msgid "Select All" msgstr "Выделить всё" #: ../../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 "" "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 "" backintime-1.1.12/common/po/de.po0000664000175000017500000014264612644767576016123 0ustar germargermar# German translation of Back In Time # Copyright (C) 2008-2009 Oprea Dan # This file is distributed under the same license as the Back In Time package. # msgid "" msgstr "" "Project-Id-Version: Back In Time 0.9.5\n" "Report-Msgid-Bugs-To: \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: 2016-01-11 17:52+0000\n" "X-Generator: Launchpad (build 17881)\n" #: ../../common/configfile.py:352 ../../common/configfile.py:414 #, python-format msgid "Profile \"%s\" already exists !" msgstr "Profil »%s« besteht bereits!" #: ../../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:77 msgid "At every boot/reboot" msgstr "Bei jedem Start/Neustart" #: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Alle 5 Minuten" #: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Alle 10 Minuten" #: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "Alle 30 Minuten" #: ../../common/config.py:81 msgid "Every hour" msgstr "Jede Stunde" #: ../../common/config.py:82 msgid "Every 2 hours" msgstr "Alle 2 Stunden" #: ../../common/config.py:83 msgid "Every 4 hours" msgstr "Alle 4 Stunden" #: ../../common/config.py:84 msgid "Every 6 hours" msgstr "Alle 6 Stunden" #: ../../common/config.py:85 msgid "Every 12 hours" msgstr "Alle 12 Stunden" #: ../../common/config.py:86 msgid "Custom Hours" msgstr "Benutzerdefinierte Stunden" #: ../../common/config.py:87 msgid "Every Day" msgstr "Jeden Tag" #: ../../common/config.py:88 msgid "Repeatedly (anacron)" msgstr "Wiederholend (anacron)" #: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "Sobald die Festplatte angeschlossen ist (udev)" #: ../../common/config.py:90 msgid "Every Week" msgstr "Jede Woche" #: ../../common/config.py:91 msgid "Every Month" msgstr "Jeden Monat" #: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Tag(e)" #: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Woche(n)" #: ../../common/config.py:97 msgid "Year(s)" msgstr "Jahr(e)" #: ../../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 " EXPERIMENTELL!" #: ../../common/config.py:129 msgid "Local" msgstr "Lokal" #: ../../common/config.py:130 msgid "SSH" msgstr "SSH" #: ../../common/config.py:130 ../../common/config.py:132 #: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "Privater SSH-Schlüssel" #: ../../common/config.py:131 msgid "Local encrypted" msgstr "Lokal verschlüsselt" #: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "Verschlüsselung" #: ../../common/config.py:132 msgid "SSH encrypted" msgstr "SSH verschlüsselt" #: ../../common/config.py:135 msgid "Default" msgstr "Standard" #: ../../common/config.py:136 msgid "AES128-CTR" msgstr "AES128-CTR" #: ../../common/config.py:137 msgid "AES192-CTR" msgstr "AES192-CTR" #: ../../common/config.py:138 msgid "AES256-CTR" msgstr "AES256-CTR" #: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "ARCFOUR256" #: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "ARCFOUR128" #: ../../common/config.py:141 msgid "AES128-CBC" msgstr "AES128-CBC" #: ../../common/config.py:142 msgid "3DES-CBC" msgstr "3DES-CBC" #: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "Blowfish-CBC" #: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "Cast128-CBC" #: ../../common/config.py:145 msgid "AES192-CBC" msgstr "AES192-CBC" #: ../../common/config.py:146 msgid "AES256-CBC" msgstr "AES256-CBC" #: ../../common/config.py:147 msgid "ARCFOUR" msgstr "ARCFOUR" #: ../../common/config.py:153 msgid "Main profile" msgstr "Hauptprofil" #: ../../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:289 msgid "Snapshots folder is not valid !" msgstr "Schnappschussordner ist ungültig!" #: ../../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:307 msgid "You can't include backup folder !" msgstr "Sicherungsordner kann nicht hinzugefügt werden!" #: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "Sicherungsunterordner kann nicht hinzugefügt werden!" #: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s ist kein Ordner!" #: ../../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 "" "Nach %s kann nicht geschrieben werden.\n" "Sind Sie sicher, dass Sie Schreibzugriff haben?" #: ../../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 "" "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: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 "" "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:408 ../../qt4/settingsdialog.py:815 msgid "Copy links (dereference symbolic links)" msgstr "Verknüpfungen kopieren (symbolische Verknüpfungen zurückverfolgen)" #: ../../common/config.py:409 ../../qt4/settingsdialog.py:669 msgid "Expert Options" msgstr "Einstellungen für Experten" #: ../../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 "" "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:1407 msgid "" "Can't find crontab.\n" "Are you sure cron is installed ?\n" "If not you should disable all automatic backups." msgstr "" "Crontab wurde nicht gefunden!\n" "Sind Sie sicher, dass cron installiert ist?\n" "Wenn nicht, sollten Sie alle automatischen Sicherungen deaktivieren!" #: ../../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 "" "udev-Regel für Profil %(profile_id)s konnte nicht erstellt werden. DBus-" "Dienst »%(dbus_interface)s« war nicht verfügbar." #: ../../common/config.py:1517 #, python-format msgid "Schedule udev doesn't work with mode %s" msgstr "udev-Zeitplan funktioniert nicht mit Modus %s" #: ../../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 eingehängt werden:\n" "\n" "%(error)s" #: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "encfs %s kann nicht ausgehängt werden" #: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "Einstellungen für den verschlüsselten Ordner nicht gefunden." #: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" "\n" "Soll ein neuer verschlüsselter Ordner erstellt werden?" #: ../../common/encfstools.py:171 msgid "Cancel" msgstr "Abbruch" #: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "Bitte Passwort bestätigen." #: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "Passwort stimmt nicht überein." #: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" "encfs wurde nicht gefunden. Bitte z.B. mit »apt-get install encfs« " "installieren." #: ../../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" "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: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 encfs aktualisieren." #: ../../common/encfstools.py:512 ../../common/snapshots.py:1131 #: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "Schnappschuss erstellen" #: ../../common/mount.py:204 #, python-format msgid "" "Hash collision occurred in hash_id %s. Incrementing global value " "hash_collision and try again." msgstr "" "Prüfsummenkollision in hash_id %s. Der globale Wert für hash_collision wird " "heraufgesetzt und erneut versucht." #: ../../common/mount.py:259 #, python-format msgid "mountpoint %s not empty." msgstr "Einhängepunkt %s ist nicht leer." #: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "Zeitüberschreitung beim Einhängen." #: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "Profil »%(profile)s«: Bitte Passwort für %(mode)s eingeben: " #: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Jetzt" #: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "MIT FEHLERN!" #: ../../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 "" "### 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:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "GESCHEITERT" #: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "Berechtigungen wiederherstellen:" #: ../../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 Sicherungsformat geändert.\n" "\n" "Ihre alten Schnappschüsse können in das neue Format überführt werden. OK?" #: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" "\n" "The 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)" msgstr "" "%s Profile gefunden. \n" "\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: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." #: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" "of profile %(profile_id)s are not moved to their new location\n" "Do 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" "\n" "If not Back In Time will restore former settings for this profile, however " "cannot continue taking snapshots" msgstr "" "%(snapshots_left)s\n" "des Profils %(profile_id)s wurden nicht an den neuen Speicherort " "verschoben.\n" "Möchten Sie fortfahren?\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 vorherigen Zustand dieses Profils " "wieder her, kann aber keine Schnappschüsse mehr anlegen." #: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" "Back In Time cannot continue taking new snapshots.\n" "\n" "You can manually move the snapshots, \n" "if you are done restart Back In Time to proceed" msgstr "" "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 Schnappschüsse manuell verschieben.\n" "Wenn Sie fertig sind, bitte »Back In Time« neustarten." #: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" msgstr "" "Aktualisierung erfolgreich!\n" "\n" "»Back In Time« wird weiterhin, wie geplant, Schnappschüsse erstellen." #: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" "\n" "If 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" "\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 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 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." #: ../../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, Schnappschüsse zu erstellen." #: ../../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 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:1035 msgid "" "Can't find snapshots folder.\n" "If it is on a removable drive please plug it." msgstr "" "Schnappschussordner konnte nicht gefunden werden.\n" "Wenn es ein Wechsellaufwerk ist, bitte verbinden!" #: ../../common/snapshots.py:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "%s Sekunde wird gewartet." msgstr[1] "%s Sekunden wird gewartet." #: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "Schnappschuss %s konnte nicht erstellt werden!" #: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "Finalisierung läuft" #: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "Ordner %s kann nicht erstellt werden." #: ../../common/snapshots.py:1217 msgid "..." msgstr "…" #: ../../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 "Ordner %s kann nicht entfernt werden." #: ../../common/snapshots.py:1340 #, python-format msgid "Compare with snapshot %s" msgstr "Mit Schnappschuss %s vergleichen" #: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "Harte Verknüpfungen erstellen" #: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "Einstellungen speichern …" #: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "Zugriffsrechte speichern …" #: ../../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:1695 ../../common/snapshots.py:1728 #: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "intelligentes Löschen" #: ../../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 "Das Minimum an freiem Speicher frei halten." #: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "Versuchen mindestens %d%% freie Inodes zu behalten." #: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "%s kann nicht eingebunden werden" #: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "sshfs-%s kann nicht ausgehängt werden" #: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" "Privater SSH-Schlüssel konnte nicht entsperrt werden. Passwort falsch oder " "für cron nicht verfügbar." #: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" "sshfs wurde nicht gefunden. Bitte installieren, z.B. durch »apt-get install " "sshfs«." #: ../../common/sshtools.py:278 #, python-format msgid "" "Password-less authentication for %(user)s@%(host)s failed. Look at 'man " "backintime' for further instructions." msgstr "" "Passwortlose Anmeldung von %(user)s@%(host)s fehlgeschlagen. Weitere " "Informationen unter »man backintime«." #: ../../common/sshtools.py:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" "Verschlüsselungsverfahren %(cipher)s fehlgeschlagen für %(host)s:\n" "%(err)s" #: ../../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:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" "Der Pfad existiert auf dem entfernten Rechner, ist aber kein Verzeichnis:\n" "%s" #: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" "Der Pfad auf dem entfernten Rechner ist nicht beschreibbar:\n" "%s" #: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" "Der Pfad auf dem entfernten Rechner ist nicht ausführbar:\n" "%s" #: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" "Erstellen des Pfades auf dem entfernten Rechner fehlgeschlagen:\n" "%s" #: ../../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: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" "%(err)s\n" "Weitere Informationen unter »man backintime«." #: ../../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 gab unbekanntem Fehler " "zurück:\n" "%(err)s\n" "Weitere Informationen unter »man backintime«." #: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "Der entfernte Rechner %s unterstützt keine harten Verknüpfungen" #: ../../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" #: ../../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" #: ../../qt4/app.py:122 msgid "Config File Help" msgstr "Konfigurationsdateihilfe" #: ../../qt4/app.py:125 msgid "Website" msgstr "Internetseite" #: ../../qt4/app.py:127 ../../qt4/app.py:982 msgid "Changelog" msgstr "Änderungsprotokoll" #: ../../qt4/app.py:129 msgid "FAQ" msgstr "Häufige Fragen (FAQ)" #: ../../qt4/app.py:131 msgid "Ask a question" msgstr "Frage stellen" #: ../../qt4/app.py:133 msgid "Report a bug" msgstr "Fehlerbericht einsenden" #: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "Über" #: ../../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" #: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 #: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "Wiederherstellen zu …" #: ../../qt4/app.py:194 msgid "Restore and delete new files" msgstr "Wiederherstellen und neuere Dateien löschen" #: ../../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 "" "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" #: ../../qt4/app.py:224 msgid "View" msgstr "Ansicht" #: ../../qt4/app.py:277 msgid "Shortcuts" msgstr "Verknüpfungen" #: ../../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" #: ../../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 "" "Schnappschussordner wurde nicht gefunden.\n" "Wenn es ein Wechsellaufwerk ist, bitte verbinden und dann OK drücken." #: ../../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?" #: ../../qt4/app.py:667 ../../qt4/app.py:703 msgid "Working:" msgstr "In Bearbeitung:" #: ../../qt4/app.py:695 msgid "Done, no backup needed" msgstr "Fertig, keine Sicherung notwendig." #: ../../qt4/app.py:707 msgid "Error:" msgstr "Fehler:" #: ../../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" #: ../../qt4/app.py:778 msgid "Root" msgstr "Wurzelverzeichnis" #: ../../qt4/app.py:779 msgid "Home" msgstr "Persönlicher Ordner" #: ../../qt4/app.py:794 msgid "Backup folders" msgstr "Sicherungsordner" #: ../../qt4/app.py:849 msgid "This is NOT a snapshot but a live view of your local files" msgstr "" "Das hier ist KEIN Schnappschuss, aber eine aktuellen Ansicht Ihrer lokalen " "Daten." #: ../../qt4/app.py:860 ../../qt4/app.py:1476 #, python-format msgid "Last check %s" msgstr "Letzte Überprüfung %s" #: ../../qt4/app.py:928 #, python-format msgid "" "Are you sure you want to remove the snapshot:\n" "%s" msgstr "" "Sind Sie sicher, dass Sie den Schnappschuss löschen wollen:\n" "%s" #: ../../qt4/app.py:1004 #, python-format 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«." #: ../../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?" #: ../../qt4/app.py:1014 msgid "" "WARNING: deleting files in filesystem root could break your whole system!!!" msgstr "" "ACHTUNG: das Löschen von Dateien im Wurzelverzeichnis kann das komplette " "System zerstören!!!" #: ../../qt4/app.py:1016 msgid "Files to be restored:" msgstr "Wiederherzustellende Dateien:" #: ../../qt4/app.py:1031 msgid "Do you really want to restore this files(s):" msgstr "Möchten Sie wirklich diese Datei(en) wiederherstellen:" #: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "Schnappschuss: %s" #: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "Den Schnappschuss vom %s anzeigen" #: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "Den aktuellen Festplatteninhalt anzeigen" #: ../../qt4/app.py:1268 #, python-format msgid "Restore '%s'" msgstr "»%s« wiederherstellen" #: ../../qt4/app.py:1269 #, python-format msgid "Restore '%s' to ..." msgstr "»%s« wiederherstellen zu …" #: ../../qt4/app.py:1270 #, python-format msgid "Restore '%s' and delete new files" msgstr "»%s« wieder herstellen und neuere Dateien löschen" #: ../../qt4/app.py:1368 ../../qt4/app.py:1385 msgid "Authors" msgstr "Entwickler" #: ../../qt4/app.py:1369 ../../qt4/app.py:1388 msgid "Translations" msgstr "Übersetzungen" #: ../../qt4/app.py:1370 ../../qt4/app.py:1391 msgid "License" msgstr "Lizenz" #: ../../qt4/logviewdialog.py:49 msgid "Last Log View" msgstr "Letzte Protokollansicht" #: ../../qt4/logviewdialog.py:51 msgid "Snapshot Log View" msgstr "Schnappschussprotokollansicht" #: ../../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 "Alle(s)" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 #: ../../qt4/settingsdialog.py:657 msgid "Errors" msgstr "Fehler" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 msgid "Changes" msgstr "Änderungen" #: ../../qt4/logviewdialog.py:92 msgid "Informations" msgstr "Informationen" #: ../../qt4/logviewdialog.py:101 msgid "[E] Error, [I] Information, [C] Change" msgstr "" "[E] Fehler (error), [I] Information (information), [C] Änderung (change)" #: ../../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" #: ../../qt4/qt4systrayicon.py:124 msgid "Working..." msgstr "Wird bearbeitet …" #: ../../qt4/qt4tools.py:178 msgid "Today" msgstr "Heute" #: ../../qt4/qt4tools.py:183 msgid "Yesterday" msgstr "Gestern" #: ../../qt4/qt4tools.py:188 msgid "This week" msgstr "Diese Woche" #: ../../qt4/qt4tools.py:193 msgid "Last week" msgstr "Letzte Woche" #: ../../qt4/restoredialog.py:75 msgid "Show full Log" msgstr "Komplettes Protokoll anzeigen" #: ../../qt4/settingsdialog.py:68 msgid "Edit" msgstr "Bearbeiten" #: ../../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" #: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "Modus:" #: ../../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" #: ../../qt4/settingsdialog.py:145 msgid "Folder" msgstr "Ordner" #: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "SSH-Einstellungen" #: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "Rechner:" #: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "Port:" #: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "Benutzer:" #: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "Pfad:" #: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "Verschlüsselung:" #: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "Privater Schlüssel:" #: ../../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" #: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "Passwort im Schlüsselbund speicheren" #: ../../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)" #: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "Erweitert" #: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 msgid "Full snapshot path: " msgstr "Vollständiger Schnappschusspfad: " #: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "Zeitplan" #: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "Tag:" #: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "Wochentag:" #: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "Stunde:" #: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "Stunden:" #: ../../qt4/settingsdialog.py:339 msgid "" "Run Back In Time repeatedly. This is useful if the computer is not running " "regular." msgstr "" "»Back In Time« wiederholt starten. Das ist nützlich, wenn der Rechner nicht " "immer an ist." #: ../../qt4/settingsdialog.py:344 msgid "Every:" msgstr "Jede:" #: ../../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 "" "»Back In Time« starten, sobald die Festplatte angeschlossen wurde (nur " "einmal alle X Tage).\n" "Sie werden nach Ihrem sudo-Passwort gefragt werden." #: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Einbeziehen" #: ../../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" #: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Ordner hinzufügen" #: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Ausschließen" #: ../../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 "" "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" #: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "Dringend empfohlen:" #: ../../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" #: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "Älter als:" #: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "Falls freier Speicher kleiner als:" #: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "Falls freie Inodes kleiner sind als:" #: ../../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 "Alle Schnappschüsse behalten, der letzten" #: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "Tag(e)" #: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "Einen Schnappschuss pro Tag behalten, der letzten" #: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "Einen Schnappschuss pro Woche behalten, der letzten" #: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "Woche(n)" #: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "Einen Schnappschuss pro Monat behalten, der letzten" #: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "Monat(e)" #: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "Einen Schnappschuss pro Jahr behalten, für alle Jahre" #: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "Benannte Schnappschüsse nicht entfernen" #: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Optionen" #: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Benachrichtigungen aktivieren" #: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "Schnappschüsse im Akkubetrieb deaktivieren" #: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" 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" #: ../../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." #: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "Bei Fehlern fortfahren (unvollständige Schnappschüsse behalten)" #: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "Prüfsumme benutzen, um Änderungen zu erkennen" #: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "Voller rsync-Modus. Könnte schneller sein, aber:" #: ../../qt4/settingsdialog.py:634 msgid "" "- snapshots are not read-only\n" "- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" "- 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." #: ../../qt4/settingsdialog.py:644 msgid "Check for changes (don't take a new snapshot if nothing changed)" msgstr "" "Auf Änderungen prüfen (keinen neuen Schnappschuss erstellen, wenn sich " "nichts geändert hat)." #: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "Protokollierungsstufe:" #: ../../qt4/settingsdialog.py:656 msgid "None" msgstr "Kein(e)" #: ../../qt4/settingsdialog.py:658 msgid "Changes & Errors" msgstr "Änderungen & Fehler" #: ../../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!" #: ../../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." #: ../../qt4/settingsdialog.py:734 msgid "Limit rsync bandwidth usage: " msgstr "rsync-Bandbreite drosseln: " #: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr " kB/s" #: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "ACLs bewahren" #: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "Erweiterte Attribute (xattr) bewahren" #: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute links)" msgstr "" "Unsichere Verknüpfungen kopieren (funktioniert nur mit absoluten " "Verknüpfungen)" #: ../../qt4/settingsdialog.py:834 msgid "Paste additional options to rsync" msgstr "Weitere Optionen zu rsync hinzufügen" #: ../../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\"." #: ../../qt4/settingsdialog.py:847 msgid "Add prefix to SSH commands" msgstr "Präfix zum SSH-Befehl hinzufügen" #: ../../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" #: ../../qt4/settingsdialog.py:858 ../../qt4/settingsdialog.py:1691 msgid "default" msgstr "Standard" #: ../../qt4/settingsdialog.py:875 msgid "Restore Config" msgstr "Konfiguration wiederherstellen" #: ../../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 "Neues Profil" #: ../../qt4/settingsdialog.py:938 msgid "Rename profile" msgstr "Profil umbenennen" #: ../../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?" #: ../../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" #: ../../qt4/settingsdialog.py:1502 msgid "Exclude file" msgstr "Datei ausschließen" #: ../../qt4/settingsdialog.py:1506 msgid "Exclude folder" msgstr "Ordner ausschließen" #: ../../qt4/settingsdialog.py:1525 msgid "Include file" msgstr "Datei einbeziehen" #: ../../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?" #: ../../qt4/settingsdialog.py:1545 msgid "Include folder" msgstr "Ordner einbeziehen" #: ../../qt4/settingsdialog.py:1572 msgid "Are you sure you want to change snapshots folder ?" msgstr "Sind Sie sicher, dass Sie den Schnappschussordner ändern wollen?" #: ../../qt4/settingsdialog.py:1688 msgid "enabled" msgstr "Aktiviert" #: ../../qt4/settingsdialog.py:1690 msgid "disabled" msgstr "Deaktiviert" #: ../../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." #: ../../qt4/snapshotsdialog.py:49 ../../qt4/snapshotsdialog.py:173 msgid "Diff Options" msgstr "Vergleichsoptionen" #: ../../qt4/snapshotsdialog.py:56 msgid "Command:" msgstr "Befehl:" #: ../../qt4/snapshotsdialog.py:60 msgid "Parameters:" msgstr "Parameter:" #: ../../qt4/snapshotsdialog.py:64 msgid "Use %1 and %2 for path parameters" msgstr "%1 und %2 als Pfadparameter verwenden" #: ../../qt4/snapshotsdialog.py:106 msgid "List only different snapshots" msgstr "Nur verschiedene Schnappschüsse auflisten." #: ../../qt4/snapshotsdialog.py:113 msgid "List only equal snapshots to: " msgstr "Nur gleiche Schnappschüsse auflisten zu: " #: ../../qt4/snapshotsdialog.py:123 msgid "Deep check (more accurate, but slow)" msgstr "Gründliche Prüfung (genauer, aber langsamer)" #: ../../qt4/snapshotsdialog.py:144 msgid "Delete" msgstr "Löschen" #: ../../qt4/snapshotsdialog.py:148 msgid "Select All" msgstr "Alles auswählen" #: ../../qt4/snapshotsdialog.py:161 msgid "Diff" msgstr "Unterschiede" #: ../../qt4/snapshotsdialog.py:172 msgid "Go To" msgstr "Gehen zu" #: ../../qt4/snapshotsdialog.py:326 msgid "You can't compare a snapshot to itself" msgstr "Sie können einen Schnappschuss nicht mit sich selbst vergleichen." #: ../../qt4/snapshotsdialog.py:333 #, python-format msgid "Command not found: %s" msgstr "Befehl nicht gefunden: %s" #: ../../qt4/snapshotsdialog.py:354 #, python-format msgid "" "Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" msgstr "" "Soll »%(file)s« wirklich in dem Schnappschuss »%(snapshot_id)s« gelöscht " "werden?\n" #: ../../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" #: ../../qt4/snapshotsdialog.py:359 msgid "WARNING: This can not be revoked!" msgstr "ACHTUNG: Das kann nicht rückgängig gemacht werden!" #: ../../qt4/snapshotsdialog.py:374 #, python-format msgid "Exclude \"%s\" from future snapshots?" msgstr "»%s« von zukünftigen Schnappschüssen ausschließen?" backintime-1.1.12/common/po/updatelaunchpad.sh0000775000175000017500000000115612644767576020662 0ustar germargermar#!/bin/bash #EXCEPTIONS="es.po de.po" EXCEPTIONS="none" TRANSLATIONFILE="launchpad-export.tar.gz" rm -rf tmp mkdir tmp tar xfz $TRANSLATIONFILE -C tmp for popath in `find tmp -name \*.po`; do #echo $popath #lang=`basename $popath | cut -d- -f4` lang=`basename $popath | cut -d- -f2` #echo $lang ignore="0" for exception in $EXCEPTIONS; do if [ $lang = $exception ]; then ignore="1" break fi done if [ $ignore = "1" ]; then echo "Ignore $lang" else if [ -f $lang ]; then echo "rm $lang" rm $lang fi echo "cp $popath $lang" cp $popath $lang fi done rm -rf tmp rm $TRANSLATIONFILE backintime-1.1.12/common/po/it.po0000664000175000017500000013713412644767576016143 0ustar germargermar# Italian translation for backintime # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the backintime package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \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: 2016-01-11 17:52+0000\n" "X-Generator: Launchpad (build 17881)\n" #: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "Impossibile includere la cartella di backup !" #: ../../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:77 msgid "At every boot/reboot" msgstr "Ad ogni avvio/riavvio" #: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Ogni 5 minuti" #: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Ogni 10 minuti" #: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "Ogni 30 minuti" #: ../../common/config.py:81 msgid "Every hour" msgstr "Ogni ora" #: ../../common/config.py:82 msgid "Every 2 hours" msgstr "Ogni 2 ore" #: ../../common/config.py:83 msgid "Every 4 hours" msgstr "Ogni 4 ore" #: ../../common/config.py:84 msgid "Every 6 hours" msgstr "Ogni 6 ore" #: ../../common/config.py:85 msgid "Every 12 hours" msgstr "Ogni 12 ore" #: ../../common/config.py:86 msgid "Custom Hours" msgstr "Orario personalizzato" #: ../../common/config.py:87 msgid "Every Day" msgstr "Ogni giorno" #: ../../common/config.py:88 msgid "Repeatedly (anacron)" msgstr "Ripetutamente (anacron)" #: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "Quando il drive è connesso (udev)" #: ../../common/config.py:90 msgid "Every Week" msgstr "Ogni settimana" #: ../../common/config.py:91 msgid "Every Month" msgstr "Ogni mese" #: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Giorno(i)" #: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Settimana(e)" #: ../../common/config.py:97 msgid "Year(s)" msgstr "Anno(i)" #: ../../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 " SPERIMENTALE!" #: ../../common/config.py:129 msgid "Local" msgstr "Locale" #: ../../common/config.py:130 msgid "SSH" msgstr "SSH" #: ../../common/config.py:130 ../../common/config.py:132 #: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "Chiave privata SSH" #: ../../common/config.py:131 msgid "Local encrypted" msgstr "Cifratura locale" #: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "Cifratura" #: ../../common/config.py:132 msgid "SSH encrypted" msgstr "SSH cifrato" #: ../../common/config.py:135 msgid "Default" msgstr "Predefinito" #: ../../common/config.py:136 msgid "AES128-CTR" msgstr "AES128-CTR" #: ../../common/config.py:137 msgid "AES192-CTR" msgstr "AES192-CTR" #: ../../common/config.py:138 msgid "AES256-CTR" msgstr "AES256-CTR" #: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "ARCFOUR256" #: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "ARCFOUR128" #: ../../common/config.py:141 msgid "AES128-CBC" msgstr "AES128-CBC" #: ../../common/config.py:142 msgid "3DES-CBC" msgstr "3DES-CBC" #: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "Blowfish-CBC" #: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "Cast128-CBC" #: ../../common/config.py:145 msgid "AES192-CBC" msgstr "AES192-CBC" #: ../../common/config.py:146 msgid "AES256-CBC" msgstr "AES256-CBC" #: ../../common/config.py:147 msgid "ARCFOUR" msgstr "ARCFOUR" #: ../../common/config.py:153 msgid "Main profile" msgstr "Profilo principale" #: ../../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:289 msgid "Snapshots folder is not valid !" msgstr "Cartella delle istantanee non valida !" #: ../../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:312 msgid "You can't include a backup sub-folder !" msgstr "Impossibile includere una sottocartella di backup !" #: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s non è una cartella !" #: ../../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" "Are you sure you have write access ?" msgstr "" "Impossibile accedere a: %s\n" "Verificare di avere i permessi in scrittura?" #: ../../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 "" "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: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 "Copia collegamenti (segue i collegamenti simbolici)" #: ../../common/config.py:409 ../../qt4/settingsdialog.py:669 msgid "Expert Options" msgstr "Opzioni per esperti" #: ../../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" "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:1411 msgid "Failed to write new crontab." msgstr "Scrittura del nuovo crontab fallita" #: ../../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/config.py:1517 #, python-format msgid "Schedule udev doesn't work with mode %s" msgstr "La pianificazione udev non funziona con la modalità %s" #: ../../common/config.py:1526 #, python-format msgid "Couldn't find UUID for \"%s\"" msgstr "Impossibile trovare UUID per \"%s\"" #: ../../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:114 #, python-format msgid "Can't unmount encfs %s" msgstr "Non posso smontare encfs %s" #: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "Configurazione per cartella cifrata non trovata" #: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" "\n" "Creo una nuova cartella cifrata?" #: ../../common/encfstools.py:171 msgid "Cancel" msgstr "Annulla" #: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "Per favore conferma la password" #: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "La password non combacia" #: ../../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: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: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:512 ../../common/snapshots.py:1131 #: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "Prendi istantanea" #: ../../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:259 #, python-format msgid "mountpoint %s not empty." msgstr "In punto di montaggio %s non è vuoto" #: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "Timeout nell'acquisizione del lock durante il processo di mount" #: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "Profilo '%(profile)s': Inserisci la password per %(mode)s: " #: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Adesso" #: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "CON ERRORI !" #: ../../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:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "Fallito" #: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "Ripristina permessi:" #: ../../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" "Your old snapshots can be moved according to this new format. OK?" msgstr "" "Back In Time ha cambiato il suo formato di backup.\n" "\n" "Le vecchie istantanee possono essere spostate secondo il nuovo formato. " "Continuare?" #: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" "\n" "The 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)" msgstr "" "Trovati %s profili. \n" "\n" "Il nuovo formato di backup supporta l'archiviazione di differenti utenti e " "profili nella stessa posizione. Vuoi la stessa posizione per entrambi i " "profili? \n" "\n" "(L'applicazione sarà comunque in grado di distinguerli)" #: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" msgstr "" "Nessun profilo trovato. È prima necessario aggiornare i profili, riavviare " "Back In Time" #: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" "of profile %(profile_id)s are not moved to their new location\n" "Do 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" "\n" "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:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" "Back In Time cannot continue taking new snapshots.\n" "\n" "You can manually move the snapshots, \n" "if you are done restart Back In Time to proceed" msgstr "" "Le impostazioni precedenti del profilo %s sono state ripristinate.\n" "Back In Time non può continuare a prendere le istantanee.\n" "\n" "È possibile spostare manualmente le istantanee, \n" "una volta terminato riavviare Back In Time per proseguire" #: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" msgstr "" "Aggiornamento eseguito!\n" "\n" "Back In Time continuerà a prendere istantanee come programmato" #: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" "\n" "If 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" "\n" "If you do not, you will be asked again next time you start Back In Time." msgstr "" "Lasciare veramente le vecchie istantanee nelle loro posizioni?\n" "\n" "\n" "Se si, questa domanda non verrà più mostrata, Back In Time continuerà a " "prendere istantanee, però smart-remove non potrà più prendere le istantanea " "vecchie nell'account!\n" "\n" "Se no, questa domanda verrà mostrata nuovamente all'avvio di Back In Time." #: ../../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: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 non può continuare a prendere istantanee.\n" "Riavviare Back In Time per visualizzare nuovamente le domande" #: ../../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." msgstr "" "Impossibile trovare la cartella delle istantanee.\n" "Se si tratta di un disco rimovibile, collegarlo." #: ../../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:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "Creazione dell'istantanea %s fallita !" #: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "Finalizzazione" #: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "Impossibile creare la cartella: %s" #: ../../common/snapshots.py:1217 msgid "..." msgstr "..." #: ../../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:1340 #, python-format msgid "Compare with snapshot %s" msgstr "Confronta con l'istantanea %s" #: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "Crea hard-links" #: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "Salva il file di configurazione .." #: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "Salva permessi ..." #: ../../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 "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:1704 msgid "Remove old snapshots" msgstr "Rimuovi vecchie istantanee" #: ../../common/snapshots.py:1733 msgid "Try to keep min free space" msgstr "Prova a tenere il minor spazio libero" #: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "Prova a mantenere almeno il %d%% di inode liberi" #: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "Non riesco a montare %s" #: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "Non riesco a smontare sshfs %s" #: ../../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: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: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: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:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "%s non trovato in ssh_known_hosts." #: ../../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:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" "Il percorso remoto non è scrivibile:\n" " %s" #: ../../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:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" "Non ho potuto create il percorso remoto:\n" " %s" #: ../../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: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: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:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "L'host remoto %s non supporta gli hard link" #: ../../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" #: ../../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" #: ../../qt4/app.py:122 msgid "Config File Help" msgstr "Guida al file di configurazione" #: ../../qt4/app.py:125 msgid "Website" msgstr "Sito web" #: ../../qt4/app.py:127 ../../qt4/app.py:982 msgid "Changelog" msgstr "Registro dei cambiamenti" #: ../../qt4/app.py:129 msgid "FAQ" msgstr "Domande frequenti" #: ../../qt4/app.py:131 msgid "Ask a question" msgstr "Poni una domanda" #: ../../qt4/app.py:133 msgid "Report a bug" msgstr "Segnala un bug" #: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "Informazioni" #: ../../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" #: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 #: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "Ripristina a..." #: ../../qt4/app.py:194 msgid "Restore and delete new files" msgstr "Ripristina e cancella i file nuovi" #: ../../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 "" "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" #: ../../qt4/app.py:277 msgid "Shortcuts" msgstr "Collegamenti" #: ../../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" #: ../../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" msgstr "" "Impossibile trovare la cartella delle istantanee.\n" "Se si tratta di un disco rimovibile, collegarlo e premere OK" #: ../../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?" #: ../../qt4/app.py:667 ../../qt4/app.py:703 msgid "Working:" msgstr "Lavoro in corso:" #: ../../qt4/app.py:695 msgid "Done, no backup needed" msgstr "Fatto, nessun backup necessario" #: ../../qt4/app.py:707 msgid "Error:" msgstr "Errore:" #: ../../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" #: ../../qt4/app.py:778 msgid "Root" msgstr "Root" #: ../../qt4/app.py:779 msgid "Home" msgstr "Home" #: ../../qt4/app.py:794 msgid "Backup folders" msgstr "Cartelle di backup" #: ../../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" #: ../../qt4/app.py:860 ../../qt4/app.py:1476 #, python-format msgid "Last check %s" msgstr "Ultimo controllo %s" #: ../../qt4/app.py:928 #, python-format msgid "" "Are you sure you want to remove the snapshot:\n" "%s" msgstr "" "Sei sicuro di voler rimuovere l'istantanea:\n" "%s" #: ../../qt4/app.py:1004 #, python-format 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'." #: ../../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?" #: ../../qt4/app.py:1014 msgid "" "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!" #: ../../qt4/app.py:1016 msgid "Files to be restored:" msgstr "File da ripristinare:" #: ../../qt4/app.py:1031 msgid "Do you really want to restore this files(s):" msgstr "Vuoi veramente ripristinare il/i file seguente/i:" #: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "Istantanea: %s" #: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "Visualizza l'istantanea fatta il %s" #: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "Visualizza il contenuto corrente del disco" #: ../../qt4/app.py:1268 #, python-format msgid "Restore '%s'" msgstr "Ripristina '%s'" #: ../../qt4/app.py:1269 #, python-format msgid "Restore '%s' to ..." msgstr "Riporta '%s' a..." #: ../../qt4/app.py:1270 #, python-format msgid "Restore '%s' and delete new files" msgstr "Ripristina '%s' e cancella i file nuovi" #: ../../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 "" #: ../../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 "Profilo:" #: ../../qt4/logviewdialog.py:81 msgid "Filter:" msgstr "Filtro:" #: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 msgid "All" msgstr "Tutti" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 #: ../../qt4/settingsdialog.py:657 msgid "Errors" msgstr "Errori" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 msgid "Changes" msgstr "Cambiamenti" #: ../../qt4/logviewdialog.py:92 msgid "Informations" msgstr "Informazioni" #: ../../qt4/logviewdialog.py:101 msgid "[E] Error, [I] Information, [C] Change" msgstr "[E] Errore, [I] Informazione, [C] Cambiamento" #: ../../qt4/logviewdialog.py:104 msgid "decode paths" msgstr "decodifica i percorsi" #: ../../qt4/messagebox.py:56 msgid "Error" msgstr "Errore" #: ../../qt4/messagebox.py:62 ../../qt4/messagebox.py:68 msgid "Question" msgstr "Domanda" #: ../../qt4/qt4systrayicon.py:69 msgid "Start BackInTime" msgstr "Avvia BackInTime" #: ../../qt4/qt4systrayicon.py:124 msgid "Working..." msgstr "Lavoro in corso..." #: ../../qt4/qt4tools.py:178 msgid "Today" msgstr "Oggi" #: ../../qt4/qt4tools.py:183 msgid "Yesterday" msgstr "Ieri" #: ../../qt4/qt4tools.py:188 msgid "This week" msgstr "Questa settimana" #: ../../qt4/qt4tools.py:193 msgid "Last week" msgstr "Scorsa settimana" #: ../../qt4/restoredialog.py:75 msgid "Show full Log" msgstr "Mostra il log completo" #: ../../qt4/settingsdialog.py:68 msgid "Edit" msgstr "Modifica" #: ../../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" #: ../../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'." #: ../../qt4/settingsdialog.py:129 ../../qt4/settingsdialog.py:1568 msgid "Where to save snapshots" msgstr "Posizione delle istantanee" #: ../../qt4/settingsdialog.py:145 msgid "Folder" msgstr "Cartella" #: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "Impostazioni di SSH" #: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "Host:" #: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "Porta:" #: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "Utente:" #: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "Percorso:" #: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "Cifratura:" #: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "Chiave privata:" #: ../../qt4/settingsdialog.py:201 msgid "Key File" msgstr "File chiave" #: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 #: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "Password" #: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "Salva la password nel gestore delle password" #: ../../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)" #: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "Avanzate" #: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 msgid "Full snapshot path: " msgstr "Percorso completo per le istantanee: " #: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "Pianifica" #: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "Giorno:" #: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "Giorno della settimana:" #: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "Ora:" #: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "Ore:" #: ../../qt4/settingsdialog.py:339 msgid "" "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." #: ../../qt4/settingsdialog.py:344 msgid "Every:" msgstr "Ogni:" #: ../../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." #: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Includi" #: ../../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" #: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Aggiungi cartella" #: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Escludi" #: ../../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')" #: ../../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:" #: ../../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" #: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "Più vecchi di:" #: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "Se lo spazio libero è minore di:" #: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "Se gli inode liberi sono meno del:" #: ../../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 "Mantieni tutte le istantanee degli ultimi" #: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "giorno/i" #: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "Mantieni un'istantanea al giorno per gli ultimi" #: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "Mantieni un'istantanea alla settimana per le ultime" #: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "Settimana/e" #: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "Mantieni un'istantanea al mese per gli ultimi" #: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "mese/i" #: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "Mantieni un'istantanea all'anno per tutti gli anni" #: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "Non rimuovere le istantanee a cui è stato assegnato un nome" #: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Opzioni" #: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Attivare le notifiche" #: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "Disabilita le istantanee quando si usa la batteria" #: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" msgstr "Impossibile stabilire la modalità di alimentazione" #: ../../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" #: ../../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)" #: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "Usa il checksum per scoprire i cambiamenti" #: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "Modalità rsync completa. Potrebbe essere più veloce ma:" #: ../../qt4/settingsdialog.py:634 msgid "" "- 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...)" #: ../../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)" #: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "Livello dei log" #: ../../qt4/settingsdialog.py:656 msgid "None" msgstr "Nulla" #: ../../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 !" #: ../../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" #: ../../qt4/settingsdialog.py:734 msgid "Limit rsync bandwidth usage: " msgstr "Limita la banda utilizzata da rsync: " #: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr " KB/s" #: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "Preserva ACL" #: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "Preserva attributi estesi (xattr)" #: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute links)" msgstr "" "Copia collegamenti non verificati (funziona sono con collegamenti assoluti)" #: ../../qt4/settingsdialog.py:834 msgid "Paste additional options to rsync" msgstr "Passa opzioni addizionali ad rsync" #: ../../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\"." #: ../../qt4/settingsdialog.py:847 msgid "Add prefix to SSH commands" msgstr "Aggiungi il prefisso ai comandi SSH" #: ../../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" #: ../../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 "" #: ../../qt4/settingsdialog.py:922 msgid "New profile" msgstr "Nuovo profilo" #: ../../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" #: ../../qt4/settingsdialog.py:1489 msgid "Exclude pattern" msgstr "Pattern di esclusione" #: ../../qt4/settingsdialog.py:1502 msgid "Exclude file" msgstr "File esclusi" #: ../../qt4/settingsdialog.py:1506 msgid "Exclude folder" msgstr "Cartelle Escluse" #: ../../qt4/settingsdialog.py:1525 msgid "Include file" msgstr "Includi il file" #: ../../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?" #: ../../qt4/settingsdialog.py:1545 msgid "Include folder" msgstr "Cartella inclusa" #: ../../qt4/settingsdialog.py:1572 msgid "Are you sure you want to change snapshots folder ?" msgstr "Cambiare veramente la cartella delle istantanee?" #: ../../qt4/settingsdialog.py:1688 msgid "enabled" msgstr "abilitato" #: ../../qt4/settingsdialog.py:1690 msgid "disabled" msgstr "disabilitato" #: ../../qt4/settingsdialog.py:1715 msgid "Restore Settings" msgstr "Ripristina impostazioni" #: ../../qt4/settingsdialog.py:1732 msgid " and add your user to group 'fuse'" msgstr " ed aggiungi il tuo utente al gruppo 'fuse'" #: ../../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 "" "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" #: ../../qt4/snapshotsdialog.py:56 msgid "Command:" msgstr "Comando:" #: ../../qt4/snapshotsdialog.py:60 msgid "Parameters:" msgstr "Parametri:" #: ../../qt4/snapshotsdialog.py:64 msgid "Use %1 and %2 for path parameters" msgstr "Usare %1 e %2 per i parametri del percorso" #: ../../qt4/snapshotsdialog.py:106 msgid "List only different snapshots" msgstr "Elenca solo istantanee differenti" #: ../../qt4/snapshotsdialog.py:113 msgid "List only equal snapshots to: " msgstr "Mostra solo istantanee uguali a: " #: ../../qt4/snapshotsdialog.py:123 msgid "Deep check (more accurate, but slow)" msgstr "Controllo approfondito (più accurato ma più lento)" #: ../../qt4/snapshotsdialog.py:144 msgid "Delete" msgstr "Elimina" #: ../../qt4/snapshotsdialog.py:148 msgid "Select All" msgstr "Seleziona tutti" #: ../../qt4/snapshotsdialog.py:161 msgid "Diff" msgstr "Diff" #: ../../qt4/snapshotsdialog.py:172 msgid "Go To" msgstr "Vai a" #: ../../qt4/snapshotsdialog.py:326 msgid "You can't compare a snapshot to itself" msgstr "Non è possibile confrontare un'istantanea con se stessa" #: ../../qt4/snapshotsdialog.py:333 #, python-format msgid "Command not found: %s" msgstr "Comando non trovato: %s" #: ../../qt4/snapshotsdialog.py:354 #, python-format msgid "" "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" #: ../../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" #: ../../qt4/snapshotsdialog.py:359 msgid "WARNING: This can not be revoked!" msgstr "ATTENZIONE: l'operazione è irreversibile" #: ../../qt4/snapshotsdialog.py:374 #, python-format msgid "Exclude \"%s\" from future snapshots?" msgstr "Escludi \"%s\" dalle istantanee future?" backintime-1.1.12/common/po/gl.po0000664000175000017500000014007312644767576016125 0ustar germargermar# Galician translation for backintime # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the backintime package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \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: 2016-01-11 17:52+0000\n" "X-Generator: Launchpad (build 17881)\n" "Language: gl\n" #: ../../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:77 msgid "At every boot/reboot" msgstr "En todos os arranques" #: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Cada 5 minutos" #: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Cada 10 minutos" #: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "Cada 30 minutos" #: ../../common/config.py:81 msgid "Every hour" msgstr "Cada hora" #: ../../common/config.py:82 msgid "Every 2 hours" msgstr "Cada dúas horas" #: ../../common/config.py:83 msgid "Every 4 hours" msgstr "Cada 4 horas" #: ../../common/config.py:84 msgid "Every 6 hours" msgstr "Cada 6 horas" #: ../../common/config.py:85 msgid "Every 12 hours" msgstr "Cada 12 horas" #: ../../common/config.py:86 msgid "Custom Hours" msgstr "Horas personalizadas" #: ../../common/config.py:87 msgid "Every Day" msgstr "Todos os días" #: ../../common/config.py:88 msgid "Repeatedly (anacron)" msgstr "Repetidamente (anacron)" #: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "Cando a unidade se conecte (udev)" #: ../../common/config.py:90 msgid "Every Week" msgstr "Todas as semanas" #: ../../common/config.py:91 msgid "Every Month" msgstr "Todos os meses" #: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "día(s)" #: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "semana(s)" #: ../../common/config.py:97 msgid "Year(s)" msgstr "ano(s)" #: ../../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:129 msgid "Local" msgstr "Local" #: ../../common/config.py:130 msgid "SSH" msgstr "SSH" #: ../../common/config.py:130 ../../common/config.py:132 #: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "Chave privada SSH" #: ../../common/config.py:131 msgid "Local encrypted" msgstr "Cifrado local" #: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "Cifrado" #: ../../common/config.py:132 msgid "SSH encrypted" msgstr "Cifrado SSH" #: ../../common/config.py:135 msgid "Default" msgstr "Predeterminado" #: ../../common/config.py:136 msgid "AES128-CTR" msgstr "AES128-CTR" #: ../../common/config.py:137 msgid "AES192-CTR" msgstr "AES192-CTR" #: ../../common/config.py:138 msgid "AES256-CTR" msgstr "AES256-CTR" #: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "ARCFOUR256" #: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "ARCFOUR128" #: ../../common/config.py:141 msgid "AES128-CBC" msgstr "AES128-CBC" #: ../../common/config.py:142 msgid "3DES-CBC" msgstr "3DES-CBC" #: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "Blowfish-CBC" #: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "Cast128-CBC" #: ../../common/config.py:145 msgid "AES192-CBC" msgstr "AES192-CBC" #: ../../common/config.py:146 msgid "AES256-CBC" msgstr "AES256-CBC" #: ../../common/config.py:147 msgid "ARCFOUR" msgstr "ARCFOUR" #: ../../common/config.py:153 msgid "Main profile" msgstr "Perfil principal" #: ../../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:289 msgid "Snapshots folder is not valid !" msgstr "O cartafol das copias de seguranza non é correcto." #: ../../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:307 msgid "You can't include backup folder !" msgstr "Non pode incluír un cartafol da copia de seguranza." #: ../../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:371 #, python-format msgid "%s is not a folder !" msgstr "%s non é un cartafol." #: ../../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" "Are you sure you have write access ?" msgstr "" "Non se pode escribir en:%s\n" "Está certo de ter acceso á escritura?" #: ../../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 "" "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: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 "" "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: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:409 ../../qt4/settingsdialog.py:669 msgid "Expert Options" msgstr "Opcións avanzadas" #: ../../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:1407 msgid "" "Can't find crontab.\n" "Are you sure cron is installed ?\n" "If not you should disable all automatic backups." 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." #: ../../common/config.py:1411 msgid "Failed to write new crontab." msgstr "Produciuse un fallo escribindo no 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 "" "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/config.py:1517 #, python-format msgid "Schedule udev doesn't work with mode %s" msgstr "O programador udev non funciona en modo %s" #: ../../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:104 #, python-format msgid "" "Can't mount '%(command)s':\n" "\n" "%(error)s" msgstr "" "Non é posible montar '%(command)s':\n" "\n" "%(error)s" #: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "Non é posible desmontar encfs %s" #: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "Non se atopou a configuración do cartafol cifrado." #: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" "\n" "Desexa crear un novo cartafol cifrado?" #: ../../common/encfstools.py:171 msgid "Cancel" msgstr "Cancelar" #: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "Confirme o contrasinal" #: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "O contrasinal non coincide" #: ../../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: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 é membro do grupo 'fuse'.\n" " Execute 'sudo adduser %(user)s fuse'. Para aplicar os trocos reinicie a " "sesión.\n" "Vexa 'man backintime' para máis instrucións." #: ../../common/encfstools.py:211 msgid "" "encfs version 1.7.2 and before has a bug with option --reverse. Please " "update encfs" msgstr "" "A versión de encfs 1.7.2 e anteriores teñen un fallo coa opción --reverse. " "Actualice encfs" #: ../../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:204 #, python-format msgid "" "Hash collision occurred in hash_id %s. Incrementing global value " "hash_collision and try again." msgstr "" "Produciuse un conflito de hash no hash_id %s. Incremente o valor global " "hash_collision e probe de novo." #: ../../common/mount.py:259 #, python-format msgid "mountpoint %s not empty." msgstr "o punto de montaxe %s non está libre." #: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "Tempo de espera do bloqueo do proceso de montaxe" #: ../../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:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Agora" #: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "HAI ERROS" #: ../../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 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:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "FALLOU" #: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "Restabelecer permisos:" #: ../../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" "Your old snapshots can be moved according to this new format. OK?" msgstr "" "Back In Time cambiou o formato das copias de seguranza.\n" "\n" "As copias de seguranza vellas poden migrar a este formato. Está de acordo?" #: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" "\n" "The 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)" msgstr "" "%s perfís non atopados. \n" "\n" "O novo formato de copia de seguranza admite a almacenaxe de perfís e " "usuarios diferentes na mesma localización. Quere a mesma localización para " "ambos os perfís?\n" "\n" "(O programa será quen de diferencialos)" #: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" msgstr "" "Non se atoparon perfís. Terá que actualizar os perfís primeiro, reinicie o " "Back In Time" #: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" "of profile %(profile_id)s are not moved to their new location\n" "Do 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" "\n" "If not Back In Time will restore former settings for this profile, however " "cannot continue taking snapshots" msgstr "" "%(snapshots_left)s\n" "\n" "do perfil %(profile_id)s non se moverán á súa nova localización.\n" "\n" "Desexa continuar?\n" "\n" "(Back In Time seguirá facendo copias de seguranza pero as restantes non se " "tomarán en conta para a eliminación automática)\n" "\n" "Senón Back In Time restablecerá a configuración antiga deste perfil pero " "non continuará facendo copias." #: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" "Back In Time cannot continue taking new snapshots.\n" "\n" "You can manually move the snapshots, \n" "if you are done restart Back In Time to proceed" msgstr "" "Restauráronse os axustes antigos do perfil %s.\n" "Back In Time non pode seguir facendo copias de seguranza novas.\n" "\n" "Pode mover as copias manualmente,\n" "se xa rematou, reinicie o aplicativo para continuar." #: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" msgstr "" "Actualizouse correctamente\n" "\n" "Back In Time continuará facendo as copias de seguranza na forma programada" #: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" "\n" "If 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" "\n" "If you do not, you will be asked again next time you start Back In Time." msgstr "" "Está certo que non desexa mover as copias antigas?\n" "\n" "\n" "En caso afirmativo non volverá ver estas preguntas de novo. O aplicativo " "continuará facendo as copias pero a eliminación intelixente non poderá " "acceder ás copias antigas da conta.\n" "\n" "En caso negativo preguntaráselle de novo a próxima vez que inicie o programa." #: ../../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: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 aínda non pode facer unha copia de seguranza.\n" "Reinicie o aplicativo para ver as preguntas de novo" #: ../../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." msgstr "" "Non se pode atopar o cartafol de copias de seguranza.\n" "Se está nun dispositivo extraíbel débeo conectar." #: ../../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:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "Produciuse un fallo durante a copia %s." #: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "Rematando" #: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "Non se pode crear o cartafol: %s" #: ../../common/snapshots.py:1217 msgid "..." msgstr "..." #: ../../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:1340 #, python-format msgid "Compare with snapshot %s" msgstr "comparando coa copia %s" #: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "creando ligazóns físicas" #: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "gardando o ficheiro de config ..." #: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "gardando os permisos..." #: ../../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:1695 ../../common/snapshots.py:1728 #: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "Eliminación intelixente" #: ../../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:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "Tentar manter un mínimo de %d%% inodos libres" #: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "Non é posible montar %s" #: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "Non é posible desmontar sshfs %s" #: ../../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: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:278 #, python-format msgid "" "Password-less authentication for %(user)s@%(host)s failed. Look at 'man " "backintime' for further instructions." msgstr "" "Fallou a autenticación de %(user)s@%(host)s. Vexa 'man backintime' para máis " "instrucións." #: ../../common/sshtools.py:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" "Fallou o cifrado %(cipher)s para %(host)s:\n" "%(err)s" #: ../../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:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" "A ruta remota existe pero non é un cartafol:\n" " %s" #: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" "A ruta remota non permite a escritura:\n" " %s" #: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" "A ruta remota non é executable:\n" " %s" #: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" "Non foi posible crear a ruta remota:\n" " %s" #: ../../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: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 servidor remoto %(host)s non permite utilizar '%(command)s':\n" "%(err)s\n" "Mire 'man backintime' para máis instrucións" #: ../../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 "" "As ordes de comprobación no servidor %(host)s devolveron un erro " "descoñecido:\n" "%(err)s\n" "Mire 'man backintime' para máis instrucións" #: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "O servidor remoto %s non admite hardlinks" #: ../../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" #: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 msgid "Help" msgstr "Axuda" #: ../../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" #: ../../qt4/app.py:127 ../../qt4/app.py:982 msgid "Changelog" msgstr "Rexistro de cambios" #: ../../qt4/app.py:129 msgid "FAQ" msgstr "FAQ" #: ../../qt4/app.py:131 msgid "Ask a question" msgstr "Fai unha pregunta" #: ../../qt4/app.py:133 msgid "Report a bug" msgstr "Informar dun erro" #: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "Sobre" #: ../../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" #: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 #: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "Restablecer como ..." #: ../../qt4/app.py:194 msgid "Restore and delete new files" msgstr "Restabelecer e eliminar os ficheiros novos" #: ../../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 "" "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" #: ../../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" #: ../../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?" #: ../../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 "" "Non se pode atopar o cartafol de copias de seguranza.\n" "Se está nun dispositivo extraíbel débeo conectar e premer «Aceptar»" #: ../../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?" #: ../../qt4/app.py:667 ../../qt4/app.py:703 msgid "Working:" msgstr "En proceso:" #: ../../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" #: ../../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" #: ../../qt4/app.py:778 msgid "Root" msgstr "Root" #: ../../qt4/app.py:779 msgid "Home" msgstr "Inicio" #: ../../qt4/app.py:794 msgid "Backup folders" msgstr "Cartafoles para copiar" #: ../../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" #: ../../qt4/app.py:860 ../../qt4/app.py:1476 #, python-format msgid "Last check %s" msgstr "Última comprobación %s" #: ../../qt4/app.py:928 #, 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" #: ../../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." #: ../../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?" #: ../../qt4/app.py:1014 msgid "" "WARNING: deleting files in filesystem root could break your whole system!!!" msgstr "" "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:" #: ../../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" #: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "Ver a copia de seguranza feita en %s" #: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "Ver o contido do disco actual" #: ../../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" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 #: ../../qt4/settingsdialog.py:657 msgid "Errors" msgstr "Erros" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 msgid "Changes" msgstr "Cambios" #: ../../qt4/logviewdialog.py:92 msgid "Informations" msgstr "Informacións" #: ../../qt4/logviewdialog.py:101 msgid "[E] Error, [I] Information, [C] Change" msgstr "[E] Erro, [I] Información, [C] Cambio" #: ../../qt4/logviewdialog.py:104 msgid "decode paths" msgstr "decodificar rutas" #: ../../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" #: ../../qt4/qt4systrayicon.py:124 msgid "Working..." msgstr "En proceso..." #: ../../qt4/qt4tools.py:178 msgid "Today" msgstr "Hoxe" #: ../../qt4/qt4tools.py:183 msgid "Yesterday" msgstr "Onte" #: ../../qt4/qt4tools.py:188 msgid "This week" msgstr "Esta semana" #: ../../qt4/qt4tools.py:193 msgid "Last week" msgstr "A semana pasada" #: ../../qt4/restoredialog.py:75 msgid "Show full Log" msgstr "Mostrar o rexistro completo" #: ../../qt4/settingsdialog.py:68 msgid "Edit" msgstr "Editar" #: ../../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" #: ../../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 "" "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" #: ../../qt4/settingsdialog.py:145 msgid "Folder" msgstr "Cartafol" #: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "Axustes SSH" #: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "Servidor:" #: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "Porto:" #: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "Usuario:" #: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "Ruta:" #: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "Cifrado:" #: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "Chave privada:" #: ../../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" #: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "Gardar o contrasinal no chaveiro" #: ../../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)" #: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "Avanzado" #: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 msgid "Full snapshot path: " msgstr "Ruta completa á copia: " #: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "Programar" #: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "Día:" #: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "Día da semana:" #: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "Hora:" #: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "Horas:" #: ../../qt4/settingsdialog.py:339 msgid "" "Run Back In Time repeatedly. This is useful if the computer is not running " "regular." msgstr "" "Executar Back In Time repetidamente. Útil se o computador non ten un " "funcionamento regular." #: ../../qt4/settingsdialog.py:344 msgid "Every:" msgstr "Cada:" #: ../../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 "" "Executar Back In Time cando o dispositivo estea conectado (só unha vez cada " "X días).\n" "Pediráselle o seu contrasinal para sudo." #: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Incluír" #: ../../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" #: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Engadir cartafol" #: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Excluír" #: ../../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 "" "Aviso: os comodíns ('foo*', '[fF]oo', 'fo?') ignoraranse no modo 'SSH " "cifrado'.\n" "Unicamente se permiten asteriscos ('foo/*', 'foo/**/bar')" #: ../../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:" #: ../../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" #: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "Máis de:" #: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "Se o espazo libre é menor de:" #: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "Se os inodos libres son menos de:" #: ../../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 dos últimos" #: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "día(s)" #: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "Conservar unha copia diaria dos últimos" #: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "Conservar unha copia semanal das últimas" #: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "semana(s)" #: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "Conservar unha copia mensual dos últimos" #: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "mes(es)" #: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "Conservar unha copia de seguranza anual" #: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "Non eliminar as copia de seguranzas con nome" #: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Opcións" #: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Activar as notificacións" #: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "Desactivar as copias de seguranza cando estea en modo batería" #: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" msgstr "O estado da alimentación non está dispoñíbel no sistema" #: ../../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" #: ../../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)" #: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "Usar a suma de comprobación para detectar cambios" #: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "Modo rsync completo. Pode ser máis rápido pero:" #: ../../qt4/settingsdialog.py:634 msgid "" "- 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...)" #: ../../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)" #: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "Nivel de rexistro:" #: ../../qt4/settingsdialog.py:656 msgid "None" msgstr "Ningún" #: ../../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" #: ../../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." #: ../../qt4/settingsdialog.py:734 msgid "Limit rsync bandwidth usage: " msgstr "Limitar o uso do largo de banda para rsync: " #: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr " KB/seg" #: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "Preservar permisos (ACL)" #: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "Preservar os atributos estendidos (xattr)" #: ../../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)" #: ../../qt4/settingsdialog.py:834 msgid "Paste additional options to rsync" msgstr "Engadir as opcións adicionais a rsync" #: ../../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\"." #: ../../qt4/settingsdialog.py:847 msgid "Add prefix to SSH commands" msgstr "Engadir prefixo ás ordes de SSH" #: ../../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" #: ../../qt4/settingsdialog.py:858 ../../qt4/settingsdialog.py:1691 msgid "default" msgstr "predeterminado" #: ../../qt4/settingsdialog.py:875 msgid "Restore Config" msgstr "Restabelecer Config" #: ../../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?" #: ../../qt4/settingsdialog.py:922 msgid "New profile" msgstr "Perfil novo" #: ../../qt4/settingsdialog.py:938 msgid "Rename profile" msgstr "Renomear o perfil" #: ../../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\" ?" #: ../../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" #: ../../qt4/settingsdialog.py:1489 msgid "Exclude pattern" msgstr "Excluír o patrón" #: ../../qt4/settingsdialog.py:1502 msgid "Exclude file" msgstr "Excluír o ficheiro" #: ../../qt4/settingsdialog.py:1506 msgid "Exclude folder" msgstr "Excluír o cartafol" #: ../../qt4/settingsdialog.py:1525 msgid "Include file" msgstr "Incluír o ficheiro" #: ../../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» é 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?" #: ../../qt4/settingsdialog.py:1545 msgid "Include folder" msgstr "Incluír o cartafol" #: ../../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?" #: ../../qt4/settingsdialog.py:1688 msgid "enabled" msgstr "activado" #: ../../qt4/settingsdialog.py:1690 msgid "disabled" msgstr "desactivado" #: ../../qt4/settingsdialog.py:1715 msgid "Restore Settings" msgstr "Restabelecer a configuración" #: ../../qt4/settingsdialog.py:1732 msgid " and add your user to group 'fuse'" msgstr " e engadir o seu usuario ao grupo «fuse»" #: ../../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 "" "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." #: ../../qt4/settingsdialog.py:1794 ../../qt4/settingsdialog.py:1854 msgid "No config found" msgstr "Non se atopou config" #: ../../qt4/snapshotsdialog.py:49 ../../qt4/snapshotsdialog.py:173 msgid "Diff Options" msgstr "Opcións de comparación" #: ../../qt4/snapshotsdialog.py:56 msgid "Command:" msgstr "Orde:" #: ../../qt4/snapshotsdialog.py:60 msgid "Parameters:" msgstr "Parámetros:" #: ../../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" #: ../../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 "" "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" #: ../../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" #: ../../qt4/snapshotsdialog.py:359 msgid "WARNING: This can not be revoked!" msgstr "AVISO: isto non se pode revogar" #: ../../qt4/snapshotsdialog.py:374 #, python-format msgid "Exclude \"%s\" from future snapshots?" msgstr "Quere excluír \"%s\" de copias de seguranza futuras?" backintime-1.1.12/common/po/sl.po0000664000175000017500000010420312644767576016134 0ustar germargermarmsgid "" msgstr "" "Project-Id-Version: Back In Time 0.9.10\n" "Report-Msgid-Bugs-To: \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" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "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: 2016-01-11 17:52+0000\n" "X-Generator: Launchpad (build 17881)\n" "X-Poedit-Country: SLOVENIA\n" "X-Poedit-Language: Slovenian\n" #: ../../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:77 msgid "At every boot/reboot" msgstr "Ob vsakem zagonu/ponovnem zagonu" #: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Vsakih 5 minut" #: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Vsakih 10 minut" #: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "" #: ../../common/config.py:81 msgid "Every hour" msgstr "" #: ../../common/config.py:82 msgid "Every 2 hours" msgstr "" #: ../../common/config.py:83 msgid "Every 4 hours" msgstr "" #: ../../common/config.py:84 msgid "Every 6 hours" msgstr "" #: ../../common/config.py:85 msgid "Every 12 hours" msgstr "" #: ../../common/config.py:86 msgid "Custom Hours" msgstr "" #: ../../common/config.py:87 msgid "Every Day" msgstr "Vsak dan" #: ../../common/config.py:88 msgid "Repeatedly (anacron)" msgstr "" #: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "" #: ../../common/config.py:90 msgid "Every Week" msgstr "Vsak teden" #: ../../common/config.py:91 msgid "Every Month" msgstr "Vsak mesec" #: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Dni" #: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Tednov" #: ../../common/config.py:97 msgid "Year(s)" msgstr "Let" #: ../../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:129 msgid "Local" msgstr "" #: ../../common/config.py:130 msgid "SSH" msgstr "" #: ../../common/config.py:130 ../../common/config.py:132 #: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "" #: ../../common/config.py:131 msgid "Local encrypted" msgstr "" #: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "" #: ../../common/config.py:132 msgid "SSH encrypted" msgstr "" #: ../../common/config.py:135 msgid "Default" msgstr "" #: ../../common/config.py:136 msgid "AES128-CTR" msgstr "" #: ../../common/config.py:137 msgid "AES192-CTR" msgstr "" #: ../../common/config.py:138 msgid "AES256-CTR" msgstr "" #: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "" #: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "" #: ../../common/config.py:141 msgid "AES128-CBC" msgstr "" #: ../../common/config.py:142 msgid "3DES-CBC" msgstr "" #: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "" #: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "" #: ../../common/config.py:145 msgid "AES192-CBC" msgstr "" #: ../../common/config.py:146 msgid "AES256-CBC" msgstr "" #: ../../common/config.py:147 msgid "ARCFOUR" msgstr "" #: ../../common/config.py:153 msgid "Main profile" msgstr "Glavni profil" #: ../../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:289 msgid "Snapshots folder is not valid !" msgstr "" #: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "" #: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "" #: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "" #: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s ni mapa !" #: ../../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: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" "If not you should disable all automatic backups." msgstr "" #: ../../common/config.py:1411 msgid "Failed to write new crontab." msgstr "" #: ../../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/config.py:1517 #, python-format msgid "Schedule udev doesn't work with mode %s" msgstr "" #: ../../common/config.py:1526 #, python-format msgid "Couldn't find UUID for \"%s\"" msgstr "" #: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" "\n" "%(error)s" msgstr "" #: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "" #: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "" #: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" #: ../../common/encfstools.py:171 msgid "Cancel" msgstr "" #: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "" #: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "" #: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" #: ../../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 "" #: ../../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:512 ../../common/snapshots.py:1131 #: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "Naredi posnetek" #: ../../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:259 #, python-format msgid "mountpoint %s not empty." msgstr "" #: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" #: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" #: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Zdaj" #: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "" #: ../../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:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "" #: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "" #: ../../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:868 #, python-format msgid "" "%s profiles found. \n" "\n" "The 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)" msgstr "" #: ../../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:918 #, python-format msgid "" "%(snapshots_left)s\n" "of profile %(profile_id)s are not moved to their new location\n" "Do 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" "\n" "If not Back In Time will restore former settings for this profile, however " "cannot continue taking snapshots" msgstr "" #: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" "Back In Time cannot continue taking new snapshots.\n" "\n" "You can manually move the snapshots, \n" "if you are done restart Back In Time to proceed" msgstr "" #: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" msgstr "" #: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" "\n" "If 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" "\n" "If you do not, you will be asked again next time you start Back In Time." msgstr "" #: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "" #: ../../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: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:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "" msgstr[1] "" #: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "" #: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "" #: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "" #: ../../common/snapshots.py:1217 msgid "..." msgstr "" #: ../../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:1340 #, python-format msgid "Compare with snapshot %s" msgstr "" #: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "" #: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "" #: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "" #: ../../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:1695 ../../common/snapshots.py:1728 #: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "" #: ../../common/snapshots.py:1704 msgid "Remove old snapshots" msgstr "" #: ../../common/snapshots.py:1733 msgid "Try to keep min free space" msgstr "" #: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" #: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "" #: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "" #: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" #: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" #: ../../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:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" #: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" #: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" #: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" #: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" #: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" #: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" #: ../../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 "" #: ../../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 "" #: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "" #: ../../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" #: ../../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č" #: ../../qt4/app.py:122 msgid "Config File Help" msgstr "" #: ../../qt4/app.py:125 msgid "Website" msgstr "" #: ../../qt4/app.py:127 ../../qt4/app.py:982 msgid "Changelog" msgstr "" #: ../../qt4/app.py:129 msgid "FAQ" msgstr "" #: ../../qt4/app.py:131 msgid "Ask a question" msgstr "" #: ../../qt4/app.py:133 msgid "Report a bug" msgstr "" #: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "O programu" #: ../../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" #: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 #: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "" #: ../../qt4/app.py:194 msgid "Restore and delete new files" msgstr "" #: ../../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 "" #: ../../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 "" #: ../../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" 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 "" #: ../../qt4/app.py:667 ../../qt4/app.py:703 msgid "Working:" msgstr "" #: ../../qt4/app.py:695 msgid "Done, no backup needed" msgstr "Narejeno, varnostna kopija ni potrebna" #: ../../qt4/app.py:707 msgid "Error:" msgstr "" #: ../../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" #: ../../qt4/app.py:778 msgid "Root" msgstr "Koren" #: ../../qt4/app.py:779 msgid "Home" msgstr "Dom" #: ../../qt4/app.py:794 msgid "Backup folders" msgstr "" #: ../../qt4/app.py:849 msgid "This is NOT a snapshot but a live view of your local files" msgstr "" #: ../../qt4/app.py:860 ../../qt4/app.py:1476 #, python-format msgid "Last check %s" msgstr "" #: ../../qt4/app.py:928 #, python-format msgid "" "Are you sure you want to remove the snapshot:\n" "%s" msgstr "" "Res želite zbrisati posnetek:\n" "%s" #: ../../qt4/app.py:1004 #, python-format msgid "" "Backup local files before overwriting or\n" "removing with trailing '%(suffix)s'." msgstr "" #: ../../qt4/app.py:1010 msgid "" "Are you sure you want to remove all newer files in your original folder?" msgstr "" #: ../../qt4/app.py:1014 msgid "" "WARNING: deleting files in filesystem root could break your whole system!!!" msgstr "" #: ../../qt4/app.py:1016 msgid "Files to be restored:" msgstr "" #: ../../qt4/app.py:1031 msgid "Do you really want to restore this files(s):" msgstr "" #: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "" #: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "" #: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "" #: ../../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 "" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 #: ../../qt4/settingsdialog.py:657 msgid "Errors" msgstr "" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 msgid "Changes" msgstr "" #: ../../qt4/logviewdialog.py:92 msgid "Informations" msgstr "" #: ../../qt4/logviewdialog.py:101 msgid "[E] Error, [I] Information, [C] Change" msgstr "" #: ../../qt4/logviewdialog.py:104 msgid "decode paths" msgstr "" #: ../../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 "" #: ../../qt4/qt4tools.py:178 msgid "Today" msgstr "Danes" #: ../../qt4/qt4tools.py:183 msgid "Yesterday" msgstr "Včeraj" #: ../../qt4/qt4tools.py:188 msgid "This week" msgstr "Ta teden" #: ../../qt4/qt4tools.py:193 msgid "Last week" msgstr "Prejšnji teden" #: ../../qt4/restoredialog.py:75 msgid "Show full Log" msgstr "" #: ../../qt4/settingsdialog.py:68 msgid "Edit" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "" #: ../../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" #: ../../qt4/settingsdialog.py:145 msgid "Folder" msgstr "" #: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" #: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "" #: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "" #: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "" #: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" #: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" #: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "" #: ../../qt4/settingsdialog.py:201 msgid "Key File" msgstr "" #: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 #: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "" #: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" #: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" #: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "" #: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 msgid "Full snapshot path: " msgstr "" #: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "" #: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "" #: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "" #: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "" #: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "" #: ../../qt4/settingsdialog.py:339 msgid "" "Run Back In Time repeatedly. This is useful if the computer is not running " "regular." msgstr "" #: ../../qt4/settingsdialog.py:344 msgid "Every:" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "" #: ../../qt4/settingsdialog.py:381 msgid "Include files and folders" msgstr "" #: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "" #: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "" #: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:425 msgid "Exclude patterns, files or folders" msgstr "" #: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "" #: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "" #: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" #: ../../qt4/settingsdialog.py:551 msgid "Run in background on remote Host." msgstr "" #: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "" #: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "" #: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "" #: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "" #: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "" #: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "" #: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "" #: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "" #: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "Ne odstranjuj posnetkov z imenom" #: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "" #: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "" #: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "" #: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" 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 "" #: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "" #: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "" #: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "" #: ../../qt4/settingsdialog.py:634 msgid "" "- snapshots are not read-only\n" "- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "" #: ../../qt4/settingsdialog.py:656 msgid "None" msgstr "" #: ../../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 "" #: ../../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 "" #: ../../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 "" #: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" #: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "" #: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "" #: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute 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 "" #: ../../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 "Izključitveni vzorec" #: ../../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 "" #: ../../qt4/settingsdialog.py:1545 msgid "Include folder" msgstr "Vključi imenik" #: ../../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 "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 "" #: ../../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 "" #: ../../qt4/snapshotsdialog.py:148 msgid "Select All" msgstr "" #: ../../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 "" "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 "" backintime-1.1.12/common/po/pl.po0000664000175000017500000011471112644767576016136 0ustar germargermar# Polish translation for backintime # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the backintime package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \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: 2016-01-11 17:52+0000\n" "X-Generator: Launchpad (build 17881)\n" #: ../../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:77 msgid "At every boot/reboot" msgstr "Przy każdym uruchomieniu / restarcie" #: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Co 5 minut" #: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Co 10 minut" #: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "" #: ../../common/config.py:81 msgid "Every hour" msgstr "" #: ../../common/config.py:82 msgid "Every 2 hours" msgstr "" #: ../../common/config.py:83 msgid "Every 4 hours" msgstr "" #: ../../common/config.py:84 msgid "Every 6 hours" msgstr "" #: ../../common/config.py:85 msgid "Every 12 hours" msgstr "" #: ../../common/config.py:86 msgid "Custom Hours" msgstr "" #: ../../common/config.py:87 msgid "Every Day" msgstr "Codziennie" #: ../../common/config.py:88 msgid "Repeatedly (anacron)" msgstr "" #: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "" #: ../../common/config.py:90 msgid "Every Week" msgstr "Co tydzień" #: ../../common/config.py:91 msgid "Every Month" msgstr "Co miesiąc" #: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Dni" #: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Tygodni" #: ../../common/config.py:97 msgid "Year(s)" msgstr "Lat" #: ../../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:129 msgid "Local" msgstr "" #: ../../common/config.py:130 msgid "SSH" msgstr "" #: ../../common/config.py:130 ../../common/config.py:132 #: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "" #: ../../common/config.py:131 msgid "Local encrypted" msgstr "" #: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "" #: ../../common/config.py:132 msgid "SSH encrypted" msgstr "" #: ../../common/config.py:135 msgid "Default" msgstr "" #: ../../common/config.py:136 msgid "AES128-CTR" msgstr "" #: ../../common/config.py:137 msgid "AES192-CTR" msgstr "" #: ../../common/config.py:138 msgid "AES256-CTR" msgstr "" #: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "" #: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "" #: ../../common/config.py:141 msgid "AES128-CBC" msgstr "" #: ../../common/config.py:142 msgid "3DES-CBC" msgstr "" #: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "" #: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "" #: ../../common/config.py:145 msgid "AES192-CBC" msgstr "" #: ../../common/config.py:146 msgid "AES256-CBC" msgstr "" #: ../../common/config.py:147 msgid "ARCFOUR" msgstr "" #: ../../common/config.py:153 msgid "Main profile" msgstr "Profil główny" #: ../../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:289 msgid "Snapshots folder is not valid !" msgstr "Katalog migawek jest nieprawidłowy!" #: ../../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:307 msgid "You can't include backup folder !" msgstr "Nie możesz dołączyć katalogu z kopią zapasową!" #: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "Nie można dołączyć podkatalogu backup!" #: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s nie jest katalogiem!" #: ../../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 "" "Nie mogę zapisać do: %s\n" "Jesteś pewien, że posiadasz uprawnienia do jego zapisu?" #: ../../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 "Kopiowanie linków (odwołanie linków symbolicznych)" #: ../../common/config.py:409 ../../qt4/settingsdialog.py:669 msgid "Expert Options" msgstr "Opcje zaawansowane" #: ../../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" "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:1411 msgid "Failed to write new crontab." msgstr "" #: ../../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/config.py:1517 #, python-format msgid "Schedule udev doesn't work with mode %s" msgstr "" #: ../../common/config.py:1526 #, python-format msgid "Couldn't find UUID for \"%s\"" msgstr "" #: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" "\n" "%(error)s" msgstr "" #: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "" #: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "" #: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" #: ../../common/encfstools.py:171 msgid "Cancel" msgstr "" #: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "" #: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "" #: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" #: ../../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 "" #: ../../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:512 ../../common/snapshots.py:1131 #: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "Utwórz migawkę" #: ../../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:259 #, python-format msgid "mountpoint %s not empty." msgstr "" #: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" #: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" #: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Teraz" #: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "Z BŁĘDAMI!" #: ../../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:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "NIEPOWODZENIE" #: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "Przywracanie uprawnień" #: ../../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" "Your old snapshots can be moved according to this new format. OK?" msgstr "" "Back In Time zmienił format kopii zapasowej.\n" "\n" "Przystosować poprzednie migawki do nowego formatu?" #: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" "\n" "The 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)" msgstr "" "Znaleziono %s profili. \n" "\n" "Nowy format kopii zapasowej obsługuje wielu użytkowników i wiele profili w " "tej samej lokalizacji. Użyć tej samej lokalizacji dla obu profili? \n" "\n" "(Program nadal będzie w stanie odróżnić profile i użytkowników)" #: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" msgstr "" "Nie znaleziono profili. Należy zaktualizować profile, proszę ponownie " "uruchomić Back In Time" #: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" "of profile %(profile_id)s are not moved to their new location\n" "Do 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" "\n" "If not Back In Time will restore former settings for this profile, however " "cannot continue taking snapshots" msgstr "" #: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" "Back In Time cannot continue taking new snapshots.\n" "\n" "You can manually move the snapshots, \n" "if you are done restart Back In Time to proceed" msgstr "" "Poprzednie ustawienia profilu %s zostały przywrócone.\n" "Back In Time nie może dalej wykonywać nowych migawek.\n" "\n" "Można ręcznie przenieść migawki, \n" "po zakończonej operacji uruchom ponownie Back In Time" #: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" msgstr "" "Aktualizacja powiodła się!\n" "\n" "Back In Time będzie kontynuował wykonywanie migawek zgodnie z harmonogramem" #: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" "\n" "If 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" "\n" "If you do not, you will be asked again next time you start Back In Time." msgstr "" "Na pewno nie przenosić starych migawek?\n" "\n" "\n" "Jeżeli tak, te pytanie nie zostanie ponownie wyświetlone, Back In Time nadal " "będzie wykonywał migawki, ale smart remove nie będzie brało poprzednich " "migawek pod uwagę!\n" "\n" "Jeżeli nie, te pytanie ponownie zostanie wyświetlone przy następnym " "uruchomieniu Back In Time." #: ../../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: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 nadal nie może wykonywać nowych migawek.\n" "Uruchom ponownie Back In Time, aby ponownie wyświetlić pytania" #: ../../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 "" "Nie można odnaleźć katalogu migawek.\n" "Jeżeli katalog znajduje się na dysku wymiennym proszę go podłączyć." #: ../../common/snapshots.py:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "Pozostała %s sekunda." msgstr[1] "Pozostały %s sekundy." msgstr[2] "Pozostało %s sekund." #: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "Nie udało się wykonać migawki %s!!!" #: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "Finalizuję" #: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "Nie mogę stworzyć katalogu: %s" #: ../../common/snapshots.py:1217 msgid "..." msgstr "…" #: ../../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:1340 #, python-format msgid "Compare with snapshot %s" msgstr "Porównanie z migawką %s" #: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "Stwórz twarde dowiązanie" #: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "Zapisz plik konfiguracyjny ..." #: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "Zapis uprawnień ..." #: ../../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:1695 ../../common/snapshots.py:1728 #: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "Sprytne usuwanie" #: ../../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:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" #: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "" #: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "" #: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" #: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" #: ../../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:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" #: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" #: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" #: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" #: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" #: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" #: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" #: ../../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 "" #: ../../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 "" #: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "" #: ../../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 "" #: ../../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" #: ../../qt4/app.py:122 msgid "Config File Help" msgstr "" #: ../../qt4/app.py:125 msgid "Website" msgstr "Strona WWW" #: ../../qt4/app.py:127 ../../qt4/app.py:982 msgid "Changelog" msgstr "" #: ../../qt4/app.py:129 msgid "FAQ" msgstr "" #: ../../qt4/app.py:131 msgid "Ask a question" msgstr "" #: ../../qt4/app.py:133 msgid "Report a bug" msgstr "" #: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "O programie" #: ../../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óć" #: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 #: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "Przywróć do ..." #: ../../qt4/app.py:194 msgid "Restore and delete new files" msgstr "" #: ../../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 "" #: ../../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" #: ../../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" msgstr "" "Nie można odnaleźć katalogu migawek.\n" "Jeżeli katalog znajduje się na dysku wymiennym proszę go podłączyć i wcisnąć " "OK" #: ../../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 "Pracuje:" #: ../../qt4/app.py:695 msgid "Done, no backup needed" msgstr "Gotowe, archiwizacja niepotrzebna" #: ../../qt4/app.py:707 msgid "Error:" msgstr "Błąd:" #: ../../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" #: ../../qt4/app.py:778 msgid "Root" msgstr "Root" #: ../../qt4/app.py:779 msgid "Home" msgstr "Start" #: ../../qt4/app.py:794 msgid "Backup folders" msgstr "Katalogi kopii zapasowej" #: ../../qt4/app.py:849 msgid "This is NOT a snapshot but a live view of your local files" msgstr "" #: ../../qt4/app.py:860 ../../qt4/app.py:1476 #, python-format msgid "Last check %s" msgstr "" #: ../../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" #: ../../qt4/app.py:1004 #, python-format msgid "" "Backup local files before overwriting or\n" "removing with trailing '%(suffix)s'." msgstr "" #: ../../qt4/app.py:1010 msgid "" "Are you sure you want to remove all newer files in your original folder?" msgstr "" #: ../../qt4/app.py:1014 msgid "" "WARNING: deleting files in filesystem root could break your whole system!!!" msgstr "" #: ../../qt4/app.py:1016 msgid "Files to be restored:" msgstr "" #: ../../qt4/app.py:1031 msgid "Do you really want to restore this files(s):" msgstr "" #: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "Migawka: %s" #: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "Zobacz migawkę wykonaną %s" #: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "Pokaż obecną zawartość dysku" #: ../../qt4/app.py:1268 #, python-format msgid "Restore '%s'" msgstr "Przywróć '%s'" #: ../../qt4/app.py:1269 #, python-format msgid "Restore '%s' to ..." msgstr "Przywróć '%s' do ..." #: ../../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 "Filtr:" #: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 msgid "All" msgstr "Wszystkie" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 #: ../../qt4/settingsdialog.py:657 msgid "Errors" msgstr "Błędy" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 msgid "Changes" msgstr "Zmiany" #: ../../qt4/logviewdialog.py:92 msgid "Informations" msgstr "Informacje" #: ../../qt4/logviewdialog.py:101 msgid "[E] Error, [I] Information, [C] Change" msgstr "[E] Błąd, [I] Informacja, [C] Zmiana" #: ../../qt4/logviewdialog.py:104 msgid "decode paths" msgstr "" #: ../../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 "Pracuję..." #: ../../qt4/qt4tools.py:178 msgid "Today" msgstr "Dziś" #: ../../qt4/qt4tools.py:183 msgid "Yesterday" msgstr "Wczoraj" #: ../../qt4/qt4tools.py:188 msgid "This week" msgstr "Ten tydzień" #: ../../qt4/qt4tools.py:193 msgid "Last week" msgstr "Poprzedni tydzień" #: ../../qt4/restoredialog.py:75 msgid "Show full Log" msgstr "" #: ../../qt4/settingsdialog.py:68 msgid "Edit" msgstr "Edycja" #: ../../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 "Główne" #: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "" #: ../../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" #: ../../qt4/settingsdialog.py:145 msgid "Folder" msgstr "Katalog" #: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" #: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "Host:" #: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "" #: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "Użytkownik:" #: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" #: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" #: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "" #: ../../qt4/settingsdialog.py:201 msgid "Key File" msgstr "" #: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 #: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "" #: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" #: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" #: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "Zaawansowane" #: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 msgid "Full snapshot path: " msgstr "" #: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "Harmonogram" #: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "Dzień:" #: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "Dzień powszedni" #: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "Godzina:" #: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "" #: ../../qt4/settingsdialog.py:339 msgid "" "Run Back In Time repeatedly. This is useful if the computer is not running " "regular." msgstr "" #: ../../qt4/settingsdialog.py:344 msgid "Every:" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Dołącz" #: ../../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" #: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Dodaj katalog" #: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Wyklucz" #: ../../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 "" #: ../../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:" #: ../../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" #: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "Starsze niż:" #: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "Jeżeli wolnej przestrzeni na dysku jest mniej niż:" #: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" #: ../../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" #: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "dni" #: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "Przechowaj jedną migawkę na dzień" #: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "Przechowaj jedną migawkę na tydzień" #: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "tygodni" #: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "Przechowaj jedną migawkę na miesiąc" #: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "miesięcy" #: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "Przechowój jedną migawkę na rok przez wszystkie lata" #: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "Nie usuwaj nazwanych migawek" #: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Ustawienia" #: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Włącz powiadomienia" #: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "Wyłącz migawki podczas zasilania z baterii" #: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" msgstr "Status zasilania niedostępny w systemie" #: ../../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 "" #: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "Kontynuuj przy błędach (pozwól na niekompletne migawki)" #: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "Używaj sum kontrolnych do wykrywania zmian" #: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "" #: ../../qt4/settingsdialog.py:634 msgid "" "- snapshots are not read-only\n" "- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" #: ../../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 )" #: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "Poziom dziennika:" #: ../../qt4/settingsdialog.py:656 msgid "None" msgstr "Brak" #: ../../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!" #: ../../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 "" #: ../../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 "" #: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" #: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "Zachowaj ACL" #: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "Zachowaj rozszerzone atrybuty (xattr)" #: ../../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)" #: ../../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 "Nowy profil" #: ../../qt4/settingsdialog.py:938 msgid "Rename profile" msgstr "Zmień nazwę profilu" #: ../../qt4/settingsdialog.py:952 #, python-format msgid "Are you sure you want to delete the profile \"%s\" ?" msgstr "Na pewno usunąć 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 "" #: ../../qt4/settingsdialog.py:1489 msgid "Exclude pattern" msgstr "Wzór wykluczenia" #: ../../qt4/settingsdialog.py:1502 msgid "Exclude file" msgstr "Wyklucz plik" #: ../../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 "" #: ../../qt4/settingsdialog.py:1545 msgid "Include folder" msgstr "Uwzględnij katalog" #: ../../qt4/settingsdialog.py:1572 msgid "Are you sure you want to change snapshots folder ?" msgstr "Na pewno zmienić katalog migawek?" #: ../../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 "Opcje diff" #: ../../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 "" #: ../../qt4/snapshotsdialog.py:123 msgid "Deep check (more accurate, but slow)" msgstr "Szczegółowa analiza (dokładniejsza, ale bardziej czasochłonna)" #: ../../qt4/snapshotsdialog.py:144 msgid "Delete" msgstr "" #: ../../qt4/snapshotsdialog.py:148 msgid "Select All" msgstr "" #: ../../qt4/snapshotsdialog.py:161 msgid "Diff" msgstr "Różnice" #: ../../qt4/snapshotsdialog.py:172 msgid "Go To" msgstr "Idź do" #: ../../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 "" "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 "" backintime-1.1.12/common/po/bg.po0000664000175000017500000012406012644767576016111 0ustar germargermar# Bulgarian translation for backintime # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the backintime package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \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: 2016-01-11 17:52+0000\n" "X-Generator: Launchpad (build 17881)\n" #: ../../qt4/app.py:777 msgid "Global" 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:77 msgid "At every boot/reboot" msgstr "При всяко зареждане/рестартиране" #: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "На всеки 5 минути" #: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "На всеки 10 минути" #: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "" #: ../../common/config.py:81 msgid "Every hour" msgstr "" #: ../../common/config.py:82 msgid "Every 2 hours" msgstr "" #: ../../common/config.py:83 msgid "Every 4 hours" msgstr "" #: ../../common/config.py:84 msgid "Every 6 hours" msgstr "" #: ../../common/config.py:85 msgid "Every 12 hours" msgstr "" #: ../../common/config.py:86 msgid "Custom Hours" msgstr "" #: ../../common/config.py:87 msgid "Every Day" msgstr "Ежедневно" #: ../../common/config.py:88 msgid "Repeatedly (anacron)" msgstr "" #: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "" #: ../../common/config.py:90 msgid "Every Week" msgstr "Ежеседмично" #: ../../common/config.py:91 msgid "Every Month" msgstr "Ежемесечно" #: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Дни" #: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Седмици" #: ../../common/config.py:97 msgid "Year(s)" msgstr "Години" #: ../../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:129 msgid "Local" msgstr "" #: ../../common/config.py:130 msgid "SSH" msgstr "" #: ../../common/config.py:130 ../../common/config.py:132 #: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "" #: ../../common/config.py:131 msgid "Local encrypted" msgstr "" #: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "" #: ../../common/config.py:132 msgid "SSH encrypted" msgstr "" #: ../../common/config.py:135 msgid "Default" msgstr "" #: ../../common/config.py:136 msgid "AES128-CTR" msgstr "" #: ../../common/config.py:137 msgid "AES192-CTR" msgstr "" #: ../../common/config.py:138 msgid "AES256-CTR" msgstr "" #: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "" #: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "" #: ../../common/config.py:141 msgid "AES128-CBC" msgstr "" #: ../../common/config.py:142 msgid "3DES-CBC" msgstr "" #: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "" #: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "" #: ../../common/config.py:145 msgid "AES192-CBC" msgstr "" #: ../../common/config.py:146 msgid "AES256-CBC" msgstr "" #: ../../common/config.py:147 msgid "ARCFOUR" msgstr "" #: ../../common/config.py:153 msgid "Main profile" msgstr "Основен профил" #: ../../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:289 msgid "Snapshots folder is not valid !" msgstr "Папката за моментни архиви не е валидна!" #: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "Трябва да изберете поне една папка за архивиране !" #: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "Не можете да включите папката за резервни архиви !" #: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "Не можете да включите подпапките в резервно копие !" #: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s не е папка !" #: ../../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 "" "Не може да се записва в: %s\n" "Сигурни ли сте, че имате права за запис?" #: ../../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" "If not you should disable all automatic backups." msgstr "" "crontab не може да бъде намерен.\n" "Сигурни ли сте, че cron е инсталиран ?\n" "Ако не е, трябва да изключите всички автоматични архивирания." #: ../../common/config.py:1411 msgid "Failed to write new crontab." msgstr "" #: ../../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/config.py:1517 #, python-format msgid "Schedule udev doesn't work with mode %s" msgstr "" #: ../../common/config.py:1526 #, python-format msgid "Couldn't find UUID for \"%s\"" msgstr "" #: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" "\n" "%(error)s" msgstr "" #: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "" #: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "" #: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" #: ../../common/encfstools.py:171 msgid "Cancel" msgstr "" #: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "" #: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "" #: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" #: ../../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 "" #: ../../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:512 ../../common/snapshots.py:1131 #: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "Създаване на моментен архив" #: ../../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:259 #, python-format msgid "mountpoint %s not empty." msgstr "" #: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" #: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" #: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Сега" #: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "С ГРЕШКИ!" #: ../../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:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "" #: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "" #: ../../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 "" "Back In Time промени своя формат за резервни копия.\n" "\n" "Старите ви моментни архиви ще бъдат преместени съобразно този нов формат. " "Продължаване?" #: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" "\n" "The 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)" msgstr "" "Намерени са %s профила.\n" "\n" "Новият формат за архивиране поддържа съхраняването на различни потребители и " "профили на едно и също място. Желаете ли едно и също място за двата " "профила?\n" "\n" "(Програмата ще може да прави разлика между тях)" #: ../../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:918 #, python-format msgid "" "%(snapshots_left)s\n" "of profile %(profile_id)s are not moved to their new location\n" "Do 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" "\n" "If not Back In Time will restore former settings for this profile, however " "cannot continue taking snapshots" msgstr "" #: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" "Back In Time cannot continue taking new snapshots.\n" "\n" "You can manually move the snapshots, \n" "if you are done restart Back In Time to proceed" msgstr "" "Възстановени са предишни настройки на профила %s.\n" "Back In Time не може да продължи да прави нови моменти архиви.\n" "\n" "Може ръчно да преместите моментните архиви, а ако сте свършили\n" "рестартирайте Back In Time за да продължите" #: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" msgstr "" "Обновлението беше успешно!\n" "\n" "Back In Time ще продължи да прави моментни архиви по разписание" #: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" "\n" "If 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" "\n" "If you do not, you will be asked again next time you start Back In Time." msgstr "" "Сигурни ли сте, че не желаете да преместите своите стари моментни архиви?\n" "\n" "\n" "Ако решите така, този въпрос няма да ви бъде задаван повече, Back In Time ще " "продължи да прави моментни архиви, но функцията умно премахване няма да " "взема предвид старите ви моментни архиви!\n" "\n" "Ако не сте сигурно, този въпрос ще ви бъде зададен отново при следващото " "стартиране на програмата." #: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "Back In Time ще продължи да прави моментни архиви по разписание" #: ../../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 все още не може да продължи да прави моментни архиви\n" "Рестартирайте програмата за да видите отново въпросите" #: ../../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 "" "Папката за моментни архиви не може да бъде открита.\n" "Ако е на преносимо устройство, моля включете го." #: ../../common/snapshots.py:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "Изчакване %s секунда." msgstr[1] "Изчакване %s секунди." #: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "Неуспех при създаването на моментен архив %s !!!" #: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "Приключване" #: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "Папката не може да бъде създадена: %s" #: ../../common/snapshots.py:1217 msgid "..." msgstr "..." #: ../../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:1340 #, python-format msgid "Compare with snapshot %s" msgstr "Сравняване с моментния архив %s" #: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "Създаване на твърди връзки" #: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "Запазване на конфигурационен файл ..." #: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "Запазване на правата ..." #: ../../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:1695 ../../common/snapshots.py:1728 #: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "Умно премахване" #: ../../common/snapshots.py:1704 msgid "Remove old snapshots" msgstr "Премахване на старите моментни архиви" #: ../../common/snapshots.py:1733 msgid "Try to keep min free space" msgstr "Опит за запазване на минимално свободно пространство" #: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" #: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "" #: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "" #: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" #: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" #: ../../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:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" #: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" #: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" #: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" #: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" #: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" #: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" #: ../../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 "" #: ../../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 "" #: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" 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 "Изход" #: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 msgid "Help" msgstr "Помощ" #: ../../qt4/app.py:122 msgid "Config File Help" msgstr "" #: ../../qt4/app.py:125 msgid "Website" msgstr "Уебсайт" #: ../../qt4/app.py:127 ../../qt4/app.py:982 msgid "Changelog" msgstr "" #: ../../qt4/app.py:129 msgid "FAQ" msgstr "" #: ../../qt4/app.py:131 msgid "Ask a question" msgstr "" #: ../../qt4/app.py:133 msgid "Report a bug" msgstr "" #: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "Относно" #: ../../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 "Възстановяване" #: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 #: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "" #: ../../qt4/app.py:194 msgid "Restore and delete new files" msgstr "" #: ../../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 "" #: ../../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 "Препратки" #: ../../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" msgstr "" "Папката за моментни архиви не може да бъде открите.\n" "Ако е на преносимо устройство, моля включете го." #: ../../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 "Изпълнение:" #: ../../qt4/app.py:695 msgid "Done, no backup needed" msgstr "Готово, не е необходимо архивиране" #: ../../qt4/app.py:707 msgid "Error:" msgstr "Грешка:" #: ../../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 "Файлова система" #: ../../qt4/app.py:779 msgid "Home" msgstr "Домашна папка" #: ../../qt4/app.py:794 msgid "Backup folders" msgstr "Резевни папки" #: ../../qt4/app.py:849 msgid "This is NOT a snapshot but a live view of your local files" msgstr "" #: ../../qt4/app.py:860 ../../qt4/app.py:1476 #, python-format msgid "Last check %s" msgstr "" #: ../../qt4/app.py:928 #, python-format msgid "" "Are you sure you want to remove the snapshot:\n" "%s" msgstr "" "Сигурни ли сте, че желаете окончателно да премахнете моментния архив '%s'?" #: ../../qt4/app.py:1004 #, python-format msgid "" "Backup local files before overwriting or\n" "removing with trailing '%(suffix)s'." msgstr "" #: ../../qt4/app.py:1010 msgid "" "Are you sure you want to remove all newer files in your original folder?" msgstr "" #: ../../qt4/app.py:1014 msgid "" "WARNING: deleting files in filesystem root could break your whole system!!!" msgstr "" #: ../../qt4/app.py:1016 msgid "Files to be restored:" msgstr "" #: ../../qt4/app.py:1031 msgid "Do you really want to restore this files(s):" msgstr "" #: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "Моментен архив: %s" #: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "Преглеждане на моментния архив, създаден на %s" #: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "Преглеждане на текущото съдържание на диска" #: ../../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 "Всичко" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 #: ../../qt4/settingsdialog.py:657 msgid "Errors" msgstr "Грешки" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 msgid "Changes" msgstr "Промени" #: ../../qt4/logviewdialog.py:92 msgid "Informations" msgstr "Информации" #: ../../qt4/logviewdialog.py:101 msgid "[E] Error, [I] Information, [C] Change" msgstr "[Г] Грешка, [И] Информация, [П] Промяна" #: ../../qt4/logviewdialog.py:104 msgid "decode paths" msgstr "" #: ../../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 "Изпълнение..." #: ../../qt4/qt4tools.py:178 msgid "Today" msgstr "Днес" #: ../../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 "" #: ../../qt4/settingsdialog.py:68 msgid "Edit" msgstr "Редактиране" #: ../../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 "Общи" #: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "" #: ../../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 "Къде да се запазват моментните архиви" #: ../../qt4/settingsdialog.py:145 msgid "Folder" msgstr "" #: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" #: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "Компютър:" #: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "" #: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "Потребител:" #: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" #: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" #: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "" #: ../../qt4/settingsdialog.py:201 msgid "Key File" msgstr "" #: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 #: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "" #: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" #: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" #: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "Разширени" #: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 msgid "Full snapshot path: " msgstr "" #: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "Разписание" #: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "" #: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "" #: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "Час:" #: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "" #: ../../qt4/settingsdialog.py:339 msgid "" "Run Back In Time repeatedly. This is useful if the computer is not running " "regular." msgstr "" #: ../../qt4/settingsdialog.py:344 msgid "Every:" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Включване" #: ../../qt4/settingsdialog.py:381 msgid "Include files and folders" msgstr "Включване на файлове и папки" #: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "Добавяне на файл" #: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Добавяне на папка" #: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Изключване" #: ../../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 "" #: ../../qt4/settingsdialog.py:425 msgid "Exclude patterns, files or folders" msgstr "Изключване на шарки, файлове или папки" #: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "Силно препоръчително:" #: ../../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 "Автоматично премахване" #: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "По-стари от:" #: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "Ако свободното пространство е по-малко от:" #: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" #: ../../qt4/settingsdialog.py:551 msgid "Run in background on remote Host." msgstr "" #: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "" #: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "" #: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "" #: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "" #: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "" #: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "" #: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "" #: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "" #: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "Да не се премахват именувани архиви" #: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Настройки" #: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Включване на известяването" #: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "Изключване на моментни архиви при работа на батерия" #: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" 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 "" #: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "Продължаване при грешки (запазване на непълни моментни архиви)" #: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "Използвайте проверка на контролната сума, за да засечете промените" #: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "" #: ../../qt4/settingsdialog.py:634 msgid "" "- snapshots are not read-only\n" "- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "Ниво на записа:" #: ../../qt4/settingsdialog.py:656 msgid "None" msgstr "Нищо" #: ../../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 "Пременяйте тези настройки само ако знаете какво правите !" #: ../../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 "" #: ../../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 "" #: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" #: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "Запазване на ACL (списък за контрол на достъпа)" #: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "Запазване на разширените атрибути (xattr)" #: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute 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 "" #: ../../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 "Настройки на сравняването" #: ../../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 "Изброяване само на различаващите се моментни архиви" #: ../../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 "" #: ../../qt4/snapshotsdialog.py:148 msgid "Select All" msgstr "" #: ../../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 "" "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 "" backintime-1.1.12/common/po/zh_CN.po0000664000175000017500000011567112644767576016532 0ustar germargermar# Simplified Chinese translation for backintime # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the backintime package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \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: 2016-01-11 17:52+0000\n" "X-Generator: Launchpad (build 17881)\n" #: ../../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:77 msgid "At every boot/reboot" msgstr "重启时" #: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "每5分钟" #: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "每10分钟" #: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "每30分钟" #: ../../common/config.py:81 msgid "Every hour" msgstr "每小时" #: ../../common/config.py:82 msgid "Every 2 hours" msgstr "每2小时" #: ../../common/config.py:83 msgid "Every 4 hours" msgstr "每4小时" #: ../../common/config.py:84 msgid "Every 6 hours" msgstr "每6小时" #: ../../common/config.py:85 msgid "Every 12 hours" msgstr "每12小时" #: ../../common/config.py:86 msgid "Custom Hours" msgstr "自定义" #: ../../common/config.py:87 msgid "Every Day" msgstr "每天" #: ../../common/config.py:88 msgid "Repeatedly (anacron)" msgstr "" #: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "当设备连接时(udev)" #: ../../common/config.py:90 msgid "Every Week" msgstr "每周" #: ../../common/config.py:91 msgid "Every Month" msgstr "每月" #: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "天" #: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "周" #: ../../common/config.py:97 msgid "Year(s)" msgstr "年" #: ../../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:129 msgid "Local" msgstr "本地" #: ../../common/config.py:130 msgid "SSH" msgstr "SSH" #: ../../common/config.py:130 ../../common/config.py:132 #: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "SSH 私钥" #: ../../common/config.py:131 msgid "Local encrypted" msgstr "" #: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "加密" #: ../../common/config.py:132 msgid "SSH encrypted" msgstr "" #: ../../common/config.py:135 msgid "Default" msgstr "默认" #: ../../common/config.py:136 msgid "AES128-CTR" msgstr "AES128-CTR" #: ../../common/config.py:137 msgid "AES192-CTR" msgstr "AES192-CTR" #: ../../common/config.py:138 msgid "AES256-CTR" msgstr "AES256-CTR" #: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "ARCFOUR256" #: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "ARCFOUR128" #: ../../common/config.py:141 msgid "AES128-CBC" msgstr "AES128-CBC" #: ../../common/config.py:142 msgid "3DES-CBC" msgstr "3DES-CBC" #: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "Blowfish-CBC" #: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "Cast128-CBC" #: ../../common/config.py:145 msgid "AES192-CBC" msgstr "AES192-CBC" #: ../../common/config.py:146 msgid "AES256-CBC" msgstr "AES256-CBC" #: ../../common/config.py:147 msgid "ARCFOUR" msgstr "ARCFOUR" #: ../../common/config.py:153 msgid "Main profile" msgstr "主要配置。" #: ../../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:289 msgid "Snapshots folder is not valid !" msgstr "快照文件夹无效!" #: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "请至少选择一个文件夹进行备份!" #: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "不能包含备份文件夹!" #: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "不能包含备份文件夹的子文件夹!" #: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s 不是一个文件夹!" #: ../../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 "" "不能写入: %s\n" "您确定有写入权限吗?" #: ../../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" "If not you should disable all automatic backups." msgstr "" "无法找到 crontab。\n" "您确定已经安装了 cron?\n" "如果没有安装,您应当禁用所有自动备份。" #: ../../common/config.py:1411 msgid "Failed to write new crontab." msgstr "" #: ../../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/config.py:1517 #, python-format msgid "Schedule udev doesn't work with mode %s" msgstr "" #: ../../common/config.py:1526 #, python-format msgid "Couldn't find UUID for \"%s\"" msgstr "无法找到 \"%s\" 的 UUID" #: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" "\n" "%(error)s" msgstr "" "无法挂载 '%(command)s':\n" "\n" "%(error)s" #: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "无法卸载 encfs %s" #: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "未找到加密文件夹的配置文件" #: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" "\n" "是否创建一个新的加密文件夹?" #: ../../common/encfstools.py:171 msgid "Cancel" msgstr "取消" #: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "确认密码" #: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "密码不一致" #: ../../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: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 "" #: ../../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:512 ../../common/snapshots.py:1131 #: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "创建快照" #: ../../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:259 #, python-format msgid "mountpoint %s not empty." msgstr "挂载点 %s 不为空。" #: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "解除挂载锁超时" #: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" #: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "现在" #: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "发生错误!" #: ../../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:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "失败" #: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "恢复权限:" #: ../../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 "" "Back In Time 改变了备份的格式。\n" "根据新的格式,您旧的快照可能被移动。这样可以吗?" #: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" "\n" "The 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)" msgstr "" "找到%s 配置。 \n" "\n" "新备份格式支持在同一位置保存不同用户和配置。您要保存在同一个位置吗? \n" "\n" "(程序能够区分它们)" #: ../../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:918 #, python-format msgid "" "%(snapshots_left)s\n" "of profile %(profile_id)s are not moved to their new location\n" "Do 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" "\n" "If not Back In Time will restore former settings for this profile, however " "cannot continue taking snapshots" msgstr "" #: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" "Back In Time cannot continue taking new snapshots.\n" "\n" "You can manually move the snapshots, \n" "if you are done restart Back In Time to proceed" msgstr "" "%s的配置文件已经备份。\n" "Back In Time 无法继续创建快照。\n" "\n" "你可以手动移动这些快照, \n" "如果你已经完成,请重启 Back In Time 以继续" #: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" msgstr "" "更新成功!\n" "Back In Time 将根据预定时间继续创建快照" #: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" "\n" "If 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" "\n" "If you do not, you will be asked again next time you start Back In Time." msgstr "" "您确定不要移动旧有的快照吗?\n" "\n" "如果您确定,您下次将不会看到这些问题,Back In Time 将再次创建快照,但是智能移除将忽略您旧有的快照!\n" "\n" "如果您不确定,下次重启 Back In Time 时,您将被再次询问。" #: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "Back In Time 将根据预定时间继续创建快照" #: ../../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 仍然不能创建快照。\n" "请重启 Back In Time 再次查看问题" #: ../../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 "" "找不到快照文件夹。\n" "如果使用的是可移动磁盘,请先连接到电脑。" #: ../../common/snapshots.py:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "等待 %s 秒" #: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "创建快照 %s 失败!!!" #: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "正在完成" #: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "无法新建文件夹: %s" #: ../../common/snapshots.py:1217 msgid "..." msgstr "..." #: ../../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:1340 #, python-format msgid "Compare with snapshot %s" msgstr "与快照 %s 比较" #: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "创建硬链接" #: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "保存配置文件 ..." #: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "保存权限 ..." #: ../../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:1695 ../../common/snapshots.py:1728 #: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "智能移除" #: ../../common/snapshots.py:1704 msgid "Remove old snapshots" msgstr "移除旧的快照" #: ../../common/snapshots.py:1733 msgid "Try to keep min free space" msgstr "尝试保留最小可用空间" #: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" #: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "无法挂载 %s" #: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "无法卸载 sshfs %s" #: ../../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:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "未找到 sshfs。请尝试通过类似命令安装 'apt-get install sshfs'" #: ../../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:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" #: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "未在 ssh_known_hosts 中找到 %s。" #: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" "远程路径存在但不是一个目录:\n" " %s" #: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" "远程路径不可写:\n" " %s" #: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" "远程路径不可被执行:\n" " %s" #: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" "无法创建远程路径:\n" " %s" #: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "Ping %s 失败。可能主机未上线或您输入的地址错误。" #: ../../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 "" #: ../../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 "" #: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "远程主机 %s 不支持硬链接。" #: ../../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 "退出" #: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 msgid "Help" msgstr "帮助" #: ../../qt4/app.py:122 msgid "Config File Help" msgstr "" #: ../../qt4/app.py:125 msgid "Website" msgstr "网站" #: ../../qt4/app.py:127 ../../qt4/app.py:982 msgid "Changelog" msgstr "" #: ../../qt4/app.py:129 msgid "FAQ" msgstr "常见问题" #: ../../qt4/app.py:131 msgid "Ask a question" msgstr "提出问题" #: ../../qt4/app.py:133 msgid "Report a bug" msgstr "报告 BUG" #: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "关于" #: ../../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 "还原" #: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 #: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "还原至:" #: ../../qt4/app.py:194 msgid "Restore and delete new files" msgstr "" #: ../../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 "" #: ../../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 "快捷方式" #: ../../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" msgstr "" "找不到快照文件夹。\n" "如果使用的是可移动磁盘,请连接到电脑,然后按 “确定”" #: ../../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 "运行中:" #: ../../qt4/app.py:695 msgid "Done, no backup needed" msgstr "已完成,无需备份。" #: ../../qt4/app.py:707 msgid "Error:" msgstr "错误:" #: ../../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 "全局" #: ../../qt4/app.py:778 msgid "Root" msgstr "根目录" #: ../../qt4/app.py:779 msgid "Home" msgstr "主目录" #: ../../qt4/app.py:794 msgid "Backup folders" msgstr "备份文件夹" #: ../../qt4/app.py:849 msgid "This is NOT a snapshot but a live view of your local files" msgstr "" #: ../../qt4/app.py:860 ../../qt4/app.py:1476 #, python-format msgid "Last check %s" msgstr "" #: ../../qt4/app.py:928 #, python-format msgid "" "Are you sure you want to remove the snapshot:\n" "%s" msgstr "" "您确定要移除快照:\n" "%s" #: ../../qt4/app.py:1004 #, python-format msgid "" "Backup local files before overwriting or\n" "removing with trailing '%(suffix)s'." msgstr "" #: ../../qt4/app.py:1010 msgid "" "Are you sure you want to remove all newer files in your original folder?" msgstr "" #: ../../qt4/app.py:1014 msgid "" "WARNING: deleting files in filesystem root could break your whole system!!!" msgstr "" #: ../../qt4/app.py:1016 msgid "Files to be restored:" msgstr "" #: ../../qt4/app.py:1031 msgid "Do you really want to restore this files(s):" msgstr "" #: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "快照:%s" #: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "查看快照 %s" #: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "查看当前磁盘内容" #: ../../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 "所有的" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 #: ../../qt4/settingsdialog.py:657 msgid "Errors" msgstr "错误" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 msgid "Changes" msgstr "变更" #: ../../qt4/logviewdialog.py:92 msgid "Informations" msgstr "提示信息" #: ../../qt4/logviewdialog.py:101 msgid "[E] Error, [I] Information, [C] Change" msgstr "[E] 错误,[I] 通知,[C] 变更" #: ../../qt4/logviewdialog.py:104 msgid "decode paths" msgstr "" #: ../../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 "正在进行..." #: ../../qt4/qt4tools.py:178 msgid "Today" msgstr "今天" #: ../../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 "" #: ../../qt4/settingsdialog.py:68 msgid "Edit" msgstr "编辑" #: ../../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 "常规" #: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "模式:" #: ../../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 "何处保存快照" #: ../../qt4/settingsdialog.py:145 msgid "Folder" msgstr "" #: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "SSH 设置" #: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "主机:" #: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "端口:" #: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "用户名:" #: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "路径:" #: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" #: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "私钥:" #: ../../qt4/settingsdialog.py:201 msgid "Key File" msgstr "" #: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 #: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "密码" #: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "保存密码至密钥环" #: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" #: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "高级" #: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 msgid "Full snapshot path: " msgstr "" #: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "计划任务" #: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "日:" #: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "工作日:" #: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "小时:" #: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "小时:" #: ../../qt4/settingsdialog.py:339 msgid "" "Run Back In Time repeatedly. This is useful if the computer is not running " "regular." msgstr "" #: ../../qt4/settingsdialog.py:344 msgid "Every:" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "包含" #: ../../qt4/settingsdialog.py:381 msgid "Include files and folders" msgstr "包含文件和文件夹" #: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "添加文件" #: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "添加文件夹" #: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "排除" #: ../../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 "" #: ../../qt4/settingsdialog.py:425 msgid "Exclude patterns, files or folders" msgstr "不包含模式,文件或文件夹" #: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "强烈推荐:" #: ../../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 "自动移除" #: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "早于:" #: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "如果磁盘可用空间少于:" #: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" #: ../../qt4/settingsdialog.py:551 msgid "Run in background on remote Host." msgstr "" #: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "保留最新的所有快照" #: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "天" #: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "每天保留一个最新的快照" #: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "每周保留一个最新的快照" #: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "周" #: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "每月保留一个最新的快照" #: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "月" #: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "每年保留一个快照" #: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "不要移除已命名的快照" #: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "选项" #: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "启用通知" #: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "使用电池时禁用快照" #: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" 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 "" #: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "忽略错误并继续(保留不完整的快照)" #: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "使用校验检测变更" #: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "完整的 rsync 模式。可能会更快,但是:" #: ../../qt4/settingsdialog.py:634 msgid "" "- snapshots are not read-only\n" "- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" "- 快照非只读\n" "- 目标文件系统必须支持所有的 Linux 属性(如时间,权限,用户,组等等)" #: ../../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 "检查变更(如果没有任何变更,不要创建新的快照)" #: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "日志级别" #: ../../qt4/settingsdialog.py:656 msgid "None" msgstr "空" #: ../../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 "除非您知道自己在干什么,否则不要变更这些选项!" #: ../../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 "" #: ../../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 "限制 rsync 使用带宽: " #: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr " KB/秒" #: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "保留 ACL" #: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "保留扩展属性 (xattr)" #: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute 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 "" #: ../../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 选项" #: ../../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 "仅列出不同的快照" #: ../../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 "删除" #: ../../qt4/snapshotsdialog.py:148 msgid "Select All" msgstr "选择所有" #: ../../qt4/snapshotsdialog.py:161 msgid "Diff" msgstr "Diff" #: ../../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 "" backintime-1.1.12/common/po/eo.po0000664000175000017500000010437612644767576016134 0ustar germargermar# Esperanto translation for backintime # Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 # This file is distributed under the same license as the backintime package. # FIRST AUTHOR , 2011. # msgid "" msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \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" "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: 2016-01-11 17:52+0000\n" "X-Generator: Launchpad (build 17881)\n" #: ../../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:77 msgid "At every boot/reboot" msgstr "Je ĉiu startigo/restartigo" #: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Je ĉiuj 5 minutoj" #: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Je ĉiuj 10 minutoj" #: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "" #: ../../common/config.py:81 msgid "Every hour" msgstr "" #: ../../common/config.py:82 msgid "Every 2 hours" msgstr "" #: ../../common/config.py:83 msgid "Every 4 hours" msgstr "" #: ../../common/config.py:84 msgid "Every 6 hours" msgstr "" #: ../../common/config.py:85 msgid "Every 12 hours" msgstr "" #: ../../common/config.py:86 msgid "Custom Hours" msgstr "" #: ../../common/config.py:87 msgid "Every Day" msgstr "Ĉiutage" #: ../../common/config.py:88 msgid "Repeatedly (anacron)" msgstr "" #: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "" #: ../../common/config.py:90 msgid "Every Week" msgstr "Ĉiusemajne" #: ../../common/config.py:91 msgid "Every Month" msgstr "Ĉiumonate" #: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Tago(j)" #: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Semajno(j)" #: ../../common/config.py:97 msgid "Year(s)" msgstr "Jaro(j)" #: ../../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:129 msgid "Local" msgstr "" #: ../../common/config.py:130 msgid "SSH" msgstr "" #: ../../common/config.py:130 ../../common/config.py:132 #: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "" #: ../../common/config.py:131 msgid "Local encrypted" msgstr "" #: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "" #: ../../common/config.py:132 msgid "SSH encrypted" msgstr "" #: ../../common/config.py:135 msgid "Default" msgstr "" #: ../../common/config.py:136 msgid "AES128-CTR" msgstr "" #: ../../common/config.py:137 msgid "AES192-CTR" msgstr "" #: ../../common/config.py:138 msgid "AES256-CTR" msgstr "" #: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "" #: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "" #: ../../common/config.py:141 msgid "AES128-CBC" msgstr "" #: ../../common/config.py:142 msgid "3DES-CBC" msgstr "" #: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "" #: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "" #: ../../common/config.py:145 msgid "AES192-CBC" msgstr "" #: ../../common/config.py:146 msgid "AES256-CBC" msgstr "" #: ../../common/config.py:147 msgid "ARCFOUR" msgstr "" #: ../../common/config.py:153 msgid "Main profile" msgstr "Ĉefa profilo" #: ../../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:289 msgid "Snapshots folder is not valid !" msgstr "" #: ../../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:307 msgid "You can't include backup folder !" msgstr "Vi ne povas inkluzivi sekurkopian dosieron!" #: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "" #: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s ne estas dosierujo!" #: ../../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: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" "If not you should disable all automatic backups." msgstr "" #: ../../common/config.py:1411 msgid "Failed to write new crontab." msgstr "" #: ../../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/config.py:1517 #, python-format msgid "Schedule udev doesn't work with mode %s" msgstr "" #: ../../common/config.py:1526 #, python-format msgid "Couldn't find UUID for \"%s\"" msgstr "" #: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" "\n" "%(error)s" msgstr "" #: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "" #: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "" #: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" #: ../../common/encfstools.py:171 msgid "Cancel" msgstr "" #: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "" #: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "" #: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" #: ../../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 "" #: ../../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:512 ../../common/snapshots.py:1131 #: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "" #: ../../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:259 #, python-format msgid "mountpoint %s not empty." msgstr "" #: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" #: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" #: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Nun" #: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "" #: ../../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:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "" #: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "" #: ../../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:868 #, python-format msgid "" "%s profiles found. \n" "\n" "The 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)" msgstr "" #: ../../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:918 #, python-format msgid "" "%(snapshots_left)s\n" "of profile %(profile_id)s are not moved to their new location\n" "Do 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" "\n" "If not Back In Time will restore former settings for this profile, however " "cannot continue taking snapshots" msgstr "" #: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" "Back In Time cannot continue taking new snapshots.\n" "\n" "You can manually move the snapshots, \n" "if you are done restart Back In Time to proceed" msgstr "" #: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" msgstr "" #: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" "\n" "If 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" "\n" "If you do not, you will be asked again next time you start Back In Time." msgstr "" #: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "" #: ../../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: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:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "" msgstr[1] "" #: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "" #: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "" #: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "" #: ../../common/snapshots.py:1217 msgid "..." msgstr "" #: ../../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:1340 #, python-format msgid "Compare with snapshot %s" msgstr "" #: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "" #: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "" #: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "" #: ../../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:1695 ../../common/snapshots.py:1728 #: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "" #: ../../common/snapshots.py:1704 msgid "Remove old snapshots" msgstr "" #: ../../common/snapshots.py:1733 msgid "Try to keep min free space" msgstr "" #: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" #: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "" #: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "" #: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" #: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" #: ../../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:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" #: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" #: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" #: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" #: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" #: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" #: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" #: ../../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 "" #: ../../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 "" #: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" 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 "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" #: ../../qt4/app.py:122 msgid "Config File Help" msgstr "" #: ../../qt4/app.py:125 msgid "Website" msgstr "Retejo" #: ../../qt4/app.py:127 ../../qt4/app.py:982 msgid "Changelog" msgstr "" #: ../../qt4/app.py:129 msgid "FAQ" msgstr "" #: ../../qt4/app.py:131 msgid "Ask a question" msgstr "" #: ../../qt4/app.py:133 msgid "Report a bug" msgstr "" #: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "Pri" #: ../../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" #: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 #: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "" #: ../../qt4/app.py:194 msgid "Restore and delete new files" msgstr "" #: ../../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 "" #: ../../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 "Klavkombinoj" #: ../../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" 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 "" #: ../../qt4/app.py:667 ../../qt4/app.py:703 msgid "Working:" msgstr "" #: ../../qt4/app.py:695 msgid "Done, no backup needed" msgstr "" #: ../../qt4/app.py:707 msgid "Error:" msgstr "Eraro:" #: ../../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 "" #: ../../qt4/app.py:778 msgid "Root" msgstr "" #: ../../qt4/app.py:779 msgid "Home" msgstr "Hejmo" #: ../../qt4/app.py:794 msgid "Backup folders" msgstr "" #: ../../qt4/app.py:849 msgid "This is NOT a snapshot but a live view of your local files" msgstr "" #: ../../qt4/app.py:860 ../../qt4/app.py:1476 #, python-format msgid "Last check %s" msgstr "" #: ../../qt4/app.py:928 #, python-format msgid "" "Are you sure you want to remove the snapshot:\n" "%s" msgstr "" #: ../../qt4/app.py:1004 #, python-format msgid "" "Backup local files before overwriting or\n" "removing with trailing '%(suffix)s'." msgstr "" #: ../../qt4/app.py:1010 msgid "" "Are you sure you want to remove all newer files in your original folder?" msgstr "" #: ../../qt4/app.py:1014 msgid "" "WARNING: deleting files in filesystem root could break your whole system!!!" msgstr "" #: ../../qt4/app.py:1016 msgid "Files to be restored:" msgstr "" #: ../../qt4/app.py:1031 msgid "Do you really want to restore this files(s):" msgstr "" #: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "" #: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "" #: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "" #: ../../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 "Profilo:" #: ../../qt4/logviewdialog.py:81 msgid "Filter:" msgstr "Filtrilo:" #: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 msgid "All" msgstr "" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 #: ../../qt4/settingsdialog.py:657 msgid "Errors" msgstr "Eraroj" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 msgid "Changes" msgstr "Ŝanĝoj" #: ../../qt4/logviewdialog.py:92 msgid "Informations" msgstr "informoj" #: ../../qt4/logviewdialog.py:101 msgid "[E] Error, [I] Information, [C] Change" msgstr "" #: ../../qt4/logviewdialog.py:104 msgid "decode paths" msgstr "" #: ../../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..." #: ../../qt4/qt4tools.py:178 msgid "Today" msgstr "Hodiaŭ" #: ../../qt4/qt4tools.py:183 msgid "Yesterday" msgstr "Hieraŭ" #: ../../qt4/qt4tools.py:188 msgid "This week" msgstr "Nuna semajno" #: ../../qt4/qt4tools.py:193 msgid "Last week" msgstr "Lasta semajno" #: ../../qt4/restoredialog.py:75 msgid "Show full Log" msgstr "" #: ../../qt4/settingsdialog.py:68 msgid "Edit" msgstr "Redakti" #: ../../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" #: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:145 msgid "Folder" msgstr "" #: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" #: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "" #: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "" #: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "Uzanto:" #: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" #: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" #: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "" #: ../../qt4/settingsdialog.py:201 msgid "Key File" msgstr "" #: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 #: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "" #: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" #: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" #: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "" #: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 msgid "Full snapshot path: " msgstr "" #: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "" #: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "" #: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "" #: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "Horo:" #: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "" #: ../../qt4/settingsdialog.py:339 msgid "" "Run Back In Time repeatedly. This is useful if the computer is not running " "regular." msgstr "" #: ../../qt4/settingsdialog.py:344 msgid "Every:" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Inkluzivi" #: ../../qt4/settingsdialog.py:381 msgid "Include files and folders" msgstr "" #: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "Aldoni dosieron" #: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Aldoni dosierujon" #: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Ekskluzivi" #: ../../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 "" #: ../../qt4/settingsdialog.py:425 msgid "Exclude patterns, files or folders" msgstr "" #: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "" #: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "" #: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" #: ../../qt4/settingsdialog.py:551 msgid "Run in background on remote Host." msgstr "" #: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "" #: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "" #: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "" #: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "" #: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "" #: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "" #: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "" #: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "" #: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "" #: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Agordoj" #: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Aktivigi sciigojn" #: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "" #: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" 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 "" #: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "" #: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "" #: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "" #: ../../qt4/settingsdialog.py:634 msgid "" "- snapshots are not read-only\n" "- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "" #: ../../qt4/settingsdialog.py:656 msgid "None" msgstr "Neniu" #: ../../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 "" #: ../../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 "" #: ../../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 "" #: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" #: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "" #: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "" #: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute 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 "" #: ../../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 "" #: ../../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 "" #: ../../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 "" #: ../../qt4/snapshotsdialog.py:106 msgid "List only different snapshots" msgstr "" #: ../../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 "" #: ../../qt4/snapshotsdialog.py:148 msgid "Select All" msgstr "" #: ../../qt4/snapshotsdialog.py:161 msgid "Diff" msgstr "" #: ../../qt4/snapshotsdialog.py:172 msgid "Go To" msgstr "Iri al" #: ../../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 "" #: ../../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 "" backintime-1.1.12/common/po/fr.po0000664000175000017500000014051112644767576016127 0ustar germargermar# French translation of Back In Time. # Copyright (C) 2008-2009 Oprea Dan # This file is distributed under the same license as the Back In Time package. # # msgid "" msgstr "" "Project-Id-Version: Back In Time 0.8.8\n" "Report-Msgid-Bugs-To: \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: 2016-01-11 17:52+0000\n" "X-Generator: Launchpad (build 17881)\n" #: ../../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:77 msgid "At every boot/reboot" msgstr "À chaque démarrage/re-démarrage" #: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Toutes les 5 minutes" #: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Toutes les 10 minutes" #: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "Toutes les 30 minutes" #: ../../common/config.py:81 msgid "Every hour" msgstr "Toutes les heures" #: ../../common/config.py:82 msgid "Every 2 hours" msgstr "Toutes les 2 heures" #: ../../common/config.py:83 msgid "Every 4 hours" msgstr "Toutes les 4 heures" #: ../../common/config.py:84 msgid "Every 6 hours" msgstr "Toutes les 6 heures" #: ../../common/config.py:85 msgid "Every 12 hours" msgstr "Toutes les 12 heures" #: ../../common/config.py:86 msgid "Custom Hours" msgstr "Heures personnalisés" #: ../../common/config.py:87 msgid "Every Day" msgstr "Quotidiennement" #: ../../common/config.py:88 msgid "Repeatedly (anacron)" msgstr "A plusieurs reprises (anacron)" #: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "Quand le lecteur est connecté (udev)" #: ../../common/config.py:90 msgid "Every Week" msgstr "Chaque semaine" #: ../../common/config.py:91 msgid "Every Month" msgstr "Chaque mois" #: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Jour(s)" #: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Semaine(s)" #: ../../common/config.py:97 msgid "Year(s)" msgstr "Année(s)" #: ../../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:129 msgid "Local" msgstr "Locale" #: ../../common/config.py:130 msgid "SSH" msgstr "SSH" #: ../../common/config.py:130 ../../common/config.py:132 #: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "Clé privée SSH" #: ../../common/config.py:131 msgid "Local encrypted" msgstr "Chiffré localement" #: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "Chiffrement" #: ../../common/config.py:132 msgid "SSH encrypted" msgstr "SSH chiffré" #: ../../common/config.py:135 msgid "Default" msgstr "Par Défaut" #: ../../common/config.py:136 msgid "AES128-CTR" msgstr "AES128-CTR" #: ../../common/config.py:137 msgid "AES192-CTR" msgstr "AES192-CTR" #: ../../common/config.py:138 msgid "AES256-CTR" msgstr "AES256-CTR" #: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "ARCFOUR256" #: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "ARCFOUR128" #: ../../common/config.py:141 msgid "AES128-CBC" msgstr "AES128-CBC" #: ../../common/config.py:142 msgid "3DES-CBC" msgstr "3DES-CBC" #: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "Blowfish-CBC" #: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "Cast128-CBC" #: ../../common/config.py:145 msgid "AES192-CBC" msgstr "AES192-CBC" #: ../../common/config.py:146 msgid "AES256-CBC" msgstr "AES256-CBC" #: ../../common/config.py:147 msgid "ARCFOUR" msgstr "ARCFOUR" #: ../../common/config.py:153 msgid "Main profile" msgstr "Profil principal" #: ../../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:289 msgid "Snapshots folder is not valid !" msgstr "Le dossier des sauvegardes n'est pas valide !" #: ../../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:307 msgid "You can't include backup folder !" msgstr "Vous ne pouvez pas inclure le dossier des sauvegardes !" #: ../../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:371 #, python-format msgid "%s is not a folder !" msgstr "%s n'est pas un dossier !" #: ../../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" "Are you sure you have write access ?" msgstr "" "Impossible d'écrire dans : %s\n" "Êtes-vous sûr d'avoir les droits en écriture ?" #: ../../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" "If not you should disable all automatic backups." msgstr "" "Impossible de trouver crontab.\n" "Ê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:1411 msgid "Failed to write new crontab." msgstr "Echec d'écriture de la nouvelle 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 "" "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:1517 #, 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:1526 #, python-format msgid "Couldn't find UUID for \"%s\"" msgstr "Impossible de trouver l'UUID pour %s" #: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" "\n" "%(error)s" msgstr "" "Impossible de monter '%(command)s' :\n" "\n" "%(error)s" #: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "Impossible de démonter encfs %s" #: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "Config pour dossier chiffré introuvable." #: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" "\n" "Créer un nouveau dossier chiffré ?" #: ../../common/encfstools.py:171 msgid "Cancel" msgstr "Annuler" #: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "Veuillez confirmer votre mot de passe" #: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "Le mot de passe ne correspond pas" #: ../../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: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'est pas membre du groupe 'fuse'.\n" " Lancer 'sudo adduser %(user)s fuse'. Pour appliquer les modifications " "déconnectez-vous et reconnectez-vous.\n" "Consultez 'man backintime' pour de plus amples instructions." #: ../../common/encfstools.py:211 msgid "" "encfs version 1.7.2 and before has a bug with option --reverse. Please " "update encfs" msgstr "" "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:512 ../../common/snapshots.py:1131 #: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "Sauvegarder" #: ../../common/mount.py:204 #, python-format msgid "" "Hash collision occurred in hash_id %s. Incrementing global value " "hash_collision and try again." msgstr "" "Une collision de hash s'est produite dans hash_id %s. Incrémentez la valeur " "globale hash_collision et réessayez." #: ../../common/mount.py:259 #, python-format msgid "mountpoint %s not empty." msgstr "le point de montage %s n'est pas vide." #: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "Délai de montage dépassé" #: ../../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:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Maintenant" #: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "AVEC DES ERREURS !" #: ../../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 "" "### Ce journal a été décodé avec le modèle de recherche automatique\n" "### Si certains chemins ne sont pas décodés vous pouvez les décoder " "manuellement avec:\n" #: ../../common/snapshots.py:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "ÉCHEC" #: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "Restaurer les permissions :" #: ../../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" "Your old snapshots can be moved according to this new format. OK?" msgstr "" "Back In Time a changé son format de sauvegarde.\n" "\n" "Vos anciennes sauvegardes peuvent être converties dans ce nouveau format. OK " "?" #: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" "\n" "The 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)" msgstr "" "Profil %s trouvé. \n" "\n" "Le nouveau format de sauvegarde prend en charge le stockage de différents " "utilisateurs et profils sur le même emplacement. Voulez-vous le même " "emplacement pour les deux profils ? \n" "\n" "(Le programme sera toujours capable de faire la différence entre les deux.)" #: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" msgstr "" "Aucun profil trouvé. Une mise à jour des profils est nécessaire, veuillez " "redémarrer Back In Time." #: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" "of profile %(profile_id)s are not moved to their new location\n" "Do 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" "\n" "If not Back In Time will restore former settings for this profile, however " "cannot continue taking snapshots" msgstr "" "%(snapshots_left)s\n" "du profil %(profile_id)s ne sont pas déplacés vers leur nouvel emplacement\n" "Voulez-vous exécuter ?\n" "(Back In Time sera en mesure de continuer à prendre des instantanés, mais " "les clichés restants ne seront pas pris en compte pour la suppression " "automatique)\n" "\n" "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:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" "Back In Time cannot continue taking new snapshots.\n" "\n" "You can manually move the snapshots, \n" "if you are done restart Back In Time to proceed" msgstr "" "Les anciens paramètres du profil %s sont restaurés.\n" "Back In Time ne peut pas continuer à prendre de nouveau .\n" "\n" "Vous pouvez déplacer manuellement les instantanés, \n" "si vous avez fini redémarrez Back In Time pour continuer." #: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" msgstr "" "La mise a jour s'est achevée avec succès.\n" "\n" "Back In Time continuera à prendre des instantanés selon la planification." #: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" "\n" "If 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" "\n" "If you do not, you will be asked again next time you start Back In Time." msgstr "" "Êtes vous sûr de ne pas vouloir déplacer vos anciens instantanés ?\n" "\n" "\n" "Si vous les déplacez, vous ne verrez plus ces questions la prochaine fois. " "Back In Time continuera de prendre des instantanés, mais la suppression " "intelligente ne pourra plus prendre en compte vos anciens instantanés.\n" "\n" "Sinon, ces questions vous seront reposées la prochaine fois que vous " "redémarrerez Back In Time." #: ../../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: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 ne peut toujours pas continuer à prendre de nouveaux " "instantanés.\n" "Redémarrez Back In Time pour voir à nouveau ces questions." #: ../../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." msgstr "" "Impossible de trouver le dossier des sauvegardes.\n" "S'il se trouve sur un disque externe, veuillez le connecter." #: ../../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:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "Impossible d'effectuer la sauvegarde %s !!!" #: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "Finalisation" #: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "Impossible de créer le dossier : %s" #: ../../common/snapshots.py:1217 msgid "..." msgstr "..." #: ../../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:1340 #, python-format msgid "Compare with snapshot %s" msgstr "Comparaison avec la sauvegarde %s" #: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "Création des liens physiques" #: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "Sauvegarde du fichier de configuration..." #: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "Sauvegarde des permissions..." #: ../../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:1695 ../../common/snapshots.py:1728 #: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "Suppression intelligente" #: ../../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:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "Gardez un minimum de %d%% inodes libres" #: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "Impossible de monter %s" #: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "Impossible de monter le sshfs %s" #: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" "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: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:278 #, python-format msgid "" "Password-less authentication for %(user)s@%(host)s failed. Look at 'man " "backintime' for further instructions." msgstr "" "L'authentification sans mot de passe pour %(user)s@%(host)s à échoué. " "Regardez 'man backintime' pour de plus amples instructions." #: ../../common/sshtools.py:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" "Le chiffrage %(cipher)s à échoué pour %(host)s :\n" "%(err)s" #: ../../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:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" "Le chemin d'accès distant existe mais n'est pas un répertoire :\n" " %s" #: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" "Le chemin d'accès distant n'est pas ouvert en écriture :\n" " %s" #: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" "Le chemin d'accès distant n'est pas éxécutable :\n" " %s" #: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" "Impossible de créer le chemin d'accès distant :\n" " %s" #: ../../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: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'hôte distant %(host)s ne supporte pas la commande '%(command)s' :\n" "%(err)s\n" "Consultez 'man backintime' pour plus d'informations" #: ../../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 "" "Vérifiez les commandes hôte %(host)s qui ot retourné une erreur inconnue : \n" "%(err)s \n" "Regardez 'man backintime' pour obtenir des instructions supplémentaires" #: ../../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" #: ../../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" #: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 msgid "Help" msgstr "Aide" #: ../../qt4/app.py:122 msgid "Config File Help" msgstr "Aide du fichier de configuration" #: ../../qt4/app.py:125 msgid "Website" msgstr "Site Web" #: ../../qt4/app.py:127 ../../qt4/app.py:982 msgid "Changelog" msgstr "Notes de version" #: ../../qt4/app.py:129 msgid "FAQ" msgstr "FAQ" #: ../../qt4/app.py:131 msgid "Ask a question" msgstr "Poser une question" #: ../../qt4/app.py:133 msgid "Report a bug" msgstr "Signaler un bogue" #: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "À propos" #: ../../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" #: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 #: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "Restaurer vers ..." #: ../../qt4/app.py:194 msgid "Restore and delete new files" msgstr "Restaurer et supprimer les nouveaux fichiers" #: ../../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 "" "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" #: ../../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" #: ../../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?" #: ../../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 "" "Impossible de trouver le dossier des sauvegardes.\n" "S'il se trouve sur un disque externe, veuillez connecter celui-ci puis faire " "OK" #: ../../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?" #: ../../qt4/app.py:667 ../../qt4/app.py:703 msgid "Working:" msgstr "En cours :" #: ../../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:" #: ../../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" #: ../../qt4/app.py:778 msgid "Root" msgstr "Système de fichiers" #: ../../qt4/app.py:779 msgid "Home" msgstr "Dossier personnel" #: ../../qt4/app.py:794 msgid "Backup folders" msgstr "Dossiers sauvegardés" #: ../../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." #: ../../qt4/app.py:860 ../../qt4/app.py:1476 #, python-format msgid "Last check %s" msgstr "Dernière vérification %s" #: ../../qt4/app.py:928 #, 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" #: ../../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'." #: ../../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?" #: ../../qt4/app.py:1014 msgid "" "WARNING: deleting files in filesystem root could break your whole system!!!" msgstr "" "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 :" #: ../../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" #: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "Voir le contenu sauvegardé dans %s" #: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "Voir le contenu actuel" #: ../../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" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 #: ../../qt4/settingsdialog.py:657 msgid "Errors" msgstr "Erreurs" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 msgid "Changes" msgstr "Modifications" #: ../../qt4/logviewdialog.py:92 msgid "Informations" msgstr "Informations" #: ../../qt4/logviewdialog.py:101 msgid "[E] Error, [I] Information, [C] Change" msgstr "[E] Erreur, [I] Information, [C] Modification" #: ../../qt4/logviewdialog.py:104 msgid "decode paths" msgstr "décoder les chemins" #: ../../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" #: ../../qt4/qt4systrayicon.py:124 msgid "Working..." msgstr "Traitement en cours..." #: ../../qt4/qt4tools.py:178 msgid "Today" msgstr "Aujourd'hui" #: ../../qt4/qt4tools.py:183 msgid "Yesterday" msgstr "Hier" #: ../../qt4/qt4tools.py:188 msgid "This week" msgstr "Cette semaine" #: ../../qt4/qt4tools.py:193 msgid "Last week" msgstr "La semaine dernière" #: ../../qt4/restoredialog.py:75 msgid "Show full Log" msgstr "Afficher le journal complet" #: ../../qt4/settingsdialog.py:68 msgid "Edit" msgstr "Modifier" #: ../../qt4/settingsdialog.py:73 msgid "Modify for Full System Backup" msgstr "" #: ../../qt4/settingsdialog.py:77 ../../qt4/settingsdialog.py:451 msgid "Add" msgstr "Ajouter à" #: ../../qt4/settingsdialog.py:81 ../../qt4/settingsdialog.py:408 #: ../../qt4/settingsdialog.py:467 msgid "Remove" msgstr "Supprimer" #: ../../qt4/settingsdialog.py:96 msgid "General" msgstr "Général" #: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "Mode :" #: ../../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" #: ../../qt4/settingsdialog.py:145 msgid "Folder" msgstr "Dossier" #: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "Réglages SSH" #: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "Hôte :" #: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "Port :" #: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "Utilisateur :" #: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "Chemin :" #: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "Type de chiffrement :" #: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "Clé privée :" #: ../../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" #: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "Enregistrer le Mot de passe dans le trousseau" #: ../../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)" #: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "Options avancées" #: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 msgid "Full snapshot path: " msgstr "Chemin complet de l'instantané " #: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "Planification" #: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "Jour:" #: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "Jour de la semaine :" #: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "Heure :" #: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "Heures :" #: ../../qt4/settingsdialog.py:339 msgid "" "Run Back In Time repeatedly. This is useful if the computer is not running " "regular." msgstr "" "Exécuter BackInTime à plusieurs reprises. Ce réglage est utile si " "l'ordinateur n'est pas allumé régulièrement" #: ../../qt4/settingsdialog.py:344 msgid "Every:" msgstr "Tous les:" #: ../../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 "" "Exécutez Back In Time dès que le lecteur est connecté (seulement une fois " "tous les X jours). \n" "Vous serez invité à entrer votre mot de passe sudo." #: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Inclure" #: ../../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" #: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Ajouter un dossier" #: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Exclure" #: ../../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 chiffré'. \n" "Seuls ceux séparés par astérisque sont autorisés ('foo/*', 'foo/**/bar')" #: ../../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é :" #: ../../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" #: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "Si antérieur à :" #: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "Si l'espace libre est inférieur à :" #: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "Si les inodes libres sont inférieurs à:" #: ../../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" #: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "jour(s)" #: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "Garder un instantané par jour depuis les derniers" #: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "Garder un instantané par semaine depuis les derniers" #: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "semaine(s)" #: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "Garder un instantané par mois depuis les derniers" #: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "mois" #: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "Garder un instantané par an depuis les derniers" #: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "Ne pas effacer les sauvegardes avec des noms" #: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Options" #: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Activer les notifications" #: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "Désactiver les sauvegardes automatiques en mode batterie" #: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" msgstr "Impossible d'obtenir l'état de l'alimentation du système" #: ../../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" #: ../../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)" #: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "Utiliser le checksum pour détecter les changements" #: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "Mode rsync complet. Peut être plus rapide mais :" #: ../../qt4/settingsdialog.py:634 msgid "" "- 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...)" #: ../../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é)" #: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "Niveau de journalisation :" #: ../../qt4/settingsdialog.py:656 msgid "None" msgstr "Aucun" #: ../../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 !" #: ../../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." #: ../../qt4/settingsdialog.py:734 msgid "Limit rsync bandwidth usage: " msgstr "Limiter l'utilisation de bande passante par rsync : " #: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr " KB/sec" #: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "Conserver les autorisations" #: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "Conserver les attributs étendus (xattr)" #: ../../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)" #: ../../qt4/settingsdialog.py:834 msgid "Paste additional options to rsync" msgstr "Passer des options supplémentaires à rsync" #: ../../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\"." #: ../../qt4/settingsdialog.py:847 msgid "Add prefix to SSH commands" msgstr "Ajouter un préfixe aux commandes SSH" #: ../../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" #: ../../qt4/settingsdialog.py:858 ../../qt4/settingsdialog.py:1691 msgid "default" msgstr "par défaut" #: ../../qt4/settingsdialog.py:875 msgid "Restore Config" msgstr "Restaurer la configuration" #: ../../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 "Nouveau profil" #: ../../qt4/settingsdialog.py:938 msgid "Rename profile" msgstr "Renommer le profil" #: ../../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\" ?" #: ../../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" #: ../../qt4/settingsdialog.py:1489 msgid "Exclude pattern" msgstr "Exclure selon un modèle" #: ../../qt4/settingsdialog.py:1502 msgid "Exclude file" msgstr "Exclure un fichier" #: ../../qt4/settingsdialog.py:1506 msgid "Exclude folder" msgstr "Exclure un dossier" #: ../../qt4/settingsdialog.py:1525 msgid "Include file" msgstr "Inclure le fichier" #: ../../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\" 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" #: ../../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 ?" #: ../../qt4/settingsdialog.py:1688 msgid "enabled" msgstr "activé" #: ../../qt4/settingsdialog.py:1690 msgid "disabled" msgstr "désactivé" #: ../../qt4/settingsdialog.py:1715 msgid "Restore Settings" msgstr "Restaurer les préférences" #: ../../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 "" "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 "" "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'." #: ../../qt4/settingsdialog.py:1794 ../../qt4/settingsdialog.py:1854 msgid "No config found" msgstr "Aucune configuration trouvé" #: ../../qt4/snapshotsdialog.py:49 ../../qt4/snapshotsdialog.py:173 msgid "Diff Options" msgstr "Options de comparaison" #: ../../qt4/snapshotsdialog.py:56 msgid "Command:" msgstr "Commande :" #: ../../qt4/snapshotsdialog.py:60 msgid "Parameters:" msgstr "Paramètres :" #: ../../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" #: ../../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 "" "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/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" #: ../../qt4/snapshotsdialog.py:359 msgid "WARNING: This can not be revoked!" msgstr "AVERTISSEMENT: Ce ne peut être révoqué !" #: ../../qt4/snapshotsdialog.py:374 #, python-format msgid "Exclude \"%s\" from future snapshots?" msgstr "Exclure \"%s\" des futurs instantanés ?" backintime-1.1.12/common/po/sr.po0000664000175000017500000011377112644767576016154 0ustar germargermar# Serbian translation for backintime # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the backintime package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \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: 2016-01-11 17:52+0000\n" "X-Generator: Launchpad (build 17881)\n" #: ../../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:77 msgid "At every boot/reboot" msgstr "Pri svakom pokretanju/ponovnom pokretanju sistema" #: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Svakih 5 minuta" #: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Svakih 10 minuta" #: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "" #: ../../common/config.py:81 msgid "Every hour" msgstr "" #: ../../common/config.py:82 msgid "Every 2 hours" msgstr "" #: ../../common/config.py:83 msgid "Every 4 hours" msgstr "" #: ../../common/config.py:84 msgid "Every 6 hours" msgstr "" #: ../../common/config.py:85 msgid "Every 12 hours" msgstr "" #: ../../common/config.py:86 msgid "Custom Hours" msgstr "" #: ../../common/config.py:87 msgid "Every Day" msgstr "Svakog dana" #: ../../common/config.py:88 msgid "Repeatedly (anacron)" msgstr "" #: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "" #: ../../common/config.py:90 msgid "Every Week" msgstr "Jednom nedeljno" #: ../../common/config.py:91 msgid "Every Month" msgstr "Jednom mesečno" #: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Dana" #: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Sedmica" #: ../../common/config.py:97 msgid "Year(s)" msgstr "Godina" #: ../../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:129 msgid "Local" msgstr "" #: ../../common/config.py:130 msgid "SSH" msgstr "" #: ../../common/config.py:130 ../../common/config.py:132 #: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "" #: ../../common/config.py:131 msgid "Local encrypted" msgstr "" #: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "" #: ../../common/config.py:132 msgid "SSH encrypted" msgstr "" #: ../../common/config.py:135 msgid "Default" msgstr "" #: ../../common/config.py:136 msgid "AES128-CTR" msgstr "" #: ../../common/config.py:137 msgid "AES192-CTR" msgstr "" #: ../../common/config.py:138 msgid "AES256-CTR" msgstr "" #: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "" #: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "" #: ../../common/config.py:141 msgid "AES128-CBC" msgstr "" #: ../../common/config.py:142 msgid "3DES-CBC" msgstr "" #: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "" #: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "" #: ../../common/config.py:145 msgid "AES192-CBC" msgstr "" #: ../../common/config.py:146 msgid "AES256-CBC" msgstr "" #: ../../common/config.py:147 msgid "ARCFOUR" msgstr "" #: ../../common/config.py:153 msgid "Main profile" msgstr "Glavni profil" #: ../../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:289 msgid "Snapshots folder is not valid !" msgstr "Direktorijum za snimak nije ispravan!" #: ../../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:307 msgid "You can't include backup folder !" msgstr "Nije moguće uključiti direktorijum za rezervne kopije!" #: ../../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:371 #, python-format msgid "%s is not a folder !" msgstr "%s nije direktorijum!" #: ../../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 "" "Ne mogu da upisujem u: %s\n" "Da li ste sigurni da imate dozvolu za upisivanje?" #: ../../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 "Kopiraj linkove (prati simboličke linkove)" #: ../../common/config.py:409 ../../qt4/settingsdialog.py:669 msgid "Expert Options" msgstr "Napredne opcije" #: ../../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" "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:1411 msgid "Failed to write new crontab." msgstr "" #: ../../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/config.py:1517 #, python-format msgid "Schedule udev doesn't work with mode %s" msgstr "" #: ../../common/config.py:1526 #, python-format msgid "Couldn't find UUID for \"%s\"" msgstr "" #: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" "\n" "%(error)s" msgstr "" #: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "" #: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "" #: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" #: ../../common/encfstools.py:171 msgid "Cancel" msgstr "" #: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "" #: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "" #: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" #: ../../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 "" #: ../../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:512 ../../common/snapshots.py:1131 #: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "Napravi snimak" #: ../../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:259 #, python-format msgid "mountpoint %s not empty." msgstr "" #: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" #: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" #: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Sada" #: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "SA GREŠKAMA !" #: ../../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:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "" #: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "" #: ../../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" "Your old snapshots can be moved according to this new format. OK?" msgstr "" "Back In Time je promenio format rezervnih kopija.\n" "\n" "Snimci vaših ranijih rezervnih kopija mogu biti premešteni u skladu sa novim " "formatom. OK?" #: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" "\n" "The 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)" msgstr "" "Prona]eno je %s profila.\n" "\n" "Novi format za rezervne kopije omogućava snimanje različitih korisnika i " "profila na istu lokaciju. Da li želite istu lokaciju za oba profila? \n" "\n" "(Program će biti u stanju da ih razlikuje)" #: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" msgstr "" "Nije pronađen nijedan profil. Prvo moram da obnovim listu profila. Molim " "ponovo pokrenite Back In Time" #: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" "of profile %(profile_id)s are not moved to their new location\n" "Do 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" "\n" "If not Back In Time will restore former settings for this profile, however " "cannot continue taking snapshots" msgstr "" #: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" "Back In Time cannot continue taking new snapshots.\n" "\n" "You can manually move the snapshots, \n" "if you are done restart Back In Time to proceed" msgstr "" "Prethodna podešavanja profila %s su povraćena.\n" "Back In Time nije u stanju da pravi nove snimke.\n" "\n" "Možete ručno da premestite snimke, \n" "ako ste ponovo učitali Back In Time" #: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" msgstr "" "Ažuriranje je bilo uspešno!\n" "\n" "Back In Time će nastaviti da pravi snimke po planu" #: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" "\n" "If 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" "\n" "If you do not, you will be asked again next time you start Back In Time." msgstr "" "Sigurni ste da ne želite da premestite vaše stare snimke?\n" "\n" "\n" "Ako jeste, sledeći put nećete videti ovo pitanje. Back In Time će nastaviti " "pravljenje snimaka, ali pametno uklanjanje neće moći da uzima u obzir vaše " "stare snimke!\n" "\n" "Ako niste, bićete ponovo upitani kada sledeći put pokrenete Back In Time." #: ../../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: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 još uvek nije u stanju da pravi nove snimke.\n" "Ponovo pokrenite Back In Time da bi ponovo videli pitanja" #: ../../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 "" "Ne mogu da pronađem direktorijum za snimke.\n" "Ako je na izmenljivom medijumu, molim vas da ga priključite." #: ../../common/snapshots.py:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "Čekam %s sekund" msgstr[1] "Čekam %s sekundi" msgstr[2] "Čekam %s sek." #: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "Nisam uspeo da napravim snimak %s !!!" #: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "Završavam" #: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "Ne mogu da kreiram direktorijum: %s" #: ../../common/snapshots.py:1217 msgid "..." msgstr "..." #: ../../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:1340 #, python-format msgid "Compare with snapshot %s" msgstr "Uporedi sa snimkom %s" #: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "Kreiraj čvrstu vezu" #: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "Sačuvaj konfiguracioni fajl ..." #: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "Sačuvaj dozvolu ..." #: ../../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:1695 ../../common/snapshots.py:1728 #: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "Pametno uklanjanje" #: ../../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:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" #: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "" #: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "" #: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" #: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" #: ../../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:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" #: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" #: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" #: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" #: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" #: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" #: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" #: ../../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 "" #: ../../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 "" #: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "" #: ../../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 "" #: ../../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ć" #: ../../qt4/app.py:122 msgid "Config File Help" msgstr "" #: ../../qt4/app.py:125 msgid "Website" msgstr "Internet stranica" #: ../../qt4/app.py:127 ../../qt4/app.py:982 msgid "Changelog" msgstr "" #: ../../qt4/app.py:129 msgid "FAQ" msgstr "" #: ../../qt4/app.py:131 msgid "Ask a question" msgstr "" #: ../../qt4/app.py:133 msgid "Report a bug" msgstr "" #: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "O programu" #: ../../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" #: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 #: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "" #: ../../qt4/app.py:194 msgid "Restore and delete new files" msgstr "" #: ../../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 "" #: ../../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 "" #: ../../qt4/app.py:277 msgid "Shortcuts" msgstr "Prečice" #: ../../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" msgstr "" "Ne mogu da pronađem direktorijum sa snimcima.\n" "Ako se nalazi na izmenjivom mediju, molim da ga priključite i pritisnete OK" #: ../../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 "Radim:" #: ../../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:" #: ../../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" #: ../../qt4/app.py:778 msgid "Root" msgstr "Koren" #: ../../qt4/app.py:779 msgid "Home" msgstr "Lični direktorijum" #: ../../qt4/app.py:794 msgid "Backup folders" msgstr "Direktorijumi za rezervne kopije" #: ../../qt4/app.py:849 msgid "This is NOT a snapshot but a live view of your local files" msgstr "" #: ../../qt4/app.py:860 ../../qt4/app.py:1476 #, python-format msgid "Last check %s" msgstr "" #: ../../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" #: ../../qt4/app.py:1004 #, python-format msgid "" "Backup local files before overwriting or\n" "removing with trailing '%(suffix)s'." msgstr "" #: ../../qt4/app.py:1010 msgid "" "Are you sure you want to remove all newer files in your original folder?" msgstr "" #: ../../qt4/app.py:1014 msgid "" "WARNING: deleting files in filesystem root could break your whole system!!!" msgstr "" #: ../../qt4/app.py:1016 msgid "Files to be restored:" msgstr "" #: ../../qt4/app.py:1031 msgid "Do you really want to restore this files(s):" msgstr "" #: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "Snimak: %s" #: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "Pogledaj snimak načinjen %s" #: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "Pogledaj trenutni sadržaj diska" #: ../../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" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 #: ../../qt4/settingsdialog.py:657 msgid "Errors" msgstr "Greške" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 msgid "Changes" msgstr "Izmene" #: ../../qt4/logviewdialog.py:92 msgid "Informations" msgstr "Informacije" #: ../../qt4/logviewdialog.py:101 msgid "[E] Error, [I] Information, [C] Change" msgstr "[E] Greška, [I] Informacije, [C] Izmena" #: ../../qt4/logviewdialog.py:104 msgid "decode paths" msgstr "" #: ../../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 "Radim..." #: ../../qt4/qt4tools.py:178 msgid "Today" msgstr "Danas" #: ../../qt4/qt4tools.py:183 msgid "Yesterday" msgstr "Juče" #: ../../qt4/qt4tools.py:188 msgid "This week" msgstr "Ove nedelje" #: ../../qt4/qt4tools.py:193 msgid "Last week" msgstr "Prošla sedmica" #: ../../qt4/restoredialog.py:75 msgid "Show full Log" msgstr "" #: ../../qt4/settingsdialog.py:68 msgid "Edit" msgstr "Uredi" #: ../../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 "Opšte" #: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "" #: ../../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" #: ../../qt4/settingsdialog.py:145 msgid "Folder" msgstr "" #: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" #: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "Računar:" #: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "" #: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "Korisnik:" #: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" #: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" #: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "" #: ../../qt4/settingsdialog.py:201 msgid "Key File" msgstr "" #: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 #: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "" #: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" #: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" #: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "Napredno" #: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 msgid "Full snapshot path: " msgstr "" #: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "Plan rada" #: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "" #: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "" #: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "Čas:" #: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "" #: ../../qt4/settingsdialog.py:339 msgid "" "Run Back In Time repeatedly. This is useful if the computer is not running " "regular." msgstr "" #: ../../qt4/settingsdialog.py:344 msgid "Every:" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Uključi" #: ../../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" #: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Dodaj direktorijum" #: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Izostavi" #: ../../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 "" #: ../../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:" #: ../../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" #: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "Stariji od:" #: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "Ako je slobodan prostor manji od:" #: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" #: ../../qt4/settingsdialog.py:551 msgid "Run in background on remote Host." msgstr "" #: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "" #: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "" #: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "" #: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "" #: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "" #: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "" #: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "" #: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "" #: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "Nemoj ukloniti imenovane snimke" #: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Opcije" #: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Omogući obaveštenja" #: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "Onemogući snimke kada se računar napaja iz baterije" #: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" msgstr "Informacija o status napajanja nije dostupna od sistema" #: ../../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 "" #: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "Nastavi nakon greške (zadrži nekompletan snimak)" #: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "Koristi kontrolnu sumu da otkriješ izmene" #: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "" #: ../../qt4/settingsdialog.py:634 msgid "" "- snapshots are not read-only\n" "- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "Nivo detalja u izveštaju:" #: ../../qt4/settingsdialog.py:656 msgid "None" msgstr "Nijedan" #: ../../qt4/settingsdialog.py:658 msgid "Changes & Errors" msgstr "Izmene i greške" #: ../../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š!" #: ../../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 "" #: ../../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 "" #: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" #: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "Sačuvaj ACL" #: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "Sačuvaj proširene atribute (xattr)" #: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute links)" msgstr "Kopiraj nebezbedni link (funkcioniše samo sa apsolutnim linkovima)" #: ../../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 "Novi profil" #: ../../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 "Da li ste sigurni da želite da uklonite 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 "" #: ../../qt4/settingsdialog.py:1489 msgid "Exclude pattern" msgstr "Izostavi šablon" #: ../../qt4/settingsdialog.py:1502 msgid "Exclude file" msgstr "Izostavi fajl" #: ../../qt4/settingsdialog.py:1506 msgid "Exclude folder" msgstr "Izostavi direktorijum" #: ../../qt4/settingsdialog.py:1525 msgid "Include file" msgstr "Uključi fajl" #: ../../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 "Uključi direktorijum" #: ../../qt4/settingsdialog.py:1572 msgid "Are you sure you want to change snapshots folder ?" msgstr "Da li stvarno želiš da promeniš direktorijum za snimkea?" #: ../../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 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" #: ../../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)" #: ../../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 "Idi na" #: ../../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 "" "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 "" backintime-1.1.12/common/po/ro.po0000664000175000017500000010530112644767576016136 0ustar germargermar# Romanian translation for backintime # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the backintime package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \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" "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 % 100 > 19) || ((n % 100 " "== 0) && (n != 0))) ? 2: 1));\n" "X-Launchpad-Export-Date: 2016-01-11 17:52+0000\n" "X-Generator: Launchpad (build 17881)\n" #: ../../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:77 msgid "At every boot/reboot" msgstr "La fiecare pornire/restart" #: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "La fiecare 5 minute" #: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "La fiecare 10 minute" #: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "" #: ../../common/config.py:81 msgid "Every hour" msgstr "" #: ../../common/config.py:82 msgid "Every 2 hours" msgstr "" #: ../../common/config.py:83 msgid "Every 4 hours" msgstr "" #: ../../common/config.py:84 msgid "Every 6 hours" msgstr "" #: ../../common/config.py:85 msgid "Every 12 hours" msgstr "" #: ../../common/config.py:86 msgid "Custom Hours" msgstr "" #: ../../common/config.py:87 msgid "Every Day" msgstr "Zilnic" #: ../../common/config.py:88 msgid "Repeatedly (anacron)" msgstr "" #: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "" #: ../../common/config.py:90 msgid "Every Week" msgstr "Săptămânal" #: ../../common/config.py:91 msgid "Every Month" msgstr "Lunar" #: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Zi (zile)" #: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Săptămâni" #: ../../common/config.py:97 msgid "Year(s)" msgstr "Ani" #: ../../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:129 msgid "Local" msgstr "" #: ../../common/config.py:130 msgid "SSH" msgstr "" #: ../../common/config.py:130 ../../common/config.py:132 #: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "" #: ../../common/config.py:131 msgid "Local encrypted" msgstr "" #: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "" #: ../../common/config.py:132 msgid "SSH encrypted" msgstr "" #: ../../common/config.py:135 msgid "Default" msgstr "" #: ../../common/config.py:136 msgid "AES128-CTR" msgstr "" #: ../../common/config.py:137 msgid "AES192-CTR" msgstr "" #: ../../common/config.py:138 msgid "AES256-CTR" msgstr "" #: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "" #: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "" #: ../../common/config.py:141 msgid "AES128-CBC" msgstr "" #: ../../common/config.py:142 msgid "3DES-CBC" msgstr "" #: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "" #: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "" #: ../../common/config.py:145 msgid "AES192-CBC" msgstr "" #: ../../common/config.py:146 msgid "AES256-CBC" msgstr "" #: ../../common/config.py:147 msgid "ARCFOUR" msgstr "" #: ../../common/config.py:153 msgid "Main profile" msgstr "Profil principal" #: ../../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:289 msgid "Snapshots folder is not valid !" msgstr "Folderul pentru instantaneu nu este valid!" #: ../../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:307 msgid "You can't include backup folder !" msgstr "Nu poți include directorul de backup !" #: ../../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:371 #, python-format msgid "%s is not a folder !" msgstr "%s nu este un director !" #: ../../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: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 "Opțiuni expert" #: ../../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" "If not you should disable all automatic backups." msgstr "" #: ../../common/config.py:1411 msgid "Failed to write new crontab." msgstr "" #: ../../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/config.py:1517 #, python-format msgid "Schedule udev doesn't work with mode %s" msgstr "" #: ../../common/config.py:1526 #, python-format msgid "Couldn't find UUID for \"%s\"" msgstr "" #: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" "\n" "%(error)s" msgstr "" #: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "" #: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "" #: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" #: ../../common/encfstools.py:171 msgid "Cancel" msgstr "" #: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "" #: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "" #: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" #: ../../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 "" #: ../../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:512 ../../common/snapshots.py:1131 #: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "" #: ../../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:259 #, python-format msgid "mountpoint %s not empty." msgstr "" #: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" #: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" #: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Acum" #: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "CU ERORI !" #: ../../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:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "" #: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "" #: ../../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:868 #, python-format msgid "" "%s profiles found. \n" "\n" "The 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)" msgstr "" #: ../../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:918 #, python-format msgid "" "%(snapshots_left)s\n" "of profile %(profile_id)s are not moved to their new location\n" "Do 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" "\n" "If not Back In Time will restore former settings for this profile, however " "cannot continue taking snapshots" msgstr "" #: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" "Back In Time cannot continue taking new snapshots.\n" "\n" "You can manually move the snapshots, \n" "if you are done restart Back In Time to proceed" msgstr "" #: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" msgstr "" #: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" "\n" "If 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" "\n" "If you do not, you will be asked again next time you start Back In Time." msgstr "" #: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "" #: ../../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: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:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "" msgstr[1] "" #: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "" #: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "Se finalizează" #: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "Nu se poate crea directorul: %s" #: ../../common/snapshots.py:1217 msgid "..." msgstr "..." #: ../../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:1340 #, python-format msgid "Compare with snapshot %s" msgstr "" #: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "" #: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "" #: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "" #: ../../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:1695 ../../common/snapshots.py:1728 #: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "Eliminare inteligentă" #: ../../common/snapshots.py:1704 msgid "Remove old snapshots" msgstr "" #: ../../common/snapshots.py:1733 msgid "Try to keep min free space" msgstr "" #: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" #: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "" #: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "" #: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" #: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" #: ../../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:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" #: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" #: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" #: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" #: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" #: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" #: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" #: ../../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 "" #: ../../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 "" #: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" 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 "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" #: ../../qt4/app.py:122 msgid "Config File Help" msgstr "" #: ../../qt4/app.py:125 msgid "Website" msgstr "Pagină web" #: ../../qt4/app.py:127 ../../qt4/app.py:982 msgid "Changelog" msgstr "" #: ../../qt4/app.py:129 msgid "FAQ" msgstr "" #: ../../qt4/app.py:131 msgid "Ask a question" msgstr "" #: ../../qt4/app.py:133 msgid "Report a bug" msgstr "" #: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "Despre" #: ../../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ă" #: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 #: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "" #: ../../qt4/app.py:194 msgid "Restore and delete new files" msgstr "" #: ../../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 "" #: ../../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 "Scurtături" #: ../../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" 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 "" #: ../../qt4/app.py:667 ../../qt4/app.py:703 msgid "Working:" msgstr "Se lucrează:" #: ../../qt4/app.py:695 msgid "Done, no backup needed" msgstr "" #: ../../qt4/app.py:707 msgid "Error:" msgstr "" #: ../../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" #: ../../qt4/app.py:778 msgid "Root" msgstr "Rădăcină" #: ../../qt4/app.py:779 msgid "Home" msgstr "Acasă" #: ../../qt4/app.py:794 msgid "Backup folders" msgstr "" #: ../../qt4/app.py:849 msgid "This is NOT a snapshot but a live view of your local files" msgstr "" #: ../../qt4/app.py:860 ../../qt4/app.py:1476 #, python-format msgid "Last check %s" msgstr "" #: ../../qt4/app.py:928 #, python-format msgid "" "Are you sure you want to remove the snapshot:\n" "%s" msgstr "" #: ../../qt4/app.py:1004 #, python-format msgid "" "Backup local files before overwriting or\n" "removing with trailing '%(suffix)s'." msgstr "" #: ../../qt4/app.py:1010 msgid "" "Are you sure you want to remove all newer files in your original folder?" msgstr "" #: ../../qt4/app.py:1014 msgid "" "WARNING: deleting files in filesystem root could break your whole system!!!" msgstr "" #: ../../qt4/app.py:1016 msgid "Files to be restored:" msgstr "" #: ../../qt4/app.py:1031 msgid "Do you really want to restore this files(s):" msgstr "" #: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "" #: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "" #: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "" #: ../../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 "" #: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 msgid "All" msgstr "" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 #: ../../qt4/settingsdialog.py:657 msgid "Errors" msgstr "" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 msgid "Changes" msgstr "" #: ../../qt4/logviewdialog.py:92 msgid "Informations" msgstr "" #: ../../qt4/logviewdialog.py:101 msgid "[E] Error, [I] Information, [C] Change" msgstr "" #: ../../qt4/logviewdialog.py:104 msgid "decode paths" msgstr "" #: ../../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 "Se lucrează..." #: ../../qt4/qt4tools.py:178 msgid "Today" msgstr "Astăzi" #: ../../qt4/qt4tools.py:183 msgid "Yesterday" msgstr "Ieri" #: ../../qt4/qt4tools.py:188 msgid "This week" msgstr "Săptămâna aceasta" #: ../../qt4/qt4tools.py:193 msgid "Last week" msgstr "Săptămâna trecută" #: ../../qt4/restoredialog.py:75 msgid "Show full Log" msgstr "" #: ../../qt4/settingsdialog.py:68 msgid "Edit" msgstr "Modifică" #: ../../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 "" #: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:145 msgid "Folder" msgstr "" #: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" #: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "" #: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "" #: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "" #: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" #: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" #: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "" #: ../../qt4/settingsdialog.py:201 msgid "Key File" msgstr "" #: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 #: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "" #: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" #: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" #: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "" #: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 msgid "Full snapshot path: " msgstr "" #: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "Orar" #: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "" #: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "" #: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "" #: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "" #: ../../qt4/settingsdialog.py:339 msgid "" "Run Back In Time repeatedly. This is useful if the computer is not running " "regular." msgstr "" #: ../../qt4/settingsdialog.py:344 msgid "Every:" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Include" #: ../../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" #: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Adaugă director" #: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Exclude" #: ../../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 "" #: ../../qt4/settingsdialog.py:425 msgid "Exclude patterns, files or folders" msgstr "" #: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "Mai vechi de:" #: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "Dacă spațiul disponibil este mai mic de:" #: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" #: ../../qt4/settingsdialog.py:551 msgid "Run in background on remote Host." msgstr "" #: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "" #: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "" #: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "" #: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "" #: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "" #: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "" #: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "" #: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "" #: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "" #: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Opțiuni" #: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Activează notificările" #: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "" #: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" 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 "" #: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "" #: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "" #: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "" #: ../../qt4/settingsdialog.py:634 msgid "" "- snapshots are not read-only\n" "- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "" #: ../../qt4/settingsdialog.py:656 msgid "None" msgstr "" #: ../../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 "" #: ../../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 "" #: ../../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 "" #: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" #: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "" #: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "" #: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute 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 "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 "" #: ../../qt4/settingsdialog.py:1489 msgid "Exclude pattern" msgstr "" #: ../../qt4/settingsdialog.py:1502 msgid "Exclude file" msgstr "Exclude fișier" #: ../../qt4/settingsdialog.py:1506 msgid "Exclude folder" msgstr "Exclude director" #: ../../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 "" #: ../../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 "" #: ../../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 "" #: ../../qt4/snapshotsdialog.py:56 msgid "Command:" msgstr "Comandă:" #: ../../qt4/snapshotsdialog.py:60 msgid "Parameters:" msgstr "Parametri:" #: ../../qt4/snapshotsdialog.py:64 msgid "Use %1 and %2 for path parameters" msgstr "" #: ../../qt4/snapshotsdialog.py:106 msgid "List only different snapshots" msgstr "" #: ../../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 "" #: ../../qt4/snapshotsdialog.py:148 msgid "Select All" msgstr "" #: ../../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 "" #: ../../qt4/snapshotsdialog.py:333 #, python-format msgid "Command not found: %s" msgstr "Comandă negăsită: %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 "" backintime-1.1.12/common/po/fi.po0000664000175000017500000011473512644767576016127 0ustar germargermar# Finnish translation for backintime # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the backintime package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \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: 2016-01-11 17:52+0000\n" "X-Generator: Launchpad (build 17881)\n" #: ../../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:77 msgid "At every boot/reboot" msgstr "Joka käynnistyksessä/uudelleenkäynnistyksessä" #: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "5 minuutin välein" #: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "10 minuutin välein" #: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "" #: ../../common/config.py:81 msgid "Every hour" msgstr "" #: ../../common/config.py:82 msgid "Every 2 hours" msgstr "" #: ../../common/config.py:83 msgid "Every 4 hours" msgstr "" #: ../../common/config.py:84 msgid "Every 6 hours" msgstr "" #: ../../common/config.py:85 msgid "Every 12 hours" msgstr "" #: ../../common/config.py:86 msgid "Custom Hours" msgstr "" #: ../../common/config.py:87 msgid "Every Day" msgstr "Joka päivä" #: ../../common/config.py:88 msgid "Repeatedly (anacron)" msgstr "" #: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "" #: ../../common/config.py:90 msgid "Every Week" msgstr "Joka viikko" #: ../../common/config.py:91 msgid "Every Month" msgstr "Joka kuukausi" #: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Päivä(ä)" #: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Viikko(a)" #: ../../common/config.py:97 msgid "Year(s)" msgstr "Vuosi(a)" #: ../../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:129 msgid "Local" msgstr "" #: ../../common/config.py:130 msgid "SSH" msgstr "" #: ../../common/config.py:130 ../../common/config.py:132 #: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "" #: ../../common/config.py:131 msgid "Local encrypted" msgstr "" #: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "" #: ../../common/config.py:132 msgid "SSH encrypted" msgstr "" #: ../../common/config.py:135 msgid "Default" msgstr "" #: ../../common/config.py:136 msgid "AES128-CTR" msgstr "" #: ../../common/config.py:137 msgid "AES192-CTR" msgstr "" #: ../../common/config.py:138 msgid "AES256-CTR" msgstr "" #: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "" #: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "" #: ../../common/config.py:141 msgid "AES128-CBC" msgstr "" #: ../../common/config.py:142 msgid "3DES-CBC" msgstr "" #: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "" #: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "" #: ../../common/config.py:145 msgid "AES192-CBC" msgstr "" #: ../../common/config.py:146 msgid "AES256-CBC" msgstr "" #: ../../common/config.py:147 msgid "ARCFOUR" msgstr "" #: ../../common/config.py:153 msgid "Main profile" msgstr "Pääprofiili" #: ../../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:289 msgid "Snapshots folder is not valid !" msgstr "Otoskansio ei ole pätevä !" #: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "Valitse ainakin yksi kansio varmuuskopioitavaksi!" #: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "Varmuuskopiokansiota ei voi lisätä!" #: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "Varmuuskopionkansion alikansiota ei voi lisätä!" #: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s ei ole kansio!" #: ../../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 "" "Ei voi kirjoittaa: %s\n" "Oletko varma että sinulla on kirjoitusoikeudet?" #: ../../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 "Kopioi linkit (ratkaise symboliset linkit)" #: ../../common/config.py:409 ../../qt4/settingsdialog.py:669 msgid "Expert Options" msgstr "Lisäasetukset" #: ../../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" "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:1411 msgid "Failed to write new crontab." msgstr "" #: ../../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/config.py:1517 #, python-format msgid "Schedule udev doesn't work with mode %s" msgstr "" #: ../../common/config.py:1526 #, python-format msgid "Couldn't find UUID for \"%s\"" msgstr "" #: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" "\n" "%(error)s" msgstr "" #: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "" #: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "" #: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" #: ../../common/encfstools.py:171 msgid "Cancel" msgstr "" #: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "" #: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "" #: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" #: ../../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 "" #: ../../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:512 ../../common/snapshots.py:1131 #: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "Ota otos" #: ../../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:259 #, python-format msgid "mountpoint %s not empty." msgstr "" #: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" #: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" #: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Nyt" #: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "VIRHEITÄ!" #: ../../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:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "EPÄONNISTUI!" #: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "Palauta oikeudet:" #: ../../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 "" "Back In Time muutti varmuuskopioiden tiedostomuotoa.\n" "\n" "Vanhat otoksesi voidaan siirtää uudeen tiedostomuotoon. OK?" #: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" "\n" "The 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)" msgstr "" "%s profiilia löytynyt. \n" "\n" "Uusi varmuuskopioiden tiedostomuoto tukee eri käyttäjien ja profiilien " "tallentamista samaan paikkaan. Käytetäänkö samaa paikkaa molemmille " "profiileille? \n" "\n" "(Ohjelma pystyy silti erottamaan molemmat profiilit)" #: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" msgstr "" "Profiileja ei löytynyt. Käynnistä Back In Time uudelleen profiilipäivityksiä " "varten" #: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" "of profile %(profile_id)s are not moved to their new location\n" "Do 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" "\n" "If not Back In Time will restore former settings for this profile, however " "cannot continue taking snapshots" msgstr "" #: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" "Back In Time cannot continue taking new snapshots.\n" "\n" "You can manually move the snapshots, \n" "if you are done restart Back In Time to proceed" msgstr "" "Edelliset asetukset profiilin %s on palautettu.\n" "Back In Time ei jatka uusien otoksien ottamista.\n" "\n" "Voit siirtää manuaalisesti otokset, \n" "jos olet valmis jatkamaan, käynnistä Back In Time uudelleen" #: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" msgstr "" "Päivitys onnistui!\n" "\n" "Back In Time jatkaa otosten ottamista aikataulun mukaan" #: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" "\n" "If 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" "\n" "If you do not, you will be asked again next time you start Back In Time." msgstr "" "Oletko varma että et halua siirtää vanhoja otoksiasi?\n" "\n" "\n" "Mikäli olet varma, et näe näitä kysymyksiä uudestaan. Back In Time jatkaa " "otoksien ottamista, mutta Älykäs poisto ei ota huomioon vanhoja otoksiasi.\n" "\n" "Mikäli et ole varma, tämä kysytään seuraavan kerran Back In Timen " "käynnistyksen yhteydessä." #: ../../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: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 ei voi jatkaa uusien otosten ottamista.\n" "Käynnistä Back In Time uudelleen nähdäksesi kysymykset uudestaan" #: ../../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 "" "Otoskansiota ei löydy.\n" "Jos otoskansio sijaitsee ulkoisella asemalla, liitä asema tietokoneeseen." #: ../../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:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "Otoksen %s otto epäonnistui !!!" #: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "Viimeistellään" #: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "Ei voinut luoda kansiota: %s" #: ../../common/snapshots.py:1217 msgid "..." msgstr "..." #: ../../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:1340 #, python-format msgid "Compare with snapshot %s" msgstr "Vertaa otokseen %s" #: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "Luo hard link-tiedostot" #: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "Tallenna asetustiedosto ..." #: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "Tallenna käyttöoikeudet ..." #: ../../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:1695 ../../common/snapshots.py:1728 #: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "Älykäs poisto" #: ../../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:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" #: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "" #: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "" #: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" #: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" #: ../../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:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" #: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" #: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" #: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" #: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" #: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" #: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" #: ../../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 "" #: ../../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 "" #: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "" #: ../../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 "" #: ../../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" #: ../../qt4/app.py:122 msgid "Config File Help" msgstr "" #: ../../qt4/app.py:125 msgid "Website" msgstr "Verkkosivu" #: ../../qt4/app.py:127 ../../qt4/app.py:982 msgid "Changelog" msgstr "" #: ../../qt4/app.py:129 msgid "FAQ" msgstr "" #: ../../qt4/app.py:131 msgid "Ask a question" msgstr "" #: ../../qt4/app.py:133 msgid "Report a bug" msgstr "" #: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "Tietoja ohjelmasta" #: ../../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" #: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 #: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "Palauta kohteeseen ..." #: ../../qt4/app.py:194 msgid "Restore and delete new files" msgstr "" #: ../../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 "" #: ../../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" #: ../../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" msgstr "" "Otoskansiota ei löydy.\n" "Jos kansio on ulkoisella asemalla, kytke laite kiinni ja paina OK" #: ../../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 "Käsitellään:" #: ../../qt4/app.py:695 msgid "Done, no backup needed" msgstr "Valmis, varmuuskopiota ei tarvittu" #: ../../qt4/app.py:707 msgid "Error:" msgstr "Virhe:" #: ../../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" #: ../../qt4/app.py:778 msgid "Root" msgstr "Root" #: ../../qt4/app.py:779 msgid "Home" msgstr "Home" #: ../../qt4/app.py:794 msgid "Backup folders" msgstr "Varmuuskopiokansiot" #: ../../qt4/app.py:849 msgid "This is NOT a snapshot but a live view of your local files" msgstr "" #: ../../qt4/app.py:860 ../../qt4/app.py:1476 #, python-format msgid "Last check %s" msgstr "" #: ../../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" #: ../../qt4/app.py:1004 #, python-format msgid "" "Backup local files before overwriting or\n" "removing with trailing '%(suffix)s'." msgstr "" #: ../../qt4/app.py:1010 msgid "" "Are you sure you want to remove all newer files in your original folder?" msgstr "" #: ../../qt4/app.py:1014 msgid "" "WARNING: deleting files in filesystem root could break your whole system!!!" msgstr "" #: ../../qt4/app.py:1016 msgid "Files to be restored:" msgstr "" #: ../../qt4/app.py:1031 msgid "Do you really want to restore this files(s):" msgstr "" #: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "Otos: %s" #: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "Selaa otosta joka on tehty %s" #: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "Selaa nykyistä levyn sisältöä" #: ../../qt4/app.py:1268 #, python-format msgid "Restore '%s'" msgstr "Palauta '%s'" #: ../../qt4/app.py:1269 #, python-format msgid "Restore '%s' to ..." msgstr "Palauta '%s' kohteeseen ..." #: ../../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 "Profiili:" #: ../../qt4/logviewdialog.py:81 msgid "Filter:" msgstr "Suodatin:" #: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 msgid "All" msgstr "Kaikki" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 #: ../../qt4/settingsdialog.py:657 msgid "Errors" msgstr "Virheet" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 msgid "Changes" msgstr "Muutokset" #: ../../qt4/logviewdialog.py:92 msgid "Informations" msgstr "Tiedot" #: ../../qt4/logviewdialog.py:101 msgid "[E] Error, [I] Information, [C] Change" msgstr "[E] Virhe, [I] Tietoa, [C] Muutokset" #: ../../qt4/logviewdialog.py:104 msgid "decode paths" msgstr "" #: ../../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 "Työn alla..." #: ../../qt4/qt4tools.py:178 msgid "Today" msgstr "Tänään" #: ../../qt4/qt4tools.py:183 msgid "Yesterday" msgstr "Eilen" #: ../../qt4/qt4tools.py:188 msgid "This week" msgstr "Tällä viikolla" #: ../../qt4/qt4tools.py:193 msgid "Last week" msgstr "Viime viikolla" #: ../../qt4/restoredialog.py:75 msgid "Show full Log" msgstr "" #: ../../qt4/settingsdialog.py:68 msgid "Edit" msgstr "Muokkaa" #: ../../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 "Yleiset" #: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "" #: ../../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" #: ../../qt4/settingsdialog.py:145 msgid "Folder" msgstr "" #: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" #: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "Verkkonimi:" #: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "" #: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "Käyttäjä:" #: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" #: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" #: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "" #: ../../qt4/settingsdialog.py:201 msgid "Key File" msgstr "" #: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 #: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "" #: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" #: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" #: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "Lisäasetukset" #: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 msgid "Full snapshot path: " msgstr "" #: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "Aikataulu" #: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "Päivä:" #: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "Viikonpäivä:" #: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "Tunti:" #: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "" #: ../../qt4/settingsdialog.py:339 msgid "" "Run Back In Time repeatedly. This is useful if the computer is not running " "regular." msgstr "" #: ../../qt4/settingsdialog.py:344 msgid "Every:" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Sisällytä" #: ../../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" #: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Lisää kansio" #: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Poissulje" #: ../../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 "" #: ../../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:" #: ../../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" #: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "Vanhempia kun:" #: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "Vapaata tilaa vähemmän kun:" #: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" #: ../../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ä" #: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "päivältä" #: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "Säilytä yksi otos jokaiselta päivältä viimeiseltä" #: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "Säilytä yksi otos jokaiselta viikolta viimeiseltä" #: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "viikkolta" #: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "Säilytä yksi otos jokaiselta kuukaudelta viimeiseltä" #: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "kuukaudelta" #: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "Säilytä yksi otos jokaiselta vuodelta viimeiseltä" #: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "Älä poista nimettyjä otoksia" #: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Valinnat" #: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Näytä ilmoitukset" #: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "Älä ota otoksia kun kone käyttää akkua" #: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" msgstr "Virranhallinnan tilatiedot eivät ole käytettävissä" #: ../../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 "" #: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "Jatka virheistä huolimatta (pidä keskeneräiset otokset)" #: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "Käytä tarkistussummia muutosten havaitsemiseen" #: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "" #: ../../qt4/settingsdialog.py:634 msgid "" "- 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ä ...)" #: ../../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)" #: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "Lokitaso:" #: ../../qt4/settingsdialog.py:656 msgid "None" msgstr "Ei mitään" #: ../../qt4/settingsdialog.py:658 msgid "Changes & Errors" msgstr "Muutokset & virheet" #: ../../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 !" #: ../../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 "" #: ../../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 "" #: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" #: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "Säilytä tiedostojärjestelmän pääsylistat (ACL)" #: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "Säilytä tiedostojen lisäominaisuudet (xattr)" #: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute links)" msgstr "" "Kopioi turvattomat linkit (toimii vain absoluuttisten linkkien kanssa)" #: ../../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 "Uusi profiili" #: ../../qt4/settingsdialog.py:938 msgid "Rename profile" msgstr "Uudelleennimeä profiili" #: ../../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\" ?" #: ../../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 "Poissulje hakulausekkeella" #: ../../qt4/settingsdialog.py:1502 msgid "Exclude file" msgstr "Poissulje tiedosto" #: ../../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 "" #: ../../qt4/settingsdialog.py:1545 msgid "Include folder" msgstr "Sisällytä kansio" #: ../../qt4/settingsdialog.py:1572 msgid "Are you sure you want to change snapshots folder ?" msgstr "Oletko varma että haluat vaihtaa otosten kansiota?" #: ../../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-asetukset" #: ../../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 "" #: ../../qt4/snapshotsdialog.py:123 msgid "Deep check (more accurate, but slow)" msgstr "Syvätarkistus (tarkempi, mutta hitaampi)" #: ../../qt4/snapshotsdialog.py:144 msgid "Delete" msgstr "" #: ../../qt4/snapshotsdialog.py:148 msgid "Select All" msgstr "" #: ../../qt4/snapshotsdialog.py:161 msgid "Diff" msgstr "Erot" #: ../../qt4/snapshotsdialog.py:172 msgid "Go To" msgstr "Siirry" #: ../../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 "" "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 "" backintime-1.1.12/common/po/pt.po0000664000175000017500000011545512644767576016154 0ustar germargermar# Portuguese translation for backintime # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the backintime package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \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: 2016-01-11 17:52+0000\n" "X-Generator: Launchpad (build 17881)\n" #: ../../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:77 msgid "At every boot/reboot" msgstr "A cada arranque/reinício" #: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "A cada 5 minutos" #: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "A cada 10 minutos" #: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "A cada 30 minutos" #: ../../common/config.py:81 msgid "Every hour" msgstr "A cada hora" #: ../../common/config.py:82 msgid "Every 2 hours" msgstr "A cada duas horas" #: ../../common/config.py:83 msgid "Every 4 hours" msgstr "A cada quatro horas" #: ../../common/config.py:84 msgid "Every 6 hours" msgstr "A cada 6 horas" #: ../../common/config.py:85 msgid "Every 12 hours" msgstr "A cada 12 horas" #: ../../common/config.py:86 msgid "Custom Hours" msgstr "A Horas Definidas" #: ../../common/config.py:87 msgid "Every Day" msgstr "Diariamente" #: ../../common/config.py:88 msgid "Repeatedly (anacron)" msgstr "Repetidamente (anacron)" #: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "Qunado o dispositifo for conectado (udev)" #: ../../common/config.py:90 msgid "Every Week" msgstr "Semanalmente" #: ../../common/config.py:91 msgid "Every Month" msgstr "Mensalmente" #: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Dia(s)" #: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Semana(s)" #: ../../common/config.py:97 msgid "Year(s)" msgstr "Ano(s)" #: ../../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 " EXPERIMENTAL!" #: ../../common/config.py:129 msgid "Local" msgstr "Local" #: ../../common/config.py:130 msgid "SSH" msgstr "SSH" #: ../../common/config.py:130 ../../common/config.py:132 #: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "Chave privada SSH" #: ../../common/config.py:131 msgid "Local encrypted" msgstr "Local encriptado" #: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "Encriptação" #: ../../common/config.py:132 msgid "SSH encrypted" msgstr "SSH encriptado" #: ../../common/config.py:135 msgid "Default" msgstr "Padrão" #: ../../common/config.py:136 msgid "AES128-CTR" msgstr "AES128-CTR" #: ../../common/config.py:137 msgid "AES192-CTR" msgstr "AES192-CTR" #: ../../common/config.py:138 msgid "AES256-CTR" msgstr "AES256-CTR" #: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "ARCFOUR256" #: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "ARCFOUR128" #: ../../common/config.py:141 msgid "AES128-CBC" msgstr "AES128-CBC" #: ../../common/config.py:142 msgid "3DES-CBC" msgstr "3DES-CBC" #: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "Blowfish-CBC" #: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "Cast128-CBC" #: ../../common/config.py:145 msgid "AES192-CBC" msgstr "AES192-CBC" #: ../../common/config.py:146 msgid "AES256-CBC" msgstr "AES256-CBC" #: ../../common/config.py:147 msgid "ARCFOUR" msgstr "ARCFOUR" #: ../../common/config.py:153 msgid "Main profile" msgstr "Perfil Principal" #: ../../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:289 msgid "Snapshots folder is not valid !" msgstr "A pasta dos Snapshots não é valida !" #: ../../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:307 msgid "You can't include backup folder !" msgstr "Não pode incluir a directoria de backup !" #: ../../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:371 #, python-format msgid "%s is not a folder !" msgstr "%s não é uma directoria !" #: ../../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 "" "Impossível escrever em : %s\n" "Verifique se tem acesso ." #: ../../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 "Opções Avançadas" #: ../../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" "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:1411 msgid "Failed to write new crontab." msgstr "" #: ../../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/config.py:1517 #, python-format msgid "Schedule udev doesn't work with mode %s" msgstr "Calendarização udev não funciona com o perfil %s" #: ../../common/config.py:1526 #, python-format msgid "Couldn't find UUID for \"%s\"" msgstr "Impossível encontrar UUID para %s" #: ../../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:114 #, python-format msgid "Can't unmount encfs %s" msgstr "Impossível desmontar encfs %s" #: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "Configuração para pasta encriptada não encontrada" #: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" "\n" "Criar uma nova pasta encriptada?" #: ../../common/encfstools.py:171 msgid "Cancel" msgstr "Cancelar" #: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "Por favor, confirmar password" #: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "Password não coincide" #: ../../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: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: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:512 ../../common/snapshots.py:1131 #: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "Tirar snapshot" #: ../../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:259 #, python-format msgid "mountpoint %s not empty." msgstr "Ponto de montagem %s não está vazio" #: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" #: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "Perfil '%(profile)s': Insira password for %(mode)s: " #: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Agora" #: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "COM ERROS !" #: ../../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:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "ERRO" #: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "Restaurar permissões" #: ../../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:868 #, python-format msgid "" "%s profiles found. \n" "\n" "The 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)" msgstr "" "%s perfis encontrados.\n" "\n" "O novo formato de cópia de segurança permite arquivar vários perfis e " "utilizadores no mesmo local. Deseja o mesmo local para ambos os perfis?\n" "\n" "(O programa será capaz de os diferenciar posteriormente.)" #: ../../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:918 #, python-format msgid "" "%(snapshots_left)s\n" "of profile %(profile_id)s are not moved to their new location\n" "Do 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" "\n" "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:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" "Back In Time cannot continue taking new snapshots.\n" "\n" "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: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:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" "\n" "If 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" "\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:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "" "Back In Time vai novamente continuar a fazer snapshots conforme agendado" #: ../../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 sanpshots.\n" "Reinicie Back In Time para ver as perguntas novamente" #: ../../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." msgstr "" "Não foi possível encontrar a pasta dos snapshots.\n" "Se estiver numa drive amovível, ligue-a por favor." #: ../../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:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "Falhou a criação da snapshot %s !!!" #: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "A finalizar" #: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "Impossível criar pasta: %s" #: ../../common/snapshots.py:1217 msgid "..." msgstr "..." #: ../../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 pasta: %s" #: ../../common/snapshots.py:1340 #, python-format msgid "Compare with snapshot %s" msgstr "Compare com a snapshot %s" #: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "Criar hard-links" #: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "Gravar ficheiro de configuração ..." #: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "Gravar permissões ..." #: ../../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 "Impossível renomear %(new_path)s para %(path)s" #: ../../common/snapshots.py:1695 ../../common/snapshots.py:1728 #: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "Remoção inteligente" #: ../../common/snapshots.py:1704 msgid "Remove old snapshots" msgstr "Remover snapshots antigas" #: ../../common/snapshots.py:1733 msgid "Try to keep min free space" msgstr "Tentar manter" #: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" #: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "Não foi possível montar %s" #: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "" #: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" #: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" #: ../../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:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" #: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" #: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" #: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" #: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" #: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" #: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" #: ../../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 "" #: ../../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 "" #: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" 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 "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" #: ../../qt4/app.py:122 msgid "Config File Help" msgstr "" #: ../../qt4/app.py:125 msgid "Website" msgstr "Página Web" #: ../../qt4/app.py:127 ../../qt4/app.py:982 msgid "Changelog" msgstr "" #: ../../qt4/app.py:129 msgid "FAQ" msgstr "" #: ../../qt4/app.py:131 msgid "Ask a question" msgstr "" #: ../../qt4/app.py:133 msgid "Report a bug" msgstr "" #: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "Sobre" #: ../../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" #: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 #: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "" #: ../../qt4/app.py:194 msgid "Restore and delete new files" msgstr "" #: ../../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 "" #: ../../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" #: ../../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" 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 "" #: ../../qt4/app.py:667 ../../qt4/app.py:703 msgid "Working:" msgstr "A processar:" #: ../../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:" #: ../../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" #: ../../qt4/app.py:778 msgid "Root" msgstr "Raiz" #: ../../qt4/app.py:779 msgid "Home" msgstr "Pasta Pessoal" #: ../../qt4/app.py:794 msgid "Backup folders" msgstr "Directorias de backup" #: ../../qt4/app.py:849 msgid "This is NOT a snapshot but a live view of your local files" msgstr "" #: ../../qt4/app.py:860 ../../qt4/app.py:1476 #, python-format msgid "Last check %s" msgstr "" #: ../../qt4/app.py:928 #, python-format msgid "" "Are you sure you want to remove the snapshot:\n" "%s" msgstr "" #: ../../qt4/app.py:1004 #, python-format msgid "" "Backup local files before overwriting or\n" "removing with trailing '%(suffix)s'." msgstr "" #: ../../qt4/app.py:1010 msgid "" "Are you sure you want to remove all newer files in your original folder?" msgstr "" #: ../../qt4/app.py:1014 msgid "" "WARNING: deleting files in filesystem root could break your whole system!!!" msgstr "" #: ../../qt4/app.py:1016 msgid "Files to be restored:" msgstr "" #: ../../qt4/app.py:1031 msgid "Do you really want to restore this files(s):" msgstr "" #: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "" #: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "" #: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "Ver conteúdo actual do disco" #: ../../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 "Perfil:" #: ../../qt4/logviewdialog.py:81 msgid "Filter:" msgstr "" #: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 msgid "All" msgstr "" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 #: ../../qt4/settingsdialog.py:657 msgid "Errors" msgstr "Erros" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 msgid "Changes" msgstr "Alterações" #: ../../qt4/logviewdialog.py:92 msgid "Informations" msgstr "Informações" #: ../../qt4/logviewdialog.py:101 msgid "[E] Error, [I] Information, [C] Change" msgstr "" #: ../../qt4/logviewdialog.py:104 msgid "decode paths" msgstr "" #: ../../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 "A Processar..." #: ../../qt4/qt4tools.py:178 msgid "Today" msgstr "Hoje" #: ../../qt4/qt4tools.py:183 msgid "Yesterday" msgstr "Ontem" #: ../../qt4/qt4tools.py:188 msgid "This week" msgstr "Esta semana" #: ../../qt4/qt4tools.py:193 msgid "Last week" msgstr "Semana passada" #: ../../qt4/restoredialog.py:75 msgid "Show full Log" msgstr "" #: ../../qt4/settingsdialog.py:68 msgid "Edit" msgstr "Editar" #: ../../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 "Geral" #: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "" #: ../../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" #: ../../qt4/settingsdialog.py:145 msgid "Folder" msgstr "" #: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" #: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "Servidor:" #: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "" #: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "Utilizador:" #: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" #: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" #: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "" #: ../../qt4/settingsdialog.py:201 msgid "Key File" msgstr "" #: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 #: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "" #: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" #: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" #: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "" #: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 msgid "Full snapshot path: " msgstr "" #: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "Agenda" #: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "" #: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "" #: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "Hora:" #: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "" #: ../../qt4/settingsdialog.py:339 msgid "" "Run Back In Time repeatedly. This is useful if the computer is not running " "regular." msgstr "" #: ../../qt4/settingsdialog.py:344 msgid "Every:" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Incluir" #: ../../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" #: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Adicionar pasta ..." #: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Excluir" #: ../../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 "" #: ../../qt4/settingsdialog.py:425 msgid "Exclude patterns, files or folders" msgstr "" #: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "Altamente recomendado:" #: ../../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" #: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "Mais antigo do que:" #: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "Se espaço livre é inferior a:" #: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" #: ../../qt4/settingsdialog.py:551 msgid "Run in background on remote Host." msgstr "" #: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "" #: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "" #: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "" #: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "" #: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "" #: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "" #: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "" #: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "" #: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "Não remover snapshots nomeadas" #: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Opções" #: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Activar as notificações" #: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "" #: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" 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 "" #: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "" #: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "Use a soma de verificação para detectar mudanças" #: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "" #: ../../qt4/settingsdialog.py:634 msgid "" "- snapshots are not read-only\n" "- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "" #: ../../qt4/settingsdialog.py:656 msgid "None" msgstr "" #: ../../qt4/settingsdialog.py:658 msgid "Changes & Errors" msgstr "Alterações & Erros" #: ../../qt4/settingsdialog.py:674 msgid "Change these options only if you really know what you are doing !" 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 "" #: ../../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 "" #: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" #: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "" #: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "" #: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute 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 "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 "" #: ../../qt4/settingsdialog.py:1489 msgid "Exclude pattern" msgstr "" #: ../../qt4/settingsdialog.py:1502 msgid "Exclude file" msgstr "Excluir ficheiro" #: ../../qt4/settingsdialog.py:1506 msgid "Exclude folder" msgstr "Excluir pasta" #: ../../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 "" #: ../../qt4/settingsdialog.py:1545 msgid "Include folder" msgstr "Incluir pasta" #: ../../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 "" #: ../../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 "" #: ../../qt4/snapshotsdialog.py:106 msgid "List only different snapshots" msgstr "" #: ../../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 "" #: ../../qt4/snapshotsdialog.py:148 msgid "Select All" msgstr "" #: ../../qt4/snapshotsdialog.py:161 msgid "Diff" msgstr "" #: ../../qt4/snapshotsdialog.py:172 msgid "Go To" msgstr "Ir para" #: ../../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 "Comando não encontrado: %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 "" backintime-1.1.12/common/po/nl.po0000664000175000017500000014303612644767576016136 0ustar germargermar# Dutch translation for backintime # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the backintime package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \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: 2016-01-11 17:52+0000\n" "X-Generator: Launchpad (build 17881)\n" #: ../../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:77 msgid "At every boot/reboot" msgstr "Bij elke start/herstart" #: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Elke 5 minuten" #: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Elke 10 minuten" #: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "Elke 30 minuten" #: ../../common/config.py:81 msgid "Every hour" msgstr "Elk uur" #: ../../common/config.py:82 msgid "Every 2 hours" msgstr "Elke 2 uren" #: ../../common/config.py:83 msgid "Every 4 hours" msgstr "Elke 4 uren" #: ../../common/config.py:84 msgid "Every 6 hours" msgstr "Elke 6 uren" #: ../../common/config.py:85 msgid "Every 12 hours" msgstr "Elke 12 uren" #: ../../common/config.py:86 msgid "Custom Hours" msgstr "Aangepaste uren" #: ../../common/config.py:87 msgid "Every Day" msgstr "Elke dag" #: ../../common/config.py:88 msgid "Repeatedly (anacron)" msgstr "Herhaaldelijk (anacron)" #: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "Wanneer er een extern medium aangesloten wordt (udev)" #: ../../common/config.py:90 msgid "Every Week" msgstr "Elke week" #: ../../common/config.py:91 msgid "Every Month" msgstr "Elke maand" #: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Dag(en)" #: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Week/weken" #: ../../common/config.py:97 msgid "Year(s)" msgstr "Jaar/jaren" #: ../../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:129 msgid "Local" msgstr "Lokaal" #: ../../common/config.py:130 msgid "SSH" msgstr "SSH" #: ../../common/config.py:130 ../../common/config.py:132 #: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "SSH-privésleutel" #: ../../common/config.py:131 msgid "Local encrypted" msgstr "Lokaal versleuteld" #: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "Versleuteling" #: ../../common/config.py:132 msgid "SSH encrypted" msgstr "SSH-versleuteld" #: ../../common/config.py:135 msgid "Default" msgstr "Standaardwaarde" #: ../../common/config.py:136 msgid "AES128-CTR" msgstr "AES128-CTR" #: ../../common/config.py:137 msgid "AES192-CTR" msgstr "AES192-CTR" #: ../../common/config.py:138 msgid "AES256-CTR" msgstr "AES256-CTR" #: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "ARCFOUR256" #: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "ARCFOUR128" #: ../../common/config.py:141 msgid "AES128-CBC" msgstr "AES128-CBC" #: ../../common/config.py:142 msgid "3DES-CBC" msgstr "3DES-CBC" #: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "Blowfish-CBC" #: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "Cast128-CBC" #: ../../common/config.py:145 msgid "AES192-CBC" msgstr "AES192-CBC" #: ../../common/config.py:146 msgid "AES256-CBC" msgstr "AES256-CBC" #: ../../common/config.py:147 msgid "ARCFOUR" msgstr "ARCFOUR" #: ../../common/config.py:153 msgid "Main profile" msgstr "Hoofdprofiel" #: ../../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:289 msgid "Snapshots folder is not valid !" msgstr "Reservekopiemap is niet geldig!" #: ../../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:307 msgid "You can't include backup folder !" msgstr "U kunt de reservekopiemap niet toevoegen!" #: ../../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:371 #, python-format msgid "%s is not a folder !" msgstr "%s is geen map!" #: ../../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" "Are you sure you have write access ?" msgstr "" "Kan niet schrijven naar: %s\n" "Heeft u schrijfrechten?" #: ../../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" "If not you should disable all automatic backups." msgstr "" "Kan crontab niet vinden.\n" "Weet u zeker dat cron geïnstalleerd is?\n" "Indien dit niet het geval is, dient u het maken van automatische " "reservekopieën uit te schakelen." #: ../../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:1526 #, python-format msgid "Couldn't find UUID for \"%s\"" msgstr "Kon de unieke identificatiecode voor \"%s\" niet vinden" #: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" "\n" "%(error)s" msgstr "" "Kan '%(command)s' niet aankoppelen :\n" "\n" "%(error)s" #: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "Kan encfs-%s niet ontkoppelen" #: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "Configuratie voor versleutelde map niet gevonden." #: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" "\n" "Nieuwe versleutelde map aanmaken?" #: ../../common/encfstools.py:171 msgid "Cancel" msgstr "Annuleren" #: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "Wachtwoord bevestigen" #: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "Wachtwoord komt niet overeen" #: ../../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: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 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 'Back In Time-handleiding' voor verdere instructies." #: ../../common/encfstools.py:211 msgid "" "encfs version 1.7.2 and before has a bug with option --reverse. Please " "update encfs" msgstr "" "encfs-versie 1.7.2 en daarvoor hebben een fout met de optie --reverse. Werk " "encfs a.u.b. bij" #: ../../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:204 #, python-format msgid "" "Hash collision occurred in hash_id %s. Incrementing global value " "hash_collision and try again." msgstr "" "Er heeft een Hash collision plaatsgevonden in hash_id %s. Vergroot de " "globale waarde voor hash_collision en probeer het opnieuw." #: ../../common/mount.py:259 #, python-format msgid "mountpoint %s not empty." msgstr "koppelpunt-%s niet leeg." #: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "Time-out aankoppelprocesvergrendeling" #: ../../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:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Huidige schijfinhoud" #: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "MET FOUTEN!" #: ../../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 logboek is gedecodeerd met automatisch zoekpatroon\n" "### Als sommige paden niet gedecodeerd zijn dan kunt u deze handmatig " "decoderen met:\n" #: ../../common/snapshots.py:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "MISLUKT" #: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" 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: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 heeft het reservekopieformaat gewijzigd.\n" "\n" "Uw oude reservekopieën kunnen overgezet worden naar dit nieuwe formaat. Wilt " "u dit?" #: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" "\n" "The 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)" msgstr "" "%s profielen gevonden.\n" "\n" "Het nieuwe reservekopieformaat ondersteunt de opslag van meerdere gebruikers " "en profielen op dezelfde locatie. Wilt u dezelfde locatie voor beide " "profielen? \n" "\n" "(Het programma kan er nog steeds onderscheid tussen blijven maken)" #: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" msgstr "" "Geen profielen gevonden. U dient de profielen eerst bij te werken en daarna " "Back In Time te herstarten" #: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" "of profile %(profile_id)s are not moved to their new location\n" "Do 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" "\n" "If not Back In Time will restore former settings for this profile, however " "cannot continue taking snapshots" msgstr "" "%(snapshots_left)s\n" "van %(profile_id)s zijn niet verplaatst naar hun nieuwe locatie\n" "Wilt u doorgaan?\n" "(Back In Time zal nog steeds reservekopieën kunnen maken, maar de resterende " "reservekopieën zullen echter niet meer automatisch verwijderd worden)\n" "\n" "Indien nee, dan zal Back In Time de oorspronkelijke instellingen van dit " "profiel herstellen, er kunnen dan echter geen reservekopieën meer gemaakt " "worden" #: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" "Back In Time cannot continue taking new snapshots.\n" "\n" "You can manually move the snapshots, \n" "if you are done restart Back In Time to proceed" msgstr "" "De voormalige instellingen van profiel %s zijn hersteld.\n" "Back In Time kan niet doorgaan met het maken van nieuwe reservekopieën.\n" "\n" "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:936 msgid "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" msgstr "" "Bijwerken is gelukt!\n" "\n" "Back In Time zal nu doorgaan met het maken van reservekopieën zoals gepland" #: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" "\n" "If 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" "\n" "If you do not, you will be asked again next time you start Back In Time." msgstr "" "Weet u zeker dat u uw oude reservekopieën niet wilt verplaatsen?\n" "\n" "\n" "Zo ja, dan zullen deze vragen de volgende keer niet meer gesteld worden; " "Back In Time zal dan doorgaan met het maken van reservekopieën, maar Slim " "verwijderen kan dan niet langer rekening houden met uw oude reservekopieën!\n" "\n" "Zo nee, dan zullen deze vragen opnieuw gesteld worden na het openen van Back " "In Time." #: ../../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: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 kan nog steeds niet doorgaan met het maken van nieuwe " "reservekopieën.\n" "Herstart Back In Time om de vragen opnieuw te zien" #: ../../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." msgstr "" "Kan reservekopiemap niet vinden.\n" "Als deze op een extern medium staat, gelieve dit aan te sluiten." #: ../../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:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "Kon reservekopie %s niet maken!!!" #: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "Voltooien" #: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "Kan deze map niet aanmaken: %s" #: ../../common/snapshots.py:1217 msgid "..." msgstr "..." #: ../../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:1340 #, python-format msgid "Compare with snapshot %s" msgstr "Met reservekopie %s vergelijken" #: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "Harde links aanmaken" #: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "Configuratiebestand opslaan..." #: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "Rechten opslaan..." #: ../../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:1695 ../../common/snapshots.py:1728 #: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "Slim verwijderen" #: ../../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:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "Probeer een minimum van %d%% vrije inodes te houden" #: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "Kan %s niet aankoppelen" #: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "Kan sshfs-%s niet ontkoppelen" #: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" "Kon SSH-privésleutel niet ontgrendelen. Het wachtwoord is ongeldig of is " "niet beschikbaar voor cron." #: ../../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: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 'Back In Time-handleiding' voor verdere instructies." #: ../../common/sshtools.py:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" "Codering %(cipher)s mislukt voor %(host)s:\n" "%(err)s" #: ../../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:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" "Pad op afstand bestaat maar is geen map:\n" " %s" #: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" "Pad op afstand is niet beschrijfbaar:\n" " %s" #: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" "Pad op afstand is niet uitvoerbaar:\n" " %s" #: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" "Kon geen pad op afstand aanmaken:\n" " %s" #: ../../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: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 "" "Gastcomputer op afstand %(host)s ondersteunt geen '%(command)s':\n" "%(err)s\n" "Bekijk de 'Back In Time-handleiding' voor verdere instructies" #: ../../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 "" "Controleer de opdrachten op de gastcomputer. %(host)s gaf een onbekende fout " "aan:\n" "%(err)s\n" "Bekijk de 'Back In Time-handleiding' voor verdere instructies" #: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "Gastcomputer op afstand %s ondersteunt geen harde links" #: ../../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." #: ../../qt4/app.py:111 msgid "Exit" msgstr "Afsluiten" #: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 msgid "Help" msgstr "Hulp" #: ../../qt4/app.py:122 msgid "Config File Help" msgstr "Configuratiebestand-hulp" #: ../../qt4/app.py:125 msgid "Website" msgstr "Website" #: ../../qt4/app.py:127 ../../qt4/app.py:982 msgid "Changelog" msgstr "Wijzigingslogboek" #: ../../qt4/app.py:129 msgid "FAQ" msgstr "FAQ" #: ../../qt4/app.py:131 msgid "Ask a question" msgstr "Een vraag stellen" #: ../../qt4/app.py:133 msgid "Report a bug" msgstr "Een fout melden" #: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "Info" #: ../../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" #: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 #: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "Herstellen naar..." #: ../../qt4/app.py:194 msgid "Restore and delete new files" msgstr "Nieuwe bestanden herstellen en verwijderen" #: ../../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 "" "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" #: ../../qt4/app.py:213 msgid "Snapshot" msgstr "Reservekopie" #: ../../qt4/app.py:224 msgid "View" msgstr "Beeld" #: ../../qt4/app.py:277 msgid "Shortcuts" msgstr "Snelkoppelingen" #: ../../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" #: ../../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" msgstr "" "Kan reservekopiemap niet vinden.\n" "Als deze op een extern medium staat, gelieve dit aan te sluiten en op OK te " "drukken." #: ../../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?" #: ../../qt4/app.py:667 ../../qt4/app.py:703 msgid "Working:" msgstr "Bezig met:" #: ../../qt4/app.py:695 msgid "Done, no backup needed" msgstr "Klaar, geen reservekopie nodig" #: ../../qt4/app.py:707 msgid "Error:" msgstr "Fout:" #: ../../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" #: ../../qt4/app.py:778 msgid "Root" msgstr "Hoofdmap" #: ../../qt4/app.py:779 msgid "Home" msgstr "Persoonlijke map" #: ../../qt4/app.py:794 msgid "Backup folders" msgstr "Mappen om reservekopie van te maken" #: ../../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" #: ../../qt4/app.py:860 ../../qt4/app.py:1476 #, python-format msgid "Last check %s" msgstr "Laatste controle %s" #: ../../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" #: ../../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." #: ../../qt4/app.py:1010 msgid "" "Are you sure you want to remove all newer files in your original folder?" msgstr "" "Weet u zeker dat u alle nieuwere bestanden in de oorspronkelijke map wilt " "verwijderen?" #: ../../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!!!" #: ../../qt4/app.py:1016 msgid "Files to be restored:" msgstr "Bestanden om te herstellen:" #: ../../qt4/app.py:1031 msgid "Do you really want to restore this files(s):" msgstr "" "Weet u zeker dat u het volgende bestand of bestanden wilt herstellen:" #: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "Reservekopie: %s" #: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "Reservekopie gemaakt op %s bekijken" #: ../../qt4/app.py:1229 msgid "View the current disk content" 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" #: ../../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" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 #: ../../qt4/settingsdialog.py:657 msgid "Errors" msgstr "Fouten" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 msgid "Changes" msgstr "Wijzigingen" #: ../../qt4/logviewdialog.py:92 msgid "Informations" msgstr "Informatie" #: ../../qt4/logviewdialog.py:101 msgid "[E] Error, [I] Information, [C] Change" msgstr "[E] Fout, [I] Informatie, [C] Wijziging" #: ../../qt4/logviewdialog.py:104 msgid "decode paths" msgstr "decodeerpaden" #: ../../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" #: ../../qt4/qt4systrayicon.py:124 msgid "Working..." msgstr "Bezig met..." #: ../../qt4/qt4tools.py:178 msgid "Today" msgstr "Vandaag" #: ../../qt4/qt4tools.py:183 msgid "Yesterday" msgstr "Gisteren" #: ../../qt4/qt4tools.py:188 msgid "This week" msgstr "Deze week" #: ../../qt4/qt4tools.py:193 msgid "Last week" msgstr "Afgelopen week" #: ../../qt4/restoredialog.py:75 msgid "Show full Log" msgstr "Volledig logboek tonen" #: ../../qt4/settingsdialog.py:68 msgid "Edit" msgstr "Bewerken" #: ../../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" #: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "Modus:" #: ../../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" #: ../../qt4/settingsdialog.py:145 msgid "Folder" msgstr "Map" #: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "SSH-instellingen" #: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "Gastcomputer:" #: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "Poort:" #: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "Gebruiker:" #: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "Pad:" #: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "Codering:" #: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "Privésleutel:" #: ../../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" #: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "Wachtwoord toevoegen aan sleutelbos" #: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" "Wachtwoordbuffergeheugen voor Cron (Veiligheidskwestie: beheerder kan " "wachtwoord lezen)" #: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "Geavanceerd" #: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 msgid "Full snapshot path: " msgstr "Volledige reservekopiepad: " #: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "Planning" #: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "Dag:" #: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "Dag van de week:" #: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "Uur:" #: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "Uren:" #: ../../qt4/settingsdialog.py:339 msgid "" "Run Back In Time repeatedly. This is useful if the computer is not running " "regular." msgstr "" "Laat Back In Time herhaaldelijk een reservekopie maken. Dit is vooral " "bruikbaar wanneer de computer niet regelmatig wordt gebruikt." #: ../../qt4/settingsdialog.py:344 msgid "Every:" msgstr "Elke:" #: ../../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 reservekopie maken zodra er een extern medium " "aangesloten wordt (alleen om de X dagen).\n" "Er zal om uw beheerderswachtwoord gevraagd worden." #: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Opnemen" #: ../../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" #: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Map toevoegen" #: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Uitsluiten" #: ../../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 "" "Waarschuwing: Wildcards ('foo*', '[fF]oo', 'fo?') zullen genegeerd " "worden in de modus 'SSH-encrypted'.\n" "Alleen ster-tekens (*) die gescheiden zijn zijn toegestaan ('foo/*', " "'foo/**/bar')" #: ../../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:" #: ../../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" #: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "Ouder dan:" #: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "Indien de vrije ruimte kleiner is dan:" #: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "Indien de vrije inodes kleiner zijn dan:" #: ../../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" #: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "dag(en)" #: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "Behoud één reservekopie per dag van de afgelopen" #: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "Behoud één reservekopie per week van de afgelopen" #: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "week/weken" #: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "Behoud één reservekopie per maand van de afgelopen" #: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "maand(en)" #: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "Behoud één reservekopie per jaar van alle jaren" #: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "Geen hernoemde reservekopieën verwijderen" #: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Opties" #: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Meldingen activeren" #: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "Maken van reservekopieën uitschakelen indien op accu" #: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" msgstr "Status stroomvoorziening niet beschikbaar vanuit systeem" #: ../../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'" #: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "Doorgaan op fouten (incomplete reservekopieën behouden)" #: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "Gebruik controlesom om wijzigingen op te sporen" #: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "Volledige rsync-modus. Mag dan sneller zijn maar:" #: ../../qt4/settingsdialog.py:634 msgid "" "- 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 ...)" #: ../../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)" #: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "Logboekniveau:" #: ../../qt4/settingsdialog.py:656 msgid "None" msgstr "Geen" #: ../../qt4/settingsdialog.py:658 msgid "Changes & Errors" msgstr "Wijzigingen & fouten" #: ../../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!" #: ../../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." #: ../../qt4/settingsdialog.py:734 msgid "Limit rsync bandwidth usage: " msgstr "rsync-bandbreedteverbruik limiteren: " #: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr " KB/sec" #: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "ACL bewaren" #: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "Uitgebreide attributen (xattr) bewaren" #: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute links)" msgstr "Onveilige links kopiëren (werkt alleen met absolute links)" #: ../../qt4/settingsdialog.py:834 msgid "Paste additional options to rsync" msgstr "Extra opties aan rsync plakken" #: ../../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\"." #: ../../qt4/settingsdialog.py:847 msgid "Add prefix to SSH commands" msgstr "Voorvoegsel aan SSH-opdrachten toevoegen" #: ../../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" #: ../../qt4/settingsdialog.py:858 ../../qt4/settingsdialog.py:1691 msgid "default" msgstr "standaardwaarde" #: ../../qt4/settingsdialog.py:875 msgid "Restore Config" msgstr "Configuratie herstellen" #: ../../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?" #: ../../qt4/settingsdialog.py:922 msgid "New profile" msgstr "Nieuw profiel" #: ../../qt4/settingsdialog.py:938 msgid "Rename profile" msgstr "Profiel hernoemen" #: ../../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 ?" #: ../../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" #: ../../qt4/settingsdialog.py:1489 msgid "Exclude pattern" msgstr "Uit te sluiten patroon" #: ../../qt4/settingsdialog.py:1502 msgid "Exclude file" msgstr "Selecteer een bestand om uit te sluiten van de reservekopie" #: ../../qt4/settingsdialog.py:1506 msgid "Exclude folder" msgstr "Selecteer een map om uit te sluiten van de reservekopie" #: ../../qt4/settingsdialog.py:1525 msgid "Include file" msgstr "Bestand opnemen" #: ../../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\" 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?" #: ../../qt4/settingsdialog.py:1545 msgid "Include folder" msgstr "Volgende map opnemen" #: ../../qt4/settingsdialog.py:1572 msgid "Are you sure you want to change snapshots folder ?" msgstr "Weet u zeker dat u de reservekopiemap wilt wijzigen?" #: ../../qt4/settingsdialog.py:1688 msgid "enabled" msgstr "ingeschakeld" #: ../../qt4/settingsdialog.py:1690 msgid "disabled" msgstr "uitgeschakeld" #: ../../qt4/settingsdialog.py:1715 msgid "Restore Settings" msgstr "Instellingen herstellen" #: ../../qt4/settingsdialog.py:1732 msgid " and add your user to group 'fuse'" msgstr " en uw gebruiker toe te voegen aan de groep 'fuse'" #: ../../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 "" "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'." #: ../../qt4/settingsdialog.py:1794 ../../qt4/settingsdialog.py:1854 msgid "No config found" msgstr "Geen configuratie gevonden" #: ../../qt4/snapshotsdialog.py:49 ../../qt4/snapshotsdialog.py:173 msgid "Diff Options" msgstr "Vergelijkopties" #: ../../qt4/snapshotsdialog.py:56 msgid "Command:" msgstr "Opdracht:" #: ../../qt4/snapshotsdialog.py:60 msgid "Parameters:" msgstr "Parameters:" #: ../../qt4/snapshotsdialog.py:64 msgid "Use %1 and %2 for path parameters" msgstr "%1 en %2 voor padparameters gebruiken" #: ../../qt4/snapshotsdialog.py:106 msgid "List only different snapshots" msgstr "Alleen reservekopieën tonen die verschillen" #: ../../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" #: ../../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?" backintime-1.1.12/common/po/id.po0000664000175000017500000012130212644767576016111 0ustar germargermar# Indonesian translation for backintime # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the backintime package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \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: 2016-01-11 17:52+0000\n" "X-Generator: Launchpad (build 17881)\n" #: ../../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:77 msgid "At every boot/reboot" msgstr "Pada setiap boot/reboot" #: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Setiap 5 menit" #: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Setiap 10 menit" #: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "Setiap 30 menit" #: ../../common/config.py:81 msgid "Every hour" msgstr "Setiap jam" #: ../../common/config.py:82 msgid "Every 2 hours" msgstr "Setiap 2 jam" #: ../../common/config.py:83 msgid "Every 4 hours" msgstr "Setiap 4 jam" #: ../../common/config.py:84 msgid "Every 6 hours" msgstr "Setiap 6 jam" #: ../../common/config.py:85 msgid "Every 12 hours" msgstr "Setiap 12 jam" #: ../../common/config.py:86 msgid "Custom Hours" msgstr "Menentukan Jam Sendiri" #: ../../common/config.py:87 msgid "Every Day" msgstr "Setiap Hari" #: ../../common/config.py:88 msgid "Repeatedly (anacron)" msgstr "" #: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "Ketika drive dihubungkan (udev)" #: ../../common/config.py:90 msgid "Every Week" msgstr "Setiap Minggu" #: ../../common/config.py:91 msgid "Every Month" msgstr "Setiap Bulan" #: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Hari(s)" #: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Minggu(s)" #: ../../common/config.py:97 msgid "Year(s)" msgstr "Tahun(s)" #: ../../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:129 msgid "Local" msgstr "Lokal" #: ../../common/config.py:130 msgid "SSH" msgstr "SSH" #: ../../common/config.py:130 ../../common/config.py:132 #: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "Kunci private SSH" #: ../../common/config.py:131 msgid "Local encrypted" msgstr "Lokal terenkripsi" #: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "Enkripsi" #: ../../common/config.py:132 msgid "SSH encrypted" msgstr "SSH terenkripsi" #: ../../common/config.py:135 msgid "Default" msgstr "Bawaan" #: ../../common/config.py:136 msgid "AES128-CTR" msgstr "AES128-CTR" #: ../../common/config.py:137 msgid "AES192-CTR" msgstr "AES192-CTR" #: ../../common/config.py:138 msgid "AES256-CTR" msgstr "AES256-CTR" #: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "ARCFOUR256" #: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "ARCFOUR128" #: ../../common/config.py:141 msgid "AES128-CBC" msgstr "AES128-CBC" #: ../../common/config.py:142 msgid "3DES-CBC" msgstr "3DES-CBC" #: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "Blowfish-CBC" #: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "Cast128-CBC" #: ../../common/config.py:145 msgid "AES192-CBC" msgstr "AES192-CBC" #: ../../common/config.py:146 msgid "AES256-CBC" msgstr "AES256-CBC" #: ../../common/config.py:147 msgid "ARCFOUR" msgstr "ARCFOUR" #: ../../common/config.py:153 msgid "Main profile" msgstr "Profil utama" #: ../../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:289 msgid "Snapshots folder is not valid !" msgstr "Folder snapshot tidak valid !" #: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "Anda harus memilih setidaknya satu folder untuk backup !" #: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "Anda jangan memasukkan juga folder backup !" #: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "Anda jangan memasukkan juga sub-folder backup !" #: ../../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: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: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" "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:1411 msgid "Failed to write new crontab." msgstr "" #: ../../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/config.py:1517 #, python-format msgid "Schedule udev doesn't work with mode %s" msgstr "Jadwal udev tidak bekerja pada mode %s" #: ../../common/config.py:1526 #, python-format msgid "Couldn't find UUID for \"%s\"" msgstr "Tidak mampu menemukan UUID untuk \"%s\"" #: ../../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:114 #, python-format msgid "Can't unmount encfs %s" msgstr "Tidak mampu memuat encfs %s" #: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "Konfig untuk folder yang terenkripsi tidak ditemukan." #: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" "\n" "Buat sebuah folder terenkripsi yang baru?" #: ../../common/encfstools.py:171 msgid "Cancel" msgstr "Batal" #: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "Mohon kata sandi dikonfirmasi" #: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "Kata sandi tidak cocok" #: ../../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: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: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:512 ../../common/snapshots.py:1131 #: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "Ambil snapshot" #: ../../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:259 #, python-format msgid "mountpoint %s not empty." msgstr "mountpoint %s tidak kosong." #: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "Kunci proses mount telah habis" #: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "Profil '%(profile)s': Masukkan kata sandi untuk %(mode)s: " #: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Saat Ini" #: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "DENGAN KESALAHAN !" #: ../../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:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "GAGAL" #: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" 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: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:868 #, python-format msgid "" "%s profiles found. \n" "\n" "The 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)" 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: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:918 #, python-format msgid "" "%(snapshots_left)s\n" "of profile %(profile_id)s are not moved to their new location\n" "Do 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" "\n" "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:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" "Back In Time cannot continue taking new snapshots.\n" "\n" "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: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:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" "\n" "If 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" "\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: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: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: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:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "Menunggu %s detik." #: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "Gagal untuk mengambil snapshot %s !!!" #: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "Menyelesaikan" #: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "Tidak mampu membuat folder: %s" #: ../../common/snapshots.py:1217 msgid "..." msgstr "..." #: ../../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 "Tidak mampu menghapus folder: %s" #: ../../common/snapshots.py:1340 #, python-format msgid "Compare with snapshot %s" msgstr "Bandingkan dengan snapshot %s" #: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "Buat hard-link" #: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "Simpan berkas konfigurasi ..." #: ../../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:1521 #, python-format msgid "Can't rename %(new_path)s to %(path)s" msgstr "Tidak bisa mengubah nama %(new_path)s ke %(path)s" #: ../../common/snapshots.py:1695 ../../common/snapshots.py:1728 #: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "Penghapusan pintar" #: ../../common/snapshots.py:1704 msgid "Remove old snapshots" msgstr "Hapus snapshot lama" #: ../../common/snapshots.py:1733 msgid "Try to keep min free space" msgstr "Coba untuk selalu menyimpan sisa partisi yang minimal" #: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "Coba untuk menyimpan sisa inodes %d%%" #: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "Tidak dapat mengkaitkan %s" #: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "Tidak bisa mencabut sshfs %s" #: ../../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: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: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: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:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "%s tidak ditemukan dalam ssh_known_hosts." #: ../../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:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" "Jalur yang dipantau tidak dapat ditulisi:\n" " %s" #: ../../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:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" "Tidak mampu membuat jalur pemantau:\n" " %s" #: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "Ping %s gagal. Host sedang down atau alamatnya salah." #: ../../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: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: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 "" #: ../../qt4/app.py:105 msgid "Shutdown system after snapshot has finished." msgstr "Matikan sistem setelah snapshot selesai." #: ../../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 "" #: ../../qt4/app.py:125 msgid "Website" msgstr "Situs Web" #: ../../qt4/app.py:127 ../../qt4/app.py:982 msgid "Changelog" msgstr "" #: ../../qt4/app.py:129 msgid "FAQ" msgstr "Tanya Jawab" #: ../../qt4/app.py:131 msgid "Ask a question" msgstr "Ajukan sebuah pertanyaan" #: ../../qt4/app.py:133 msgid "Report a bug" msgstr "Laporkan bug" #: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "Tentang" #: ../../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 "Pulihkan" #: ../../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 "" #: ../../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 "" #: ../../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 "" #: ../../qt4/app.py:224 msgid "View" msgstr "" #: ../../qt4/app.py:277 msgid "Shortcuts" msgstr "Jalan Pintas" #: ../../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" msgstr "" "Tidak dapat menemukan folder snapshot.\n" "Jika berada pada perangkat USB atau lainnya, silahkan tancapkan dan tekan OK" #: ../../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?" #: ../../qt4/app.py:667 ../../qt4/app.py:703 msgid "Working:" msgstr "Sedang Bekerja:" #: ../../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 "" #: ../../qt4/app.py:728 ../../qt4/qt4systrayicon.py:155 msgid "ETA:" msgstr "" #: ../../qt4/app.py:777 msgid "Global" msgstr "Global" #: ../../qt4/app.py:778 msgid "Root" msgstr "Root" #: ../../qt4/app.py:779 msgid "Home" msgstr "Rumah" #: ../../qt4/app.py:794 msgid "Backup folders" msgstr "Folder Backup" #: ../../qt4/app.py:849 msgid "This is NOT a snapshot but a live view of your local files" msgstr "" #: ../../qt4/app.py:860 ../../qt4/app.py:1476 #, python-format msgid "Last check %s" msgstr "" #: ../../qt4/app.py:928 #, python-format msgid "" "Are you sure you want to remove the snapshot:\n" "%s" msgstr "" "Apakah anda yakin untuk menghapus snapsot:\n" "%s" #: ../../qt4/app.py:1004 #, python-format msgid "" "Backup local files before overwriting or\n" "removing with trailing '%(suffix)s'." msgstr "" #: ../../qt4/app.py:1010 msgid "" "Are you sure you want to remove all newer files in your original folder?" msgstr "" #: ../../qt4/app.py:1014 msgid "" "WARNING: deleting files in filesystem root could break your whole system!!!" msgstr "" #: ../../qt4/app.py:1016 msgid "Files to be restored:" msgstr "" #: ../../qt4/app.py:1031 msgid "Do you really want to restore this files(s):" msgstr "" #: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "Snapshot: %s" #: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "Lihat snapshot yang dibuat pada %s" #: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "Lihat isi disk yang sekarang" #: ../../qt4/app.py:1268 #, python-format msgid "Restore '%s'" msgstr "Memulihkan '%s'" #: ../../qt4/app.py:1269 #, python-format msgid "Restore '%s' to ..." msgstr "Pulihan '%s' ke ..." #: ../../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 "" #: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 msgid "All" msgstr "Semua" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 #: ../../qt4/settingsdialog.py:657 msgid "Errors" msgstr "Kesalahan" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 msgid "Changes" msgstr "Perubahan" #: ../../qt4/logviewdialog.py:92 msgid "Informations" msgstr "Informasi" #: ../../qt4/logviewdialog.py:101 msgid "[E] Error, [I] Information, [C] Change" msgstr "" #: ../../qt4/logviewdialog.py:104 msgid "decode paths" msgstr "" #: ../../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 "Sedang Bekerja..." #: ../../qt4/qt4tools.py:178 msgid "Today" msgstr "Hari ini" #: ../../qt4/qt4tools.py:183 msgid "Yesterday" msgstr "Kemarin" #: ../../qt4/qt4tools.py:188 msgid "This week" msgstr "Minggu Ini" #: ../../qt4/qt4tools.py:193 msgid "Last week" msgstr "Minggu kemarin" #: ../../qt4/restoredialog.py:75 msgid "Show full Log" msgstr "" #: ../../qt4/settingsdialog.py:68 msgid "Edit" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:145 msgid "Folder" msgstr "" #: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" #: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "" #: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "" #: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "" #: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" #: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" #: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "" #: ../../qt4/settingsdialog.py:201 msgid "Key File" msgstr "" #: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 #: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "" #: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" #: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" #: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "" #: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 msgid "Full snapshot path: " msgstr "" #: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "Penjadwalan" #: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "" #: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "" #: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "" #: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "" #: ../../qt4/settingsdialog.py:339 msgid "" "Run Back In Time repeatedly. This is useful if the computer is not running " "regular." msgstr "" #: ../../qt4/settingsdialog.py:344 msgid "Every:" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "" #: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:425 msgid "Exclude patterns, files or folders" msgstr "Diluar pola, berkas atau folder" #: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "" #: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "" #: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" #: ../../qt4/settingsdialog.py:551 msgid "Run in background on remote Host." msgstr "" #: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "" #: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "" #: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "" #: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "" #: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "" #: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "" #: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "" #: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "" #: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "" #: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "" #: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "" #: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "" #: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" 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 "" #: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "" #: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "" #: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "" #: ../../qt4/settingsdialog.py:634 msgid "" "- snapshots are not read-only\n" "- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "" #: ../../qt4/settingsdialog.py:656 msgid "None" msgstr "Tidak ada" #: ../../qt4/settingsdialog.py:658 msgid "Changes & Errors" msgstr "Perubahan dan Kesalahan" #: ../../qt4/settingsdialog.py:674 msgid "Change these options only if you really know what you are doing !" 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 "" #: ../../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 "" #: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" #: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "" #: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "" #: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute 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 "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" #: ../../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 "" #: ../../qt4/settingsdialog.py:1545 msgid "Include folder" msgstr "" #: ../../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 "" #: ../../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 "" #: ../../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 "" #: ../../qt4/snapshotsdialog.py:106 msgid "List only different snapshots" msgstr "" #: ../../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 "" #: ../../qt4/snapshotsdialog.py:148 msgid "Select All" msgstr "" #: ../../qt4/snapshotsdialog.py:161 msgid "Diff" msgstr "Beda" #: ../../qt4/snapshotsdialog.py:172 msgid "Go To" msgstr "" #: ../../qt4/snapshotsdialog.py:326 msgid "You can't compare a snapshot to itself" msgstr "" "Anda tidak dapat membandingkan sebuah snapshot dengan dirinya sendiri" #: ../../qt4/snapshotsdialog.py:333 #, python-format msgid "Command not found: %s" msgstr "Perintah tidak ditemukan: %s" #: ../../qt4/snapshotsdialog.py:354 #, python-format msgid "" "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" #: ../../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" #: ../../qt4/snapshotsdialog.py:359 msgid "WARNING: This can not be revoked!" msgstr "PERINGATAN: Ini tidak bisa dibatalkan!" #: ../../qt4/snapshotsdialog.py:374 #, python-format msgid "Exclude \"%s\" from future snapshots?" msgstr "" backintime-1.1.12/common/po/th.po0000664000175000017500000010411712644767576016135 0ustar germargermar# Thai translation for backintime # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the backintime package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \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" "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: 2016-01-11 17:52+0000\n" "X-Generator: Launchpad (build 17881)\n" #: ../../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:77 msgid "At every boot/reboot" msgstr "" #: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "ทุก 5 นาที" #: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "ทุก 10 นาที" #: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "" #: ../../common/config.py:81 msgid "Every hour" msgstr "" #: ../../common/config.py:82 msgid "Every 2 hours" msgstr "" #: ../../common/config.py:83 msgid "Every 4 hours" msgstr "" #: ../../common/config.py:84 msgid "Every 6 hours" msgstr "" #: ../../common/config.py:85 msgid "Every 12 hours" msgstr "" #: ../../common/config.py:86 msgid "Custom Hours" msgstr "" #: ../../common/config.py:87 msgid "Every Day" msgstr "ทุกวัน" #: ../../common/config.py:88 msgid "Repeatedly (anacron)" msgstr "" #: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "" #: ../../common/config.py:90 msgid "Every Week" msgstr "ทุกสัปดาห์" #: ../../common/config.py:91 msgid "Every Month" msgstr "ทุกเดือน" #: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "วัน" #: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "สัปดาห์" #: ../../common/config.py:97 msgid "Year(s)" msgstr "ปี" #: ../../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:129 msgid "Local" msgstr "" #: ../../common/config.py:130 msgid "SSH" msgstr "" #: ../../common/config.py:130 ../../common/config.py:132 #: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "" #: ../../common/config.py:131 msgid "Local encrypted" msgstr "" #: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "" #: ../../common/config.py:132 msgid "SSH encrypted" msgstr "" #: ../../common/config.py:135 msgid "Default" msgstr "" #: ../../common/config.py:136 msgid "AES128-CTR" msgstr "" #: ../../common/config.py:137 msgid "AES192-CTR" msgstr "" #: ../../common/config.py:138 msgid "AES256-CTR" msgstr "" #: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "" #: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "" #: ../../common/config.py:141 msgid "AES128-CBC" msgstr "" #: ../../common/config.py:142 msgid "3DES-CBC" msgstr "" #: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "" #: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "" #: ../../common/config.py:145 msgid "AES192-CBC" msgstr "" #: ../../common/config.py:146 msgid "AES256-CBC" msgstr "" #: ../../common/config.py:147 msgid "ARCFOUR" msgstr "" #: ../../common/config.py:153 msgid "Main profile" msgstr "" #: ../../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:289 msgid "Snapshots folder is not valid !" msgstr "" #: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "" #: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "" #: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "" #: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "" #: ../../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: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" "If not you should disable all automatic backups." msgstr "" #: ../../common/config.py:1411 msgid "Failed to write new crontab." msgstr "" #: ../../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/config.py:1517 #, python-format msgid "Schedule udev doesn't work with mode %s" msgstr "" #: ../../common/config.py:1526 #, python-format msgid "Couldn't find UUID for \"%s\"" msgstr "" #: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" "\n" "%(error)s" msgstr "" #: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "" #: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "" #: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" #: ../../common/encfstools.py:171 msgid "Cancel" msgstr "" #: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "" #: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "" #: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" #: ../../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 "" #: ../../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:512 ../../common/snapshots.py:1131 #: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "" #: ../../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:259 #, python-format msgid "mountpoint %s not empty." msgstr "" #: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" #: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" #: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "เดี๋ยวนี้" #: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "" #: ../../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:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "" #: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "" #: ../../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:868 #, python-format msgid "" "%s profiles found. \n" "\n" "The 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)" msgstr "" #: ../../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:918 #, python-format msgid "" "%(snapshots_left)s\n" "of profile %(profile_id)s are not moved to their new location\n" "Do 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" "\n" "If not Back In Time will restore former settings for this profile, however " "cannot continue taking snapshots" msgstr "" #: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" "Back In Time cannot continue taking new snapshots.\n" "\n" "You can manually move the snapshots, \n" "if you are done restart Back In Time to proceed" msgstr "" #: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" msgstr "" #: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" "\n" "If 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" "\n" "If you do not, you will be asked again next time you start Back In Time." msgstr "" #: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "" #: ../../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: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:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "" msgstr[1] "" #: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "" #: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "" #: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "" #: ../../common/snapshots.py:1217 msgid "..." msgstr "" #: ../../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:1340 #, python-format msgid "Compare with snapshot %s" msgstr "" #: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "" #: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "" #: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "" #: ../../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:1695 ../../common/snapshots.py:1728 #: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "" #: ../../common/snapshots.py:1704 msgid "Remove old snapshots" msgstr "" #: ../../common/snapshots.py:1733 msgid "Try to keep min free space" msgstr "" #: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" #: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "" #: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "" #: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" #: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" #: ../../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:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" #: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" #: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" #: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" #: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" #: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" #: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" #: ../../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 "" #: ../../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 "" #: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" 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 "ออก" #: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 msgid "Help" msgstr "ช่วยเหลือ" #: ../../qt4/app.py:122 msgid "Config File Help" msgstr "" #: ../../qt4/app.py:125 msgid "Website" msgstr "" #: ../../qt4/app.py:127 ../../qt4/app.py:982 msgid "Changelog" msgstr "" #: ../../qt4/app.py:129 msgid "FAQ" msgstr "" #: ../../qt4/app.py:131 msgid "Ask a question" msgstr "" #: ../../qt4/app.py:133 msgid "Report a bug" msgstr "" #: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "เกี่ยวกับ" #: ../../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 "" #: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 #: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "" #: ../../qt4/app.py:194 msgid "Restore and delete new files" msgstr "" #: ../../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 "" #: ../../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 "" #: ../../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" 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 "" #: ../../qt4/app.py:667 ../../qt4/app.py:703 msgid "Working:" msgstr "" #: ../../qt4/app.py:695 msgid "Done, no backup needed" msgstr "ทำเสร็จ, ไม่จำเป็นต้องสำรอง" #: ../../qt4/app.py:707 msgid "Error:" msgstr "" #: ../../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 "" #: ../../qt4/app.py:778 msgid "Root" msgstr "" #: ../../qt4/app.py:779 msgid "Home" msgstr "" #: ../../qt4/app.py:794 msgid "Backup folders" msgstr "" #: ../../qt4/app.py:849 msgid "This is NOT a snapshot but a live view of your local files" msgstr "" #: ../../qt4/app.py:860 ../../qt4/app.py:1476 #, python-format msgid "Last check %s" msgstr "" #: ../../qt4/app.py:928 #, python-format msgid "" "Are you sure you want to remove the snapshot:\n" "%s" msgstr "" #: ../../qt4/app.py:1004 #, python-format msgid "" "Backup local files before overwriting or\n" "removing with trailing '%(suffix)s'." msgstr "" #: ../../qt4/app.py:1010 msgid "" "Are you sure you want to remove all newer files in your original folder?" msgstr "" #: ../../qt4/app.py:1014 msgid "" "WARNING: deleting files in filesystem root could break your whole system!!!" msgstr "" #: ../../qt4/app.py:1016 msgid "Files to be restored:" msgstr "" #: ../../qt4/app.py:1031 msgid "Do you really want to restore this files(s):" msgstr "" #: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "" #: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "" #: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "" #: ../../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 "" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 #: ../../qt4/settingsdialog.py:657 msgid "Errors" msgstr "" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 msgid "Changes" msgstr "" #: ../../qt4/logviewdialog.py:92 msgid "Informations" msgstr "" #: ../../qt4/logviewdialog.py:101 msgid "[E] Error, [I] Information, [C] Change" msgstr "" #: ../../qt4/logviewdialog.py:104 msgid "decode paths" msgstr "" #: ../../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 "" #: ../../qt4/qt4tools.py:178 msgid "Today" msgstr "วันนี้" #: ../../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 "" #: ../../qt4/settingsdialog.py:68 msgid "Edit" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:145 msgid "Folder" msgstr "" #: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" #: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "" #: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "" #: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "" #: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" #: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" #: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "" #: ../../qt4/settingsdialog.py:201 msgid "Key File" msgstr "" #: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 #: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "" #: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" #: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" #: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "" #: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 msgid "Full snapshot path: " msgstr "" #: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "" #: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "" #: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "" #: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "" #: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "" #: ../../qt4/settingsdialog.py:339 msgid "" "Run Back In Time repeatedly. This is useful if the computer is not running " "regular." msgstr "" #: ../../qt4/settingsdialog.py:344 msgid "Every:" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "" #: ../../qt4/settingsdialog.py:381 msgid "Include files and folders" msgstr "" #: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "" #: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "" #: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:425 msgid "Exclude patterns, files or folders" msgstr "" #: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "" #: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "" #: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" #: ../../qt4/settingsdialog.py:551 msgid "Run in background on remote Host." msgstr "" #: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "" #: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "" #: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "" #: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "" #: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "" #: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "" #: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "" #: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "" #: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "" #: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "" #: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "" #: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "" #: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" 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 "" #: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "" #: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "" #: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "" #: ../../qt4/settingsdialog.py:634 msgid "" "- snapshots are not read-only\n" "- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "" #: ../../qt4/settingsdialog.py:656 msgid "None" msgstr "" #: ../../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 "" #: ../../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 "" #: ../../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 "" #: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" #: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "" #: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "" #: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute 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 "" #: ../../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 "" #: ../../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 "" #: ../../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 "" #: ../../qt4/snapshotsdialog.py:106 msgid "List only different snapshots" msgstr "" #: ../../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 "" #: ../../qt4/snapshotsdialog.py:148 msgid "Select All" msgstr "" #: ../../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 "" #: ../../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 "" backintime-1.1.12/common/po/da.po0000664000175000017500000011640112644767576016105 0ustar germargermar# Danish translation for backintime # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the backintime package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \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" "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: 2016-01-11 17:52+0000\n" "X-Generator: Launchpad (build 17881)\n" #: ../../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:77 msgid "At every boot/reboot" msgstr "Ved hver opstart/genstart" #: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Hver 5 minutter" #: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Hvert 10. minut" #: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "Hvert 30. minut" #: ../../common/config.py:81 msgid "Every hour" msgstr "Hver time" #: ../../common/config.py:82 msgid "Every 2 hours" msgstr "Hver 2. time" #: ../../common/config.py:83 msgid "Every 4 hours" msgstr "Hver 4. time" #: ../../common/config.py:84 msgid "Every 6 hours" msgstr "Hver 6. time" #: ../../common/config.py:85 msgid "Every 12 hours" msgstr "Hver 12. time" #: ../../common/config.py:86 msgid "Custom Hours" msgstr "Angiv interval" #: ../../common/config.py:87 msgid "Every Day" msgstr "Hver dag" #: ../../common/config.py:88 msgid "Repeatedly (anacron)" msgstr "" #: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "Når drev bliver tilsluttet (udev)" #: ../../common/config.py:90 msgid "Every Week" msgstr "Hver uge" #: ../../common/config.py:91 msgid "Every Month" msgstr "Hver måned" #: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Dag(e)" #: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Uge(r)" #: ../../common/config.py:97 msgid "Year(s)" msgstr "År" #: ../../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:129 msgid "Local" msgstr "Lokal" #: ../../common/config.py:130 msgid "SSH" msgstr "SSH" #: ../../common/config.py:130 ../../common/config.py:132 #: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "SSH privat nøgle" #: ../../common/config.py:131 msgid "Local encrypted" msgstr "Lokal krypteret" #: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "Kryptering" #: ../../common/config.py:132 msgid "SSH encrypted" msgstr "SSH krypteret" #: ../../common/config.py:135 msgid "Default" msgstr "Standard" #: ../../common/config.py:136 msgid "AES128-CTR" msgstr "AES128-CTR" #: ../../common/config.py:137 msgid "AES192-CTR" msgstr "AES192-CTR" #: ../../common/config.py:138 msgid "AES256-CTR" msgstr "AES256-CTR" #: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "ARCFOUR256" #: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "ARCFOUR128" #: ../../common/config.py:141 msgid "AES128-CBC" msgstr "AES128-CBC" #: ../../common/config.py:142 msgid "3DES-CBC" msgstr "3DES-CBC" #: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "Blowfish-CBC" #: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "Cast128-CBC" #: ../../common/config.py:145 msgid "AES192-CBC" msgstr "AES192-CBC" #: ../../common/config.py:146 msgid "AES256-CBC" msgstr "AES256-CBC" #: ../../common/config.py:147 msgid "ARCFOUR" msgstr "ARCFOUR" #: ../../common/config.py:153 msgid "Main profile" msgstr "hovedprofil" #: ../../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:289 msgid "Snapshots folder is not valid !" msgstr "Snapshots mappe er ikke gyldig !" #: ../../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:307 msgid "You can't include backup folder !" msgstr "Du kan ikke inkludere sikkerhedskopierings-mappen !" #: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "Du kan ikke inkludere en sikkerhedskopierings-mappe !" #: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s er ikke en mappe !" #: ../../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 "" "Kan ikke skrive til: %s\n" "Er du sikker på, du har skrive-rettigheder ?" #: ../../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" "If not you should disable all automatic backups." msgstr "" "Kan ikke finde crontab.\n" "Er du sikker på, at cron er installeret ?\n" "Hvis ikke, skal du deaktivere alle automatiske sikkerhedskopieringer." #: ../../common/config.py:1411 msgid "Failed to write new crontab." msgstr "" #: ../../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/config.py:1517 #, python-format msgid "Schedule udev doesn't work with mode %s" msgstr "Skedulere udev virker ikke med indstilling %s" #: ../../common/config.py:1526 #, python-format msgid "Couldn't find UUID for \"%s\"" msgstr "Fandt ikke UUID for \"%s\"" #: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" "\n" "%(error)s" msgstr "" "Kan ikke tilslutte '%(command)s':\n" "\n" "%(error)s" #: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "Kan ikke tilslutte encfs %s" #: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "Konfig for krypteret mappe ikke fundet." #: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" "\n" "Lav en ny krypteret mappe?" #: ../../common/encfstools.py:171 msgid "Cancel" msgstr "Annullér" #: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "Bekræft venligst kodeord" #: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "Kodeord passer ikke" #: ../../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: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 er ikke medlem af gruppe 'fuse'.\n" " Kør 'sudo adduser %(user)s fuse'. Bekræft ændringerne ved at logge ud og " "ind igen.\n" "Se 'man backintime' for yderlig information." #: ../../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 og tidligere har en fejl ved brug af option --reverse. " "Opdatér venligst encfs" #: ../../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:204 #, python-format msgid "" "Hash collision occurred in hash_id %s. Incrementing global value " "hash_collision and try again." msgstr "" "Hash kollision skete i hash_id %s. Forøg den globale værdi hash_collision og " "forsøg igen." #: ../../common/mount.py:259 #, python-format msgid "mountpoint %s not empty." msgstr "tilsluttelsespunkt %s ikke tomt." #: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "Lås af tilslutningsproces udløbet" #: ../../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:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Nu" #: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "MED FEJL!" #: ../../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 "" "### 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:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "MISLYKKEDES" #: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "Gendan tilladelser:" #: ../../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" "Your old snapshots can be moved according to this new format. OK?" msgstr "" "Back In Time har ændret sit backup format.\n" "\n" "Dine gamle sikkerhedskopier kan flyttes i henhold til dette nye format. O.K.?" #: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" "\n" "The 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)" msgstr "" "%s profiler fundet. \n" "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:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" msgstr "" "Ingen profiler fundet. Er derfor nødsaget til først at generere profiler . " "Genstart venligst Back In Time" #: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" "of profile %(profile_id)s are not moved to their new location\n" "Do 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" "\n" "If not Back In Time will restore former settings for this profile, however " "cannot continue taking snapshots" msgstr "" "%(snapshots_left)s\n" "af profil %(profile_id)s er ikke flyttet til deres nye lokation\n" "Vil du fortsætte?\n" "(Back In Time er i stand til at fortsætte med at tage snapshots, men de " "resterende snapshots vil ikke blive inkluderet ved automatisk sletning)\n" "\n" "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:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" "Back In Time cannot continue taking new snapshots.\n" "\n" "You can manually move the snapshots, \n" "if you are done restart Back In Time to proceed" msgstr "" "Tidligere indstillinger for profil %s er genskabt.\n" "Back In Time kan ikke fortsætte med at take nye snapshots.\n" "\n" "Du kan manuelt flytte dine snapshots, \n" "hvis du er færdig, genstart Back In Time for at fortsætte" #: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" msgstr "" "Opdatering lykkedes!\n" "\n" "Back In Time vil fortsætte med at tage snapshots igen som skeduleret" #: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" "\n" "If 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" "\n" "If you do not, you will be asked again next time you start Back In Time." msgstr "" "Er du sikker på du ikke vil flytte dine gamle snapshots?\n" "\n" "\n" "Hvis du vil, ser du ikke disse spørgsmål igen næste gang, og Back In Time " "vil fortsætte med at tage snapshots igen, men smart-flyt kan ikke tage " "hensyn til dine gamle snapshots længere!\n" "\n" "Hvis du ikke vil, du vil blive spurgt igen næste gang du starter Back In " "Time." #: ../../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: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 kan stadig ikke fortsætte med at tage nye snapshots.\n" "Genstart Back In Time for se spørgsmålene igen" #: ../../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 "" "Kan ikke finde tilstands-billede-mappen.\n" "Hvis den er på et flytbart drev indsæt venligst dette." #: ../../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:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "Kunne ikke tage tilstands-billede %s !!!" #: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "Afslutter" #: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "Kan ikke oprette mappen: %s" #: ../../common/snapshots.py:1217 msgid "..." msgstr "..." #: ../../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:1340 #, python-format msgid "Compare with snapshot %s" msgstr "Sammenlign med tilstands-billede %s" #: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "Opret hard-links" #: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "Gem config fil ..." #: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "Gem tilladelse ..." #: ../../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:1695 ../../common/snapshots.py:1728 #: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "Smart fjern" #: ../../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:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "Prøv at beholde minimum %d%% inoder fri" #: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "Kan ikke tilslutte %s" #: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "Kan ikke frakoble sshfs %s" #: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" "Kunne ikke fjerne låsen på ssh privat nøgle. Forkert kodeord elle kodeordet " "er ikke tilgængelig for cron." #: ../../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:278 #, python-format msgid "" "Password-less authentication for %(user)s@%(host)s failed. Look at 'man " "backintime' for further instructions." msgstr "" "Kodeløs login for %(user)s@%(host)s fejlede. Se'man backintime' for yderlig " "informationer." #: ../../common/sshtools.py:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" #: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" #: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" #: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" #: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" #: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" #: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" #: ../../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 "" #: ../../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 "" #: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "" #: ../../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 "" #: ../../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" #: ../../qt4/app.py:122 msgid "Config File Help" msgstr "" #: ../../qt4/app.py:125 msgid "Website" msgstr "Websted" #: ../../qt4/app.py:127 ../../qt4/app.py:982 msgid "Changelog" msgstr "" #: ../../qt4/app.py:129 msgid "FAQ" msgstr "" #: ../../qt4/app.py:131 msgid "Ask a question" msgstr "" #: ../../qt4/app.py:133 msgid "Report a bug" msgstr "Rapporter en fejl" #: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "Om" #: ../../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" #: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 #: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "" #: ../../qt4/app.py:194 msgid "Restore and delete new files" msgstr "" #: ../../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 "" #: ../../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 "" #: ../../qt4/app.py:277 msgid "Shortcuts" msgstr "Genveje" #: ../../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" msgstr "" "Kan ikke finde tilstands-billede-mappen.\n" "Hvis den er på et flytbar drev, indsæt venligst drevet og tryk OK" #: ../../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 "Arbejder:" #: ../../qt4/app.py:695 msgid "Done, no backup needed" msgstr "Færdig, ingen sikkerhedskopiering nødvendig" #: ../../qt4/app.py:707 msgid "Error:" msgstr "Fejl:" #: ../../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" #: ../../qt4/app.py:778 msgid "Root" msgstr "Root" #: ../../qt4/app.py:779 msgid "Home" msgstr "Hjemmemappe" #: ../../qt4/app.py:794 msgid "Backup folders" msgstr "Sikkerhedskopi-mapper" #: ../../qt4/app.py:849 msgid "This is NOT a snapshot but a live view of your local files" msgstr "" #: ../../qt4/app.py:860 ../../qt4/app.py:1476 #, python-format msgid "Last check %s" msgstr "" #: ../../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" #: ../../qt4/app.py:1004 #, python-format msgid "" "Backup local files before overwriting or\n" "removing with trailing '%(suffix)s'." msgstr "" #: ../../qt4/app.py:1010 msgid "" "Are you sure you want to remove all newer files in your original folder?" msgstr "" #: ../../qt4/app.py:1014 msgid "" "WARNING: deleting files in filesystem root could break your whole system!!!" msgstr "" #: ../../qt4/app.py:1016 msgid "Files to be restored:" msgstr "" #: ../../qt4/app.py:1031 msgid "Do you really want to restore this files(s):" msgstr "" #: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "Tilstands-billede: %s" #: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "Se tilstands-billedet lavet ved %s" #: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "Se nuværende disk-indhold" #: ../../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 "" #: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 msgid "All" msgstr "" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 #: ../../qt4/settingsdialog.py:657 msgid "Errors" msgstr "Fejl" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 msgid "Changes" msgstr "" #: ../../qt4/logviewdialog.py:92 msgid "Informations" msgstr "" #: ../../qt4/logviewdialog.py:101 msgid "[E] Error, [I] Information, [C] Change" msgstr "" #: ../../qt4/logviewdialog.py:104 msgid "decode paths" msgstr "" #: ../../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 "Arbejder..." #: ../../qt4/qt4tools.py:178 msgid "Today" msgstr "I dag" #: ../../qt4/qt4tools.py:183 msgid "Yesterday" msgstr "I går" #: ../../qt4/qt4tools.py:188 msgid "This week" msgstr "Denne uge" #: ../../qt4/qt4tools.py:193 msgid "Last week" msgstr "Sidste uge" #: ../../qt4/restoredialog.py:75 msgid "Show full Log" msgstr "" #: ../../qt4/settingsdialog.py:68 msgid "Edit" msgstr "Redigér" #: ../../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 "Generelt" #: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "" #: ../../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" #: ../../qt4/settingsdialog.py:145 msgid "Folder" msgstr "" #: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" #: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "" #: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "" #: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "" #: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" #: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" #: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "" #: ../../qt4/settingsdialog.py:201 msgid "Key File" msgstr "" #: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 #: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "" #: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" #: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" #: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "" #: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 msgid "Full snapshot path: " msgstr "" #: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "Planlæg" #: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "" #: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "" #: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "" #: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "" #: ../../qt4/settingsdialog.py:339 msgid "" "Run Back In Time repeatedly. This is useful if the computer is not running " "regular." msgstr "" #: ../../qt4/settingsdialog.py:344 msgid "Every:" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Inkludér" #: ../../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" #: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Tilføj mappe" #: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Ekskludér" #: ../../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 "" #: ../../qt4/settingsdialog.py:425 msgid "Exclude patterns, files or folders" msgstr "" #: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "" #: ../../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" #: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "Ældre end:" #: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "Hvis fri plads er mindre end:" #: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" #: ../../qt4/settingsdialog.py:551 msgid "Run in background on remote Host." msgstr "" #: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "" #: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "" #: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "" #: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "" #: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "" #: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "" #: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "" #: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "" #: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "Fjern ikke navngivne tilstands-billeder" #: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Indstillinger" #: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Aktivér bekendtgørelser" #: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "De-aktivér tilstands-billeder ved batteri-drift" #: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" msgstr "Strømstatus ikke tilgængelig fra system" #: ../../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 "" #: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "" #: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "" #: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "" #: ../../qt4/settingsdialog.py:634 msgid "" "- snapshots are not read-only\n" "- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "" #: ../../qt4/settingsdialog.py:656 msgid "None" msgstr "" #: ../../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 "" #: ../../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 "" #: ../../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 "" #: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" #: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "" #: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "" #: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute 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 "Ny profil" #: ../../qt4/settingsdialog.py:938 msgid "Rename profile" msgstr "Omdøb profil" #: ../../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\" ?" #: ../../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 "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" #: ../../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 "" #: ../../qt4/settingsdialog.py:1545 msgid "Include folder" msgstr "Inkludér mapper" #: ../../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 ?" #: ../../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-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 "" #: ../../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 "" #: ../../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å 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 "" "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 "" backintime-1.1.12/common/po/hr.po0000664000175000017500000011264512644767576016140 0ustar germargermar# Croatian translation for backintime # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the backintime package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \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" "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: 2016-01-11 17:52+0000\n" "X-Generator: Launchpad (build 17881)\n" #: ../../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:77 msgid "At every boot/reboot" msgstr "Pri svakom paljenju/podizanju" #: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Svakih 5 minuta" #: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Svakih 10 minuta" #: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "" #: ../../common/config.py:81 msgid "Every hour" msgstr "" #: ../../common/config.py:82 msgid "Every 2 hours" msgstr "" #: ../../common/config.py:83 msgid "Every 4 hours" msgstr "" #: ../../common/config.py:84 msgid "Every 6 hours" msgstr "" #: ../../common/config.py:85 msgid "Every 12 hours" msgstr "" #: ../../common/config.py:86 msgid "Custom Hours" msgstr "" #: ../../common/config.py:87 msgid "Every Day" msgstr "Svaki dan" #: ../../common/config.py:88 msgid "Repeatedly (anacron)" msgstr "" #: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "" #: ../../common/config.py:90 msgid "Every Week" msgstr "Svaki tjedan" #: ../../common/config.py:91 msgid "Every Month" msgstr "Svaki mjesec" #: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Dan(a)" #: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Tjedan(a)" #: ../../common/config.py:97 msgid "Year(s)" msgstr "Godina" #: ../../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:129 msgid "Local" msgstr "" #: ../../common/config.py:130 msgid "SSH" msgstr "" #: ../../common/config.py:130 ../../common/config.py:132 #: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "" #: ../../common/config.py:131 msgid "Local encrypted" msgstr "" #: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "" #: ../../common/config.py:132 msgid "SSH encrypted" msgstr "" #: ../../common/config.py:135 msgid "Default" msgstr "" #: ../../common/config.py:136 msgid "AES128-CTR" msgstr "" #: ../../common/config.py:137 msgid "AES192-CTR" msgstr "" #: ../../common/config.py:138 msgid "AES256-CTR" msgstr "" #: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "" #: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "" #: ../../common/config.py:141 msgid "AES128-CBC" msgstr "" #: ../../common/config.py:142 msgid "3DES-CBC" msgstr "" #: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "" #: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "" #: ../../common/config.py:145 msgid "AES192-CBC" msgstr "" #: ../../common/config.py:146 msgid "AES256-CBC" msgstr "" #: ../../common/config.py:147 msgid "ARCFOUR" msgstr "" #: ../../common/config.py:153 msgid "Main profile" msgstr "Glavni profil" #: ../../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:289 msgid "Snapshots folder is not valid !" msgstr "Mapa snimki nije valjana" #: ../../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:307 msgid "You can't include backup folder !" msgstr "Nije moguće uključiti mapu rezerve !" #: ../../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:371 #, python-format msgid "%s is not a folder !" msgstr "%s nije mapa !" #: ../../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 "" "Nije moguće zapisati u: %s\n" "Provjerite imate li pristup zapisivanju ?" #: ../../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 "Stručne opcije" #: ../../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" "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:1411 msgid "Failed to write new crontab." msgstr "" #: ../../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/config.py:1517 #, python-format msgid "Schedule udev doesn't work with mode %s" msgstr "" #: ../../common/config.py:1526 #, python-format msgid "Couldn't find UUID for \"%s\"" msgstr "" #: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" "\n" "%(error)s" msgstr "" #: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "" #: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "" #: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" #: ../../common/encfstools.py:171 msgid "Cancel" msgstr "" #: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "" #: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "" #: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" #: ../../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 "" #: ../../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:512 ../../common/snapshots.py:1131 #: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "Uzmi snimku" #: ../../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:259 #, python-format msgid "mountpoint %s not empty." msgstr "" #: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" #: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" #: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Sada" #: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "S GRJEŠKAMA !" #: ../../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:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "" #: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "" #: ../../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 "" "Back In Time je promijenio format rezerve.\n" "Vaše stare slike mogu biti premještene prema novom formatu. U redu?" #: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" "\n" "The 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)" msgstr "" "%s profila pronađeno. \n" "\n" "Novi format rezervi podržava spremanje različitih korisnika i profila na " "istu lokaciju. Želite li istu lokaciju za oba profila? \n" "\n" "(Program će biti u mogučnosti razlikovati ih)" #: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" msgstr "" "Nisu pronađeni profili. Zanavljanje na profile je potrebno, molim ponovno " "pokrenite Back In Time" #: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" "of profile %(profile_id)s are not moved to their new location\n" "Do 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" "\n" "If not Back In Time will restore former settings for this profile, however " "cannot continue taking snapshots" msgstr "" #: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" "Back In Time cannot continue taking new snapshots.\n" "\n" "You can manually move the snapshots, \n" "if you are done restart Back In Time to proceed" msgstr "" "Prijašnje postavke profila %s su vraćene.\n" "Back In Time ne može uzimati nove snimke.\n" "\n" "Možete ručno premjestiti snimke, \n" "ako ste gotovi, ponovno pokrenite Back In Time za nastavak" #: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" msgstr "" "Zanavljanje je uspješno!\n" "\n" "Back In Time će nastaviti s uzimanje snimki po rasporedu" #: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" "\n" "If 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" "\n" "If you do not, you will be asked again next time you start Back In Time." msgstr "" "Jeste li sigurni da ne želite premještati stare snimke?\n" "\n" "\n" "Ako želite, nećete vidjeti ovo pitanje sljedeći puta, Back In Time će " "nastaviti sa uzimanjem snimaka, ali smart-remove ne uzima starije snimke " "više u obzir!\n" "\n" "Ako ne želite, ovo će vas upitati pri sljedećem pokretanju Back In Time." #: ../../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: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 još ne može uzimati nove snimke.\n" "Ponovno pokrenite Back In Time za ponovni prolazak kroz pitanja" #: ../../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 "" "Nije moguće pronači mapu snimki.\n" "Ako se nalazi na izmjenjivom disku, molimo, spojite ga." #: ../../common/snapshots.py:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "Čekanje %s sekunda." msgstr[1] "Čekanje %s sekundi." msgstr[2] "Čekanje %s sekundi." #: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "Neuspjelo uzimanje snimke %s !!!" #: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "Završavanje" #: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "Nije moguće napraviti mapu: %s" #: ../../common/snapshots.py:1217 msgid "..." msgstr "..." #: ../../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:1340 #, python-format msgid "Compare with snapshot %s" msgstr "Usporedi s snimkom %s" #: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "Stvori hard-linkove" #: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "Spremi datoteku postavki ..." #: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "Spremi dopuštenje ..." #: ../../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:1695 ../../common/snapshots.py:1728 #: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "Smart uklanjanje" #: ../../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:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" #: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "" #: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "" #: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" #: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" #: ../../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:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" #: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" #: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" #: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" #: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" #: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" #: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" #: ../../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 "" #: ../../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 "" #: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "" #: ../../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" #: ../../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ć" #: ../../qt4/app.py:122 msgid "Config File Help" msgstr "" #: ../../qt4/app.py:125 msgid "Website" msgstr "Web stranica" #: ../../qt4/app.py:127 ../../qt4/app.py:982 msgid "Changelog" msgstr "" #: ../../qt4/app.py:129 msgid "FAQ" msgstr "" #: ../../qt4/app.py:131 msgid "Ask a question" msgstr "" #: ../../qt4/app.py:133 msgid "Report a bug" msgstr "" #: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "O programu" #: ../../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" #: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 #: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "" #: ../../qt4/app.py:194 msgid "Restore and delete new files" msgstr "" #: ../../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 "" #: ../../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 "" #: ../../qt4/app.py:277 msgid "Shortcuts" msgstr "Prečaci" #: ../../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" msgstr "" "Nije moguće pronaći mapu snimki.\n" "Ako je na izmjenjivom disku, molimo, spojite ga i pritisnite OK" #: ../../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 "Radim:" #: ../../qt4/app.py:695 msgid "Done, no backup needed" msgstr "Završeno, nije potrebna rezerva" #: ../../qt4/app.py:707 msgid "Error:" msgstr "Greška:" #: ../../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" #: ../../qt4/app.py:778 msgid "Root" msgstr "Korijen" #: ../../qt4/app.py:779 msgid "Home" msgstr "Početak" #: ../../qt4/app.py:794 msgid "Backup folders" msgstr "Mape rezerve" #: ../../qt4/app.py:849 msgid "This is NOT a snapshot but a live view of your local files" msgstr "" #: ../../qt4/app.py:860 ../../qt4/app.py:1476 #, python-format msgid "Last check %s" msgstr "" #: ../../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" #: ../../qt4/app.py:1004 #, python-format msgid "" "Backup local files before overwriting or\n" "removing with trailing '%(suffix)s'." msgstr "" #: ../../qt4/app.py:1010 msgid "" "Are you sure you want to remove all newer files in your original folder?" msgstr "" #: ../../qt4/app.py:1014 msgid "" "WARNING: deleting files in filesystem root could break your whole system!!!" msgstr "" #: ../../qt4/app.py:1016 msgid "Files to be restored:" msgstr "" #: ../../qt4/app.py:1031 msgid "Do you really want to restore this files(s):" msgstr "" #: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "Snimka: %s" #: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "Prikaži snimku napravljenu %s" #: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "Prikaži trenutni sadržaj diska" #: ../../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" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 #: ../../qt4/settingsdialog.py:657 msgid "Errors" msgstr "Grješke" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 msgid "Changes" msgstr "Promjene" #: ../../qt4/logviewdialog.py:92 msgid "Informations" msgstr "Informacije" #: ../../qt4/logviewdialog.py:101 msgid "[E] Error, [I] Information, [C] Change" msgstr "[E] Grješka, [I] Informacije, [C] Promjeni" #: ../../qt4/logviewdialog.py:104 msgid "decode paths" msgstr "" #: ../../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 "Obrađujem..." #: ../../qt4/qt4tools.py:178 msgid "Today" msgstr "Danas" #: ../../qt4/qt4tools.py:183 msgid "Yesterday" msgstr "Jučer" #: ../../qt4/qt4tools.py:188 msgid "This week" msgstr "Ovaj tjedan" #: ../../qt4/qt4tools.py:193 msgid "Last week" msgstr "Prošli tjedan" #: ../../qt4/restoredialog.py:75 msgid "Show full Log" msgstr "" #: ../../qt4/settingsdialog.py:68 msgid "Edit" msgstr "Uredi" #: ../../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 "Općenito" #: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "" #: ../../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" #: ../../qt4/settingsdialog.py:145 msgid "Folder" msgstr "" #: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" #: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "Domaćin:" #: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "" #: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "Korisnik:" #: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" #: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" #: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "" #: ../../qt4/settingsdialog.py:201 msgid "Key File" msgstr "" #: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 #: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "" #: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" #: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" #: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "Napredno" #: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 msgid "Full snapshot path: " msgstr "" #: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "Raspored" #: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "" #: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "" #: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "Sat:" #: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "" #: ../../qt4/settingsdialog.py:339 msgid "" "Run Back In Time repeatedly. This is useful if the computer is not running " "regular." msgstr "" #: ../../qt4/settingsdialog.py:344 msgid "Every:" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Uključi" #: ../../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" #: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Dodaj mapu" #: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Isključi" #: ../../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 "" #: ../../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" #: ../../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" #: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "Starije od:" #: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "Ako je slobodan prostor manji od:" #: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" #: ../../qt4/settingsdialog.py:551 msgid "Run in background on remote Host." msgstr "" #: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "" #: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "" #: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "" #: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "" #: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "" #: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "" #: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "" #: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "" #: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "Nemoj uklanjati imenovane snimke" #: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Opcije" #: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Omogući obavijesti" #: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "Onesposobi snimke tijekom rada na bateriji" #: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" msgstr "Stanje energije nije dostupno od sustava" #: ../../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 "" #: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "Nastavi ne grješkama (zadrži nepotpune snimke)" #: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "" #: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "" #: ../../qt4/settingsdialog.py:634 msgid "" "- snapshots are not read-only\n" "- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "Razina Zapisa:" #: ../../qt4/settingsdialog.py:656 msgid "None" msgstr "Nijedno" #: ../../qt4/settingsdialog.py:658 msgid "Changes & Errors" msgstr "Promjene & Grješke" #: ../../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 !" #: ../../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 "" #: ../../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 "" #: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" #: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "Sačuvaj ACL" #: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "" #: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute 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 "Novi profil" #: ../../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 "" #: ../../qt4/settingsdialog.py:1489 msgid "Exclude pattern" msgstr "Isključi slijed" #: ../../qt4/settingsdialog.py:1502 msgid "Exclude file" msgstr "Isključi datoteku" #: ../../qt4/settingsdialog.py:1506 msgid "Exclude folder" msgstr "Isključi mapu" #: ../../qt4/settingsdialog.py:1525 msgid "Include file" msgstr "Uključi datoteku" #: ../../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 "Uključi mapu" #: ../../qt4/settingsdialog.py:1572 msgid "Are you sure you want to change snapshots folder ?" msgstr "Jeste li sigurni da želite promjeniti mapu snimki?" #: ../../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 "" #: ../../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 "" #: ../../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 "" #: ../../qt4/snapshotsdialog.py:123 msgid "Deep check (more accurate, but slow)" msgstr "Dubinska provjera (preciznije, ali sporije)" #: ../../qt4/snapshotsdialog.py:144 msgid "Delete" msgstr "" #: ../../qt4/snapshotsdialog.py:148 msgid "Select All" msgstr "" #: ../../qt4/snapshotsdialog.py:161 msgid "Diff" msgstr "Razlika" #: ../../qt4/snapshotsdialog.py:172 msgid "Go To" msgstr "Idi Na" #: ../../qt4/snapshotsdialog.py:326 msgid "You can't compare a snapshot to itself" msgstr "Nije moguće usporediti snimku s njom samom" #: ../../qt4/snapshotsdialog.py:333 #, python-format msgid "Command not found: %s" msgstr "Naredba nije pronađena: %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 "" backintime-1.1.12/common/po/he.po0000664000175000017500000011364112644767576016120 0ustar germargermar# Hebrew translation for backintime # Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008 # This file is distributed under the same license as the backintime package. # FIRST AUTHOR , 2008. # msgid "" msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \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" "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: 2016-01-11 17:52+0000\n" "X-Generator: Launchpad (build 17881)\n" #: ../../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:77 msgid "At every boot/reboot" msgstr "כל איתחול של מערכת" #: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "כל 5 דקות" #: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "כל 10 דקות" #: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "כל 30 דקות" #: ../../common/config.py:81 msgid "Every hour" msgstr "כל שעה" #: ../../common/config.py:82 msgid "Every 2 hours" msgstr "כל שעתיים" #: ../../common/config.py:83 msgid "Every 4 hours" msgstr "כל 4 שעות" #: ../../common/config.py:84 msgid "Every 6 hours" msgstr "כל 6 שעות" #: ../../common/config.py:85 msgid "Every 12 hours" msgstr "כל 12 שעות" #: ../../common/config.py:86 msgid "Custom Hours" msgstr "" #: ../../common/config.py:87 msgid "Every Day" msgstr "כל יום" #: ../../common/config.py:88 msgid "Repeatedly (anacron)" msgstr "" #: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "" #: ../../common/config.py:90 msgid "Every Week" msgstr "כל שבוע" #: ../../common/config.py:91 msgid "Every Month" msgstr "כל חודש" #: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "יום/ימים" #: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "שבוע/ות" #: ../../common/config.py:97 msgid "Year(s)" msgstr "שנה/שנים" #: ../../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:129 msgid "Local" msgstr "מקומי" #: ../../common/config.py:130 msgid "SSH" msgstr "SSH" #: ../../common/config.py:130 ../../common/config.py:132 #: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "מפתח פרטי SSH" #: ../../common/config.py:131 msgid "Local encrypted" msgstr "" #: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "" #: ../../common/config.py:132 msgid "SSH encrypted" msgstr "" #: ../../common/config.py:135 msgid "Default" msgstr "ברירת מחדל" #: ../../common/config.py:136 msgid "AES128-CTR" msgstr "AES128-CTR" #: ../../common/config.py:137 msgid "AES192-CTR" msgstr "AES192-CTR" #: ../../common/config.py:138 msgid "AES256-CTR" msgstr "AES256-CTR" #: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "ARCFOUR256" #: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "ARCFOUR128" #: ../../common/config.py:141 msgid "AES128-CBC" msgstr "AES128-CBC" #: ../../common/config.py:142 msgid "3DES-CBC" msgstr "3DES-CBC" #: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "Blowfish-CBC" #: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "Cast128-CBC" #: ../../common/config.py:145 msgid "AES192-CBC" msgstr "AES192-CBC" #: ../../common/config.py:146 msgid "AES256-CBC" msgstr "AES256-CBC" #: ../../common/config.py:147 msgid "ARCFOUR" msgstr "ARCFOUR" #: ../../common/config.py:153 msgid "Main profile" msgstr "הפרופיל הראשי" #: ../../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:289 msgid "Snapshots folder is not valid !" msgstr "תיקיית הגיבויים אינה תקנית !" #: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "עליך לבחור לפחות תיקייה אחת לגיבוי !" #: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "לא ניתן לכלול את תיקיית הגיבוי !" #: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "לא ניתן לכלול תת־תיקיות של תיקיית הגיבוי !" #: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s אינה תיקייה !" #: ../../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 "" "לא ניתן לכתוב אל: %s\n" "האם יש ברשותך גישה לכתיבה ?" #: ../../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" "If not you should disable all automatic backups." msgstr "" "לא ניתן למצוא את crontab.\n" "האם cron מותקן?\n" "במידה שלא יש לבטל את כל הגיבויים האוטומטיים." #: ../../common/config.py:1411 msgid "Failed to write new crontab." msgstr "" #: ../../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/config.py:1517 #, python-format msgid "Schedule udev doesn't work with mode %s" msgstr "" #: ../../common/config.py:1526 #, python-format msgid "Couldn't find UUID for \"%s\"" msgstr "" #: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" "\n" "%(error)s" msgstr "" #: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "" #: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "" #: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" #: ../../common/encfstools.py:171 msgid "Cancel" msgstr "" #: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "" #: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "" #: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" #: ../../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 "" #: ../../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:512 ../../common/snapshots.py:1131 #: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "ביצוע הגיבוי" #: ../../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:259 #, python-format msgid "mountpoint %s not empty." msgstr "" #: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" #: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" #: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "כעת" #: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "עם שגיאות !" #: ../../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:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "נכשל" #: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "" #: ../../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:868 #, python-format msgid "" "%s profiles found. \n" "\n" "The 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)" msgstr "" "%s פרופילים נמצאו. \n" "תצורת הגיבוי החדשה תומכת באיחסון על משתמשים ופרופילים שונים שנמצאים באותו " "המיקום. האם תרצה להשתמש באותו המיקום עבור שני הפרופילים?" #: ../../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:918 #, python-format msgid "" "%(snapshots_left)s\n" "of profile %(profile_id)s are not moved to their new location\n" "Do 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" "\n" "If not Back In Time will restore former settings for this profile, however " "cannot continue taking snapshots" msgstr "" #: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" "Back In Time cannot continue taking new snapshots.\n" "\n" "You can manually move the snapshots, \n" "if you are done restart Back In Time to proceed" msgstr "" #: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" msgstr "" "עדכון עבר בהצלחה!\n" "\n" "Back In Time תמשיך לבצעה גיבוים כמתוכנן" #: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" "\n" "If 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" "\n" "If you do not, you will be asked again next time you start Back In Time." msgstr "" #: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "Back In Time שוב ימשיך לבצעה גיבוים כמתוכנן" #: ../../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: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 "" "לא ניתן למצוא את תיקיית הגיבויים.\n" "אם היא נמצאת בכונן נשלף עליך לחבר אותו." #: ../../common/snapshots.py:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "בהמתנה של שניה אחת." msgstr[1] "בהמתנה של %s שניות." #: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "נכשל בלקיחת גיבוי %s !!!" #: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "בהליכי סיום" #: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "לא ניתן ליצור את התיקייה: %s" #: ../../common/snapshots.py:1217 msgid "..." msgstr "..." #: ../../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:1340 #, python-format msgid "Compare with snapshot %s" msgstr "השוואה עם הגיבוי %s" #: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "יצירת קישורים קשיחים" #: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "שומר קובץ הגדרות ..." #: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "שמירת ההרשאות ..." #: ../../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:1695 ../../common/snapshots.py:1728 #: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "הסרה חכמה" #: ../../common/snapshots.py:1704 msgid "Remove old snapshots" msgstr "הסרת גיבויים ישנים" #: ../../common/snapshots.py:1733 msgid "Try to keep min free space" msgstr "נסיון לשמירת כמה שפחות מקום פנוי" #: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" #: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "" #: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "" #: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" #: ../../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:278 #, python-format msgid "" "Password-less authentication for %(user)s@%(host)s failed. Look at 'man " "backintime' for further instructions." msgstr "" #: ../../common/sshtools.py:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" #: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "%s לא נמצא ברשימה ssh_known_hosts." #: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" #: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" #: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" #: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" #: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" #: ../../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 "" #: ../../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 "" #: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" 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 "יציאה" #: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 msgid "Help" msgstr "עזרה" #: ../../qt4/app.py:122 msgid "Config File Help" msgstr "" #: ../../qt4/app.py:125 msgid "Website" msgstr "אתר הבית" #: ../../qt4/app.py:127 ../../qt4/app.py:982 msgid "Changelog" msgstr "" #: ../../qt4/app.py:129 msgid "FAQ" msgstr "" #: ../../qt4/app.py:131 msgid "Ask a question" msgstr "שאל שאלה" #: ../../qt4/app.py:133 msgid "Report a bug" msgstr "דיווח על תקלה" #: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "אודות" #: ../../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 "שחזור" #: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 #: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "לשחזר ל..." #: ../../qt4/app.py:194 msgid "Restore and delete new files" msgstr "" #: ../../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 "" #: ../../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 "קיצורים" #: ../../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" msgstr "" "לא ניתן למצוא את תיקיית הגיבויים.\n" "אם היא נמצאת על כונן נשלף יש לחבר אותו וללחוץ על אישור" #: ../../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 "בעבודה:" #: ../../qt4/app.py:695 msgid "Done, no backup needed" msgstr "הסתיים, לא נדרש גיבוי" #: ../../qt4/app.py:707 msgid "Error:" msgstr "שגיאה:" #: ../../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 "כללי" #: ../../qt4/app.py:778 msgid "Root" msgstr "תיקיית העל" #: ../../qt4/app.py:779 msgid "Home" msgstr "תיקיית הבית" #: ../../qt4/app.py:794 msgid "Backup folders" msgstr "תיקיות הגיבוי" #: ../../qt4/app.py:849 msgid "This is NOT a snapshot but a live view of your local files" msgstr "" #: ../../qt4/app.py:860 ../../qt4/app.py:1476 #, python-format msgid "Last check %s" msgstr "" #: ../../qt4/app.py:928 #, python-format msgid "" "Are you sure you want to remove the snapshot:\n" "%s" msgstr "" "אתה בטוח שברצונך להסיר את הגיבוי:\n" "%s" #: ../../qt4/app.py:1004 #, python-format msgid "" "Backup local files before overwriting or\n" "removing with trailing '%(suffix)s'." msgstr "" #: ../../qt4/app.py:1010 msgid "" "Are you sure you want to remove all newer files in your original folder?" msgstr "" #: ../../qt4/app.py:1014 msgid "" "WARNING: deleting files in filesystem root could break your whole system!!!" msgstr "" #: ../../qt4/app.py:1016 msgid "Files to be restored:" msgstr "" #: ../../qt4/app.py:1031 msgid "Do you really want to restore this files(s):" msgstr "" #: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "גיבוי: %s" #: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "צפיה בגיבוי שבוצע ב־%s" #: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "צפיה בתוכן הנוכחי של הכונן" #: ../../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 "הכל" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 #: ../../qt4/settingsdialog.py:657 msgid "Errors" msgstr "שגיאות" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 msgid "Changes" msgstr "שינויים" #: ../../qt4/logviewdialog.py:92 msgid "Informations" msgstr "" #: ../../qt4/logviewdialog.py:101 msgid "[E] Error, [I] Information, [C] Change" msgstr "" #: ../../qt4/logviewdialog.py:104 msgid "decode paths" msgstr "" #: ../../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 "פועל..." #: ../../qt4/qt4tools.py:178 msgid "Today" msgstr "היום" #: ../../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 "" #: ../../qt4/settingsdialog.py:68 msgid "Edit" msgstr "עריכה" #: ../../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 "כללי" #: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "מצב:" #: ../../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 "איפה לשמור גיבויים" #: ../../qt4/settingsdialog.py:145 msgid "Folder" msgstr "" #: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "הגדרות SSH" #: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "" #: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "פורט:" #: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "" #: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" #: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "צופן:" #: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "מפתח פרטי:" #: ../../qt4/settingsdialog.py:201 msgid "Key File" msgstr "" #: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 #: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "סיסמה" #: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" #: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" #: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "הגדרות מתקדמות" #: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 msgid "Full snapshot path: " msgstr "" #: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "תזמון" #: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "יום:" #: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "" #: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "שעה:" #: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "שעות:" #: ../../qt4/settingsdialog.py:339 msgid "" "Run Back In Time repeatedly. This is useful if the computer is not running " "regular." msgstr "" #: ../../qt4/settingsdialog.py:344 msgid "Every:" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "כלול" #: ../../qt4/settingsdialog.py:381 msgid "Include files and folders" msgstr "" #: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "הוספת קובץ" #: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "הוספת תיקייה" #: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "כלול" #: ../../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 "" #: ../../qt4/settingsdialog.py:425 msgid "Exclude patterns, files or folders" msgstr "" #: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "מאוד מומלץ:" #: ../../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 "הסרה-אוטומטית" #: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "ישן מ:" #: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "אם המקום פנוי קטן מ:" #: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" #: ../../qt4/settingsdialog.py:551 msgid "Run in background on remote Host." msgstr "" #: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "" #: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "" #: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "" #: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "" #: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "שבועות" #: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "" #: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "חודשים" #: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "" #: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "אל תסיר לכידות בעלות שם" #: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "אפשרויות" #: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "אפשר הודעות" #: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "השבת גיבויים כאשר על בטרייה" #: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" 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 "" #: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "" #: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "" #: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "" #: ../../qt4/settingsdialog.py:634 msgid "" "- snapshots are not read-only\n" "- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "" #: ../../qt4/settingsdialog.py:656 msgid "None" msgstr "" #: ../../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 "עשו שינוים בהגדרות אלו רק אם אתם באמת יודעים מה אתם עושים !" #: ../../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 "" #: ../../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 "" #: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" #: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "" #: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "" #: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute 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 "" #: ../../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 "אפשרויות שינויים" #: ../../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 "" #: ../../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 "" #: ../../qt4/snapshotsdialog.py:148 msgid "Select All" msgstr "" #: ../../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 "" "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 "" backintime-1.1.12/common/po/nn.po0000664000175000017500000010670512644767576016142 0ustar germargermar# Norwegian Nynorsk translation for backintime # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the backintime package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \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" "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: 2016-01-11 17:52+0000\n" "X-Generator: Launchpad (build 17881)\n" #: ../../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:77 msgid "At every boot/reboot" msgstr "" #: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Kvart 5. minutt" #: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Kvart 10. minutt" #: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "" #: ../../common/config.py:81 msgid "Every hour" msgstr "" #: ../../common/config.py:82 msgid "Every 2 hours" msgstr "" #: ../../common/config.py:83 msgid "Every 4 hours" msgstr "" #: ../../common/config.py:84 msgid "Every 6 hours" msgstr "" #: ../../common/config.py:85 msgid "Every 12 hours" msgstr "" #: ../../common/config.py:86 msgid "Custom Hours" msgstr "" #: ../../common/config.py:87 msgid "Every Day" msgstr "Kvar dag" #: ../../common/config.py:88 msgid "Repeatedly (anacron)" msgstr "" #: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "" #: ../../common/config.py:90 msgid "Every Week" msgstr "Kvar veke" #: ../../common/config.py:91 msgid "Every Month" msgstr "Kvar månad" #: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Dag(ar)" #: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Veke(r)" #: ../../common/config.py:97 msgid "Year(s)" msgstr "År" #: ../../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:129 msgid "Local" msgstr "" #: ../../common/config.py:130 msgid "SSH" msgstr "" #: ../../common/config.py:130 ../../common/config.py:132 #: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "" #: ../../common/config.py:131 msgid "Local encrypted" msgstr "" #: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "" #: ../../common/config.py:132 msgid "SSH encrypted" msgstr "" #: ../../common/config.py:135 msgid "Default" msgstr "" #: ../../common/config.py:136 msgid "AES128-CTR" msgstr "" #: ../../common/config.py:137 msgid "AES192-CTR" msgstr "" #: ../../common/config.py:138 msgid "AES256-CTR" msgstr "" #: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "" #: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "" #: ../../common/config.py:141 msgid "AES128-CBC" msgstr "" #: ../../common/config.py:142 msgid "3DES-CBC" msgstr "" #: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "" #: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "" #: ../../common/config.py:145 msgid "AES192-CBC" msgstr "" #: ../../common/config.py:146 msgid "AES256-CBC" msgstr "" #: ../../common/config.py:147 msgid "ARCFOUR" msgstr "" #: ../../common/config.py:153 msgid "Main profile" msgstr "Hovudprofil" #: ../../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:289 msgid "Snapshots folder is not valid !" msgstr "Mappa for augneblinksbileta er ugyldig." #: ../../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:307 msgid "You can't include backup folder !" msgstr "Tryggleikskopimappa kan ikkje vera med." #: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "Undermapper til tryggleikskopimappa kan ikkje vera med." #: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s er ikkje ei mappe." #: ../../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 "" "Klarer ikkje å skriva til: %s\n" "Er du sikker på at du har skrivetilgang?" #: ../../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" "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:1411 msgid "Failed to write new crontab." msgstr "" #: ../../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/config.py:1517 #, python-format msgid "Schedule udev doesn't work with mode %s" msgstr "" #: ../../common/config.py:1526 #, python-format msgid "Couldn't find UUID for \"%s\"" msgstr "" #: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" "\n" "%(error)s" msgstr "" #: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "" #: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "" #: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" #: ../../common/encfstools.py:171 msgid "Cancel" msgstr "" #: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "" #: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "" #: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" #: ../../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 "" #: ../../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:512 ../../common/snapshots.py:1131 #: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "Ta augneblinksbilete" #: ../../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:259 #, python-format msgid "mountpoint %s not empty." msgstr "" #: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" #: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" #: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "No" #: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "" #: ../../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:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "" #: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "" #: ../../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:868 #, python-format msgid "" "%s profiles found. \n" "\n" "The 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)" msgstr "" "Fann %s profilar. \n" "\n" "Det nye kopieringsformatet handterer lagring av forskjellige brukarar og " "profilar på same stad. Vil du nytta den same staden til begge profilane? \n" "\n" "(Programmet er i stand til å skilja mellom dei)" #: ../../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:918 #, python-format msgid "" "%(snapshots_left)s\n" "of profile %(profile_id)s are not moved to their new location\n" "Do 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" "\n" "If not Back In Time will restore former settings for this profile, however " "cannot continue taking snapshots" msgstr "" #: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" "Back In Time cannot continue taking new snapshots.\n" "\n" "You can manually move the snapshots, \n" "if you are done restart Back In Time to proceed" msgstr "" #: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" msgstr "" #: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" "\n" "If 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" "\n" "If you do not, you will be asked again next time you start Back In Time." msgstr "" #: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "" #: ../../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: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 "" "Finn ikkje augneblinksmappa.\n" "Dersom ho er på ei ekstern lagringseining, plugg ho i." #: ../../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:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "" #: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "Sluttfører" #: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "Klarer ikkje å laga mappa: %s" #: ../../common/snapshots.py:1217 msgid "..." msgstr "…" #: ../../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:1340 #, python-format msgid "Compare with snapshot %s" msgstr "Samanlikna med biletet %s" #: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "Lag harde lenkjer" #: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "Lagra innstillingsfila …" #: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "Lagra løyve …" #: ../../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:1695 ../../common/snapshots.py:1728 #: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "Smart-sletting" #: ../../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:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" #: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "" #: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "" #: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" #: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" #: ../../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:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" #: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" #: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" #: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" #: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" #: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" #: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" #: ../../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 "" #: ../../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 "" #: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "" #: ../../qt4/app.py:81 msgid "Refresh snapshots list" msgstr "" #: ../../qt4/app.py:85 ../../qt4/app.py:890 msgid "Snapshot Name" msgstr "Biletnamn" #: ../../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" #: ../../qt4/app.py:122 msgid "Config File Help" msgstr "" #: ../../qt4/app.py:125 msgid "Website" msgstr "" #: ../../qt4/app.py:127 ../../qt4/app.py:982 msgid "Changelog" msgstr "" #: ../../qt4/app.py:129 msgid "FAQ" msgstr "" #: ../../qt4/app.py:131 msgid "Ask a question" msgstr "" #: ../../qt4/app.py:133 msgid "Report a bug" msgstr "" #: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "Om" #: ../../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" #: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 #: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "" #: ../../qt4/app.py:194 msgid "Restore and delete new files" msgstr "" #: ../../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 "" #: ../../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" #: ../../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" msgstr "" "Finn ikkje augneblinksbiletmappa.\n" "Dersom ho er på ei ekstern lagringseining, plugg eininga i og trykk OK" #: ../../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 "Arbeider:" #: ../../qt4/app.py:695 msgid "Done, no backup needed" msgstr "Ferdig, trong ikkje tryggleikskopiera" #: ../../qt4/app.py:707 msgid "Error:" msgstr "" #: ../../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" #: ../../qt4/app.py:778 msgid "Root" msgstr "Root" #: ../../qt4/app.py:779 msgid "Home" msgstr "Heim" #: ../../qt4/app.py:794 msgid "Backup folders" msgstr "Kopieringsmapper" #: ../../qt4/app.py:849 msgid "This is NOT a snapshot but a live view of your local files" msgstr "" #: ../../qt4/app.py:860 ../../qt4/app.py:1476 #, python-format msgid "Last check %s" msgstr "" #: ../../qt4/app.py:928 #, python-format msgid "" "Are you sure you want to remove the snapshot:\n" "%s" msgstr "" #: ../../qt4/app.py:1004 #, python-format msgid "" "Backup local files before overwriting or\n" "removing with trailing '%(suffix)s'." msgstr "" #: ../../qt4/app.py:1010 msgid "" "Are you sure you want to remove all newer files in your original folder?" msgstr "" #: ../../qt4/app.py:1014 msgid "" "WARNING: deleting files in filesystem root could break your whole system!!!" msgstr "" #: ../../qt4/app.py:1016 msgid "Files to be restored:" msgstr "" #: ../../qt4/app.py:1031 msgid "Do you really want to restore this files(s):" msgstr "" #: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "Augneblinksbilete: %s" #: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "Sjå på augneblinksbiletet som blei laga %s" #: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "Sjå på innhaldet til det gjeldande lageret" #: ../../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 "" #: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 msgid "All" msgstr "" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 #: ../../qt4/settingsdialog.py:657 msgid "Errors" msgstr "" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 msgid "Changes" msgstr "" #: ../../qt4/logviewdialog.py:92 msgid "Informations" msgstr "" #: ../../qt4/logviewdialog.py:101 msgid "[E] Error, [I] Information, [C] Change" msgstr "" #: ../../qt4/logviewdialog.py:104 msgid "decode paths" msgstr "" #: ../../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 "Arbeider …" #: ../../qt4/qt4tools.py:178 msgid "Today" msgstr "I dag" #: ../../qt4/qt4tools.py:183 msgid "Yesterday" msgstr "I går" #: ../../qt4/qt4tools.py:188 msgid "This week" msgstr "Denne veka" #: ../../qt4/qt4tools.py:193 msgid "Last week" msgstr "Førre veke" #: ../../qt4/restoredialog.py:75 msgid "Show full Log" msgstr "" #: ../../qt4/settingsdialog.py:68 msgid "Edit" msgstr "Endra" #: ../../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 "" #: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:145 msgid "Folder" msgstr "" #: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" #: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "" #: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "" #: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "" #: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" #: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" #: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "" #: ../../qt4/settingsdialog.py:201 msgid "Key File" msgstr "" #: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 #: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "" #: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" #: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" #: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "" #: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 msgid "Full snapshot path: " msgstr "" #: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "" #: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "" #: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "" #: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "" #: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "" #: ../../qt4/settingsdialog.py:339 msgid "" "Run Back In Time repeatedly. This is useful if the computer is not running " "regular." msgstr "" #: ../../qt4/settingsdialog.py:344 msgid "Every:" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "" #: ../../qt4/settingsdialog.py:381 msgid "Include files and folders" msgstr "" #: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "" #: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "" #: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:425 msgid "Exclude patterns, files or folders" msgstr "" #: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "" #: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "" #: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" #: ../../qt4/settingsdialog.py:551 msgid "Run in background on remote Host." msgstr "" #: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "" #: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "" #: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "" #: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "" #: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "" #: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "" #: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "" #: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "" #: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "" #: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "" #: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "" #: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "" #: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" 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 "" #: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "" #: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "" #: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "" #: ../../qt4/settingsdialog.py:634 msgid "" "- snapshots are not read-only\n" "- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "" #: ../../qt4/settingsdialog.py:656 msgid "None" msgstr "" #: ../../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 "" #: ../../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 "" #: ../../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 "" #: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" #: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "" #: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "" #: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute 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 "Ny profil" #: ../../qt4/settingsdialog.py:938 msgid "Rename profile" msgstr "Gje profilen nytt namn" #: ../../qt4/settingsdialog.py:952 #, python-format msgid "Are you sure you want to delete the profile \"%s\" ?" msgstr "Vil du verkeleg sletta profilen \"%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 "Ekskluder mønster" #: ../../qt4/settingsdialog.py:1502 msgid "Exclude file" msgstr "Ekskluder fil" #: ../../qt4/settingsdialog.py:1506 msgid "Exclude folder" msgstr "Ekskluder mappe" #: ../../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 "" #: ../../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 "" #: ../../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 "" #: ../../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 "" #: ../../qt4/snapshotsdialog.py:106 msgid "List only different snapshots" msgstr "" #: ../../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 "" #: ../../qt4/snapshotsdialog.py:148 msgid "Select All" msgstr "" #: ../../qt4/snapshotsdialog.py:161 msgid "Diff" msgstr "Diff" #: ../../qt4/snapshotsdialog.py:172 msgid "Go To" msgstr "" #: ../../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 "" "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 "" backintime-1.1.12/common/po/sk.po0000664000175000017500000011407012644767576016136 0ustar germargermar# Slovak translation for backintime # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the backintime package. # Tomáš Vadina , 2009. # msgid "" msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: \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: 2016-01-11 17:52+0000\n" "X-Generator: Launchpad (build 17881)\n" "X-Poedit-Country: SLOVAKIA\n" "X-Poedit-Language: Slovak\n" #: ../../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:77 msgid "At every boot/reboot" msgstr "Pri každom štarte/reštartu" #: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Každých 5 minút" #: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Každých 10 minút" #: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "" #: ../../common/config.py:81 msgid "Every hour" msgstr "" #: ../../common/config.py:82 msgid "Every 2 hours" msgstr "" #: ../../common/config.py:83 msgid "Every 4 hours" msgstr "" #: ../../common/config.py:84 msgid "Every 6 hours" msgstr "" #: ../../common/config.py:85 msgid "Every 12 hours" msgstr "" #: ../../common/config.py:86 msgid "Custom Hours" msgstr "" #: ../../common/config.py:87 msgid "Every Day" msgstr "Každý deň" #: ../../common/config.py:88 msgid "Repeatedly (anacron)" msgstr "" #: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "" #: ../../common/config.py:90 msgid "Every Week" msgstr "Každý týždeň" #: ../../common/config.py:91 msgid "Every Month" msgstr "Každý mesiac" #: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Dni" #: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Týždne" #: ../../common/config.py:97 msgid "Year(s)" msgstr "Roky" #: ../../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:129 msgid "Local" msgstr "" #: ../../common/config.py:130 msgid "SSH" msgstr "" #: ../../common/config.py:130 ../../common/config.py:132 #: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "" #: ../../common/config.py:131 msgid "Local encrypted" msgstr "" #: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "" #: ../../common/config.py:132 msgid "SSH encrypted" msgstr "" #: ../../common/config.py:135 msgid "Default" msgstr "" #: ../../common/config.py:136 msgid "AES128-CTR" msgstr "" #: ../../common/config.py:137 msgid "AES192-CTR" msgstr "" #: ../../common/config.py:138 msgid "AES256-CTR" msgstr "" #: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "" #: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "" #: ../../common/config.py:141 msgid "AES128-CBC" msgstr "" #: ../../common/config.py:142 msgid "3DES-CBC" msgstr "" #: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "" #: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "" #: ../../common/config.py:145 msgid "AES192-CBC" msgstr "" #: ../../common/config.py:146 msgid "AES256-CBC" msgstr "" #: ../../common/config.py:147 msgid "ARCFOUR" msgstr "" #: ../../common/config.py:153 msgid "Main profile" msgstr "Hlavný profil" #: ../../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:289 msgid "Snapshots folder is not valid !" msgstr "Priečinok snímok nie je platný !" #: ../../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:307 msgid "You can't include backup folder !" msgstr "Nemožno zahrnúť priečinok zálohy !" #: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "Nemožno zahrnúť podpriečinok zálohy !" #: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s nie je priečinok !" #: ../../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 "" "Nie je možné zapisovať do: %s\n" "Určite máte právo na zápis ?" #: ../../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 "Kopírovať odkazy (znefunkční symbolické odkazy)" #: ../../common/config.py:409 ../../qt4/settingsdialog.py:669 msgid "Expert Options" msgstr "Možnosti expertov" #: ../../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" "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:1411 msgid "Failed to write new crontab." msgstr "" #: ../../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/config.py:1517 #, python-format msgid "Schedule udev doesn't work with mode %s" msgstr "" #: ../../common/config.py:1526 #, python-format msgid "Couldn't find UUID for \"%s\"" msgstr "" #: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" "\n" "%(error)s" msgstr "" #: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "" #: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "" #: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" #: ../../common/encfstools.py:171 msgid "Cancel" msgstr "" #: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "" #: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "" #: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" #: ../../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 "" #: ../../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:512 ../../common/snapshots.py:1131 #: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "Urobiť snímku" #: ../../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:259 #, python-format msgid "mountpoint %s not empty." msgstr "" #: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" #: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" #: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Teraz" #: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "S CHYBAMI!" #: ../../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:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "" #: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "" #: ../../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" "Your old snapshots can be moved according to this new format. OK?" msgstr "" "Back In Time zmenil svoj zálohovací formát.\n" "\n" "Vaše staré snímky môžu byť presunuté do tohto nového formátu. OK?" #: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" "\n" "The 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)" msgstr "" "%s profil nájdený. \n" "\n" "Nový zálohovací formát podporuje uloženie rozdielnych používateľov a " "profilov do rovnakého umiestnenia. Požadujete rovnaké umiestnenie pre oba " "profily? \n" "\n" "(Program bude naďalej rozlišovať medzi nimi)" #: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" msgstr "" "Nebol nájdený profil. Bude najprv aktualizovaný profil, prosím reštartujte " "Back In Time" #: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" "of profile %(profile_id)s are not moved to their new location\n" "Do 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" "\n" "If not Back In Time will restore former settings for this profile, however " "cannot continue taking snapshots" msgstr "" #: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" "Back In Time cannot continue taking new snapshots.\n" "\n" "You can manually move the snapshots, \n" "if you are done restart Back In Time to proceed" msgstr "" "Predošlé nastavenia profilu %s sú obnovené.\n" "Back In Time nemôže pokračovať vo vytváraní nových snímok.\n" "\n" "Môžete manuálne premiestňovať snímky, \n" "pokiaľ ste dokončili reštart Back In Time." #: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" msgstr "" "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:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" "\n" "If 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" "\n" "If you do not, you will be asked again next time you start Back In Time." msgstr "" "Ste si istý, že chcete presunúť staré snímky?\n" "\n" "\n" "Ak áno, nabudúce nesledujte nasledujúce otázky znovu, Back In Time bude opäť " "pokračovať v tvorbe snímok, ale smart-remove už nemôže zobrať na účet vaše " "staré snímky!\n" "\n" "Ak nie, program sa spýta nabudúce znovu po štarte Back In Time." #: ../../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: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čovať vo vytváraní nových snímok.\n" "Reštartujte Back In Time pre opätovné zobrazenie otázky" #: ../../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 "" "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:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "Čakajte %s sekúnd." msgstr[1] "Čakajte %s sekundu." msgstr[2] "Čakajte %s sekundy." #: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "Zlyhalo vytváranie snímky %s !!!" #: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "Dokončovanie" #: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "Nemožno vytvoriť priečinok: %s" #: ../../common/snapshots.py:1217 msgid "..." msgstr "..." #: ../../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:1340 #, python-format msgid "Compare with snapshot %s" msgstr "Porovnať so snímkou %s" #: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "Vytvoriť hard-linky" #: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "Uložiť konfiguračný súbor" #: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "Uložiť práva ..." #: ../../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:1695 ../../common/snapshots.py:1728 #: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "Šikovné odstránenie" #: ../../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:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" #: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "" #: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "" #: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" #: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" #: ../../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:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" #: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" #: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" #: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" #: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" #: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" #: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" #: ../../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 "" #: ../../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 "" #: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "" #: ../../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 "" #: ../../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" #: ../../qt4/app.py:122 msgid "Config File Help" msgstr "" #: ../../qt4/app.py:125 msgid "Website" msgstr "Webová stránka" #: ../../qt4/app.py:127 ../../qt4/app.py:982 msgid "Changelog" msgstr "" #: ../../qt4/app.py:129 msgid "FAQ" msgstr "" #: ../../qt4/app.py:131 msgid "Ask a question" msgstr "" #: ../../qt4/app.py:133 msgid "Report a bug" msgstr "" #: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "O programe" #: ../../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ť" #: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 #: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "" #: ../../qt4/app.py:194 msgid "Restore and delete new files" msgstr "" #: ../../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 "" #: ../../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 "" #: ../../qt4/app.py:277 msgid "Shortcuts" msgstr "Skratky" #: ../../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" msgstr "" "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" #: ../../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 "Prebieha:" #: ../../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:" #: ../../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" #: ../../qt4/app.py:778 msgid "Root" msgstr "Koreňový priečinok" #: ../../qt4/app.py:779 msgid "Home" msgstr "Domovský priečinok" #: ../../qt4/app.py:794 msgid "Backup folders" msgstr "Priečinky zálohy" #: ../../qt4/app.py:849 msgid "This is NOT a snapshot but a live view of your local files" msgstr "" #: ../../qt4/app.py:860 ../../qt4/app.py:1476 #, python-format msgid "Last check %s" msgstr "" #: ../../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" #: ../../qt4/app.py:1004 #, python-format msgid "" "Backup local files before overwriting or\n" "removing with trailing '%(suffix)s'." msgstr "" #: ../../qt4/app.py:1010 msgid "" "Are you sure you want to remove all newer files in your original folder?" msgstr "" #: ../../qt4/app.py:1014 msgid "" "WARNING: deleting files in filesystem root could break your whole system!!!" msgstr "" #: ../../qt4/app.py:1016 msgid "Files to be restored:" msgstr "" #: ../../qt4/app.py:1031 msgid "Do you really want to restore this files(s):" msgstr "" #: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "Snímka: %s" #: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "Zobraziť snímku vytvorenú %s" #: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "Zobraziť aktuálny obsah disku" #: ../../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" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 #: ../../qt4/settingsdialog.py:657 msgid "Errors" msgstr "Chyby" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 msgid "Changes" msgstr "Zmeny" #: ../../qt4/logviewdialog.py:92 msgid "Informations" msgstr "Informácie" #: ../../qt4/logviewdialog.py:101 msgid "[E] Error, [I] Information, [C] Change" msgstr "[E] Chyba, [I] Informácia, [C] Zmena" #: ../../qt4/logviewdialog.py:104 msgid "decode paths" msgstr "" #: ../../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 "Prebieha..." #: ../../qt4/qt4tools.py:178 msgid "Today" msgstr "Dnes" #: ../../qt4/qt4tools.py:183 msgid "Yesterday" msgstr "Včera" #: ../../qt4/qt4tools.py:188 msgid "This week" msgstr "Tento týždeň" #: ../../qt4/qt4tools.py:193 msgid "Last week" msgstr "Minulý týždeň" #: ../../qt4/restoredialog.py:75 msgid "Show full Log" msgstr "" #: ../../qt4/settingsdialog.py:68 msgid "Edit" msgstr "Editovať" #: ../../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 "Hlavné" #: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "" #: ../../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" #: ../../qt4/settingsdialog.py:145 msgid "Folder" msgstr "" #: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" #: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "Server:" #: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "" #: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "Používateľ" #: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" #: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" #: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "" #: ../../qt4/settingsdialog.py:201 msgid "Key File" msgstr "" #: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 #: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "" #: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" #: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" #: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "Rozšírené" #: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 msgid "Full snapshot path: " msgstr "" #: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "Plánovanie" #: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "" #: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "" #: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "Hodina:" #: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "" #: ../../qt4/settingsdialog.py:339 msgid "" "Run Back In Time repeatedly. This is useful if the computer is not running " "regular." msgstr "" #: ../../qt4/settingsdialog.py:344 msgid "Every:" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Zahrnúť" #: ../../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" #: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Pridať priečinok" #: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Vylúčiť" #: ../../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 "" #: ../../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é:" #: ../../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" #: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "Staršie ako:" #: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "Ak je voľné miesto menšie než:" #: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" #: ../../qt4/settingsdialog.py:551 msgid "Run in background on remote Host." msgstr "" #: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "" #: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "" #: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "" #: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "" #: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "" #: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "" #: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "" #: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "" #: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "Neodstraňovať pomenované snímky" #: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Možnosti" #: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Povoliť upozornenia" #: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "Nevytvárať snímky pokiaľ systém beží na batérie" #: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" msgstr "Nie je možné zistiť stav napájania" #: ../../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 "" #: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "Pokračovať pri chybách (zachovať nekompletné snímky)" #: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "Použiť kontrolný súčet pre zistenie zmien" #: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "" #: ../../qt4/settingsdialog.py:634 msgid "" "- snapshots are not read-only\n" "- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "Úroveň záznamu:" #: ../../qt4/settingsdialog.py:656 msgid "None" msgstr "Žiadne" #: ../../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!" #: ../../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 "" #: ../../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 "" #: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" #: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "Zachovať ACL" #: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "Zachovať rozšírené atribúty (xattr)" #: ../../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)" #: ../../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 "Nový profil" #: ../../qt4/settingsdialog.py:938 msgid "Rename profile" msgstr "Premenovať profil" #: ../../qt4/settingsdialog.py:952 #, python-format msgid "Are you sure you want to delete the profile \"%s\" ?" msgstr "Určite chcete vymazať 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 "" #: ../../qt4/settingsdialog.py:1489 msgid "Exclude pattern" msgstr "Vylúčiť vzor" #: ../../qt4/settingsdialog.py:1502 msgid "Exclude file" msgstr "Vylúčiť súbor" #: ../../qt4/settingsdialog.py:1506 msgid "Exclude folder" msgstr "Vylúčiť priečinok" #: ../../qt4/settingsdialog.py:1525 msgid "Include file" msgstr "Zahrnúť súbor" #: ../../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 "Zahrnúť priečinok" #: ../../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?" #: ../../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 "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" #: ../../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)" #: ../../qt4/snapshotsdialog.py:144 msgid "Delete" msgstr "" #: ../../qt4/snapshotsdialog.py:148 msgid "Select All" msgstr "" #: ../../qt4/snapshotsdialog.py:161 msgid "Diff" msgstr "Rozdiel" #: ../../qt4/snapshotsdialog.py:172 msgid "Go To" msgstr "Ísť na" #: ../../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 "" "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 "" backintime-1.1.12/common/po/hu.po0000664000175000017500000012733212644767576016142 0ustar germargermar# Hungarian translation for backintime # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the backintime package. # # FIRST AUTHOR , 2009. # Kósa Lajos , 2013. msgid "" msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \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: 2016-01-11 17:52+0000\n" "X-Generator: Launchpad (build 17881)\n" "Language: hu\n" #: ../../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:77 msgid "At every boot/reboot" msgstr "Minden (újra)indításkor" #: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Ötpercenként" #: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Tízpercenként" #: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "30 percenként" #: ../../common/config.py:81 msgid "Every hour" msgstr "Óránként" #: ../../common/config.py:82 msgid "Every 2 hours" msgstr "Kétóránként" #: ../../common/config.py:83 msgid "Every 4 hours" msgstr "Négyóránként" #: ../../common/config.py:84 msgid "Every 6 hours" msgstr "Hatóránként" #: ../../common/config.py:85 msgid "Every 12 hours" msgstr "Tizenkétóránként" #: ../../common/config.py:86 msgid "Custom Hours" msgstr "Egyedi beállítás (óra)" #: ../../common/config.py:87 msgid "Every Day" msgstr "Naponta" #: ../../common/config.py:88 msgid "Repeatedly (anacron)" msgstr "" #: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "Ha csatlakozik a meghajtó (udev)" #: ../../common/config.py:90 msgid "Every Week" msgstr "Hetente" #: ../../common/config.py:91 msgid "Every Month" msgstr "Havonta" #: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Nap" #: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Hét" #: ../../common/config.py:97 msgid "Year(s)" msgstr "Év" #: ../../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:129 msgid "Local" msgstr "Helyi" #: ../../common/config.py:130 msgid "SSH" msgstr "SSH" #: ../../common/config.py:130 ../../common/config.py:132 #: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "SSH privát kulcs" #: ../../common/config.py:131 msgid "Local encrypted" msgstr "Helyi titkosított" #: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "Titkosítás" #: ../../common/config.py:132 msgid "SSH encrypted" msgstr "SSH-val titkosított" #: ../../common/config.py:135 msgid "Default" msgstr "Alapértelmezett" #: ../../common/config.py:136 msgid "AES128-CTR" msgstr "AES128-CTR" #: ../../common/config.py:137 msgid "AES192-CTR" msgstr "AES192-CTR" #: ../../common/config.py:138 msgid "AES256-CTR" msgstr "AES256-CTR" #: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "ARCFOUR256" #: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "ARCFOUR128" #: ../../common/config.py:141 msgid "AES128-CBC" msgstr "AES128-CBC" #: ../../common/config.py:142 msgid "3DES-CBC" msgstr "3DES-CBC" #: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "Blowfish-CBC" #: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "Cast128-CBC" #: ../../common/config.py:145 msgid "AES192-CBC" msgstr "AES192-CBC" #: ../../common/config.py:146 msgid "AES256-CBC" msgstr "AES256-CBC" #: ../../common/config.py:147 msgid "ARCFOUR" msgstr "ARCFOUR" #: ../../common/config.py:153 msgid "Main profile" msgstr "Fő profil" #: ../../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:289 msgid "Snapshots folder is not valid !" msgstr "A pillanatkép-könyvtár nem érvényes" #: ../../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:307 msgid "You can't include backup folder !" msgstr "Nem adható hozzá a biztonsági mentés mappája" #: ../../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:371 #, python-format msgid "%s is not a folder !" msgstr "A(z) %s nem könyvtár" #: ../../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 "" "Nem tudok ide írni: %s\n" "Biztos, hogy van írási jogod?" #: ../../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 "Linkek másolása (szimbolikus linkeknél nem csak a hivatkozást)" #: ../../common/config.py:409 ../../qt4/settingsdialog.py:669 msgid "Expert Options" msgstr "Szakértői beállítások" #: ../../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" "If not you should disable all automatic backups." 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:1411 msgid "Failed to write new crontab." msgstr "" #: ../../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/config.py:1517 #, 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" #: ../../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:104 #, python-format msgid "" "Can't mount '%(command)s':\n" "\n" "%(error)s" msgstr "" "Nem tudtam felcsatolni a következőt: '%(command)s':\n" "\n" "%(error)s" #: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "Nem tudom lecsatolni a(z) %s encfs-t" #: ../../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:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" "\n" "Létrehozzak egy új titkosított mappát?" #: ../../common/encfstools.py:171 msgid "Cancel" msgstr "Mégsem" #: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "Erősítsd meg a jelszót" #: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "A jelszavakat nem egyeznek" #: ../../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: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 "" "A(z) %(user)s nem tagja a 'fuse' csoportnak.\n" " Futtasd le a 'sudo adduser %(user)s fuse' parancsot, majd jelentkezz ki és " "vissza.\n" "Nézd meg a 'man backintime'-ot további részletekért." #: ../../common/encfstools.py:211 msgid "" "encfs version 1.7.2 and before has a bug with option --reverse. Please " "update encfs" msgstr "" "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: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:204 #, python-format msgid "" "Hash collision occurred in hash_id %s. Incrementing global value " "hash_collision and try again." msgstr "" "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:259 #, python-format msgid "mountpoint %s not empty." msgstr "A %s csatolási pont foglalt" #: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "A csatolási folyamat túl sok időt vett igénybe" #: ../../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:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Most" #: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "HIBÁKKAL!" #: ../../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 "" "### Ezt a naplófájlt automatikus keresési mintával dekódolták\n" "### Ha néhány útvonal dekódolása elmaradt, a következővel tudod kézzel " "dekódolni:\n" #: ../../common/snapshots.py:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "MEGHIÚSULT" #: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "Engedélyek visszaállítása:" #: ../../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" "Your old snapshots can be moved according to this new format. OK?" msgstr "" "A Back in Time megváltoztatta a mentési formátumát.\n" "\n" "A régi pillanatképeket át tudjuk konvertálni ebbe az új formátumba. Rendben?" #: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" "\n" "The 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)" msgstr "" "A(z) %s profilokat nem találom.\n" "\n" "Az új mentési formátum lehetővé teszi különböző felhasználók és profilok " "tárolását ugyanazon a helyen. Szeretnéd mindkét profilt ugyanazon a helyen " "tárolni?\n" "\n" "(A program ettől még meg fogja tudni különböztetni őket)" #: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" msgstr "" "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:918 #, python-format msgid "" "%(snapshots_left)s\n" "of profile %(profile_id)s are not moved to their new location\n" "Do 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" "\n" "If not Back In Time will restore former settings for this profile, however " "cannot continue taking snapshots" msgstr "" "A(z) %(profile_id)s profil\n" "%(snapshots_left)s tartalma nem került át az új helyére.\n" "Folytassam?\n" "(A Back In Time továbbra is tud pillanatképeket készíteni, de a megmaradt " "pillanatképeket az automatikus eltávolítás figyelmen kívül fogja hagyni)\n" "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:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" "Back In Time cannot continue taking new snapshots.\n" "\n" "You can manually move the snapshots, \n" "if you are done restart Back In Time to proceed" msgstr "" "A %s profil korábbi beállításai visszaállítva.\n" "A Back in Time nem tud újabb pillanatképeket készíteni.\n" "\n" "Kézzel tudod mozgatni a pillanatképeket,\n" "ha befejezted, a folytatáshoz indítsd újra a Back in Time-ot" #: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" msgstr "" "A frissítés sikeres volt.\n" "\n" "A Back in Time folytatja a pillanatképek készítését az időzítés szerint." #: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" "\n" "If 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" "\n" "If you do not, you will be asked again next time you start Back In Time." msgstr "" "Biztos, hogy nem akarod áthelyezni a pillanatképeket?\n" "\n" "\n" "Ha mégis,ezt a kérdést nem kapod meg újra, és a Back In Time újra készít " "majd pillanatképeket, de az okos eltávolítás nem veszi majd figyelembe a " "régi pillanatképeidet!\n" "\n" "Ha nem, a Back In Time következő indításakor újra megkapod ezt a kérdést." #: ../../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:953 msgid "" "Back In Time still cannot continue taking new snapshots.\n" "Restart Back In Time to see the questions again" msgstr "" "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: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 "" "A pillanatképek könyvtára nem található.\n" "Ha egy eltávolítható adathordozón van, csatlakoztasd." #: ../../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:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "A %s pillanatkép készítése meghiúsult!!!" #: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "Véglegesítés" #: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "A(z) %s mappa nem hozható létre" #: ../../common/snapshots.py:1217 msgid "..." msgstr "..." #: ../../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:1340 #, python-format msgid "Compare with snapshot %s" msgstr "Összehasonlítás a következő pillanatképpel: %s" #: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "Hard-linkek készítése" #: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "Konfigurációs fájl mentése..." #: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "Hozzáférési jogosultságok mentése..." #: ../../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:1695 ../../common/snapshots.py:1728 #: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "Okos eltávolítás" #: ../../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: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:128 #, python-format msgid "Can't mount %s" msgstr "Nem tudom felcsatolni: %s" #: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "Nem tudom felcsatolni a(z) %s sshfs-t" #: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" "Nem tudtam feloldani az ssh privát kulcsát. Hibás jelszó vagy a cron nem éri " "el a jelszót." #: ../../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:278 #, python-format msgid "" "Password-less authentication for %(user)s@%(host)s failed. Look at 'man " "backintime' for further instructions." msgstr "" "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:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" "A(z) %(cipher)s nem sikerült a %(host)s esetében:\n" "%(err)s" #: ../../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:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" "A távoli útvonal létezik, de nem könyvtár:\n" " %s" #: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" "A távoli útvonal nem írható:\n" " %s" #: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" "A távoli útvonal nem futtatható:\n" " %s" #: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" "Nem tudom távoli útvonalat elkészíteni:\n" " %s" #: ../../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: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 "" "A(z) %(host)s távoli kiszolgáló nem támogatja a következőt: '%(command)s':\n" "%(err)s\n" "Nézd meg a 'man backintime'-ot további részletekért" #: ../../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 "" "A parancsok ellenőzése a(z) %(host)s kiszolgálón ismeretlen hibát okozott:\n" "%(err)s\n" "Nézd meg a 'man backintime'-ot további részletekért" #: ../../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." #: ../../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" #: ../../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ó" #: ../../qt4/app.py:122 msgid "Config File Help" msgstr "" #: ../../qt4/app.py:125 msgid "Website" msgstr "Honlap" #: ../../qt4/app.py:127 ../../qt4/app.py:982 msgid "Changelog" msgstr "" #: ../../qt4/app.py:129 msgid "FAQ" msgstr "GYIK" #: ../../qt4/app.py:131 msgid "Ask a question" msgstr "Kérdezz" #: ../../qt4/app.py:133 msgid "Report a bug" msgstr "Hiba jelentése" #: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "Névjegy" #: ../../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" #: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 #: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "Visszaállítás ide..." #: ../../qt4/app.py:194 msgid "Restore and delete new files" msgstr "" #: ../../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 "" #: ../../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 "" #: ../../qt4/app.py:277 msgid "Shortcuts" msgstr "Billentyűparancsok" #: ../../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" msgstr "" "Nem található a pillanatképek könyvtára.\n" "Ha egy eltávolítható lemezen van, csatlakoztasd és nyomd meg az OK-t" #: ../../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?" #: ../../qt4/app.py:667 ../../qt4/app.py:703 msgid "Working:" msgstr "Dolgozik:" #: ../../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:" #: ../../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" #: ../../qt4/app.py:778 msgid "Root" msgstr "Root" #: ../../qt4/app.py:779 msgid "Home" msgstr "Home" #: ../../qt4/app.py:794 msgid "Backup folders" msgstr "Biztonsági mentés mappái" #: ../../qt4/app.py:849 msgid "This is NOT a snapshot but a live view of your local files" msgstr "" #: ../../qt4/app.py:860 ../../qt4/app.py:1476 #, python-format msgid "Last check %s" msgstr "" #: ../../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?" #: ../../qt4/app.py:1004 #, python-format msgid "" "Backup local files before overwriting or\n" "removing with trailing '%(suffix)s'." msgstr "" #: ../../qt4/app.py:1010 msgid "" "Are you sure you want to remove all newer files in your original folder?" msgstr "" #: ../../qt4/app.py:1014 msgid "" "WARNING: deleting files in filesystem root could break your whole system!!!" msgstr "" #: ../../qt4/app.py:1016 msgid "Files to be restored:" msgstr "" #: ../../qt4/app.py:1031 msgid "Do you really want to restore this files(s):" msgstr "" #: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "Pillanatkép: %s" #: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "A %s időpontban észült pillanatkép megtekintése" #: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "A lemez jelenlegi tartalmának megtekintése" #: ../../qt4/app.py:1268 #, python-format msgid "Restore '%s'" msgstr "A(z) '%s' visszaállítása" #: ../../qt4/app.py:1269 #, python-format msgid "Restore '%s' to ..." msgstr "A(z) '%s' visszaállítása ide..." #: ../../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 "Szűrő:" #: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 msgid "All" msgstr "Mindegyik" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 #: ../../qt4/settingsdialog.py:657 msgid "Errors" msgstr "Hibák" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 msgid "Changes" msgstr "Változások" #: ../../qt4/logviewdialog.py:92 msgid "Informations" msgstr "Információk" #: ../../qt4/logviewdialog.py:101 msgid "[E] Error, [I] Information, [C] Change" msgstr "[E] hiba, [I] információ, [C] változtat" #: ../../qt4/logviewdialog.py:104 msgid "decode paths" msgstr "dekódolás útvonalai" #: ../../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 "Dolgozom..." #: ../../qt4/qt4tools.py:178 msgid "Today" msgstr "Ma" #: ../../qt4/qt4tools.py:183 msgid "Yesterday" msgstr "Tegnap" #: ../../qt4/qt4tools.py:188 msgid "This week" msgstr "Ezen a héten" #: ../../qt4/qt4tools.py:193 msgid "Last week" msgstr "Múlt héten" #: ../../qt4/restoredialog.py:75 msgid "Show full Log" msgstr "" #: ../../qt4/settingsdialog.py:68 msgid "Edit" msgstr "Szerkesztés" #: ../../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" #: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "Mód:" #: ../../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" #: ../../qt4/settingsdialog.py:145 msgid "Folder" msgstr "" #: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "Az SSH beállításai" #: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "Kiszolgáló:" #: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "Port:" #: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "Felhasználó:" #: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "Elérési út:" #: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "Cipher:" #: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "Privát kulcs" #: ../../qt4/settingsdialog.py:201 msgid "Key File" msgstr "" #: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 #: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "Jelszó" #: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "Jelszó mentése a kulcstartóba" #: ../../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)" #: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "Szakértői" #: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 msgid "Full snapshot path: " msgstr "" #: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "Ütemterv" #: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "Nap:" #: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "Hét napja:" #: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "Óra:" #: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "Óra:" #: ../../qt4/settingsdialog.py:339 msgid "" "Run Back In Time repeatedly. This is useful if the computer is not running " "regular." msgstr "" #: ../../qt4/settingsdialog.py:344 msgid "Every:" msgstr "" #: ../../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 "" "Futtassa a Back In Time-ot, amint csatolod a meghajtót (X naponta egyszer).\n" "Be fogja kérni a sudo jelszót." #: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Hozzáadás" #: ../../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" #: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Mappa hozzáadása" #: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Kihagyás" #: ../../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 "" "Figyelem: a helyettesítő karaktreket ('foo*', '[fF]oo', 'fo?') az " "'SSH encrypted' mód nem veszi figyelembe.\n" "Csak az elválasztó csillag megengedett ('foo/*', 'foo/**/bar')" #: ../../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:" #: ../../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" #: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "Régebbi, mint:" #: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "Ha a szabad hely kevesebb, mint:" #: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "Ha a szabad inode-ok száma kevesebb, mint" #: ../../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:" #: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "napból" #: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "Tarts meg napi egy pillanatképet a legutóbbi:" #: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "Tarts meg heti egy pillanatképet a legutóbbi:" #: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "hétből" #: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "Tarts meg havi egy pillanatképet a legutóbbi:" #: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "hónapból" #: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "Tarts meg évi egy pillanatképet a legutóbbi:" #: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "Ne távolítsa el a névvel ellátott pillanatképeket" #: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Beállítások" #: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Értesítések engedélyezése" #: ../../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" #: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" msgstr "A rendszer nem adja meg az energiaellátás állapotát" #: ../../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 "" #: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "Folytatás hibák esetén (megtartja a nem teljes pillanatképeket)" #: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "Checksum használata hibák felfedezéséhez" #: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "Teljes rsync-mód. Lassabb lehet, de:" #: ../../qt4/settingsdialog.py:634 msgid "" "- 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...)" #: ../../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)" #: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "Naplózás szintje:" #: ../../qt4/settingsdialog.py:656 msgid "None" msgstr "Egyik sem" #: ../../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!" #: ../../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 "" #: ../../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 "Az rsync sávszélesség-használatának korlátja: " #: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr " KB/sec" #: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "ACL-ek megtartása" #: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "Kiterjesztett jogosultságok (xattr) megtartása" #: ../../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)" #: ../../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 "Új profil" #: ../../qt4/settingsdialog.py:938 msgid "Rename profile" msgstr "Profil átnevezése" #: ../../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?" #: ../../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." #: ../../qt4/settingsdialog.py:1489 msgid "Exclude pattern" msgstr "Kihagyási minta" #: ../../qt4/settingsdialog.py:1502 msgid "Exclude file" msgstr "Kihagyandó fájl" #: ../../qt4/settingsdialog.py:1506 msgid "Exclude folder" msgstr "Kihagyandó mappa" #: ../../qt4/settingsdialog.py:1525 msgid "Include file" msgstr "Felveendő fájl" #: ../../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 "Felveendő mappa" #: ../../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?" #: ../../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 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: " #: ../../qt4/snapshotsdialog.py:123 msgid "Deep check (more accurate, but slow)" msgstr "Alapos ellenőrzés (pontosabb, de lassú)" #: ../../qt4/snapshotsdialog.py:144 msgid "Delete" msgstr "Töröl" #: ../../qt4/snapshotsdialog.py:148 msgid "Select All" msgstr "Minden kijelölése" #: ../../qt4/snapshotsdialog.py:161 msgid "Diff" msgstr "Különbség" #: ../../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 "" "Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" msgstr "" "Biztosan töröljem a \"%(file)s\" fájlt a \"%(snapshot_id)s pillanatképből?\n" #: ../../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" #: ../../qt4/snapshotsdialog.py:359 msgid "WARNING: This can not be revoked!" msgstr "Nem lehet visszavonni!" #: ../../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?" backintime-1.1.12/common/po/sv.po0000664000175000017500000011424012644767576016150 0ustar germargermar# Swedish translation for backintime # Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008 # This file is distributed under the same license as the backintime package. # FIRST AUTHOR , 2008. # msgid "" msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \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: 2016-01-11 17:52+0000\n" "X-Generator: Launchpad (build 17881)\n" #: ../../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:77 msgid "At every boot/reboot" msgstr "Vid varje start/omstart" #: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Var 5:e minut" #: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Var 10:e minut" #: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "Var 30:e minut" #: ../../common/config.py:81 msgid "Every hour" msgstr "Varje timme" #: ../../common/config.py:82 msgid "Every 2 hours" msgstr "Varannan timme" #: ../../common/config.py:83 msgid "Every 4 hours" msgstr "Var 4:e timme" #: ../../common/config.py:84 msgid "Every 6 hours" msgstr "Var 6:e timme" #: ../../common/config.py:85 msgid "Every 12 hours" msgstr "Var 12:e timme" #: ../../common/config.py:86 msgid "Custom Hours" msgstr "" #: ../../common/config.py:87 msgid "Every Day" msgstr "Varje dag" #: ../../common/config.py:88 msgid "Repeatedly (anacron)" msgstr "" #: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "" #: ../../common/config.py:90 msgid "Every Week" msgstr "Varje vecka" #: ../../common/config.py:91 msgid "Every Month" msgstr "Varje månad" #: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Dygn" #: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Vecka/veckor" #: ../../common/config.py:97 msgid "Year(s)" msgstr "År" #: ../../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:129 msgid "Local" msgstr "" #: ../../common/config.py:130 msgid "SSH" msgstr "" #: ../../common/config.py:130 ../../common/config.py:132 #: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "" #: ../../common/config.py:131 msgid "Local encrypted" msgstr "" #: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "Kryptering" #: ../../common/config.py:132 msgid "SSH encrypted" msgstr "" #: ../../common/config.py:135 msgid "Default" msgstr "" #: ../../common/config.py:136 msgid "AES128-CTR" msgstr "" #: ../../common/config.py:137 msgid "AES192-CTR" msgstr "" #: ../../common/config.py:138 msgid "AES256-CTR" msgstr "" #: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "" #: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "" #: ../../common/config.py:141 msgid "AES128-CBC" msgstr "" #: ../../common/config.py:142 msgid "3DES-CBC" msgstr "" #: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "" #: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "" #: ../../common/config.py:145 msgid "AES192-CBC" msgstr "" #: ../../common/config.py:146 msgid "AES256-CBC" msgstr "" #: ../../common/config.py:147 msgid "ARCFOUR" msgstr "" #: ../../common/config.py:153 msgid "Main profile" msgstr "Huvudprofil" #: ../../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:289 msgid "Snapshots folder is not valid !" msgstr "Mappen för ögonblicksbilder är ogiltig!" #: ../../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:307 msgid "You can't include backup folder !" msgstr "Du kan inte inkludera mappen för säkerhetskopior!" #: ../../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:371 #, python-format msgid "%s is not a folder !" msgstr "%s är inte en mapp!" #: ../../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 "" "Kan inte skriva till: %s\n" "Är du säker på att du har skrivrättighet?" #: ../../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 "Avancerade alternativ" #: ../../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" "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:1411 msgid "Failed to write new crontab." msgstr "" #: ../../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/config.py:1517 #, python-format msgid "Schedule udev doesn't work with mode %s" msgstr "" #: ../../common/config.py:1526 #, python-format msgid "Couldn't find UUID for \"%s\"" msgstr "" #: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" "\n" "%(error)s" msgstr "" #: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "" #: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "" #: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" "\n" "Skapa en ny krypterad mapp?" #: ../../common/encfstools.py:171 msgid "Cancel" msgstr "Avbryt" #: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "" #: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "" #: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" #: ../../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 "" #: ../../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:512 ../../common/snapshots.py:1131 #: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "Ta ögonblicksbild" #: ../../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:259 #, python-format msgid "mountpoint %s not empty." msgstr "" #: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" #: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" #: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Nu" #: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "MED FEL !" #: ../../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:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "MISSLYCKADES" #: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "" #: ../../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" "Your old snapshots can be moved according to this new format. OK?" msgstr "" "Back In Time ändrade dess format för säkerhetskopiering.\n" "\n" "Dina gamla ögonblicksbilder kan flyttas till detta ny format. OK?" #: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" "\n" "The 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)" msgstr "" "%s profiler funna. \n" "\n" "Det nya formatet för säkerhetskopior stöder sparandet av olika användare och " "profiler på samma plats. Vill du ha samma plats för båda profiler? \n" "\n" "(Programmet kommer fortfarande att kunna skilja mellan dem)" #: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" msgstr "" "Inga profiler funna. Måste uppdatera till profiler först, vänligen starta om " "Back In Time" #: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" "of profile %(profile_id)s are not moved to their new location\n" "Do 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" "\n" "If not Back In Time will restore former settings for this profile, however " "cannot continue taking snapshots" msgstr "" #: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" "Back In Time cannot continue taking new snapshots.\n" "\n" "You can manually move the snapshots, \n" "if you are done restart Back In Time to proceed" msgstr "" "Tidigare inställningar för profil %s är återställda.\n" "Back In Time kan inte fortsätta skapa nya ögonblicksbilder.\n" "\n" "Du kan flytta ögonblicksbilderna manuellt, \n" "om du är klar starta om Back In Time för att fortsätta" #: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" msgstr "" "Uppdatering lyckades!\n" "\n" "Back In Time kommer fortsätta ta ögonblicksbilder igen som schemalagt" #: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" "\n" "If 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" "\n" "If you do not, you will be asked again next time you start Back In Time." msgstr "" "Är du säker på att du inte vill flytta dina gamla ögonblicksbilder?\n" "\n" "\n" "Om du är det kommer du inte få dessa frågor igen nästa gång, Back In Time " "kommer fortsätta skapa ögonblicksbilder igen men smart-borttagning kan inte " "beakta dina gamla ögonblicksbilder fortsättningsvis!\n" "\n" "Om du inte är det kommer du bli tillfrågad igen nästa gång du startar Back " "In Time." #: ../../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: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 kan fortfarande inte fortsätta ta nya ögonblicksbilder.\n" "Starta om Back In Time för att se frågorna igen" #: ../../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 "" "Kan inte hitta mappen för ögonblicksbilder.\n" "Anslut enheten om den finns på en flyttbar enhet." #: ../../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:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "Misslyckades att skapa ögonblicksbild %s !!!" #: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "Färdigställer" #: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "Kan inte skapa mapp: %s" #: ../../common/snapshots.py:1217 msgid "..." msgstr "..." #: ../../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:1340 #, python-format msgid "Compare with snapshot %s" msgstr "Jämför med ögonblicksbilden %s" #: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "Skapa hårda länkar" #: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "Spara konfigurationsfil ..." #: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "Spara rättigheter ..." #: ../../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:1695 ../../common/snapshots.py:1728 #: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "Smart borttagning" #: ../../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:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" #: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "" #: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "" #: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" #: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" #: ../../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:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" #: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" #: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" #: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" #: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" #: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" #: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" #: ../../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 "" #: ../../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 "" #: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "" #: ../../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" #: ../../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" #: ../../qt4/app.py:122 msgid "Config File Help" msgstr "" #: ../../qt4/app.py:125 msgid "Website" msgstr "Hemsida" #: ../../qt4/app.py:127 ../../qt4/app.py:982 msgid "Changelog" msgstr "" #: ../../qt4/app.py:129 msgid "FAQ" msgstr "" #: ../../qt4/app.py:131 msgid "Ask a question" msgstr "" #: ../../qt4/app.py:133 msgid "Report a bug" msgstr "" #: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "Om" #: ../../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" #: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 #: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "" #: ../../qt4/app.py:194 msgid "Restore and delete new files" msgstr "" #: ../../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 "" #: ../../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 "" #: ../../qt4/app.py:277 msgid "Shortcuts" msgstr "Genvägar" #: ../../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" msgstr "" "Kan inte hitta mappen för ögonblicksbilder.\n" "Anslut enheten om den finns på en flyttbar enhet och tryck på OK." #: ../../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 "Arbetar:" #: ../../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:" #: ../../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" #: ../../qt4/app.py:778 msgid "Root" msgstr "Rot" #: ../../qt4/app.py:779 msgid "Home" msgstr "Hem" #: ../../qt4/app.py:794 msgid "Backup folders" msgstr "Mappar för säkerhetskopior" #: ../../qt4/app.py:849 msgid "This is NOT a snapshot but a live view of your local files" msgstr "" #: ../../qt4/app.py:860 ../../qt4/app.py:1476 #, python-format msgid "Last check %s" msgstr "" #: ../../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" #: ../../qt4/app.py:1004 #, python-format msgid "" "Backup local files before overwriting or\n" "removing with trailing '%(suffix)s'." msgstr "" #: ../../qt4/app.py:1010 msgid "" "Are you sure you want to remove all newer files in your original folder?" msgstr "" #: ../../qt4/app.py:1014 msgid "" "WARNING: deleting files in filesystem root could break your whole system!!!" msgstr "" #: ../../qt4/app.py:1016 msgid "Files to be restored:" msgstr "" #: ../../qt4/app.py:1031 msgid "Do you really want to restore this files(s):" msgstr "" #: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "Ögonblicksbild: %s" #: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "Visa ögonblicksbilden skapad %s" #: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "Visa det aktuella diskinnehållet" #: ../../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" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 #: ../../qt4/settingsdialog.py:657 msgid "Errors" msgstr "Fel" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 msgid "Changes" msgstr "Ändringar" #: ../../qt4/logviewdialog.py:92 msgid "Informations" msgstr "Information" #: ../../qt4/logviewdialog.py:101 msgid "[E] Error, [I] Information, [C] Change" msgstr "" #: ../../qt4/logviewdialog.py:104 msgid "decode paths" msgstr "" #: ../../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 "Arbetar..." #: ../../qt4/qt4tools.py:178 msgid "Today" msgstr "Idag" #: ../../qt4/qt4tools.py:183 msgid "Yesterday" msgstr "Igår" #: ../../qt4/qt4tools.py:188 msgid "This week" msgstr "Denna vecka" #: ../../qt4/qt4tools.py:193 msgid "Last week" msgstr "Förra veckan" #: ../../qt4/restoredialog.py:75 msgid "Show full Log" msgstr "" #: ../../qt4/settingsdialog.py:68 msgid "Edit" msgstr "Redigera" #: ../../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 "Allmänt" #: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "" #: ../../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" #: ../../qt4/settingsdialog.py:145 msgid "Folder" msgstr "" #: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" #: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "Värd:" #: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "" #: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "Användare:" #: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" #: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" #: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "" #: ../../qt4/settingsdialog.py:201 msgid "Key File" msgstr "" #: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 #: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "" #: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" #: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" #: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "Advancerat" #: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 msgid "Full snapshot path: " msgstr "" #: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "Schema" #: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "" #: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "" #: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "Timme:" #: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "" #: ../../qt4/settingsdialog.py:339 msgid "" "Run Back In Time repeatedly. This is useful if the computer is not running " "regular." msgstr "" #: ../../qt4/settingsdialog.py:344 msgid "Every:" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Inkludera" #: ../../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" #: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Lägg till mapp" #: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Exkludera" #: ../../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 "" #: ../../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:" #: ../../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" #: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "Äldre än:" #: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "Om ledigt utrymme är mindre än:" #: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" #: ../../qt4/settingsdialog.py:551 msgid "Run in background on remote Host." msgstr "" #: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "" #: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "" #: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "" #: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "" #: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "" #: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "" #: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "" #: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "" #: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "Ta inte bort namngivna ögonblicksbilder" #: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Alternativ" #: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Aktivera notifieringar" #: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "Deaktivera ögonblicksbilder vid batteridrift" #: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" msgstr "Strömstatus inte tillgängligt från systemet" #: ../../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 "" #: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "Fortsätt vid fel (behåll icke kompletta ögonblicksbilder)" #: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "Använd checksum för att detektera ändringar" #: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "" #: ../../qt4/settingsdialog.py:634 msgid "" "- snapshots are not read-only\n" "- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "Loggnivå:" #: ../../qt4/settingsdialog.py:656 msgid "None" msgstr "" #: ../../qt4/settingsdialog.py:658 msgid "Changes & Errors" msgstr "Ändringar & Fel" #: ../../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 !" #: ../../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 "" #: ../../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 "" #: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" #: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "Behåll ACL" #: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "Behåll utökade attribut (xattr)" #: ../../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)" #: ../../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 "Ny profil" #: ../../qt4/settingsdialog.py:938 msgid "Rename profile" msgstr "Byt namn på profil" #: ../../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\" ?" #: ../../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 "Exkludera mönster" #: ../../qt4/settingsdialog.py:1502 msgid "Exclude file" msgstr "Exkludera fil" #: ../../qt4/settingsdialog.py:1506 msgid "Exclude folder" msgstr "Exkludera mapp" #: ../../qt4/settingsdialog.py:1525 msgid "Include file" msgstr "Inkludera fil" #: ../../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 "Inkludera mapp" #: ../../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?" #: ../../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 "Jämförelsealternativ" #: ../../qt4/snapshotsdialog.py:56 msgid "Command:" msgstr "Kommando:" #: ../../qt4/snapshotsdialog.py:60 msgid "Parameters:" msgstr "Parametrar:" #: ../../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 "" #: ../../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" #: ../../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 "" "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 "" backintime-1.1.12/common/po/ko.po0000664000175000017500000011301012644767576016123 0ustar germargermar# Korean translation for backintime # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the backintime package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \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" "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: 2016-01-11 17:52+0000\n" "X-Generator: Launchpad (build 17881)\n" #: ../../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:77 msgid "At every boot/reboot" msgstr "부팅/재부팅 할 때 마다" #: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "매 5분" #: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "매 10분" #: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "30분마다" #: ../../common/config.py:81 msgid "Every hour" msgstr "1시간마다" #: ../../common/config.py:82 msgid "Every 2 hours" msgstr "2시간마다" #: ../../common/config.py:83 msgid "Every 4 hours" msgstr "4시간마다" #: ../../common/config.py:84 msgid "Every 6 hours" msgstr "6시간마다" #: ../../common/config.py:85 msgid "Every 12 hours" msgstr "12시간마다" #: ../../common/config.py:86 msgid "Custom Hours" msgstr "" #: ../../common/config.py:87 msgid "Every Day" msgstr "매일" #: ../../common/config.py:88 msgid "Repeatedly (anacron)" msgstr "" #: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "" #: ../../common/config.py:90 msgid "Every Week" msgstr "매주" #: ../../common/config.py:91 msgid "Every Month" msgstr "매월" #: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "일" #: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "주" #: ../../common/config.py:97 msgid "Year(s)" msgstr "년" #: ../../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:129 msgid "Local" msgstr "" #: ../../common/config.py:130 msgid "SSH" msgstr "SSH" #: ../../common/config.py:130 ../../common/config.py:132 #: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "SSH 개인키(비공개키)" #: ../../common/config.py:131 msgid "Local encrypted" msgstr "" #: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "암호화" #: ../../common/config.py:132 msgid "SSH encrypted" msgstr "" #: ../../common/config.py:135 msgid "Default" msgstr "기본값" #: ../../common/config.py:136 msgid "AES128-CTR" msgstr "AES128-CTR" #: ../../common/config.py:137 msgid "AES192-CTR" msgstr "AES192-CTR" #: ../../common/config.py:138 msgid "AES256-CTR" msgstr "AES256-CTR" #: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "ARCFOUR256" #: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "ARCFOUR128" #: ../../common/config.py:141 msgid "AES128-CBC" msgstr "AES128-CBC" #: ../../common/config.py:142 msgid "3DES-CBC" msgstr "3DES-CBC" #: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "Blowfish-CBC" #: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "Cast128-CBC" #: ../../common/config.py:145 msgid "AES192-CBC" msgstr "AES192-CBC" #: ../../common/config.py:146 msgid "AES256-CBC" msgstr "AES256-CBC" #: ../../common/config.py:147 msgid "ARCFOUR" msgstr "ARCFOUR" #: ../../common/config.py:153 msgid "Main profile" msgstr "메인 프로파일" #: ../../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:289 msgid "Snapshots folder is not valid !" msgstr "스냅샷 폴더가 유효하지 않습니다." #: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "최소한 하나의 백업할 폴더를 선택해야 합니다." #: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "백업 폴더를 포함할 수는 없습니다." #: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "백업 하위폴더를 포함할 수는 없습니다." #: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s는 폴더가 아닙니다." #: ../../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 "" "%s에 쓰기를 할 수 없습니다.\n" "쓰기 권한이 있는지를 확인하세요." #: ../../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" "If not you should disable all automatic backups." msgstr "" "crontab를 찾을 수 없습니다.\n" "cron이 설치되어 있습니까?\n" "설치되지 않았다면 모든 자동 백업을 실행불가 상태로 해야 합니다." #: ../../common/config.py:1411 msgid "Failed to write new crontab." msgstr "" #: ../../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/config.py:1517 #, python-format msgid "Schedule udev doesn't work with mode %s" msgstr "" #: ../../common/config.py:1526 #, python-format msgid "Couldn't find UUID for \"%s\"" msgstr "" #: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" "\n" "%(error)s" msgstr "" #: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "" #: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "" #: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" #: ../../common/encfstools.py:171 msgid "Cancel" msgstr "취소" #: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "비밀번호 다시 입력" #: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "비밀번호 불일치" #: ../../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: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 "" #: ../../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:512 ../../common/snapshots.py:1131 #: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "스냅샷 찍기" #: ../../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:259 #, python-format msgid "mountpoint %s not empty." msgstr "마운트 위치(폴더) %s가 비어 있지 않습니다." #: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" #: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" #: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "현재" #: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "" #: ../../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:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "실패" #: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "" #: ../../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:868 #, python-format msgid "" "%s profiles found. \n" "\n" "The 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)" msgstr "" "%s 개의 프로파일을 찾았습니다. \n" "\n" "새로운 백업 형식은 다른 사용자 및 프로파일을 동일한 위치에 저장할 수 있도록 지원됩니다. 두 프로파일에 대해 동일한 위치를 " "사용하시겠습니까? \n" "(프로그램 내에서는 여전히 구별됩니다.)" #: ../../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:918 #, python-format msgid "" "%(snapshots_left)s\n" "of profile %(profile_id)s are not moved to their new location\n" "Do 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" "\n" "If not Back In Time will restore former settings for this profile, however " "cannot continue taking snapshots" msgstr "" #: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" "Back In Time cannot continue taking new snapshots.\n" "\n" "You can manually move the snapshots, \n" "if you are done restart Back In Time to proceed" msgstr "" #: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" msgstr "" #: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" "\n" "If 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" "\n" "If you do not, you will be asked again next time you start Back In Time." msgstr "" #: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "" #: ../../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: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:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "%s초 기다리는 중" #: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "%s 스냅샷을 가지지 못했습니다 !!!" #: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "마치는 중" #: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "폴더(%s)를 생성할 수 없음" #: ../../common/snapshots.py:1217 msgid "..." msgstr "..." #: ../../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:1340 #, python-format msgid "Compare with snapshot %s" msgstr "스냅샷 %s와 비교" #: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "하드 링크를 생성합니다다" #: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "설정 파일 저장 ..." #: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "권한을 저장 ..." #: ../../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:1695 ../../common/snapshots.py:1728 #: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "똑똑한 제거" #: ../../common/snapshots.py:1704 msgid "Remove old snapshots" msgstr "오래된 스냅샷을 제거합니다." #: ../../common/snapshots.py:1733 msgid "Try to keep min free space" msgstr "최소 여유 공간을 유지합니다." #: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" #: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "" #: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "" #: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" #: ../../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:278 #, python-format msgid "" "Password-less authentication for %(user)s@%(host)s failed. Look at 'man " "backintime' for further instructions." msgstr "" #: ../../common/sshtools.py:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" #: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" #: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" "원격 패스가 있지만 디텍토리가 아닙니다.\n" " %s" #: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" "다음 원격 패스에 쓸 수 없습니다.\n" " %s" #: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" "다음 원격 패스를 실행 할 수 없습니다.\n" " %s" #: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" "다음 원격 패스를 만들 수 없습니다.\n" " %s" #: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "호스트가 다운 되었거나 잘못된 주소입니다. %s ping 실패" #: ../../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 "" #: ../../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 "" #: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "원격호스트 %s가 하드링크를 지원하지 않습니다." #: ../../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 "끝내기" #: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 msgid "Help" msgstr "도움말" #: ../../qt4/app.py:122 msgid "Config File Help" msgstr "" #: ../../qt4/app.py:125 msgid "Website" msgstr "웹사이트" #: ../../qt4/app.py:127 ../../qt4/app.py:982 msgid "Changelog" msgstr "" #: ../../qt4/app.py:129 msgid "FAQ" msgstr "" #: ../../qt4/app.py:131 msgid "Ask a question" msgstr "" #: ../../qt4/app.py:133 msgid "Report a bug" msgstr "" #: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "정보" #: ../../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 "복원" #: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 #: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "다음 위치에 복원" #: ../../qt4/app.py:194 msgid "Restore and delete new files" msgstr "" #: ../../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 "" #: ../../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 "바로 가기" #: ../../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" msgstr "" "스냅샷 폴더를 찾을 수 없습니다.\n" "만일 이동식 드라이브에 저장되었다면 연결 하신 후에 확인을 누르십시오." #: ../../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 "진행중:" #: ../../qt4/app.py:695 msgid "Done, no backup needed" msgstr "완료. 백업이 필요하지 않습니다." #: ../../qt4/app.py:707 msgid "Error:" msgstr "오류:" #: ../../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 "전역" #: ../../qt4/app.py:778 msgid "Root" msgstr "루트" #: ../../qt4/app.py:779 msgid "Home" msgstr "홈" #: ../../qt4/app.py:794 msgid "Backup folders" msgstr "백업 폴더" #: ../../qt4/app.py:849 msgid "This is NOT a snapshot but a live view of your local files" msgstr "" #: ../../qt4/app.py:860 ../../qt4/app.py:1476 #, python-format msgid "Last check %s" msgstr "" #: ../../qt4/app.py:928 #, python-format msgid "" "Are you sure you want to remove the snapshot:\n" "%s" msgstr "" "정말 스냅샷을 제거하시겠습니까?\n" "%s" #: ../../qt4/app.py:1004 #, python-format msgid "" "Backup local files before overwriting or\n" "removing with trailing '%(suffix)s'." msgstr "" #: ../../qt4/app.py:1010 msgid "" "Are you sure you want to remove all newer files in your original folder?" msgstr "" #: ../../qt4/app.py:1014 msgid "" "WARNING: deleting files in filesystem root could break your whole system!!!" msgstr "" #: ../../qt4/app.py:1016 msgid "Files to be restored:" msgstr "" #: ../../qt4/app.py:1031 msgid "Do you really want to restore this files(s):" msgstr "" #: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "스냅샷: %s" #: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "%s에 만들어진 스냅샷을 봅니다." #: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "현재 디스크의 내용을 봅니다." #: ../../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 "" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 #: ../../qt4/settingsdialog.py:657 msgid "Errors" msgstr "" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 msgid "Changes" msgstr "" #: ../../qt4/logviewdialog.py:92 msgid "Informations" msgstr "" #: ../../qt4/logviewdialog.py:101 msgid "[E] Error, [I] Information, [C] Change" msgstr "" #: ../../qt4/logviewdialog.py:104 msgid "decode paths" msgstr "" #: ../../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 "동작 중..." #: ../../qt4/qt4tools.py:178 msgid "Today" msgstr "오늘" #: ../../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 "" #: ../../qt4/settingsdialog.py:68 msgid "Edit" msgstr "편집" #: ../../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 "일반" #: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "" #: ../../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 "스냅샷을 저장할 위치" #: ../../qt4/settingsdialog.py:145 msgid "Folder" msgstr "" #: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "SSH 설정" #: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "" #: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "" #: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "" #: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" #: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" #: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "" #: ../../qt4/settingsdialog.py:201 msgid "Key File" msgstr "" #: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 #: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "" #: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" #: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" #: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "고급 설정" #: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 msgid "Full snapshot path: " msgstr "" #: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "일정" #: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "" #: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "" #: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "시간:" #: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "" #: ../../qt4/settingsdialog.py:339 msgid "" "Run Back In Time repeatedly. This is useful if the computer is not running " "regular." msgstr "" #: ../../qt4/settingsdialog.py:344 msgid "Every:" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "포함" #: ../../qt4/settingsdialog.py:381 msgid "Include files and folders" msgstr "" #: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "파일 추가" #: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "폴더 추가" #: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "제외" #: ../../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 "" #: ../../qt4/settingsdialog.py:425 msgid "Exclude patterns, files or folders" msgstr "" #: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "" #: ../../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 "자동 제거" #: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "날짜가 다음 보다 오래된 경우:" #: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "여유 공간이 다음보다 작은 경우:" #: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" #: ../../qt4/settingsdialog.py:551 msgid "Run in background on remote Host." msgstr "" #: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "" #: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "" #: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "" #: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "" #: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "" #: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "" #: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "" #: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "" #: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "이름을 붙인 스냅샷은 제거하지 않습니다." #: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "선택 사항" #: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "알림 사용하기" #: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "배터리 사용중에는 스냅샷을 찍을 수 없습니다." #: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" 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 "" #: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "" #: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "" #: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "" #: ../../qt4/settingsdialog.py:634 msgid "" "- snapshots are not read-only\n" "- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "기록 단계:" #: ../../qt4/settingsdialog.py:656 msgid "None" msgstr "" #: ../../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 "이 옵션들이 무엇을 의미하는지 정확하게 알 경우에만 바꾸시오!" #: ../../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 "" #: ../../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 "" #: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" #: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "" #: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "" #: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute 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 "" #: ../../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 "차이점 옵션" #: ../../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 "" #: ../../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 "삭제" #: ../../qt4/snapshotsdialog.py:148 msgid "Select All" msgstr "전체 선택" #: ../../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 "" "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 "" backintime-1.1.12/common/po/lt.po0000664000175000017500000010655712644767576016153 0ustar germargermar# Lithuanian translation for backintime # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the backintime package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \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" "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%100<10 || n%100>=20) ? 1 : 2;\n" "X-Launchpad-Export-Date: 2016-01-11 17:52+0000\n" "X-Generator: Launchpad (build 17881)\n" #: ../../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:77 msgid "At every boot/reboot" msgstr "" #: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Kas 5 minutės" #: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Kas 10 minučių" #: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "" #: ../../common/config.py:81 msgid "Every hour" msgstr "" #: ../../common/config.py:82 msgid "Every 2 hours" msgstr "" #: ../../common/config.py:83 msgid "Every 4 hours" msgstr "" #: ../../common/config.py:84 msgid "Every 6 hours" msgstr "" #: ../../common/config.py:85 msgid "Every 12 hours" msgstr "" #: ../../common/config.py:86 msgid "Custom Hours" msgstr "" #: ../../common/config.py:87 msgid "Every Day" msgstr "Kasdien" #: ../../common/config.py:88 msgid "Repeatedly (anacron)" msgstr "" #: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "" #: ../../common/config.py:90 msgid "Every Week" msgstr "Kas savaitę" #: ../../common/config.py:91 msgid "Every Month" msgstr "Kas mėnesį" #: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Diena (os/ų)" #: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Savaitė (ės/čių)" #: ../../common/config.py:97 msgid "Year(s)" msgstr "Metai (-ų)" #: ../../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:129 msgid "Local" msgstr "" #: ../../common/config.py:130 msgid "SSH" msgstr "" #: ../../common/config.py:130 ../../common/config.py:132 #: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "" #: ../../common/config.py:131 msgid "Local encrypted" msgstr "" #: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "" #: ../../common/config.py:132 msgid "SSH encrypted" msgstr "" #: ../../common/config.py:135 msgid "Default" msgstr "" #: ../../common/config.py:136 msgid "AES128-CTR" msgstr "" #: ../../common/config.py:137 msgid "AES192-CTR" msgstr "" #: ../../common/config.py:138 msgid "AES256-CTR" msgstr "" #: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "" #: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "" #: ../../common/config.py:141 msgid "AES128-CBC" msgstr "" #: ../../common/config.py:142 msgid "3DES-CBC" msgstr "" #: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "" #: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "" #: ../../common/config.py:145 msgid "AES192-CBC" msgstr "" #: ../../common/config.py:146 msgid "AES256-CBC" msgstr "" #: ../../common/config.py:147 msgid "ARCFOUR" msgstr "" #: ../../common/config.py:153 msgid "Main profile" msgstr "" #: ../../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:289 msgid "Snapshots folder is not valid !" msgstr "" #: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "" #: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "Negalima įtraukti atsarginėms kopijoms skirto aplanko!" #: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "Negalima įtraukti atsarginėms kopijoms skirto poaplankio!" #: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s nėra aplankas!" #: ../../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: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 "Parinktys ekspertams" #: ../../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" "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:1505 #, python-format msgid "" "Could not install Udev rule for profile %(profile_id)s. DBus Service " "'%(dbus_interface)s' wasn't available" msgstr "" #: ../../common/config.py:1517 #, python-format msgid "Schedule udev doesn't work with mode %s" msgstr "" #: ../../common/config.py:1526 #, python-format msgid "Couldn't find UUID for \"%s\"" msgstr "" #: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" "\n" "%(error)s" msgstr "" #: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "" #: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "" #: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" #: ../../common/encfstools.py:171 msgid "Cancel" msgstr "" #: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "" #: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "" #: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" #: ../../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 "" #: ../../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:512 ../../common/snapshots.py:1131 #: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "Priimti momentinę kopiją" #: ../../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:259 #, python-format msgid "mountpoint %s not empty." msgstr "" #: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" #: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" #: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Dabar" #: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "" #: ../../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:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "" #: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "" #: ../../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:868 #, python-format msgid "" "%s profiles found. \n" "\n" "The 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)" msgstr "" #: ../../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:918 #, python-format msgid "" "%(snapshots_left)s\n" "of profile %(profile_id)s are not moved to their new location\n" "Do 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" "\n" "If not Back In Time will restore former settings for this profile, however " "cannot continue taking snapshots" msgstr "" #: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" "Back In Time cannot continue taking new snapshots.\n" "\n" "You can manually move the snapshots, \n" "if you are done restart Back In Time to proceed" msgstr "" #: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" msgstr "" #: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" "\n" "If 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" "\n" "If you do not, you will be asked again next time you start Back In Time." msgstr "" #: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "" #: ../../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: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:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "Laukti %s sekundes." msgstr[1] "Laukti %s sekundžių." msgstr[2] "Laukti %s sekundžių." #: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "" #: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "Baigiu" #: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "Nepavyko sukurti aplanko: %s" #: ../../common/snapshots.py:1217 msgid "..." msgstr "..." #: ../../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:1340 #, python-format msgid "Compare with snapshot %s" msgstr "palyginti su momentine kopija %s" #: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "Kurti hard-links" #: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "Išsaugoti konfigūracijos failą..." #: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "" #: ../../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:1695 ../../common/snapshots.py:1728 #: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "Sumanus pašalinimas" #: ../../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:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" #: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "" #: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "" #: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" #: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" #: ../../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:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" #: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" #: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" #: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" #: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" #: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" #: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" #: ../../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 "" #: ../../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 "" #: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "" #: ../../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" #: ../../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" #: ../../qt4/app.py:122 msgid "Config File Help" msgstr "" #: ../../qt4/app.py:125 msgid "Website" msgstr "Interneto svetainė" #: ../../qt4/app.py:127 ../../qt4/app.py:982 msgid "Changelog" msgstr "" #: ../../qt4/app.py:129 msgid "FAQ" msgstr "" #: ../../qt4/app.py:131 msgid "Ask a question" msgstr "" #: ../../qt4/app.py:133 msgid "Report a bug" msgstr "" #: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "Apie" #: ../../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" #: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 #: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "" #: ../../qt4/app.py:194 msgid "Restore and delete new files" msgstr "" #: ../../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 "" #: ../../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" #: ../../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" 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 "" #: ../../qt4/app.py:667 ../../qt4/app.py:703 msgid "Working:" msgstr "Dirbu:" #: ../../qt4/app.py:695 msgid "Done, no backup needed" msgstr "Atlikta, atsarginė kopija nebūtina" #: ../../qt4/app.py:707 msgid "Error:" msgstr "Klaida:" #: ../../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" #: ../../qt4/app.py:778 msgid "Root" msgstr "Root" #: ../../qt4/app.py:779 msgid "Home" msgstr "Pradžia" #: ../../qt4/app.py:794 msgid "Backup folders" msgstr "Atsarginių kopijų aplankai" #: ../../qt4/app.py:849 msgid "This is NOT a snapshot but a live view of your local files" msgstr "" #: ../../qt4/app.py:860 ../../qt4/app.py:1476 #, python-format msgid "Last check %s" msgstr "" #: ../../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" #: ../../qt4/app.py:1004 #, python-format msgid "" "Backup local files before overwriting or\n" "removing with trailing '%(suffix)s'." msgstr "" #: ../../qt4/app.py:1010 msgid "" "Are you sure you want to remove all newer files in your original folder?" msgstr "" #: ../../qt4/app.py:1014 msgid "" "WARNING: deleting files in filesystem root could break your whole system!!!" msgstr "" #: ../../qt4/app.py:1016 msgid "Files to be restored:" msgstr "" #: ../../qt4/app.py:1031 msgid "Do you really want to restore this files(s):" msgstr "" #: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "Momentinė kopija: %s" #: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "Žiūrėti momentinę kopiją, padarytą %s" #: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "Žiūrėti esamo disko turinį" #: ../../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 "Filtras:" #: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 msgid "All" msgstr "" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 #: ../../qt4/settingsdialog.py:657 msgid "Errors" msgstr "Kaidos" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 msgid "Changes" msgstr "Pakeitimai" #: ../../qt4/logviewdialog.py:92 msgid "Informations" msgstr "Informacija" #: ../../qt4/logviewdialog.py:101 msgid "[E] Error, [I] Information, [C] Change" msgstr "" #: ../../qt4/logviewdialog.py:104 msgid "decode paths" msgstr "" #: ../../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 "Dirbama..." #: ../../qt4/qt4tools.py:178 msgid "Today" msgstr "Šiandien" #: ../../qt4/qt4tools.py:183 msgid "Yesterday" msgstr "Vakar" #: ../../qt4/qt4tools.py:188 msgid "This week" msgstr "Šią savaitę" #: ../../qt4/qt4tools.py:193 msgid "Last week" msgstr "Praeitą savaitę" #: ../../qt4/restoredialog.py:75 msgid "Show full Log" msgstr "" #: ../../qt4/settingsdialog.py:68 msgid "Edit" msgstr "Keisti" #: ../../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 "Bendri" #: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "" #: ../../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ą" #: ../../qt4/settingsdialog.py:145 msgid "Folder" msgstr "" #: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" #: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "" #: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "" #: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "Naudotojas:" #: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" #: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" #: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "" #: ../../qt4/settingsdialog.py:201 msgid "Key File" msgstr "" #: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 #: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "" #: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" #: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" #: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "" #: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 msgid "Full snapshot path: " msgstr "" #: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "Tvarkaraštis" #: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "" #: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "" #: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "Valanda:" #: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "" #: ../../qt4/settingsdialog.py:339 msgid "" "Run Back In Time repeatedly. This is useful if the computer is not running " "regular." msgstr "" #: ../../qt4/settingsdialog.py:344 msgid "Every:" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Įtraukti" #: ../../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ą" #: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Pridėti aplanką" #: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Išskirti" #: ../../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 "" #: ../../qt4/settingsdialog.py:425 msgid "Exclude patterns, files or folders" msgstr "" #: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "" #: ../../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" #: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "Senesni nei:" #: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "Jei laisvos vietos mažiau nei:" #: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" #: ../../qt4/settingsdialog.py:551 msgid "Run in background on remote Host." msgstr "" #: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "" #: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "" #: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "" #: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "" #: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "" #: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "" #: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "" #: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "" #: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "Nešalinti momentinių kopijų, turinčių pavadinimus" #: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Parinktys" #: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Įgalinti pranešimus" #: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "" #: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" 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 "" #: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "" #: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "Pasikeitimų aptikimui naudoti kontrolines sumas" #: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "" #: ../../qt4/settingsdialog.py:634 msgid "" "- snapshots are not read-only\n" "- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "" #: ../../qt4/settingsdialog.py:656 msgid "None" msgstr "" #: ../../qt4/settingsdialog.py:658 msgid "Changes & Errors" msgstr "Pakeitimai ir klaidos" #: ../../qt4/settingsdialog.py:674 msgid "Change these options only if you really know what you are doing !" 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 "" #: ../../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 "" #: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" #: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "" #: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "" #: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute 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 "" #: ../../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 "Išskirti šabloną" #: ../../qt4/settingsdialog.py:1502 msgid "Exclude file" msgstr "Išskirti failą" #: ../../qt4/settingsdialog.py:1506 msgid "Exclude folder" msgstr "Išskirti aplanką" #: ../../qt4/settingsdialog.py:1525 msgid "Include file" msgstr "Įtraukti 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 "" #: ../../qt4/settingsdialog.py:1545 msgid "Include folder" msgstr "Įtraukti aplanką" #: ../../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 "Pasikeitimų parinktys" #: ../../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 "" #: ../../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 "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 "" "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 "" backintime-1.1.12/common/po/pt_BR.po0000664000175000017500000012436012644767576016532 0ustar germargermar# Brazilian Portuguese translation for backintime # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the backintime package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \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: 2016-01-11 17:52+0000\n" "X-Generator: Launchpad (build 17881)\n" #: ../../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:77 msgid "At every boot/reboot" msgstr "Em cada início/reinício" #: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "A cada 5 minutos" #: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "A cada 10 minutos" #: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "A cada 30 minutos" #: ../../common/config.py:81 msgid "Every hour" msgstr "A cada hora" #: ../../common/config.py:82 msgid "Every 2 hours" msgstr "A cada 2 horas" #: ../../common/config.py:83 msgid "Every 4 hours" msgstr "A cada 4 horas" #: ../../common/config.py:84 msgid "Every 6 hours" msgstr "A cada 6 horas" #: ../../common/config.py:85 msgid "Every 12 hours" msgstr "A cada 12 horas" #: ../../common/config.py:86 msgid "Custom Hours" msgstr "Horas customizadas" #: ../../common/config.py:87 msgid "Every Day" msgstr "A cada Dia" #: ../../common/config.py:88 msgid "Repeatedly (anacron)" msgstr "Repetidamente (anacron)" #: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "Quando o drive for conectado (udev)" #: ../../common/config.py:90 msgid "Every Week" msgstr "A cada semana" #: ../../common/config.py:91 msgid "Every Month" msgstr "A cada mês" #: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Dia(s)" #: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Semana(s)" #: ../../common/config.py:97 msgid "Year(s)" msgstr "Ano(s)" #: ../../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:129 msgid "Local" msgstr "Local" #: ../../common/config.py:130 msgid "SSH" msgstr "SSH" #: ../../common/config.py:130 ../../common/config.py:132 #: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "Chave privada SSH" #: ../../common/config.py:131 msgid "Local encrypted" msgstr "Local ebcriptado" #: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "Criptografia" #: ../../common/config.py:132 msgid "SSH encrypted" msgstr "SSH criptografado" #: ../../common/config.py:135 msgid "Default" msgstr "Padrão" #: ../../common/config.py:136 msgid "AES128-CTR" msgstr "AES128-CTR" #: ../../common/config.py:137 msgid "AES192-CTR" msgstr "AES192-CTR" #: ../../common/config.py:138 msgid "AES256-CTR" msgstr "AES256-CTR" #: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "ARCFOUR256" #: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "ARCFOUR128" #: ../../common/config.py:141 msgid "AES128-CBC" msgstr "AES128-CBC" #: ../../common/config.py:142 msgid "3DES-CBC" msgstr "3DES-CBC" #: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "Blowfish-CBC" #: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "Cast128-CBC" #: ../../common/config.py:145 msgid "AES192-CBC" msgstr "AES192-CBC" #: ../../common/config.py:146 msgid "AES256-CBC" msgstr "AES256-CBC" #: ../../common/config.py:147 msgid "ARCFOUR" msgstr "ARCFOUR" #: ../../common/config.py:153 msgid "Main profile" msgstr "Perfil principal" #: ../../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:289 msgid "Snapshots folder is not valid !" msgstr "Pasta para Snapshots não é válida !" #: ../../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:307 msgid "You can't include backup folder !" msgstr "Você não pode incluir uma pasta de backup !" #: ../../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:371 #, python-format msgid "%s is not a folder !" msgstr "%s não é uma pasta !" #: ../../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" "Are you sure you have write access ?" msgstr "" "Não é possível escrever para: %s\n" "Tem certeza de que tem acesso para gravação ?" #: ../../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 "" "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: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 "" "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:408 ../../qt4/settingsdialog.py:815 msgid "Copy links (dereference symbolic links)" msgstr "Copiar links (criar links simbólicos)" #: ../../common/config.py:409 ../../qt4/settingsdialog.py:669 msgid "Expert Options" msgstr "Opções avançadas" #: ../../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 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: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: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/config.py:1517 #, python-format msgid "Schedule udev doesn't work with mode %s" msgstr "Agendamento udev não funcionou com modo %s" #: ../../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:104 #, python-format msgid "" "Can't mount '%(command)s':\n" "\n" "%(error)s" msgstr "" "Não pude montar '%(command)s':\n" "\n" "%(error)s" #: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "Não pude desmontar encfs %s" #: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "Configuração para pasta encriptada não foi encontrada." #: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" "\n" "Criar uma nova pasta encriptada?" #: ../../common/encfstools.py:171 msgid "Cancel" msgstr "Cancelar" #: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "Por favor, confirme o password" #: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "Password não corresponde" #: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "encfs não encontrado. Por favor, instale-o." #: ../../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: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:512 ../../common/snapshots.py:1131 #: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "Tirar snapshot" #: ../../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:259 #, python-format msgid "mountpoint %s not empty." msgstr "O ponto de montagem %s não está vazio." #: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" #: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "Perfil '%(profile)s': Digite o password para %(mode)s: " #: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Agora" #: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "COM ERROS !" #: ../../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:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "FALHOU" #: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "Permissões de restauração:" #: ../../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" "Your old snapshots can be moved according to this new format. OK?" msgstr "" "Back In Time mudou sua forma de backup.\n" "\n" "Seus snapshots antigos serão movidos para esse novo formato. OK?" #: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" "\n" "The 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)" msgstr "" "%s perfis encontrados. \n" "\n" "O novo formato de backup suporta o armazenamento de diferentes usuários e " "perfis no mesmo local. Você quer o mesmo local para ambos os perfis? \n" "\n" "(O programa ainda será capaz de discriminar entre eles)" #: ../../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. Tem de atualizar a lista de perfis primeiro, por " "favor reinicie o Back In Time" #: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" "of profile %(profile_id)s are not moved to their new location\n" "Do 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" "\n" "If not Back In Time will restore former settings for this profile, however " "cannot continue taking snapshots" msgstr "" #: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" "Back In Time cannot continue taking new snapshots.\n" "\n" "You can manually move the snapshots, \n" "if you are done restart Back In Time to proceed" msgstr "" "Configurações anteriores do perfil %s foram restaurados.\n" "Back In Time não pode continuar a fazer novos snapshots.\n" "\n" "Você pode mover manualmente os snapshots, \n" "se você estiver pronto reinicie o Back In Time para continuar" #: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" msgstr "" "Atualização com sucessol!\n" "\n" "Back In Time continuará a fazer snapshots de novo conforme programado" #: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" "\n" "If 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" "\n" "If you do not, you will be asked again next time you start Back In Time." msgstr "" "Você tem certeza que não quer mover seus velhos snapshots?\n" "\n" "\n" "Se você fizer, você não verá mais essas questões, Back In Time continuará a " "fazer snapshots de novo, mas a remoção inteligente não pode mais usar os " "snapshots velhos na conta!\n" "\n" "If you do not, you will be asked again next time you start Back In Time." #: ../../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: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 não pode continuar a fazer novos snapshots.\n" "Reinicie o Back In Time para ver as questões novamente" #: ../../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." msgstr "" "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:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "Esperando %s segundo." msgstr[1] "Esperando % segundos." #: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "Falha ao fazer snapshot %s !!!" #: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "Finalizando" #: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "Não é possível criar a pasta: %s" #: ../../common/snapshots.py:1217 msgid "..." msgstr "..." #: ../../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:1340 #, python-format msgid "Compare with snapshot %s" msgstr "Comparar com snapshot %s" #: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "Criar hard-links" #: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "Salvar arquivo de configuração ..." #: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "Salvar permissão ..." #: ../../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: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:1695 ../../common/snapshots.py:1728 #: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "Remoção Inteligente" #: ../../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:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "Tente manter no mínimo %d%% de inodes livres" #: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "Não foi possível montar %s" #: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "Não foi possível desmontar o sshfs %s" #: ../../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:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "sshfs não encontrado. Por favor, instale-o." #: ../../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:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" #: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "%s não encontrado em ssh_known_hosts." #: ../../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:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" "O caminho remoto não é gravável:\n" " %s" #: ../../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: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:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "Ping %s falhou. O host está inativo ou o endereço está errado." #: ../../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: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:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "O host remoto %s não suporta hardlinks" #: ../../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" #: ../../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" #: ../../qt4/app.py:122 msgid "Config File Help" msgstr "" #: ../../qt4/app.py:125 msgid "Website" msgstr "Website" #: ../../qt4/app.py:127 ../../qt4/app.py:982 msgid "Changelog" msgstr "Registro de alterações" #: ../../qt4/app.py:129 msgid "FAQ" msgstr "FAQ (perguntas mais freqüentes)" #: ../../qt4/app.py:131 msgid "Ask a question" msgstr "Fazer uma pergunta" #: ../../qt4/app.py:133 msgid "Report a bug" msgstr "Relatar um problema (bug)" #: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "Sobre" #: ../../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" #: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 #: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "Restaurar para ..." #: ../../qt4/app.py:194 msgid "Restore and delete new files" msgstr "Restaurar e apagar novos arquivos" #: ../../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 "" #: ../../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" #: ../../qt4/app.py:277 msgid "Shortcuts" msgstr "Atalhos" #: ../../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" msgstr "" "Não é possível localizar pasta de snapshots.\n" "Se ele estiver em uma unidade removível, por favor conecte-a e pressione OK" #: ../../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 "Trabalhando:" #: ../../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:" #: ../../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" #: ../../qt4/app.py:778 msgid "Root" msgstr "Root" #: ../../qt4/app.py:779 msgid "Home" msgstr "Home" #: ../../qt4/app.py:794 msgid "Backup folders" msgstr "Pastas de backup" #: ../../qt4/app.py:849 msgid "This is NOT a snapshot but a live view of your local files" msgstr "" #: ../../qt4/app.py:860 ../../qt4/app.py:1476 #, python-format msgid "Last check %s" msgstr "" #: ../../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" #: ../../qt4/app.py:1004 #, python-format msgid "" "Backup local files before overwriting or\n" "removing with trailing '%(suffix)s'." msgstr "" #: ../../qt4/app.py:1010 msgid "" "Are you sure you want to remove all newer files in your original folder?" msgstr "" #: ../../qt4/app.py:1014 msgid "" "WARNING: deleting files in filesystem root could break your whole system!!!" msgstr "" #: ../../qt4/app.py:1016 msgid "Files to be restored:" msgstr "" #: ../../qt4/app.py:1031 msgid "Do you really want to restore this files(s):" msgstr "" #: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "Snapshot: %s" #: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "Ver o snapshot feito em %s" #: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "Visualizar o conteúdo atual do disco" #: ../../qt4/app.py:1268 #, python-format msgid "Restore '%s'" msgstr "Restaurar '%s'" #: ../../qt4/app.py:1269 #, python-format msgid "Restore '%s' to ..." msgstr "Restaurar '%s' para ..." #: ../../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 "Autores" #: ../../qt4/app.py:1369 ../../qt4/app.py:1388 msgid "Translations" msgstr "Traduções" #: ../../qt4/app.py:1370 ../../qt4/app.py:1391 msgid "License" msgstr "Licença" #: ../../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 "Perfil:" #: ../../qt4/logviewdialog.py:81 msgid "Filter:" msgstr "Filtrar:" #: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 msgid "All" msgstr "Todos" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 #: ../../qt4/settingsdialog.py:657 msgid "Errors" msgstr "Erros" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 msgid "Changes" msgstr "Alterações" #: ../../qt4/logviewdialog.py:92 msgid "Informations" msgstr "Informações" #: ../../qt4/logviewdialog.py:101 msgid "[E] Error, [I] Information, [C] Change" msgstr "[E] Erro, [I] Informação, [C] Mudar" #: ../../qt4/logviewdialog.py:104 msgid "decode paths" msgstr "" #: ../../qt4/messagebox.py:56 msgid "Error" msgstr "Erro" #: ../../qt4/messagebox.py:62 ../../qt4/messagebox.py:68 msgid "Question" msgstr "Pergunta" #: ../../qt4/qt4systrayicon.py:69 msgid "Start BackInTime" msgstr "" #: ../../qt4/qt4systrayicon.py:124 msgid "Working..." msgstr "Trabalhando..." #: ../../qt4/qt4tools.py:178 msgid "Today" msgstr "Hoje" #: ../../qt4/qt4tools.py:183 msgid "Yesterday" msgstr "Ontem" #: ../../qt4/qt4tools.py:188 msgid "This week" msgstr "Esta semana" #: ../../qt4/qt4tools.py:193 msgid "Last week" msgstr "Semana passada" #: ../../qt4/restoredialog.py:75 msgid "Show full Log" msgstr "" #: ../../qt4/settingsdialog.py:68 msgid "Edit" msgstr "Editar" #: ../../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" #: ../../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 "" #: ../../qt4/settingsdialog.py:129 ../../qt4/settingsdialog.py:1568 msgid "Where to save snapshots" msgstr "Onde salvar os snapshots" #: ../../qt4/settingsdialog.py:145 msgid "Folder" msgstr "Pasta" #: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" #: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "Host:" #: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "Porta:" #: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "Usuário:" #: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "Caminho:" #: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" #: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "Chave privada:" #: ../../qt4/settingsdialog.py:201 msgid "Key File" msgstr "" #: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 #: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "Password" #: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" #: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" #: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "Avançado" #: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 msgid "Full snapshot path: " msgstr "" #: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "Agendar" #: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "Dia:" #: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "Dia da Semana" #: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "Hora:" #: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "Horas:" #: ../../qt4/settingsdialog.py:339 msgid "" "Run Back In Time repeatedly. This is useful if the computer is not running " "regular." msgstr "" #: ../../qt4/settingsdialog.py:344 msgid "Every:" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Incluir" #: ../../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" #: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Adicionar pasta" #: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Excluir" #: ../../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 "" #: ../../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:" #: ../../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" #: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "Antigo quanto:" #: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "Se o espaço livre for menor do que:" #: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" #: ../../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" #: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "dia(s)" #: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "Manter um snapshot por dia pelos últimos" #: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "Manter um snapshot por semana pelos últimos" #: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "semana(s)" #: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "Manter um instantâneo por mês pelos últimos" #: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "mês(es)" #: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "Manter um snapshot por ano por todos os anos" #: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "Não remover os snapshots nomeados" #: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Opções" #: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Habilitar notifiações" #: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "Desativar snapshot quando na bateria" #: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" msgstr "Estado da energia não está disponível a partir do sistema" #: ../../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 "" #: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "Continuar em caso de erros (manter snapshots incompletos)" #: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "Usar checksum para detectar mudanças" #: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "Modo de resincronismo total. Pode ser mais rápido mas:" #: ../../qt4/settingsdialog.py:634 msgid "" "- 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 ...)" #: ../../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)" #: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "Nível de registro:" #: ../../qt4/settingsdialog.py:656 msgid "None" msgstr "Nenhum" #: ../../qt4/settingsdialog.py:658 msgid "Changes & Errors" msgstr "Alterações & Erros" #: ../../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!" #: ../../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 "" #: ../../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 "" #: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr " KB/sec" #: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "Preservar ACL" #: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "Preservar atributos extendidos (xattr)" #: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute links)" msgstr "Copiar links inseguros (funciona apenas com hard links)" #: ../../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 "padrão" #: ../../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 "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 "Você tem certeza que deseja excluir 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 "" #: ../../qt4/settingsdialog.py:1489 msgid "Exclude pattern" msgstr "Excluir modelos" #: ../../qt4/settingsdialog.py:1502 msgid "Exclude file" msgstr "Excluir arquivo" #: ../../qt4/settingsdialog.py:1506 msgid "Exclude folder" msgstr "Excluir pasta" #: ../../qt4/settingsdialog.py:1525 msgid "Include file" msgstr "Incluir arquivo" #: ../../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 "Incluir pasta" #: ../../qt4/settingsdialog.py:1572 msgid "Are you sure you want to change snapshots folder ?" msgstr "Deseja realmente mudar a pasta de snapshots ?" #: ../../qt4/settingsdialog.py:1688 msgid "enabled" msgstr "ativado" #: ../../qt4/settingsdialog.py:1690 msgid "disabled" msgstr "desativado" #: ../../qt4/settingsdialog.py:1715 msgid "Restore Settings" msgstr "Restaurar Configurações" #: ../../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 "Opções do Diff" #: ../../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 "" #: ../../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" #: ../../qt4/snapshotsdialog.py:148 msgid "Select All" msgstr "Selecionar Tudo" #: ../../qt4/snapshotsdialog.py:161 msgid "Diff" msgstr "Diferença" #: ../../qt4/snapshotsdialog.py:172 msgid "Go To" msgstr "Ir para" #: ../../qt4/snapshotsdialog.py:326 msgid "You can't compare a snapshot to itself" msgstr "Você não pode comparar um snapshot com ele mesmo" #: ../../qt4/snapshotsdialog.py:333 #, python-format msgid "Command not found: %s" msgstr "Comando não encontrado: %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 "" backintime-1.1.12/common/po/genmessages.sh0000775000175000017500000000012012644767576020007 0ustar germargermar#!/bin/bash xgettext --output=- ../../common/*.py ../../qt4/*.py > messages.pot backintime-1.1.12/common/po/nb.po0000664000175000017500000011235312644767576016122 0ustar germargermar# Norwegian Bokmal translation for backintime # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the backintime package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \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" "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: 2016-01-11 17:52+0000\n" "X-Generator: Launchpad (build 17881)\n" #: ../../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:77 msgid "At every boot/reboot" msgstr "For hver start/omstart" #: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Hvert 5. minutt" #: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Hvert 10. minutt" #: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "Hvert 30. minutt" #: ../../common/config.py:81 msgid "Every hour" msgstr "Hver time" #: ../../common/config.py:82 msgid "Every 2 hours" msgstr "Annenhver time" #: ../../common/config.py:83 msgid "Every 4 hours" msgstr "Hver fjerde time" #: ../../common/config.py:84 msgid "Every 6 hours" msgstr "Hver sjette time" #: ../../common/config.py:85 msgid "Every 12 hours" msgstr "Hver tolvte time" #: ../../common/config.py:86 msgid "Custom Hours" msgstr "Velg timer" #: ../../common/config.py:87 msgid "Every Day" msgstr "" #: ../../common/config.py:88 msgid "Repeatedly (anacron)" msgstr "" #: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "Når disken kobles til (udev)" #: ../../common/config.py:90 msgid "Every Week" msgstr "Hver uke" #: ../../common/config.py:91 msgid "Every Month" msgstr "Hver måned" #: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Dag(er)" #: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Uke(r)" #: ../../common/config.py:97 msgid "Year(s)" msgstr "År" #: ../../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:129 msgid "Local" msgstr "Lokal" #: ../../common/config.py:130 msgid "SSH" msgstr "SSH" #: ../../common/config.py:130 ../../common/config.py:132 #: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "Privat SSH nøkkel" #: ../../common/config.py:131 msgid "Local encrypted" msgstr "Lokal kryptert" #: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "Kryptering" #: ../../common/config.py:132 msgid "SSH encrypted" msgstr "SSH kryptert" #: ../../common/config.py:135 msgid "Default" msgstr "Standard" #: ../../common/config.py:136 msgid "AES128-CTR" msgstr "AES128-CTR" #: ../../common/config.py:137 msgid "AES192-CTR" msgstr "AES192-CTR" #: ../../common/config.py:138 msgid "AES256-CTR" msgstr "AES256-CTR" #: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "ARCFOUR256" #: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "ARCFOUR128" #: ../../common/config.py:141 msgid "AES128-CBC" msgstr "AES128-CBC" #: ../../common/config.py:142 msgid "3DES-CBC" msgstr "3DES-CBC" #: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "Blowfish-CBC" #: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "Cast128-CBC" #: ../../common/config.py:145 msgid "AES192-CBC" msgstr "AES192-CBC" #: ../../common/config.py:146 msgid "AES256-CBC" msgstr "AES256-CBC" #: ../../common/config.py:147 msgid "ARCFOUR" msgstr "ARCFOUR" #: ../../common/config.py:153 msgid "Main profile" msgstr "Hovedprofil" #: ../../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:289 msgid "Snapshots folder is not valid !" msgstr "Øyeblikksbilde mappen er ikke gyldig !" #: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "Du velge minst en mappe å sikkerhetskopiere !" #: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "Du kan ikke inkludere sikkerhetskopi mappen !" #: ../../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:371 #, python-format msgid "%s is not a folder !" msgstr "%s er ikke en mappe !" #: ../../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 "" "Kan ikke skrive til:% s\n" "Er du sikker på at du har skrivetilgang?" #: ../../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 "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:1407 msgid "" "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:1411 msgid "Failed to write new crontab." msgstr "" #: ../../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/config.py:1517 #, python-format msgid "Schedule udev doesn't work with mode %s" msgstr "" #: ../../common/config.py:1526 #, python-format msgid "Couldn't find UUID for \"%s\"" msgstr "Kunne ikke finne UUID for \"%s\"" #: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" "\n" "%(error)s" msgstr "" #: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "" #: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "" #: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" #: ../../common/encfstools.py:171 msgid "Cancel" msgstr "" #: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "" #: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "" #: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" #: ../../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 "" #: ../../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:512 ../../common/snapshots.py:1131 #: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "Ta øyeblikksbilde" #: ../../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:259 #, python-format msgid "mountpoint %s not empty." msgstr "" #: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" #: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" #: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Nå" #: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "MED FEIL !" #: ../../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:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "" #: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "" #: ../../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" "Your old snapshots can be moved according to this new format. OK?" msgstr "" "Back In Time har endret backup-format. \n" "\n" "Dine gamle øyeblikksbilder kan flyttes i henhold til det nye formatet. OK?" #: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" "\n" "The 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)" msgstr "" "%s profiler funnet. \n" "\n" "Det nye backup-formatet støtter lagring av forskjellige brukere og profiler " "på samme sted. Vil du ha samme plassering for begge profiler? \n" "\n" "(Programmet vil fortsatt kunne skille mellom dem)" #: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" msgstr "" "Ingen profiler funnet. Må oppdatere til profiler først, vennligst start Back " "In Time på nytt" #: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" "of profile %(profile_id)s are not moved to their new location\n" "Do 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" "\n" "If not Back In Time will restore former settings for this profile, however " "cannot continue taking snapshots" msgstr "" #: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" "Back In Time cannot continue taking new snapshots.\n" "\n" "You can manually move the snapshots, \n" "if you are done restart Back In Time to proceed" msgstr "" "Eldre innstillinger for profil %s er gjenopprettet. \n" "Back In Time kan ikke fortsette å ta nye øyeblikksbilder. \n" "\n" "Du kan manuelt flytte øyeblikksbildene, \n" "hvis du er ferdig kan du starte Back In Time på nytt for å fortsette" #: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" msgstr "" "Oppdatering vellykket! \n" "\n" "Back In Time vil fortsette å ta øyeblikksbilder som planlagt" #: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" "\n" "If 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" "\n" "If you do not, you will be asked again next time you start Back In Time." msgstr "" "Er du sikker på at du ikke vil flytte dine gamle øyeblikksbilder? \n" "\n" "\n" "Hvis du gjør det vil du ikke se dette spørsmålet igjen. Back In time vil " "fortsette å ta øyeblikksbilder, men automatisk fjerning av dine gamle " "øyeblikksbilder vil ikke fungere! \n" "\n" "Hvis du ikke gjør det vil du bli spurt neste gang du starter Back In Time." #: ../../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: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: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 "" "Kan ikke finne øyeblikksbilde mappe.\n" "Hvis den er på en ekstern disk, vennligst plugg den i." #: ../../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:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "" #: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "Avslutter" #: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "Kan ikke opprette mappe: %s" #: ../../common/snapshots.py:1217 msgid "..." msgstr "…" #: ../../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:1340 #, python-format msgid "Compare with snapshot %s" msgstr "Sammenlign med øyeblikksbilde %s" #: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "lag ekte lenker" #: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "" #: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "Lagre rettighet ..." #: ../../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:1695 ../../common/snapshots.py:1728 #: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "Smart sletting" #: ../../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:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" #: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "" #: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "" #: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" #: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" #: ../../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:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" #: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" #: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" #: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" #: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" #: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" #: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" #: ../../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 "" #: ../../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 "" #: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "" #: ../../qt4/app.py:81 msgid "Refresh snapshots list" msgstr "" #: ../../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" #: ../../qt4/app.py:122 msgid "Config File Help" msgstr "" #: ../../qt4/app.py:125 msgid "Website" msgstr "Nettside" #: ../../qt4/app.py:127 ../../qt4/app.py:982 msgid "Changelog" msgstr "" #: ../../qt4/app.py:129 msgid "FAQ" msgstr "" #: ../../qt4/app.py:131 msgid "Ask a question" msgstr "" #: ../../qt4/app.py:133 msgid "Report a bug" msgstr "" #: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "Om" #: ../../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" #: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 #: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "" #: ../../qt4/app.py:194 msgid "Restore and delete new files" msgstr "" #: ../../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 "" #: ../../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" #: ../../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" msgstr "" "Kan ikke finne øyeblikksbilde mappe.\n" "Hvis den er på en ekstern disk vennligst plugg den i, deretter trykk OK" #: ../../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 "Arbeider:" #: ../../qt4/app.py:695 msgid "Done, no backup needed" msgstr "Ferdig, sikkerhetskopiering trengs ikke" #: ../../qt4/app.py:707 msgid "Error:" msgstr "" #: ../../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" #: ../../qt4/app.py:778 msgid "Root" msgstr "Rot" #: ../../qt4/app.py:779 msgid "Home" msgstr "Hjem" #: ../../qt4/app.py:794 msgid "Backup folders" msgstr "Øyeblikksbilde mapper" #: ../../qt4/app.py:849 msgid "This is NOT a snapshot but a live view of your local files" msgstr "" #: ../../qt4/app.py:860 ../../qt4/app.py:1476 #, python-format msgid "Last check %s" msgstr "" #: ../../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" #: ../../qt4/app.py:1004 #, python-format msgid "" "Backup local files before overwriting or\n" "removing with trailing '%(suffix)s'." msgstr "" #: ../../qt4/app.py:1010 msgid "" "Are you sure you want to remove all newer files in your original folder?" msgstr "" #: ../../qt4/app.py:1014 msgid "" "WARNING: deleting files in filesystem root could break your whole system!!!" msgstr "" #: ../../qt4/app.py:1016 msgid "Files to be restored:" msgstr "" #: ../../qt4/app.py:1031 msgid "Do you really want to restore this files(s):" msgstr "" #: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "Øyeblikksbilde: %s" #: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "Se øyeblikksbilde laget den %s" #: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "Se nåværende stasjons innhold" #: ../../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 "" #: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 msgid "All" msgstr "" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 #: ../../qt4/settingsdialog.py:657 msgid "Errors" msgstr "Feil" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 msgid "Changes" msgstr "Endringer" #: ../../qt4/logviewdialog.py:92 msgid "Informations" msgstr "" #: ../../qt4/logviewdialog.py:101 msgid "[E] Error, [I] Information, [C] Change" msgstr "" #: ../../qt4/logviewdialog.py:104 msgid "decode paths" msgstr "" #: ../../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 "Arbeider …" #: ../../qt4/qt4tools.py:178 msgid "Today" msgstr "Idag" #: ../../qt4/qt4tools.py:183 msgid "Yesterday" msgstr "Igår" #: ../../qt4/qt4tools.py:188 msgid "This week" msgstr "Denne uken" #: ../../qt4/qt4tools.py:193 msgid "Last week" msgstr "Forrige uke" #: ../../qt4/restoredialog.py:75 msgid "Show full Log" msgstr "" #: ../../qt4/settingsdialog.py:68 msgid "Edit" msgstr "Rediger" #: ../../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 "Generelt" #: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "" #: ../../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" #: ../../qt4/settingsdialog.py:145 msgid "Folder" msgstr "" #: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" #: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "" #: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "" #: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "" #: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" #: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" #: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "" #: ../../qt4/settingsdialog.py:201 msgid "Key File" msgstr "" #: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 #: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "" #: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" #: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" #: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "" #: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 msgid "Full snapshot path: " msgstr "" #: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "Timeplan" #: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "" #: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "" #: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "" #: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "" #: ../../qt4/settingsdialog.py:339 msgid "" "Run Back In Time repeatedly. This is useful if the computer is not running " "regular." msgstr "" #: ../../qt4/settingsdialog.py:344 msgid "Every:" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Inkluder" #: ../../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" #: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Legg til katalog" #: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Ekskludér" #: ../../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 "" #: ../../qt4/settingsdialog.py:425 msgid "Exclude patterns, files or folders" msgstr "" #: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "" #: ../../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" #: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "Eldre enn:" #: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "Hvis ledig plass er mindre enn:" #: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" #: ../../qt4/settingsdialog.py:551 msgid "Run in background on remote Host." msgstr "" #: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "" #: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "" #: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "" #: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "" #: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "" #: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "" #: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "" #: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "" #: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "Ikke fjern navngitte øyeblikksbilder" #: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Alternativer" #: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Slå på meldinger" #: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "Slå av funksjonen snapshot ved bateridrift" #: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" 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 "" #: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "" #: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "" #: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "" #: ../../qt4/settingsdialog.py:634 msgid "" "- snapshots are not read-only\n" "- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "" #: ../../qt4/settingsdialog.py:656 msgid "None" msgstr "" #: ../../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 "" #: ../../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 "" #: ../../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 "" #: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" #: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "" #: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "" #: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute 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 "Omdøp profil" #: ../../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\"?" #: ../../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 "Utelukk mønster" #: ../../qt4/settingsdialog.py:1502 msgid "Exclude file" msgstr "Ekskluder fil" #: ../../qt4/settingsdialog.py:1506 msgid "Exclude folder" msgstr "Ekskludér katalog" #: ../../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 "" #: ../../qt4/settingsdialog.py:1545 msgid "Include folder" msgstr "Inkludér katalog" #: ../../qt4/settingsdialog.py:1572 msgid "Are you sure you want to change snapshots folder ?" msgstr "Er du sikker på at vil bytte øyeblikksbilder mappen ?" #: ../../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 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 "" #: ../../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 "" #: ../../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å 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 "" "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 "" backintime-1.1.12/common/po/eu.po0000664000175000017500000013700312644767576016133 0ustar germargermar# Basque translation for backintime # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the backintime package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \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: 2016-01-11 17:52+0000\n" "X-Generator: Launchpad (build 17881)\n" #: ../../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:77 msgid "At every boot/reboot" msgstr "Abiatze/berrabiaratze guztietan" #: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "5 minuturo" #: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "10 minuturo" #: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "30 minuturo" #: ../../common/config.py:81 msgid "Every hour" msgstr "Orduro" #: ../../common/config.py:82 msgid "Every 2 hours" msgstr "2 ordutan behin" #: ../../common/config.py:83 msgid "Every 4 hours" msgstr "4 ordutan behin" #: ../../common/config.py:84 msgid "Every 6 hours" msgstr "6 ordutan behin" #: ../../common/config.py:85 msgid "Every 12 hours" msgstr "12 ordutan behin" #: ../../common/config.py:86 msgid "Custom Hours" msgstr "ordu pertsonalizatuetan" #: ../../common/config.py:87 msgid "Every Day" msgstr "Egunero" #: ../../common/config.py:88 msgid "Repeatedly (anacron)" msgstr "Behin eta berriz (anacron)" #: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "Unitatea konektatzean (udev)" #: ../../common/config.py:90 msgid "Every Week" msgstr "Astero" #: ../../common/config.py:91 msgid "Every Month" msgstr "Hilero" #: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Egun(ak)" #: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "aste" #: ../../common/config.py:97 msgid "Year(s)" msgstr "urtez" #: ../../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:129 msgid "Local" msgstr "Lokala" #: ../../common/config.py:130 msgid "SSH" msgstr "SSH" #: ../../common/config.py:130 ../../common/config.py:132 #: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "SSH gako pribatua" #: ../../common/config.py:131 msgid "Local encrypted" msgstr "Lokala zifratua" #: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "Zifraketa" #: ../../common/config.py:132 msgid "SSH encrypted" msgstr "SSH zifratua" #: ../../common/config.py:135 msgid "Default" msgstr "Lehenetsia" #: ../../common/config.py:136 msgid "AES128-CTR" msgstr "AES128-CTR" #: ../../common/config.py:137 msgid "AES192-CTR" msgstr "AES192-CTR" #: ../../common/config.py:138 msgid "AES256-CTR" msgstr "AES256-CTR" #: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "ARCFOUR256" #: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "ARCFOUR128" #: ../../common/config.py:141 msgid "AES128-CBC" msgstr "AES128-CBC" #: ../../common/config.py:142 msgid "3DES-CBC" msgstr "3DES-CBC" #: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "Blowfish-CBC" #: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "Cast128-CBC" #: ../../common/config.py:145 msgid "AES192-CBC" msgstr "AES192-CBC" #: ../../common/config.py:146 msgid "AES256-CBC" msgstr "AES256-CBC" #: ../../common/config.py:147 msgid "ARCFOUR" msgstr "ARCFOUR" #: ../../common/config.py:153 msgid "Main profile" msgstr "Profil nagusia" #: ../../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:289 msgid "Snapshots folder is not valid !" msgstr "Babeskopien karpeta ez da baliozkoa!" #: ../../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:307 msgid "You can't include backup folder !" msgstr "Ezin duzu babeskopiaren karpeta sartu babeskopian !" #: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "Ezin duzu babekopiaren azpi-karpetak sartu babeskopian !" #: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s ez da karpeta bat !" #: ../../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" "Are you sure you have write access ?" msgstr "" "Ezin da hor idatzi: %s\n" "Ziur zaude idazteko baimenik baduzula?" #: ../../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" "If not you should disable all automatic backups." msgstr "" "Ezin da aurkitu crontab.\n" "Seguru zaude crontab instalatuta dagoela?\n" "Crontab ez baduzu babeskopia automatiko guztiak ezgaitu beharko zenuke." #: ../../common/config.py:1411 msgid "Failed to write new crontab." msgstr "Huts egin du crontab berria idazten." #: ../../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 "" "Ezin izan da Udev araua instalatu %(profile_id)s profilarentzat. " "'%(dbus_interface)s' DBus zerbitzua ez zegoen erabilgarri." #: ../../common/config.py:1517 #, python-format msgid "Schedule udev doesn't work with mode %s" msgstr "Programatutako udev-a ez dabil %s moduarekin" #: ../../common/config.py:1526 #, python-format msgid "Couldn't find UUID for \"%s\"" msgstr "Ezin da UUID aurkitu honentzat: \"%s\"" #: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" "\n" "%(error)s" msgstr "" "'%(command)s' ezin da muntatu:\n" "\n" "%(error)s" #: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "Ezin da desmuntatu encfs %s" #: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "Ez dira aurkitu zifratutako karpetaren ezarpenak" #: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" "\n" "Sortu karpeta zifratu berri bat?" #: ../../common/encfstools.py:171 msgid "Cancel" msgstr "Utzi" #: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "Egiaztatu pasahitza mesedez" #: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "Pasahitzak ez datoz bat" #: ../../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: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 ez da 'fuse' taldeko partaidea.\n" " Exekutatu 'sudo adduser %(user)s fuse'. Aldaketak aplikatzeko atera zaitez " "eta sartu berriro.\n" "Begira ezazu 'man backintime' azalpen zabalagoa izateko." #: ../../common/encfstools.py:211 msgid "" "encfs version 1.7.2 and before has a bug with option --reverse. Please " "update encfs" msgstr "" "encfs-ren 1.7.2 bertsioak eta honen aurrekoek badute akats bat --reverse " "aukeran. Eguneratu encfs mesedez" #: ../../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:204 #, python-format msgid "" "Hash collision occurred in hash_id %s. Incrementing global value " "hash_collision and try again." msgstr "" "Hash talka gertatu da hemen: hash_id %s. Handitu hash_collision balioa eta " "saiatu berriz." #: ../../common/mount.py:259 #, python-format msgid "mountpoint %s not empty." msgstr "%s munstatze-puntua ez dago hutsik." #: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "Muntatze prozedura blokeatuta iraungitzean" #: ../../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:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Orain" #: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "ERROREAK DAUDE!" #: ../../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 "" "### Erregistro hau automatikoki bilatutako txantiloi baten bidez dekodetu " "da\n" "### Baldin eta bide-izenen bat ez badago dekodetua eskuz dekodetu dezakezu " "honekin\n" #: ../../common/snapshots.py:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "HUTS EGIN DU" #: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "Berrezarri baimenak" #: ../../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" "Your old snapshots can be moved according to this new format. OK?" msgstr "" "Back In Time-ek aldatu du bere babeskopia-formatua.\n" "\n" "Zure babeskopia zaharrak alda daitezke formatu berrira. Ados?" #: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" "\n" "The 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)" msgstr "" "%s profilak aurkitu dira. \n" "\n" "Babeskopia formatu berriak onartzen du hainbat erabiltzaile eta profilek " "kokaleku berean biltegiratzea. Nahi duzu kokaleku bera erabiltzea bi " "profiletarako? \n" "\n" "(Programa oraindik gai izango da ezberdintzeko haien artean)" #: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" msgstr "" "Ez da profilik aurkitu. Lehenik eguneratu behar dituzu profilak, " "berrabiarazi Back In Time mesedez" #: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" "of profile %(profile_id)s are not moved to their new location\n" "Do 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" "\n" "If not Back In Time will restore former settings for this profile, however " "cannot continue taking snapshots" msgstr "" "%(snapshots_left)s\n" "%(profile_id)s profilarenak ez dira mugitu kokaleku berrira\n" "Nahi duzu egitea?\n" "(Back In Time-k jarraituko du babeskopiak egiten baina hurrengo babeskopiak " "ez dira kontutan hartuko ezabatze automatikoan) \n" "\n" "Bestela Back In Time-k profil honentzat aurreko ezarpenak berrezarriko dira, " "baina ezingo dira babeskopia berriak egin)" #: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" "Back In Time cannot continue taking new snapshots.\n" "\n" "You can manually move the snapshots, \n" "if you are done restart Back In Time to proceed" msgstr "" "%s profilaren aurreko ezarpenak berrezarri dira.\n" "Back In Time-k ezin du babeskopia berririk egin\n" "\n" "Babeskopiak eskuz mugi ditzakezu, \n" "egiten baduzu berrabiarazi Back In Time" #: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" msgstr "" "Ondo eguneratu da!\n" "\n" "Back In Time-k segituko du berriz ere babeskopiak egiten programatuta dagoen " "moduan" #: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" "\n" "If 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" "\n" "If you do not, you will be asked again next time you start Back In Time." msgstr "" "Seguru zaude ez dituzula babeskopia zaharrak mugitu nahi?\n" "\n" "\n" "Onartzen baduzu hurrengoan ez duzu galdera hau ikusiko, Back In Time " "segituko du berriz ere babeskopiak egiten, baina ezabatze automatikoak " "ezingo ditu kontuan izan zure babeskopia zaharrak!\n" "\n" "Onartzen ez baduzu, Back In Time berriro abiatzean beste behin galdetuko " "dizu." #: ../../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: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-k jada ezin du babeskopia berririk egin.\n" "Berrabiarazi Back In Time galdera berriz ikusteko." #: ../../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." msgstr "" "Ezin du aurkitu babeskopien karpeta.\n" "Karpeta unitate eramangarri batean badago konekta ezazu, mesedez." #: ../../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:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "Huts egi du %s babeskopia egiten!!!" #: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "Amaitzen" #: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "Ezin da %s karpeta sortu" #: ../../common/snapshots.py:1217 msgid "..." msgstr "..." #: ../../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:1340 #, python-format msgid "Compare with snapshot %s" msgstr "Alderatu %s babeskopiarekin" #: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "Esteka gogorrak sortzen" #: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "Gorde ezarpenen fitxategia" #: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "Baimenak gordetzen ..." #: ../../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:1695 ../../common/snapshots.py:1728 #: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "Ezabatze automatikoa" #: ../../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:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "Saiatu gutxienez %d%% nodo libre mantentzen." #: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "Ezin da %s muntatu" #: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "Ezin da desmuntatu %s sshfs-a" #: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" "Ezin da SSH-ren gako pribatua desblokeatu. Okerreko pasahitza edo cron-" "entzat baliozkoa ez den pasahitza." #: ../../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:278 #, python-format msgid "" "Password-less authentication for %(user)s@%(host)s failed. Look at 'man " "backintime' for further instructions." msgstr "" "Huts egin du %(user)s@%(host)s-en pasahitzik gabeko autentifikazioa. " "Begiratu 'man backintime' azalpenak ikusteko." #: ../../common/sshtools.py:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" "Huts egin du cipher %(cipher)s ostalari honetan: %(host)s\n" "%(err)s" #: ../../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:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" "Urrutiko bide-izena badago baina ez da direktorio bat:\n" " %s" #: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" "Urrutiko bide-izena ez dauka idazteko baimenik:\n" " %s" #: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" "Urrutiko bide-izena ez da exekutagarria:\n" " %s" #: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" "Ezin da sortu urrutiko bide-izena:\n" " %s" #: ../../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: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)s urrutiko ostalaria ez du '%(command)s' onartzen:\n" "%(err)s\n" "Begiratu 'man backintime' azalpenak ikusteko." #: ../../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 "" "%(host)s ostalariak txekeo komandoari errore ezezagunaz erantzun dio:\n" " %(err)s\n" "Begiratu 'man backintime' azalpenak ikusteko." #: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "%s urrutiko ostalariak ez ditu esteka gogorrak onartzen" #: ../../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." #: ../../qt4/app.py:111 msgid "Exit" msgstr "Irten" #: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 msgid "Help" msgstr "Laguntza" #: ../../qt4/app.py:122 msgid "Config File Help" msgstr "Config fitxategiaren laguntza" #: ../../qt4/app.py:125 msgid "Website" msgstr "Webgunea" #: ../../qt4/app.py:127 ../../qt4/app.py:982 msgid "Changelog" msgstr "Aldaketen egunkaria" #: ../../qt4/app.py:129 msgid "FAQ" msgstr "FAQ" #: ../../qt4/app.py:131 msgid "Ask a question" msgstr "Zerbait galdetu" #: ../../qt4/app.py:133 msgid "Report a bug" msgstr "Akats baten berri eman" #: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "Honi buruz" #: ../../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" #: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 #: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "Berreskuratu hona" #: ../../qt4/app.py:194 msgid "Restore and delete new files" msgstr "Leheneratu eta ezabatu fitxategi berriak" #: ../../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 "" "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" #: ../../qt4/app.py:277 msgid "Shortcuts" msgstr "Lasterbideak" #: ../../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?" #: ../../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 "" "Ezin da aurkitu babeskopien karpeta.\n" "Unitate eramangarri batean badago konekta ezazu eta sakatu Ados" #: ../../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?" #: ../../qt4/app.py:667 ../../qt4/app.py:703 msgid "Working:" msgstr "Lanean:" #: ../../qt4/app.py:695 msgid "Done, no backup needed" msgstr "Egina, ez da babeskopia egin behar." #: ../../qt4/app.py:707 msgid "Error:" msgstr "Errorea:" #: ../../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" #: ../../qt4/app.py:778 msgid "Root" msgstr "Root" #: ../../qt4/app.py:779 msgid "Home" msgstr "Hasiera" #: ../../qt4/app.py:794 msgid "Backup folders" msgstr "Babeskopia-karpetak" #: ../../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" #: ../../qt4/app.py:860 ../../qt4/app.py:1476 #, python-format msgid "Last check %s" msgstr "Azken kontrola %s" #: ../../qt4/app.py:928 #, python-format msgid "" "Are you sure you want to remove the snapshot:\n" "%s" msgstr "" "Seguru zaude babeskopia ezabatu nahi duzula?\n" "%s" #: ../../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." #: ../../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?" #: ../../qt4/app.py:1014 msgid "" "WARNING: deleting files in filesystem root could break your whole system!!!" msgstr "" "KONTUZ: fitxategi-sistemaren erroko fitxategiak ezabatzeak sistema osoa " "hondatu dezake!!!" #: ../../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" #: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "Ikusi %s -ean egindako babeskopia" #: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "Ikusi diskoaren edukia" #: ../../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" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 #: ../../qt4/settingsdialog.py:657 msgid "Errors" msgstr "Akatsak" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 msgid "Changes" msgstr "Aldaketak" #: ../../qt4/logviewdialog.py:92 msgid "Informations" msgstr "Informazioa" #: ../../qt4/logviewdialog.py:101 msgid "[E] Error, [I] Information, [C] Change" msgstr "[E] Error, [I] Information, [C] Change" #: ../../qt4/logviewdialog.py:104 msgid "decode paths" msgstr "dekodetu bide-izenak" #: ../../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" #: ../../qt4/qt4systrayicon.py:124 msgid "Working..." msgstr "Lanean..." #: ../../qt4/qt4tools.py:178 msgid "Today" msgstr "Gaur" #: ../../qt4/qt4tools.py:183 msgid "Yesterday" msgstr "Atzo" #: ../../qt4/qt4tools.py:188 msgid "This week" msgstr "Aste honetan" #: ../../qt4/qt4tools.py:193 msgid "Last week" msgstr "Joan den astean" #: ../../qt4/restoredialog.py:75 msgid "Show full Log" msgstr "Erakutsi erregistro osoa" #: ../../qt4/settingsdialog.py:68 msgid "Edit" msgstr "Editatu" #: ../../qt4/settingsdialog.py:73 msgid "Modify for Full System Backup" msgstr "" #: ../../qt4/settingsdialog.py:77 ../../qt4/settingsdialog.py:451 msgid "Add" msgstr "Gehitu" #: ../../qt4/settingsdialog.py:81 ../../qt4/settingsdialog.py:408 #: ../../qt4/settingsdialog.py:467 msgid "Remove" msgstr "Ezabatu" #: ../../qt4/settingsdialog.py:96 msgid "General" msgstr "Orokorra" #: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "Modua:" #: ../../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" #: ../../qt4/settingsdialog.py:145 msgid "Folder" msgstr "Karpeta" #: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "SSH ezarpenak" #: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "Ostalaria" #: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "Ataka:" #: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "Erabiltzailea:" #: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "Bide-izena:" #: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "Zifratua:" #: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "Gako pribatua:" #: ../../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" #: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "Gorde pasahitza" #: ../../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)" #: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "Aurreratua" #: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 msgid "Full snapshot path: " msgstr "Irudiaren bide osoa: " #: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "Programaketa" #: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "Eguna:" #: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "Asteguna" #: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "Ordua:" #: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "Orduak:" #: ../../qt4/settingsdialog.py:339 msgid "" "Run Back In Time repeatedly. This is useful if the computer is not running " "regular." msgstr "" "Erabili Back In Time behin eta berriz. Egin bereziki ordenagailua ez badabil " "ongi." #: ../../qt4/settingsdialog.py:344 msgid "Every:" msgstr "Guztiak:" #: ../../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 "" "Exekutatu Back In Time unitatea konektatu bezain pronto (X egunean behin " "bakarrik).\n" "Zure sudo pasahitza eskatuko zaizu" #: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Sartu" #: ../../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" #: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Gehitu karpeta" #: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Kanpoan utzi" #: ../../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 "" "Kontuz: Komodin karaktereak ('foo*', '[fF]oo', 'fo?') ez dira " "ezagutuko 'SSH encrypted' moduan.\n" "Bakarrik erabil daitezke banatutako asteriskoak ('foo/*', 'foo/**/bar')" #: ../../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" #: ../../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" #: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "Hau baino zaharragoa:" #: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "Toki librea hau baino txikagoa bada:" #: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "Baldin eta nodo libreak hauek baino gutxiago badira:" #: ../../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" #: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "egunez" #: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "Mantendu eguneko babeskopia bana azkeneko" #: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "Mantendu asteko babeskopia bana azkeneko" #: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "astetarako" #: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "Mantendu hilabeteko babeskopia bana azkeneko" #: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "hilabetez" #: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "Mantendu urteko babeskopia bana urtero" #: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "Ez ezabatu izena duten babeskopiak" #: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Aukerak" #: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Gaitu notifikazioak" #: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "Ezgaitu babeskopiak egitea bateriaz funtzionatzean" #: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" msgstr "Energia egoera ez dago eskurtagarri sistemarentzat" #: ../../qt4/settingsdialog.py:611 msgid "Run only one snapshot at a time" msgstr "Egin irudi bat aldiko." #: ../../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)" #: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "Erabili kontrol-batura aldaketak detektatzeko" #: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "Rsync modu osoa. Azkarragoa izan daiteke baina:" #: ../../qt4/settingsdialog.py:634 msgid "" "- 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" "- helburuko fitxategi-sistema Linux atributu guztiak onartu behar ditu " "(datak, eskubideak, erabiltzaileak, taldeak...)" #: ../../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)" #: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "Log maila:" #: ../../qt4/settingsdialog.py:656 msgid "None" msgstr "Ezer Ez" #: ../../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!" #: ../../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." #: ../../qt4/settingsdialog.py:734 msgid "Limit rsync bandwidth usage: " msgstr "Mugatu rsync-en banda-zabaleraren erabilera: " #: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr " KB/sec" #: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "Mantendu ACL" #: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "Mantendu atributu hedatuak (xattr)" #: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute links)" msgstr "Kopiatu esteka inseguruak (egin bakarrik esteka absolutuekin)" #: ../../qt4/settingsdialog.py:834 msgid "Paste additional options to rsync" msgstr "Itsatsi aukera gehigarriak rsync-eri" #: ../../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\"." #: ../../qt4/settingsdialog.py:847 msgid "Add prefix to SSH commands" msgstr "Gehitu aurrizkia SSH komandoei" #: ../../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" #: ../../qt4/settingsdialog.py:858 ../../qt4/settingsdialog.py:1691 msgid "default" msgstr "lehenetsia" #: ../../qt4/settingsdialog.py:875 msgid "Restore Config" msgstr "Leheneratu konfigurazioa" #: ../../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 "Profil berria" #: ../../qt4/settingsdialog.py:938 msgid "Rename profile" msgstr "Berrizendatu profila" #: ../../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?" #: ../../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." #: ../../qt4/settingsdialog.py:1489 msgid "Exclude pattern" msgstr "Baztertu txantiloia" #: ../../qt4/settingsdialog.py:1502 msgid "Exclude file" msgstr "Baztertu fitxategia" #: ../../qt4/settingsdialog.py:1506 msgid "Exclude folder" msgstr "Baztertu karpeta" #: ../../qt4/settingsdialog.py:1525 msgid "Include file" msgstr "Sartu fitxategia" #: ../../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\" esteka sinboliko bat da. Estekatutako objektuaren babeskopia ez da " "egingo are eta bera ere gehitu arte.\n" "Nahi duzu gehitu esteka sinbolikoen helburu-objektuak?" #: ../../qt4/settingsdialog.py:1545 msgid "Include folder" msgstr "Sartu karpeta" #: ../../qt4/settingsdialog.py:1572 msgid "Are you sure you want to change snapshots folder ?" msgstr "Seguru zaude aldatu nahi duzula babeskopien karpeta?" #: ../../qt4/settingsdialog.py:1688 msgid "enabled" msgstr "gaituta" #: ../../qt4/settingsdialog.py:1690 msgid "disabled" msgstr "ezgaituta" #: ../../qt4/settingsdialog.py:1715 msgid "Restore Settings" msgstr "Ezarpenak berreskuratu" #: ../../qt4/settingsdialog.py:1732 msgid " and add your user to group 'fuse'" msgstr " eta gehitu zure erabiltzailea 'fuse' taldera" #: ../../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 "" "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: " #: ../../qt4/snapshotsdialog.py:123 msgid "Deep check (more accurate, but slow)" msgstr "Egiaztatze sakona (zehaztasun handiagoa, baina motela)" #: ../../qt4/snapshotsdialog.py:144 msgid "Delete" msgstr "Ezabatu" #: ../../qt4/snapshotsdialog.py:148 msgid "Select All" msgstr "Hautatu denak" #: ../../qt4/snapshotsdialog.py:161 msgid "Diff" msgstr "Diff" #: ../../qt4/snapshotsdialog.py:172 msgid "Go To" msgstr "Joan hona:" #: ../../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" #: ../../qt4/snapshotsdialog.py:354 #, 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" #: ../../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" #: ../../qt4/snapshotsdialog.py:359 msgid "WARNING: This can not be revoked!" msgstr "ARGI IBILI: Honek ez dauka atzera bueltarik!" #: ../../qt4/snapshotsdialog.py:374 #, python-format msgid "Exclude \"%s\" from future snapshots?" msgstr "Baztertu \"%s\" hurrengo babeskopietan?" backintime-1.1.12/common/po/tr.po0000664000175000017500000011147012644767576016147 0ustar germargermar# Turkish translation for backintime # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the backintime package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \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" "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: 2016-01-11 17:52+0000\n" "X-Generator: Launchpad (build 17881)\n" #: ../../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:77 msgid "At every boot/reboot" msgstr "Her yeniden başlattığında" #: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Her 5 dakikada bir" #: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Her 10 dakikada bir" #: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "" #: ../../common/config.py:81 msgid "Every hour" msgstr "" #: ../../common/config.py:82 msgid "Every 2 hours" msgstr "" #: ../../common/config.py:83 msgid "Every 4 hours" msgstr "" #: ../../common/config.py:84 msgid "Every 6 hours" msgstr "" #: ../../common/config.py:85 msgid "Every 12 hours" msgstr "" #: ../../common/config.py:86 msgid "Custom Hours" msgstr "" #: ../../common/config.py:87 msgid "Every Day" msgstr "Her gün" #: ../../common/config.py:88 msgid "Repeatedly (anacron)" msgstr "" #: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "" #: ../../common/config.py:90 msgid "Every Week" msgstr "Her Hafta" #: ../../common/config.py:91 msgid "Every Month" msgstr "Her Ay" #: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Gün(ler)" #: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Hafta(lar)" #: ../../common/config.py:97 msgid "Year(s)" msgstr "Yıl(lar)" #: ../../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:129 msgid "Local" msgstr "" #: ../../common/config.py:130 msgid "SSH" msgstr "" #: ../../common/config.py:130 ../../common/config.py:132 #: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "" #: ../../common/config.py:131 msgid "Local encrypted" msgstr "" #: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "" #: ../../common/config.py:132 msgid "SSH encrypted" msgstr "" #: ../../common/config.py:135 msgid "Default" msgstr "" #: ../../common/config.py:136 msgid "AES128-CTR" msgstr "" #: ../../common/config.py:137 msgid "AES192-CTR" msgstr "" #: ../../common/config.py:138 msgid "AES256-CTR" msgstr "" #: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "" #: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "" #: ../../common/config.py:141 msgid "AES128-CBC" msgstr "" #: ../../common/config.py:142 msgid "3DES-CBC" msgstr "" #: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "" #: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "" #: ../../common/config.py:145 msgid "AES192-CBC" msgstr "" #: ../../common/config.py:146 msgid "AES256-CBC" msgstr "" #: ../../common/config.py:147 msgid "ARCFOUR" msgstr "" #: ../../common/config.py:153 msgid "Main profile" msgstr "Ana profil" #: ../../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:289 msgid "Snapshots folder is not valid !" msgstr "Anlıkçekim klasörü geçerli değil !" #: ../../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:307 msgid "You can't include backup folder !" msgstr "Yedekleme klasörünü dahil edemezsiniz !" #: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "Yedekleme alt-klasörünü dahil edemezsiniz !" #: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "%s bir klasör değil !" #: ../../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 "" "Yazılamıyor: %s\n" "Yazma izniniz olduğuna emin misiniz ?" #: ../../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 "Uzman Seçenekleri" #: ../../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" "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:1411 msgid "Failed to write new crontab." msgstr "" #: ../../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/config.py:1517 #, python-format msgid "Schedule udev doesn't work with mode %s" msgstr "" #: ../../common/config.py:1526 #, python-format msgid "Couldn't find UUID for \"%s\"" msgstr "" #: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" "\n" "%(error)s" msgstr "" #: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "" #: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "" #: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" #: ../../common/encfstools.py:171 msgid "Cancel" msgstr "" #: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "" #: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "" #: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" #: ../../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 "" #: ../../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:512 ../../common/snapshots.py:1131 #: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "Anlık durum al" #: ../../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:259 #, python-format msgid "mountpoint %s not empty." msgstr "" #: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" #: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" #: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Şimdi" #: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "HATALARLA!" #: ../../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:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "" #: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "" #: ../../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" "Your old snapshots can be moved according to this new format. OK?" msgstr "" "Back In Time yedekleme formatını değiştirdi.\n" "\n" "Eski yedekleme görüntüleri yeni formata göre taşınabilir. Tamam mı?" #: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" "\n" "The 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)" msgstr "" "%s profil bulundu. \n" "Yeni yedekleme formatı aynı konumdaki farklı kullanıcıların ve profillerin " "depolama konumlarını destekliyor. Her iki profil içinde aynı konumu istiyor " "musunuz? \n" "Program ikisine ait dosyaları ayıracaktır." #: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" msgstr "" "Hiçbir profil bulunamadı. Önce profillerin güncellenmesi gerekiyor. Lütfen " "Back In Time'ı yeniden başlatın." #: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" "of profile %(profile_id)s are not moved to their new location\n" "Do 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" "\n" "If not Back In Time will restore former settings for this profile, however " "cannot continue taking snapshots" msgstr "" #: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" "Back In Time cannot continue taking new snapshots.\n" "\n" "You can manually move the snapshots, \n" "if you are done restart Back In Time to proceed" msgstr "" "%s profilinin önceki ayarları geri yüklendi.\n" "Back In Time yeni yedek görüntüleri almaya devam edemiyor.\n" "\n" "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:936 msgid "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" msgstr "" "Güncelleme başarıyla tamamlandı!\n" "\n" "Back In Time, önceden belirlediğiniz zamanlarda yedek görüntüleri almaya " "devam edecek" #: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" "\n" "If 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" "\n" "If you do not, you will be asked again next time you start Back In Time." msgstr "" "Eski yedek görüntülerini taşımak istediğinizden emin misiniz?\n" "\n" "\n" "Bunu yaparsanız, bu soruları bir dahaki sefer tekrar görmeyeceksiniz, Back " "in Time tekrar yedek görüntüleri alamya devam edecek fakat akıllı-temizleme " "sırasında eski yedek görüntüleri temizlenmeyecek.\n" "\n" "Eğer yapmazsanız, Back In Time bir dahaki sefer yeniden başlatıldığında " "tekrar sorulacaktır." #: ../../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: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: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:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "%s saniye bekliyor." #: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "" #: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "Bitiriyor" #: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "Dizin oluşturulamadı: %s" #: ../../common/snapshots.py:1217 msgid "..." msgstr "..." #: ../../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:1340 #, python-format msgid "Compare with snapshot %s" msgstr "%s anlık durumu ile karşılaştır" #: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "Sabit-bağlantılar oluştur" #: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "" #: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "... iznini kaydet" #: ../../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:1695 ../../common/snapshots.py:1728 #: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "Akıllı kaldırma" #: ../../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:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" #: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "" #: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "" #: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" #: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" #: ../../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:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" #: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" #: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" #: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" #: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" #: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" #: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" #: ../../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 "" #: ../../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 "" #: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "" #: ../../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 "" #: ../../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" #: ../../qt4/app.py:122 msgid "Config File Help" msgstr "" #: ../../qt4/app.py:125 msgid "Website" msgstr "Web sitesi" #: ../../qt4/app.py:127 ../../qt4/app.py:982 msgid "Changelog" msgstr "" #: ../../qt4/app.py:129 msgid "FAQ" msgstr "" #: ../../qt4/app.py:131 msgid "Ask a question" msgstr "" #: ../../qt4/app.py:133 msgid "Report a bug" msgstr "" #: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "Hakkında" #: ../../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" #: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 #: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "" #: ../../qt4/app.py:194 msgid "Restore and delete new files" msgstr "" #: ../../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 "" #: ../../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 "" #: ../../qt4/app.py:224 msgid "View" msgstr "" #: ../../qt4/app.py:277 msgid "Shortcuts" msgstr "Kısayollar" #: ../../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" msgstr "" "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" #: ../../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 "Çalışıyor:" #: ../../qt4/app.py:695 msgid "Done, no backup needed" msgstr "Bitti, yedekleme gerekmiyor" #: ../../qt4/app.py:707 msgid "Error:" msgstr "Hata:" #: ../../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" #: ../../qt4/app.py:778 msgid "Root" msgstr "Kök Dizini" #: ../../qt4/app.py:779 msgid "Home" msgstr "" #: ../../qt4/app.py:794 msgid "Backup folders" msgstr "Yedekleme klasörleri" #: ../../qt4/app.py:849 msgid "This is NOT a snapshot but a live view of your local files" msgstr "" #: ../../qt4/app.py:860 ../../qt4/app.py:1476 #, python-format msgid "Last check %s" msgstr "" #: ../../qt4/app.py:928 #, python-format msgid "" "Are you sure you want to remove the snapshot:\n" "%s" msgstr "" #: ../../qt4/app.py:1004 #, python-format msgid "" "Backup local files before overwriting or\n" "removing with trailing '%(suffix)s'." msgstr "" #: ../../qt4/app.py:1010 msgid "" "Are you sure you want to remove all newer files in your original folder?" msgstr "" #: ../../qt4/app.py:1014 msgid "" "WARNING: deleting files in filesystem root could break your whole system!!!" msgstr "" #: ../../qt4/app.py:1016 msgid "Files to be restored:" msgstr "" #: ../../qt4/app.py:1031 msgid "Do you really want to restore this files(s):" msgstr "" #: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" 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" #: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "Şu andaki disk içeriğini görüntüle" #: ../../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 "" #: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 msgid "All" msgstr "" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 #: ../../qt4/settingsdialog.py:657 msgid "Errors" msgstr "" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 msgid "Changes" msgstr "" #: ../../qt4/logviewdialog.py:92 msgid "Informations" msgstr "" #: ../../qt4/logviewdialog.py:101 msgid "[E] Error, [I] Information, [C] Change" msgstr "" #: ../../qt4/logviewdialog.py:104 msgid "decode paths" msgstr "" #: ../../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 "Çalışıyor..." #: ../../qt4/qt4tools.py:178 msgid "Today" msgstr "Bugün" #: ../../qt4/qt4tools.py:183 msgid "Yesterday" msgstr "Dün" #: ../../qt4/qt4tools.py:188 msgid "This week" msgstr "Bu hafta" #: ../../qt4/qt4tools.py:193 msgid "Last week" msgstr "Geçen hafta" #: ../../qt4/restoredialog.py:75 msgid "Show full Log" msgstr "" #: ../../qt4/settingsdialog.py:68 msgid "Edit" msgstr "Düzenle" #: ../../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" #: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:145 msgid "Folder" msgstr "" #: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" #: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "" #: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "" #: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "" #: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" #: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" #: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "" #: ../../qt4/settingsdialog.py:201 msgid "Key File" msgstr "" #: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 #: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "" #: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" #: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" #: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "" #: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 msgid "Full snapshot path: " msgstr "" #: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "Zamanlama" #: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "" #: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "" #: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "Saat:" #: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "" #: ../../qt4/settingsdialog.py:339 msgid "" "Run Back In Time repeatedly. This is useful if the computer is not running " "regular." msgstr "" #: ../../qt4/settingsdialog.py:344 msgid "Every:" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Dahil et" #: ../../qt4/settingsdialog.py:381 msgid "Include files and folders" msgstr "" #: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "Dosya ekle" #: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Klasör ekle" #: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:425 msgid "Exclude patterns, files or folders" msgstr "" #: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "" #: ../../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" #: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "Daha eski:" #: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "Eğer boş alan daha az ise:" #: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" #: ../../qt4/settingsdialog.py:551 msgid "Run in background on remote Host." msgstr "" #: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "" #: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "" #: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "" #: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "" #: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "" #: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "" #: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "" #: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "" #: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "" #: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Seçenekler" #: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Bildirimleri etkinleştir" #: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "" #: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" 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 "" #: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "" #: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "" #: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "" #: ../../qt4/settingsdialog.py:634 msgid "" "- snapshots are not read-only\n" "- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "" #: ../../qt4/settingsdialog.py:656 msgid "None" msgstr "" #: ../../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 "" #: ../../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 "" #: ../../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 "" #: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" #: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "" #: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "" #: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute 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 "Profili yeniden adlandır" #: ../../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 ?" #: ../../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 "Dosyayı dahil et" #: ../../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 "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 "" #: ../../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 "" #: ../../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 "" #: ../../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 "" #: ../../qt4/snapshotsdialog.py:148 msgid "Select All" msgstr "" #: ../../qt4/snapshotsdialog.py:161 msgid "Diff" msgstr "" #: ../../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 "" "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 "" backintime-1.1.12/common/po/messages.pot0000664000175000017500000010271412644767576017516 0ustar germargermar# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \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" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: ../../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:77 msgid "At every boot/reboot" msgstr "" #: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "" #: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "" #: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "" #: ../../common/config.py:81 msgid "Every hour" msgstr "" #: ../../common/config.py:82 msgid "Every 2 hours" msgstr "" #: ../../common/config.py:83 msgid "Every 4 hours" msgstr "" #: ../../common/config.py:84 msgid "Every 6 hours" msgstr "" #: ../../common/config.py:85 msgid "Every 12 hours" msgstr "" #: ../../common/config.py:86 msgid "Custom Hours" msgstr "" #: ../../common/config.py:87 msgid "Every Day" msgstr "" #: ../../common/config.py:88 msgid "Repeatedly (anacron)" msgstr "" #: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "" #: ../../common/config.py:90 msgid "Every Week" msgstr "" #: ../../common/config.py:91 msgid "Every Month" msgstr "" #: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "" #: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "" #: ../../common/config.py:97 msgid "Year(s)" msgstr "" #: ../../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:129 msgid "Local" msgstr "" #: ../../common/config.py:130 msgid "SSH" msgstr "" #: ../../common/config.py:130 ../../common/config.py:132 #: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "" #: ../../common/config.py:131 msgid "Local encrypted" msgstr "" #: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "" #: ../../common/config.py:132 msgid "SSH encrypted" msgstr "" #: ../../common/config.py:135 msgid "Default" msgstr "" #: ../../common/config.py:136 msgid "AES128-CTR" msgstr "" #: ../../common/config.py:137 msgid "AES192-CTR" msgstr "" #: ../../common/config.py:138 msgid "AES256-CTR" msgstr "" #: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "" #: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "" #: ../../common/config.py:141 msgid "AES128-CBC" msgstr "" #: ../../common/config.py:142 msgid "3DES-CBC" msgstr "" #: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "" #: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "" #: ../../common/config.py:145 msgid "AES192-CBC" msgstr "" #: ../../common/config.py:146 msgid "AES256-CBC" msgstr "" #: ../../common/config.py:147 msgid "ARCFOUR" msgstr "" #: ../../common/config.py:153 msgid "Main profile" msgstr "" #: ../../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:289 msgid "Snapshots folder is not valid !" msgstr "" #: ../../common/config.py:296 msgid "You must select at least one folder to backup !" msgstr "" #: ../../common/config.py:307 msgid "You can't include backup folder !" msgstr "" #: ../../common/config.py:312 msgid "You can't include a backup sub-folder !" msgstr "" #: ../../common/config.py:371 #, python-format msgid "%s is not a folder !" msgstr "" #: ../../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: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" "If not you should disable all automatic backups." msgstr "" #: ../../common/config.py:1411 msgid "Failed to write new crontab." msgstr "" #: ../../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/config.py:1517 #, python-format msgid "Schedule udev doesn't work with mode %s" msgstr "" #: ../../common/config.py:1526 #, python-format msgid "Couldn't find UUID for \"%s\"" msgstr "" #: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" "\n" "%(error)s" msgstr "" #: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "" #: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "" #: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" #: ../../common/encfstools.py:171 msgid "Cancel" msgstr "" #: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "" #: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "" #: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" #: ../../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 "" #: ../../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:512 ../../common/snapshots.py:1131 #: ../../common/snapshots.py:1388 ../../qt4/app.py:78 msgid "Take snapshot" msgstr "" #: ../../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:259 #, python-format msgid "mountpoint %s not empty." msgstr "" #: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" #: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" #: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "" #: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "" #: ../../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:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "" #: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "" #: ../../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:868 #, python-format msgid "" "%s profiles found. \n" "\n" "The 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)" msgstr "" #: ../../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:918 #, python-format msgid "" "%(snapshots_left)s\n" "of profile %(profile_id)s are not moved to their new location\n" "Do 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" "\n" "If not Back In Time will restore former settings for this profile, however " "cannot continue taking snapshots" msgstr "" #: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" "Back In Time cannot continue taking new snapshots.\n" "\n" "You can manually move the snapshots, \n" "if you are done restart Back In Time to proceed" msgstr "" #: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" msgstr "" #: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" "\n" "If 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" "\n" "If you do not, you will be asked again next time you start Back In Time." msgstr "" #: ../../common/snapshots.py:951 msgid "Back In Time will continue taking snapshots again as scheduled" msgstr "" #: ../../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: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:1037 #, python-format msgid "Waiting %s second." msgid_plural "Waiting %s seconds." msgstr[0] "" msgstr[1] "" #: ../../common/snapshots.py:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "" #: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "" #: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "" #: ../../common/snapshots.py:1217 msgid "..." msgstr "" #: ../../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:1340 #, python-format msgid "Compare with snapshot %s" msgstr "" #: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "" #: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "" #: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "" #: ../../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:1695 ../../common/snapshots.py:1728 #: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "" #: ../../common/snapshots.py:1704 msgid "Remove old snapshots" msgstr "" #: ../../common/snapshots.py:1733 msgid "Try to keep min free space" msgstr "" #: ../../common/snapshots.py:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" #: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "" #: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "" #: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" #: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" #: ../../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:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" #: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" #: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" #: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" #: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" #: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" #: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" #: ../../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 "" #: ../../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 "" #: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" 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 "" #: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 msgid "Help" msgstr "" #: ../../qt4/app.py:122 msgid "Config File Help" msgstr "" #: ../../qt4/app.py:125 msgid "Website" msgstr "" #: ../../qt4/app.py:127 ../../qt4/app.py:982 msgid "Changelog" msgstr "" #: ../../qt4/app.py:129 msgid "FAQ" msgstr "" #: ../../qt4/app.py:131 msgid "Ask a question" msgstr "" #: ../../qt4/app.py:133 msgid "Report a bug" msgstr "" #: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "" #: ../../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 "" #: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 #: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "" #: ../../qt4/app.py:194 msgid "Restore and delete new files" msgstr "" #: ../../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 "" #: ../../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 "" #: ../../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" 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 "" #: ../../qt4/app.py:667 ../../qt4/app.py:703 msgid "Working:" msgstr "" #: ../../qt4/app.py:695 msgid "Done, no backup needed" msgstr "" #: ../../qt4/app.py:707 msgid "Error:" msgstr "" #: ../../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 "" #: ../../qt4/app.py:778 msgid "Root" msgstr "" #: ../../qt4/app.py:779 msgid "Home" msgstr "" #: ../../qt4/app.py:794 msgid "Backup folders" msgstr "" #: ../../qt4/app.py:849 msgid "This is NOT a snapshot but a live view of your local files" msgstr "" #: ../../qt4/app.py:860 ../../qt4/app.py:1476 #, python-format msgid "Last check %s" msgstr "" #: ../../qt4/app.py:928 #, python-format msgid "" "Are you sure you want to remove the snapshot:\n" "%s" msgstr "" #: ../../qt4/app.py:1004 #, python-format msgid "" "Backup local files before overwriting or\n" "removing with trailing '%(suffix)s'." msgstr "" #: ../../qt4/app.py:1010 msgid "" "Are you sure you want to remove all newer files in your original folder?" msgstr "" #: ../../qt4/app.py:1014 msgid "" "WARNING: deleting files in filesystem root could break your whole system!!!" msgstr "" #: ../../qt4/app.py:1016 msgid "Files to be restored:" msgstr "" #: ../../qt4/app.py:1031 msgid "Do you really want to restore this files(s):" msgstr "" #: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "" #: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "" #: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "" #: ../../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 "" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 #: ../../qt4/settingsdialog.py:657 msgid "Errors" msgstr "" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 msgid "Changes" msgstr "" #: ../../qt4/logviewdialog.py:92 msgid "Informations" msgstr "" #: ../../qt4/logviewdialog.py:101 msgid "[E] Error, [I] Information, [C] Change" msgstr "" #: ../../qt4/logviewdialog.py:104 msgid "decode paths" msgstr "" #: ../../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 "" #: ../../qt4/qt4tools.py:178 msgid "Today" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:68 msgid "Edit" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:145 msgid "Folder" msgstr "" #: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "" #: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "" #: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "" #: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "" #: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" #: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" #: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "" #: ../../qt4/settingsdialog.py:201 msgid "Key File" msgstr "" #: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 #: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "" #: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" #: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" #: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "" #: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 msgid "Full snapshot path: " msgstr "" #: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "" #: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "" #: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "" #: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "" #: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "" #: ../../qt4/settingsdialog.py:339 msgid "" "Run Back In Time repeatedly. This is useful if the computer is not running " "regular." msgstr "" #: ../../qt4/settingsdialog.py:344 msgid "Every:" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "" #: ../../qt4/settingsdialog.py:381 msgid "Include files and folders" msgstr "" #: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "" #: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "" #: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:425 msgid "Exclude patterns, files or folders" msgstr "" #: ../../qt4/settingsdialog.py:441 msgid "Highly recommended:" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "" #: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "" #: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" #: ../../qt4/settingsdialog.py:551 msgid "Run in background on remote Host." msgstr "" #: ../../qt4/settingsdialog.py:554 msgid "Keep all snapshots for the last" msgstr "" #: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "" #: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "" #: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "" #: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "" #: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "" #: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "" #: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "" #: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "" #: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "" #: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "" #: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "" #: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" 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 "" #: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "" #: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "" #: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "" #: ../../qt4/settingsdialog.py:634 msgid "" "- snapshots are not read-only\n" "- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "" #: ../../qt4/settingsdialog.py:656 msgid "None" msgstr "" #: ../../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 "" #: ../../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 "" #: ../../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 "" #: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" #: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "" #: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "" #: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute 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 "" #: ../../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 "" #: ../../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 "" #: ../../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 "" #: ../../qt4/snapshotsdialog.py:106 msgid "List only different snapshots" msgstr "" #: ../../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 "" #: ../../qt4/snapshotsdialog.py:148 msgid "Select All" msgstr "" #: ../../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 "" #: ../../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 "" backintime-1.1.12/common/po/en_GB.po0000664000175000017500000012252212644767576016474 0ustar germargermar# English (United Kingdom) translation for backintime # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the backintime package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: FULL NAME \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: 2016-01-11 17:52+0000\n" "X-Generator: Launchpad (build 17881)\n" #: ../../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:77 msgid "At every boot/reboot" msgstr "At every boot/reboot" #: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Every 5 minutes" #: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Every 10 minutes" #: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "Every 30 minutes" #: ../../common/config.py:81 msgid "Every hour" msgstr "Every hour" #: ../../common/config.py:82 msgid "Every 2 hours" msgstr "Every 2 hours" #: ../../common/config.py:83 msgid "Every 4 hours" msgstr "Every 4 hours" #: ../../common/config.py:84 msgid "Every 6 hours" msgstr "Every 6 hours" #: ../../common/config.py:85 msgid "Every 12 hours" msgstr "Every 12 hours" #: ../../common/config.py:86 msgid "Custom Hours" msgstr "Custom Hours" #: ../../common/config.py:87 msgid "Every Day" msgstr "Every Day" #: ../../common/config.py:88 msgid "Repeatedly (anacron)" msgstr "" #: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "When drive get connected (udev)" #: ../../common/config.py:90 msgid "Every Week" msgstr "Every Week" #: ../../common/config.py:91 msgid "Every Month" msgstr "Every Month" #: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Day(s)" #: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Week(s)" #: ../../common/config.py:97 msgid "Year(s)" msgstr "Year(s)" #: ../../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:129 msgid "Local" msgstr "Local" #: ../../common/config.py:130 msgid "SSH" msgstr "SSH" #: ../../common/config.py:130 ../../common/config.py:132 #: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "SSH private key" #: ../../common/config.py:131 msgid "Local encrypted" msgstr "Local encrypted" #: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "Encryption" #: ../../common/config.py:132 msgid "SSH encrypted" msgstr "SSH encrypted" #: ../../common/config.py:135 msgid "Default" msgstr "Default" #: ../../common/config.py:136 msgid "AES128-CTR" msgstr "AES128-CTR" #: ../../common/config.py:137 msgid "AES192-CTR" msgstr "AES192-CTR" #: ../../common/config.py:138 msgid "AES256-CTR" msgstr "AES256-CTR" #: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "ARCFOUR256" #: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "ARCFOUR128" #: ../../common/config.py:141 msgid "AES128-CBC" msgstr "AES128-CBC" #: ../../common/config.py:142 msgid "3DES-CBC" msgstr "3DES-CBC" #: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "Blowfish-CBC" #: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "Cast128-CBC" #: ../../common/config.py:145 msgid "AES192-CBC" msgstr "AES192-CBC" #: ../../common/config.py:146 msgid "AES256-CBC" msgstr "AES256-CBC" #: ../../common/config.py:147 msgid "ARCFOUR" msgstr "ARCFOUR" #: ../../common/config.py:153 msgid "Main profile" msgstr "Main profile" #: ../../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:289 msgid "Snapshots folder is not valid !" msgstr "Snapshots folder is not valid!" #: ../../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:307 msgid "You can't include backup folder !" msgstr "You can't include the backup folder!" #: ../../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:371 #, python-format msgid "%s is not a folder !" msgstr "%s is not a folder!" #: ../../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 "" "Can't write to: %s\n" "Are you sure you have write access?" #: ../../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" "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:1411 msgid "Failed to write new crontab." msgstr "" #: ../../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/config.py:1517 #, python-format msgid "Schedule udev doesn't work with mode %s" msgstr "Schedule udev doesn't work with mode %s" #: ../../common/config.py:1526 #, python-format msgid "Couldn't find UUID for \"%s\"" msgstr "Couldn't find UUID for \"%s\"" #: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" "\n" "%(error)s" msgstr "" "Can't mount '%(command)s':\n" "\n" "%(error)s" #: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "Can't unmount encfs %s" #: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "Config for encrypted folder not found." #: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" "\n" "Create a new encrypted folder?" #: ../../common/encfstools.py:171 msgid "Cancel" msgstr "Cancel" #: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "Please confirm password" #: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "Password doesn't match" #: ../../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: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 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." #: ../../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 and before has a bug with option --reverse. Please " "update encfs" #: ../../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:204 #, python-format msgid "" "Hash collision occurred in hash_id %s. Incrementing global value " "hash_collision and try again." msgstr "" "Hash collision occurred in hash_id %s. Incrementing global value " "hash_collision and try again." #: ../../common/mount.py:259 #, python-format msgid "mountpoint %s not empty." msgstr "mountpoint %s not empty." #: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "Mountprocess lock timeout" #: ../../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:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Now" #: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "WITH ERRORS !" #: ../../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 "" "### 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:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "FAILED" #: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "Restore permissions:" #: ../../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 "" "Back In Time changed its backup format.\n" "\n" "Your old snapshots can be moved according to this new format. OK?" #: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" "\n" "The 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)" msgstr "" "%s profiles found. \n" "\n" "The new backup format supports storage of different users and profiles in " "the same location. Do you want the same location for both profiles? \n" "\n" "(The program will still be able to discriminate between them)" #: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" msgstr "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" #: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" "of profile %(profile_id)s are not moved to their new location\n" "Do 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" "\n" "If not Back In Time will restore former settings for this profile, however " "cannot continue taking snapshots" msgstr "" "%(snapshots_left)s\n" "of profile %(profile_id)s are not moved to their new location\n" "Do 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" "\n" "If not Back In Time will restore former settings for this profile, however " "cannot continue taking snapshots" #: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" "Back In Time cannot continue taking new snapshots.\n" "\n" "You can manually move the snapshots, \n" "if you are done restart Back In Time to proceed" msgstr "" "Former settings of profile %s are restored.\n" "Back In Time cannot continue taking new snapshots.\n" "\n" "You can manually move the snapshots, \n" "if you are done restart Back In Time to proceed" #: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" msgstr "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" #: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" "\n" "If 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" "\n" "If you do not, you will be asked again next time you start Back In Time." msgstr "" "Are you sure you do not want to move your old snapshots?\n" "\n" "\n" "If 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" "\n" "If you do not, you will be asked again next time you start Back In Time." #: ../../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: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 still cannot continue taking new snapshots.\n" "Restart Back In Time to see the questions again" #: ../../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 "" "Can't find snapshots folder.\n" "If it is on a removable drive, please plug it in." #: ../../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:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "Failed to take snapshot %s !!!" #: ../../common/snapshots.py:1072 msgid "Finalizing" msgstr "Finalising" #: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "Can't create folder: %s" #: ../../common/snapshots.py:1217 msgid "..." msgstr "..." #: ../../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:1340 #, python-format msgid "Compare with snapshot %s" msgstr "Compare with snapshot %s" #: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "Create hard-links" #: ../../common/snapshots.py:1439 msgid "Save config file ..." msgstr "Save config file..." #: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "Save permission..." #: ../../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:1695 ../../common/snapshots.py:1728 #: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "Smart remove" #: ../../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:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "Try to keep min %d%% free inodes" #: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "Can't mount %s" #: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "Can't unmount sshfs %s" #: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." #: ../../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:278 #, python-format msgid "" "Password-less authentication for %(user)s@%(host)s failed. Look at 'man " "backintime' for further instructions." msgstr "" "Password-less authentication for %(user)s@%(host)s failed. Look at 'man " "backintime' for further instructions." #: ../../common/sshtools.py:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" #: ../../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:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" "Remote path exists but is not a directory:\n" " %s" #: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" "Remote path is not writeable:\n" " %s" #: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" "Remote path is not executable:\n" " %s" #: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" "Couldn't create remote path:\n" " %s" #: ../../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: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 "" "Remote host %(host)s doesn't support '%(command)s':\n" "%(err)s\n" "Look at 'man backintime' for further instructions" #: ../../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 "" "Check commands on host %(host)s returned unknown error:\n" "%(err)s\n" "Look at 'man backintime' for further instructions" #: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "Remote host %s doesn't support hardlinks" #: ../../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" #: ../../qt4/app.py:120 ../../qt4/app.py:139 ../../qt4/app.py:243 msgid "Help" msgstr "Help" #: ../../qt4/app.py:122 msgid "Config File Help" msgstr "" #: ../../qt4/app.py:125 msgid "Website" msgstr "Website" #: ../../qt4/app.py:127 ../../qt4/app.py:982 msgid "Changelog" msgstr "" #: ../../qt4/app.py:129 msgid "FAQ" msgstr "FAQ" #: ../../qt4/app.py:131 msgid "Ask a question" msgstr "Ask a question" #: ../../qt4/app.py:133 msgid "Report a bug" msgstr "Report a bug" #: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "About" #: ../../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" #: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 #: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "Restore to..." #: ../../qt4/app.py:194 msgid "Restore and delete new files" msgstr "" #: ../../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 "" #: ../../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 "" #: ../../qt4/app.py:224 msgid "View" msgstr "" #: ../../qt4/app.py:277 msgid "Shortcuts" msgstr "Shortcuts" #: ../../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" msgstr "" "Can't find snapshots folder.\n" "If it is on a removable drive, please plug it in and then press OK." #: ../../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?" #: ../../qt4/app.py:667 ../../qt4/app.py:703 msgid "Working:" msgstr "Working:" #: ../../qt4/app.py:695 msgid "Done, no backup needed" msgstr "Done, no backup needed" #: ../../qt4/app.py:707 msgid "Error:" msgstr "Error:" #: ../../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" #: ../../qt4/app.py:778 msgid "Root" msgstr "Root" #: ../../qt4/app.py:779 msgid "Home" msgstr "Home" #: ../../qt4/app.py:794 msgid "Backup folders" msgstr "Backup folders" #: ../../qt4/app.py:849 msgid "This is NOT a snapshot but a live view of your local files" msgstr "" #: ../../qt4/app.py:860 ../../qt4/app.py:1476 #, python-format msgid "Last check %s" msgstr "" #: ../../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?" #: ../../qt4/app.py:1004 #, python-format msgid "" "Backup local files before overwriting or\n" "removing with trailing '%(suffix)s'." msgstr "" #: ../../qt4/app.py:1010 msgid "" "Are you sure you want to remove all newer files in your original folder?" msgstr "" #: ../../qt4/app.py:1014 msgid "" "WARNING: deleting files in filesystem root could break your whole system!!!" msgstr "" #: ../../qt4/app.py:1016 msgid "Files to be restored:" msgstr "" #: ../../qt4/app.py:1031 msgid "Do you really want to restore this files(s):" msgstr "" #: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "Snapshot: %s" #: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "View the snapshot made at %s" #: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "View the current disk content" #: ../../qt4/app.py:1268 #, python-format msgid "Restore '%s'" msgstr "Restore '%s'" #: ../../qt4/app.py:1269 #, python-format msgid "Restore '%s' to ..." msgstr "Restore '%s' to..." #: ../../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 "Profile:" #: ../../qt4/logviewdialog.py:81 msgid "Filter:" msgstr "Filter:" #: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 msgid "All" msgstr "All" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 #: ../../qt4/settingsdialog.py:657 msgid "Errors" msgstr "Errors" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 msgid "Changes" msgstr "Changes" #: ../../qt4/logviewdialog.py:92 msgid "Informations" msgstr "Information" #: ../../qt4/logviewdialog.py:101 msgid "[E] Error, [I] Information, [C] Change" msgstr "[E] Error, [I] Information, [C] Change" #: ../../qt4/logviewdialog.py:104 msgid "decode paths" msgstr "decode paths" #: ../../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 "Working…" #: ../../qt4/qt4tools.py:178 msgid "Today" msgstr "Today" #: ../../qt4/qt4tools.py:183 msgid "Yesterday" msgstr "Yesterday" #: ../../qt4/qt4tools.py:188 msgid "This week" msgstr "This week" #: ../../qt4/qt4tools.py:193 msgid "Last week" msgstr "Last week" #: ../../qt4/restoredialog.py:75 msgid "Show full Log" msgstr "" #: ../../qt4/settingsdialog.py:68 msgid "Edit" msgstr "Edit" #: ../../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" #: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "Mode:" #: ../../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" #: ../../qt4/settingsdialog.py:145 msgid "Folder" msgstr "" #: ../../qt4/settingsdialog.py:153 msgid "SSH Settings" msgstr "SSH Settings" #: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "Host:" #: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "Port:" #: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "User:" #: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "Path:" #: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "Cipher:" #: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "Private Key:" #: ../../qt4/settingsdialog.py:201 msgid "Key File" msgstr "" #: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 #: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "Password" #: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "Save Password to Keyring" #: ../../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)" #: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "Advanced" #: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 msgid "Full snapshot path: " msgstr "" #: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "Schedule" #: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "Day:" #: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "Weekday:" #: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "Hour:" #: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "Hours:" #: ../../qt4/settingsdialog.py:339 msgid "" "Run Back In Time repeatedly. This is useful if the computer is not running " "regular." msgstr "" #: ../../qt4/settingsdialog.py:344 msgid "Every:" msgstr "" #: ../../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 "" "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." #: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Include" #: ../../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" #: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Add folder" #: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Exclude" #: ../../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: Wildcards ('foo*', '[fF]oo', 'fo?') will be ignored with " "mode 'SSH encrypted'.\n" "Only separate asterisk are allowed ('foo/*', 'foo/**/bar')" #: ../../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:" #: ../../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" #: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "Older than:" #: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "If free space is less than:" #: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "If free inodes is less than:" #: ../../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" #: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "day(s)" #: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "Keep one snapshot per day for the last" #: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "Keep one snapshot per week for the last" #: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "weeks(s)" #: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "Keep one snapshot per month for the last" #: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "month(s)" #: ../../qt4/settingsdialog.py:578 msgid "Keep one snapshot per year for all years" msgstr "Keep one snapshot per year for all years" #: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "Don't remove named snapshots" #: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Options" #: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Enable notifications" #: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "Disable snapshots when on battery" #: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" msgstr "Power status not available from system" #: ../../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 "" #: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "Continue on errors (keep incomplete snapshots)" #: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "Use checksum to detect changes" #: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "Full rsync mode. May be faster but:" #: ../../qt4/settingsdialog.py:634 msgid "" "- snapshots are not read-only\n" "- destination file-system must support all Linux attributes (dates, rights, " "user, group ...)" msgstr "" #: ../../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)" #: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "Log Level:" #: ../../qt4/settingsdialog.py:656 msgid "None" msgstr "None" #: ../../qt4/settingsdialog.py:658 msgid "Changes & Errors" msgstr "Changes & Errors" #: ../../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!" #: ../../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 "" #: ../../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: " #: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr " KB/sec" #: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "Preserve ACL" #: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "Preserve extended attributes (xattr)" #: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute links)" msgstr "Copy unsafe links (works only with absolute links)" #: ../../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 "New profile" #: ../../qt4/settingsdialog.py:938 msgid "Rename profile" msgstr "Rename profile" #: ../../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\"?" #: ../../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" #: ../../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" #: ../../qt4/settingsdialog.py:1525 msgid "Include file" msgstr "Include file" #: ../../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 "Include folder" #: ../../qt4/settingsdialog.py:1572 msgid "Are you sure you want to change snapshots folder ?" msgstr "Are you sure you want to change snapshots folder?" #: ../../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 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" #: ../../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 "" "Do you really want to delete \"%(file)s\" in snapshot \"%(snapshot_id)s?\n" msgstr "" "Do you really want to delete \"%(file)s\" in snapshot \"%(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 "Do you really want to delete \"%(file)s\" in %(count)d snapshots?\n" #: ../../qt4/snapshotsdialog.py:359 msgid "WARNING: This can not be revoked!" msgstr "WARNING: This can not be revoked!" #: ../../qt4/snapshotsdialog.py:374 #, python-format msgid "Exclude \"%s\" from future snapshots?" msgstr "Exclude \"%s\" from future snapshots?" backintime-1.1.12/common/po/es.po0000664000175000017500000011613212644767576016131 0ustar germargermar# Spanish translation of Backintime. # Copyright (C) 2008-2009 Oprea Dan # This file is distributed under the same license as the Backintime package. # Francisco M. Garcia Claramonte , 2008-2009. # msgid "" msgstr "" "Project-Id-Version: backintime\n" "Report-Msgid-Bugs-To: \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: 2016-01-11 17:52+0000\n" "X-Generator: Launchpad (build 17881)\n" #: ../../common/config.py:95 ../../common/config.py:102 msgid "Day(s)" msgstr "Día(s)" #: ../../common/config.py:97 msgid "Year(s)" msgstr "Año(s)" #: ../../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 "" "No se pudo encontrar crontab.\n" "¿Está seguro de que cron está instalado?\n" "Si no, debe desactivar todas las copias automáticas." #: ../../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: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:1340 #, python-format msgid "Compare with snapshot %s" msgstr "Comparar con la instantánea %s" #: ../../common/snapshots.py:1360 msgid "Create hard-links" msgstr "Crear enlaces simbólicos fuertes" #: ../../common/snapshots.py:1695 ../../common/snapshots.py:1728 #: ../../qt4/settingsdialog.py:542 msgid "Smart remove" msgstr "Borrado inteligente" #: ../../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" #: ../../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" #: ../../qt4/app.py:277 msgid "Shortcuts" msgstr "Accesos directos" #: ../../qt4/app.py:695 msgid "Done, no backup needed" msgstr "Hecho, no se necesita una copia de respaldo" #: ../../qt4/app.py:778 msgid "Root" msgstr "Administrador" #: ../../qt4/app.py:928 #, 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?" #: ../../qt4/settingsdialog.py:129 ../../qt4/settingsdialog.py:1568 msgid "Where to save snapshots" msgstr "Dónde guardar las instantáneas:" #: ../../qt4/settingsdialog.py:400 ../../qt4/settingsdialog.py:455 msgid "Add file" msgstr "Añadir archivo" #: ../../qt4/settingsdialog.py:404 ../../qt4/settingsdialog.py:459 msgid "Add folder" msgstr "Añadir carpeta" #: ../../qt4/settingsdialog.py:585 msgid "Don't remove named snapshots" msgstr "No eliminar las instantáneas con nombre" #: ../../qt4/settingsdialog.py:602 msgid "Enable notifications" msgstr "Activar notificaciones" #: ../../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)" #: ../../qt4/snapshotsdialog.py:64 msgid "Use %1 and %2 for path parameters" msgstr "Usar %1 y %2 para los parámetros de ruta" #: ../../qt4/snapshotsdialog.py:161 msgid "Diff" msgstr "Diferencias" #: ../../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» 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:77 msgid "At every boot/reboot" msgstr "En cada arranque/reinicio" #: ../../common/config.py:78 msgid "Every 5 minutes" msgstr "Cada cinco minutos" #: ../../common/config.py:79 msgid "Every 10 minutes" msgstr "Cada diez minutos" #: ../../common/config.py:80 msgid "Every 30 minutes" msgstr "Cada 30 minutos" #: ../../common/config.py:81 msgid "Every hour" msgstr "Cada hora" #: ../../common/config.py:82 msgid "Every 2 hours" msgstr "Cada 2 horas" #: ../../common/config.py:83 msgid "Every 4 hours" msgstr "Cada 4 horas" #: ../../common/config.py:84 msgid "Every 6 hours" msgstr "Cada 6 horas" #: ../../common/config.py:85 msgid "Every 12 hours" msgstr "Cada 12 horas" #: ../../common/config.py:86 msgid "Custom Hours" msgstr "Horas personalizadas" #: ../../common/config.py:87 msgid "Every Day" msgstr "Cada día" #: ../../common/config.py:88 msgid "Repeatedly (anacron)" msgstr "" #: ../../common/config.py:89 msgid "When drive get connected (udev)" msgstr "Cuando la unidad sea conectada (udev)" #: ../../common/config.py:90 msgid "Every Week" msgstr "Cada semana" #: ../../common/config.py:91 msgid "Every Month" msgstr "Cada mes" #: ../../common/config.py:96 ../../common/config.py:103 msgid "Week(s)" msgstr "Semana(s)" #: ../../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:129 msgid "Local" msgstr "Local" #: ../../common/config.py:130 msgid "SSH" msgstr "SSH" #: ../../common/config.py:130 ../../common/config.py:132 #: ../../qt4/settingsdialog.py:1583 msgid "SSH private key" msgstr "Llave privada SSH" #: ../../common/config.py:131 msgid "Local encrypted" msgstr "Cifrado local" #: ../../common/config.py:131 ../../common/config.py:132 msgid "Encryption" msgstr "Encriptación" #: ../../common/config.py:132 msgid "SSH encrypted" msgstr "Encriptado SSH" #: ../../common/config.py:135 msgid "Default" msgstr "Por defecto" #: ../../common/config.py:136 msgid "AES128-CTR" msgstr "AES128-CTR" #: ../../common/config.py:137 msgid "AES192-CTR" msgstr "AES192-CTR" #: ../../common/config.py:138 msgid "AES256-CTR" msgstr "AES256-CTR" #: ../../common/config.py:139 msgid "ARCFOUR256" msgstr "ARCFOUR256" #: ../../common/config.py:140 msgid "ARCFOUR128" msgstr "ARCFOUR128" #: ../../common/config.py:141 msgid "AES128-CBC" msgstr "AES128-CBC" #: ../../common/config.py:142 msgid "3DES-CBC" msgstr "3DES-CBC" #: ../../common/config.py:143 msgid "Blowfish-CBC" msgstr "Blowfish-CBC" #: ../../common/config.py:144 msgid "Cast128-CBC" msgstr "Cast128-CBC" #: ../../common/config.py:145 msgid "AES192-CBC" msgstr "AES192-CBC" #: ../../common/config.py:146 msgid "AES256-CBC" msgstr "AES256-CBC" #: ../../common/config.py:147 msgid "ARCFOUR" msgstr "ARCFOUR" #: ../../common/config.py:153 msgid "Main profile" msgstr "Perfil principal" #: ../../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:289 msgid "Snapshots folder is not valid !" msgstr "La carpeta de instantáneas no es válida." #: ../../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:307 msgid "You can't include backup folder !" msgstr "No puede incluir una carpeta de copias de seguridad." #: ../../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:371 #, python-format msgid "%s is not a folder !" msgstr "%s no es una carpeta." #: ../../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 "" "No se puede escribir en: %s\n" "¿Está seguro de que tiene permiso de escritura?" #: ../../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 "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: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:1411 msgid "Failed to write new crontab." msgstr "" #: ../../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/config.py:1517 #, python-format msgid "Schedule udev doesn't work with mode %s" msgstr "" #: ../../common/config.py:1526 #, python-format msgid "Couldn't find UUID for \"%s\"" msgstr "No se pudo encontrar UUID para «%s»" #: ../../common/encfstools.py:104 #, python-format msgid "" "Can't mount '%(command)s':\n" "\n" "%(error)s" msgstr "" #: ../../common/encfstools.py:114 #, python-format msgid "Can't unmount encfs %s" msgstr "" #: ../../common/encfstools.py:166 msgid "Config for encrypted folder not found." msgstr "" #: ../../common/encfstools.py:170 msgid "" "\n" "Create a new encrypted folder?" msgstr "" #: ../../common/encfstools.py:171 msgid "Cancel" msgstr "" #: ../../common/encfstools.py:174 msgid "Please confirm password" msgstr "" #: ../../common/encfstools.py:178 msgid "Password doesn't match" msgstr "" #: ../../common/encfstools.py:185 msgid "encfs not found. Please install e.g. 'apt-get install encfs'" msgstr "" #: ../../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 "" #: ../../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:204 #, python-format msgid "" "Hash collision occurred in hash_id %s. Incrementing global value " "hash_collision and try again." msgstr "" #: ../../common/mount.py:259 #, python-format msgid "mountpoint %s not empty." msgstr "" #: ../../common/mount.py:296 msgid "Mountprocess lock timeout" msgstr "" #: ../../common/password.py:386 #, python-format msgid "Profile '%(profile)s': Enter password for %(mode)s: " msgstr "" #: ../../common/snapshots.py:185 ../../qt4/app.py:203 ../../qt4/app.py:1230 msgid "Now" msgstr "Ahora" #: ../../common/snapshots.py:196 msgid "WITH ERRORS !" msgstr "¡CON ERRORES!" #: ../../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:562 ../../common/snapshots.py:750 msgid "FAILED" msgstr "Falló" #: ../../common/snapshots.py:697 ../../common/snapshots.py:753 msgid "Restore permissions:" msgstr "Recuperar permisos" #: ../../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 ha cambiado su formato de respaldo.\n" "\n" "Sus antiguas instantáneas se pueden convertir al nuevo formato. ¿Está de " "acuerdo?" #: ../../common/snapshots.py:868 #, python-format msgid "" "%s profiles found. \n" "\n" "The 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)" msgstr "" "%s perfiles encontrados.\n" "\n" "El nuevo formato de respaldo soporta almacenamiento de diferentes usuarios y " "perfiles en la misma ubicación. ¿Quiere que tengan la misma ubicación ambos " "perfiles?\n" "\n" "(El programa aún podrá discriminar entre ellos)" #: ../../common/snapshots.py:871 msgid "" "No profiles are found. Will have to update to profiles first, please restart " "Back In Time" msgstr "" "No se han encontrado perfiles. Tendrá que actualizar los perfiles primero. " "Por favor, reinicie Back In Time" #: ../../common/snapshots.py:918 #, python-format msgid "" "%(snapshots_left)s\n" "of profile %(profile_id)s are not moved to their new location\n" "Do 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" "\n" "If not Back In Time will restore former settings for this profile, however " "cannot continue taking snapshots" msgstr "" #: ../../common/snapshots.py:926 #, python-format msgid "" "Former settings of profile %s are restored.\n" "Back In Time cannot continue taking new snapshots.\n" "\n" "You can manually move the snapshots, \n" "if you are done restart Back In Time to proceed" msgstr "" "La configuración antigua del perfil %s está restaurada.\n" "Back In Time no puede continuar tomando nuevas instantáneas.\n" "Puede manualmente mover las instantáneas,\n" "si lo ha hecho reinicie Back In Time para continuar" #: ../../common/snapshots.py:936 msgid "" "Update was successful!\n" "\n" "Back In Time will continue taking snapshots again as scheduled" msgstr "" "¡La actualización se ha realizado con éxito!\n" "\n" "Back In Time continuará de nuevo tomando instantáneas como se hayan " "programado" #: ../../common/snapshots.py:941 msgid "" "Are you sure you do not want to move your old snapshots?\n" "\n" "\n" "If 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" "\n" "If you do not, you will be asked again next time you start Back In Time." msgstr "" "¿Está seguro de no querer mover sus instantáneas antiguas?\n" "\n" "\n" "Si está seguro, no se le harán de nuevo estas preguntas. Back In Time " "continuará tomando instantáneas, pero smart-remove ya no tendrá en cuenta " "sus instantáneas antiguas\n" "\n" "Si no está seguro, se le preguntará la próxima vez que inicie Back In Time." #: ../../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: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 aún no puede continuar tomando nuevas instántaneas.\n" "Reinicie Back In Time para ver de nuevo las preguntas" #: ../../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 "" "No se pudo encontrar la carpeta de instantáneas.\n" "Si está en una unidad extraíble, por favor, conéctela." #: ../../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:1063 #, python-format msgid "Failed to take snapshot %s !!!" msgstr "Fallo al crear la instantánea %s" #: ../../common/snapshots.py:1201 #, python-format msgid "Can't create folder: %s" msgstr "No se puede crear carpeta: %s" #: ../../common/snapshots.py:1217 msgid "..." msgstr "..." #: ../../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:1439 msgid "Save config file ..." msgstr "Guardando el archivo de configuración..." #: ../../common/snapshots.py:1445 msgid "Save permission ..." msgstr "Salvando permisos..." #: ../../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:1770 #, python-format msgid "Try to keep min %d%% free inodes" msgstr "" #: ../../common/sshtools.py:128 #, python-format msgid "Can't mount %s" msgstr "" #: ../../common/sshtools.py:135 #, python-format msgid "Can't unmount sshfs %s" msgstr "" #: ../../common/sshtools.py:240 msgid "" "Could not unlock ssh private key. Wrong password or password not available " "for cron." msgstr "" #: ../../common/sshtools.py:251 msgid "sshfs not found. Please install e.g. 'apt-get install sshfs'" msgstr "" #: ../../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:298 #, python-format msgid "" "Cipher %(cipher)s failed for %(host)s:\n" "%(err)s" msgstr "" #: ../../common/sshtools.py:333 #, python-format msgid "%s not found in ssh_known_hosts." msgstr "" #: ../../common/sshtools.py:361 #, python-format msgid "" "Remote path exists but is not a directory:\n" " %s" msgstr "" #: ../../common/sshtools.py:363 #, python-format msgid "" "Remote path is not writeable:\n" " %s" msgstr "" #: ../../common/sshtools.py:365 #, python-format msgid "" "Remote path is not executable:\n" " %s" msgstr "" #: ../../common/sshtools.py:367 #, python-format msgid "" "Couldn't create remote path:\n" " %s" msgstr "" #: ../../common/sshtools.py:390 #, python-format msgid "Ping %s failed. Host is down or wrong address." msgstr "" #: ../../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 "" #: ../../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 "" #: ../../common/sshtools.py:571 #, python-format msgid "Remote host %s doesn't support hardlinks" msgstr "" #: ../../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" #: ../../qt4/app.py:122 msgid "Config File Help" msgstr "" #: ../../qt4/app.py:125 msgid "Website" msgstr "Sitio web" #: ../../qt4/app.py:127 ../../qt4/app.py:982 msgid "Changelog" msgstr "" #: ../../qt4/app.py:129 msgid "FAQ" msgstr "" #: ../../qt4/app.py:131 msgid "Ask a question" msgstr "" #: ../../qt4/app.py:133 msgid "Report a bug" msgstr "" #: ../../qt4/app.py:136 ../../qt4/app.py:1344 msgid "About" msgstr "Acerca de" #: ../../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" #: ../../qt4/app.py:186 ../../qt4/restoredialog.py:35 #: ../../qt4/snapshotsdialog.py:136 msgid "Restore to ..." msgstr "Recuperar en ..." #: ../../qt4/app.py:194 msgid "Restore and delete new files" msgstr "" #: ../../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 "" #: ../../qt4/app.py:206 ../../qt4/logviewdialog.py:67 #: ../../qt4/qt4tools.py:160 ../../qt4/snapshotsdialog.py:96 msgid "Snapshots" msgstr "Instantáneas" #: ../../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" msgstr "" "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" #: ../../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:" #: ../../qt4/app.py:707 msgid "Error:" msgstr "Error:" #: ../../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" #: ../../qt4/app.py:779 msgid "Home" msgstr "Carpeta Personal" #: ../../qt4/app.py:794 msgid "Backup folders" msgstr "Carpeta de copias de seguridad" #: ../../qt4/app.py:849 msgid "This is NOT a snapshot but a live view of your local files" msgstr "" #: ../../qt4/app.py:860 ../../qt4/app.py:1476 #, python-format msgid "Last check %s" msgstr "" #: ../../qt4/app.py:1004 #, python-format msgid "" "Backup local files before overwriting or\n" "removing with trailing '%(suffix)s'." msgstr "" #: ../../qt4/app.py:1010 msgid "" "Are you sure you want to remove all newer files in your original folder?" msgstr "" #: ../../qt4/app.py:1014 msgid "" "WARNING: deleting files in filesystem root could break your whole system!!!" msgstr "" #: ../../qt4/app.py:1016 msgid "Files to be restored:" msgstr "" #: ../../qt4/app.py:1031 msgid "Do you really want to restore this files(s):" msgstr "" #: ../../qt4/app.py:1226 #, python-format msgid "Snapshot: %s" msgstr "Instantánea: %s" #: ../../qt4/app.py:1227 #, python-format msgid "View the snapshot made at %s" msgstr "Ver la instantánea hecha el %s" #: ../../qt4/app.py:1229 msgid "View the current disk content" msgstr "Ver el contenido actual del disco" #: ../../qt4/app.py:1268 #, python-format msgid "Restore '%s'" msgstr "Recuperar '%s'" #: ../../qt4/app.py:1269 #, python-format msgid "Restore '%s' to ..." msgstr "Recuperar '%s' en" #: ../../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 "Perfil:" #: ../../qt4/logviewdialog.py:81 msgid "Filter:" msgstr "Filtro:" #: ../../qt4/logviewdialog.py:87 ../../qt4/settingsdialog.py:659 msgid "All" msgstr "Todo" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:90 #: ../../qt4/settingsdialog.py:657 msgid "Errors" msgstr "Errores" #: ../../qt4/logviewdialog.py:88 ../../qt4/logviewdialog.py:91 msgid "Changes" msgstr "Cambios" #: ../../qt4/logviewdialog.py:92 msgid "Informations" msgstr "Informaciones" #: ../../qt4/logviewdialog.py:101 msgid "[E] Error, [I] Information, [C] Change" msgstr "[E] Error, [I] Información, [C] Cambiar" #: ../../qt4/logviewdialog.py:104 msgid "decode paths" msgstr "" #: ../../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 "Trabajando..." #: ../../qt4/qt4tools.py:178 msgid "Today" msgstr "Hoy" #: ../../qt4/qt4tools.py:183 msgid "Yesterday" msgstr "Ayer" #: ../../qt4/qt4tools.py:188 msgid "This week" msgstr "Esta semana" #: ../../qt4/qt4tools.py:193 msgid "Last week" msgstr "Última semana" #: ../../qt4/restoredialog.py:75 msgid "Show full Log" msgstr "" #: ../../qt4/settingsdialog.py:68 msgid "Edit" msgstr "Editar" #: ../../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" #: ../../qt4/settingsdialog.py:106 ../../qt4/settingsdialog.py:1901 msgid "Mode:" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:165 ../../qt4/settingsdialog.py:262 msgid "Host:" msgstr "Host:" #: ../../qt4/settingsdialog.py:170 msgid "Port:" msgstr "" #: ../../qt4/settingsdialog.py:175 ../../qt4/settingsdialog.py:268 msgid "User:" msgstr "Usuario:" #: ../../qt4/settingsdialog.py:180 msgid "Path:" msgstr "" #: ../../qt4/settingsdialog.py:186 msgid "Cipher:" msgstr "" #: ../../qt4/settingsdialog.py:192 msgid "Private Key:" msgstr "" #: ../../qt4/settingsdialog.py:201 msgid "Key File" msgstr "" #: ../../qt4/settingsdialog.py:214 ../../qt4/settingsdialog.py:223 #: ../../qt4/settingsdialog.py:229 msgid "Password" msgstr "" #: ../../qt4/settingsdialog.py:235 msgid "Save Password to Keyring" msgstr "" #: ../../qt4/settingsdialog.py:238 msgid "Cache Password for Cron (Security issue: root can read password)" msgstr "" #: ../../qt4/settingsdialog.py:250 msgid "Advanced" msgstr "Avanzado" #: ../../qt4/settingsdialog.py:280 ../../qt4/settingsdialog.py:1640 msgid "Full snapshot path: " msgstr "" #: ../../qt4/settingsdialog.py:287 msgid "Schedule" msgstr "Tareas programadas" #: ../../qt4/settingsdialog.py:297 msgid "Day:" msgstr "Día:" #: ../../qt4/settingsdialog.py:308 msgid "Weekday:" msgstr "Día de la semana" #: ../../qt4/settingsdialog.py:319 msgid "Hour:" msgstr "Hora:" #: ../../qt4/settingsdialog.py:330 msgid "Hours:" msgstr "" #: ../../qt4/settingsdialog.py:339 msgid "" "Run Back In Time repeatedly. This is useful if the computer is not running " "regular." msgstr "" #: ../../qt4/settingsdialog.py:344 msgid "Every:" msgstr "" #: ../../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 "" #: ../../qt4/settingsdialog.py:375 msgid "Include" msgstr "Incluir" #: ../../qt4/settingsdialog.py:381 msgid "Include files and folders" msgstr "Incluir archivos y carpetas" #: ../../qt4/settingsdialog.py:414 msgid "Exclude" msgstr "Excluir" #: ../../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 "" #: ../../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:" #: ../../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" #: ../../qt4/settingsdialog.py:500 msgid "Older than:" msgstr "Anterior a:" #: ../../qt4/settingsdialog.py:515 msgid "If free space is less than:" msgstr "Si el espacio libre es menor que:" #: ../../qt4/settingsdialog.py:528 msgid "If free inodes is less than:" msgstr "" #: ../../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" #: ../../qt4/settingsdialog.py:558 ../../qt4/settingsdialog.py:564 msgid "day(s)" msgstr "día(s)" #: ../../qt4/settingsdialog.py:560 msgid "Keep one snapshot per day for the last" msgstr "" #: ../../qt4/settingsdialog.py:566 msgid "Keep one snapshot per week for the last" msgstr "" #: ../../qt4/settingsdialog.py:570 msgid "weeks(s)" msgstr "semana(s)" #: ../../qt4/settingsdialog.py:572 msgid "Keep one snapshot per month for the last" msgstr "" #: ../../qt4/settingsdialog.py:576 msgid "month(s)" msgstr "mes(es)" #: ../../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" #: ../../qt4/settingsdialog.py:597 msgid "Options" msgstr "Opciones" #: ../../qt4/settingsdialog.py:605 msgid "Disable snapshots when on battery" msgstr "Desactivar instantáneas cuando se esté con batería" #: ../../qt4/settingsdialog.py:608 msgid "Power status not available from system" msgstr "El estado de la energía no está disponible en el sistema" #: ../../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 "" #: ../../qt4/settingsdialog.py:627 msgid "Continue on errors (keep incomplete snapshots)" msgstr "Continuar si hay errores (mantener imágenes incompletas)" #: ../../qt4/settingsdialog.py:630 msgid "Use checksum to detect changes" msgstr "Utilizar la suma de verificación (checksum) para detectar cambios" #: ../../qt4/settingsdialog.py:633 msgid "Full rsync mode. May be faster but:" msgstr "Modo rsync completo. Puede ser más rápido pero:" #: ../../qt4/settingsdialog.py:634 msgid "" "- 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...)" #: ../../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)" #: ../../qt4/settingsdialog.py:651 msgid "Log Level:" msgstr "Detalle del log" #: ../../qt4/settingsdialog.py:656 msgid "None" msgstr "Ninguno" #: ../../qt4/settingsdialog.py:658 msgid "Changes & Errors" msgstr "Cambios & Errores" #: ../../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!" #: ../../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 "" #: ../../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 "" #: ../../qt4/settingsdialog.py:737 msgid " KB/sec" msgstr "" #: ../../qt4/settingsdialog.py:772 msgid "Preserve ACL" msgstr "Preservar ACL" #: ../../qt4/settingsdialog.py:785 msgid "Preserve extended attributes (xattr)" msgstr "Preservar atributos extendidos (xattr)" #: ../../qt4/settingsdialog.py:803 msgid "Copy unsafe links (works only with absolute links)" msgstr "Copiar vínculos incompletos (funciona solo con vínculos absolutos)" #: ../../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 "Nuevo perfil" #: ../../qt4/settingsdialog.py:938 msgid "Rename profile" msgstr "Renombrar perfil" #: ../../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\" ?" #: ../../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 "Excluir patrón" #: ../../qt4/settingsdialog.py:1506 msgid "Exclude folder" msgstr "Excluir carpeta" #: ../../qt4/settingsdialog.py:1525 msgid "Include file" msgstr "Incluir archivo" #: ../../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 "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?" #: ../../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:56 msgid "Command:" msgstr "Orden:" #: ../../qt4/snapshotsdialog.py:60 msgid "Parameters:" msgstr "Parámetros:" #: ../../qt4/snapshotsdialog.py:106 msgid "List only different snapshots" msgstr "Listar sólo instantáneas diferentes" #: ../../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 "" #: ../../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 "" "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 "" backintime-1.1.12/common/config.py0000664000175000017500000022316012644767576016363 0ustar germargermar# 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 datetime import gettext import socket import random import shlex try: import pwd except ImportError: import getpass pwd = None import tools import configfile import logger import mount import sshtools import encfstools import password import pluginmanager from exceptions import PermissionDeniedByPolicy, InvalidChar _=gettext.gettext 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.1.12' COPYRIGHT = 'Copyright (C) 2008-2016 Oprea Dan, Bart de Koning, Richard Bailey, Germar Reitze' CONFIG_VERSION = 5 NONE = 0 AT_EVERY_BOOT = 1 _5_MIN = 2 _10_MIN = 4 _30_MIN = 7 HOUR = 10 _1_HOUR = 10 _2_HOURS = 12 _4_HOURS = 14 _6_HOURS = 16 _12_HOURS = 18 CUSTOM_HOUR = 19 DAY = 20 REPEATEDLY = 25 UDEV = 27 WEEK = 30 MONTH = 40 YEAR = 80 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'), REPEATEDLY : _('Repeatedly (anacron)'), UDEV : _('When drive get connected (udev)'), WEEK : _('Every Week'), MONTH : _('Every Month') } REMOVE_OLD_BACKUP_UNITS = { DAY : _('Day(s)'), WEEK : _('Week(s)'), YEAR : _('Year(s)') } 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 exp = _(' EXPERIMENTAL!') SNAPSHOT_MODES = { #mode : (, 'ComboBox Text', need_pw|lbl_pw_1, need_2_pw|lbl_pw_2 ), 'local' : (None, _('Local'), False, False ), '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') ) } 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'), 'arcfour': _('ARCFOUR') } ENCODE = encfstools.Bounce() PLUGIN_MANAGER = pluginmanager.PluginManager() def __init__( self, config_path = None ): configfile.ConfigFileWithProfiles.__init__( self, _('Main profile') ) 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( '~' ) 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) tools.make_dirs( self._LOCAL_CONFIG_FOLDER ) tools.make_dirs( self._LOCAL_DATA_FOLDER ) self._DEFAULT_CONFIG_PATH = os.path.join( self._LOCAL_CONFIG_FOLDER, 'config' ) if config_path is None: self._LOCAL_CONFIG_PATH = self._DEFAULT_CONFIG_PATH else: self._LOCAL_CONFIG_PATH = config_path old_path = os.path.join( self._LOCAL_CONFIG_FOLDER, 'config2' ) if os.path.exists( old_path ): if os.path.exists( self._LOCAL_CONFIG_PATH ): os.system( "rm \"%s\"" % old_path ) else: os.system( "mv \"%s\" \"%s\"" % ( old_path, self._LOCAL_CONFIG_PATH ) ) self.load( self._GLOBAL_CONFIG_PATH ) self.append( self._LOCAL_CONFIG_PATH ) if self.get_int_value( 'config.version', self.CONFIG_VERSION ) < self.CONFIG_VERSION: if self.get_int_value( 'config.version', self.CONFIG_VERSION ) < 2: #remap old items self.remap_key( 'BASE_BACKUP_PATH', 'snapshots.path' ) self.remap_key( 'INCLUDE_FOLDERS', 'snapshots.include_folders' ) self.remap_key( 'EXCLUDE_PATTERNS', 'snapshots.exclude_patterns' ) self.remap_key( 'AUTOMATIC_BACKUP', 'snapshots.automatic_backup_mode' ) self.remap_key( 'REMOVE_OLD_BACKUPS', 'snapshots.remove_old_snapshots.enabled' ) self.remap_key( 'REMOVE_OLD_BACKUPS_VALUE', 'snapshots.remove_old_snapshots.value' ) self.remap_key( 'REMOVE_OLD_BACKUPS_UNIT', 'snapshots.remove_old_snapshots.unit' ) self.remap_key( 'MIN_FREE_SPACE', 'snapshots.min_free_space.enabled' ) self.remap_key( 'MIN_FREE_SPACE_VALUE', 'snapshots.min_free_space.value' ) self.remap_key( 'MIN_FREE_SPACE_UNIT', 'snapshots.min_free_space.unit' ) self.remap_key( 'DONT_REMOVE_NAMED_SNAPSHOTS', 'snapshots.dont_remove_named_snapshots' ) self.remap_key( 'DIFF_CMD', 'gnome.diff.cmd' ) self.remap_key( 'DIFF_CMD_PARAMS', 'gnome.diff.params' ) self.remap_key( 'LAST_PATH', 'gnome.last_path' ) self.remap_key( 'MAIN_WINDOW_X', 'gnome.main_window.x' ) self.remap_key( 'MAIN_WINDOW_Y', 'gnome.main_window.y' ) self.remap_key( 'MAIN_WINDOW_WIDTH', 'gnome.main_window.width' ) self.remap_key( 'MAIN_WINDOW_HEIGHT', 'gnome.main_window.height' ) self.remap_key( 'MAIN_WINDOW_HPANED1_POSITION', 'gnome.main_window.hpaned1' ) self.remap_key( 'MAIN_WINDOW_HPANED2_POSITION', 'gnome.main_window.hpaned2' ) if self.get_int_value( 'config.version', self.CONFIG_VERSION ) < 3: self.remap_key( 'snapshots.path', 'profile1.snapshots.path' ) self.remap_key( 'snapshots.include_folders', 'profile1.snapshots.include_folders' ) self.remap_key( 'snapshots.exclude_patterns', 'profile1.snapshots.exclude_patterns' ) self.remap_key( 'snapshots.automatic_backup_mode', 'profile1.snapshots.automatic_backup_mode' ) self.remap_key( 'snapshots.remove_old_snapshots.enabled', 'profile1.snapshots.remove_old_snapshots.enabled' ) self.remap_key( 'snapshots.remove_old_snapshots.value', 'profile1.snapshots.remove_old_snapshots.value' ) self.remap_key( 'snapshots.remove_old_snapshots.unit', 'profile1.snapshots.remove_old_snapshots.unit' ) self.remap_key( 'snapshots.min_free_space.enabled', 'profile1.snapshots.min_free_space.enabled' ) 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", 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 ) tag = str( random.randint(100, 999) ) 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", self) profiles = self.get_profiles() for profile_id in profiles: #change include old_values = self.get_include_v4( profile_id ) values = [] for value in old_values: values.append( ( value, 0 ) ) self.set_include( values, profile_id ) #change exclude old_values = self.get_exclude_v4( profile_id ) self.set_exclude( old_values, profile_id ) #remove keys self.remove_profile_key( 'snapshots.include_folders', profile_id ) self.remove_profile_key( 'snapshots.exclude_patterns', profile_id ) 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 ): return super(Config, self).save(self._LOCAL_CONFIG_PATH) def check_config( self ): profiles = self.get_profiles() checked_profiles = [] 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 not snapshots_path: self.notify_error( _('Profile: "%s"') % profile_name + '\n' + _('Snapshots folder is not valid !') ) return False #check include include_list = self.get_include( profile_id ) if not include_list: self.notify_error( _('Profile: "%s"') % profile_name + '\n' + _('You must select at least one folder to backup !') ) return False snapshots_path2 = snapshots_path + '/' for item in include_list: if item[1] != 0: continue path = item[0] 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 !') ) return False checked_profiles.append( ( profile_id, profile_name ) ) return True def get_user( self ): '''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()) def get_host(self): return socket.gethostname() def get_snapshots_path( self, profile_id = None, mode = None, tmp_mount = False ): if mode is None: 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 #?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._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/''' if version is None: version = self.get_int_value( 'config.version', self.CONFIG_VERSION ) if version < 4: 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 ) def set_snapshots_path( self, value, profile_id = None, mode = None ): """Sets the snapshot path to value, initializes, and checks it""" if not value: return False if profile_id == None: profile_id = self.get_current_profile() if mode is None: mode = self.get_snapshots_mode( profile_id ) if not os.path.isdir( value ): self.notify_error( _( '%s is not a folder !' ) % value ) return False #Initialize the snapshots folder logger.debug("Check snapshot folder: %s" %value, self) host, user, profile = self.get_host_user_profile( profile_id ) 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 ): 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' ) os.system( "chmod a+rwx \"%s\"" % path1 ) 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' #?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 symlink = '%s_%s' % (profile_id, self.get_pid()) 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 './'.;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 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 ) def set_snapshots_path_ssh( self, value, profile_id = None ): self.set_profile_str_value( 'snapshots.ssh.path', value, profile_id ) return True def get_ssh_host( self, profile_id = None ): #?Remote host used for mode 'ssh' and 'ssh_encfs'.;IP or domain address return self.get_profile_str_value( 'snapshots.ssh.host', '', profile_id ) def set_ssh_host( self, value, profile_id = None ): self.set_profile_str_value( 'snapshots.ssh.host', value, profile_id ) def get_ssh_port( self, profile_id = None ): #?SSH Port on remote host.;0-65535 return self.get_profile_int_value( 'snapshots.ssh.port', '22', profile_id ) def set_ssh_port( self, value, profile_id = None ): 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 return self.get_profile_str_value( 'snapshots.ssh.cipher', 'default', profile_id ) def set_ssh_cipher( self, value, profile_id = None ): self.set_profile_str_value( 'snapshots.ssh.cipher', value, profile_id ) def get_ssh_user( self, profile_id = None ): #?Remote SSH user;;local users name return self.get_profile_str_value( 'snapshots.ssh.user', self.get_user(), profile_id ) 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 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 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 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'.;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_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). #? must be the same as \fIprofile.snapshots.mode\fR return self.get_profile_bool_value( 'snapshots.%s.password.save' % mode, False, profile_id ) def set_password_save( self, value, profile_id = None, mode = None ): if mode is None: mode = self.get_snapshots_mode(profile_id) self.set_profile_bool_value( 'snapshots.%s.password.save' % mode, value, profile_id ) def get_password_use_cache( self, profile_id = None, mode = None ): 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. #? 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 ) def set_password_use_cache( self, value, profile_id = None, mode = None ): if mode is None: mode = self.get_snapshots_mode(profile_id) self.set_profile_bool_value( 'snapshots.%s.password.use_cache' % mode, value, profile_id ) def get_password( self, parent = None, profile_id = None, mode = None, pw_id = 1, only_from_keyring = False ): if self.pw is None: self.pw = password.Password(self) if profile_id is None: profile_id = self.get_current_profile() if mode is None: mode = self.get_snapshots_mode(profile_id) return self.pw.get_password(parent, profile_id, mode, pw_id, only_from_keyring) def set_password( self, password, profile_id = None, mode = None, pw_id = 1 ): if self.pw is None: self.pw = password.Password(self) if profile_id is None: profile_id = self.get_current_profile() 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: return False return True def get_keyring_service_name( self, profile_id = None, mode = None, pw_id = 1 ): if mode is None: mode = self.get_snapshots_mode(profile_id) if pw_id > 1: return 'backintime/%s_%s' % (mode, pw_id) return 'backintime/%s' % mode def get_keyring_user_name( self, profile_id = None ): if profile_id is None: profile_id = self.get_current_profile() return 'profile_id_%s' % profile_id def get_default_host_user_profile( self, profile_id = None ): host = socket.gethostname() user = self.get_user() profile = profile_id if profile is None: profile = self.get_current_profile() return ( host, user, profile ) def get_host_user_profile( self, profile_id = None ): default_host, default_user, default_profile = self.get_default_host_user_profile( profile_id ) #?Set Host for snapshot path;;local hostname host = self.get_profile_str_value( 'snapshots.path.host', default_host, profile_id ) #?Set User for snapshot path;;local username user = self.get_profile_str_value( 'snapshots.path.user', default_user, 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 ) return ( host, user, profile ) def set_host_user_profile( self, host, user, profile, profile_id = None ): 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 ) def get_other_folders_paths( self, profile_id = None ): '''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 not value: return [] paths = [] for item in value.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 not value: return [] paths = [] for item in value.split(':'): fields = item.split( '|' ) path = os.path.expanduser( fields[0] ) path = os.path.abspath( path ) paths.append( path ) return paths 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) 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 not value: return [] return value.split( ':' ) def get_exclude(self, profile_id = None): '''Gets the exclude patterns''' #?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 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 #?25 = daily anacron\n27 = when drive get connected\n30 = every week\n #?40 = every month\n80 = every year #?;0|1|2|4|7|10|12|14|16|18|19|20|25|27|30|40|80;0 return self.get_profile_int_value( 'snapshots.automatic_backup_mode', self.NONE, profile_id ) def set_automatic_backup_mode( self, value, profile_id = None ): 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 #?\fIprofile.snapshots.automatic_backup_mode\fR >= 20;0-24 return self.get_profile_int_value( 'snapshots.automatic_backup_time', 0, profile_id ) def set_automatic_backup_time( self, value, profile_id = None ): 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 #?\fIprofile.snapshots.automatic_backup_mode\fR >= 40;1-28 return self.get_profile_int_value( 'snapshots.automatic_backup_day', 1, profile_id ) def set_automatic_backup_day( self, value, profile_id = None ): 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 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 #?\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 ) def set_custom_backup_time( self, value, profile_id = None ): self.set_profile_str_value( 'snapshots.custom_backup_time', value, profile_id ) def get_automatic_backup_anacron_period(self, profile_id = None): #?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_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_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 ) ) 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: date = datetime.date.today() date = date - datetime.timedelta( days = value ) return date if unit == self.WEEK: 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 ): self.set_profile_bool_value( 'snapshots.remove_old_snapshots.enabled', enabled, profile_id ) self.set_profile_int_value( 'snapshots.remove_old_snapshots.value', value, profile_id ) 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 ) ) def is_min_free_space_enabled( self, profile_id = None ): return self.get_profile_bool_value( 'snapshots.min_free_space.enabled', True, profile_id ) def get_min_free_space_in_mb( self, profile_id = None ): enabled, value, unit = self.get_min_free_space( profile_id ) if not enabled: return 0 if self.DISK_UNIT_MB == unit: return value value *= 1024 #Gb if self.DISK_UNIT_GB == unit: return value return 0 def set_min_free_space( self, enabled, value, unit, profile_id = None ): self.set_profile_bool_value( 'snapshots.min_free_space.enabled', enabled, profile_id ) self.set_profile_int_value( 'snapshots.min_free_space.value', value, profile_id ) self.set_profile_int_value( 'snapshots.min_free_space.unit', unit, profile_id ) def min_free_inodes(self, profile_id = None): #?Keep at least value % free inodes.;1-15 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 #?free inodes in % is reached. return self.get_profile_bool_value('snapshots.min_free_inodes.enabled', True, profile_id) def set_min_free_inodes(self, enabled, value, profile_id = None): self.set_profile_bool_value('snapshots.min_free_inodes.enabled', enabled, profile_id) self.set_profile_int_value('snapshots.min_free_inodes.value', value, profile_id) def get_dont_remove_named_snapshots( self, profile_id = None ): #?Keep snapshots with names during smart_remove. return self.get_profile_bool_value( 'snapshots.dont_remove_named_snapshots', True, profile_id ) 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 ) ) 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 ) self.set_profile_int_value( 'snapshots.smart_remove.keep_all', keep_all, profile_id ) 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 ) def set_notify_enabled( self, value, profile_id = None ): self.set_profile_bool_value( 'snapshots.notify.enabled', value, profile_id ) def is_backup_on_restore_enabled( self, profile_id = None ): #?Rename existing files before restore into FILE.backup.YYYYMMDD return self.get_profile_bool_value( 'snapshots.backup_on_restore.enabled', True, profile_id ) def set_backup_on_restore( self, value, profile_id = None ): 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. 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. 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 #?interupt any other working process. 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', 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', 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. #?For mode Local you should rather use ionice. return self.get_profile_bool_value( 'snapshots.bwlimit.enabled', False, profile_id ) def set_bwlimit_enabled( self, value, profile_id = None ): self.set_profile_bool_value( 'snapshots.bwlimit.enabled', value, profile_id ) def bwlimit( self, profile_id = None ): #?Bandwidth limit in KB/sec. return self.get_profile_int_value( 'snapshots.bwlimit.value', 3000, profile_id ) def set_bwlimit( self, value, profile_id = None ): self.set_profile_int_value( 'snapshots.bwlimit.value', value, profile_id ) def is_no_on_battery_enabled( self, profile_id = None ): #?Don't take snapshots if the Computer runs on battery. return self.get_profile_bool_value( 'snapshots.no_on_battery', False, profile_id ) def set_no_on_battery_enabled( self, value, profile_id = None ): 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 #?compatible ACL entries for this option to work properly. return self.get_profile_bool_value( 'snapshots.preserve_acl', False, profile_id ) def set_preserve_acl( self, value, profile_id = None ): return self.set_profile_bool_value( 'snapshots.preserve_acl', value, profile_id ) def preserve_xattr( self, profile_id = None ): #?Preserve extended attributes (xattr). return self.get_profile_bool_value( 'snapshots.preserve_xattr', False, profile_id ) def set_preserve_xattr( self, value, profile_id = None ): 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 #?ordinary files. return self.get_profile_bool_value( 'snapshots.copy_unsafe_links', False, profile_id ) def set_copy_unsafe_links( self, value, profile_id = None ): 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 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 #?deleting and start over again. return self.get_profile_bool_value( 'snapshots.continue_on_errors', True, profile_id ) def set_continue_on_errors( self, value, profile_id = None ): return self.set_profile_bool_value( 'snapshots.continue_on_errors', value, profile_id ) def use_checksum( self, profile_id = None ): #?Use checksum to detect changes rather than size + time. return self.get_profile_bool_value( 'snapshots.use_checksum', False, profile_id ) def set_use_checksum( self, value, profile_id = None ): return self.set_profile_bool_value( 'snapshots.use_checksum', value, profile_id ) def log_level( self, profile_id = None ): #?Log level used during take_snapshot.\n1 = Error\n2 = Changes\n3 = Info;1-3 return self.get_profile_int_value( 'snapshots.log_level', 3, profile_id ) def set_log_level( self, value, profile_id = None ): 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 #?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 #?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 {} +). return self.get_profile_bool_value( 'snapshots.gnu_find_suffix_support', True, profile_id ) def find_suffix( self, profile_id = None ): if self.gnu_find_suffix_support(profile_id): return '+' else: return '\\;' def set_gnu_find_suffix_support( self, value, profile_id = None ): 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 #?:\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 ) def set_take_snapshot_user_script( self, step, path, profile_id = None ): self.set_profile_str_value( "snapshots.take_snapshot.%s.user.script" % step, path, profile_id ) def get_take_snapshot_user_script_before( self, profile_id = None ): return self.get_take_snapshot_user_script( 'before', profile_id ) def set_take_snapshot_user_script_before( self, path, profile_id = None ): self.set_take_snapshot_user_script( 'before', path, profile_id ) def get_take_snapshot_user_script_after( self, profile_id = None ): return self.get_take_snapshot_user_script( 'after', profile_id ) def set_take_snapshot_user_script_after( self, path, profile_id = None ): self.set_take_snapshot_user_script( 'after', path, profile_id ) def get_take_snapshot_user_script_new_snapshot( self, profile_id = None ): return self.get_take_snapshot_user_script( 'new_snapshot', profile_id = None ) def set_take_snapshot_user_script_new_snapshot( self, path, profile_id = None ): self.set_take_snapshot_user_script( 'new_snapshot', path, profile_id ) def get_take_snapshot_user_script_error( self, profile_id = None ): return self.get_take_snapshot_user_script( 'error', profile_id ) 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 def get_doc_path( self ): return self._DOC_PATH def get_app_instance_file( self ): return os.path.join( self._LOCAL_DATA_FOLDER, 'app.lock' ) def __get_file_id__( self, profile_id = None ): if profile_id is None: profile_id = self.get_current_profile() if profile_id == '1': return '' return profile_id def get_take_snapshot_log_file( self, profile_id = None ): return os.path.join( self._LOCAL_DATA_FOLDER, "takesnapshot_%s.log" % self.__get_file_id__( profile_id ) ) 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_take_snapshot_user_callback( self, profile_id = None ): return os.path.join( self._LOCAL_CONFIG_FOLDER, "user-callback" ) def get_password_cache_folder( self ): return os.path.join( self._LOCAL_DATA_FOLDER, "password_cache" ) def get_password_cache_pid( self ): return os.path.join( self.get_password_cache_folder(), "PID" ) def get_password_cache_fifo( self ): return os.path.join( self.get_password_cache_folder(), "FIFO" ) def get_password_cache_info( self ): return os.path.join( self.get_password_cache_folder(), "info" ) def get_cron_env_file( self ): 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' ), '' ) def get_translations( self ): return tools.read_file( os.path.join( self.get_doc_path(), 'TRANSLATIONS' ), '' ) 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: path = path[ : -1 ] return path def is_configured( self, profile_id = None ): '''Checks if the program is configured''' return bool(self.get_snapshots_path(profile_id) and self.get_include(profile_id)) def can_backup( self, profile_id = None ): '''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 ) ): logger.error("%s does not exist" %self.get_snapshots_full_path(profile_id), self) return False return True 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 #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 last_time = tools.readTimeStamp(self.get_anacron_spool_file(profile_id)) if not last_time: return True value = self.get_automatic_backup_anacron_period(profile_id) unit = self.get_automatic_backup_anacron_unit(profile_id) return self.olderThan(last_time, value, unit) 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 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 if __name__ == "__main__": config = Config() print("snapshots path = %s" % config.get_snapshots_full_path()) backintime-1.1.12/common/sshMaxArg.py0000664000175000017500000000554312644767576017016 0ustar germargermar#!/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) backintime-1.1.12/common/askpass.py0000664000175000017500000000271412644767576016563 0ustar germargermar# 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 sys try: import gtk except: pass import password import password_ipc import tools import config if __name__ == '__main__': """ return password. """ cfg = config.Config() tools.load_env(cfg.get_cron_env_file()) profile_id = os.getenv('ASKPASS_PROFILE_ID', '1') mode = os.getenv('ASKPASS_MODE', 'local') temp_file = os.getenv('ASKPASS_TEMP') if temp_file is None: #normal mode, get password from module password pw = password.Password(cfg) print(pw.get_password(None, profile_id, mode)) sys.exit(0) #temp mode fifo = password_ipc.FIFO(temp_file) pw = fifo.read(5) if pw: print(pw) backintime-1.1.12/common/configure0000775000175000017500000002100412644767576016444 0ustar germargermar#!/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" 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 | --python3) PYTHON=$arg;; --fuse-group | --no-fuse-group) FUSE_GROUP=$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 #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) 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="" langs="" for langfile in `ls po/*.po`; do lang=`echo $langfile | cut -d/ -f2 | cut -d. -f1` mos="po/$lang.mo $mos" langs="$lang $langs" done #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} 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:\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} done #common langs printf "install_translations:\n" >> ${MAKEFILE} addComment "translations" for lang in $langs; do addInstallDir "/share/locale/$lang/LC_MESSAGES" addInstallFileRename "po/$lang.mo" "/share/locale/$lang/LC_MESSAGES/backintime.mo" addUninstallDir "/share/locale/$lang" done 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" backintime-1.1.12/common/guiapplicationinstance.py0000664000175000017500000000515412644767576021654 0ustar germargermar# 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 logger from applicationinstance import ApplicationInstance class GUIApplicationInstance(ApplicationInstance): '''class used to handle one application instance mechanism ''' def __init__( self, base_control_file, raise_cmd = '' ): '''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 if os.path.exists(self.raise_file): os.remove( self.raise_file ) self.check(raise_cmd) self.start_application() 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 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 ): with open( self.raise_file, 'rt' ) as f: ret_val = f.read() os.remove( self.raise_file ) except: pass return ret_val backintime-1.1.12/common/password_ipc.py0000664000175000017500000000763612644767576017623 0ustar germargermar# 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 sys import stat import tools import threading import tempfile import logger class FIFO(object): """ interprocess-communication with named pipes """ def __init__(self, fname): self.fifo = fname self.alarm = tools.Alarm() def delfifo(self): """ remove FIFO """ try: os.remove(self.fifo) except: pass def create(self): """ create the FIFO in a way that only the current user can access it. """ if os.path.exists(self.fifo): self.delfifo() try: 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 for input. """ #sys.stdout.write('read fifo\n') if not self.is_fifo(): sys.exit(1) self.alarm.start(timeout) with open(self.fifo, 'r') as fifo: 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 for an other process that will read this. """ #sys.stdout.write('write fifo\n') if not self.is_fifo(): sys.exit(1) self.alarm.start(timeout) 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 """ try: s = os.stat(self.fifo) except OSError: return False if not s.st_uid == os.getuid(): 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, 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, self) return False return True class TempPasswordThread(threading.Thread): """ in case BIT is not configured yet provide password through temp FIFO to backintime-askpass. """ def __init__(self, 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) self.fifo.delfifo() def read(self): """ read fifo to end the blocking fifo.write use only if thread timeout. """ self.fifo.read() def stop(self): self.join(5) if self.isAlive(): #threading does not support signal.alarm self.read() try: os.rmdir(os.path.dirname(self.temp_file)) except OSError: pass backintime-1.1.12/common/bash-completion/0000775000175000017500000000000012644767576017624 5ustar germargermarbackintime-1.1.12/common/bash-completion/backintime0000664000175000017500000000652512644767576021665 0ustar germargermar#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 backintime-1.1.12/common/backintime-askpass0000775000175000017500000000221212644767576020234 0ustar germargermar#!/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}/askpass.py" ]; then APP_PATH=$CUR_PATH else APP_PATH=$(readlink -m "${CUR_PATH}/../share/backintime/common") fi python3 $APP_PATH/askpass.py "$@" backintime-1.1.12/qt4/0000775000175000017500000000000012644767576013760 5ustar germargermarbackintime-1.1.12/qt4/man/0000775000175000017500000000000012644767576014533 5ustar germargermarbackintime-1.1.12/qt4/man/C/0000775000175000017500000000000012644767576014715 5ustar germargermarbackintime-1.1.12/qt4/man/C/backintime-qt4.10000664000175000017500000001047312644767576017620 0ustar germargermar.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(). backintime-1.1.12/qt4/messagebox.py0000664000175000017500000000646712644767576016504 0ustar germargermar# 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_() backintime-1.1.12/qt4/backintime-qt4.desktop0000664000175000017500000000050612644767576020170 0ustar germargermar[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; backintime-1.1.12/qt4/plugins/0000775000175000017500000000000012644767576015441 5ustar germargermarbackintime-1.1.12/qt4/plugins/notifyplugin.py0000664000175000017500000000422112644767576020541 0ustar germargermar# 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 backintime-1.1.12/qt4/plugins/qt4plugin.py0000664000175000017500000000352012644767576017742 0ustar germargermar# 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 backintime-1.1.12/qt4/qt4tools.py0000664000175000017500000002641512644767576016133 0ustar germargermar# 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)) backintime-1.1.12/qt4/backintime-qt40000775000175000017500000000232312644767576016522 0ustar germargermar#!/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 "$@" backintime-1.1.12/qt4/net.launchpad.backintime.serviceHelper.service0000664000175000017500000000020712644767576024771 0ustar germargermar[D-BUS Service] Name=net.launchpad.backintime.serviceHelper Exec=/usr/bin/python3 /usr/share/backintime/qt4/serviceHelper.py User=root backintime-1.1.12/qt4/docbook/0000775000175000017500000000000012644767576015400 5ustar germargermarbackintime-1.1.12/qt4/docbook/en/0000775000175000017500000000000012644767576016002 5ustar germargermarbackintime-1.1.12/qt4/docbook/en/legal.xml0000664000175000017500000000712712644767576017617 0ustar germargermar 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. backintime-1.1.12/qt4/docbook/en/index.docbook0000664000175000017500000001357012644767576020461 0ustar germargermar &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.
backintime-1.1.12/qt4/app.py0000664000175000017500000017441212644767576015123 0ustar germargermar# 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() backintime-1.1.12/qt4/serviceHelper.py0000664000175000017500000002547612644767576017150 0ustar germargermar# (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_() backintime-1.1.12/qt4/icon.py0000664000175000017500000000705212644767576015266 0ustar germargermar# 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') ) backintime-1.1.12/qt4/net.launchpad.backintime.serviceHelper.conf0000664000175000017500000000135112644767576024257 0ustar germargermar system backintime-1.1.12/qt4/snapshotsdialog.py0000664000175000017500000004116312644767576017541 0ustar germargermar# 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) backintime-1.1.12/qt4/configure0000775000175000017500000001570012644767576015672 0ustar germargermar#!/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" backintime-1.1.12/qt4/icons/0000775000175000017500000000000012644767576015073 5ustar germargermarbackintime-1.1.12/qt4/icons/scalable/0000775000175000017500000000000012644767576016641 5ustar germargermarbackintime-1.1.12/qt4/icons/scalable/actions/0000775000175000017500000000000012644767576020301 5ustar germargermarbackintime-1.1.12/qt4/icons/scalable/actions/show-hidden.svg0000664000175000017500000003331712644767576023242 0ustar germargermar 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 backintime-1.1.12/qt4/icons/32x32/0000775000175000017500000000000012644767576015654 5ustar germargermarbackintime-1.1.12/qt4/icons/32x32/actions/0000775000175000017500000000000012644767576017314 5ustar germargermarbackintime-1.1.12/qt4/icons/32x32/actions/show-hidden.svg0000664000175000017500000003337012644767576022254 0ustar germargermar 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 backintime-1.1.12/qt4/icons/48x48/0000775000175000017500000000000012644767576015672 5ustar germargermarbackintime-1.1.12/qt4/icons/48x48/actions/0000775000175000017500000000000012644767576017332 5ustar germargermarbackintime-1.1.12/qt4/icons/48x48/actions/show-hidden.svg0000664000175000017500000003331712644767576022273 0ustar germargermar 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 backintime-1.1.12/qt4/icons/16x16/0000775000175000017500000000000012644767576015660 5ustar germargermarbackintime-1.1.12/qt4/icons/16x16/actions/0000775000175000017500000000000012644767576017320 5ustar germargermarbackintime-1.1.12/qt4/icons/16x16/actions/show-hidden.svg0000664000175000017500000003336212644767576022261 0ustar germargermar 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 backintime-1.1.12/qt4/icons/22x22/0000775000175000017500000000000012644767576015652 5ustar germargermarbackintime-1.1.12/qt4/icons/22x22/actions/0000775000175000017500000000000012644767576017312 5ustar germargermarbackintime-1.1.12/qt4/icons/22x22/actions/show-hidden.svg0000664000175000017500000003344712644767576022257 0ustar germargermar 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 backintime-1.1.12/qt4/icons/24x24/0000775000175000017500000000000012644767576015656 5ustar germargermarbackintime-1.1.12/qt4/icons/24x24/actions/0000775000175000017500000000000012644767576017316 5ustar germargermarbackintime-1.1.12/qt4/icons/24x24/actions/show-hidden.svg0000664000175000017500000003344312644767576022257 0ustar germargermar 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 backintime-1.1.12/qt4/backintime-qt4-root.desktop0000664000175000017500000000051712644767576021153 0ustar germargermar[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; backintime-1.1.12/qt4/net.launchpad.backintime.policy0000664000175000017500000000353712644767576022042 0ustar germargermar 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 backintime-1.1.12/qt4/logviewdialog.py0000664000175000017500000001641112644767576017171 0ustar germargermar# 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() backintime-1.1.12/qt4/settingsdialog.py0000664000175000017500000026237012644767576017364 0ustar germargermar# 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() backintime-1.1.12/qt4/restoredialog.py0000664000175000017500000001146112644767576017200 0ustar germargermar# 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() backintime-1.1.12/qt4/qt4systrayicon.py0000664000175000017500000001370112644767576017354 0ustar germargermar# 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() backintime-1.1.12/debian/0000775000175000017500000000000012644767576014472 5ustar germargermarbackintime-1.1.12/debian/copyright0000664000175000017500000000155712644767576016435 0ustar germargermarBack In Time Copyright (C) 2008-2016 Oprea Dan, Bart de Koning, Richard Bailey, Germar Reitze 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. backintime-1.1.12/debian/changelog0000664000175000017500000000047612644767576016353 0ustar germargermarbackintime (1.1.12) unstable; urgency=low * 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) -- Germar Reitze Mon, 11 Jan 2016 19:01:52 +0100 backintime-1.1.12/debian/compat0000664000175000017500000000000212644767576015670 0ustar germargermar5 backintime-1.1.12/debian/source/0000775000175000017500000000000012644767576015772 5ustar germargermarbackintime-1.1.12/debian/source/format0000664000175000017500000000000412644767576017177 0ustar germargermar1.0 backintime-1.1.12/debian/control0000664000175000017500000000434312644767576016101 0ustar germargermarSource: backintime Maintainer: BIT Team Section: utils Priority: extra Build-Depends: debhelper (>= 7), python3 X-Python3-Version: >= 3.3 Standards-Version: 3.9.5 Homepage: https://github.com/bit-team/backintime Package: backintime-common Architecture: all Depends: rsync, cron-daemon, openssh-client, python3-keyring, python3-dbus, ${python3:Depends}, ${misc:Depends} 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. Package: backintime-qt4 Architecture: all 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 Conflicts: backintime-kde (<< ${source:Version}~), backintime-kde4 (<< ${source:Version}~), backintime-gnome (<< ${source:Version}~), backintime-notify (<< ${source:Version}~) Replaces: backintime-kde (<< ${source:Version}~), backintime-kde4 (<< ${source:Version}~), backintime-gnome (<< ${source:Version}~), backintime-notify (<< ${source:Version}~) Description: Simple backup system This is a Qt4 GUI frontend for backintime-common. Package: backintime-kde Section: oldlibs Architecture: all Depends: backintime-qt4, ${misc:Depends} Description: Virtual package This is a virtual package to replace backintime-kde from official repositories with backintime-qt4 from PPA. It can safely be removed. Package: backintime-kde4 Section: oldlibs Architecture: all Depends: backintime-qt4, ${misc:Depends} Description: Virtual package This is a virtual package to replace backintime-kde4 with backintime-qt4. It can safely be removed. Package: backintime-gnome Section: oldlibs Architecture: all Depends: backintime-qt4, ${misc:Depends} Description: Virtual package This is a virtual package to replace backintime-gnome with backintime-qt4. It can safely be removed. Package: backintime-notify Section: oldlibs Architecture: all Depends: backintime-qt4, ${misc:Depends} Description: Virtual package This is a virtual package to replace backintime-notify with backintime-qt4. It can safely be removed. backintime-1.1.12/debian/rules0000775000175000017500000000127112644767576015553 0ustar germargermar#!/usr/bin/make -f # -*- makefile -*- # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 override_dh_auto_clean: rm -rf locale common/po/*.mo find $(CURDIR) -name "*\.py[co]" -delete # these get regenerated rm -f */man/C/*.1.gz rm -f common/Makefile qt4/Makefile rm -f common/config-example-*.gz override_dh_auto_configure: cd common && ./configure cd qt4 && ./configure override_dh_auto_build: cd common && $(MAKE) cd qt4 && $(MAKE) override_dh_auto_install: cd common && DESTDIR=../debian/backintime-common $(MAKE) install cd qt4 && DESTDIR=../debian/backintime-qt4 $(MAKE) install override_dh_python3: dh_python3 /usr/share/backintime/ %: dh --with python3 $@