pax_global_header00006660000000000000000000000064132261341710014512gustar00rootroot0000000000000052 comment=e2ee57629b404b43aa103461fef987d27d614b3b kup-backup-0.7.1+dfsg/000077500000000000000000000000001322613417100145005ustar00rootroot00000000000000kup-backup-0.7.1+dfsg/CMakeLists.txt000066400000000000000000000031161322613417100172410ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.0) find_package(ECM REQUIRED NO_MODULE) set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH}) project(kup) # Use this option if you want to use the system LibGit2 library. # This is not recommended unless you know what you are doing. option(USE_SYSTEM_LIBGIT2 "Don't set this option unless your are sure that your system version of LibGit2 library is fully compatible with Kup." OFF) if (USE_SYSTEM_LIBGIT2) find_package(LibGit2 REQUIRED) set(libgit_link_name git2) else (USE_SYSTEM_LIBGIT2) set(BUILD_SHARED_LIBS ON) add_subdirectory(libgit2-0.19.0) include_directories(${CMAKE_SOURCE_DIR}/libgit2-0.19.0/include) set(libgit_link_name git24kup) endif (USE_SYSTEM_LIBGIT2) if(${CMAKE_BUILD_TYPE} STREQUAL "Debug" OR ${CMAKE_BUILD_TYPE} STREQUAL "DebugFull") message(WARNING "enabling debug output!") add_definitions(-DDEBUG) else() add_definitions(-DQT_NO_DEBUG_OUTPUT) endif() add_definitions(-DQT_NO_URL_CAST_FROM_STRING) include(KDEInstallDirs) include(KDECMakeSettings) include(KDECompilerSettings) include(FeatureSummary) include(ECMInstallIcons) find_package(Qt5 REQUIRED COMPONENTS Widgets) find_package(KF5 REQUIRED COMPONENTS Solid KIO IdleTime I18n Notifications CoreAddons IconThemes DBusAddons Config Init # needed for the kdeinit cmake macro JobWidgets Plasma ) add_subdirectory(daemon) add_subdirectory(dataengine) add_subdirectory(icons) add_subdirectory(filedigger) add_subdirectory(kcm) add_subdirectory(kioslave) add_subdirectory(po) plasma_install_package(plasmoid org.kde.kupapplet) feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES) kup-backup-0.7.1+dfsg/LICENSE000066400000000000000000000432541322613417100155150ustar00rootroot00000000000000 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. kup-backup-0.7.1+dfsg/MAINTAINER000066400000000000000000000000501322613417100160450ustar00rootroot00000000000000Simon Persson kup-backup-0.7.1+dfsg/README.md000066400000000000000000000071401322613417100157610ustar00rootroot00000000000000# Kup Backup System # Kup is created for helping people to keep up-to-date backups of their personal files. Connecting a USB hard drive is the primary supported way to store files, but saving files to a server over a network connection is also possible for advanced users. When you plug in your external hard drive Kup will automatically start copying your latest changes, but of course it will only do so if you have been active on your computer for some hourse since the last time you took a backup (and it can of course ask you first, before copying anything). In general Kup tries to not disturb you needlessly. There are two types of backup schemes supported, one which keeps the backup folder completely in sync with what you have on your computer, deleting from the backup any file that you have deleted on your computer etc. The other scheme also keeps older versions of your files in the backup folder. When using this, only the small parts of your files that has actually changed since last backup will be saved and therefore incremental backups are very cheap. This is especially useful if you are working on big files. At the same time it's as easy to access your files as if a complete backup was taken every time; every backup contains a complete version of your directories. Behind the scenes all the content that is actually the same is only stored once. To make this happen Kup runs the backup program "bup" in the background, look at https://github.com/bup/bup for more details. ## What the Kup backup system consists of ## - Configuration module, available in your system settings. Here you can configure backup plans, what to include, where to store the backup and how often. You can also see the status for the backup plans here. - A small program running in the background. It will monitor to see when your backup destination is available, schedule and run your backup plans. It has a system tray icon that shows up when a backup destination is available. - Kioslave for accessing bup archives. This allows you to open files and folders directly from an archive, with any KDE application. - A file browsing application for bup archives, allowing you to locate the file you want to restore more easily than with the kioslave. It also helps you restore files or folders. ## Detailed list of features ## - backup types: - Synchronized folders with the use of "rsync". - Incremental backup archive with the use of "bup" - backup destinations: - local filesystem, monitored for availability. That means you can set a destination folder which only exist when perhaps a network shared drive is mounted and Kup will detect when it becomes available. - external storage, like usb hard drives. Also monitored for availability. - schedules: - manual only (triggered from tray icon popup menu) - interval (suggests new backup after some time has passed since last backup) - usage based (suggests new backup after you have been active on your computer for some hours since last backup). ## Needed backup programs ## To actually create backups of your data you will need either "bup" or "rsync" installed. They provide the implementations for the two different types of backups that Kup supports. ## Compiling from source ## To compile you need: - CMake - extra-cmake-modules - The following libraries (including their development headers): - qt5-base - kcoreaddons - kdbusaddons - ki18n - kio - solid - kidletime - knotifications - kiconthemes - kconfig - kinit - kjobwidgets Run from the source directory: ``` mkdir build cd build cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=release .. make sudo make install ``` kup-backup-0.7.1+dfsg/daemon/000077500000000000000000000000001322613417100157435ustar00rootroot00000000000000kup-backup-0.7.1+dfsg/daemon/CMakeLists.txt000066400000000000000000000015611322613417100205060ustar00rootroot00000000000000 include_directories("../settings") set(kupdaemon_SRCS main.cpp kupdaemon.cpp planexecutor.cpp edexecutor.cpp fsexecutor.cpp backupjob.cpp bupjob.cpp bupverificationjob.cpp buprepairjob.cpp rsyncjob.cpp ../settings/backupplan.cpp ../settings/kupsettings.cpp ../settings/kuputils.cpp ) kf5_add_kdeinit_executable(kup-daemon ${kupdaemon_SRCS}) target_link_libraries(kdeinit_kup-daemon Qt5::Core Qt5::DBus Qt5::Gui KF5::ConfigCore KF5::KIOCore KF5::KIOFileWidgets KF5::IdleTime KF5::I18n KF5::Solid KF5::Notifications KF5::CoreAddons KF5::DBusAddons KF5::JobWidgets ) ########### install files ############### install(TARGETS kup-daemon ${INSTALL_TARGETS_DEFAULT_ARGS}) install(TARGETS kdeinit_kup-daemon ${INSTALL_TARGETS_DEFAULT_ARGS}) install(FILES kup-daemon.desktop DESTINATION ${AUTOSTART_INSTALL_DIR}) install(FILES kupdaemon.notifyrc DESTINATION ${KNOTIFYRC_INSTALL_DIR}) kup-backup-0.7.1+dfsg/daemon/backupjob.cpp000066400000000000000000000074511322613417100204160ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include "backupjob.h" #include "bupjob.h" #include "kupdaemon.h" #include "rsyncjob.h" #include #include #ifdef Q_OS_LINUX #include #endif #include BackupJob::BackupJob(const BackupPlan &pBackupPlan, const QString &pDestinationPath, const QString &pLogFilePath, KupDaemon *pKupDaemon) :KJob(), mBackupPlan(pBackupPlan), mDestinationPath(pDestinationPath), mLogFilePath(pLogFilePath), mKupDaemon(pKupDaemon) { mLogFile.setFileName(mLogFilePath); mLogFile.open(QIODevice::WriteOnly | QIODevice::Truncate); mLogStream.setDevice(&mLogFile); } void BackupJob::start() { mKupDaemon->registerJob(this); QTimer::singleShot(0, this, &BackupJob::performJob); } void BackupJob::makeNice(int pPid) { #ifdef Q_OS_LINUX // See linux documentation Documentation/block/ioprio.txt for details of the syscall syscall(SYS_ioprio_set, 1, pPid, 3 << 13 | 7); #endif setpriority(PRIO_PROCESS, pPid, 19); } QString BackupJob::quoteArgs(const QStringList &pCommand) { QString lResult; bool lFirst = true; foreach(const QString &lArg, pCommand) { if(lFirst) { lResult.append(lArg); lFirst = false; } else { lResult.append(QStringLiteral(" \"")); lResult.append(lArg); lResult.append(QStringLiteral("\"")); } } return lResult; } void BackupJob::jobFinishedSuccess() { // unregistring a job will normally show a UI notification that it the job was completed // setting the error code to indicate that the user canceled the job makes the UI not show // any notification. We want that since we want to trigger our own notification which has // more buttons and stuff. setError(KilledJobError); mKupDaemon->unregisterJob(this); // The error code is still used by our internal logic, for triggering our own notification. // So make sure to set it correctly. setError(NoError); emitResult(); } void BackupJob::jobFinishedError(BackupJob::ErrorCodes pErrorCode, QString pErrorText) { // if job has already set the error that it was killed by the user then ignore any fault // we get here as that fault is surely about the process exit code was not zero. // And we don't want to report about that (with our notification) in this case. bool lWasKilled = (error() == KilledJobError); setError(KilledJobError); mKupDaemon->unregisterJob(this); if(!lWasKilled) { setError(pErrorCode); setErrorText(pErrorText); } emitResult(); } kup-backup-0.7.1+dfsg/daemon/backupjob.h000066400000000000000000000044571322613417100200660ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #ifndef BACKUPJOB_H #define BACKUPJOB_H #include "backupplan.h" #include #include #include #include class KupDaemon; class BackupJob : public KJob { Q_OBJECT public: enum ErrorCodes { ErrorWithLog = UserDefinedError, ErrorWithoutLog, ErrorSuggestRepair }; void start() Q_DECL_OVERRIDE; protected slots: virtual void performJob() = 0; protected: BackupJob(const BackupPlan &pBackupPlan, const QString &pDestinationPath, const QString &pLogFilePath, KupDaemon *pKupDaemon); static void makeNice(int pPid); QString quoteArgs(const QStringList &pCommand); void jobFinishedSuccess(); void jobFinishedError(ErrorCodes pErrorCode, QString pErrorText); const BackupPlan &mBackupPlan; QString mDestinationPath; QString mLogFilePath; QFile mLogFile; QTextStream mLogStream; KupDaemon *mKupDaemon; }; #endif // BACKUPJOB_H kup-backup-0.7.1+dfsg/daemon/bupjob.cpp000066400000000000000000000313651322613417100177400ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include "bupjob.h" #include #include #include #include BupJob::BupJob(const BackupPlan &pBackupPlan, const QString &pDestinationPath, const QString &pLogFilePath, KupDaemon *pKupDaemon) :BackupJob(pBackupPlan, pDestinationPath, pLogFilePath, pKupDaemon) { mFsckProcess.setOutputChannelMode(KProcess::SeparateChannels); mIndexProcess.setOutputChannelMode(KProcess::SeparateChannels); mSaveProcess.setOutputChannelMode(KProcess::SeparateChannels); mPar2Process.setOutputChannelMode(KProcess::SeparateChannels); setCapabilities(KJob::Suspendable); } void BupJob::performJob() { KProcess lPar2Process; lPar2Process.setOutputChannelMode(KProcess::SeparateChannels); lPar2Process << QStringLiteral("bup") << QStringLiteral("fsck") << QStringLiteral("--par2-ok"); int lExitCode = lPar2Process.execute(); if(lExitCode < 0) { jobFinishedError(ErrorWithoutLog, xi18nc("@info notification", "The bup program is " "needed but could not be found, maybe it is not installed?")); return; } else if(mBackupPlan.mGenerateRecoveryInfo && lExitCode != 0) { jobFinishedError(ErrorWithoutLog, xi18nc("@info notification", "The par2 program is " "needed but could not be found, maybe it is not installed?")); return; } mLogStream << QStringLiteral("Kup is starting bup backup job at ") << QLocale().toString(QDateTime::currentDateTime()) << endl << endl; KProcess lInitProcess; lInitProcess.setOutputChannelMode(KProcess::SeparateChannels); lInitProcess << QStringLiteral("bup"); lInitProcess << QStringLiteral("-d") << mDestinationPath; lInitProcess << QStringLiteral("init"); mLogStream << quoteArgs(lInitProcess.program()) << endl; if(lInitProcess.execute() != 0) { mLogStream << QString::fromUtf8(lInitProcess.readAllStandardError()) << endl; mLogStream << endl << QStringLiteral("Kup did not successfully complete the bup backup job: " "failed to initialize backup destination.") << endl; jobFinishedError(ErrorWithLog, xi18nc("@info notification", "Backup destination could not be initialised. " "See log file for more details.")); return; } if(mBackupPlan.mCheckBackups) { mFsckProcess << QStringLiteral("bup"); mFsckProcess << QStringLiteral("-d") << mDestinationPath; mFsckProcess << QStringLiteral("fsck") << QStringLiteral("--quick"); connect(&mFsckProcess, SIGNAL(finished(int,QProcess::ExitStatus)), SLOT(slotCheckingDone(int,QProcess::ExitStatus))); connect(&mFsckProcess, SIGNAL(started()), SLOT(slotCheckingStarted())); mLogStream << quoteArgs(mFsckProcess.program()) << endl; mFsckProcess.start(); mInfoRateLimiter.start(); } else { slotCheckingDone(0, QProcess::NormalExit); } } void BupJob::slotCheckingStarted() { makeNice(mFsckProcess.pid()); emit description(this, i18n("Checking backup integrity")); } void BupJob::slotCheckingDone(int pExitCode, QProcess::ExitStatus pExitStatus) { mLogStream << QString::fromUtf8(mFsckProcess.readAllStandardError()); if(pExitStatus != QProcess::NormalExit || pExitCode != 0) { mLogStream << endl << QStringLiteral("Kup did not successfully complete the bup backup job: " "failed integrity check. Your backups could be " "corrupted! See above for details.") << endl; if(mBackupPlan.mGenerateRecoveryInfo) { jobFinishedError(ErrorSuggestRepair, xi18nc("@info notification", "Failed backup integrity check. Your backups could be corrupted! " "See log file for more details. Do you want to try repairing the backup files?")); } else { jobFinishedError(ErrorWithLog, xi18nc("@info notification", "Failed backup integrity check. Your backups could be corrupted! " "See log file for more details.")); } return; } mIndexProcess << QStringLiteral("bup"); mIndexProcess << QStringLiteral("-d") << mDestinationPath; mIndexProcess << QStringLiteral("index") << QStringLiteral("-u"); foreach(QString lExclude, mBackupPlan.mPathsExcluded) { mIndexProcess << QStringLiteral("--exclude"); mIndexProcess << lExclude; } mIndexProcess << mBackupPlan.mPathsIncluded; connect(&mIndexProcess, SIGNAL(finished(int,QProcess::ExitStatus)), SLOT(slotIndexingDone(int,QProcess::ExitStatus))); connect(&mIndexProcess, SIGNAL(started()), SLOT(slotIndexingStarted())); mLogStream << quoteArgs(mIndexProcess.program()) << endl; mIndexProcess.start(); } void BupJob::slotIndexingStarted() { makeNice(mIndexProcess.pid()); emit description(this, i18n("Checking what to copy")); } void BupJob::slotIndexingDone(int pExitCode, QProcess::ExitStatus pExitStatus) { mLogStream << QString::fromUtf8(mIndexProcess.readAllStandardError()); if(pExitStatus != QProcess::NormalExit || pExitCode != 0) { mLogStream << endl << QStringLiteral("Kup did not successfully complete the bup backup job: failed to index everything.") << endl; jobFinishedError(ErrorWithLog, xi18nc("@info notification", "Failed to analyze files. " "See log file for more details.")); return; } mSaveProcess << QStringLiteral("bup"); mSaveProcess << QStringLiteral("-d") << mDestinationPath; mSaveProcess << QStringLiteral("save"); mSaveProcess << QStringLiteral("-n") << QStringLiteral("kup") << QStringLiteral("-vv"); mSaveProcess << mBackupPlan.mPathsIncluded; mLogStream << quoteArgs(mSaveProcess.program()) << endl; connect(&mSaveProcess, SIGNAL(finished(int,QProcess::ExitStatus)), SLOT(slotSavingDone(int,QProcess::ExitStatus))); connect(&mSaveProcess, SIGNAL(started()), SLOT(slotSavingStarted())); connect(&mSaveProcess, &KProcess::readyReadStandardError, this, &BupJob::slotReadBupErrors); mSaveProcess.setEnv(QStringLiteral("BUP_FORCE_TTY"), QStringLiteral("2")); mSaveProcess.start(); } void BupJob::slotSavingStarted() { makeNice(mSaveProcess.pid()); emit description(this, i18n("Saving backup")); } void BupJob::slotSavingDone(int pExitCode, QProcess::ExitStatus pExitStatus) { mLogStream << QString::fromUtf8(mSaveProcess.readAllStandardError()); if(pExitStatus != QProcess::NormalExit || pExitCode != 0) { mLogStream << endl << QStringLiteral("Kup did not successfully complete the bup backup job: " "failed to save everything.") << endl; jobFinishedError(ErrorWithLog, xi18nc("@info notification", "Failed to save backup. " "See log file for more details.")); return; } if(mBackupPlan.mGenerateRecoveryInfo) { mPar2Process << QStringLiteral("bup"); mPar2Process << QStringLiteral("-d") << mDestinationPath; mPar2Process << QStringLiteral("fsck") << QStringLiteral("-g"); connect(&mPar2Process, SIGNAL(finished(int,QProcess::ExitStatus)), SLOT(slotRecoveryInfoDone(int,QProcess::ExitStatus))); connect(&mPar2Process, SIGNAL(started()), SLOT(slotRecoveryInfoStarted())); mLogStream << quoteArgs(mPar2Process.program()) << endl; mPar2Process.start(); } else { mLogStream << endl << QStringLiteral("Kup successfully completed the bup backup job at ") << QLocale().toString(QDateTime::currentDateTime()) << endl; jobFinishedSuccess(); } } void BupJob::slotRecoveryInfoStarted() { makeNice(mPar2Process.pid()); emit description(this, i18n("Generating recovery information")); } void BupJob::slotRecoveryInfoDone(int pExitCode, QProcess::ExitStatus pExitStatus) { mLogStream << QString::fromUtf8(mPar2Process.readAllStandardError()); if(pExitStatus != QProcess::NormalExit || pExitCode != 0) { mLogStream << endl << QStringLiteral("Kup did not successfully complete the bup backup job: " "failed to generate recovery info.") << endl; jobFinishedError(ErrorWithLog, xi18nc("@info notification", "Failed to generate recovery info for the backup. " "See log file for more details.")); } else { mLogStream << endl << QStringLiteral("Kup successfully completed the bup backup job.") << endl; jobFinishedSuccess(); } } void BupJob::slotReadBupErrors() { bool lValidInfo = false, lValidFileName = false; qulonglong lCopiedKBytes, lTotalKBytes, lCopiedFiles, lTotalFiles; ulong lSpeedKBps, lPercent = 0; QString lFileName; QTextStream lStream(mSaveProcess.readAllStandardError()); QString lLine; while(lStream.readLineInto(&lLine, 500)) { // mLogStream << "read a line: " << lLine << endl; if(lLine.startsWith(QStringLiteral("Reading index:"))) { continue; } else if(lLine.startsWith(QStringLiteral("bloom:"))) { continue; } else if(lLine.startsWith(QStringLiteral("midx:"))) { continue; } else if(lLine.startsWith(QStringLiteral("Saving:"))) { QRegularExpression lRegExp(QStringLiteral("(\\d+)/(\\d+)k, (\\d+)/(\\d+) files\\) \\S* (?:(\\d+)k/s|)")); QRegularExpressionMatch lMatch = lRegExp.match(lLine); if(lMatch.hasMatch()) { lCopiedKBytes = lMatch.captured(1).toULongLong(); lTotalKBytes = lMatch.captured(2).toULongLong(); lCopiedFiles = lMatch.captured(3).toULongLong(); lTotalFiles = lMatch.captured(4).toULongLong(); lSpeedKBps = lMatch.captured(5).toULong(); if(lTotalKBytes != 0) { lPercent = qMax(100*lCopiedKBytes/lTotalKBytes, (qulonglong)1); } lValidInfo = true; } } else if((lLine.at(0) == ' ' || lLine.at(0) == 'A' || lLine.at(0) == 'M') && lLine.at(1) == ' ' && lLine.at(2) == '/') { lLine.remove(0, 2); lFileName = lLine; lValidFileName = true; } else if(!lLine.startsWith("D /")) { mLogStream << lLine << endl; } } if(mInfoRateLimiter.hasExpired(200)) { if(lValidInfo) { setPercent(lPercent); setTotalAmount(KJob::Bytes, lTotalKBytes*1024); setTotalAmount(KJob::Files, lTotalFiles); setProcessedAmount(KJob::Bytes, lCopiedKBytes*1024); setProcessedAmount(KJob::Files, lCopiedFiles); emitSpeed(lSpeedKBps * 1024); } if(lValidFileName) { emit description(this, i18n("Saving backup"), qMakePair(i18nc("Label for file currently being copied", "File"), lFileName)); } mInfoRateLimiter.start(); } } bool BupJob::doSuspend() { if(mFsckProcess.state() == KProcess::Running) { return 0 == ::kill(mFsckProcess.pid(), SIGSTOP); } if(mIndexProcess.state() == KProcess::Running) { return 0 == ::kill(mIndexProcess.pid(), SIGSTOP); } if(mSaveProcess.state() == KProcess::Running) { return 0 == ::kill(mSaveProcess.pid(), SIGSTOP); } if(mPar2Process.state() == KProcess::Running) { return 0 == ::kill(mPar2Process.pid(), SIGSTOP); } return false; } bool BupJob::doResume() { if(mFsckProcess.state() == KProcess::Running) { return 0 == ::kill(mFsckProcess.pid(), SIGCONT); } if(mIndexProcess.state() == KProcess::Running) { return 0 == ::kill(mIndexProcess.pid(), SIGCONT); } if(mSaveProcess.state() == KProcess::Running) { return 0 == ::kill(mSaveProcess.pid(), SIGCONT); } if(mPar2Process.state() == KProcess::Running) { return 0 == ::kill(mPar2Process.pid(), SIGCONT); } return false; } kup-backup-0.7.1+dfsg/daemon/bupjob.h000066400000000000000000000046771322613417100174130ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #ifndef BUPJOB_H #define BUPJOB_H #include "backupjob.h" #include #include class KupDaemon; class BupJob : public BackupJob { Q_OBJECT public: BupJob(const BackupPlan &pBackupPlan, const QString &pDestinationPath, const QString &pLogFilePath, KupDaemon *pKupDaemon); protected slots: void performJob() Q_DECL_OVERRIDE; void slotCheckingStarted(); void slotCheckingDone(int pExitCode, QProcess::ExitStatus pExitStatus); void slotIndexingStarted(); void slotIndexingDone(int pExitCode, QProcess::ExitStatus pExitStatus); void slotSavingStarted(); void slotSavingDone(int pExitCode, QProcess::ExitStatus pExitStatus); void slotRecoveryInfoStarted(); void slotRecoveryInfoDone(int pExitCode, QProcess::ExitStatus pExitStatus); void slotReadBupErrors(); protected: bool doSuspend() Q_DECL_OVERRIDE; bool doResume() Q_DECL_OVERRIDE; KProcess mFsckProcess; KProcess mIndexProcess; KProcess mSaveProcess; KProcess mPar2Process; QElapsedTimer mInfoRateLimiter; }; #endif /*BUPJOB_H*/ kup-backup-0.7.1+dfsg/daemon/buprepairjob.cpp000066400000000000000000000120021322613417100211260ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include "buprepairjob.h" #include BupRepairJob::BupRepairJob(const BackupPlan &pBackupPlan, const QString &pDestinationPath, const QString &pLogFilePath, KupDaemon *pKupDaemon) : BackupJob(pBackupPlan, pDestinationPath, pLogFilePath, pKupDaemon){ mFsckProcess.setOutputChannelMode(KProcess::SeparateChannels); } void BupRepairJob::performJob() { KProcess lPar2Process; lPar2Process.setOutputChannelMode(KProcess::SeparateChannels); lPar2Process << QStringLiteral("bup") << QStringLiteral("fsck") << QStringLiteral("--par2-ok"); int lExitCode = lPar2Process.execute(); if(lExitCode < 0) { jobFinishedError(ErrorWithoutLog, xi18nc("@info notification", "The bup program is needed but could not be found, " "maybe it is not installed?")); return; } else if(mBackupPlan.mGenerateRecoveryInfo && lExitCode != 0) { jobFinishedError(ErrorWithoutLog, xi18nc("@info notification", "The par2 program is needed but could not be found, " "maybe it is not installed?")); return; } mLogStream << QStringLiteral("Kup is starting bup repair job at ") << QLocale().toString(QDateTime::currentDateTime()) << endl << endl; mFsckProcess << QStringLiteral("bup"); mFsckProcess << QStringLiteral("-d") << mDestinationPath; mFsckProcess << QStringLiteral("fsck") << QStringLiteral("-r"); connect(&mFsckProcess, SIGNAL(finished(int,QProcess::ExitStatus)), SLOT(slotRepairDone(int,QProcess::ExitStatus))); connect(&mFsckProcess, SIGNAL(started()), SLOT(slotRepairStarted())); mLogStream << mFsckProcess.program().join(QStringLiteral(" ")) << endl; mFsckProcess.start(); } void BupRepairJob::slotRepairStarted() { makeNice(mFsckProcess.pid()); } void BupRepairJob::slotRepairDone(int pExitCode, QProcess::ExitStatus pExitStatus) { mLogStream << QString::fromUtf8(mFsckProcess.readAllStandardError()); if(pExitStatus != QProcess::NormalExit) { mLogStream << endl << QStringLiteral("Repair failed (the repair process crashed). Your backups could be " "corrupted! See above for details.") << endl; jobFinishedError(ErrorWithLog, xi18nc("@info notification", "Backup repair failed. Your backups could be corrupted! " "See log file for more details.")); } else if(pExitCode == 100) { mLogStream << endl << QStringLiteral("Repair succeded. See above for details.") << endl; jobFinishedError(ErrorWithLog, xi18nc("@info notification", "Success! Backup repair worked. See log file for more details.")); } else if(pExitCode == 0) { mLogStream << endl << QStringLiteral("Repair was not necessary. Your backups are fine. See " "above for details.") << endl; jobFinishedError(ErrorWithLog, xi18nc("@info notification", "Backup repair was not necessary. Your backups are not corrupted." "See log file for more details.")); } else { mLogStream << endl << QStringLiteral("Repair failed. Your backups could still be " "corrupted! See above for details.") << endl; jobFinishedError(ErrorWithLog, xi18nc("@info notification", "Backup repair failed. Your backups could still be corrupted! " "See log file for more details.")); } } kup-backup-0.7.1+dfsg/daemon/buprepairjob.h000066400000000000000000000036771322613417100206150ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #ifndef BUPREPAIRJOB_H #define BUPREPAIRJOB_H #include "backupjob.h" #include class KupDaemon; class BupRepairJob : public BackupJob { Q_OBJECT public: BupRepairJob(const BackupPlan &pBackupPlan, const QString &pDestinationPath, const QString &pLogFilePath, KupDaemon *pKupDaemon); protected slots: void performJob() Q_DECL_OVERRIDE; void slotRepairStarted(); void slotRepairDone(int pExitCode, QProcess::ExitStatus pExitStatus); protected: KProcess mFsckProcess; }; #endif // BUPREPAIRJOB_H kup-backup-0.7.1+dfsg/daemon/bupverificationjob.cpp000066400000000000000000000121741322613417100223400ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include "bupverificationjob.h" #include BupVerificationJob::BupVerificationJob(const BackupPlan &pBackupPlan, const QString &pDestinationPath, const QString &pLogFilePath, KupDaemon *pKupDaemon) : BackupJob(pBackupPlan, pDestinationPath, pLogFilePath, pKupDaemon){ mFsckProcess.setOutputChannelMode(KProcess::SeparateChannels); } void BupVerificationJob::performJob() { KProcess lVersionProcess; lVersionProcess.setOutputChannelMode(KProcess::SeparateChannels); lVersionProcess << QStringLiteral("bup") << QStringLiteral("version"); if(lVersionProcess.execute() < 0) { jobFinishedError(ErrorWithoutLog, xi18nc("@info notification", "The bup program is needed but could not be found, " "maybe it is not installed?")); return; } mLogStream << QStringLiteral("Kup is starting bup verification job at ") << QLocale().toString(QDateTime::currentDateTime()) << endl << endl; mFsckProcess << QStringLiteral("bup"); mFsckProcess << QStringLiteral("-d") << mDestinationPath; mFsckProcess << QStringLiteral("fsck") << QStringLiteral("--quick"); connect(&mFsckProcess, SIGNAL(finished(int,QProcess::ExitStatus)), SLOT(slotCheckingDone(int,QProcess::ExitStatus))); connect(&mFsckProcess, SIGNAL(started()), SLOT(slotCheckingStarted())); mLogStream << mFsckProcess.program().join(QStringLiteral(" ")) << endl; mFsckProcess.start(); } void BupVerificationJob::slotCheckingStarted() { makeNice(mFsckProcess.pid()); } void BupVerificationJob::slotCheckingDone(int pExitCode, QProcess::ExitStatus pExitStatus) { mLogStream << QString::fromUtf8(mFsckProcess.readAllStandardError()); if(pExitStatus != QProcess::NormalExit) { mLogStream << endl << QStringLiteral("Integrity check failed (the process crashed). Your backups could be " "corrupted! See above for details.") << endl; if(mBackupPlan.mGenerateRecoveryInfo) { jobFinishedError(ErrorSuggestRepair, xi18nc("@info notification", "Failed backup integrity check. Your backups could be corrupted! " "See log file for more details. Do you want to try repairing the backup files?")); } else { jobFinishedError(ErrorWithLog, xi18nc("@info notification", "Failed backup integrity check. Your backups are corrupted! " "See log file for more details.")); } } else if(pExitCode == 0) { mLogStream << endl << QStringLiteral("Backup integrity test was successful. " "Your backups are fine. See above for details.") << endl; jobFinishedError(ErrorWithLog, xi18nc("@info notification", "Backup integrity test was successful, " "Your backups are fine.")); } else { mLogStream << endl << QStringLiteral("Integrity check failed. Your backups are " "corrupted! See above for details.") << endl; if(mBackupPlan.mGenerateRecoveryInfo) { jobFinishedError(ErrorSuggestRepair, xi18nc("@info notification", "Failed backup integrity check. Your backups are corrupted! " "See log file for more details. Do you want to try repairing the backup files?")); } else { jobFinishedError(ErrorWithLog, xi18nc("@info notification", "Failed backup integrity check. Your backups are corrupted! " "See log file for more details.")); } } } kup-backup-0.7.1+dfsg/daemon/bupverificationjob.h000066400000000000000000000037411322613417100220050ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #ifndef BUPVERIFICATIONJOB_H #define BUPVERIFICATIONJOB_H #include "backupjob.h" #include class KupDaemon; class BupVerificationJob : public BackupJob { Q_OBJECT public: BupVerificationJob(const BackupPlan &pBackupPlan, const QString &pDestinationPath, const QString &pLogFilePath, KupDaemon *pKupDaemon); protected slots: void performJob() Q_DECL_OVERRIDE; void slotCheckingStarted(); void slotCheckingDone(int pExitCode, QProcess::ExitStatus pExitStatus); protected: KProcess mFsckProcess; }; #endif // BUPVERIFICATIONJOB_H kup-backup-0.7.1+dfsg/daemon/edexecutor.cpp000066400000000000000000000157641322613417100206330ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include "edexecutor.h" #include "backupplan.h" #include #include #include #include #include #include #include #include #include #include #include #include #include EDExecutor::EDExecutor(BackupPlan *pPlan, KupDaemon *pKupDaemon) :PlanExecutor(pPlan, pKupDaemon), mStorageAccess(NULL), mWantsToRunBackup(false), mWantsToShowFiles(false) { connect(Solid::DeviceNotifier::instance(), SIGNAL(deviceAdded(QString)), SLOT(deviceAdded(QString))); connect(Solid::DeviceNotifier::instance(), SIGNAL(deviceRemoved(QString)), SLOT(deviceRemoved(QString))); } void EDExecutor::checkStatus() { QList lDeviceList = Solid::Device::listFromType(Solid::DeviceInterface::StorageVolume); foreach (const Solid::Device &lDevice, lDeviceList) { deviceAdded(lDevice.udi()); } updateAccessibility(); } void EDExecutor::deviceAdded(const QString &pUdi) { Solid::Device lDevice(pUdi); if(!lDevice.is()) { return; } Solid::StorageVolume *lVolume = lDevice.as(); QString lUUID = lVolume->uuid(); if(lUUID.isEmpty()) { //seems to happen for vfat partitions Solid::Device lDriveDevice; if(lDevice.is()) { lDriveDevice = lDevice; } else { lDriveDevice = lDevice.parent(); } lUUID += lDriveDevice.description(); lUUID += QStringLiteral("|"); lUUID += lVolume->label(); } if(mPlan->mExternalUUID == lUUID) { mCurrentUdi = pUdi; mStorageAccess = lDevice.as(); enterAvailableState(); } } void EDExecutor::deviceRemoved(const QString &pUdi) { if(mCurrentUdi == pUdi) { mWantsToRunBackup = false; mCurrentUdi.clear(); mStorageAccess = NULL; enterNotAvailableState(); } } void EDExecutor::updateAccessibility() { if(mWantsToRunBackup) { startBackup(); // run startBackup again now that it has been mounted } else if(mWantsToShowFiles) { showBackupFiles(); } } void EDExecutor::startBackup() { if(!mStorageAccess) { exitBackupRunningState(false); return; } if(mStorageAccess->isAccessible()) { if(!mStorageAccess->filePath().isEmpty()) { mDestinationPath = mStorageAccess->filePath(); mDestinationPath += QStringLiteral("/"); mDestinationPath += mPlan->mExternalDestinationPath; QDir lDir(mDestinationPath); if(!lDir.exists()) { lDir.mkdir(mDestinationPath); } QFileInfo lInfo(mDestinationPath); if(lInfo.isWritable()) { BackupJob *lJob = createBackupJob(); if(lJob == NULL) { KNotification::event(KNotification::Error, xi18nc("@title:window", "Problem"), xi18nc("notification", "Invalid type of backup in configuration.")); exitBackupRunningState(false); return; } connect(lJob, SIGNAL(result(KJob*)), SLOT(slotBackupDone(KJob*))); lJob->start(); mWantsToRunBackup = false; //reset, only used to retrigger this state-entering if drive wasn't already mounted } else { KNotification::event(KNotification::Error, xi18nc("@title:window", "Problem"), xi18nc("notification", "You don't have write permission to backup destination.")); exitBackupRunningState(false); return; } } } else { //not mounted yet. trigger mount and come back to this startBackup again later mWantsToRunBackup = true; connect(mStorageAccess, SIGNAL(accessibilityChanged(bool,QString)), SLOT(updateAccessibility())); mStorageAccess->setup(); //try to mount it, fail silently for now. } } void EDExecutor::slotBackupDone(KJob *pJob) { if(pJob->error()) { if(pJob->error() != KJob::KilledJobError) { notifyBackupFailed(pJob); } exitBackupRunningState(false); } else { notifyBackupSucceeded(); mPlan->mLastCompleteBackup = QDateTime::currentDateTime().toUTC(); KDiskFreeSpaceInfo lSpaceInfo = KDiskFreeSpaceInfo::freeSpaceInfo(mDestinationPath); if(lSpaceInfo.isValid()) mPlan->mLastAvailableSpace = (double)lSpaceInfo.available(); else mPlan->mLastAvailableSpace = -1.0; //unknown size KIO::DirectorySizeJob *lSizeJob = KIO::directorySize(QUrl::fromLocalFile(mDestinationPath)); connect(lSizeJob, SIGNAL(result(KJob*)), SLOT(slotBackupSizeDone(KJob*))); lSizeJob->start(); } } void EDExecutor::slotBackupSizeDone(KJob *pJob) { if(pJob->error()) { KNotification::event(KNotification::Error, xi18nc("@title:window", "Problem"), pJob->errorText()); mPlan->mLastBackupSize = -1.0; //unknown size } else { KIO::DirectorySizeJob *lSizeJob = qobject_cast(pJob); mPlan->mLastBackupSize = (double)lSizeJob->totalSize(); } mPlan->save(); exitBackupRunningState(pJob->error() == 0); } void EDExecutor::showBackupFiles() { if(!mStorageAccess) return; if(mStorageAccess->isAccessible()) { if(!mStorageAccess->filePath().isEmpty()) { mDestinationPath = mStorageAccess->filePath(); mDestinationPath += QStringLiteral("/"); mDestinationPath += mPlan->mExternalDestinationPath; QFileInfo lDestinationInfo(mDestinationPath); if(lDestinationInfo.exists() && lDestinationInfo.isDir()) { mWantsToShowFiles = false; //reset, only used to retrigger this state-entering if drive wasn't already mounted PlanExecutor::showBackupFiles(); } } } else { //not mounted yet. trigger mount and come back to this startBackup again later mWantsToShowFiles = true; connect(mStorageAccess, SIGNAL(accessibilityChanged(bool,QString)), SLOT(updateAccessibility())); mStorageAccess->setup(); //try to mount it, fail silently for now. } } kup-backup-0.7.1+dfsg/daemon/edexecutor.h000066400000000000000000000044111322613417100202630ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #ifndef EDEXECUTOR_H #define EDEXECUTOR_H #include "planexecutor.h" #include #include class BackupPlan; class KJob; // Plan executor that stores the backup to an external disk. // Uses libsolid to monitor for when it becomes available. class EDExecutor: public PlanExecutor { Q_OBJECT public: EDExecutor(BackupPlan *pPlan, KupDaemon *pKupDaemon); public slots: virtual void checkStatus(); virtual void showBackupFiles(); protected slots: void deviceAdded(const QString &pUdi); void deviceRemoved(const QString &pUdi); void updateAccessibility(); virtual void startBackup(); void slotBackupDone(KJob *pJob); void slotBackupSizeDone(KJob *pJob); protected: Solid::StorageAccess *mStorageAccess; QString mCurrentUdi; bool mWantsToRunBackup; bool mWantsToShowFiles; }; #endif // EDEXECUTOR_H kup-backup-0.7.1+dfsg/daemon/fsexecutor.cpp000066400000000000000000000146211322613417100206420ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include "fsexecutor.h" #include "backupplan.h" #include #include #include #include #include #include #include #include #include #include #include FSExecutor::FSExecutor(BackupPlan *pPlan, KupDaemon *pKupDaemon) :PlanExecutor(pPlan, pKupDaemon) { mDestinationPath = QDir::cleanPath(mPlan->mFilesystemDestinationPath.toLocalFile()); mDirWatch = new KDirWatch(this); connect(mDirWatch, SIGNAL(deleted(QString)), SLOT(checkStatus())); mMountWatcher.start(); } FSExecutor::~FSExecutor() { mMountWatcher.terminate(); mMountWatcher.wait(); } void FSExecutor::checkStatus() { static bool lComingBackLater = false; if(!mWatchedParentDir.isEmpty() && !lComingBackLater) { // came here because something happened to a parent folder, // come back in a few seconds, give a new mount some time before checking // status of destination folder QTimer::singleShot(5000, this, SLOT(checkStatus())); lComingBackLater = true; return; } lComingBackLater = false; QDir lDir(mDestinationPath); if(!lDir.exists()) { // Destination doesn't exist, find nearest existing parent folder and // watch that for dirty or deleted if(mDirWatch->contains(mDestinationPath)) { mDirWatch->removeDir(mDestinationPath); } QString lExisting = mDestinationPath; do { lExisting += QStringLiteral("/.."); lDir = QDir(QDir::cleanPath(lExisting)); } while(!lDir.exists()); lExisting = lDir.canonicalPath(); if(lExisting != mWatchedParentDir) { // new parent to watch if(!mWatchedParentDir.isEmpty()) { // were already watching a parent mDirWatch->removeDir(mWatchedParentDir); } else { // start watching a parent connect(mDirWatch, SIGNAL(dirty(QString)), SLOT(checkStatus())); connect(&mMountWatcher, SIGNAL(mountsChanged()), SLOT(checkMountPoints()), Qt::QueuedConnection); } mWatchedParentDir = lExisting; mDirWatch->addDir(mWatchedParentDir); } if(mState != NOT_AVAILABLE) { enterNotAvailableState(); } } else { // Destination exists... only watch for delete if(!mWatchedParentDir.isEmpty()) { disconnect(mDirWatch, SIGNAL(dirty(QString)), this, SLOT(checkStatus())); disconnect(&mMountWatcher, SIGNAL(mountsChanged()), this, SLOT(checkMountPoints())); mDirWatch->removeDir(mWatchedParentDir); mWatchedParentDir.clear(); } mDirWatch->addDir(mDestinationPath); QFileInfo lInfo(mDestinationPath); if(lInfo.isWritable() && mState == NOT_AVAILABLE) { enterAvailableState(); }else if(!lInfo.isWritable() && mState != NOT_AVAILABLE) { enterNotAvailableState(); } } } void FSExecutor::startBackup() { BackupJob *lJob = createBackupJob(); if(lJob == NULL) { KNotification::event(KNotification::Error, xi18nc("@title:window", "Problem"), xi18nc("notification", "Invalid type of backup in configuration.")); exitBackupRunningState(false); return; } connect(lJob, SIGNAL(result(KJob*)), SLOT(slotBackupDone(KJob*))); lJob->start(); } void FSExecutor::slotBackupDone(KJob *pJob) { if(pJob->error()) { if(pJob->error() != KJob::KilledJobError) { notifyBackupFailed(pJob); } exitBackupRunningState(false); } else { notifyBackupSucceeded(); mPlan->mLastCompleteBackup = QDateTime::currentDateTime().toUTC(); KDiskFreeSpaceInfo lSpaceInfo = KDiskFreeSpaceInfo::freeSpaceInfo(mDestinationPath); if(lSpaceInfo.isValid()) mPlan->mLastAvailableSpace = (double)lSpaceInfo.available(); else mPlan->mLastAvailableSpace = -1.0; //unknown size KIO::DirectorySizeJob *lSizeJob = KIO::directorySize(QUrl::fromLocalFile(mDestinationPath)); connect(lSizeJob, SIGNAL(result(KJob*)), SLOT(slotBackupSizeDone(KJob*))); lSizeJob->start(); } } void FSExecutor::slotBackupSizeDone(KJob *pJob) { if(pJob->error()) { KNotification::event(KNotification::Error, xi18nc("@title:window", "Problem"), pJob->errorText()); mPlan->mLastBackupSize = -1.0; //unknown size } else { KIO::DirectorySizeJob *lSizeJob = qobject_cast(pJob); mPlan->mLastBackupSize = (double)lSizeJob->totalSize(); } mPlan->save(); exitBackupRunningState(pJob->error() == 0); } void FSExecutor::checkMountPoints() { QFile lMountsFile(QStringLiteral("/proc/mounts")); if(!lMountsFile.open(QIODevice::ReadOnly | QIODevice::Text)) { return; } // don't use atEnd() to detect when finished reading file, size of // this special file is 0 but still returns data when read. forever { QByteArray lLine = lMountsFile.readLine(); if(lLine.isEmpty()) { break; } QTextStream lTextStream(lLine); QString lDevice, lMountPoint; lTextStream >> lDevice >> lMountPoint; if(lMountPoint == mWatchedParentDir) { checkStatus(); } } } void MountWatcher::run() { int lMountsFd = open("/proc/mounts", O_RDONLY); fd_set lFdSet; forever { FD_ZERO(&lFdSet); FD_SET(lMountsFd, &lFdSet); if(select(lMountsFd+1, NULL, NULL, &lFdSet, NULL) > 0) { emit mountsChanged(); } } } kup-backup-0.7.1+dfsg/daemon/fsexecutor.h000066400000000000000000000051041322613417100203030ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #ifndef FSEXECUTOR_H #define FSEXECUTOR_H #include "planexecutor.h" #include class BackupPlan; class KDirWatch; class KJob; class QTimer; // KDirWatch (well, inotify) does not detect when something gets mounted on a watched directory. // work around this problem by monitoring the mounts of the system in a separate thread. class MountWatcher: public QThread { Q_OBJECT signals: void mountsChanged(); protected: virtual void run(); }; // Plan executor that stores the backup to a path in the local // filesystem, uses KDirWatch to monitor for when the folder // becomes available/unavailable. Can be used for external // drives or networked filesystems if you always mount it at // the same mountpoint. class FSExecutor: public PlanExecutor { Q_OBJECT public: FSExecutor(BackupPlan *pPlan, KupDaemon *pKupDaemon); ~FSExecutor(); public slots: virtual void checkStatus(); protected slots: virtual void startBackup(); void slotBackupDone(KJob *pJob); void slotBackupSizeDone(KJob *pJob); void checkMountPoints(); protected: QString mWatchedParentDir; KDirWatch *mDirWatch; MountWatcher mMountWatcher; }; #endif // FSEXECUTOR_H kup-backup-0.7.1+dfsg/daemon/kup-daemon.desktop000077500000000000000000000005321322613417100214010ustar00rootroot00000000000000[Desktop Entry] Name=Kup GenericName=Backup Monitor Exec=kup-daemon Icon=kup Type=Application Terminal=false X-KDE-autostart-after=panel X-KDE-StartupNotify=false X-DBUS-StartupType=Unique X-KDE-UniqueApplet=true X-KDE-autostart-condition=kuprc:Kup settings:Backups enabled:true OnlyShowIn=KDE; Categories=Qt;KDE;Utility;X-KDE-Utilities-Desktop; kup-backup-0.7.1+dfsg/daemon/kupdaemon.cpp000066400000000000000000000265021322613417100204370ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include "kupdaemon.h" #include "kupsettings.h" #include "backupplan.h" #include "edexecutor.h" #include "fsexecutor.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include KupDaemon::KupDaemon() { mWaitingToReloadConfig = false; mConfig = KSharedConfig::openConfig(QStringLiteral("kuprc")); mSettings = new KupSettings(mConfig, this); mJobTracker = new KUiServerJobTracker(this); mLocalServer = new QLocalServer(this); } KupDaemon::~KupDaemon() { while(!mExecutors.isEmpty()) { delete mExecutors.takeFirst(); } KIdleTime::instance()->removeAllIdleTimeouts(); } bool KupDaemon::shouldStart() { return mSettings->mBackupsEnabled; } void KupDaemon::setupGuiStuff() { // timer to update logged time and also trigger warning if too long // time has now passed since last backup mUsageAccTimer = new QTimer(this); mUsageAccTimer->setInterval(KUP_USAGE_MONITOR_INTERVAL_S * 1000); mUsageAccTimer->start(); KIdleTime *lIdleTime = KIdleTime::instance(); lIdleTime->addIdleTimeout(KUP_IDLE_TIMEOUT_S * 1000); connect(lIdleTime, SIGNAL(timeoutReached(int)), mUsageAccTimer, SLOT(stop())); connect(lIdleTime, SIGNAL(timeoutReached(int)), lIdleTime, SLOT(catchNextResumeEvent())); connect(lIdleTime, SIGNAL(resumingFromIdle()), mUsageAccTimer, SLOT(start())); mStatusUpdateTimer = new QTimer(this); // delay status update to avoid sending a status to plasma applet // that will be changed again just a microsecond later anyway mStatusUpdateTimer->setInterval(500); mStatusUpdateTimer->setSingleShot(true); connect(mStatusUpdateTimer, &QTimer::timeout, [this]{ foreach(QLocalSocket *lSocket, mSockets) { sendStatus(lSocket); } if(mWaitingToReloadConfig) { // quite likely the config can be reloaded now, give it a try. QTimer::singleShot(0, this, SLOT(reloadConfig())); } }); QDBusConnection lDBus = QDBusConnection::sessionBus(); if(lDBus.isConnected()) { if(lDBus.registerService(KUP_DBUS_SERVICE_NAME)) { lDBus.registerObject(KUP_DBUS_OBJECT_PATH, this, QDBusConnection::ExportAllSlots); } } QString lSocketName = QStringLiteral("kup-daemon-"); lSocketName += QString::fromLocal8Bit(qgetenv("USER")); connect(mLocalServer, &QLocalServer::newConnection, [this]{ QLocalSocket *lSocket = mLocalServer->nextPendingConnection(); if(lSocket == nullptr) { return; } sendStatus(lSocket); mSockets.append(lSocket); connect(lSocket, &QLocalSocket::readyRead, [this,lSocket]{handleRequests(lSocket);}); connect(lSocket, &QLocalSocket::disconnected, [this,lSocket]{ mSockets.removeAll(lSocket); lSocket->deleteLater(); }); }); // remove old socket first in case it's still there, otherwise listen() fails. QLocalServer::removeServer(lSocketName); mLocalServer->listen(lSocketName); reloadConfig(); } void KupDaemon::reloadConfig() { foreach(PlanExecutor *lExecutor, mExecutors) { if(lExecutor->busy()) { mWaitingToReloadConfig = true; return; } } mWaitingToReloadConfig = false; mSettings->load(); while(!mExecutors.isEmpty()) { delete mExecutors.takeFirst(); } if(!mSettings->mBackupsEnabled) qApp->quit(); setupExecutors(); // Juuuust in case all those executors for some reason never // triggered an updated status... Doesn't hurt anyway. mStatusUpdateTimer->start(); } // This method is exposed over DBus so that filedigger can call it void KupDaemon::runIntegrityCheck(QString pPath) { foreach(PlanExecutor *lExecutor, mExecutors) { // if caller passes in an empty path, startsWith will return true and we will try to check // all backup plans. if(lExecutor->mDestinationPath.startsWith(pPath)) { lExecutor->startIntegrityCheck(); } } } void KupDaemon::registerJob(KJob *pJob) { mJobTracker->registerJob(pJob); } void KupDaemon::unregisterJob(KJob *pJob) { mJobTracker->unregisterJob(pJob); } void KupDaemon::slotShutdownRequest(QSessionManager &pManager) { // this will make session management not try (and fail because of KDBusService starting only // one instance) to start this daemon. We have autostart for the purpose of launching this // daemon instead. pManager.setRestartHint(QSessionManager::RestartNever); foreach(PlanExecutor *lExecutor, mExecutors) { if(lExecutor->busy() && pManager.allowsErrorInteraction()) { QMessageBox lMessageBox; QPushButton *lContinueButton = lMessageBox.addButton(i18n("Continue"), QMessageBox::RejectRole); lMessageBox.addButton(i18n("Stop"), QMessageBox::AcceptRole); lMessageBox.setText(i18nc("%1 is a text explaining the current activity", "Currently busy: %1", lExecutor->currentActivityTitle())); lMessageBox.setInformativeText(i18n("Do you really want to stop?")); lMessageBox.setIcon(QMessageBox::Warning); lMessageBox.setWindowIcon(QIcon::fromTheme(QStringLiteral("kup"))); lMessageBox.setWindowTitle(i18n("User Backups")); lMessageBox.exec(); if(lMessageBox.clickedButton() == lContinueButton) { pManager.cancel(); } return; //only ask for one active executor. } } } void KupDaemon::setupExecutors() { for(int i = 0; i < mSettings->mNumberOfPlans; ++i) { PlanExecutor *lExecutor; BackupPlan *lPlan = new BackupPlan(i+1, mConfig, this); if(lPlan->mPathsIncluded.isEmpty()) { delete lPlan; continue; } if(lPlan->mDestinationType == 0) { lExecutor = new FSExecutor(lPlan, this); } else if(lPlan->mDestinationType == 1) { lExecutor = new EDExecutor(lPlan, this); } else { delete lPlan; continue; } connect(lExecutor, &PlanExecutor::stateChanged, [&]{mStatusUpdateTimer->start();}); connect(lExecutor, &PlanExecutor::backupStatusChanged, [&]{mStatusUpdateTimer->start();}); connect(mUsageAccTimer, &QTimer::timeout, lExecutor, &PlanExecutor::updateAccumulatedUsageTime); lExecutor->checkStatus(); mExecutors.append(lExecutor); } } void KupDaemon::handleRequests(QLocalSocket *pSocket) { if(pSocket->bytesAvailable() <= 0) { return; } QJsonDocument lDoc = QJsonDocument::fromBinaryData(pSocket->readAll()); if(!lDoc.isObject()) { return; } QJsonObject lCommand = lDoc.object(); QString lOperation = lCommand["operation name"].toString(); if(lOperation == QStringLiteral("get status")) { sendStatus(pSocket); return; } int lPlanNumber = lCommand["plan number"].toInt(-1); if(lPlanNumber < 0 || lPlanNumber >= mExecutors.count()) { return; } if(lOperation == QStringLiteral("save backup")) { mExecutors.at(lPlanNumber)->startBackupSaveJob(); } if(lOperation == QStringLiteral("show log file")) { mExecutors.at(lPlanNumber)->showLog(); } if(lOperation == QStringLiteral("show backup files")) { mExecutors.at(lPlanNumber)->showBackupFiles(); } } void KupDaemon::sendStatus(QLocalSocket *pSocket) { bool lTrayIconActive = false; bool lAnyPlanBusy = false; // If all backup plans have status == NO_STATUS then tooltip title will be empty QString lToolTipTitle; QString lToolTipSubTitle = i18nc("status in tooltip", "Backup destination not available"); QString lToolTipIconName = QStringLiteral("kup"); if(mExecutors.isEmpty()) { lToolTipTitle = i18n("No backup plans configured"); lToolTipSubTitle.clear(); } foreach(PlanExecutor *lExec, mExecutors) { if(lExec->destinationAvailable()) { lToolTipSubTitle = i18nc("status in tooltip", "Backup destination available"); if(lExec->scheduleType() == BackupPlan::MANUAL) { lTrayIconActive = true; } } } foreach(PlanExecutor *lExec, mExecutors) { if(lExec->mPlan->backupStatus() == BackupPlan::GOOD) { lToolTipIconName = BackupPlan::iconName(BackupPlan::GOOD); lToolTipTitle = i18nc("status in tooltip", "Backup status OK"); } } foreach(PlanExecutor *lExec, mExecutors) { if(lExec->mPlan->backupStatus() == BackupPlan::MEDIUM) { lToolTipIconName = BackupPlan::iconName(BackupPlan::MEDIUM); lToolTipTitle = i18nc("status in tooltip", "New backup suggested"); } } foreach(PlanExecutor *lExec, mExecutors) { if(lExec->mPlan->backupStatus() == BackupPlan::BAD) { lToolTipIconName = BackupPlan::iconName(BackupPlan::BAD); lToolTipTitle = i18nc("status in tooltip", "New backup neeeded"); lTrayIconActive = true; } } foreach(PlanExecutor *lExecutor, mExecutors) { if(lExecutor->busy()) { lToolTipIconName = QStringLiteral("kup"); lToolTipTitle = lExecutor->currentActivityTitle(); lToolTipSubTitle = lExecutor->mPlan->mDescription; lAnyPlanBusy = true; } } if(lToolTipTitle.isEmpty() && !lToolTipSubTitle.isEmpty()) { lToolTipTitle = lToolTipSubTitle; lToolTipSubTitle.clear(); } QJsonObject lStatus; lStatus["event"] = QStringLiteral("status update"); lStatus["tray icon active"] = lTrayIconActive; lStatus["tooltip icon name"] = lToolTipIconName; lStatus["tooltip title"] = lToolTipTitle; lStatus["tooltip subtitle"] = lToolTipSubTitle; lStatus["any plan busy"] = lAnyPlanBusy; lStatus["no plan reason"] = mExecutors.isEmpty() ? i18n("No backup plans configured") : QStringLiteral(""); QJsonArray lPlans; foreach(PlanExecutor *lExecutor, mExecutors) { QJsonObject lPlan; lPlan[QStringLiteral("description")] = lExecutor->mPlan->mDescription; lPlan[QStringLiteral("destination available")] = lExecutor->destinationAvailable(); lPlan[QStringLiteral("status heading")] = lExecutor->currentActivityTitle(); lPlan[QStringLiteral("status details")] = lExecutor->mPlan->statusText(); lPlan[QStringLiteral("icon name")] = BackupPlan::iconName(lExecutor->mPlan->backupStatus()); lPlan[QStringLiteral("log file exists")] = QFileInfo(lExecutor->mLogFilePath).exists(); lPlan[QStringLiteral("busy")] = lExecutor->busy(); lPlans.append(lPlan); } lStatus["plans"] = lPlans; QJsonDocument lDoc(lStatus); pSocket->write(lDoc.toBinaryData()); } kup-backup-0.7.1+dfsg/daemon/kupdaemon.h000066400000000000000000000050051322613417100200770ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #ifndef KUPDAEMON_H #define KUPDAEMON_H #include #define KUP_DBUS_SERVICE_NAME QStringLiteral("org.kde.kupdaemon") #define KUP_DBUS_OBJECT_PATH QStringLiteral("/DaemonControl") class KupSettings; class PlanExecutor; class KJob; class KUiServerJobTracker; class QLocalServer; class QLocalSocket; class QSessionManager; class QTimer; class KupDaemon : public QObject { Q_OBJECT public: KupDaemon(); virtual ~KupDaemon(); bool shouldStart(); void setupGuiStuff(); void slotShutdownRequest(QSessionManager &pManager); void registerJob(KJob *pJob); void unregisterJob(KJob *pJob); public slots: void reloadConfig(); void runIntegrityCheck(QString pPath); private: void setupExecutors(); void handleRequests(QLocalSocket *pSocket); void sendStatus(QLocalSocket *pSocket); KSharedConfigPtr mConfig; KupSettings *mSettings; QList mExecutors; QTimer *mUsageAccTimer; QTimer *mStatusUpdateTimer; bool mWaitingToReloadConfig; KUiServerJobTracker *mJobTracker; QLocalServer *mLocalServer; QList mSockets; }; #endif /*KUPDAEMON_H*/ kup-backup-0.7.1+dfsg/daemon/kupdaemon.notifyrc000066400000000000000000000163751322613417100215210ustar00rootroot00000000000000[Global] IconName=kup Name=Kup Name[bs_BA]=Kup Name[cs]=Kup Name[da]=Kup Name[de]=Kup Name[fr_FR]=Kup Name[it]=Kup Name[lt_LT]=Kup Name[nl_NL]=Ku Name[pl]=Kup Name[pt_BR]=Kup Name[sv]=Kup Name[tl]=Kup Name[zh_TW]=Kup Comment=Kup Backup System Comment[bs_BA]=Kup Backup System Comment[cs]=Zálohovací systém Kup Comment[da]=Kup Backupsystem Comment[de]=Kup-Datensicherungssystem Comment[fr_FR]=Système de Sauvegarde Kup Comment[it]=Kup Backup System Comment[lt_LT]=Kup atsarginių kopijų sistema Comment[nl_NL]=Kup back-upsysteem Comment[pl]=Kup System Kopii Zapasowych Comment[pt_BR]=Sistema de backups Kup Comment[sv]=Kup Säkerhetskopiering Comment[tl]=Sistema ng seguridad na kopya ng Kup Comment[zh_TW]=Kup 備份系統 [Event/StartBackup] Name=Start taking backup Name[bs_BA]=Pokrenite backup Name[cs]=Zahájit zálohování Name[da]=Start backup Name[de]=Erstellen der Sicherung starten Name[fr_FR]=Commencer la sauvegarde Name[it]=Esegui un nuovo backup Name[lt_LT]=Pradėti kurti atsarginę kopiją Name[nl_NL]=Beginnen met maken van back-up Name[pl]=Rozpocznij tworzenie kopii zapasowej Name[pt_BR]=Iniciar o backup Name[sv]=Ta ny säkerhetskopia Name[tl]=Simulan ang pagkuha ng seguridad na kopya Name[zh_TW]=開始進行備份 Comment=A question if user wants to start taking a backup Comment[bs_BA]=Pitanje da li korisnik želi da pokrene novi backup Comment[cs]=Dotaz na uživatele zda chce zahájit zálohování Comment[da]=Spørg om bruger gerne vil begynde at tage an backup Comment[de]=Die Frage, ob der Benutzer die Sicherung starten möchte Comment[it]=Domanda se l'utente vuole eseguire un backup Comment[lt_LT]=Klausimas, ar vartotojas nori pradėti kurti atsarginę kopiją Comment[nl_NL]=Een vraag aan de gebuikers of deze wil beginnen met het maken van een back-up Comment[pl]=Pytanie, czy użytkownik chce rozpocząć tworzenie kopii zapasowej Comment[pt_BR]=Pergunta se o usuário deseja iniciar o backup Comment[sv]=En fråga om användaren vill ta en ny säkerhetskopia Comment[tl]=Tanong kung gusto ng taga-gamit na magsimula ng pagkuha ng seguridad na kopya Comment[zh_TW]=如果使用者想要開始進行備份的話會被詢問一個問題 Action=Popup [Event/BackupSucceeded] Name=Backup succeeded Name[bs_BA]=Backup uspješan Name[cs]=Úspěšně zazálohováno Name[de]=Backup erfolgreich Name[it]=Backup completato con successo Name[nl_NL]=Back-up voltooid Name[pl]=Kopia zapasowa została utworzona prawidłowo Name[pt_BR]=Backup realizado Name[sv]=Säkerhetskopiering färdig Name[zh_TW]=備份成功 Comment=Saving of backup successfully completed Comment[bs_BA]=Pohrana backupa završena Comment[cs]=Ukládání zálohy úspěšně dokončeno Comment[de]=Sicherung des Backups erfolgreich abgeschlossen Comment[it]=Il salvataggio del backup è stato completato con successo Comment[nl_NL]=De back-up is succesvol gemaakt Comment[pl]=Zapisywanie kopii zakończyło się sukcesem. Comment[pt_BR]=Backup salvo com sucesso Comment[sv]=Färdig med att spara säkerhetskopia Comment[zh_TW]=儲存備份成功完成 Action=Popup [Event/BackupFailed] Name=Backup failed Name[bs_BA]=Backup neuspješan Name[cs]=Zálohování se nezdařilo Name[da]=backup fejlet Name[de]=Sicherung fehlgeschlagen Name[fr_FR]=Sauvegarde échouée Name[it]=Backup fallito Name[lt_LT]=Atsarginės kopijos sukurti nepavyko Name[nl_NL]=Back-up mislukt Name[pl]=Utworzenie kopii nie powiodło się Name[pt_BR]=Falha no backup Name[sv]=Säkerhetskopiering misslyckades Name[tl]=Nabigo ang seguridad na kopya Name[zh_TW]=備份失敗 Comment=Saving of backup failed, offer user to see log file Comment[bs_BA]=Spašavanje backupa nije uspjelo, ponuditi korisniku da pogleda log daTOTEKU Comment[cs]=Uložení zálohy se nezdařilo, nabídněte uživateli pohled do souboru se záznamem událostí (log) Comment[da]=Lagring af backup fejlet, tilbyd bruger at se logfil Comment[de]=Ein Fehler bei der Sicherung ist aufgetreten, dem Benutzer wird angeboten, die Log-Datei zu lesen. Comment[it]=Salvataggio del backup fallito, proponi all'utente di visualizzare il file di log Comment[lt_LT]=Sukurti atsarginės kopijos nepavyko, pasiūlykite vartotojui peržiūrėti žurnalo failą Comment[nl_NL]=Het maken van de back-up is mislukt; biedt aan om het logbestand te bekijken Comment[pl]=Zapis kopii zakończył się niepowodzeniem, zaproponuj użytkownikowi przejrzenie pliku dziennika Comment[pt_BR]=Falha ao salvar o backup, oferecer ajuda para ver o arquivo de log Comment[sv]=Säkerhetskopiering misslyckades, erbjud att se loggfil Comment[tl]=Ang pag-impok ng seguridad na kopya ay nabigo, paki-tingnan ang listahan ng talaksan kung bakit ito ay nabigo Comment[zh_TW]=備份儲存失敗,建議使用者查看記錄檔。 Action=Popup [Event/IntegrityCheckCompleted] Name=Integrity check completed Name[bs_BA]=Provjera integriteta završena Name[cs]=Kontrola neporušenosti dokončena Name[da]=Integritetskontrol fuldført Name[de]=Integritätsprüfung abgeschlossen Name[fr_FR]=Contrôle d'intégrité effectué Name[it]=Controllo integrità completato Name[lt_LT]=Integralumo patikra baigta Name[nl_NL]=Integriteitscontrole voltooid Name[pl]=Zakończono sprawdzanie spójności Name[pt_BR]=Verificação de integridade completada Name[sv]=Integritetstest färdig Name[tl]=Ang pagsisiyasat ng integridad sa seguridad na kopya ay nakumpleto na Name[zh_TW]=完整性校驗成功 Comment=Finished checking integrity of backup archive Comment[bs_BA]=Završena provjera integriteta backup arhive Comment[cs]=Dokončena kontrola neporušenosti archivu se zálohou Comment[da]=Integritetstjek af backuparkiv afsluttet Comment[de]=Integritätsprüfung des Datensicherungsarchivs abgeschlossen Comment[it]=Controllo dell'integrità del backup completato Comment[lt_LT]=Baigta atsarginių kopijų archyvo integralumo patikra Comment[nl_NL]=Integriteitscontrole van back-uparchief is voltooid Comment[pl]=Zakończono sprawdzenie spójności archiwum kopii Comment[pt_BR]=Verificação de integridade do arquivo de backup terminada Comment[sv]=Färdig med att testa integritet av säkerhetskopior Comment[tl]=Natapos na ang pagsisiyasat ang integridad ng arkibo ng seguridad na kopya. Comment[zh_TW]=備份壓縮檔的完整性校驗完成 Action=Popup [Event/RepairCompleted] Name=Repair completed Name[bs_BA]=Popravka završena Name[cs]=Oprava dokončena Name[da]=Reparation fuldført Name[de]=Reparatur abgeschlossen Name[it]=Ripristino completato Name[lt_LT]=Taisymas baigtas Name[nl_NL]=Reparatie voltooid Name[pl]=Naprawa zakończona Name[pt_BR]=Reparo completado Name[sv]=Färdig med reparation Name[tl]=Ang pag-aayos ay nakumpleto na Name[zh_TW]=修復完成 Comment=Finished repairing backup archive Comment[bs_BA]=Završen popravak backup arhive Comment[cs]=Oprava archivu se zálohou dokončena Comment[da]=Reparation af backup fuldført Comment[de]=Reparatur des Datensicherungsarchivs abgeschlossen Comment[fr_FR]=Réparation de l'archive effectuée Comment[it]=Riparazione dei backup completata Comment[lt_LT]=Atsarginių kopijų archyvo taisymas baigtas Comment[nl_NL]=Repareren van back-uparchief is voltooid Comment[pl]=Zakończono naprawę archiwum kopii Comment[pt_BR]=Reparo do arquivo de backup terminado Comment[sv]=Blev färdig med att reparera säkerhetskopior Comment[tl]=Natapos na ang pag-aayos sa arkibo ng seguridad na kopya Comment[zh_TW]=修復備份壓縮檔完成 Action=Popup kup-backup-0.7.1+dfsg/daemon/kupdaemon.notifyrc.template000066400000000000000000000012021322613417100233120ustar00rootroot00000000000000[Global] IconName=kup _Name=Kup _Comment=Kup Backup System [Event/StartBackup] _Name=Start taking backup _Comment=A question if user wants to start taking a backup Action=Popup [Event/BackupSucceeded] _Name=Backup succeeded _Comment=Saving of backup successfully completed Action=Popup [Event/BackupFailed] _Name=Backup failed _Comment=Saving of backup failed, offer user to see log file Action=Popup [Event/IntegrityCheckCompleted] _Name=Integrity check completed _Comment=Finished checking integrity of backup archive Action=Popup [Event/RepairCompleted] _Name=Repair completed _Comment=Finished repairing backup archive Action=Popup kup-backup-0.7.1+dfsg/daemon/main.cpp000066400000000000000000000067151322613417100174040ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include "kupdaemon.h" #include #include #include #include #include #include extern "C" int Q_DECL_EXPORT kdemain(int argc, char *argv[]) { QApplication lApp(argc, argv); lApp.setQuitOnLastWindowClosed(false); lApp.setAttribute(Qt::AA_UseHighDpiPixmaps, true); KLocalizedString::setApplicationDomain("kup"); KupDaemon *lDaemon = new KupDaemon(); if(!lDaemon->shouldStart()) { qCritical("%s", xi18nc("@info:shell Error message at startup", "Kup is not enabled, enable it from the " "system settings module. You can do that by running " "kcmshell5 kup").toLocal8Bit().constData()); return 0; } KAboutData lAbout(QStringLiteral("kupdaemon"), xi18nc("@title", "Kup Daemon"), QStringLiteral("0.7.1"), i18n("Kup is a flexible backup solution using the backup storage system 'bup'. " "This allows it to quickly perform incremental backups, only saving the " "parts of files that has actually changed since last backup was taken."), KAboutLicense::GPL, i18n("Copyright (C) 2011-2015 Simon Persson"), QString(), QString(), "simonpersson1@gmail.com"); lAbout.addAuthor(i18n("Simon Persson"), QString(), "simonpersson1@gmail.com"); lAbout.setTranslator(xi18nc("NAME OF TRANSLATORS", "Your names"), xi18nc("EMAIL OF TRANSLATORS", "Your emails")); KAboutData::setApplicationData(lAbout); QCommandLineParser lParser; lParser.addVersionOption(); lParser.addHelpOption(); lAbout.setupCommandLine(&lParser); lParser.process(lApp); lAbout.processCommandLine(&lParser); // This call will exit() if an instance is already running KDBusService lService(KDBusService::Unique); lDaemon->setupGuiStuff(); lDaemon->connect(&lApp, &QApplication::commitDataRequest, [=](QSessionManager &pManager) { lDaemon->slotShutdownRequest(pManager); }); return lApp.exec(); } kup-backup-0.7.1+dfsg/daemon/planexecutor.cpp000066400000000000000000000371421322613417100211670ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include "planexecutor.h" #include "bupjob.h" #include "bupverificationjob.h" #include "buprepairjob.h" #include "kupdaemon.h" #include "rsyncjob.h" #include #include #include #include #include #include #include #include static QString sPwrMgmtServiceName = QStringLiteral("org.freedesktop.PowerManagement"); static QString sPwrMgmtPath = QStringLiteral("/org/freedesktop/PowerManagement"); static QString sPwrMgmtInhibitInterface = QStringLiteral("org.freedesktop.PowerManagement.Inhibit"); static QString sPwrMgmtInterface = QStringLiteral("org.freedesktop.PowerManagement"); PlanExecutor::PlanExecutor(BackupPlan *pPlan, KupDaemon *pKupDaemon) :QObject(pKupDaemon), mState(NOT_AVAILABLE), mPlan(pPlan), mQuestion(NULL), mFailNotification(NULL), mIntegrityNotification(NULL), mRepairNotification(NULL), mKupDaemon(pKupDaemon), mSleepCookie(0) { QString lCachePath = QString::fromLocal8Bit(qgetenv("XDG_CACHE_HOME").constData()); if(lCachePath.isEmpty()) { lCachePath = QDir::homePath(); lCachePath.append(QStringLiteral("/.cache")); } lCachePath.append(QStringLiteral("/kup")); QDir lCacheDir(lCachePath); if(!lCacheDir.exists()) { if(!lCacheDir.mkpath(lCachePath)) { lCachePath = QStringLiteral("/tmp"); } } mLogFilePath = lCachePath; mLogFilePath.append(QStringLiteral("/kup_plan")); mLogFilePath.append(QString::number(mPlan->planNumber())); mLogFilePath.append(QStringLiteral(".log")); mSchedulingTimer = new QTimer(this); mSchedulingTimer->setSingleShot(true); connect(mSchedulingTimer, SIGNAL(timeout()), SLOT(enterAvailableState())); } PlanExecutor::~PlanExecutor() { } QString PlanExecutor::currentActivityTitle() { switch(mState) { case BACKUP_RUNNING: return i18nc("status in tooltip", "Saving backup"); case INTEGRITY_TESTING: return i18nc("status in tooltip", "Checking backup integrity"); case REPAIRING: return i18nc("status in tooltip", "Repairing backups"); default: switch (mPlan->backupStatus()) { case BackupPlan::GOOD: return i18nc("status in tooltip", "Backup status OK"); case BackupPlan::MEDIUM: return i18nc("status in tooltip", "New backup suggested"); case BackupPlan::BAD: return i18nc("status in tooltip", "New backup neeeded"); case BackupPlan::NO_STATUS: return QStringLiteral(""); default: return QString(); } } } // dispatcher code for entering one of the available states void PlanExecutor::enterAvailableState() { if(mState == NOT_AVAILABLE) { mState = WAITING_FOR_FIRST_BACKUP; //initial child state of "Available" state emit stateChanged(); } bool lShouldBeTakenNow = false; bool lShouldBeTakenLater = false; int lTimeUntilNextWakeup; QString lUserQuestion; QDateTime lNow = QDateTime::currentDateTime().toUTC(); switch(mPlan->mScheduleType) { case BackupPlan::MANUAL: break; case BackupPlan::INTERVAL: { QDateTime lNextTime = mPlan->nextScheduledTime(); if(!lNextTime.isValid() || lNextTime < lNow) { lShouldBeTakenNow = true; if(!mPlan->mLastCompleteBackup.isValid()) lUserQuestion = xi18nc("@info", "Do you want to save a first backup now?"); else { QString t = KFormat().formatSpelloutDuration(mPlan->mLastCompleteBackup.secsTo(lNow) * 1000); lUserQuestion = xi18nc("@info", "It has been %1 since last backup was saved.\n" "Save a new backup now?", t); } } else { lShouldBeTakenLater = true; lTimeUntilNextWakeup = lNow.secsTo(lNextTime)*1000; } break; } case BackupPlan::USAGE: if(!mPlan->mLastCompleteBackup.isValid()) { lShouldBeTakenNow = true; lUserQuestion = xi18nc("@info", "Do you want to save a first backup now?"); } else if(mPlan->mAccumulatedUsageTime > (quint32)mPlan->mUsageLimit * 3600) { lShouldBeTakenNow = true; QString t = KFormat().formatSpelloutDuration(mPlan->mAccumulatedUsageTime * 1000); lUserQuestion = xi18nc("@info", "You have been active for %1 since last backup was saved.\n" "Save a new backup now?", t); } break; } if(lShouldBeTakenNow) { // Only ask the first time after destination has become available. // Always ask if power saving is active. if( (mPlan->mAskBeforeTakingBackup && mState == WAITING_FOR_FIRST_BACKUP) || powerSaveActive()) { askUser(lUserQuestion); } else { startBackupSaveJob(); } } else if(lShouldBeTakenLater){ // schedule a wakeup for asking again when the time is right. mSchedulingTimer->start(lTimeUntilNextWakeup); } } void PlanExecutor::enterNotAvailableState() { mSchedulingTimer->stop(); mState = NOT_AVAILABLE; emit stateChanged(); } void PlanExecutor::askUser(const QString &pQuestion) { discardUserQuestion(); mQuestion = new KNotification(QStringLiteral("StartBackup"), KNotification::Persistent); mQuestion->setTitle(mPlan->mDescription); mQuestion->setText(pQuestion); QStringList lAnswers; lAnswers << xi18nc("@action:button", "Yes") << xi18nc("@action:button", "No"); mQuestion->setActions(lAnswers); connect(mQuestion, SIGNAL(action1Activated()), SLOT(startBackupSaveJob())); connect(mQuestion, SIGNAL(action2Activated()), SLOT(discardUserQuestion())); connect(mQuestion, SIGNAL(closed()), SLOT(discardUserQuestion())); connect(mQuestion, SIGNAL(ignored()), SLOT(discardUserQuestion())); // enter this "do nothing" state, if user answers "no" or ignores, remain there mState = WAITING_FOR_MANUAL_BACKUP; emit stateChanged(); mQuestion->sendEvent(); } void PlanExecutor::discardUserQuestion() { if(mQuestion) { mQuestion->deleteLater(); mQuestion = NULL; } } void PlanExecutor::notifyBackupFailed(KJob *pFailedJob) { discardFailNotification(); mFailNotification = new KNotification(QStringLiteral("BackupFailed"), KNotification::Persistent); mFailNotification->setTitle(xi18nc("@title:window", "Saving of Backup Failed")); mFailNotification->setText(pFailedJob->errorText()); QStringList lAnswers; if(pFailedJob->error() == BackupJob::ErrorWithLog) { lAnswers << xi18nc("@action:button", "Show log file"); connect(mFailNotification, SIGNAL(action1Activated()), SLOT(showLog())); } else if(pFailedJob->error() == BackupJob::ErrorSuggestRepair) { lAnswers << xi18nc("@action:button", "Yes"); lAnswers << xi18nc("@action:button", "No"); connect(mFailNotification, SIGNAL(action1Activated()), SLOT(startRepairJob())); } mFailNotification->setActions(lAnswers); connect(mFailNotification, SIGNAL(action2Activated()), SLOT(discardFailNotification())); connect(mFailNotification, SIGNAL(closed()), SLOT(discardFailNotification())); connect(mFailNotification, SIGNAL(ignored()), SLOT(discardFailNotification())); mFailNotification->sendEvent(); } void PlanExecutor::discardFailNotification() { if(mFailNotification) { mFailNotification->deleteLater(); mFailNotification = NULL; } } void PlanExecutor::notifyBackupSucceeded() { KNotification *lNotification = new KNotification(QStringLiteral("BackupSucceeded")); lNotification->setTitle(xi18nc("@title:window", "Backup Saved")); lNotification->setText(xi18nc("@info notification", "Saving backup completed successfully.")); lNotification->sendEvent(); } void PlanExecutor::showLog() { KRun::runUrl(QUrl::fromLocalFile(mLogFilePath), QStringLiteral("text/x-log"), NULL); } void PlanExecutor::startIntegrityCheck() { if(mPlan->mBackupType != BackupPlan::BupType || busy() || !destinationAvailable()) { return; } KJob *lJob = new BupVerificationJob(*mPlan, mDestinationPath, mLogFilePath, mKupDaemon); connect(lJob, SIGNAL(result(KJob*)), SLOT(integrityCheckFinished(KJob*))); lJob->start(); mLastState = mState; mState = INTEGRITY_TESTING; emit stateChanged(); startSleepInhibit(); } void PlanExecutor::startRepairJob() { if(mPlan->mBackupType != BackupPlan::BupType || busy() || !destinationAvailable()) { return; } KJob *lJob = new BupRepairJob(*mPlan, mDestinationPath, mLogFilePath, mKupDaemon); connect(lJob, SIGNAL(result(KJob*)), SLOT(repairFinished(KJob*))); lJob->start(); mLastState = mState; mState = REPAIRING; emit stateChanged(); startSleepInhibit(); } void PlanExecutor::startBackupSaveJob() { if(busy() || !destinationAvailable()) { return; } discardUserQuestion(); mState = BACKUP_RUNNING; emit stateChanged(); startSleepInhibit(); startBackup(); } void PlanExecutor::integrityCheckFinished(KJob *pJob) { endSleepInhibit(); discardIntegrityNotification(); mIntegrityNotification = new KNotification(QStringLiteral("IntegrityCheckCompleted"), KNotification::Persistent); mIntegrityNotification->setTitle(xi18nc("@title:window", "Integrity Check Completed")); mIntegrityNotification->setText(pJob->errorText()); QStringList lAnswers; if(pJob->error() == BackupJob::ErrorWithLog) { lAnswers << xi18nc("@action:button", "Show log file"); connect(mIntegrityNotification, SIGNAL(action1Activated()), SLOT(showLog())); } else if(pJob->error() == BackupJob::ErrorSuggestRepair) { lAnswers << xi18nc("@action:button", "Yes"); lAnswers << xi18nc("@action:button", "No"); connect(mIntegrityNotification, SIGNAL(action1Activated()), SLOT(startRepairJob())); } mIntegrityNotification->setActions(lAnswers); connect(mIntegrityNotification, SIGNAL(action2Activated()), SLOT(discardIntegrityNotification())); connect(mIntegrityNotification, SIGNAL(closed()), SLOT(discardIntegrityNotification())); connect(mIntegrityNotification, SIGNAL(ignored()), SLOT(discardIntegrityNotification())); mIntegrityNotification->sendEvent(); if(mState == INTEGRITY_TESTING) { //only restore if nothing has changed during the run mState = mLastState; } emit stateChanged(); } void PlanExecutor::discardIntegrityNotification() { if(mIntegrityNotification) { mIntegrityNotification->deleteLater(); mIntegrityNotification = NULL; } } void PlanExecutor::repairFinished(KJob *pJob) { endSleepInhibit(); discardRepairNotification(); mRepairNotification = new KNotification(QStringLiteral("RepairCompleted"), KNotification::Persistent); mRepairNotification->setTitle(xi18nc("@title:window", "Repair Completed")); mRepairNotification->setText(pJob->errorText()); QStringList lAnswers; lAnswers << xi18nc("@action:button", "Show log file"); mRepairNotification->setActions(lAnswers); connect(mRepairNotification, SIGNAL(action1Activated()), SLOT(showLog())); connect(mRepairNotification, SIGNAL(closed()), SLOT(discardRepairNotification())); connect(mRepairNotification, SIGNAL(ignored()), SLOT(discardRepairNotification())); mRepairNotification->sendEvent(); if(mState == REPAIRING) { //only restore if nothing has changed during the run mState = mLastState; } emit stateChanged(); } void PlanExecutor::discardRepairNotification() { if(mRepairNotification) { mRepairNotification->deleteLater(); mRepairNotification = NULL; } } void PlanExecutor::startSleepInhibit() { if(mSleepCookie != 0) { return; } QDBusMessage lMsg = QDBusMessage::createMethodCall(sPwrMgmtServiceName, sPwrMgmtPath, sPwrMgmtInhibitInterface, QStringLiteral("Inhibit")); lMsg << i18n("Kup Backup System"); lMsg << currentActivityTitle(); QDBusReply lReply = QDBusConnection::sessionBus().call(lMsg); mSleepCookie = lReply.value(); } void PlanExecutor::endSleepInhibit() { if(mSleepCookie == 0) { return; } QDBusMessage lMsg = QDBusMessage::createMethodCall(sPwrMgmtServiceName, sPwrMgmtPath, sPwrMgmtInhibitInterface, QStringLiteral("UnInhibit")); lMsg << mSleepCookie; QDBusConnection::sessionBus().asyncCall(lMsg); mSleepCookie = 0; } void PlanExecutor::exitBackupRunningState(bool pWasSuccessful) { endSleepInhibit(); if(pWasSuccessful) { if(mPlan->mScheduleType == BackupPlan::USAGE) { //reset usage time after successful backup mPlan->mAccumulatedUsageTime =0; mPlan->save(); } mState = WAITING_FOR_BACKUP_AGAIN; emit stateChanged(); //don't know if status actually changed, potentially did... so trigger a re-read of status emit backupStatusChanged(); // re-enter the main "available" state dispatcher enterAvailableState(); } else { mState = WAITING_FOR_MANUAL_BACKUP; emit stateChanged(); } } void PlanExecutor::updateAccumulatedUsageTime() { if(mState == BACKUP_RUNNING) { //usage time during backup doesn't count... return; } if(mPlan->mScheduleType == BackupPlan::USAGE) { mPlan->mAccumulatedUsageTime += KUP_USAGE_MONITOR_INTERVAL_S; mPlan->save(); } // trigger refresh of backup status, potentially changed since some time has passed... // this is the reason why this slot is called repeatedly even when // not in BackupPlan::USAGE mode emit backupStatusChanged(); //if we're waiting to run backup again, check if it is time now. if(mPlan->mScheduleType == BackupPlan::USAGE && (mState == WAITING_FOR_FIRST_BACKUP || mState == WAITING_FOR_BACKUP_AGAIN)) { enterAvailableState(); } } void PlanExecutor::showBackupFiles() { if(mState == NOT_AVAILABLE) return; if(mPlan->mBackupType == BackupPlan::BupType) { QStringList lArgs; lArgs << QStringLiteral("--title") << mPlan->mDescription; lArgs << mDestinationPath; KProcess::startDetached(QStringLiteral("kup-filedigger"), lArgs); } else if(mPlan->mBackupType == BackupPlan::RsyncType) { KRun::runUrl(QUrl::fromLocalFile(mDestinationPath), QStringLiteral("inode/directory"), NULL); } } BackupJob *PlanExecutor::createBackupJob() { if(mPlan->mBackupType == BackupPlan::BupType) { return new BupJob(*mPlan, mDestinationPath, mLogFilePath, mKupDaemon); } else if(mPlan->mBackupType == BackupPlan::RsyncType) { return new RsyncJob(*mPlan, mDestinationPath, mLogFilePath, mKupDaemon); } qWarning("Invalid backup type in configuration!"); return NULL; } bool PlanExecutor::powerSaveActive() { QDBusMessage lMsg = QDBusMessage::createMethodCall(sPwrMgmtServiceName, sPwrMgmtPath, sPwrMgmtInterface, QStringLiteral("GetPowerSaveStatus")); QDBusReply lReply = QDBusConnection::sessionBus().call(lMsg); return lReply.value(); } kup-backup-0.7.1+dfsg/daemon/planexecutor.h000066400000000000000000000073441322613417100206350ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #ifndef PLANEXECUTOR_H #define PLANEXECUTOR_H #include "backupplan.h" #include "backupjob.h" #include class KupDaemon; class KRun; class KNotification; class KProcess; class QTimer; // Accumulate usage time every KUP_USAGE_MONITOR_INTERVAL_S while user is active. // Consider user inactive after KUP_IDLE_TIMEOUT_S s of no keyboard or mouse activity. #define KUP_USAGE_MONITOR_INTERVAL_S 2*60 #define KUP_IDLE_TIMEOUT_S 30 class PlanExecutor : public QObject { Q_OBJECT public: PlanExecutor(BackupPlan *pPlan, KupDaemon *pKupDaemon); virtual ~PlanExecutor(); BackupPlan::ScheduleType scheduleType() { return (BackupPlan::ScheduleType)mPlan->mScheduleType; } bool busy() { return mState == BACKUP_RUNNING || mState == INTEGRITY_TESTING || mState == REPAIRING; } bool destinationAvailable() { return mState != NOT_AVAILABLE; } QString currentActivityTitle(); enum ExecutorState {NOT_AVAILABLE, WAITING_FOR_FIRST_BACKUP, WAITING_FOR_BACKUP_AGAIN, BACKUP_RUNNING, WAITING_FOR_MANUAL_BACKUP, INTEGRITY_TESTING, REPAIRING}; ExecutorState mState; QString mDestinationPath; QString mLogFilePath; BackupPlan *mPlan; public slots: virtual void checkStatus() = 0; virtual void showBackupFiles(); void updateAccumulatedUsageTime(); void startIntegrityCheck(); void startRepairJob(); void startBackupSaveJob(); void showLog(); signals: void stateChanged(); void backupStatusChanged(); protected slots: virtual void startBackup() = 0; void exitBackupRunningState(bool pWasSuccessful); void enterAvailableState(); void enterNotAvailableState(); void askUser(const QString &pQuestion); void discardUserQuestion(); void notifyBackupFailed(KJob *pFailedJob); void discardFailNotification(); void notifyBackupSucceeded(); void integrityCheckFinished(KJob *pJob); void discardIntegrityNotification(); void repairFinished(KJob *pJob); void discardRepairNotification(); void startSleepInhibit(); void endSleepInhibit(); protected: BackupJob *createBackupJob(); bool powerSaveActive(); KNotification *mQuestion; QTimer *mSchedulingTimer; KNotification *mFailNotification; KNotification *mIntegrityNotification; KNotification *mRepairNotification; ExecutorState mLastState; KupDaemon *mKupDaemon; uint mSleepCookie; }; #endif // PLANEXECUTOR_H kup-backup-0.7.1+dfsg/daemon/rsyncjob.cpp000066400000000000000000000167761322613417100203210ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include "rsyncjob.h" #include "kuputils.h" #include #include #include #include RsyncJob::RsyncJob(const BackupPlan &pBackupPlan, const QString &pDestinationPath, const QString &pLogFilePath, KupDaemon *pKupDaemon) :BackupJob(pBackupPlan, pDestinationPath, pLogFilePath, pKupDaemon) { mRsyncProcess.setOutputChannelMode(KProcess::SeparateChannels); setCapabilities(KJob::Suspendable | KJob::Killable); } void RsyncJob::performJob() { KProcess lVersionProcess; lVersionProcess.setOutputChannelMode(KProcess::SeparateChannels); lVersionProcess << QStringLiteral("rsync") << QStringLiteral("--version"); if(lVersionProcess.execute() < 0) { jobFinishedError(ErrorWithoutLog, xi18nc("@info notification", "The rsync program is needed but " "could not be found, maybe it is not installed?")); return; } mLogStream << QStringLiteral("Kup is starting rsync backup job at ") << QLocale().toString(QDateTime::currentDateTime()) << endl; emit description(this, i18n("Checking what to copy")); mRsyncProcess << QStringLiteral("rsync") << QStringLiteral("-avX") << QStringLiteral("--delete-excluded"); mRsyncProcess << QStringLiteral("--info=progress2") << QStringLiteral("--no-i-r"); QStringList lIncludeNames; foreach(const QString &lInclude, mBackupPlan.mPathsIncluded) { lIncludeNames << lastPartOfPath(lInclude); } if(lIncludeNames.removeDuplicates() > 0) { // There would be a naming conflict in the destination folder, instead use full paths. mRsyncProcess << QStringLiteral("-R"); foreach(const QString &lExclude, mBackupPlan.mPathsExcluded) { mRsyncProcess << QStringLiteral("--exclude=") + lExclude; } } else { // when NOT using -R, need to then strip parent paths from excludes, everything above the // include. Leave the leading slash! foreach(QString lExclude, mBackupPlan.mPathsExcluded) { for(int i = 0; i < mBackupPlan.mPathsIncluded.length(); ++i) { const QString &lInclude = mBackupPlan.mPathsIncluded.at(i); QString lIncludeWithSlash = lInclude; ensureTrailingSlash(lIncludeWithSlash); if(lExclude.startsWith(lIncludeWithSlash)) { if(mBackupPlan.mPathsIncluded.length() == 1) { lExclude.remove(0, lInclude.length()); } else { lExclude.remove(0, lInclude.length() - lIncludeNames.at(i).length() - 1); } break; } } mRsyncProcess << QStringLiteral("--exclude=") + lExclude; } } if(mBackupPlan.mPathsIncluded.count() == 1) { // Add a slash to the end so that rsync takes only the contents of the folder, not the folder itself. QString lInclude = mBackupPlan.mPathsIncluded.first(); ensureTrailingSlash(lInclude); mRsyncProcess << lInclude; } else { mRsyncProcess << mBackupPlan.mPathsIncluded; } mRsyncProcess << mDestinationPath; connect(&mRsyncProcess, SIGNAL(started()), SLOT(slotRsyncStarted())); connect(&mRsyncProcess, &KProcess::readyReadStandardOutput, this, &RsyncJob::slotReadRsyncOutput); connect(&mRsyncProcess, SIGNAL(finished(int,QProcess::ExitStatus)), SLOT(slotRsyncFinished(int,QProcess::ExitStatus))); mLogStream << quoteArgs(mRsyncProcess.program()) << endl; mRsyncProcess.start(); mInfoRateLimiter.start(); } void RsyncJob::slotRsyncStarted() { makeNice(mRsyncProcess.pid()); } void RsyncJob::slotRsyncFinished(int pExitCode, QProcess::ExitStatus pExitStatus) { mLogStream << QString::fromUtf8(mRsyncProcess.readAllStandardError()); if(pExitStatus != QProcess::NormalExit || pExitCode != 0) { mLogStream << endl << QStringLiteral("Kup did not successfully complete the rsync backup job.") << endl; jobFinishedError(ErrorWithLog, xi18nc("@info notification", "Failed to save backup. " "See log file for more details.")); } else { mLogStream << endl << QStringLiteral("Kup successfully completed the rsync backup job at ") << QLocale().toString(QDateTime::currentDateTime()) << endl; jobFinishedSuccess(); } } void RsyncJob::slotReadRsyncOutput() { bool lValidInfo = false, lValidFileName = false; QString lFileName; ulong lPercent; qulonglong lTransfered; double lSpeed; QChar lUnit; QRegularExpression lProgressInfoExp(QStringLiteral("^\\s+([\\d,\\.]+)\\s+(\\d+)%\\s+(\\d*[,\\.]\\d+)(\\S)")); // very ugly and rough indication that this is a file path... what else to do.. QRegularExpression lNotFileNameExp(QStringLiteral("^(building file list|done$|deleting \\S+|.+/$|$)")); QString lLine; QTextStream lStream(mRsyncProcess.readAllStandardOutput()); while(lStream.readLineInto(&lLine, 500)) { QRegularExpressionMatch lMatch = lProgressInfoExp.match(lLine); if(lMatch.hasMatch()) { lValidInfo = true; lTransfered = lMatch.captured(1).remove(',').remove('.').toULongLong(); lPercent = qMax(lMatch.captured(2).toULong(), (ulong)1); lSpeed = QLocale().toDouble(lMatch.captured(3)); lUnit = lMatch.captured(4).at(0); } else { lMatch = lNotFileNameExp.match(lLine); if(!lMatch.hasMatch()) { lValidFileName = true; lFileName = lLine; } } } if(mInfoRateLimiter.hasExpired(200)) { if(lValidInfo) { setPercent(lPercent); if(lUnit == 'k') { lSpeed *= 1e3; } else if(lUnit == 'M') { lSpeed *= 1e6; } else if(lUnit == 'G') { lSpeed *= 1e9; } emitSpeed(lSpeed); if(lPercent > 5) { // the rounding to integer percent gives big error with small percentages setProcessedAmount(KJob::Bytes, lTransfered); setTotalAmount(KJob::Bytes, lTransfered*100/lPercent); } } if(lValidFileName) { emit description(this, i18n("Saving backup"), qMakePair(i18nc("Label for file currently being copied", "File"), lFileName)); } mInfoRateLimiter.start(); } } bool RsyncJob::doKill() { setError(KilledJobError); return 0 == ::kill(mRsyncProcess.pid(), SIGINT); } bool RsyncJob::doSuspend() { return 0 == ::kill(mRsyncProcess.pid(), SIGSTOP); } bool RsyncJob::doResume() { return 0 == ::kill(mRsyncProcess.pid(), SIGCONT); } kup-backup-0.7.1+dfsg/daemon/rsyncjob.h000066400000000000000000000041741322613417100177530ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #ifndef RSYNCJOB_H #define RSYNCJOB_H #include "backupjob.h" #include #include class KupDaemon; class RsyncJob : public BackupJob { Q_OBJECT public: RsyncJob(const BackupPlan &pBackupPlan, const QString &pDestinationPath, const QString &pLogFilePath, KupDaemon *pKupDaemon); protected slots: void performJob() Q_DECL_OVERRIDE; protected slots: void slotRsyncStarted(); void slotRsyncFinished(int pExitCode, QProcess::ExitStatus pExitStatus); void slotReadRsyncOutput(); protected: bool doKill() Q_DECL_OVERRIDE; bool doSuspend() Q_DECL_OVERRIDE; bool doResume() Q_DECL_OVERRIDE; KProcess mRsyncProcess; QElapsedTimer mInfoRateLimiter; }; #endif // RSYNCJOB_H kup-backup-0.7.1+dfsg/dataengine/000077500000000000000000000000001322613417100165775ustar00rootroot00000000000000kup-backup-0.7.1+dfsg/dataengine/CMakeLists.txt000066400000000000000000000013531322613417100213410ustar00rootroot00000000000000#this is a library so it needs to enforce it's translation domain, not use the application's domain. add_definitions(-DTRANSLATION_DOMAIN="kup") include_directories("../daemon") # Plasma Data Engine set(plasma_engine_kup_SRCS kupengine.cpp kupservice.cpp kupjob.cpp ) add_library(plasma_engine_kup MODULE ${plasma_engine_kup_SRCS}) target_link_libraries(plasma_engine_kup Qt5::Network KF5::Plasma ) kcoreaddons_desktop_to_json(plasma_engine_kup plasma-dataengine-kup.desktop) install(TARGETS plasma_engine_kup DESTINATION ${KDE_INSTALL_PLUGINDIR}/plasma/dataengine) install(FILES plasma-dataengine-kup.desktop DESTINATION ${KDE_INSTALL_KSERVICES5DIR}) install(FILES kupservice.operations DESTINATION ${PLASMA_DATA_INSTALL_DIR}/services) kup-backup-0.7.1+dfsg/dataengine/kupengine.cpp000066400000000000000000000112461322613417100212740ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include "kupengine.h" #include "kupservice.h" #include "kupdaemon.h" #include #include #include KupEngine::KupEngine(QObject *pParent, const QVariantList &pArgs) : Plasma::DataEngine(pParent, pArgs) { mSocketName = QStringLiteral("kup-daemon-"); mSocketName += QString::fromLocal8Bit(qgetenv("USER")); mSocket = new QLocalSocket(this); connect(mSocket, &QLocalSocket::readyRead, this, &KupEngine::processData); connect(mSocket, &QLocalSocket::stateChanged, this, &KupEngine::checkConnection); // wait 5 seconds before trying to connect first time QTimer::singleShot(5000, mSocket, [&]{mSocket->connectToServer(mSocketName);}); setData(QStringLiteral("common"), QStringLiteral("plan count"), 0); } Plasma::Service *KupEngine::serviceForSource(const QString &pSource) { bool lIntOk; int lPlanNumber = pSource.toInt(&lIntOk); if(lIntOk) { return new KupService(lPlanNumber, mSocket, this); } else { return nullptr; } } void KupEngine::processData() { if(mSocket->bytesAvailable() <= 0) { return; } QJsonDocument lDoc = QJsonDocument::fromBinaryData(mSocket->readAll()); if(!lDoc.isObject()) { return; } QJsonObject lEvent = lDoc.object(); if(lEvent["event"] == QStringLiteral("status update")) { QJsonArray lPlans = lEvent["plans"].toArray(); setData(QStringLiteral("common"), QStringLiteral("plan count"), lPlans.count()); setCommonData(lEvent, QStringLiteral("tray icon active")); setCommonData(lEvent, QStringLiteral("tooltip icon name")); setCommonData(lEvent, QStringLiteral("tooltip title")); setCommonData(lEvent, QStringLiteral("tooltip subtitle")); setCommonData(lEvent, QStringLiteral("any plan busy")); setCommonData(lEvent, QStringLiteral("no plan reason")); for(int i = 0; i < lPlans.count(); ++i) { QJsonObject lPlan = lPlans[i].toObject(); setPlanData(i, lPlan, QStringLiteral("description")); setPlanData(i, lPlan, QStringLiteral("destination available")); setPlanData(i, lPlan, QStringLiteral("status heading")); setPlanData(i, lPlan, QStringLiteral("status details")); setPlanData(i, lPlan, QStringLiteral("icon name")); setPlanData(i, lPlan, QStringLiteral("log file exists")); setPlanData(i, lPlan, QStringLiteral("busy")); } } } void KupEngine::checkConnection(QLocalSocket::LocalSocketState pState) { if(pState != QLocalSocket::ConnectedState && pState != QLocalSocket::ConnectingState) { QTimer::singleShot(10000, mSocket, [&]{mSocket->connectToServer(mSocketName);}); } if(pState == QLocalSocket::UnconnectedState) { // Don't bother to translate this error message, guessing the error string from qt // is not translated also. QString lErrorText = QStringLiteral("Error, no connection to kup-daemon: "); lErrorText += mSocket->errorString(); setData(QStringLiteral("common"), QStringLiteral("no plan reason"), lErrorText); } } void KupEngine::setPlanData(int i, const QJsonObject &pPlan, const QString &pKey) { setData(QString::number(i), pKey, pPlan[pKey].toVariant()); } void KupEngine::setCommonData(const QJsonObject &pCommonStatus, const QString &pKey) { setData(QStringLiteral("common"), pKey, pCommonStatus[pKey].toVariant()); } K_EXPORT_PLASMA_DATAENGINE_WITH_JSON(backups, KupEngine, "plasma-dataengine-kup.json") #include "kupengine.moc" kup-backup-0.7.1+dfsg/dataengine/kupengine.h000066400000000000000000000040631322613417100207400ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #ifndef KUPENGINE_H #define KUPENGINE_H #include #include class KupEngine : public Plasma::DataEngine { Q_OBJECT public: KupEngine(QObject *pParent, const QVariantList &pArgs); Plasma::Service *serviceForSource (const QString &pSource) override; public slots: // void refresh(); void processData(); void checkConnection(QLocalSocket::LocalSocketState pState); private: void setPlanData(int i, const QJsonObject &pPlan, const QString &pKey); void setCommonData(const QJsonObject &pCommonStatus, const QString &pKey); QLocalSocket *mSocket; QString mSocketName; }; #endif // KUPENGINE_H kup-backup-0.7.1+dfsg/dataengine/kupjob.cpp000066400000000000000000000041241322613417100205760ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include "kupjob.h" #include #include #include KupJob::KupJob(int pPlanNumber, QLocalSocket *pSocket, const QString &pOperation, QMap &pParameters, QObject *pParent) : ServiceJob(pParent->objectName(), pOperation, pParameters, pParent), mSocket(pSocket), mPlanNumber(pPlanNumber) { } void KupJob::start() { if(mSocket->state() != QLocalSocket::ConnectedState) { return; } QJsonObject lCommand; lCommand["plan number"] = mPlanNumber; lCommand["operation name"] = operationName(); QJsonDocument lDoc(lCommand); mSocket->write(lDoc.toBinaryData()); setResult(false); } kup-backup-0.7.1+dfsg/dataengine/kupjob.h000066400000000000000000000034661322613417100202530ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #ifndef KUPJOB_H #define KUPJOB_H #include class QLocalSocket; class KupJob : public Plasma::ServiceJob { Q_OBJECT public: KupJob(int pPlanNumber, QLocalSocket *pSocket, const QString &pOperation, QMap &pParameters, QObject *pParent = 0); protected: void start() override; QLocalSocket *mSocket; int mPlanNumber; }; #endif kup-backup-0.7.1+dfsg/dataengine/kupservice.cpp000066400000000000000000000035701322613417100214700ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include "kupservice.h" #include "kupjob.h" #include KupService::KupService(int pPlanNumber, QLocalSocket *pSocket, QObject *pParent) : Plasma::Service(pParent), mSocket(pSocket), mPlanNumber(pPlanNumber) { setName(QStringLiteral("kupservice")); } ServiceJob *KupService::createJob(const QString &pOperation, QMap &pParameters) { return new KupJob(mPlanNumber, mSocket, pOperation, pParameters, this); } kup-backup-0.7.1+dfsg/dataengine/kupservice.h000066400000000000000000000036131322613417100211330ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #ifndef KUPSERVICE_H #define KUPSERVICE_H #include #include using namespace Plasma; class QLocalSocket; class KupService : public Plasma::Service { Q_OBJECT public: KupService(int pPlanNumber, QLocalSocket *pSocket, QObject *pParent = 0); ServiceJob *createJob(const QString &pOperation, QMap &pParameters) override; protected: QLocalSocket *mSocket; int mPlanNumber; }; #endif // KUPSERVICE_H kup-backup-0.7.1+dfsg/dataengine/kupservice.operations000066400000000000000000000003571322613417100230710ustar00rootroot00000000000000 kup-backup-0.7.1+dfsg/dataengine/plasma-dataengine-kup.desktop000066400000000000000000000022231322613417100243400ustar00rootroot00000000000000[Desktop Entry] Type=Service Icon=kup X-KDE-ServiceTypes=Plasma/DataEngine X-KDE-Library=plasma_engine_kup X-KDE-PluginInfo-Author=Simon Persson X-KDE-PluginInfo-Email=simon.persson@mykolab.com X-KDE-PluginInfo-Name=backups X-KDE-PluginInfo-Version=0.1 X-KDE-PluginInfo-Website=http://github.com/spersson/kup X-KDE-PluginInfo-Category= X-KDE-PluginInfo-Depends= X-KDE-PluginInfo-License=GPL X-KDE-PluginInfo-EnabledByDefault=true Name=Backups Name[bs_BA]=Backupi Name[cs]=Zálohy Name[da]=Backupper Name[de]=Datensicherungen Name[es]=Copias de seguridad Name[fr_FR]=Sauvegardes Name[it]=Backup Name[lt_LT]=Atsarginės kopijos Name[nl_NL]=Back-ups Name[pl]=Kopie zapasowe Name[pt_BR]=Backups Name[ru]=Резервные копии Name[sv]=Säkerhetskopior Name[tl]=Mga seguridad na kopya Name[zh_TW]=備份 Comment=Status of backup plans Comment[cs]=Stav plánu záloh Comment[de]=Zustand der Backupkonfiguration Comment[it]=Stato dei piani di backup Comment[nl_NL]=Status van back-upschema's Comment[pl]=Status planów tworzenia kopii zapasowych Comment[pt_BR]=Estado dos planos de backup Comment[sv]=Status för säkerhetskopior Comment[zh_TW]=備份計畫的狀態 kup-backup-0.7.1+dfsg/dataengine/plasma-dataengine-kup.desktop.template000066400000000000000000000007371322613417100261620ustar00rootroot00000000000000[Desktop Entry] Type=Service Icon=kup X-KDE-ServiceTypes=Plasma/DataEngine X-KDE-Library=plasma_engine_kup X-KDE-PluginInfo-Author=Simon Persson X-KDE-PluginInfo-Email=simon.persson@mykolab.com X-KDE-PluginInfo-Name=backups X-KDE-PluginInfo-Version=0.1 X-KDE-PluginInfo-Website=http://github.com/spersson/kup X-KDE-PluginInfo-Category= X-KDE-PluginInfo-Depends= X-KDE-PluginInfo-License=GPL X-KDE-PluginInfo-EnabledByDefault=true _Name=Backups _Comment=Status of backup plans kup-backup-0.7.1+dfsg/filedigger/000077500000000000000000000000001322613417100166015ustar00rootroot00000000000000kup-backup-0.7.1+dfsg/filedigger/CMakeLists.txt000066400000000000000000000013641322613417100213450ustar00rootroot00000000000000include_directories("../daemon") include_directories("../kcm") include_directories("../kioslave") include_directories("../settings") set(filedigger_SRCS filedigger.cpp main.cpp mergedvfs.cpp mergedvfsmodel.cpp restoredialog.cpp restorejob.cpp versionlistdelegate.cpp versionlistmodel.cpp ../kioslave/vfshelpers.cpp ../kcm/dirselector.cpp ../settings/kuputils.cpp ) add_definitions(-fexceptions) ki18n_wrap_ui(filedigger_SRCS restoredialog.ui) add_executable(kup-filedigger ${filedigger_SRCS}) target_link_libraries(kup-filedigger Qt5::Core Qt5::Gui KF5::KIOCore KF5::KIOFileWidgets KF5::I18n KF5::IconThemes KF5::JobWidgets ${libgit_link_name} ) ########### install files ############### install(TARGETS kup-filedigger ${INSTALL_TARGETS_DEFAULT_ARGS}) kup-backup-0.7.1+dfsg/filedigger/filedigger.cpp000066400000000000000000000101601322613417100214040ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include "filedigger.h" #include "mergedvfsmodel.h" #include "restoredialog.h" #include "versionlistmodel.h" #include "versionlistdelegate.h" #include #include #include #include #include #include FileDigger::FileDigger(MergedRepository *pRepository, QWidget *pParent) : KMainWindow(pParent) { setWindowIcon(QIcon::fromTheme(QStringLiteral("kup"))); KToolBar *lAppToolBar = toolBar(); lAppToolBar->addAction(KStandardAction::quit(this, SLOT(close()), this)); QSplitter *lSplitter = new QSplitter(); mMergedVfsModel = new MergedVfsModel(pRepository, this); mMergedVfsView = new QTreeView(); mMergedVfsView->setHeaderHidden(true); mMergedVfsView->setSelectionMode(QAbstractItemView::SingleSelection); mMergedVfsView->setModel(mMergedVfsModel); lSplitter->addWidget(mMergedVfsView); connect(mMergedVfsView->selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)), this, SLOT(updateVersionModel(QModelIndex,QModelIndex))); mVersionView = new QListView(); mVersionView->setSelectionMode(QAbstractItemView::SingleSelection); mVersionModel = new VersionListModel(this); mVersionView->setModel(mVersionModel); VersionListDelegate *lVersionDelegate = new VersionListDelegate(mVersionView,this); mVersionView->setItemDelegate(lVersionDelegate); lSplitter->addWidget(mVersionView); connect(lVersionDelegate, SIGNAL(openRequested(QModelIndex)), SLOT(open(QModelIndex))); connect(lVersionDelegate, SIGNAL(restoreRequested(QModelIndex)), SLOT(restore(QModelIndex))); mMergedVfsView->setFocus(); //expand all levels from the top until the node has more than one child QModelIndex lIndex; forever { mMergedVfsView->expand(lIndex); if(mMergedVfsModel->rowCount(lIndex) == 1) { lIndex = mMergedVfsModel->index(0, 0, lIndex); } else { break; } } mMergedVfsView->selectionModel()->setCurrentIndex(lIndex.child(0,0), QItemSelectionModel::Select); setCentralWidget(lSplitter); } void FileDigger::updateVersionModel(const QModelIndex &pCurrent, const QModelIndex &pPrevious) { Q_UNUSED(pPrevious) mVersionModel->setNode(mMergedVfsModel->node(pCurrent)); mVersionView->selectionModel()->setCurrentIndex(mVersionModel->index(0,0), QItemSelectionModel::Select); } void FileDigger::open(const QModelIndex &pIndex) { KRun::runUrl(pIndex.data(VersionBupUrlRole).value(), pIndex.data(VersionMimeTypeRole).toString(), this); } void FileDigger::restore(const QModelIndex &pIndex) { RestoreDialog *lDialog = new RestoreDialog(pIndex.data(VersionSourceInfoRole).value(), this); lDialog->setAttribute(Qt::WA_DeleteOnClose); lDialog->show(); } kup-backup-0.7.1+dfsg/filedigger/filedigger.h000066400000000000000000000041271322613417100210570ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #ifndef FILEDIGGER_H #define FILEDIGGER_H #include class MergedVfsModel; class MergedRepository; class VersionListModel; class QListView; class QModelIndex; class QTreeView; class FileDigger : public KMainWindow { Q_OBJECT public: explicit FileDigger(MergedRepository *pRepository, QWidget *pParent = 0); protected slots: void updateVersionModel(const QModelIndex &pCurrent, const QModelIndex &pPrevious); void open(const QModelIndex &pIndex); void restore(const QModelIndex &pIndex); protected: MergedVfsModel *mMergedVfsModel; QTreeView *mMergedVfsView; VersionListModel *mVersionModel; QListView *mVersionView; }; #endif // FILEDIGGER_H kup-backup-0.7.1+dfsg/filedigger/main.cpp000066400000000000000000000114621322613417100202350ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include "filedigger.h" #include "mergedvfs.h" #if LIBGIT2_VER_MAJOR == 0 && LIBGIT2_VER_MINOR >= 24 #include #else #include #endif #include #include #include #include #include #include #include #include #include int main(int pArgCount, char **pArgArray) { QApplication lApp(pArgCount, pArgArray); lApp.setAttribute(Qt::AA_UseHighDpiPixmaps, true); KLocalizedString::setApplicationDomain("kup"); KAboutData lAbout(QStringLiteral("kupfiledigger"), xi18nc("@title", "File Digger"), QStringLiteral("0.7.1"), i18n("Browser for bup archives."), KAboutLicense::GPL, i18n("Copyright (C) 2013-2015 Simon Persson"), QString(), QString(), "simonpersson1@gmail.com"); lAbout.addAuthor(i18n("Simon Persson"), QString(), "simonpersson1@gmail.com"); lAbout.setTranslator(xi18nc("NAME OF TRANSLATORS", "Your names"), xi18nc("EMAIL OF TRANSLATORS", "Your emails")); KAboutData::setApplicationData(lAbout); //this calls qApp.setApplicationName, setVersion, etc. QCommandLineParser lParser; lParser.addVersionOption(); lParser.addHelpOption(); lParser.addOption(QCommandLineOption(QStringList() << QStringLiteral("b") << QStringLiteral("branch"), i18n("Name of the branch to be opened."), QStringLiteral("branch name"), QStringLiteral("kup"))); lParser.addPositionalArgument(QStringLiteral(""), i18n("Path to the bup repository to be opened.")); lAbout.setupCommandLine(&lParser); lParser.process(lApp); lAbout.processCommandLine(&lParser); if(lParser.positionalArguments().count() != 1) { // this very convoluted call is just to stop Qt from adding quotation marks around the text output qCritical("%s", i18nc("@info:shell Error message at startup", "You must supply the path to a bup or git repository that " "you wish to open for viewing.").toLocal8Bit().constData()); return -1; } // This needs to be called first thing, before any other calls to libgit2. #if LIBGIT2_VER_MAJOR == 0 && LIBGIT2_VER_MINOR >= 24 git_libgit2_init(); #else git_threads_init(); #endif MergedRepository *lRepository = new MergedRepository(NULL, lParser.positionalArguments().first(), lParser.value("branch")); if(!lRepository->open()) { KMessageBox::sorry(NULL, xi18nc("@info messagebox, %1 is a folder path", "The backup archive %1 could not be opened. Check if the backups really are located there.", lParser.positionalArguments().first())); return 1; } if(!lRepository->readBranch()) { if(!lRepository->permissionsOk()) { KMessageBox::sorry(NULL, xi18nc("@info messagebox", "You do not have permission needed to read this backup archive.")); return 2; } else { lRepository->askForIntegrityCheck(); return 3; } } FileDigger *lFileDigger = new FileDigger(lRepository); lFileDigger->show(); int lRetVal = lApp.exec(); delete lRepository; #if LIBGIT2_VER_MAJOR == 0 && LIBGIT2_VER_MINOR >= 24 git_libgit2_shutdown(); #else git_threads_shutdown(); #endif return lRetVal; } kup-backup-0.7.1+dfsg/filedigger/mergedvfs.cpp000066400000000000000000000245301322613417100212730ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include "kupdaemon.h" #include "mergedvfs.h" #include "vfshelpers.h" #include #include #include #include #include #include #include typedef QMap NameMap; typedef QMapIterator NameMapIterator; git_repository *MergedNode::mRepository = NULL; bool mergedNodeLessThan(const MergedNode *a, const MergedNode *b) { if(a->isDirectory() != b->isDirectory()) { return a->isDirectory(); } return a->objectName() < b->objectName(); } bool versionGreaterThan(const VersionData *a, const VersionData *b) { return a->mModifiedDate > b->mModifiedDate; } MergedNode::MergedNode(QObject *pParent, const QString &pName, uint pMode) :QObject(pParent) { mSubNodes = NULL; setObjectName(pName); mMode = pMode; } void MergedNode::getBupUrl(int pVersionIndex, QUrl *pComplete, QString *pRepoPath, QString *pBranchName, quint64 *pCommitTime, QString *pPathInRepo) const { QList lStack; const MergedNode *lNode = this; while(lNode != NULL) { lStack.append(lNode); lNode = qobject_cast(lNode->parent()); } const MergedRepository *lRepo = qobject_cast(lStack.takeLast()); if(pComplete) { pComplete->setUrl("bup://" + lRepo->objectName() + '/' + lRepo->mBranchName + '/' + vfsTimeToString(mVersionList.at(pVersionIndex)->mCommitTime)); } if(pRepoPath) { *pRepoPath = lRepo->objectName(); } if(pBranchName) { *pBranchName = lRepo->mBranchName; } if(pCommitTime) { *pCommitTime = mVersionList.at(pVersionIndex)->mCommitTime; } if(pPathInRepo) { pPathInRepo->clear(); } while(!lStack.isEmpty()) { QString lPathComponent = lStack.takeLast()->objectName(); if(pComplete) { pComplete->setPath(pComplete->path() + '/' + lPathComponent); } if(pPathInRepo) { pPathInRepo->append(QLatin1Char('/')); pPathInRepo->append(lPathComponent); } } } MergedNodeList &MergedNode::subNodes() { if(mSubNodes == NULL) { mSubNodes = new MergedNodeList(); if(S_ISDIR(mMode)) { generateSubNodes(); } } return *mSubNodes; } void MergedNode::askForIntegrityCheck() { int lAnswer = KMessageBox::questionYesNo(NULL, xi18nc("@info messagebox", "Could not read this backup archive. Perhaps some files " "have become corrupted. Do you want to run an integrity " "check to test this?")); if(lAnswer == KMessageBox::Yes) { QDBusInterface lInterface(KUP_DBUS_SERVICE_NAME, KUP_DBUS_OBJECT_PATH); if(lInterface.isValid()) { lInterface.call(QStringLiteral("runIntegrityCheck"), QDir::cleanPath(QString::fromLocal8Bit(git_repository_path(mRepository)))); } } } void MergedNode::generateSubNodes() { NameMap lSubNodeMap; foreach(VersionData *lCurrentVersion, mVersionList) { git_tree *lTree; if(0 != git_tree_lookup(&lTree, mRepository, &lCurrentVersion->mOid)) { askForIntegrityCheck(); continue; // try to be fault tolerant by not aborting... } git_blob *lMetadataBlob = NULL; VintStream *lMetadataStream = NULL; const git_tree_entry *lTreeEntry = git_tree_entry_byname(lTree, ".bupm"); if(lTreeEntry != NULL && 0 == git_blob_lookup(&lMetadataBlob, mRepository, git_tree_entry_id(lTreeEntry))) { lMetadataStream = new VintStream(git_blob_rawcontent(lMetadataBlob), git_blob_rawsize(lMetadataBlob), this); Metadata lMetadata; readMetadata(*lMetadataStream, lMetadata); // the first entry is metadata for the directory itself, discard it. } uint lEntryCount = git_tree_entrycount(lTree); for(uint i = 0; i < lEntryCount; ++i) { uint lMode; const git_oid *lOid; QString lName; bool lChunked; const git_tree_entry *lTreeEntry = git_tree_entry_byindex(lTree, i); getEntryAttributes(lTreeEntry, lMode, lChunked, lOid, lName); if(lName == QStringLiteral(".bupm")) { continue; } MergedNode *lSubNode = lSubNodeMap.value(lName, NULL); if(lSubNode == NULL) { lSubNode = new MergedNode(this, lName, lMode); lSubNodeMap.insert(lName, lSubNode); mSubNodes->append(lSubNode); } else if((S_IFMT & lMode) != (S_IFMT & lSubNode->mMode)) { if(S_ISDIR(lMode)) { lName.append(xi18nc("added after folder name in some cases", " (folder)")); } else if(S_ISLNK(lMode)) { lName.append(xi18nc("added after file name in some cases", " (symlink)")); } else { lName.append(xi18nc("added after file name in some cases", " (file)")); } lSubNode = lSubNodeMap.value(lName, NULL); if(lSubNode == NULL) { lSubNode = new MergedNode(this, lName, lMode); lSubNodeMap.insert(lName, lSubNode); mSubNodes->append(lSubNode); } } bool lAlreadySeen = false; foreach(VersionData *lVersion, lSubNode->mVersionList) { if(lVersion->mOid == *lOid) { lAlreadySeen = true; break; } } if(S_ISDIR(lMode)) { if(!lAlreadySeen) { lSubNode->mVersionList.append(new VersionData(lOid, lCurrentVersion->mCommitTime, lCurrentVersion->mModifiedDate, 0)); } } else { quint64 lModifiedDate; Metadata lMetadata; if(lMetadataStream != NULL && 0 == readMetadata(*lMetadataStream, lMetadata)) { lModifiedDate = lMetadata.mMtime; } else { lModifiedDate = lCurrentVersion->mModifiedDate; } if(!lAlreadySeen) { lSubNode->mVersionList.append(new VersionData(lChunked, lOid, lCurrentVersion->mCommitTime, lModifiedDate)); } } } if(lMetadataStream != NULL) { delete lMetadataStream; git_blob_free(lMetadataBlob); } git_tree_free(lTree); } qSort(mSubNodes->begin(), mSubNodes->end(), mergedNodeLessThan); foreach(MergedNode *lNode, *mSubNodes) { qSort(lNode->mVersionList.begin(), lNode->mVersionList.end(), versionGreaterThan); } } MergedRepository::MergedRepository(QObject *pParent, const QString &pRepositoryPath, const QString &pBranchName) : MergedNode(pParent, pRepositoryPath, DEFAULT_MODE_DIRECTORY), mBranchName(pBranchName) { if(!objectName().endsWith(QLatin1Char('/'))) { setObjectName(objectName() + QLatin1Char('/')); } } MergedRepository::~MergedRepository() { if(mRepository != NULL) { git_repository_free(mRepository); } } bool MergedRepository::open() { if(0 != git_repository_open(&mRepository, objectName().toLocal8Bit())) { qWarning() << "could not open repository " << objectName(); mRepository = NULL; return false; } return true; } bool MergedRepository::readBranch() { if(mRepository == NULL) { return false; } git_revwalk *lRevisionWalker; if(0 != git_revwalk_new(&lRevisionWalker, mRepository)) { qWarning() << "could not create a revision walker in repository " << objectName(); return false; } QString lCompleteBranchName = QStringLiteral("refs/heads/"); lCompleteBranchName.append(mBranchName); if(0 != git_revwalk_push_ref(lRevisionWalker, lCompleteBranchName.toLocal8Bit())) { qWarning() << "Unable to read branch " << mBranchName << " in repository " << objectName(); git_revwalk_free(lRevisionWalker); return false; } bool lEmptyList = true; git_oid lOid; while(0 == git_revwalk_next(&lOid, lRevisionWalker)) { git_commit *lCommit; if(0 != git_commit_lookup(&lCommit, mRepository, &lOid)) { continue; } git_time_t lTime = git_commit_time(lCommit); mVersionList.append(new VersionData(git_commit_tree_id(lCommit), lTime, lTime, 0)); lEmptyList = false; git_commit_free(lCommit); } git_revwalk_free(lRevisionWalker); return !lEmptyList; } bool MergedRepository::permissionsOk() { if(mRepository == NULL) { return false; } QDir lRepoDir(objectName()); if(!lRepoDir.exists()) { return false; } QList lDirectories; lDirectories << lRepoDir; while(!lDirectories.isEmpty()) { QDir lDir = lDirectories.takeFirst(); foreach(QFileInfo lFileInfo, lDir.entryInfoList(QDir::AllEntries | QDir::NoDotAndDotDot)) { if(!lFileInfo.isReadable()) { return false; } if(lFileInfo.isDir()) { lDirectories << QDir(lFileInfo.absoluteFilePath()); } } } return true; } uint qHash(git_oid pOid) { return qHash(QByteArray::fromRawData((char *)pOid.id, GIT_OID_RAWSZ)); } bool operator ==(const git_oid &pOidA, const git_oid &pOidB) { QByteArray a = QByteArray::fromRawData((char *)pOidA.id, GIT_OID_RAWSZ); QByteArray b = QByteArray::fromRawData((char *)pOidB.id, GIT_OID_RAWSZ); return a == b; } quint64 VersionData::size() { if(mSizeIsValid) { return mSize; } if(mChunkedFile) { mSize = calculateChunkFileSize(&mOid, MergedNode::mRepository); } else { git_blob *lBlob; if(0 == git_blob_lookup(&lBlob, MergedNode::mRepository, &mOid)) { mSize = git_blob_rawsize(lBlob); git_blob_free(lBlob); } else { mSize = 0; } } mSizeIsValid = true; return mSize; } kup-backup-0.7.1+dfsg/filedigger/mergedvfs.h000066400000000000000000000070371322613417100207430ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #ifndef MERGEDVFS_H #define MERGEDVFS_H #include uint qHash(git_oid pOid); bool operator ==(const git_oid &pOidA, const git_oid &pOidB); #include #include #include #include struct VersionData { VersionData(bool pChunkedFile, const git_oid *pOid, quint64 pCommitTime, quint64 pModifiedDate) :mChunkedFile(pChunkedFile), mOid(*pOid), mCommitTime(pCommitTime), mModifiedDate(pModifiedDate) { mSizeIsValid = false; } VersionData(const git_oid *pOid, quint64 pCommitTime, quint64 pModifiedDate, quint64 pSize) :mOid(*pOid), mCommitTime(pCommitTime), mModifiedDate(pModifiedDate), mSize(pSize) { mSizeIsValid = true; } quint64 size(); bool mSizeIsValid; bool mChunkedFile; git_oid mOid; quint64 mCommitTime; quint64 mModifiedDate; protected: quint64 mSize; }; class MergedNode; typedef QList MergedNodeList; typedef QListIterator MergedNodeListIterator; typedef QList VersionList; typedef QListIterator VersionListIterator; class MergedNode: public QObject { Q_OBJECT friend class VersionData; public: MergedNode(QObject *pParent, const QString &pName, uint pMode); virtual ~MergedNode() { if(mSubNodes != NULL) { delete mSubNodes; } } bool isDirectory() const { return S_ISDIR(mMode); } void getBupUrl(int pVersionIndex, QUrl *pComplete, QString *pRepoPath = NULL, QString *pBranchName = NULL, quint64 *pCommitTime = NULL, QString *pPathInRepo = NULL) const; virtual MergedNodeList &subNodes(); const VersionList *versionList() const { return &mVersionList; } uint mode() const { return mMode; } static void askForIntegrityCheck(); protected: virtual void generateSubNodes(); static git_repository *mRepository; uint mMode; VersionList mVersionList; MergedNodeList *mSubNodes; }; class MergedRepository: public MergedNode { Q_OBJECT public: MergedRepository(QObject *pParent, const QString &pRepositoryPath, const QString &pBranchName); virtual ~MergedRepository(); bool open(); bool readBranch(); bool permissionsOk(); QString mBranchName; }; #endif // MERGEDVFS_H kup-backup-0.7.1+dfsg/filedigger/mergedvfsmodel.cpp000066400000000000000000000077251322613417100223230ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include "mergedvfsmodel.h" #include "mergedvfs.h" #include "vfshelpers.h" #include #include #include MergedVfsModel::MergedVfsModel(MergedRepository *pRoot, QObject *pParent) : QAbstractItemModel(pParent), mRoot(pRoot) { } int MergedVfsModel::columnCount(const QModelIndex &pParent) const { Q_UNUSED(pParent) return 1; } QVariant MergedVfsModel::data(const QModelIndex &pIndex, int pRole) const { if(!pIndex.isValid()) { return QVariant(); } MergedNode *lNode = static_cast(pIndex.internalPointer()); switch (pRole) { case Qt::DisplayRole: return lNode->objectName(); case Qt::DecorationRole: return KIconLoader::global()->loadMimeTypeIcon( KIO::iconNameForUrl(QUrl::fromLocalFile(lNode->objectName())), KIconLoader::Small); default: return QVariant(); } } QModelIndex MergedVfsModel::index(int pRow, int pColumn, const QModelIndex &pParent) const { if(pColumn != 0 || pRow < 0) { return QModelIndex(); // invalid } if(!pParent.isValid()) { if(pRow >= mRoot->subNodes().count()) { return QModelIndex(); // invalid } return createIndex(pRow, 0, mRoot->subNodes().at(pRow)); } MergedNode *lParentNode = static_cast(pParent.internalPointer()); if(pRow >= lParentNode->subNodes().count()) { return QModelIndex(); // invalid } return createIndex(pRow, 0, lParentNode->subNodes().at(pRow)); } QModelIndex MergedVfsModel::parent(const QModelIndex &pChild) const { if(!pChild.isValid()) { return QModelIndex(); } MergedNode *lChild = static_cast(pChild.internalPointer()); MergedNode *lParent = qobject_cast(lChild->parent()); if(lParent == NULL || lParent == mRoot) { return QModelIndex(); //invalid } MergedNode *lGrandParent = qobject_cast(lParent->parent()); if(lGrandParent == NULL) { return QModelIndex(); //invalid } return createIndex(lGrandParent->subNodes().indexOf(lParent), 0, lParent); } int MergedVfsModel::rowCount(const QModelIndex &pParent) const { if(!pParent.isValid()) { return mRoot->subNodes().count(); } MergedNode *lParent = static_cast(pParent.internalPointer()); if(lParent == NULL) { return 0; } return lParent->subNodes().count(); } const VersionList *MergedVfsModel::versionList(const QModelIndex &pIndex) { MergedNode *lNode = static_cast(pIndex.internalPointer()); return lNode->versionList(); } const MergedNode *MergedVfsModel::node(const QModelIndex &pIndex) { return static_cast(pIndex.internalPointer()); } kup-backup-0.7.1+dfsg/filedigger/mergedvfsmodel.h000066400000000000000000000042141322613417100217560ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #ifndef MERGEDVFSMODEL_H #define MERGEDVFSMODEL_H #include #include "mergedvfs.h" class MergedVfsModel : public QAbstractItemModel { Q_OBJECT public: explicit MergedVfsModel(MergedRepository *pRoot, QObject *pParent = 0); int columnCount(const QModelIndex &pParent) const; QVariant data(const QModelIndex &pIndex, int pRole) const; QModelIndex index(int pRow, int pColumn, const QModelIndex &pParent) const; QModelIndex parent(const QModelIndex &pChild) const; int rowCount(const QModelIndex &pParent) const; const VersionList *versionList(const QModelIndex &pIndex); const MergedNode *node(const QModelIndex &pIndex); protected: MergedRepository *mRoot; }; #endif // MERGEDVFSMODEL_H kup-backup-0.7.1+dfsg/filedigger/restoredialog.cpp000066400000000000000000000431721322613417100221570ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include "restoredialog.h" #include "ui_restoredialog.h" #include "restorejob.h" #include "dirselector.h" #include "kuputils.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define KUP_TMP_RESTORE_FOLDER QStringLiteral("_kup_temporary_restore_folder_") RestoreDialog::RestoreDialog(const BupSourceInfo &pPathInfo, QWidget *parent) : QDialog(parent), mUI(new Ui::RestoreDialog), mSourceInfo(pPathInfo) { mSourceFileName = mSourceInfo.mPathInRepo.section(QDir::separator(), -1); mUI->setupUi(this); mFileWidget = NULL; mDirSelector = NULL; mJobTracker = NULL; mUI->mRestoreOriginalButton->setMinimumHeight(mUI->mRestoreOriginalButton->sizeHint().height() * 2); mUI->mRestoreCustomButton->setMinimumHeight(mUI->mRestoreCustomButton->sizeHint().height() * 2); connect(mUI->mRestoreOriginalButton, SIGNAL(clicked()), SLOT(setOriginalDestination())); connect(mUI->mRestoreCustomButton, SIGNAL(clicked()), SLOT(setCustomDestination())); mMessageWidget = new KMessageWidget(this); mMessageWidget->setWordWrap(true); mUI->mTopLevelVLayout->insertWidget(0, mMessageWidget); connect(mUI->mDestBackButton, SIGNAL(clicked()), mMessageWidget, SLOT(hide())); connect(mUI->mDestNextButton, SIGNAL(clicked()), SLOT(checkDestinationSelection())); mSignalMapper = new QSignalMapper(this); connect(mSignalMapper, SIGNAL(mapped(int)), mUI->mStackedWidget, SLOT(setCurrentIndex(int))); mSignalMapper->setMapping(mUI->mDestBackButton, 0); connect(mUI->mDestBackButton, SIGNAL(clicked()), mSignalMapper, SLOT(map())); mSignalMapper->setMapping(mUI->mOverwriteBackButton, 0); connect(mUI->mOverwriteBackButton, SIGNAL(clicked()), mSignalMapper, SLOT(map())); connect(mUI->mConfirmButton, SIGNAL(clicked()), SLOT(fileOverwriteConfirmed())); connect(mUI->mOpenDestinationButton, SIGNAL(clicked()), SLOT(openDestinationFolder())); } RestoreDialog::~RestoreDialog() { delete mUI; } void RestoreDialog::changeEvent(QEvent *pEvent) { QDialog::changeEvent(pEvent); switch (pEvent->type()) { case QEvent::LanguageChange: mUI->retranslateUi(this); break; default: break; } } void RestoreDialog::setOriginalDestination() { if(mSourceInfo.mIsDirectory) { // the path in repo could have had slashes appended below, we are back here because user clicked "back" ensureNoTrailingSlash(mSourceInfo.mPathInRepo); //select parent of folder to be restored mDestination.setFile(mSourceInfo.mPathInRepo.section(QDir::separator(), 0, -2)); } else { mDestination.setFile(mSourceInfo.mPathInRepo); } startPrechecks(); } void RestoreDialog::setCustomDestination() { if(mSourceInfo.mIsDirectory && mDirSelector == NULL) { mDirSelector = new DirSelector(this); mDirSelector->setRootUrl(QUrl::fromLocalFile(QStringLiteral("/"))); QString lDirPath = mSourceInfo.mPathInRepo.section(QDir::separator(), 0, -2); mDirSelector->expandToUrl(QUrl::fromLocalFile(lDirPath)); mUI->mDestinationVLayout->insertWidget(0, mDirSelector); QPushButton *lNewFolderButton = new QPushButton(QIcon::fromTheme(QStringLiteral("folder-new")), xi18nc("@action:button","New Folder...")); connect(lNewFolderButton, SIGNAL(clicked()), SLOT(createNewFolder())); mUI->mDestinationHLayout->insertWidget(0, lNewFolderButton); } else if(!mSourceInfo.mIsDirectory && mFileWidget == NULL) { QFileInfo lFileInfo(mSourceInfo.mPathInRepo); do { lFileInfo.setFile(lFileInfo.absolutePath()); // check the file's directory first, not the file. } while(!lFileInfo.exists()); QUrl lStartSelection = QUrl::fromLocalFile(lFileInfo.absoluteFilePath() + '/' + mSourceFileName); mFileWidget = new KFileWidget(lStartSelection, this); mFileWidget->setOperationMode(KFileWidget::Saving); mFileWidget->setMode(KFile::File | KFile::LocalOnly); mUI->mDestinationVLayout->insertWidget(0, mFileWidget); } mUI->mDestNextButton->setFocus(); mUI->mStackedWidget->setCurrentIndex(1); } void RestoreDialog::checkDestinationSelection() { if(mSourceInfo.mIsDirectory) { QUrl lUrl = mDirSelector->url(); if(!lUrl.isEmpty()) { mDestination.setFile(lUrl.path()); startPrechecks(); } else { mMessageWidget->setText(xi18nc("@info message bar appearing on top", "No destination was selected, please select one.")); mMessageWidget->setMessageType(KMessageWidget::Error); mMessageWidget->animatedShow(); } } else { connect(mFileWidget, SIGNAL(accepted()), SLOT(checkDestinationSelection2())); mFileWidget->slotOk(); // will emit accepted() if selection is valid, continue below then } } void RestoreDialog::checkDestinationSelection2() { mFileWidget->accept(); // This call is needed for selectedFile() to return something. QString lFilePath = mFileWidget->selectedFile(); if(!lFilePath.isEmpty()) { mDestination.setFile(lFilePath); startPrechecks(); } else { mMessageWidget->setText(xi18nc("@info message bar appearing on top", "No destination was selected, please select one.")); mMessageWidget->setMessageType(KMessageWidget::Error); mMessageWidget->animatedShow(); } } void RestoreDialog::startPrechecks() { mUI->mFileConflictList->clear(); mSourceSize = 0; mFileSizes.clear(); if(mSourceInfo.mIsDirectory) { mDirectoriesCount = 1; // the folder being restored, rest will be added during listing. mRestorationPath = mDestination.absoluteFilePath(); mFolderToCreate = QFileInfo(mDestination.absoluteFilePath() + QDir::separator() + mSourceFileName); mSavedWorkingDirectory.clear(); if(mFolderToCreate.exists()) { if(mFolderToCreate.isDir()) { // destination dir exists, first restore to a subfolder, then move files up. mRestorationPath = mFolderToCreate.absoluteFilePath(); QDir lDir(mFolderToCreate.absoluteFilePath()); lDir.setFilter(QDir::AllEntries | QDir::Hidden | QDir::System | QDir::NoDotAndDotDot); if(lDir.count() > 0) { // destination dir exists and is non-empty. mRestorationPath.append(QDir::separator()); mRestorationPath.append(KUP_TMP_RESTORE_FOLDER); } // make bup not restore the source folder itself but instead it's contents mSourceInfo.mPathInRepo.append(QDir::separator()); // folder already exists, need to check for files about to be overwritten. // will create QFileInfos with relative paths during listing and compare with listed source entries. mSavedWorkingDirectory = QDir::currentPath(); QDir::setCurrent(mFolderToCreate.absoluteFilePath()); } else { mUI->mFileConflictList->addItem(mFolderToCreate.absoluteFilePath()); mRestorationPath.append(QDir::separator()); mRestorationPath.append(KUP_TMP_RESTORE_FOLDER); } } KIO::ListJob *lListJob = KIO::listRecursive(mSourceInfo.mBupKioPath, KIO::HideProgressInfo); connect(lListJob, SIGNAL(entries(KIO::Job*,KIO::UDSEntryList)), SLOT(collectSourceListing(KIO::Job*,KIO::UDSEntryList))); connect(lListJob, SIGNAL(result(KJob*)), SLOT(sourceListingCompleted(KJob*))); lListJob->start(); } else { mDirectoriesCount = 0; mSourceSize = mSourceInfo.mSize; mFileSizes.insert(mSourceFileName, mSourceInfo.mSize); mRestorationPath = mDestination.absolutePath(); if(mDestination.exists() || mDestination.fileName() != mSourceFileName) { mRestorationPath.append(QDir::separator()); mRestorationPath.append(KUP_TMP_RESTORE_FOLDER); if(mDestination.exists()) { mUI->mFileConflictList->addItem(mDestination.absoluteFilePath()); } } completePrechecks(); } } void RestoreDialog::collectSourceListing(KIO::Job *pJob, const KIO::UDSEntryList &pEntryList) { Q_UNUSED(pJob) KIO::UDSEntryList::ConstIterator it = pEntryList.begin(); const KIO::UDSEntryList::ConstIterator end = pEntryList.end(); for(; it != end; ++it) { QString lEntryName = it->stringValue(KIO::UDSEntry::UDS_NAME); if(it->isDir()) { if(lEntryName != QStringLiteral(".") && lEntryName != QStringLiteral("..")) { mDirectoriesCount++; } } else { if(!it->isLink()) { quint64 lEntrySize = it->numberValue(KIO::UDSEntry::UDS_SIZE); mSourceSize += lEntrySize; mFileSizes.insert(mSourceFileName + QDir::separator() + lEntryName, lEntrySize); } if(!mSavedWorkingDirectory.isEmpty()) { QFileInfo lFileInfo(lEntryName); if(lFileInfo.exists()) { mUI->mFileConflictList->addItem(lEntryName); } } } } } void RestoreDialog::sourceListingCompleted(KJob *pJob) { if(!mSavedWorkingDirectory.isEmpty()) { QDir::setCurrent(mSavedWorkingDirectory); } if(pJob->error() != 0) { mMessageWidget->setText(xi18nc("@info message bar appearing on top", "There was a problem while getting a list of all files to restore: %1", pJob->errorString())); mMessageWidget->setMessageType(KMessageWidget::Error); mMessageWidget->animatedShow(); } else { completePrechecks(); } } void RestoreDialog::completePrechecks() { KDiskFreeSpaceInfo lSpaceInfo = KDiskFreeSpaceInfo::freeSpaceInfo(mDestination.absolutePath()); if(lSpaceInfo.isValid() && lSpaceInfo.available() < mSourceSize) { mMessageWidget->setText(xi18nc("@info message bar appearing on top", "The destination does not have enough space available. " "Please choose a different destination or free some space.")); mMessageWidget->setMessageType(KMessageWidget::Error); mMessageWidget->animatedShow(); } else if(mUI->mFileConflictList->count() > 0) { if(mSourceInfo.mIsDirectory) { QString lDateString = QLocale().toString(QDateTime::fromTime_t(mSourceInfo.mCommitTime).toLocalTime()); lDateString.replace(QLatin1Char('/'), QLatin1Char('-')); // make sure no slashes in suggested folder name mUI->mNewFolderNameEdit->setText(mSourceFileName + xi18nc("added to the suggested filename when restoring, %1 is the time when backup was taken", " - saved at %1", lDateString)); mUI->mConflictTitleLabel->setText(xi18nc("@info", "Folder already exists, please choose a solution")); } else { mUI->mOverwriteRadioButton->setChecked(true); mUI->mOverwriteRadioButton->hide(); mUI->mNewNameRadioButton->hide(); mUI->mNewFolderNameEdit->hide(); mUI->mConflictTitleLabel->setText(xi18nc("@info", "File already exists")); } mUI->mStackedWidget->setCurrentIndex(2); } else { startRestoring(); } } void RestoreDialog::fileOverwriteConfirmed() { if(mSourceInfo.mIsDirectory && mUI->mNewNameRadioButton->isChecked()) { QFileInfo lNewFolderInfo(mDestination.absoluteFilePath() + QDir::separator() + mUI->mNewFolderNameEdit->text()); if(lNewFolderInfo.exists()) { mMessageWidget->setText(xi18nc("@info message bar appearing on top", "The new name entered already exists, please enter a different one.")); mMessageWidget->setMessageType(KMessageWidget::Error); mMessageWidget->animatedShow(); return; } else { mFolderToCreate = QFileInfo(mDestination.absoluteFilePath() + QDir::separator() + mUI->mNewFolderNameEdit->text()); mRestorationPath = mFolderToCreate.absoluteFilePath(); if(!mSourceInfo.mPathInRepo.endsWith(QDir::separator())) { mSourceInfo.mPathInRepo.append(QDir::separator()); } } } startRestoring(); } void RestoreDialog::startRestoring() { QString lSourcePath(QDir::separator()); lSourcePath.append(mSourceInfo.mBranchName); lSourcePath.append(QDir::separator()); QDateTime lCommitTime = QDateTime::fromTime_t(mSourceInfo.mCommitTime); lSourcePath.append(lCommitTime.toString(QStringLiteral("yyyy-MM-dd-hhmmss"))); lSourcePath.append(mSourceInfo.mPathInRepo); RestoreJob *lRestoreJob = new RestoreJob(mSourceInfo.mRepoPath, lSourcePath, mRestorationPath, mDirectoriesCount, mSourceSize, mFileSizes); if(mJobTracker == NULL) { mJobTracker = new KWidgetJobTracker(this); } mJobTracker->registerJob(lRestoreJob); QWidget *lProgressWidget = mJobTracker->widget(lRestoreJob); mUI->mRestoreProgressLayout->insertWidget(1, lProgressWidget); lProgressWidget->show(); connect(lRestoreJob, SIGNAL(result(KJob*)), SLOT(restoringCompleted(KJob*))); lRestoreJob->start(); mUI->mCloseButton->hide(); mUI->mStackedWidget->setCurrentIndex(3); } void RestoreDialog::restoringCompleted(KJob *pJob) { if(pJob->error() != 0) { mUI->mRestorationOutput->setPlainText(pJob->errorText()); mUI->mRestorationStackWidget->setCurrentIndex(1); mUI->mCloseButton->show(); } else { if(!mSourceInfo.mIsDirectory && mSourceFileName != mDestination.fileName()) { KIO::CopyJob *lFileMoveJob = KIO::move(QUrl::fromLocalFile(mRestorationPath + '/' + mSourceFileName), QUrl::fromLocalFile(mRestorationPath + '/' + mDestination.fileName()), KIO::HideProgressInfo); connect(lFileMoveJob, SIGNAL(result(KJob*)), SLOT(fileMoveCompleted(KJob*))); lFileMoveJob->start(); } else { moveFolder(); } } } void RestoreDialog::fileMoveCompleted(KJob *pJob) { if(pJob->error() != 0) { mUI->mRestorationOutput->setPlainText(pJob->errorText()); mUI->mRestorationStackWidget->setCurrentIndex(1); } else { moveFolder(); } } void RestoreDialog::folderMoveCompleted(KJob *pJob) { mUI->mCloseButton->show(); if(pJob->error() != 0) { mUI->mRestorationOutput->setPlainText(pJob->errorText()); mUI->mRestorationStackWidget->setCurrentIndex(1); } else { mUI->mRestorationStackWidget->setCurrentIndex(2); } } void RestoreDialog::createNewFolder() { bool lUserAccepted; QUrl lUrl = mDirSelector->url(); QString lNameSuggestion = xi18nc("default folder name when creating a new folder", "New Folder"); if(QFileInfo(lUrl.adjusted(QUrl::StripTrailingSlash).path() + '/' + lNameSuggestion).exists()) { lNameSuggestion = KIO::suggestName(lUrl, lNameSuggestion); } QString lSelectedName = QInputDialog::getText(this, xi18nc("@title:window", "New Folder" ), xi18nc("@label:textbox", "Create new folder in:\n%1", lUrl.path()), QLineEdit::Normal, lNameSuggestion, &lUserAccepted); if (!lUserAccepted) return; QUrl lPartialUrl(lUrl); const QStringList lDirectories = lSelectedName.split(QDir::separator(), QString::SkipEmptyParts); foreach(QString lSubDirectory, lDirectories) { QDir lDir(lPartialUrl.path()); if(lDir.exists(lSubDirectory)) { lPartialUrl = lPartialUrl.adjusted(QUrl::StripTrailingSlash); lPartialUrl.setPath(lPartialUrl.path() + '/' + (lSubDirectory)); KMessageBox::sorry(this, i18n("A folder named %1 already exists.", lPartialUrl.path())); return; } if(!lDir.mkdir(lSubDirectory)) { lPartialUrl = lPartialUrl.adjusted(QUrl::StripTrailingSlash); lPartialUrl.setPath(lPartialUrl.path() + '/' + (lSubDirectory)); KMessageBox::sorry(this, i18n("You do not have permission to create %1.", lPartialUrl.path())); return; } lPartialUrl = lPartialUrl.adjusted(QUrl::StripTrailingSlash); lPartialUrl.setPath(lPartialUrl.path() + '/' + (lSubDirectory)); } mDirSelector->expandToUrl(lPartialUrl); } void RestoreDialog::openDestinationFolder() { KRun::runUrl(QUrl::fromLocalFile(mSourceInfo.mIsDirectory ? mFolderToCreate.absoluteFilePath() : mDestination.absolutePath()), QStringLiteral("inode/directory"), NULL); } void RestoreDialog::moveFolder() { if(!mRestorationPath.endsWith(KUP_TMP_RESTORE_FOLDER)) { mUI->mRestorationStackWidget->setCurrentIndex(2); mUI->mCloseButton->show(); return; } KIO::CopyJob *lFolderMoveJob = KIO::moveAs(QUrl::fromLocalFile(mRestorationPath), QUrl::fromLocalFile(mRestorationPath.section(QDir::separator(), 0, -2)), KIO::Overwrite | KIO::HideProgressInfo); connect(lFolderMoveJob, SIGNAL(result(KJob*)), SLOT(folderMoveCompleted(KJob*))); mJobTracker->registerJob(lFolderMoveJob); QWidget *lProgressWidget = mJobTracker->widget(lFolderMoveJob); mUI->mRestoreProgressLayout->insertWidget(1, lProgressWidget); lProgressWidget->show(); lFolderMoveJob->start(); } kup-backup-0.7.1+dfsg/filedigger/restoredialog.h000066400000000000000000000062171322613417100216230ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #ifndef RESTOREDIALOG_H #define RESTOREDIALOG_H #include "versionlistmodel.h" #include #include #include namespace Ui { class RestoreDialog; } class DirSelector; class KFileWidget; class KMessageWidget; class KWidgetJobTracker; class QSignalMapper; class QTreeWidget; class RestoreDialog : public QDialog { Q_OBJECT public: explicit RestoreDialog(const BupSourceInfo &pPathInfo, QWidget *parent = 0); ~RestoreDialog(); protected: void changeEvent(QEvent *pEvent); protected slots: void setOriginalDestination(); void setCustomDestination(); void checkDestinationSelection(); void checkDestinationSelection2(); void startPrechecks(); void collectSourceListing(KIO::Job *pJob, const KIO::UDSEntryList &pEntryList); void sourceListingCompleted(KJob *pJob); void completePrechecks(); void fileOverwriteConfirmed(); void startRestoring(); void restoringCompleted(KJob *pJob); void fileMoveCompleted(KJob *pJob); void folderMoveCompleted(KJob *pJob); void createNewFolder(); void openDestinationFolder(); private: void checkForExistingFiles(const KIO::UDSEntryList &pEntryList); void moveFolder(); Ui::RestoreDialog *mUI; KFileWidget *mFileWidget; DirSelector *mDirSelector; QFileInfo mDestination; QFileInfo mFolderToCreate; QString mRestorationPath; // not neccesarily same as destination BupSourceInfo mSourceInfo; quint64 mDestinationSize; //size of files about to be overwritten quint64 mSourceSize; //size of files about to be read KMessageWidget *mMessageWidget; QSignalMapper *mSignalMapper; QString mSavedWorkingDirectory; QString mSourceFileName; QHash mFileSizes; int mDirectoriesCount; KWidgetJobTracker *mJobTracker; }; #endif // RESTOREDIALOG_H kup-backup-0.7.1+dfsg/filedigger/restoredialog.ui000066400000000000000000000415461322613417100220150ustar00rootroot00000000000000 RestoreDialog 0 0 600 400 Restore Guide 0 Qt::Horizontal 40 20 Qt::Vertical 20 40 Restore to original location Qt::Vertical QSizePolicy::Fixed 20 40 Choose where to restore Qt::Vertical 20 40 Qt::Horizontal 40 20 Qt::Horizontal 40 20 Back Next 75 true Restore the folder under a new name true Qt::Horizontal QSizePolicy::Fixed 20 20 Merge folders Qt::Horizontal QSizePolicy::Fixed 20 20 false The following files would be overwritten, please confirm that you wish to continue. true false Qt::Horizontal 40 20 Back Confirm 0 Qt::Vertical 20 40 Qt::Vertical 20 40 An error occured while restoring: true Qt::Vertical 20 149 Restoration completed successfully! Qt::AlignCenter Qt::Vertical QSizePolicy::Fixed 20 20 Qt::Horizontal 192 20 Open Destination Qt::Horizontal 192 20 Qt::Vertical 20 149 Qt::Horizontal 40 20 Close true mRestoreOriginalButton mRestoreCustomButton mDestNextButton mOverwriteBackButton mDestBackButton mFileConflictList mConfirmButton mRestorationOutput mCloseButton mCloseButton clicked() RestoreDialog accept() 590 390 236 199 mOverwriteRadioButton toggled(bool) mFileConflictList setEnabled(bool) 299 99 312 241 mOverwriteRadioButton toggled(bool) mConfirmOverwriteLabel setEnabled(bool) 299 99 312 122 mNewNameRadioButton toggled(bool) mNewFolderNameEdit setEnabled(bool) 299 45 312 72 kup-backup-0.7.1+dfsg/filedigger/restorejob.cpp000066400000000000000000000116451322613417100214720ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include #include #include #include "restorejob.h" #include #include #ifdef Q_OS_LINUX #include #endif RestoreJob::RestoreJob(const QString &pRepositoryPath, const QString &pSourcePath, const QString &pRestorationPath, int pTotalDirCount, quint64 pTotalFileSize, const QHash &pFileSizes) : KJob(), mRepositoryPath(pRepositoryPath), mSourcePath(pSourcePath), mRestorationPath(pRestorationPath), mTotalDirCount(pTotalDirCount), mTotalFileSize(pTotalFileSize), mFileSizes(pFileSizes) { setCapabilities(Killable); mRestoreProcess.setOutputChannelMode(KProcess::SeparateChannels); int lOffset = mSourcePath.endsWith(QDir::separator()) ? -2: -1; mSourceFileName = mSourcePath.section(QDir::separator(), lOffset, lOffset); } void RestoreJob::start() { setTotalAmount(Bytes, mTotalFileSize); setProcessedAmount(Bytes, 0); setTotalAmount(Files, mFileSizes.count()); setProcessedAmount(Files, 0); setTotalAmount(Directories, mTotalDirCount); setProcessedAmount(Directories, 0); setPercent(0); mRestoreProcess << QStringLiteral("bup"); mRestoreProcess << QStringLiteral("-d") << mRepositoryPath; mRestoreProcess << QStringLiteral("restore") << QStringLiteral("-vv"); mRestoreProcess << QStringLiteral("-C") << mRestorationPath; mRestoreProcess << mSourcePath; connect(&mRestoreProcess, SIGNAL(started()), SLOT(slotRestoringStarted())); connect(&mRestoreProcess, SIGNAL(finished(int,QProcess::ExitStatus)), SLOT(slotRestoringDone(int,QProcess::ExitStatus))); mRestoreProcess.start(); mTimerId = startTimer(100); } void RestoreJob::slotRestoringStarted() { makeNice(mRestoreProcess.pid()); } void RestoreJob::timerEvent(QTimerEvent *pTimerEvent) { Q_UNUSED(pTimerEvent) quint64 lProcessedDirectories = processedAmount(Directories); quint64 lProcessedFiles = processedAmount(Files); quint64 lProcessedBytes = processedAmount(Bytes); bool lDirWasUpdated = false; bool lFileWasUpdated = false; QString lLastFileName; while(mRestoreProcess.canReadLine()) { QString lFileName = QString::fromLocal8Bit(mRestoreProcess.readLine()).trimmed(); if(lFileName.count() == 0) { break; } if(lFileName.endsWith(QLatin1Char('/'))) { // it's a directory lProcessedDirectories++; lDirWasUpdated = true; } else { if(mSourcePath.endsWith(QDir::separator())) { lFileName.prepend(QDir::separator()); lFileName.prepend(mSourceFileName); } lProcessedBytes += mFileSizes.value(lFileName); lProcessedFiles++; lLastFileName = lFileName; lFileWasUpdated = true; } } if(lDirWasUpdated) { setProcessedAmount(Directories, lProcessedDirectories); } if(lFileWasUpdated) { emit description(this, xi18nc("progress report, current operation", "Restoring"), qMakePair(xi18nc("progress report, label", "File:"), lLastFileName)); setProcessedAmount(Files, lProcessedFiles); setProcessedAmount(Bytes, lProcessedBytes); // this will also call emitPercent() } } void RestoreJob::slotRestoringDone(int pExitCode, QProcess::ExitStatus pExitStatus) { killTimer(mTimerId); if(pExitStatus != QProcess::NormalExit || pExitCode != 0) { setError(1); setErrorText(QString::fromUtf8(mRestoreProcess.readAllStandardError())); } emitResult(); } void RestoreJob::makeNice(int pPid) { #ifdef Q_OS_LINUX // See linux documentation Documentation/block/ioprio.txt for details of the syscall syscall(SYS_ioprio_set, 1, pPid, 3 << 13 | 7); #endif setpriority(PRIO_PROCESS, pPid, 19); } kup-backup-0.7.1+dfsg/filedigger/restorejob.h000066400000000000000000000044761322613417100211430ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #ifndef RESTOREJOB_H #define RESTOREJOB_H #include "versionlistmodel.h" #include #include class RestoreJob : public KJob { Q_OBJECT public: explicit RestoreJob(const QString &pRepositoryPath, const QString &pSourcePath, const QString &pRestorationPath, int pTotalDirCount, quint64 pTotalFileSize, const QHash &pFileSizes); virtual void start(); protected slots: void slotRestoringStarted(); void slotRestoringDone(int pExitCode, QProcess::ExitStatus pExitStatus); protected: virtual void timerEvent(QTimerEvent *pTimerEvent); void makeNice(int pPid); void moveFolder(); KProcess mRestoreProcess; QString mRepositoryPath; QString mSourcePath; QString mRestorationPath; QString mSourceFileName; int mTotalDirCount; quint64 mTotalFileSize; const QHash &mFileSizes; int mTimerId; }; #endif // RESTOREJOB_H kup-backup-0.7.1+dfsg/filedigger/versionlistdelegate.cpp000066400000000000000000000270511322613417100233660ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include "versionlistdelegate.h" #include "versionlistmodel.h" #include #include #include #include #include #include #include #include #include #include #include #define cMargin 4 Button::Button(QString pText, QWidget *pParent) : QObject() // don't make it owned by pParent { mStyleOption.initFrom(pParent); mStyleOption.features = QStyleOptionButton::None; mStyleOption.state = QStyle::State_Enabled; mStyleOption.text = pText; const QSize lContentsSize = mStyleOption.fontMetrics.size(Qt::TextSingleLine, mStyleOption.text); mStyleOption.rect = QRect(QPoint(0, 0), QApplication::style()->sizeFromContents(QStyle::CT_PushButton, &mStyleOption, lContentsSize)); mPushed = false; mParent = pParent; } void Button::setPosition(const QPoint &pTopRight) { mStyleOption.rect.moveTopRight(pTopRight); } void Button::paint(QPainter *pPainter, float pOpacity) { pPainter->setOpacity(pOpacity); QApplication::style()->drawControl(QStyle::CE_PushButton, &mStyleOption, pPainter); } bool Button::event(QEvent *pEvent) { QMouseEvent *lMouseEvent = static_cast(pEvent); bool lActivated = false; switch(pEvent->type()) { case QEvent::MouseMove: if(mStyleOption.rect.contains(lMouseEvent->pos())) { if(!(mStyleOption.state & QStyle::State_MouseOver)) { mStyleOption.state |= QStyle::State_MouseOver; if(mPushed) { mStyleOption.state |= QStyle::State_Sunken; mStyleOption.state &= ~QStyle::State_Raised; } mParent->update(mStyleOption.rect); } } else { if(mStyleOption.state & QStyle::State_MouseOver) { mStyleOption.state &= ~QStyle::State_MouseOver; if(mPushed) { mStyleOption.state &= ~QStyle::State_Sunken; mStyleOption.state |= QStyle::State_Raised; } mParent->update(mStyleOption.rect); } } break; case QEvent::MouseButtonPress: if(lMouseEvent->button() == Qt::LeftButton && !mPushed && (mStyleOption.state & QStyle::State_MouseOver)) { mPushed = true; mStyleOption.state |= QStyle::State_Sunken; mStyleOption.state &= ~QStyle::State_Raised; mParent->update(mStyleOption.rect); } break; case QEvent::MouseButtonRelease: if(lMouseEvent->button() == Qt::LeftButton) { if(mPushed && (mStyleOption.state & QStyle::State_MouseOver)) { lActivated = true; } mPushed = false; mStyleOption.state &= ~QStyle::State_Sunken; mStyleOption.state |= QStyle::State_Raised; mParent->update(mStyleOption.rect); } break; case QEvent::KeyPress: { QKeyEvent *lKeyEvent = static_cast(pEvent); if((mStyleOption.state & QStyle::State_HasFocus)) { if(lKeyEvent->key() == Qt::Key_Left || lKeyEvent->key() == Qt::Key_Right) { mStyleOption.state &= ~QStyle::State_HasFocus; emit focusChangeRequested(lKeyEvent->key() == Qt::Key_Right); mParent->update(mStyleOption.rect); } else if(lKeyEvent->key() == Qt::Key_Space || lKeyEvent->key() == Qt::Key_Return || lKeyEvent->key() == Qt::Key_Enter) { lActivated = true; } } } default: break; } return lActivated; } VersionItemAnimation::VersionItemAnimation(QWidget *pParent) : QParallelAnimationGroup(pParent) { mParent = pParent; mExtraHeight = 0; mOpacity = 0; mOpenButton = new Button(xi18nc("@action:button", "Open"), pParent); connect(mOpenButton, SIGNAL(focusChangeRequested(bool)), SLOT(changeFocus(bool)), Qt::QueuedConnection); mRestoreButton = new Button(xi18nc("@action:button", "Restore"), pParent); connect(mRestoreButton, SIGNAL(focusChangeRequested(bool)), SLOT(changeFocus(bool)), Qt::QueuedConnection); QPropertyAnimation *lHeightAnimation = new QPropertyAnimation(this, "extraHeight", this); lHeightAnimation->setStartValue(0.0); lHeightAnimation->setEndValue(1.0); lHeightAnimation->setDuration(300); lHeightAnimation->setEasingCurve(QEasingCurve::InOutBack); addAnimation(lHeightAnimation); QPropertyAnimation *lWidgetOpacityAnimation = new QPropertyAnimation(this, "opacity", this); lWidgetOpacityAnimation->setStartValue(0.0); lWidgetOpacityAnimation->setEndValue(1.0); lWidgetOpacityAnimation->setDuration(300); addAnimation(lWidgetOpacityAnimation); } void VersionItemAnimation::setExtraHeight(float pExtraHeight) { mExtraHeight = pExtraHeight; emit sizeChanged(mIndex); } void VersionItemAnimation::changeFocus(bool pForward) { Q_UNUSED(pForward) if(sender() == mOpenButton) { mRestoreButton->mStyleOption.state |= QStyle::State_HasFocus; mParent->update(mRestoreButton->mStyleOption.rect); } else if(sender() == mRestoreButton) { mOpenButton->mStyleOption.state |= QStyle::State_HasFocus; mParent->update(mOpenButton->mStyleOption.rect); } } void VersionItemAnimation::setFocus(bool pFocused) { if(!pFocused) { mOpenButton->mStyleOption.state &= ~QStyle::State_HasFocus; mRestoreButton->mStyleOption.state &= ~QStyle::State_HasFocus; } else { mOpenButton->mStyleOption.state |= QStyle::State_HasFocus; mRestoreButton->mStyleOption.state &= ~QStyle::State_HasFocus; } mParent->update(mOpenButton->mStyleOption.rect); mParent->update(mRestoreButton->mStyleOption.rect); } VersionListDelegate::VersionListDelegate(QAbstractItemView *pItemView, QObject *pParent) : QAbstractItemDelegate(pParent) { mView = pItemView; mModel = pItemView->model(); connect(pItemView->selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)), SLOT(updateCurrent(QModelIndex,QModelIndex))); connect(pItemView->model(), SIGNAL(modelReset()), SLOT(reset())); pItemView->viewport()->installEventFilter(this); //mouse events pItemView->installEventFilter(this); //keyboard events pItemView->viewport()->setMouseTracking(true); } VersionListDelegate::~VersionListDelegate() { } void VersionListDelegate::paint(QPainter *pPainter, const QStyleOptionViewItem &pOption, const QModelIndex &pIndex) const { QStyle * lStyle = QApplication::style(); lStyle->drawPrimitive(QStyle::PE_PanelItemViewItem, &pOption, pPainter); pPainter->save(); pPainter->setPen(pOption.palette.color(pOption.state & QStyle::State_Selected ? QPalette::HighlightedText: QPalette::Text)); QRect lMarginRect = pOption.rect.adjusted(cMargin, cMargin, -cMargin, -cMargin); QRect lSizeDisplayBounds; if(!pIndex.data(VersionIsDirectoryRole).toBool()) { QString lSizeText = KFormat().formatByteSize((double)pIndex.data(VersionSizeRole).toULongLong()); pPainter->drawText(lMarginRect, Qt::AlignRight | Qt::AlignTop, lSizeText, &lSizeDisplayBounds); } QString lDateText = pOption.fontMetrics.elidedText(pIndex.data().toString(), Qt::ElideRight, lMarginRect.width() - lSizeDisplayBounds.width()); pPainter->drawText(lMarginRect, Qt::AlignLeft | Qt::AlignTop, lDateText); pPainter->restore(); VersionItemAnimation *lAnimation = mActiveAnimations.value(pIndex); if(lAnimation != NULL) { pPainter->save(); pPainter->setClipRect(pOption.rect); lAnimation->mRestoreButton->setPosition(pOption.rect.topRight() + QPoint(-cMargin, pOption.fontMetrics.height() + 2*cMargin)); lAnimation->mRestoreButton->paint(pPainter, lAnimation->opacity()); lAnimation->mOpenButton->setPosition(lAnimation->mRestoreButton->mStyleOption.rect.topLeft() + QPoint(-cMargin , 0)); lAnimation->mOpenButton->paint(pPainter, lAnimation->opacity()); pPainter->restore(); } } QSize VersionListDelegate::sizeHint(const QStyleOptionViewItem &pOption, const QModelIndex &pIndex) const { int lExtraHeight = 0; int lExtraWidth = 0; VersionItemAnimation *lAnimation = mActiveAnimations.value(pIndex); if(lAnimation != NULL) { int lButtonHeight = lAnimation->mOpenButton->mStyleOption.rect.height(); lExtraHeight = lAnimation->extraHeight() * (lButtonHeight + cMargin); lExtraWidth = lAnimation->mOpenButton->mStyleOption.rect.width() + lAnimation->mRestoreButton->mStyleOption.rect.width(); } return QSize(lExtraWidth, cMargin*2 + pOption.fontMetrics.height() + lExtraHeight); } bool VersionListDelegate::eventFilter(QObject *pObject, QEvent *pEvent) { foreach (VersionItemAnimation *lAnimation, mActiveAnimations) { if(lAnimation->mOpenButton->event(pEvent)) { emit openRequested(lAnimation->mIndex); } if(lAnimation->mRestoreButton->event(pEvent)) { emit restoreRequested(lAnimation->mIndex); } } return QAbstractItemDelegate::eventFilter(pObject, pEvent); } void VersionListDelegate::updateCurrent(const QModelIndex &pCurrent, const QModelIndex &pPrevious) { if(pPrevious.isValid()) { VersionItemAnimation *lPrevAnim = mActiveAnimations.value(pPrevious); if(lPrevAnim != NULL) { lPrevAnim->setDirection(QAbstractAnimation::Backward); lPrevAnim->start(); lPrevAnim->setFocus(false); } } if(pCurrent.isValid()) { VersionItemAnimation *lCurAnim = mActiveAnimations.value(pCurrent); if(lCurAnim == NULL) { if(!mInactiveAnimations.isEmpty()) { lCurAnim = mInactiveAnimations.takeFirst(); } else { lCurAnim = new VersionItemAnimation(mView->viewport()); connect(lCurAnim, SIGNAL(sizeChanged(QModelIndex)), SIGNAL(sizeHintChanged(QModelIndex))); connect(lCurAnim, SIGNAL(finished()), SLOT(reclaimAnimation())); } lCurAnim->mIndex = pCurrent; mActiveAnimations.insert(pCurrent, lCurAnim); } lCurAnim->setDirection(QAbstractAnimation::Forward); lCurAnim->start(); lCurAnim->setFocus(true); } } void VersionListDelegate::reset() { mInactiveAnimations.append(mActiveAnimations.values()); mActiveAnimations.clear(); } void VersionListDelegate::reclaimAnimation() { VersionItemAnimation *lAnimation = static_cast(sender()); if(lAnimation->direction() == QAbstractAnimation::Backward) { mInactiveAnimations.append(lAnimation); foreach(VersionItemAnimation *lActiveAnimation, mActiveAnimations) { if(lActiveAnimation == lAnimation) { mActiveAnimations.remove(lAnimation->mIndex); break; } } } } kup-backup-0.7.1+dfsg/filedigger/versionlistdelegate.h000066400000000000000000000070261322613417100230330ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #ifndef VERSIONDELEGATE_H #define VERSIONDELEGATE_H #include #include #include class Button : public QObject { Q_OBJECT public: Button(QString pText, QWidget *pParent); bool mPushed; QStyleOptionButton mStyleOption; QWidget *mParent; void setPosition(const QPoint &pTopRight); void paint(QPainter *pPainter, float pOpacity); bool event(QEvent *pEvent); signals: void focusChangeRequested(bool pForward); }; class VersionItemAnimation : public QParallelAnimationGroup { Q_OBJECT Q_PROPERTY(float extraHeight READ extraHeight WRITE setExtraHeight) Q_PROPERTY(float opacity READ opacity WRITE setOpacity) public: VersionItemAnimation(QWidget *pParent); float extraHeight() {return mExtraHeight;} float opacity() {return mOpacity;} signals: void sizeChanged(const QModelIndex &pIndex); public slots: void setExtraHeight(float pExtraHeight); void setOpacity(float pOpacity) {mOpacity = pOpacity;} void changeFocus(bool pForward); void setFocus(bool pFocused); public: QPersistentModelIndex mIndex; float mExtraHeight; float mOpacity; Button *mOpenButton; Button *mRestoreButton; QWidget *mParent; }; class VersionListDelegate : public QAbstractItemDelegate { Q_OBJECT public: explicit VersionListDelegate(QAbstractItemView *pItemView, QObject *pParent = 0); ~VersionListDelegate(); virtual void paint(QPainter *pPainter, const QStyleOptionViewItem &pOption, const QModelIndex &pIndex) const; virtual QSize sizeHint(const QStyleOptionViewItem &pOption, const QModelIndex &pIndex) const; virtual bool eventFilter(QObject *pObject, QEvent *pEvent); signals: void openRequested(const QModelIndex &pIndex); void restoreRequested(const QModelIndex &pIndex); public slots: void updateCurrent(const QModelIndex &pCurrent, const QModelIndex &pPrevious); void reset(); void reclaimAnimation(); protected: void initialize(); QAbstractItemView *mView; QAbstractItemModel *mModel; QHash mActiveAnimations; QList mInactiveAnimations; }; #endif // VERSIONDELEGATE_H kup-backup-0.7.1+dfsg/filedigger/versionlistmodel.cpp000066400000000000000000000063541322613417100227170ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include "versionlistmodel.h" #include "vfshelpers.h" #include #include #include #include #include #include VersionListModel::VersionListModel(QObject *parent) : QAbstractListModel(parent) { mVersionList = NULL; } void VersionListModel::setNode(const MergedNode *pNode) { beginResetModel(); mNode = pNode; mVersionList = mNode->versionList(); endResetModel(); } int VersionListModel::rowCount(const QModelIndex &pParent) const { Q_UNUSED(pParent) if(mVersionList != NULL) { return mVersionList->count(); } return 0; } QVariant VersionListModel::data(const QModelIndex &pIndex, int pRole) const { if(!pIndex.isValid() || mVersionList == NULL) { return QVariant(); } QMimeDatabase db; KFormat lFormat; VersionData *lData = mVersionList->at(pIndex.row()); switch (pRole) { case Qt::DisplayRole: return lFormat.formatRelativeDateTime(QDateTime::fromTime_t(lData->mModifiedDate), QLocale::ShortFormat); case VersionBupUrlRole: { QUrl lUrl; mNode->getBupUrl(pIndex.row(), &lUrl); return lUrl; } case VersionMimeTypeRole: if(mNode->isDirectory()) { return QString(QStringLiteral("inode/directory")); } return db.mimeTypeForFile(mNode->objectName(), QMimeDatabase::MatchExtension).name(); case VersionSizeRole: return lData->size(); case VersionSourceInfoRole: { BupSourceInfo lSourceInfo; mNode->getBupUrl(pIndex.row(), &lSourceInfo.mBupKioPath, &lSourceInfo.mRepoPath, &lSourceInfo.mBranchName, &lSourceInfo.mCommitTime, &lSourceInfo.mPathInRepo); lSourceInfo.mIsDirectory = mNode->isDirectory(); lSourceInfo.mSize = lData->size(); return QVariant::fromValue(lSourceInfo); } case VersionIsDirectoryRole: return mNode->isDirectory(); default: return QVariant(); } } kup-backup-0.7.1+dfsg/filedigger/versionlistmodel.h000066400000000000000000000044631322613417100223630ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #ifndef VERSIONLISTMODEL_H #define VERSIONLISTMODEL_H #include #include "mergedvfs.h" struct BupSourceInfo { QUrl mBupKioPath; QString mRepoPath; QString mBranchName; QString mPathInRepo; quint64 mCommitTime; quint64 mSize; bool mIsDirectory; }; Q_DECLARE_METATYPE(BupSourceInfo) class VersionListModel : public QAbstractListModel { Q_OBJECT public: explicit VersionListModel(QObject *parent = 0); void setNode(const MergedNode *pNode); int rowCount(const QModelIndex &pParent) const; QVariant data(const QModelIndex &pIndex, int pRole) const; protected: const VersionList *mVersionList; const MergedNode *mNode; }; enum VersionDataRole { VersionBupUrlRole = Qt::UserRole + 1, // QUrl VersionMimeTypeRole, // QString VersionSizeRole, // quint64 VersionSourceInfoRole, // PathInfo VersionIsDirectoryRole // bool }; #endif // VERSIONLISTMODEL_H kup-backup-0.7.1+dfsg/icons/000077500000000000000000000000001322613417100156135ustar00rootroot00000000000000kup-backup-0.7.1+dfsg/icons/CMakeLists.txt000066400000000000000000000001451322613417100203530ustar00rootroot00000000000000ecm_install_icons(ICONS sc-apps-kup.svgz DESTINATION ${ICON_INSTALL_DIR} THEME hicolor ) kup-backup-0.7.1+dfsg/icons/sc-apps-kup.svgz000066400000000000000000000237551322613417100207050ustar00rootroot00000000000000|n[I{~R!_~B7pcn3-Ѷ&%Ѡ䴝_?kq%+13.T\8qۗwDχ~^\.Wwaw9qw|O?|n/~<O/?<|xOvO^bo7h/j??.߿9Re_5.>nTp{{wY˵%}x{{Wͻ?>]}ԫOQ| /CآqU{֒ԫ7_~=o _*L`wx8ooV5$廷_>ܽ{޶ae<) }wux{6r~г~ïX/5YǿZQ 8Aw|wg×^oWx :bi߾x+G]m)XӷiWJq_oT}oB1#{a}o~mnZ^er_s+W%ĮS}j~WY5Ϸ21qs7_F^?DTz\x-w?|UO{_< ?߿WߡkaXk ߭h+u+oJdդ!\K+In8#h>\Gh5Zn.> x^-ΥGCj![gvpG;$qmvG7[ /fGP1Zo)c!AsڹB|E%fWwp +w/IiaW?_>|~ڇ, &_)%oiTOX5Sߟ _[>3'cLOk݁?QGFۏҗ_Ux:֟i4?;qo#j_=/8p {p9@ /WSlGȐWJ0&jDoZyۧ?_^rZ=:w{x+Շ#=MǯgEO犍?փN3,1?W6WxWxi,s[W4Fo{;G|8Ǟx6tuy{J/p}sl䌥^?~Pqdg}{d>oo-cursdmaA C> kw%vF `.yܩBT?- K.Oau"C[= w+k߾d/1 tx.w'3|޾>蹿?jf>v 5_ NjwV_@_PBY!VƟ+qWaW`ٓ8 r?~#Rq1,>y Y^+e} wm߾~:C\EHu 1 -zAЩ)5*,uL LSElSGׄ(š/XM)X񫋤5ʓQƼ>3JK=(̹1(sԙ{*@180̠00PR/uʱcfe`uaF{^[E-tX;iyp^T68G)ؚ&E2IJ 1 bEJ)# 1膺R)UbAƧ״󑱮+z'k$$ezؓ&#pJS\ Z4G%QXL۫]2pU蚭$~3! NM`;<ר*fSS18X5?Lb&X.n:) p?^PZ*9@]7 ՆlZJS|u$;^CM~d(ћS(5pĜ^Yyx%a%Ҭ3Iǡ0z&MfZl(ַr[{ u.lNX!}- glim`u.eJ<K?L@4 ֨eurtDA$XKIղ2d?ǘ͓*JlBki=( ̠ e4 U5*H0 s}ֵh אypJg=Y**(hnugg,l](}"T5s8+jU8 YWXۅr5yaR %_͉'&G{5.| yHFCO+9Ԟ$ 6A\/6G!RAjVWp b%paP éH?*jn'9yħ@D}ic@ l6I:Aʬ9|~j4h gƥa,؜F4HĂ8wMEHBcDl-0~Ob: P[yTDc@pZAüC cT8ت +θt2rKaW t0P]v٭펚!Tsf< d5ja*WبZF(XL54u0NIX`feH L\TVܬ.tZš|ddIiգO5qLdo9 7 [ 6Clͦ|⦔yD,Zl>g A&9sUJW$ Rm6Ř 8'F= X@:,˹BA?V;bLv`$J8% n! aDv1[ &)E&:;iJ_X!dĆ`Ŷ(=Q 8{M~߂.b9k Bk@3QEYjn0첪~d*EπRDa9JvA$ęx 9/Hl A0E`x$iƑY@` \q10u$N`H;\|udȽ_.DqBBaKY)K֘XBG6Y?D($8pO#~D#ɢIz6}FQa@IJXC+ \,9[ը<Ȱ)f7 Gz# m$pb3C@8}U0M{'_qW`E4K~ ՉB❱wOo%}dD*y<1?S)3$9L' i1 as”ig1APPl!ˑ*ԕN%l]G$nFd,C#Vt_2j#8&gSH[bqԃRgI6! @TK&|R4hLnm7ŸV\U֜FVS:R wBaq4/ɑj3A l=s &3HdVlՈyT)2!6rL" oSU0LD g5!!77 4,1rΰ0jAb5`a- bb܅5P* 4M#'_VrᓽAEc5t_- BښO%Og΁& /{ QpaD*ؕ8fEUIB p]*šu`#i@Qmր/s;4= ooaL_![\ĕq=9Ӈ% %8NX:FvD+T}(ܣ!xci݈$!7#*W,j0ag4v det]з$Y<$?I>w%玚bIb)wbAқspaIkRG`aMmLJ\sh7BXoN2E*WCl[!LCbT(gȚMR#Z{ g=Cy=cLfY0E[6HQsZF@'rcƜdJ!{U)ڙ?9َ$N`l&}"avXs=۶[G"5|1B#VYvn(E0F2\{?##`ZgU{#qIN GL( =F`K1kKԁZ1H*id8pV=A/z6r6(vade`@F4c}X51AN(f(ْ+.R?o1%cQS-h -fj vf{ߡ4YkWש"+' Ona%$ԏͰ30+Mn$2MKB)4 qqY)Ywir3Ȉh@ RKi2mklޥgSpi8 f. 3g/l|HqnRҰVOx|0,I\bð[xD(]vX4K!DŽ>@=c9b9:o*F=i(y'r{,ƺHș}RRKssZu݄>X⮪RiAICWHEy8z9m4>4OäeJcdF-õD"+5qOTFe4Mwa@ H7A3vUMR,=YCp}Z'ǝ%Hiʫ;Hnl370J$W[d KFNȪ-j_34KR"9:,0Yb;AX9bF~.7,䵢ԧfP׌bFψĿ 6(f 'Ѧ[nT+I3"@(va\وr\8ܦ4$vv\夀vB2Us%Hj-X3_w)l83G( I*,B8ʯo B Fh3˜ӶvG;C*-.;a4Dς补WY 0 ,B>OWH]:_Y 3?uX>?#pcXMFĔ9kF4ЖǾbnpϭR#j:bo{RLV_SVxVQԑ[Tzzrs~1narYavn:yP"2I/`XoPu˱(%kAcJhnh;km 5[.GuH(>+/ϔɢl#={QaK 0T?=Tҏ#R A+@Zښ~A5N^]_:kQB爥E7UvuцhfHy7(K\{| ՠ)2=6kZdܹ1!%,>XZ$KyK-%4,[. uk2ZxCPlbr >I|< { ɣz`pbs\kJ_O٧X+N KUpEAx͉ԟm6s<:f&҃#l+HG$UQV&plSDG65wu_-g4bHij*U;AV3o@Y&3OLΠv3V .#bep0ns];;39m$cyW b`dp^Ry$Z8Y~;jr_25iiN'*]=WRk/KbxnrgZC0z3E3|3A&jN YPD( 5nx{4Jz@_?%D'ؽ|3;V = vޤ̉-u(+Ƴ/v-1CuzDZ2m[XOS:QF쀍uQ]]}T)j|;WTIڳ$/ic&[uP⏠c&TXL9jnNrvA۴%ڛ718yܰ%E)10q[y]ȭ®څGoF6x=d[kљ.2+aiܺxmFu5u'hXѲp}RJEs+dUMPe۹վ$xw^48Y m.};1/: lFBE .< ]-gL 0ju, v[xeKy"0Gj'̓p}{bT1)&)Z,$4bM(j1IJ͋x1Byh)2_s崳>f[Tӄ} TY5le?+03uKhTM#%^^u+xڶ ty kNEu/먭y}bEnQpB–:`K4p^"Okr$Mwၓ,C טՅcro(Oa^hOUŽu<}F P} Px^~<x:Ob=8xۋPty*M~)pqy%?Ӎt%ft5U4İ}%V' ue"JB=F![I6pXemSt)RF yU }uzD~]S༼h,mh1[d=T(+镯RE-*yCTHfy7&fKF+^oStyj )Ϛ&o8PV~G_NKl"kf__>B)Y[_6U{ xBQZqn\_sr>;_,b<>z([fJ |xGyLY9gٟV~zjA T[]7?QcheKoB Ð ?5YU=cJ &ëo |t{x}<Ё=>?l /~waz0py<w63 {įMtWkr7o/~8ߝ|[7~:]?)[xi :{wxչo^ͯ>~o:KXzl |} N8|89~Z~?gf_*vwjy#-͗Wl}bkpyօ%JL':Mv WyZuG4^/{z8U%=Q)wL* 7O0oq+J7Kn<`K Ȁdծ0 o|ͅf~`mtMBf`7x[yօ#O&, ;{`ڴ(nfť.$%񪳍nr)LiE}i`ڇ#:cnngY"v( 7ZzMz?/x_%gBTaJijFhm6ih#dBr<<NaF81۫ [6L¼W![}%&-ޛ/}7=?|b8Sekup-backup-0.7.1+dfsg/kcm/000077500000000000000000000000001322613417100152525ustar00rootroot00000000000000kup-backup-0.7.1+dfsg/kcm/CMakeLists.txt000066400000000000000000000015041322613417100200120ustar00rootroot00000000000000 include_directories("../settings") include_directories("../daemon") set(kcm_kup_SRCS backupplanwidget.cpp dirselector.cpp driveselection.cpp driveselectiondelegate.cpp folderselectionmodel.cpp kupkcm.cpp planstatuswidget.cpp kbuttongroup.cpp ../settings/backupplan.cpp ../settings/kupsettings.cpp ../settings/kuputils.cpp ) add_library(kcm_kup MODULE ${kcm_kup_SRCS}) #this is a library so it needs to enforce it's translation domain, not use the application's domain. add_definitions(-DTRANSLATION_DOMAIN="kup") target_link_libraries(kcm_kup Qt5::Core Qt5::DBus Qt5::Gui KF5::CoreAddons KF5::ConfigCore KF5::KIOCore KF5::KIOFileWidgets KF5::Solid KF5::I18n ) ########### install files ############### install(TARGETS kcm_kup DESTINATION ${PLUGIN_INSTALL_DIR}) install(FILES kcm_kup.desktop DESTINATION ${SERVICES_INSTALL_DIR}) kup-backup-0.7.1+dfsg/kcm/backupplanwidget.cpp000066400000000000000000001175101322613417100213070ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include "backupplanwidget.h" #include "backupplan.h" #include "folderselectionmodel.h" #include "dirselector.h" #include "driveselection.h" #include "kbuttongroup.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include class ScanFolderEvent : public QEvent { public: ScanFolderEvent(QString pPath) : QEvent(eventType) { mPath = pPath; } QString mPath; static const QEvent::Type eventType = (QEvent::Type)(QEvent::User + 1); }; FileScanner::FileScanner() { // create a timer that will call a slot to send the pending updates to UI, one second // after the last update comes in, just to minimize risk of showing incomplete // information to the user. mUnreadablesTimer = new QTimer(this); mUnreadablesTimer->setSingleShot(true); mUnreadablesTimer->setInterval(1000); connect(mUnreadablesTimer, &QTimer::timeout, this, &FileScanner::sendPendingUnreadables); mSymlinkTimer = new QTimer(this); mSymlinkTimer->setSingleShot(true); mSymlinkTimer->setInterval(1000); connect(mSymlinkTimer, &QTimer::timeout, this, &FileScanner::sendPendingSymlinks); } bool FileScanner::event(QEvent *pEvent) { if(pEvent->type() == ScanFolderEvent::eventType) { ScanFolderEvent *lEvent = (ScanFolderEvent *)pEvent; if(isPathIncluded(lEvent->mPath)) { scanFolder(lEvent->mPath); } return true; } return QObject::event(pEvent); } void FileScanner::includePath(QString pPath) { if(!mExcludedFolders.remove(pPath)) { mIncludedFolders += pPath; } checkPathForProblems(QFileInfo(pPath)); QMutableHashIterator i(mSymlinksNotOk); while(i.hasNext()) { i.next(); if(isPathIncluded(i.value())) { mSymlinksOk.insert(i.key(), i.value()); i.remove(); mSymlinkTimer->start(); } } } void FileScanner::excludePath(QString pPath) { if(!mIncludedFolders.remove(pPath)) { mExcludedFolders += pPath; } QString lPath = pPath + QStringLiteral("/"); QSet::iterator it = mUnreadableFiles.begin(); while(it != mUnreadableFiles.end()) { if(it->startsWith(lPath)) { mUnreadablesTimer->start(); it = mUnreadableFiles.erase(it); } else { ++it; } } it = mUnreadableFolders.begin(); while(it != mUnreadableFolders.end()) { if(it->startsWith(lPath) || *it == pPath) { mUnreadablesTimer->start(); it = mUnreadableFolders.erase(it); } else { ++it; } } QMutableHashIterator i(mSymlinksNotOk); while(i.hasNext()) { if(!isPathIncluded(i.next().key())) { i.remove(); mSymlinkTimer->start(); } } i = mSymlinksOk; while(i.hasNext()) { i.next(); if(!isPathIncluded(i.key())) { i.remove(); } else if(isSymlinkProblematic(i.value())) { mSymlinksNotOk.insert(i.key(), i.value()); mSymlinkTimer->start(); i.remove(); } } } void FileScanner::sendPendingUnreadables() { emit unreadablesChanged(QPair, QSet>(mUnreadableFolders, mUnreadableFiles)); } void FileScanner::sendPendingSymlinks() { emit symlinkProblemsChanged(mSymlinksNotOk); } bool FileScanner::isPathIncluded(const QString &pPath) { int lLongestInclude = 0; foreach(const QString &lPath, mIncludedFolders) { bool lMatches = pPath == lPath || pPath.startsWith(lPath + QStringLiteral("/")); if(lMatches && lPath.length() > lLongestInclude) { lLongestInclude = lPath.length(); } } int lLongestExclude = 0; foreach(const QString &lPath, mExcludedFolders) { bool lMatches = pPath == lPath || pPath.startsWith(lPath + QStringLiteral("/")); if(lMatches && lPath.length() > lLongestExclude) { lLongestExclude = lPath.length(); } } return lLongestInclude > lLongestExclude; } void FileScanner::checkPathForProblems(const QFileInfo &pFileInfo) { if(pFileInfo.isSymLink()) { if(isSymlinkProblematic(pFileInfo.symLinkTarget())) { mSymlinksNotOk.insert(pFileInfo.absoluteFilePath(), pFileInfo.symLinkTarget()); mSymlinkTimer->start(); } else { mSymlinksOk.insert(pFileInfo.absoluteFilePath(), pFileInfo.symLinkTarget()); } } else if(pFileInfo.isDir()) { QCoreApplication::postEvent(this, new ScanFolderEvent(pFileInfo.absoluteFilePath()), Qt::LowEventPriority); } else { if(!pFileInfo.isReadable()) { mUnreadableFiles += pFileInfo.absoluteFilePath(); mUnreadablesTimer->start(); } } } bool FileScanner::isSymlinkProblematic(const QString &pTarget) { QFileInfo lTargetInfo(pTarget); return lTargetInfo.exists() && !isPathIncluded(pTarget) && !pTarget.startsWith(QStringLiteral("/tmp/")) && !pTarget.startsWith(QStringLiteral("/var/tmp/")); } void FileScanner::scanFolder(const QString &pPath) { QDir lDir(pPath); if(!lDir.isReadable()) { mUnreadableFolders += pPath; mUnreadablesTimer->start(); } else { QFileInfoList lInfoList = lDir.entryInfoList(QDir::Files | QDir::Dirs | QDir::Hidden| QDir::NoDotAndDotDot); foreach(const QFileInfo &lFileInfo, lInfoList) { checkPathForProblems(lFileInfo); } } } ConfigIncludeDummy::ConfigIncludeDummy(FolderSelectionModel *pModel, FolderSelectionWidget *pParent) : QWidget(pParent), mModel(pModel), mTreeView(pParent) { connect(mModel, &FolderSelectionModel::includedPathAdded, this, &ConfigIncludeDummy::includeListChanged); connect(mModel, &FolderSelectionModel::includedPathRemoved, this, &ConfigIncludeDummy::includeListChanged); KConfigDialogManager::changedMap()->insert(QStringLiteral("ConfigIncludeDummy"), SIGNAL(includeListChanged())); } QStringList ConfigIncludeDummy::includeList() { QStringList lList = mModel->includedPaths().toList(); lList.sort(); return lList; } void ConfigIncludeDummy::setIncludeList(QStringList pIncludeList) { for(int i = 0; i < pIncludeList.count(); ++i) { if(!QFile::exists(pIncludeList.at(i))) { pIncludeList.removeAt(i--); } } mModel->setIncludedPaths(QSet::fromList(pIncludeList)); mTreeView->expandToShowSelections(); } ConfigExcludeDummy::ConfigExcludeDummy(FolderSelectionModel *pModel, FolderSelectionWidget *pParent) : QWidget(pParent), mModel(pModel), mTreeView(pParent) { connect(mModel, &FolderSelectionModel::excludedPathAdded, this, &ConfigExcludeDummy::excludeListChanged); connect(mModel, &FolderSelectionModel::excludedPathRemoved, this, &ConfigExcludeDummy::excludeListChanged); KConfigDialogManager::changedMap()->insert(QStringLiteral("ConfigExcludeDummy"), SIGNAL(excludeListChanged())); } QStringList ConfigExcludeDummy::excludeList() { QStringList lList = mModel->excludedPaths().toList(); lList.sort(); return lList; } void ConfigExcludeDummy::setExcludeList(QStringList pExcludeList) { for(int i = 0; i < pExcludeList.count(); ++i) { if(!QFile::exists(pExcludeList.at(i))) { pExcludeList.removeAt(i--); } } mModel->setExcludedPaths(QSet::fromList(pExcludeList)); mTreeView->expandToShowSelections(); } FolderSelectionWidget::FolderSelectionWidget(FolderSelectionModel *pModel, QWidget *pParent) : QWidget(pParent), mModel(pModel) { mMessageWidget = new KMessageWidget(this); mMessageWidget->setCloseButtonVisible(false); mMessageWidget->setWordWrap(true); mMessageWidget->hide(); mTreeView = new QTreeView(this); QVBoxLayout *lVLayout = new QVBoxLayout; lVLayout->addWidget(mMessageWidget); lVLayout->addWidget(mTreeView, 1); setLayout(lVLayout); connect(mMessageWidget, &KMessageWidget::hideAnimationFinished, this, &FolderSelectionWidget::updateMessage); mExcludeAction = new QAction(xi18nc("@action:button", "Exclude Folder"), this); connect(mExcludeAction, &QAction::triggered, this, &FolderSelectionWidget::executeExcludeAction); mIncludeAction = new QAction(xi18nc("@action:button", "Include Folder"), this); connect(mIncludeAction, &QAction::triggered, this, &FolderSelectionWidget::executeIncludeAction); mModel->setRootPath(QStringLiteral("/")); mModel->setParent(this); mTreeView->setAnimated(true); mTreeView->setModel(mModel); mTreeView->setHeaderHidden(true); // always expand the root, prevents problem with empty include&exclude lists. mTreeView->expand(mModel->index(QStringLiteral("/"))); ConfigIncludeDummy *lIncludeDummy = new ConfigIncludeDummy(mModel, this); lIncludeDummy->setObjectName(QStringLiteral("kcfg_Paths included")); ConfigExcludeDummy *lExcludeDummy = new ConfigExcludeDummy(mModel, this); lExcludeDummy->setObjectName(QStringLiteral("kcfg_Paths excluded")); qRegisterMetaType,QSet>>("QPair,QSet>"); qRegisterMetaType>("QHash"); mWorkerThread = new QThread(this); FileScanner *lFileScanner = new FileScanner; lFileScanner->moveToThread(mWorkerThread); connect(mWorkerThread, &QThread::finished, lFileScanner, &QObject::deleteLater); connect(mModel, &FolderSelectionModel::includedPathAdded, lFileScanner, &FileScanner::includePath); connect(mModel, &FolderSelectionModel::excludedPathRemoved, lFileScanner, &FileScanner::includePath); connect(mModel, &FolderSelectionModel::excludedPathAdded, lFileScanner, &FileScanner::excludePath); connect(mModel, &FolderSelectionModel::includedPathRemoved, lFileScanner, &FileScanner::excludePath); connect(lFileScanner, &FileScanner::unreadablesChanged, this, &FolderSelectionWidget::setUnreadables); connect(lFileScanner, &FileScanner::symlinkProblemsChanged, this, &FolderSelectionWidget::setSymlinks); mWorkerThread->start(); } FolderSelectionWidget::~FolderSelectionWidget() { mWorkerThread->quit(); mWorkerThread->wait(); } void FolderSelectionWidget::setHiddenFoldersVisible(bool pVisible) { mModel->setHiddenFoldersVisible(pVisible); // give the filesystem model some time to refresh after changing filtering // before expanding folders again. if(pVisible) { QTimer::singleShot(2000, this, SLOT(expandToShowSelections())); } } void FolderSelectionWidget::expandToShowSelections() { foreach(const QString& lFolder, mModel->includedPaths() + mModel->excludedPaths()) { QFileInfo lFolderInfo(lFolder); bool lShouldBeShown = true; while(lFolderInfo.absoluteFilePath() != QStringLiteral("/")) { if(lFolderInfo.isHidden() && !mModel->hiddenFoldersVisible()) { lShouldBeShown = false; // skip if this folder should not be shown. break; } lFolderInfo = lFolderInfo.absolutePath(); // move up one level } if(lShouldBeShown) { QModelIndex lIndex = mModel->index(lFolder).parent(); while(lIndex.isValid()) { mTreeView->expand(lIndex); lIndex = lIndex.parent(); } } } } void FolderSelectionWidget::setUnreadables(QPair, QSet > pUnreadables) { mUnreadableFolders = pUnreadables.first.toList(); mUnreadableFiles = pUnreadables.second.toList(); updateMessage(); } void FolderSelectionWidget::setSymlinks(QHash pSymlinks) { mSymlinkProblems = pSymlinks; updateMessage(); } void FolderSelectionWidget::updateMessage() { if(mMessageWidget->isVisible() || mMessageWidget->isHideAnimationRunning()) { mMessageWidget->animatedHide(); return; } mMessageWidget->removeAction(mExcludeAction); mMessageWidget->removeAction(mIncludeAction); if(!mUnreadableFolders.isEmpty()) { mMessageWidget->setMessageType(KMessageWidget::Error); mMessageWidget->setText(xi18nc("@info message bar appearing on top", "You don't have permission to read this folder: %1" "It cannot be included in the source selection. " "If it does not contain anything important to you, one possible " "solution is to exclude the folder from the backup plan.", mUnreadableFolders.first())); mExcludeActionPath = mUnreadableFolders.first(); mMessageWidget->addAction(mExcludeAction); mMessageWidget->animatedShow(); } else if(!mUnreadableFiles.isEmpty()) { mMessageWidget->setMessageType(KMessageWidget::Error); mMessageWidget->setText(xi18nc("@info message bar appearing on top", "You don't have permission to read this file: %1" "It cannot be included in the source selection. " "If the file is not important to you, one possible solution is " "to exclude the whole folder where the file is stored from the backup plan.", mUnreadableFiles.first())); QFileInfo lFileInfo = mUnreadableFiles.first(); mExcludeActionPath = lFileInfo.absolutePath(); mMessageWidget->addAction(mExcludeAction); mMessageWidget->animatedShow(); } else if(!mSymlinkProblems.isEmpty()) { mMessageWidget->setMessageType(KMessageWidget::Warning); QHashIterator i(mSymlinkProblems); i.next(); QFileInfo lFileInfo =i.value(); if(lFileInfo.isDir()) { mMessageWidget->setText(xi18nc("@info message bar appearing on top", "The symbolic link %1 is currently included but it points " "to a folder which is not: %2.That is probably not " "what you want. One solution is to simply include the target folder in the " "backup plan.", i.key(), i.value())); mIncludeActionPath = i.value(); } else { mMessageWidget->setText(xi18nc("@info message bar appearing on top", "The symbolic link %1 is currently included but it points " "to a file which is not: %2.That is probably not " "what you want. One solution is to simply include the folder where the file " "is stored in the backup plan.", i.key(), i.value())); mIncludeActionPath = lFileInfo.absolutePath(); } mMessageWidget->addAction(mIncludeAction); mMessageWidget->animatedShow(); } } void FolderSelectionWidget::executeExcludeAction() { mModel->excludePath(mExcludeActionPath); } void FolderSelectionWidget::executeIncludeAction() { mModel->includePath(mIncludeActionPath); } DirDialog::DirDialog(const QUrl &pRootDir, const QString &pStartSubDir, QWidget *pParent) : QDialog(pParent) { setWindowTitle(xi18nc("@title:window","Select Folder")); mDirSelector = new DirSelector(this); mDirSelector->setRootUrl(pRootDir); QUrl lSubUrl = QUrl::fromLocalFile(pRootDir.adjusted(QUrl::StripTrailingSlash).path() + '/' + pStartSubDir); mDirSelector->expandToUrl(lSubUrl); QDialogButtonBox *lButtonBox = new QDialogButtonBox(QDialogButtonBox::Ok|QDialogButtonBox::Cancel); connect(lButtonBox, SIGNAL(accepted()), this, SLOT(accept())); connect(lButtonBox, SIGNAL(rejected()), this, SLOT(reject())); QPushButton *lNewFolderButton = new QPushButton(xi18nc("@action:button", "New Folder...")); connect(lNewFolderButton, SIGNAL(clicked()), mDirSelector, SLOT(createNewFolder())); lButtonBox->addButton(lNewFolderButton, QDialogButtonBox::ActionRole); QPushButton *lOkButton = lButtonBox->button(QDialogButtonBox::Ok); lOkButton->setDefault(true); lOkButton->setShortcut(Qt::Key_Return); QVBoxLayout *lMainLayout = new QVBoxLayout; lMainLayout->addWidget(mDirSelector); lMainLayout->addWidget(lButtonBox); setLayout(lMainLayout); mDirSelector->setFocus(); } QUrl DirDialog::url() const { return mDirSelector->url(); } BackupPlanWidget::BackupPlanWidget(BackupPlan *pBackupPlan, const QString &pBupVersion, const QString &pRsyncVersion, bool pPar2Available) : QWidget(), mBackupPlan(pBackupPlan) { mDescriptionEdit = new KLineEdit; mDescriptionEdit->setObjectName(QStringLiteral("kcfg_Description")); mDescriptionEdit->setClearButtonShown(true); QLabel *lDescriptionLabel = new QLabel(xi18nc("@label", "Description:")); lDescriptionLabel->setBuddy(mDescriptionEdit); mConfigureButton = new QPushButton(QIcon::fromTheme(QStringLiteral("go-previous-view")), xi18nc("@action:button", "Back to overview")); connect(mConfigureButton, SIGNAL(clicked()), this, SIGNAL(requestOverviewReturn())); mConfigPages = new KPageWidget; mConfigPages->addPage(createTypePage(pBupVersion, pRsyncVersion)); mConfigPages->addPage(createSourcePage()); mConfigPages->addPage(createDestinationPage()); mConfigPages->addPage(createSchedulePage()); mConfigPages->addPage(createAdvancedPage(pPar2Available)); QHBoxLayout *lHLayout1 = new QHBoxLayout; lHLayout1->addWidget(mConfigureButton); lHLayout1->addStretch(); lHLayout1->addWidget(lDescriptionLabel); lHLayout1->addWidget(mDescriptionEdit); QVBoxLayout *lVLayout1 = new QVBoxLayout; lVLayout1->addLayout(lHLayout1); lVLayout1->addWidget(mConfigPages); lVLayout1->setSpacing(0); setLayout(lVLayout1); } void BackupPlanWidget::saveExtraData() { mDriveSelection->saveExtraData(); } KPageWidgetItem *BackupPlanWidget::createTypePage(const QString &pBupVersion, const QString &pRsyncVersion) { mVersionedRadio = new QRadioButton; QString lVersionedInfo = xi18nc("@info", "This type of backup is an archive. It contains both " "the latest version of your files and earlier backed up versions. " "Using this type of backup allows you to recover older versions of your " "files, or files which were deleted on your computer at a later time. " "The storage space needed is minimized by looking for common parts of " "your files between versions and only storing those parts once. " "Nevertheless, the backup archive will keep growing in size as time goes by." "Also important to know is that the files in the archive can not be accessed " "directly with a general file manager, a special program is needed."); QLabel *lVersionedInfoLabel = new QLabel(lVersionedInfo); lVersionedInfoLabel->setWordWrap(true); QWidget *lVersionedWidget = new QWidget; lVersionedWidget->setVisible(false); QObject::connect(mVersionedRadio, SIGNAL(toggled(bool)), lVersionedWidget, SLOT(setVisible(bool))); if(pBupVersion.isEmpty()) { mVersionedRadio->setText(xi18nc("@option:radio", "Versioned Backup (not available " "because bup is not installed)")); mVersionedRadio->setEnabled(false); lVersionedWidget->setEnabled(false); } else { mVersionedRadio->setText(xi18nc("@option:radio", "Versioned Backup (recommended)")); } mSyncedRadio = new QRadioButton; QString lSyncedInfo = xi18nc("@info", "This type of backup is a folder which is synchronized with your " "selected source folders. Taking a backup simply means making the " "backup destination contain an exact copy of your source folders as " "they are now and nothing else. If a file has been deleted in a " "source folder it will get deleted from the backup folder." "This type of backup can protect you against data loss due to a broken " "hard drive but it does not help you to recover from your own mistakes."); QLabel *lSyncedInfoLabel = new QLabel(lSyncedInfo); lSyncedInfoLabel->setWordWrap(true); QWidget *lSyncedWidget = new QWidget; lSyncedWidget->setVisible(false); QObject::connect(mSyncedRadio, SIGNAL(toggled(bool)), lSyncedWidget, SLOT(setVisible(bool))); if(pRsyncVersion.isEmpty()) { mSyncedRadio->setText(xi18nc("@option:radio", "Synchronized Backup (not available " "because rsync is not installed)")); mSyncedRadio->setEnabled(false); lSyncedWidget->setEnabled(false); } else { mSyncedRadio->setText(xi18nc("@option:radio", "Synchronized Backup")); } KButtonGroup *lButtonGroup = new KButtonGroup; lButtonGroup->setObjectName(QStringLiteral("kcfg_Backup type")); lButtonGroup->setFlat(true); int lIndentation = lButtonGroup->style()->pixelMetric(QStyle::PM_ExclusiveIndicatorWidth) + lButtonGroup->style()->pixelMetric(QStyle::PM_RadioButtonLabelSpacing); QGridLayout *lVersionedVLayout = new QGridLayout; lVersionedVLayout->setColumnMinimumWidth(0, lIndentation); lVersionedVLayout->setContentsMargins(0, 0, 0, 0); lVersionedVLayout->addWidget(lVersionedInfoLabel, 0, 1); lVersionedWidget->setLayout(lVersionedVLayout); QGridLayout *lSyncedVLayout = new QGridLayout; lSyncedVLayout->setColumnMinimumWidth(0, lIndentation); lSyncedVLayout->setContentsMargins(0, 0, 0, 0); lSyncedVLayout->addWidget(lSyncedInfoLabel, 0, 1); lSyncedWidget->setLayout(lSyncedVLayout); QVBoxLayout *lVLayout = new QVBoxLayout; lVLayout->addWidget(mVersionedRadio); lVLayout->addWidget(lVersionedWidget); lVLayout->addWidget(mSyncedRadio); lVLayout->addWidget(lSyncedWidget); lVLayout->addStretch(); lButtonGroup->setLayout(lVLayout); KPageWidgetItem *lPage = new KPageWidgetItem(lButtonGroup); lPage->setName(xi18nc("@title", "Backup Type")); lPage->setHeader(xi18nc("@label", "Select what type of backup you want")); lPage->setIcon(QIcon::fromTheme(QStringLiteral("folder-sync"))); return lPage; } KPageWidgetItem *BackupPlanWidget::createSourcePage() { mSourceSelectionWidget = new FolderSelectionWidget(new FolderSelectionModel(mBackupPlan->mShowHiddenFolders), this); KPageWidgetItem *lPage = new KPageWidgetItem(mSourceSelectionWidget); lPage->setName(xi18nc("@title", "Sources")); lPage->setHeader(xi18nc("@label", "Select which folders to include in backup")); lPage->setIcon(QIcon::fromTheme(QStringLiteral("cloud-upload"))); return lPage; } KPageWidgetItem *BackupPlanWidget::createDestinationPage() { KButtonGroup *lButtonGroup = new KButtonGroup(this); lButtonGroup->setObjectName(QStringLiteral("kcfg_Destination type")); lButtonGroup->setFlat(true); int lIndentation = lButtonGroup->style()->pixelMetric(QStyle::PM_ExclusiveIndicatorWidth) + lButtonGroup->style()->pixelMetric(QStyle::PM_RadioButtonLabelSpacing); QVBoxLayout *lVLayout = new QVBoxLayout; QRadioButton *lFileSystemRadio = new QRadioButton(xi18nc("@option:radio", "Filesystem Path")); QRadioButton *lDriveRadio = new QRadioButton(xi18nc("@option:radio", "External Storage")); QWidget *lFileSystemWidget = new QWidget; lFileSystemWidget->setVisible(false); QObject::connect(lFileSystemRadio, SIGNAL(toggled(bool)), lFileSystemWidget, SLOT(setVisible(bool))); QLabel *lFileSystemInfoLabel = new QLabel(xi18nc("@info", "You can use this option for backing up to a secondary " "internal harddrive, an external eSATA drive or networked " "storage. The requirement is just that you always mount " "it at the same path in the filesystem. The path " "specified here does not need to exist at all times, its " "existance will be monitored.")); lFileSystemInfoLabel->setWordWrap(true); QLabel *lFileSystemLabel = new QLabel(xi18nc("@label:textbox", "Destination Path for Backup:")); KUrlRequester *lFileSystemUrlEdit = new KUrlRequester; lFileSystemUrlEdit->setMode(KFile::Directory | KFile::LocalOnly); lFileSystemUrlEdit->setObjectName(QStringLiteral("kcfg_Filesystem destination path")); QGridLayout *lFileSystemVLayout = new QGridLayout; lFileSystemVLayout->setColumnMinimumWidth(0, lIndentation); lFileSystemVLayout->setContentsMargins(0, 0, 0, 0); lFileSystemVLayout->addWidget(lFileSystemInfoLabel, 0, 1); QHBoxLayout *lFileSystemHLayout = new QHBoxLayout; lFileSystemHLayout->addWidget(lFileSystemLabel); lFileSystemHLayout->addWidget(lFileSystemUrlEdit, 1); lFileSystemVLayout->addLayout(lFileSystemHLayout, 1, 1); lFileSystemWidget->setLayout(lFileSystemVLayout); QWidget *lDriveWidget = new QWidget; lDriveWidget->setVisible(false); QObject::connect(lDriveRadio, SIGNAL(toggled(bool)), lDriveWidget, SLOT(setVisible(bool))); QLabel *lDriveInfoLabel = new QLabel(xi18nc("@info", "Use this option if you want to backup your " "files on an external storage that can be plugged in " "to this computer, such as a USB hard drive or memory " "stick.")); lDriveInfoLabel->setWordWrap(true); mDriveSelection = new DriveSelection(mBackupPlan); mDriveSelection->setObjectName(QStringLiteral("kcfg_External drive UUID")); mDriveDestEdit = new KLineEdit; mDriveDestEdit->setObjectName(QStringLiteral("kcfg_External drive destination path")); mDriveDestEdit->setToolTip(xi18nc("@info:tooltip", "The specified folder will be created if it does not exist.")); mDriveDestEdit->setClearButtonShown(true); QLabel *lDriveDestLabel = new QLabel(xi18nc("@label:textbox", "Folder on Destination Drive:")); lDriveDestLabel->setToolTip(xi18nc("@info:tooltip", "The specified folder will be created if it does not exist.")); lDriveDestLabel->setBuddy(mDriveDestEdit); QPushButton *lDriveDestButton = new QPushButton; lDriveDestButton->setIcon(QIcon::fromTheme(QStringLiteral("document-open"))); int lButtonSize = lDriveDestButton->sizeHint().expandedTo(mDriveDestEdit->sizeHint()).height(); lDriveDestButton->setFixedSize(lButtonSize, lButtonSize); lDriveDestButton->setToolTip(xi18nc("@info:tooltip", "Open dialog to select a folder")); lDriveDestButton->setEnabled(false); connect(mDriveSelection, SIGNAL(selectedDriveIsAccessibleChanged(bool)), lDriveDestButton, SLOT(setEnabled(bool))); connect(lDriveDestButton, SIGNAL(clicked()), SLOT(openDriveDestDialog())); QWidget *lDriveDestWidget = new QWidget; lDriveDestWidget->setVisible(false); connect(mDriveSelection, SIGNAL(driveIsSelectedChanged(bool)), lDriveDestWidget, SLOT(setVisible(bool))); connect(mSyncedRadio, SIGNAL(toggled(bool)), mDriveSelection, SLOT(updateSyncWarning(bool))); QGridLayout *lDriveVLayout = new QGridLayout; lDriveVLayout->setColumnMinimumWidth(0, lIndentation); lDriveVLayout->setContentsMargins(0, 0, 0, 0); lDriveVLayout->addWidget(lDriveInfoLabel, 0, 1); lDriveVLayout->addWidget(mDriveSelection, 1, 1); QHBoxLayout *lDriveHLayout = new QHBoxLayout; lDriveHLayout->addWidget(lDriveDestLabel); lDriveHLayout->addWidget(mDriveDestEdit, 1); lDriveHLayout->addWidget(lDriveDestButton); lDriveDestWidget->setLayout(lDriveHLayout); lDriveVLayout->addWidget(lDriveDestWidget, 2, 1); lDriveWidget->setLayout(lDriveVLayout); lVLayout->addWidget(lFileSystemRadio); lVLayout->addWidget(lFileSystemWidget); lVLayout->addWidget(lDriveRadio); lVLayout->addWidget(lDriveWidget, 1); lVLayout->addStretch(); lButtonGroup->setLayout(lVLayout); KPageWidgetItem *lPage = new KPageWidgetItem(lButtonGroup); lPage->setName(xi18nc("@title", "Destination")); lPage->setHeader(xi18nc("@label", "Select the backup destination")); lPage->setIcon(QIcon::fromTheme(QStringLiteral("cloud-download"))); return lPage; } KPageWidgetItem *BackupPlanWidget::createSchedulePage() { QWidget *lTopWidget = new QWidget(this); QVBoxLayout *lTopLayout = new QVBoxLayout; KButtonGroup *lButtonGroup = new KButtonGroup; lButtonGroup->setObjectName(QStringLiteral("kcfg_Schedule type")); lButtonGroup->setFlat(true); int lIndentation = lButtonGroup->style()->pixelMetric(QStyle::PM_ExclusiveIndicatorWidth) + lButtonGroup->style()->pixelMetric(QStyle::PM_RadioButtonLabelSpacing); QVBoxLayout *lVLayout = new QVBoxLayout; lVLayout->setContentsMargins(0, 0, 0, 0); QRadioButton *lManualRadio = new QRadioButton(xi18nc("@option:radio", "Manual Activation")); QRadioButton *lIntervalRadio = new QRadioButton(xi18nc("@option:radio", "Interval")); QRadioButton *lUsageRadio = new QRadioButton(xi18nc("@option:radio", "Active Usage Time")); QLabel *lManualLabel = new QLabel(xi18nc("@info", "Backups are only taken when manually requested. " "This can be done by using the popup menu from " "the backup system tray icon.")); lManualLabel->setVisible(false); lManualLabel->setWordWrap(true); connect(lManualRadio, SIGNAL(toggled(bool)), lManualLabel, SLOT(setVisible(bool))); QGridLayout *lManualLayout = new QGridLayout; lManualLayout->setColumnMinimumWidth(0, lIndentation); lManualLayout->setContentsMargins(0, 0, 0, 0); lManualLayout->addWidget(lManualLabel, 0, 1); QWidget *lIntervalWidget = new QWidget; lIntervalWidget->setVisible(false); connect(lIntervalRadio, SIGNAL(toggled(bool)), lIntervalWidget, SLOT(setVisible(bool))); QLabel *lIntervalLabel = new QLabel(xi18nc("@info", "New backup will be triggered when backup " "destination becomes available and more than " "the configured interval has passed since the " "last backup was taken.")); lIntervalLabel->setWordWrap(true); QGridLayout *lIntervalVertLayout = new QGridLayout; lIntervalVertLayout->setColumnMinimumWidth(0, lIndentation); lIntervalVertLayout->setContentsMargins(0, 0, 0, 0); lIntervalVertLayout->addWidget(lIntervalLabel, 0, 1); QHBoxLayout *lIntervalLayout = new QHBoxLayout; lIntervalLayout->setContentsMargins(0, 0, 0, 0); QSpinBox *lIntervalSpinBox = new QSpinBox; lIntervalSpinBox->setObjectName(QStringLiteral("kcfg_Schedule interval")); lIntervalSpinBox->setMinimum(1); lIntervalLayout->addWidget(lIntervalSpinBox); KComboBox *lIntervalUnit = new KComboBox; lIntervalUnit->setObjectName(QStringLiteral("kcfg_Schedule interval unit")); lIntervalUnit->addItem(xi18nc("@item:inlistbox", "Minutes")); lIntervalUnit->addItem(xi18nc("@item:inlistbox", "Hours")); lIntervalUnit->addItem(xi18nc("@item:inlistbox", "Days")); lIntervalUnit->addItem(xi18nc("@item:inlistbox", "Weeks")); lIntervalLayout->addWidget(lIntervalUnit); lIntervalLayout->addStretch(); lIntervalVertLayout->addLayout(lIntervalLayout, 1, 1); lIntervalWidget->setLayout(lIntervalVertLayout); QWidget *lUsageWidget = new QWidget; lUsageWidget->setVisible(false); connect(lUsageRadio, SIGNAL(toggled(bool)), lUsageWidget, SLOT(setVisible(bool))); QLabel *lUsageLabel = new QLabel(xi18nc("@info", "New backup will be triggered when backup destination " "becomes available and you have been using your " "computer actively for more than the configured " "time limit since the last backup was taken.")); lUsageLabel->setWordWrap(true); QGridLayout *lUsageVertLayout = new QGridLayout; lUsageVertLayout->setColumnMinimumWidth(0, lIndentation); lUsageVertLayout->setContentsMargins(0, 0, 0, 0); lUsageVertLayout->addWidget(lUsageLabel, 0, 1); QHBoxLayout *lUsageLayout = new QHBoxLayout; lUsageLayout->setContentsMargins(0, 0, 0, 0); QSpinBox *lUsageSpinBox = new QSpinBox; lUsageSpinBox->setObjectName(QStringLiteral("kcfg_Usage limit")); lUsageSpinBox->setMinimum(1); lUsageLayout->addWidget(lUsageSpinBox); lUsageLayout->addWidget(new QLabel(xi18nc("@item:inlistbox", "Hours"))); lUsageLayout->addStretch(); lUsageVertLayout->addLayout(lUsageLayout, 1, 1); lUsageWidget->setLayout(lUsageVertLayout); QCheckBox *lAskFirstCheckBox = new QCheckBox(xi18nc("@option:check", "Ask for confirmation before taking backup")); lAskFirstCheckBox->setObjectName(QStringLiteral("kcfg_Ask first")); connect(lManualRadio, SIGNAL(toggled(bool)), lAskFirstCheckBox, SLOT(setHidden(bool))); lVLayout->addWidget(lManualRadio); lVLayout->addLayout(lManualLayout); lVLayout->addWidget(lIntervalRadio); lVLayout->addWidget(lIntervalWidget); lVLayout->addWidget(lUsageRadio); lVLayout->addWidget(lUsageWidget); lButtonGroup->setLayout(lVLayout); lTopLayout->addWidget(lButtonGroup); lTopLayout->addSpacing(lAskFirstCheckBox->fontMetrics().height()); lTopLayout->addWidget(lAskFirstCheckBox); lTopLayout->addStretch(); lTopWidget->setLayout(lTopLayout); KPageWidgetItem *lPage = new KPageWidgetItem(lTopWidget); lPage->setName(xi18nc("@title", "Schedule")); lPage->setHeader(xi18nc("@label", "Specify the backup schedule")); lPage->setIcon(QIcon::fromTheme(QStringLiteral("view-calendar"))); return lPage; } KPageWidgetItem *BackupPlanWidget::createAdvancedPage(bool pPar2Available) { QWidget *lAdvancedWidget = new QWidget(this); QVBoxLayout *lAdvancedLayout = new QVBoxLayout; int lIndentation = lAdvancedWidget->style()->pixelMetric(QStyle::PM_IndicatorWidth) + lAdvancedWidget->style()->pixelMetric(QStyle::PM_CheckBoxLabelSpacing); QCheckBox *lShowHiddenCheckBox = new QCheckBox(xi18nc("@option:check", "Show hidden folders in source selection")); lShowHiddenCheckBox->setObjectName(QStringLiteral("kcfg_Show hidden folders")); connect(lShowHiddenCheckBox, SIGNAL(toggled(bool)), mSourceSelectionWidget, SLOT(setHiddenFoldersVisible(bool))); QLabel *lShowHiddenLabel = new QLabel(xi18nc("@info", "This makes it possible to explicitly include or " "exclude hidden folders in the backup source " "selection. Hidden folders have a name that starts " "with a dot. They are typically located in your home " "folder and are used to store settings and temporary " "files for your applications.")); lShowHiddenLabel->setWordWrap(true); QGridLayout *lShowHiddenLayout = new QGridLayout; lShowHiddenLayout->setContentsMargins(0, 0, 0, 0); lShowHiddenLayout->setColumnMinimumWidth(0, lIndentation); lShowHiddenLayout->addWidget(lShowHiddenLabel, 0, 1); QWidget *lRecoveryWidget = new QWidget; lRecoveryWidget->setVisible(false); QCheckBox *lRecoveryCheckBox = new QCheckBox; lRecoveryCheckBox->setObjectName(QStringLiteral("kcfg_Generate recovery info")); QLabel *lRecoveryLabel = new QLabel(xi18nc("@info", "This will make your backups use around 10% more storage " "space and saving backups will take slightly longer time. In " "return it will be possible to recover from a partially corrupted " "backup.")); lRecoveryLabel->setWordWrap(true); if(pPar2Available) { lRecoveryCheckBox->setText(xi18nc("@option:check", "Generate recovery information")); } else { lRecoveryCheckBox->setText(xi18nc("@option:check", "Generate recovery information (not available " "because par2 is not installed)")); lRecoveryCheckBox->setEnabled(false); lRecoveryLabel->setEnabled(false); } QGridLayout *lRecoveryLayout = new QGridLayout; lRecoveryLayout->setContentsMargins(0, 0, 0, 0); lRecoveryLayout->setSpacing(0); lRecoveryLayout->setColumnMinimumWidth(0, lIndentation); lRecoveryLayout->addWidget(lRecoveryCheckBox,0, 0, 1, 2); lRecoveryLayout->addWidget(lRecoveryLabel, 1, 1); lRecoveryWidget->setLayout(lRecoveryLayout); connect(mVersionedRadio, SIGNAL(toggled(bool)), lRecoveryWidget, SLOT(setVisible(bool))); QWidget *lVerificationWidget = new QWidget; lVerificationWidget->setVisible(false); QCheckBox *lVerificationCheckBox = new QCheckBox(xi18nc("@option:check", "Verify integrity of backups")); lVerificationCheckBox->setObjectName(QStringLiteral("kcfg_Check backups")); QLabel *lVerificationLabel = new QLabel(xi18nc("@info", "Checks the whole backup archive for corruption " "every time you save new data. Saving backups will take a " "little bit longer time but it allows you to catch corruption " "problems sooner than at the time you need to use a backup, " "at that time it could be too late.")); lVerificationLabel->setWordWrap(true); QGridLayout *lVerificationLayout = new QGridLayout; lVerificationLayout->setContentsMargins(0, 0, 0, 0); lVerificationLayout->setSpacing(0); lVerificationLayout->setColumnMinimumWidth(0, lIndentation); lVerificationLayout->addWidget(lVerificationCheckBox,0, 0, 1, 2); lVerificationLayout->addWidget(lVerificationLabel, 1, 1); lVerificationWidget->setLayout(lVerificationLayout); connect(mVersionedRadio, SIGNAL(toggled(bool)), lVerificationWidget, SLOT(setVisible(bool))); lAdvancedLayout->addWidget(lShowHiddenCheckBox); lAdvancedLayout->addLayout(lShowHiddenLayout); lAdvancedLayout->addWidget(lVerificationWidget); lAdvancedLayout->addWidget(lRecoveryWidget); lAdvancedLayout->addStretch(); lAdvancedWidget->setLayout(lAdvancedLayout); KPageWidgetItem *lPage = new KPageWidgetItem(lAdvancedWidget); lPage->setName(xi18nc("@title", "Advanced")); lPage->setHeader(xi18nc("@label", "Extra options for advanced users")); lPage->setIcon(QIcon::fromTheme(QStringLiteral("preferences-other"))); return lPage; } void BackupPlanWidget::openDriveDestDialog() { QString lMountPoint = mDriveSelection->mountPathOfSelectedDrive(); QString lSelectedPath; DirDialog lDirDialog(QUrl::fromLocalFile(lMountPoint), mDriveDestEdit->text(), this); if(lDirDialog.exec() == QDialog::Accepted) { lSelectedPath = lDirDialog.url().path(); lSelectedPath.remove(0, lMountPoint.length()); while(lSelectedPath.startsWith(QLatin1Char('/'))) { lSelectedPath.remove(0, 1); } mDriveDestEdit->setText(lSelectedPath); } } kup-backup-0.7.1+dfsg/kcm/backupplanwidget.h000066400000000000000000000126001322613417100207460ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #ifndef BACKUPPLANWIDGET_H #define BACKUPPLANWIDGET_H #include #include #include class BackupPlan; class DirSelector; class DriveSelection; class FolderSelectionModel; class KLineEdit; class KMessageWidget; class KPageWidget; class KPageWidgetItem; class QAction; class QFileInfo; class QPushButton; class QRadioButton; class QThread; class QTimer; class QTreeView; class FileScanner : public QObject { Q_OBJECT public: FileScanner(); bool event(QEvent *pEvent) Q_DECL_OVERRIDE; public slots: void includePath(QString pPath); void excludePath(QString pPath); signals: void unreadablesChanged(QPair, QSet>); void symlinkProblemsChanged(QHash); protected slots: void sendPendingUnreadables(); void sendPendingSymlinks(); protected: bool isPathIncluded(const QString &pPath); void checkPathForProblems(const QFileInfo &pFileInfo); bool isSymlinkProblematic(const QString &pTarget); void scanFolder(const QString &pPath); QSet mIncludedFolders; QSet mExcludedFolders; QSet mUnreadableFolders; QSet mUnreadableFiles; QTimer *mUnreadablesTimer; QHash mSymlinksNotOk; QHash mSymlinksOk; QTimer *mSymlinkTimer; }; class FolderSelectionWidget : public QWidget { Q_OBJECT public: FolderSelectionWidget(FolderSelectionModel *pModel, QWidget *pParent = 0); virtual ~FolderSelectionWidget(); public slots: void setHiddenFoldersVisible(bool pVisible); void expandToShowSelections(); void setUnreadables(QPair, QSet> pUnreadables); void setSymlinks(QHash pSymlinks); void updateMessage(); void executeExcludeAction(); void executeIncludeAction(); protected: QTreeView *mTreeView; FolderSelectionModel *mModel; KMessageWidget *mMessageWidget; QThread *mWorkerThread; QStringList mUnreadableFolders; QStringList mUnreadableFiles; QString mExcludeActionPath; QAction *mExcludeAction; QHash mSymlinkProblems; QString mIncludeActionPath; QAction *mIncludeAction; }; class ConfigIncludeDummy : public QWidget { Q_OBJECT signals: void includeListChanged(); public: Q_PROPERTY(QStringList includeList READ includeList WRITE setIncludeList USER true) ConfigIncludeDummy(FolderSelectionModel *pModel, FolderSelectionWidget *pParent); QStringList includeList(); void setIncludeList(QStringList pIncludeList); FolderSelectionModel *mModel; FolderSelectionWidget *mTreeView; }; class ConfigExcludeDummy : public QWidget { Q_OBJECT signals: void excludeListChanged(); public: Q_PROPERTY(QStringList excludeList READ excludeList WRITE setExcludeList USER true) ConfigExcludeDummy(FolderSelectionModel *pModel, FolderSelectionWidget *pParent); QStringList excludeList(); void setExcludeList(QStringList pExcludeList); FolderSelectionModel *mModel; FolderSelectionWidget *mTreeView; }; class DirDialog: public QDialog { Q_OBJECT public: explicit DirDialog(const QUrl &pRootDir, const QString &pStartSubDir, QWidget *pParent = NULL); QUrl url() const; private: DirSelector *mDirSelector; }; class BackupPlanWidget : public QWidget { Q_OBJECT public: BackupPlanWidget(BackupPlan *pBackupPlan, const QString &pBupVersion, const QString &pRsyncVersion, bool pPar2Available); void saveExtraData(); KPageWidgetItem *createTypePage(const QString &pBupVersion, const QString &pRsyncVersion); KPageWidgetItem *createSourcePage(); KPageWidgetItem *createDestinationPage(); KPageWidgetItem *createSchedulePage(); KPageWidgetItem *createAdvancedPage(bool pPar2Available); KLineEdit *mDescriptionEdit; QPushButton *mConfigureButton; KPageWidget *mConfigPages; BackupPlan *mBackupPlan; DriveSelection *mDriveSelection; KLineEdit *mDriveDestEdit; QRadioButton *mVersionedRadio; QRadioButton *mSyncedRadio; FolderSelectionWidget *mSourceSelectionWidget; protected slots: void openDriveDestDialog(); signals: void requestOverviewReturn(); }; #endif // BACKUPPLANWIDGET_H kup-backup-0.7.1+dfsg/kcm/dirselector.cpp000066400000000000000000000101311322613417100202710ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include "dirselector.h" #include #include #include #include #include #include DirSelector::DirSelector(QWidget *pParent) : QTreeView(pParent) { mDirModel = new KDirModel(this); mDirModel->dirLister()->setDirOnlyMode(true); setModel(mDirModel); for (int i = 1; i < mDirModel->columnCount(); ++i) { hideColumn(i); } setHeaderHidden(true); connect(mDirModel, SIGNAL(expand(QModelIndex)), SLOT(expand(QModelIndex))); connect(mDirModel, SIGNAL(expand(QModelIndex)), SLOT(selectEntry(QModelIndex))); } QUrl DirSelector::url() const { const KFileItem lFileItem = mDirModel->itemForIndex(currentIndex()); return !lFileItem.isNull() ? lFileItem.url() : QUrl(); } void DirSelector::createNewFolder() { bool lUserAccepted; QString lNameSuggestion = xi18nc("default folder name when creating a new folder", "New Folder"); if(QFileInfo(url().adjusted(QUrl::StripTrailingSlash).path() + '/' + lNameSuggestion).exists()) { lNameSuggestion = KIO::suggestName(url(), lNameSuggestion); } QString lSelectedName = QInputDialog::getText(this, xi18nc("@title:window", "New Folder" ), xi18nc("@label:textbox", "Create new folder in:\n%1", url().path()), QLineEdit::Normal, lNameSuggestion, &lUserAccepted); if (!lUserAccepted) return; QUrl lPartialUrl(url()); const QStringList lDirectories = lSelectedName.split(QLatin1Char('/'), QString::SkipEmptyParts); foreach(QString lSubDirectory, lDirectories) { QDir lDir(lPartialUrl.path()); if(lDir.exists(lSubDirectory)) { lPartialUrl = lPartialUrl.adjusted(QUrl::StripTrailingSlash); lPartialUrl.setPath(lPartialUrl.path() + '/' + (lSubDirectory)); KMessageBox::sorry(this, i18n("A folder named %1 already exists.", lPartialUrl.path())); return; } if(!lDir.mkdir(lSubDirectory)) { lPartialUrl = lPartialUrl.adjusted(QUrl::StripTrailingSlash); lPartialUrl.setPath(lPartialUrl.path() + '/' + (lSubDirectory)); KMessageBox::sorry(this, i18n("You do not have permission to create %1.", lPartialUrl.path())); return; } lPartialUrl = lPartialUrl.adjusted(QUrl::StripTrailingSlash); lPartialUrl.setPath(lPartialUrl.path() + '/' + (lSubDirectory)); } mDirModel->expandToUrl(lPartialUrl); } void DirSelector::selectEntry(QModelIndex pIndex) { selectionModel()->clearSelection(); selectionModel()->setCurrentIndex(pIndex, QItemSelectionModel::SelectCurrent); scrollTo(pIndex); } void DirSelector::expandToUrl(const QUrl &pUrl) { mDirModel->expandToUrl(pUrl); } void DirSelector::setRootUrl(const QUrl &pUrl) { mDirModel->dirLister()->openUrl(pUrl); } kup-backup-0.7.1+dfsg/kcm/dirselector.h000066400000000000000000000035451322613417100177510ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #ifndef DIRSELECTOR_H #define DIRSELECTOR_H #include class KDirModel; class DirSelector : public QTreeView { Q_OBJECT public: explicit DirSelector(QWidget *pParent = 0); QUrl url() const; signals: public slots: void createNewFolder(); void selectEntry(QModelIndex pIndex); void expandToUrl(const QUrl &pUrl); void setRootUrl(const QUrl &pUrl); private: KDirModel *mDirModel; }; #endif // DIRSELECTOR_H kup-backup-0.7.1+dfsg/kcm/driveselection.cpp000066400000000000000000000323361322613417100210040ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include "driveselection.h" #include "driveselectiondelegate.h" #include "backupplan.h" #include #include #include #include #include #include #include #include #include #include #include #include #include bool deviceLessThan(const Solid::Device &a, const Solid::Device &b) { return a.udi() < b.udi(); } DriveSelection::DriveSelection(BackupPlan *pBackupPlan, QWidget *parent) : QListView(parent), mBackupPlan(pBackupPlan), mSelectedAndAccessible(false), mSyncedBackupType(false) { KConfigDialogManager::changedMap()->insert(QStringLiteral("DriveSelection"), SIGNAL(selectedDriveChanged(QString))); mDrivesModel = new QStandardItemModel(this); setModel(mDrivesModel); setItemDelegate(new DriveSelectionDelegate(this)); setSelectionMode(QAbstractItemView::SingleSelection); setWordWrap(true); if(!mBackupPlan->mExternalUUID.isEmpty()) { QStandardItem *lItem = new QStandardItem(); lItem->setEditable(false); lItem->setData(QString(), DriveSelection::UDI); lItem->setData(mBackupPlan->mExternalUUID, DriveSelection::UUID); lItem->setData(0, DriveSelection::UsedSpace); lItem->setData(mBackupPlan->mExternalPartitionNumber, DriveSelection::PartitionNumber); lItem->setData(mBackupPlan->mExternalPartitionsOnDrive, DriveSelection::PartitionsOnDrive); lItem->setData(mBackupPlan->mExternalDeviceDescription, DriveSelection::DeviceDescription); lItem->setData(mBackupPlan->mExternalVolumeCapacity, DriveSelection::TotalSpace); lItem->setData(mBackupPlan->mExternalVolumeLabel, DriveSelection::Label); mDrivesModel->appendRow(lItem); } QList lDeviceList = Solid::Device::listFromType(Solid::DeviceInterface::StorageDrive); foreach (const Solid::Device &lDevice, lDeviceList) { deviceAdded(lDevice.udi()); } connect(Solid::DeviceNotifier::instance(), SIGNAL(deviceAdded(QString)), SLOT(deviceAdded(QString))); connect(Solid::DeviceNotifier::instance(), SIGNAL(deviceRemoved(QString)), SLOT(deviceRemoved(QString))); connect(selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), this, SLOT(updateSelection(QItemSelection,QItemSelection))); } QString DriveSelection::mountPathOfSelectedDrive() const { if(mSelectedAndAccessible) { QStandardItem *lItem; findItem(DriveSelection::UUID, mSelectedUuid, &lItem); if(lItem != NULL) { Solid::Device lDevice(lItem->data(DriveSelection::UDI).toString()); Solid::StorageAccess *lAccess = lDevice.as(); if(lAccess) { return lAccess->filePath(); } } } return QString(); } void DriveSelection::deviceAdded(const QString &pUdi) { Solid::Device lDevice(pUdi); if(!lDevice.is()) { return; } Solid::StorageDrive *lDrive = lDevice.as(); if(!lDrive->isHotpluggable() && !lDrive->isRemovable()) { return; } if(mDrivesToAdd.contains(pUdi)) { return; } mDrivesToAdd.append(pUdi); QTimer::singleShot(2000, this, SLOT(delayedDeviceAdded())); } void DriveSelection::delayedDeviceAdded() { if(mDrivesToAdd.isEmpty()) { return; } Solid::Device lParentDevice(mDrivesToAdd.takeFirst()); QList lDeviceList = Solid::Device::listFromType(Solid::DeviceInterface::StorageVolume, lParentDevice.udi()); // check for when there is no partitioning scheme, then the drive is also the storage volume if(lParentDevice.is()) { lDeviceList.append(lParentDevice); } // filter out some volumes that should not be visible QList lVolumeDeviceList; foreach(Solid::Device lVolumeDevice, lDeviceList) { Solid::StorageVolume *lVolume = lVolumeDevice.as(); if(lVolume && !lVolume->isIgnored() && ( lVolume->usage() == Solid::StorageVolume::FileSystem || lVolume->usage() == Solid::StorageVolume::Encrypted)) { lVolumeDeviceList.append(lVolumeDevice); } } // simplest attempt at getting the same partition numbering every time a device is plugged in qSort(lVolumeDeviceList.begin(), lVolumeDeviceList.end(), deviceLessThan); int lPartitionNumber = 1; foreach(Solid::Device lVolumeDevice, lVolumeDeviceList) { Solid::StorageVolume *lVolume = lVolumeDevice.as(); QString lUuid = lVolume->uuid(); if(lUuid.isEmpty()) { //seems to happen for vfat partitions lUuid += lParentDevice.description(); lUuid += QStringLiteral("|"); lUuid += lVolume->label(); } QStandardItem *lItem; bool lNeedsToBeAdded = false; findItem(DriveSelection::UUID, lUuid, &lItem); if(lItem == NULL) { lItem = new QStandardItem(); lItem->setEditable(false); lItem->setData(lUuid, DriveSelection::UUID); lItem->setData(0, DriveSelection::TotalSpace); lItem->setData(0, DriveSelection::UsedSpace); lNeedsToBeAdded = true; } lItem->setData(lParentDevice.description(), DriveSelection::DeviceDescription); lItem->setData(lVolume->label(), DriveSelection::Label); lItem->setData(lVolumeDevice.udi(), DriveSelection::UDI); lItem->setData(lPartitionNumber, DriveSelection::PartitionNumber); lItem->setData(lVolumeDeviceList.count(), DriveSelection::PartitionsOnDrive); lItem->setData(lVolume->fsType(), DriveSelection::FileSystem); lItem->setData(mSyncedBackupType && (lVolume->fsType() == QStringLiteral("vfat") || lVolume->fsType() == QStringLiteral("ntfs")), DriveSelection::PermissionLossWarning); lItem->setData(mSyncedBackupType && lVolume->fsType() == QStringLiteral("vfat"), DriveSelection::SymlinkLossWarning); Solid::StorageAccess *lAccess = lVolumeDevice.as(); connect(lAccess, SIGNAL(accessibilityChanged(bool,QString)), SLOT(accessabilityChanged(bool,QString))); if(!lAccess->isAccessible()) { lAccess->setup(); } else { KDiskFreeSpaceInfo lInfo = KDiskFreeSpaceInfo::freeSpaceInfo(lAccess->filePath()); if(lInfo.isValid()) { lItem->setData(lInfo.size(), DriveSelection::TotalSpace); lItem->setData(lInfo.used(), DriveSelection::UsedSpace); } if(lUuid == mSelectedUuid) { // Selected volume was just added, could not have been accessible before. mSelectedAndAccessible = true; emit selectedDriveIsAccessibleChanged(true); } } if(lNeedsToBeAdded) { mDrivesModel->appendRow(lItem); if(mDrivesModel->rowCount() == 1) { selectionModel()->select(mDrivesModel->index(0, 0), QItemSelectionModel::ClearAndSelect); } } lPartitionNumber++; } } void DriveSelection::deviceRemoved(const QString &pUdi) { QStandardItem *lItem; int lRow = findItem(DriveSelection::UDI, pUdi, &lItem); if(lRow >= 0) { QString lUuid = lItem->data(DriveSelection::UUID).toString(); if(lUuid == mBackupPlan->mExternalUUID) { // let the selected and saved item stay in the list // just clear the UDI so that it will be shown as disconnected. lItem->setData(QString(), DriveSelection::UDI); } else { mDrivesModel->removeRow(lRow); } if(lUuid == mSelectedUuid && mSelectedAndAccessible) { mSelectedAndAccessible = false; emit selectedDriveIsAccessibleChanged(false); } } } void DriveSelection::accessabilityChanged(bool pAccessible, const QString &pUdi) { QStandardItem *lItem; findItem(DriveSelection::UDI, pUdi, &lItem); if(lItem != NULL) { if(pAccessible) { Solid::Device lDevice(pUdi); Solid::StorageAccess *lAccess = lDevice.as(); if(lAccess) { KDiskFreeSpaceInfo lInfo = KDiskFreeSpaceInfo::freeSpaceInfo(lAccess->filePath()); if(lInfo.isValid()) { lItem->setData(lInfo.size(), DriveSelection::TotalSpace); lItem->setData(lInfo.used(), DriveSelection::UsedSpace); } } } bool lSelectedAndAccessible = (lItem->data(DriveSelection::UUID).toString() == mSelectedUuid && pAccessible); if(lSelectedAndAccessible != mSelectedAndAccessible) { mSelectedAndAccessible = lSelectedAndAccessible; emit selectedDriveIsAccessibleChanged(lSelectedAndAccessible); } } } void DriveSelection::updateSelection(const QItemSelection &pSelected, const QItemSelection &pDeselected) { Q_UNUSED(pDeselected) if(!pSelected.indexes().isEmpty()) { QModelIndex lIndex = pSelected.indexes().first(); if(mSelectedUuid.isEmpty()) { emit driveIsSelectedChanged(true); } mSelectedUuid = lIndex.data(DriveSelection::UUID).toString(); emit selectedDriveChanged(mSelectedUuid); // check if the newly selected volume is accessible, compare to previous selection bool lIsAccessible = false; QString lUdiOfSelected = lIndex.data(DriveSelection::UDI).toString(); if(!lUdiOfSelected.isEmpty()) { Solid::Device lDevice(lUdiOfSelected); Solid::StorageAccess *lAccess = lDevice.as(); if(lAccess != NULL) { lIsAccessible = lAccess->isAccessible(); } } if(mSelectedAndAccessible != lIsAccessible) { mSelectedAndAccessible = lIsAccessible; emit selectedDriveIsAccessibleChanged(mSelectedAndAccessible); } } else { mSelectedUuid.clear(); emit selectedDriveChanged(mSelectedUuid); emit driveIsSelectedChanged(false); mSelectedAndAccessible = false; emit selectedDriveIsAccessibleChanged(false); } } void DriveSelection::paintEvent(QPaintEvent *pPaintEvent) { QListView::paintEvent(pPaintEvent); if(mDrivesModel->rowCount() == 0) { QPainter lPainter(viewport()); style()->drawItemText(&lPainter, rect(), Qt::AlignCenter, palette(), false, xi18nc("@label Only shown if no drives are detected", "Plug in the external " "storage you wish to use, then select it in this list."), QPalette::Text); } } void DriveSelection::setSelectedDrive(const QString &pUuid) { if(pUuid == mSelectedUuid) { return; } else if(pUuid.isEmpty()) { clearSelection(); } else { QStandardItem *lItem; findItem(DriveSelection::UUID, pUuid, &lItem); if(lItem != NULL) { setCurrentIndex(mDrivesModel->indexFromItem(lItem)); } } } void DriveSelection::saveExtraData() { QStandardItem *lItem; findItem(DriveSelection::UUID, mSelectedUuid, &lItem); if(lItem != NULL) { mBackupPlan->mExternalDeviceDescription = lItem->data(DriveSelection::DeviceDescription).toString(); mBackupPlan->mExternalPartitionNumber = lItem->data(DriveSelection::PartitionNumber).toInt(); mBackupPlan->mExternalPartitionsOnDrive = lItem->data(DriveSelection::PartitionsOnDrive).toInt(); mBackupPlan->mExternalVolumeCapacity = lItem->data(DriveSelection::TotalSpace).toULongLong(); mBackupPlan->mExternalVolumeLabel = lItem->data(DriveSelection::Label).toString(); } } void DriveSelection::updateSyncWarning(bool pSyncBackupSelected) { mSyncedBackupType = pSyncBackupSelected; for(int i = 0; i < mDrivesModel->rowCount(); ++i) { QString lFsType = mDrivesModel->item(i)->data(DriveSelection::FileSystem).toString(); mDrivesModel->item(i)->setData(mSyncedBackupType && (lFsType == QStringLiteral("vfat") || lFsType == QStringLiteral("ntfs")), DriveSelection::PermissionLossWarning); mDrivesModel->item(i)->setData(mSyncedBackupType && lFsType == QStringLiteral("vfat"), DriveSelection::SymlinkLossWarning); } } int DriveSelection::findItem(const DriveSelection::DataType pField, const QString &pSearchString, QStandardItem **pReturnedItem) const { for(int lRow = 0; lRow < mDrivesModel->rowCount(); ++lRow) { QStandardItem *lItem = mDrivesModel->item(lRow); if(lItem->data(pField).toString() == pSearchString) { if(pReturnedItem != NULL) { *pReturnedItem = lItem; } return lRow; } } if(pReturnedItem != NULL) { *pReturnedItem = NULL; } return -1; } kup-backup-0.7.1+dfsg/kcm/driveselection.h000066400000000000000000000066471322613417100204570ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #ifndef DRIVESELECTION_H #define DRIVESELECTION_H #include #include class QStandardItem; class QStandardItemModel; class BackupPlan; class DriveSelection : public QListView { Q_OBJECT Q_PROPERTY(QString selectedDrive READ selectedDrive WRITE setSelectedDrive NOTIFY selectedDriveChanged USER true) Q_PROPERTY(bool driveIsSelected READ driveIsSelected NOTIFY driveIsSelectedChanged) Q_PROPERTY(bool selectedDriveIsAccessible READ selectedDriveIsAccessible NOTIFY selectedDriveIsAccessibleChanged) public: enum DataType { UUID = Qt::UserRole + 1, UDI, TotalSpace, UsedSpace, Label, DeviceDescription, PartitionNumber, PartitionsOnDrive, FileSystem, PermissionLossWarning, SymlinkLossWarning }; public: DriveSelection(BackupPlan *pBackupPlan, QWidget *parent=0); QString selectedDrive() const {return mSelectedUuid;} bool driveIsSelected() const {return !mSelectedUuid.isEmpty();} bool selectedDriveIsAccessible() const {return mSelectedAndAccessible;} QString mountPathOfSelectedDrive() const; public slots: void setSelectedDrive(const QString &pUuid); void saveExtraData(); void updateSyncWarning(bool pSyncBackupSelected); signals: void selectedDriveChanged(const QString &pSelectedDrive); void driveIsSelectedChanged(bool pDriveIsSelected); void selectedDriveIsAccessibleChanged(bool pDriveIsSelectedAndAccessible); protected slots: void deviceAdded(const QString &pUdi); void delayedDeviceAdded(); void deviceRemoved(const QString &pUdi); void accessabilityChanged(bool pAccessible, const QString &pUdi); void updateSelection(const QItemSelection &pSelected, const QItemSelection &pDeselected); protected: virtual void paintEvent(QPaintEvent *pPaintEvent); int findItem(const DataType pField, const QString &pSearchString, QStandardItem **pReturnedItem = NULL) const; QStandardItemModel *mDrivesModel; QString mSelectedUuid; BackupPlan *mBackupPlan; QStringList mDrivesToAdd; bool mSelectedAndAccessible; bool mSyncedBackupType; }; #endif kup-backup-0.7.1+dfsg/kcm/driveselectiondelegate.cpp000066400000000000000000000201641322613417100224730ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include "backupplan.h" #include "driveselectiondelegate.h" #include "driveselection.h" #include #include #include #include #include #include #include #include static const int cMargin = 6; DriveSelectionDelegate::DriveSelectionDelegate(QListView *pParent) : QStyledItemDelegate(pParent), mListView(pParent) { mCapacityBar = new KCapacityBar(KCapacityBar::DrawTextInline); } void DriveSelectionDelegate::paint(QPainter* pPainter, const QStyleOptionViewItem& pOption, const QModelIndex& pIndex) const { pPainter->save(); pPainter->setRenderHint(QPainter::Antialiasing); QApplication::style()->drawPrimitive(QStyle::PE_PanelItemViewItem, &pOption, pPainter); KIO::filesize_t lTotalSize = pIndex.data(DriveSelection::TotalSpace).value(); KIO::filesize_t lUsedSize = pIndex.data(DriveSelection::UsedSpace).value(); bool lIsDisconnected = pIndex.data(DriveSelection::UDI).toString().isEmpty(); if(lTotalSize == 0 || lIsDisconnected) { mCapacityBar->setValue(0); } else { mCapacityBar->setValue((lUsedSize * 100) / lTotalSize); } mCapacityBar->drawCapacityBar(pPainter, pOption.rect.adjusted(cMargin, cMargin+QApplication::fontMetrics().height()+cMargin, -cMargin, 4*cMargin + QApplication::fontMetrics().height() - pOption.rect.height())); if (pOption.state & QStyle::State_Selected) pPainter->setPen(pOption.palette.color(QPalette::HighlightedText)); else pPainter->setPen(pOption.palette.color(QPalette::Text)); KFormat lFormat; QString lDisplayLabel, lPartitionLabel, lDisconnectedLabel; int lTextEnd = pOption.rect.right() - cMargin; if(lIsDisconnected) { lDisconnectedLabel = xi18nc("@item:inlistbox this text is added if selected drive is disconnected", " (disconnected)"); } else { lDisconnectedLabel = QString(); QString lFreeSpace = xi18nc("@label %1 is amount of free storage space of hard drive","%1 free", lFormat.formatByteSize(lTotalSize - lUsedSize)); int lTextWidth = QApplication::fontMetrics().width(lFreeSpace); lTextEnd -= lTextWidth + cMargin; pPainter->drawText(pOption.rect.topRight() + QPoint(-cMargin - lTextWidth, cMargin+QApplication::fontMetrics().height()), lFreeSpace); } QString lDeviceDescription = pIndex.data(DriveSelection::DeviceDescription).toString(); QString lLabel = pIndex.data(DriveSelection::Label).toString(); int lPartitionNumber = pIndex.data(DriveSelection::PartitionNumber).toInt(); if(lLabel.isEmpty() || lLabel == lDeviceDescription) { if(pIndex.data(DriveSelection::PartitionsOnDrive).toInt() > 1) { lPartitionLabel = xi18nc("@item:inlistbox used for unnamed filesystems, more than one filesystem on device. %1 is partition number, %2 is device description, %3 is either empty or the \" (disconnected)\" text", "Partition %1 on %2%3", lPartitionNumber, lDeviceDescription, lDisconnectedLabel); } else { lPartitionLabel = xi18nc("@item:inlistbox used when there is only one unnamed filesystem on device. %1 is device description, %2 is either empty or the \" (disconnected)\" text", "%1%2", lDeviceDescription, lDisconnectedLabel); } } else { lPartitionLabel = xi18nc("@item:inlistbox %1 is filesystem label, %2 is the device description, %3 is either empty or the \" (disconnected)\" text", "%1 on %2%3", lLabel, lDeviceDescription, lDisconnectedLabel); } if(lTotalSize == 0) { lDisplayLabel = lPartitionLabel; } else { lDisplayLabel = xi18nc("@item:inlistbox %1 is drive(partition) label, %2 is storage capacity", "%1: %2 total capacity", lPartitionLabel, lFormat.formatByteSize(lTotalSize)); } lDisplayLabel = QApplication::fontMetrics().elidedText(lDisplayLabel, Qt::ElideMiddle, lTextEnd - pOption.rect.left() - cMargin); pPainter->drawText(pOption.rect.topLeft() + QPoint(cMargin, cMargin+QApplication::fontMetrics().height()), lDisplayLabel); int lIconSize = 48; QRect lWarningRect = warningRect(pOption.rect.adjusted(lIconSize + cMargin, 0, 0, 0), pIndex); if(!lWarningRect.isEmpty()) { QIcon lIcon = QIcon::fromTheme(QStringLiteral("dialog-warning")); lIcon.paint(pPainter, lWarningRect.left() - cMargin - lIconSize, lWarningRect.top(), lIconSize, lIconSize); pPainter->drawText(lWarningRect, Qt::AlignVCenter | Qt::TextWordWrap, warningText(pIndex)); } pPainter->restore(); } QSize DriveSelectionDelegate::sizeHint(const QStyleOptionViewItem& pOption, const QModelIndex& pIndex) const { Q_UNUSED(pOption) QSize lSize; lSize.setWidth(cMargin*2 + QApplication::fontMetrics().width(pIndex.data().toString())); lSize.setHeight(cMargin*5 + QApplication::fontMetrics().height()); int lIconSize = 48; QRect lWarningRect = warningRect(mListView->rect().adjusted(lIconSize + cMargin, 0, 0, 0), pIndex); if(!lWarningRect.isEmpty()) { lSize.setHeight(lSize.height() + 2*cMargin + lWarningRect.height()); } return lSize; } QRect DriveSelectionDelegate::warningRect(const QRect &pRect, const QModelIndex &pIndex) const { QRect lTextLocation = pRect.adjusted(cMargin, 5*cMargin + QApplication::fontMetrics().height(), -cMargin, -cMargin); QString lWarningText = warningText(pIndex); if(lWarningText.isEmpty()) { return QRect(); } QRect lTextBoundary = QApplication::fontMetrics().boundingRect(lTextLocation, Qt::TextWordWrap, lWarningText); int lIconSize = 48; if(lTextBoundary.height() < lIconSize) { lTextBoundary.setHeight(lIconSize); } return lTextBoundary; } QString DriveSelectionDelegate::warningText(const QModelIndex &pIndex) const { bool lPermissionWarning = pIndex.data(DriveSelection::PermissionLossWarning).toBool(); bool lSymlinkWarning = pIndex.data(DriveSelection::SymlinkLossWarning).toBool(); if(lPermissionWarning && lSymlinkWarning) { return xi18nc("@item:inlistbox", "Warning: Symbolic links and file permissions can not be saved " "to this file system. File permissions only matters if there is more than one " "user of this computer or if you are backing up executable program files."); } else if(lPermissionWarning) { return xi18nc("@item:inlistbox", "Warning: File permissions can not be saved to this file " "system. File permissions only matters if there is more than one " "user of this computer or if you are backing up executable program files."); } return QString(); } kup-backup-0.7.1+dfsg/kcm/driveselectiondelegate.h000066400000000000000000000041451322613417100221410ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #ifndef DRIVESELECTIONDELEGATE_H #define DRIVESELECTIONDELEGATE_H #include class QListView; class KCapacityBar; class DriveSelectionDelegate : public QStyledItemDelegate { public: DriveSelectionDelegate(QListView *pParent); virtual void paint(QPainter* pPainter, const QStyleOptionViewItem& pOption, const QModelIndex& pIndex) const; virtual QSize sizeHint(const QStyleOptionViewItem& pOption, const QModelIndex& pIndex) const; private: QRect warningRect(const QRect &pRect, const QModelIndex &pIndex) const; QString warningText(const QModelIndex &pIndex) const; KCapacityBar *mCapacityBar; QListView *mListView; }; #endif // DRIVESELECTIONDELEGATE_H kup-backup-0.7.1+dfsg/kcm/folderselectionmodel.cpp000066400000000000000000000215061322613417100221640ustar00rootroot00000000000000/* This file is part of the KDE Project Copyright (c) 2008 Sebastian Trueg Based on CollectionSetup.cpp from the Amarok project (C) 2003 Scott Wheeler (C) 2004 Max Howell (C) 2004 Mark Kretschmann (C) 2008 Seb Ruiz (C) 2008-2009 Sebastian Trueg (C) 2012 Simon Persson This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License version 2 as published by the Free Software Foundation. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "folderselectionmodel.h" #include "kuputils.h" #include #include #include #include #include #include #include namespace { bool setContainsSubdir(QSet pSet, const QString &pParentDir) { // we need the trailing slash to be able to use the startsWith() function to check for parent dirs. QString lPathWithSlash = pParentDir; ensureTrailingSlash(lPathWithSlash); foreach(QString lTestedPath, pSet) { if(lTestedPath.startsWith(lPathWithSlash)) { return true; } } return false; } } FolderSelectionModel::FolderSelectionModel(bool pHiddenFoldersVisible, QObject *pParent) : QFileSystemModel(pParent) { setHiddenFoldersVisible(pHiddenFoldersVisible); } Qt::ItemFlags FolderSelectionModel::flags(const QModelIndex &pIndex) const { Qt::ItemFlags lFlags = QFileSystemModel::flags(pIndex); lFlags |= Qt::ItemIsUserCheckable; return lFlags; } QVariant FolderSelectionModel::data(const QModelIndex& pIndex, int pRole) const { if(!pIndex.isValid() || pIndex.column() != 0) { return QFileSystemModel::data(pIndex, pRole); } const QString lPath = filePath(pIndex); const InclusionState lState = inclusionState(lPath); switch(pRole) { case Qt::CheckStateRole: { switch(lState) { case StateIncluded: case StateIncludeInherited: if(setContainsSubdir(mExcludedPaths, lPath)) { return Qt::PartiallyChecked; } return Qt::Checked; default: return Qt::Unchecked; } } case IncludeStateRole: return inclusionState(pIndex); case Qt::ForegroundRole: { switch(lState) { case StateIncluded: case StateIncludeInherited: return QVariant::fromValue(QPalette().brush(QPalette::Active, QPalette::Text)); default: if(setContainsSubdir(mIncludedPaths, lPath)) { return QVariant::fromValue(QPalette().brush( QPalette::Active, QPalette::Text)); } return QVariant::fromValue(QPalette().brush( QPalette::Disabled, QPalette::Text)); } } case Qt::ToolTipRole: { switch(lState) { case StateIncluded: case StateIncludeInherited: if(setContainsSubdir(mExcludedPaths, lPath)) { return xi18nc("@info:tooltip %1 is the path of the folder in a listview", "%1will be included in the backup, except " "for unchecked subfolders", filePath(pIndex)); } return xi18nc("@info:tooltip %1 is the path of the folder in a listview", "%1will be included in the backup", filePath(pIndex)); default: if(setContainsSubdir(mIncludedPaths, lPath)) { return xi18nc("@info:tooltip %1 is the path of the folder in a listview", "%1 will not be included " "in the backup but contains folders that will", filePath(pIndex)); } return xi18nc("@info:tooltip %1 is the path of the folder in a listview", "%1 will not be included " "in the backup", filePath(pIndex)); } } case Qt::DecorationRole: if(lPath == QDir::homePath()) { return QIcon::fromTheme(QStringLiteral("user-home")); } break; } return QFileSystemModel::data(pIndex, pRole); } bool FolderSelectionModel::setData(const QModelIndex& pIndex, const QVariant& pValue, int pRole) { if(!pIndex.isValid() || pIndex.column() != 0 || pRole != Qt::CheckStateRole) { return QFileSystemModel::setData(pIndex, pValue, pRole); } // here we ignore the check value, we treat it as a toggle // This is due to our using the Qt checking system in a virtual way const QString lPath = filePath(pIndex); const InclusionState lState = inclusionState(lPath); switch(lState) { case StateIncluded: case StateIncludeInherited: excludePath(lPath); break; default: includePath(lPath); } QModelIndex lRecurseIndex = pIndex; while(lRecurseIndex.isValid()) { emit dataChanged(lRecurseIndex, lRecurseIndex); lRecurseIndex = lRecurseIndex.parent(); } return true; } void FolderSelectionModel::includePath(const QString &pPath) { const InclusionState lState = inclusionState(pPath); if(lState == StateIncluded) { return; } removeSubDirs(pPath); if(lState == StateNone || lState == StateExcludeInherited) { mIncludedPaths.insert(pPath); emit includedPathAdded(pPath); } emit dataChanged(index(pPath), findLastLeaf(index(pPath))); } void FolderSelectionModel::excludePath(const QString& pPath) { const InclusionState lState = inclusionState(pPath); if(lState == StateExcluded) { return; } removeSubDirs(pPath); if(lState == StateIncludeInherited) { mExcludedPaths.insert(pPath); emit excludedPathAdded(pPath); } emit dataChanged(index(pPath), findLastLeaf(index(pPath))); } void FolderSelectionModel::setIncludedPaths(QSet pIncludedPaths) { beginResetModel(); QSet lRemoved = mIncludedPaths - pIncludedPaths; QSet lAdded = pIncludedPaths - mIncludedPaths; mIncludedPaths = pIncludedPaths; foreach(const QString &lRemovedPath, lRemoved) { emit includedPathRemoved(lRemovedPath); } foreach(const QString &lAddedPath, lAdded) { emit includedPathAdded(lAddedPath); } endResetModel(); } void FolderSelectionModel::setExcludedPaths(QSet pExcludedPaths) { beginResetModel(); QSet lRemoved = mExcludedPaths - pExcludedPaths; QSet lAdded = pExcludedPaths - mExcludedPaths; mExcludedPaths = pExcludedPaths; foreach(const QString &lRemovedPath, lRemoved) { emit excludedPathRemoved(lRemovedPath); } foreach(const QString &lAddedPath, lAdded) { emit excludedPathAdded(lAddedPath); } endResetModel(); } QSet FolderSelectionModel::includedPaths() const { return mIncludedPaths; } QSet FolderSelectionModel::excludedPaths() const { return mExcludedPaths; } FolderSelectionModel::InclusionState FolderSelectionModel::inclusionState(const QModelIndex& pIndex) const { return inclusionState(filePath(pIndex)); } FolderSelectionModel::InclusionState FolderSelectionModel::inclusionState(const QString& pPath) const { if(mIncludedPaths.contains(pPath)) { return StateIncluded; } else if(mExcludedPaths.contains(pPath)) { return StateExcluded; } else { QString lParent = pPath.section(QDir::separator(), 0, -2, QString::SectionSkipEmpty|QString::SectionIncludeLeadingSep); if(lParent.isEmpty()) { return StateNone; } else { InclusionState state = inclusionState(lParent); if(state == StateNone) { return StateNone; } else if(state == StateIncluded || state == StateIncludeInherited) { return StateIncludeInherited; } else { return StateExcludeInherited; } } } } bool FolderSelectionModel::hiddenFoldersVisible() const { return filter() & QDir::Hidden; } void FolderSelectionModel::setHiddenFoldersVisible(bool pVisible){ if(pVisible) { setFilter(QDir::AllDirs | QDir::NoDotAndDotDot | QDir::Hidden); } else { setFilter(QDir::AllDirs | QDir::NoDotAndDotDot); } } QModelIndex FolderSelectionModel::findLastLeaf(const QModelIndex &pIndex) { QModelIndex lIndex = pIndex; forever { int lRowCount = rowCount(lIndex); if(lRowCount > 0) { lIndex = index(lRowCount-1, 0, lIndex); } else { return lIndex; } } } void FolderSelectionModel::removeSubDirs(const QString& pPath) { QSet::iterator it = mExcludedPaths.begin(); QString lPath = pPath + QStringLiteral("/"); while(it != mExcludedPaths.end()) { if(*it == pPath || it->startsWith(lPath)) { QString lPathCopy = *it; it = mExcludedPaths.erase(it); emit excludedPathRemoved(lPathCopy); } else { ++it; } } it = mIncludedPaths.begin(); while(it != mIncludedPaths.end()) { if(*it == pPath || it->startsWith(lPath)) { QString lPathCopy = *it; it = mIncludedPaths.erase(it); emit includedPathRemoved(lPathCopy); } else { ++it; } } } kup-backup-0.7.1+dfsg/kcm/folderselectionmodel.h000066400000000000000000000055711322613417100216350ustar00rootroot00000000000000/* This file is part of the KDE Project Copyright (c) 2008 Sebastian Trueg Based on CollectionSetup.h from the Amarok project (C) 2003 Scott Wheeler (C) 2004 Max Howell (C) 2004 Mark Kretschmann (C) 2008 Seb Ruiz (C) 2008-2009 Sebastian Trueg (C) 2012 Simon Persson This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License version 2 as published by the Free Software Foundation. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef _FOLDER_SELECTION_MODEL_H_ #define _FOLDER_SELECTION_MODEL_H_ #include #include class FolderSelectionModel : public QFileSystemModel { Q_OBJECT public: FolderSelectionModel(bool pHiddenFoldersVisible = false, QObject *pParent = 0); enum InclusionState { StateNone, StateIncluded, StateExcluded, StateIncludeInherited, StateExcludeInherited }; enum CustomRoles { IncludeStateRole = 7777 }; Qt::ItemFlags flags(const QModelIndex &pIndex) const Q_DECL_OVERRIDE; QVariant data(const QModelIndex& pIndex, int pRole = Qt::DisplayRole) const Q_DECL_OVERRIDE; bool setData(const QModelIndex& pIndex, const QVariant& pValue, int pRole = Qt::EditRole) Q_DECL_OVERRIDE; void setIncludedPaths(QSet pIncludedPaths); void setExcludedPaths(QSet pExcludedPaths); QSet includedPaths() const; QSet excludedPaths() const; /** * Include the specified path. All subdirs will be reset. */ void includePath(const QString &pPath); /** * Exclude the specified path. All subdirs will be reset. */ void excludePath(const QString &pPath); int columnCount(const QModelIndex&) const Q_DECL_OVERRIDE { return 1; } InclusionState inclusionState(const QModelIndex &pIndex) const; InclusionState inclusionState(const QString &pPath) const; bool hiddenFoldersVisible() const; public slots: void setHiddenFoldersVisible(bool pVisible); signals: void includedPathAdded(const QString &pPath); void excludedPathAdded(const QString &pPath); void includedPathRemoved(const QString &pPath); void excludedPathRemoved(const QString &pPath); private: QModelIndex findLastLeaf(const QModelIndex& index); void removeSubDirs(const QString& path); QSet mIncludedPaths; QSet mExcludedPaths; }; #endif kup-backup-0.7.1+dfsg/kcm/kbuttongroup.cpp000066400000000000000000000107251322613417100205260ustar00rootroot00000000000000/* This file is part of the KDE Libraries Copyright (C) 2006 Pino Toscano This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "kbuttongroup.h" #include #include #include #include class KButtonGroup::Private { public: Private(KButtonGroup *q) : q(q), clickedMapper(), pressedMapper(), releasedMapper(), currentId(-1), nextId(0), wantToBeId(-1) { connect(&clickedMapper, SIGNAL(mapped(int)), q, SLOT(slotClicked(int))); connect(&pressedMapper, SIGNAL(mapped(int)), q, SIGNAL(pressed(int))); connect(&releasedMapper, SIGNAL(mapped(int)), q, SIGNAL(released(int))); } void slotClicked(int id); KButtonGroup *q; QSignalMapper clickedMapper; QSignalMapper pressedMapper; QSignalMapper releasedMapper; QHash btnMap; int currentId; int nextId; int wantToBeId; }; KButtonGroup::KButtonGroup(QWidget *parent) : QGroupBox(parent), d(new Private(this)) { } KButtonGroup::~KButtonGroup() { delete d; } void KButtonGroup::setSelected(int id) { if (!testAttribute(Qt::WA_WState_Polished)) { d->wantToBeId = id; ensurePolished(); return; } QHash::Iterator it = d->btnMap.begin(); QHash::Iterator itEnd = d->btnMap.end(); QAbstractButton *button = 0; for (; it != itEnd; ++it) { if ((it.value() == id) && (button = qobject_cast(it.key()))) { button->setChecked(true); d->currentId = id; emit changed(id); d->wantToBeId = -1; return; } } // button not found, it might still show up though, eg. because of premature polishing above d->wantToBeId = id; } int KButtonGroup::selected() const { return d->currentId; } void KButtonGroup::childEvent(QChildEvent *event) { if (event->polished()) { QAbstractButton *button = qobject_cast(event->child()); if (!d->btnMap.contains(event->child()) && button) { connect(button, SIGNAL(clicked()), &d->clickedMapper, SLOT(map())); d->clickedMapper.setMapping(button, d->nextId); connect(button, SIGNAL(pressed()), &d->pressedMapper, SLOT(map())); d->pressedMapper.setMapping(button, d->nextId); connect(button, SIGNAL(released()), &d->releasedMapper, SLOT(map())); d->releasedMapper.setMapping(button, d->nextId); d->btnMap[button] = d->nextId; if (d->nextId == d->wantToBeId) { d->currentId = d->wantToBeId; d->wantToBeId = -1; button->setChecked(true); emit changed(d->currentId); } ++d->nextId; } } else if (event->removed()) { QObject *obj = event->child(); QHash::ConstIterator it = d->btnMap.constFind(obj); if (it != d->btnMap.constEnd()) { d->clickedMapper.removeMappings(obj); d->pressedMapper.removeMappings(obj); d->releasedMapper.removeMappings(obj); if (it.value() == d->currentId) { d->currentId = -1; } d->btnMap.remove(obj); } } // be transparent QGroupBox::childEvent(event); } int KButtonGroup::id(QAbstractButton *button) const { QHash::ConstIterator it = d->btnMap.constFind(button); if (it != d->btnMap.constEnd()) { return it.value(); } return -1; } void KButtonGroup::Private::slotClicked(int id) { currentId = id; emit q->clicked(id); emit q->changed(id); } #include "moc_kbuttongroup.cpp" kup-backup-0.7.1+dfsg/kcm/kbuttongroup.h000066400000000000000000000055411322613417100201730ustar00rootroot00000000000000/* This file is part of the KDE Libraries Copyright (C) 2006 Pino Toscano This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef KBUTTONGROUP_H #define KBUTTONGROUP_H #include class QAbstractButton; /** * @deprecated since 5.0, use QGroupBox and QButtonGroup instead * * @short Group box with index of the selected button * KButtonGroup is a simple group box that can keep track of the current selected * button of the ones added to it. * * Use normally as you would with a QGroupBox. * * \image html kbuttongroup.png "KDE Button Group containing 3 KPushButtons" * * @author Pino Toscano */ class KButtonGroup : public QGroupBox { Q_OBJECT Q_PROPERTY(int current READ selected WRITE setSelected NOTIFY changed USER true) public: /** * Construct a new empty KGroupBox. */ explicit KButtonGroup(QWidget *parent = 0); /** * Destroys the widget. */ ~KButtonGroup(); /** * Return the index of the selected QAbstractButton, among the QAbstractButton's * added to the widget. * @return the index of the selected button */ int selected() const; /** * @return the index of @p button. * @since 4.3 */ int id(QAbstractButton *button) const; public Q_SLOTS: /** * Select the \p id -th button */ void setSelected(int id); Q_SIGNALS: /** * The button with index \p id was clicked */ void clicked(int id); /** * The button with index \p id was pressed */ void pressed(int id); /** * The button with index \p id was released */ void released(int id); /** * Emitted when anything (a click on a button, or calling setSelected()) * change the id of the current selected. \p id is the index of the new * selected button. */ void changed(int id); protected: /** * Reimplemented from QGroupBox. */ void childEvent(QChildEvent *event) Q_DECL_OVERRIDE; private: Q_PRIVATE_SLOT(d, void slotClicked(int id)) class Private; friend class Private; Private *const d; }; #endif kup-backup-0.7.1+dfsg/kcm/kcm_kup.desktop000066400000000000000000000042701322613417100203010ustar00rootroot00000000000000[Desktop Entry] Exec=kcmshell5 kcm_kup Icon=kup Type=Service X-KDE-ServiceTypes=KCModule X-KDE-Library=kcm_kup X-KDE-ParentApp=kcontrol X-KDE-System-Settings-Parent-Category=personalization Name=Backups Name[bs_BA]=Backupi Name[cs]=Zálohy Name[da]=Backupper Name[de]=Datensicherungen Name[es]=Copias de seguridad Name[fr_FR]=Sauvegardes Name[it]=Backup Name[lt_LT]=Atsarginės kopijos Name[nl_NL]=Back-ups Name[pl]=Kopie zapasowe Name[pt_BR]=Backups Name[ru]=Резервные копии Name[sv]=Säkerhetskopior Name[tl]=Mga seguridad na kopya Name[zh_TW]=備份 Comment=Configure backup plans Comment[bs_BA]=Podesite backup plan Comment[cs]=Nastavit plány záloh Comment[da]=Indstil backupplaner Comment[de]=Datensicherungspläne konfigurieren Comment[es]=Configurar planes de copias de seguridad Comment[fr_FR]=Configurer les plans de sauvegarde Comment[it]=Configura i piani di backup Comment[lt_LT]=Konfigūruoti atsarginių kopijų planus Comment[nl_NL]=Back-upschema's instellen Comment[pl]=Konfiguruj plany kopii zapasowych Comment[pt_BR]=Configurar planos de backup Comment[ru]=Настроить планы резервного копирования Comment[sv]=Konfigurera planer för säkerhetskopiering Comment[tl]=Magkompigura ng plano para sa seguridad na kopya Comment[zh_TW]=設定備份計畫 X-KDE-Keywords=backup,recovery,safety X-KDE-Keywords[bs_BA]=rezervna kopija, oporavak, sigurnost X-KDE-Keywords[cs]=záloha,obnovení,bezpečí X-KDE-Keywords[da]=backup,gendannelse,sikkerhed X-KDE-Keywords[de]=Datensicherung,Wiederherstellung,Sicherheit X-KDE-Keywords[es]=copia de seguridad, recuperación, seguridad X-KDE-Keywords[fr_FR]=sauvegarde,restauration,sécurité X-KDE-Keywords[it]=backup, ripristino, sicurezza X-KDE-Keywords[lt_LT]=kopijos,atkūrimas,saugumas X-KDE-Keywords[nl_NL]=back-up,herstel,veiligheid X-KDE-Keywords[pl]=kopia,odzyskiwanie,bezpieczeństwo X-KDE-Keywords[pt_BR]=backup, recuperação, segurança X-KDE-Keywords[ru]=резервное копирование,восстановление,безопасность X-KDE-Keywords[sv]=säkerhetskopior,återställning,backup X-KDE-Keywords[tl]=seguridad na kopya, pagkabawi,kaligtasan X-KDE-Keywords[zh_TW]=備份、還原、安全 kup-backup-0.7.1+dfsg/kcm/kcm_kup.desktop.template000066400000000000000000000004241322613417100221100ustar00rootroot00000000000000[Desktop Entry] Exec=kcmshell5 kcm_kup Icon=kup Type=Service X-KDE-ServiceTypes=KCModule X-KDE-Library=kcm_kup X-KDE-ParentApp=kcontrol X-KDE-System-Settings-Parent-Category=personalization _Name=Backups _Comment=Configure backup plans _X-KDE-Keywords=backup,recovery,safety kup-backup-0.7.1+dfsg/kcm/kupkcm.cpp000066400000000000000000000301651322613417100172550ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include "backupplan.h" #include "backupplanwidget.h" #include "kupdaemon.h" #include "kupkcm.h" #include "kupsettings.h" #include "planstatuswidget.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include K_PLUGIN_FACTORY(KupKcmFactory, registerPlugin();) KupKcm::KupKcm(QWidget *pParent, const QVariantList &pArgs) : KCModule(pParent, pArgs) { KAboutData lAbout(QStringLiteral("kcm_kup"), i18n("Kup Configuration Module"), QStringLiteral("0.7.1"), i18n("Configuration of backup plans for the Kup backup system"), KAboutLicense::GPL, i18n("Copyright (C) 2011-2015 Simon Persson"), QString(), QString(), "simonpersson1@gmail.com"); lAbout.addAuthor(i18n("Simon Persson"), i18n("Maintainer"), "simonpersson1@gmail.com"); lAbout.setTranslator(xi18nc("NAME OF TRANSLATORS", "Your names"), xi18nc("EMAIL OF TRANSLATORS", "Your emails")); setAboutData(new KAboutData(lAbout)); setObjectName(QStringLiteral("kcm_kup")); //needed for the kconfigdialogmanager magic setButtons((Apply | buttons()) & ~Default); KProcess lBupProcess; lBupProcess << QStringLiteral("bup") << QStringLiteral("version"); lBupProcess.setOutputChannelMode(KProcess::MergedChannels); int lExitCode = lBupProcess.execute(); if(lExitCode >= 0) { mBupVersion = QString::fromUtf8(lBupProcess.readAllStandardOutput()); KProcess lPar2Process; lPar2Process << QStringLiteral("bup") << QStringLiteral("fsck") << QStringLiteral("--par2-ok"); mPar2Available = lPar2Process.execute() == 0; } else { mPar2Available = false; } KProcess lRsyncProcess; lRsyncProcess << QStringLiteral("rsync") << QStringLiteral("--version"); lRsyncProcess.setOutputChannelMode(KProcess::MergedChannels); lExitCode = lRsyncProcess.execute(); if(lExitCode >= 0) { QString lOutput = QString::fromLocal8Bit(lRsyncProcess.readLine()); mRsyncVersion = lOutput.split(QLatin1Char(' '), QString::SkipEmptyParts).at(2); } if(mBupVersion.isEmpty() && mRsyncVersion.isEmpty()) { QLabel *lSorryIcon = new QLabel; lSorryIcon->setPixmap(QIcon::fromTheme(QStringLiteral("dialog-error")).pixmap(64, 64)); QString lInstallMessage = i18n("

Backup programs are missing

" "

Before you can activate any backup plan you need to " "install either of

" "
  • bup, for versioned backups
  • " "
  • rsync, for synchronized backups
"); QLabel *lSorryText = new QLabel(lInstallMessage); lSorryText->setWordWrap(true); QHBoxLayout *lHLayout = new QHBoxLayout; lHLayout->addWidget(lSorryIcon); lHLayout->addWidget(lSorryText, 1); setLayout(lHLayout); } else { Kdelibs4ConfigMigrator lMigrator(QStringLiteral("kup")); lMigrator.setConfigFiles(QStringList() << QStringLiteral("kuprc")); lMigrator.migrate(); mConfig = KSharedConfig::openConfig(QStringLiteral("kuprc")); mSettings = new KupSettings(mConfig, this); for(int i = 0; i < mSettings->mNumberOfPlans; ++i) { mPlans.append(new BackupPlan(i+1, mConfig, this)); mConfigManagers.append(NULL); mPlanWidgets.append(NULL); mStatusWidgets.append(NULL); } createSettingsFrontPage(); addConfig(mSettings, mFrontPage); mStackedLayout = new QStackedLayout; mStackedLayout->addWidget(mFrontPage); setLayout(mStackedLayout); } } QSize KupKcm::sizeHint() const { int lBaseWidth = fontMetrics().width('M'); return QSize(lBaseWidth * 65, lBaseWidth * 35); } void KupKcm::load() { if(mBupVersion.isEmpty() && mRsyncVersion.isEmpty()) { return; } // status will be set correctly after construction, set to checked here to // match the enabled status of other widgets mEnableCheckBox->setChecked(true); for(int i = 0; i < mSettings->mNumberOfPlans; ++i) { if(!mConfigManagers.at(i)) createPlanWidgets(i); mConfigManagers.at(i)->updateWidgets(); } for(int i = mSettings->mNumberOfPlans; i < mPlans.count();) { completelyRemovePlan(i); } KCModule::load(); // this call is needed because it could have been set true before, now load() is called // because user pressed reset button. need to manually reset the "changed" state to false // in this case. unmanagedWidgetChangeState(false); } void KupKcm::save() { KConfigDialogManager *lManager; BackupPlan *lPlan; int lPlansRemoved = 0; for(int i=0; i < mPlans.count(); ++i) { lPlan = mPlans.at(i); lManager = mConfigManagers.at(i); if(lManager != NULL) { if(lPlansRemoved != 0) { lPlan->removePlanFromConfig(); lPlan->setPlanNumber(i + 1); // config manager does not detect a changed group name of the config items. // To work around, read default settings - config manager will then notice // changed values and save current widget status into the config using the // new group name. If all settings for the plan already was default then // nothing was saved anyway, either under old or new group name. lPlan->setDefaults(); } mPlanWidgets.at(i)->saveExtraData(); lManager->updateSettings(); mStatusWidgets.at(i)->updateIcon(); if(lPlan->mDestinationType == 1 && lPlan->mExternalUUID.isEmpty()) { QMessageBox::warning(this, xi18nc("@title:window", "Warning"), xi18nc("@info %1 is the name of the backup plan", "%1 does not have a destination!" "No backups will be saved by this plan.", lPlan->mDescription)); } } else { lPlan->removePlanFromConfig(); delete mPlans.takeAt(i); mConfigManagers.removeAt(i); mStatusWidgets.removeAt(i); mPlanWidgets.removeAt(i); ++lPlansRemoved; --i; } } mSettings->mNumberOfPlans = mPlans.count(); mSettings->save(); KCModule::save(); QDBusInterface lInterface(KUP_DBUS_SERVICE_NAME, KUP_DBUS_OBJECT_PATH); if(lInterface.isValid()) { lInterface.call(QStringLiteral("reloadConfig")); } else { KProcess::startDetached(QStringLiteral("kup-daemon")); } } void KupKcm::updateChangedStatus() { bool lHasUnmanagedChanged = false; foreach(KConfigDialogManager *lConfigManager, mConfigManagers) { if(!lConfigManager || lConfigManager->hasChanged()) { lHasUnmanagedChanged = true; break; } } if(mPlanWidgets.count() != mSettings->mNumberOfPlans) lHasUnmanagedChanged = true; unmanagedWidgetChangeState(lHasUnmanagedChanged); } void KupKcm::showFrontPage() { mStackedLayout->setCurrentIndex(0); } void KupKcm::createSettingsFrontPage() { mFrontPage = new QWidget; QHBoxLayout *lHLayout = new QHBoxLayout; QVBoxLayout *lVLayout = new QVBoxLayout; QScrollArea *lScrollArea = new QScrollArea; QWidget *lCentralWidget = new QWidget(lScrollArea); mVerticalLayout = new QVBoxLayout; lScrollArea->setWidget(lCentralWidget); lScrollArea->setWidgetResizable(true); lScrollArea->setFrameStyle(QFrame::NoFrame); QPushButton *lAddPlanButton = new QPushButton(QIcon::fromTheme(QStringLiteral("list-add")), xi18nc("@action:button", "Add New Plan")); connect(lAddPlanButton, &QPushButton::clicked, [this]{ mPlans.append(new BackupPlan(mPlans.count() + 1, mConfig, this)); mConfigManagers.append(NULL); mPlanWidgets.append(NULL); mStatusWidgets.append(NULL); createPlanWidgets(mPlans.count() - 1); updateChangedStatus(); emit mStatusWidgets.at(mPlans.count() - 1)->configureMe(); }); mEnableCheckBox = new QCheckBox(xi18nc("@option:check", "Backups Enabled")); mEnableCheckBox->setObjectName(QStringLiteral("kcfg_Backups enabled")); connect(mEnableCheckBox, &QCheckBox::toggled, lAddPlanButton, &QPushButton::setEnabled); lHLayout->addWidget(mEnableCheckBox); lHLayout->addStretch(); lHLayout->addWidget(lAddPlanButton); lVLayout->addLayout(lHLayout); lVLayout->addWidget(lScrollArea); mFrontPage->setLayout(lVLayout); mVerticalLayout->addStretch(1); lCentralWidget->setLayout(mVerticalLayout); } void KupKcm::createPlanWidgets(int pIndex) { BackupPlanWidget *lPlanWidget = new BackupPlanWidget(mPlans.at(pIndex), mBupVersion, mRsyncVersion, mPar2Available); connect(lPlanWidget, SIGNAL(requestOverviewReturn()), this, SLOT(showFrontPage())); KConfigDialogManager *lConfigManager = new KConfigDialogManager(lPlanWidget, mPlans.at(pIndex)); lConfigManager->setObjectName(objectName()); connect(lConfigManager, SIGNAL(widgetModified()), this, SLOT(updateChangedStatus())); PlanStatusWidget *lStatusWidget = new PlanStatusWidget(mPlans.at(pIndex)); connect(lStatusWidget, &PlanStatusWidget::removeMe, [=]{ if(pIndex < mSettings->mNumberOfPlans) partiallyRemovePlan(pIndex); else completelyRemovePlan(pIndex); updateChangedStatus(); }); connect(lStatusWidget, &PlanStatusWidget::configureMe, [=]{ mStackedLayout->setCurrentIndex(pIndex + 1); }); connect(lStatusWidget, &PlanStatusWidget::duplicateMe, [this,pIndex]{ BackupPlan *lNewPlan = new BackupPlan(mPlans.count() + 1, mConfig, this); lNewPlan->copyFrom(*mPlans.at(pIndex)); mPlans.append(lNewPlan); mConfigManagers.append(NULL); mPlanWidgets.append(NULL); mStatusWidgets.append(NULL); createPlanWidgets(mPlans.count() - 1); // crazy trick to make the config system realize that stuff has changed // and will need to be saved. lNewPlan->setDefaults(); updateChangedStatus(); }); connect(mEnableCheckBox, &QCheckBox::toggled, lStatusWidget, &PlanStatusWidget::setEnabled); connect(lPlanWidget->mDescriptionEdit, &KLineEdit::textChanged, lStatusWidget->mDescriptionLabel, &QLabel::setText); mConfigManagers[pIndex] = lConfigManager; mPlanWidgets[pIndex] = lPlanWidget; mStackedLayout->insertWidget(pIndex + 1, lPlanWidget); mStatusWidgets[pIndex] = lStatusWidget; mVerticalLayout->insertWidget(pIndex, lStatusWidget); } void KupKcm::completelyRemovePlan(int pIndex) { mVerticalLayout->removeWidget(mStatusWidgets.at(pIndex)); mStackedLayout->removeWidget(mPlanWidgets.at(pIndex)); delete mConfigManagers.takeAt(pIndex); delete mStatusWidgets.takeAt(pIndex); delete mPlanWidgets.takeAt(pIndex); delete mPlans.takeAt(pIndex); } void KupKcm::partiallyRemovePlan(int pIndex) { mVerticalLayout->removeWidget(mStatusWidgets.at(pIndex)); mStackedLayout->removeWidget(mPlanWidgets.at(pIndex)); mConfigManagers.at(pIndex)->deleteLater(); mConfigManagers[pIndex] = NULL; mStatusWidgets.at(pIndex)->deleteLater(); mStatusWidgets[pIndex] = NULL; mPlanWidgets.at(pIndex)->deleteLater(); mPlanWidgets[pIndex] = NULL; } #include "kupkcm.moc" kup-backup-0.7.1+dfsg/kcm/kupkcm.h000066400000000000000000000050751322613417100167240ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #ifndef KUPKCM_H #define KUPKCM_H #include #include class BackupPlan; class BackupPlanWidget; class KupSettings; class KupSettingsWidget; class PlanStatusWidget; class KAssistantDialog; class KPageWidgetItem; class QPushButton; class QCheckBox; class QStackedLayout; class QVBoxLayout; class KupKcm : public KCModule { Q_OBJECT public: KupKcm(QWidget *pParent, const QVariantList &pArgs); virtual QSize sizeHint() const override; public slots: virtual void load(); virtual void save(); void updateChangedStatus(); void showFrontPage(); private: void createSettingsFrontPage(); void createPlanWidgets(int pIndex); void completelyRemovePlan(int pIndex); void partiallyRemovePlan(int pIndex); KSharedConfigPtr mConfig; KupSettings *mSettings; QWidget *mFrontPage; QList mPlans; QList mPlanWidgets; QList mStatusWidgets; QList mConfigManagers; QStackedLayout *mStackedLayout; QVBoxLayout *mVerticalLayout; QCheckBox *mEnableCheckBox; QString mBupVersion; QString mRsyncVersion; bool mPar2Available; }; #endif // KUPKCM_H kup-backup-0.7.1+dfsg/kcm/planstatuswidget.cpp000066400000000000000000000071601322613417100213640ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include "planstatuswidget.h" #include "kupsettings.h" #include "backupplan.h" #include #include #include #include PlanStatusWidget::PlanStatusWidget(BackupPlan *pPlan, QWidget *pParent) : QGroupBox(pParent), mPlan(pPlan) { QVBoxLayout *lVLayout1 = new QVBoxLayout; QVBoxLayout *lVLayout2 = new QVBoxLayout; QHBoxLayout *lHLayout1 = new QHBoxLayout; QHBoxLayout *lHLayout2 = new QHBoxLayout; mDescriptionLabel = new QLabel(mPlan->mDescription); QFont lDescriptionFont = mDescriptionLabel->font(); lDescriptionFont.setPointSizeF(lDescriptionFont.pointSizeF() + 2.0); lDescriptionFont.setBold(true); mDescriptionLabel->setFont(lDescriptionFont); mStatusIconLabel = new QLabel(); //TODO: add dbus interface to be notified from daemon when this is updated. mStatusTextLabel = new QLabel(mPlan->statusText()); QPushButton *lConfigureButton = new QPushButton(QIcon::fromTheme(QStringLiteral("configure")), xi18nc("@action:button", "Configure")); connect(lConfigureButton, SIGNAL(clicked()), this, SIGNAL(configureMe())); QPushButton *lRemoveButton = new QPushButton(QIcon::fromTheme(QStringLiteral("list-remove")), xi18nc("@action:button", "Remove")); connect(lRemoveButton, SIGNAL(clicked()), this, SIGNAL(removeMe())); QPushButton *lCopyButton = new QPushButton(QIcon::fromTheme(QStringLiteral("edit-duplicate")), xi18nc("@action:button", "Duplicate")); connect(lCopyButton, &QPushButton::clicked, this, &PlanStatusWidget::duplicateMe); lVLayout2->addWidget(mDescriptionLabel); lVLayout2->addWidget(mStatusTextLabel); lHLayout1->addLayout(lVLayout2); lHLayout1->addStretch(); lHLayout1->addWidget(mStatusIconLabel); lVLayout1->addLayout(lHLayout1); lHLayout2->addStretch(); lHLayout2->addWidget(lCopyButton); lHLayout2->addWidget(lConfigureButton); lHLayout2->addWidget(lRemoveButton); lVLayout1->addLayout(lHLayout2); setLayout(lVLayout1); updateIcon(); } void PlanStatusWidget::updateIcon() { mStatusIconLabel->setPixmap(QIcon::fromTheme(mPlan->iconName(mPlan->backupStatus())).pixmap(64,64)); } kup-backup-0.7.1+dfsg/kcm/planstatuswidget.h000066400000000000000000000037551322613417100210370ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #ifndef PLANSTATUSWIDGET_H #define PLANSTATUSWIDGET_H #include class BackupPlan; class KupSettings; class QPushButton; class QLabel; class PlanStatusWidget: public QGroupBox { Q_OBJECT public: explicit PlanStatusWidget(BackupPlan *pPlan, QWidget *pParent = 0); BackupPlan *plan() const {return mPlan;} BackupPlan *mPlan; QLabel *mDescriptionLabel; QLabel *mStatusIconLabel; QLabel *mStatusTextLabel; public slots: void updateIcon(); signals: void removeMe(); void configureMe(); void duplicateMe(); }; #endif // PLANSTATUSWIDGET_H kup-backup-0.7.1+dfsg/kioslave/000077500000000000000000000000001322613417100163155ustar00rootroot00000000000000kup-backup-0.7.1+dfsg/kioslave/CMakeLists.txt000066400000000000000000000005321322613417100210550ustar00rootroot00000000000000 set(bupslave_SRCS bupslave.cpp bupvfs.cpp vfshelpers.cpp ) add_library(kio_bup MODULE ${bupslave_SRCS}) target_link_libraries(kio_bup Qt5::Core KF5::KIOCore KF5::I18n ${libgit_link_name} ) install(TARGETS kio_bup DESTINATION ${PLUGIN_INSTALL_DIR}) install(FILES bup.protocol DESTINATION ${SERVICES_INSTALL_DIR}) add_definitions(-fexceptions) kup-backup-0.7.1+dfsg/kioslave/bup.protocol000066400000000000000000000005111322613417100206630ustar00rootroot00000000000000[Protocol] exec=kio_bup protocol=bup input=filesystem listing=Name,Type,Size,Date,AccessDate,Access,Owner,Group,Link output=filesystem reading=true source=true writing=false makedir=false deleting=false moving=false opening=true linking=false Icon=folder-important Description=A kioslave for bup backup repositories Class=:local kup-backup-0.7.1+dfsg/kioslave/bupslave.cpp000066400000000000000000000277141322613417100206550ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include "bupvfs.h" #include #include #include #include #include using namespace KIO; #include #include #include #include class BupSlave : public SlaveBase { public: BupSlave(const QByteArray &pPoolSocket, const QByteArray &pAppSocket); virtual ~BupSlave(); virtual void close(); virtual void get(const QUrl &pUrl); virtual void listDir(const QUrl &pUrl) ; virtual void open(const QUrl &pUrl, QIODevice::OpenMode pMode); virtual void read(filesize_t pSize); virtual void seek(filesize_t pOffset); virtual void stat(const QUrl &pUrl); virtual void mimetype(const QUrl &pUrl); private: bool checkCorrectRepository(const QUrl &pUrl, QStringList &pPathInRepository); QString getUserName(uid_t pUid); QString getGroupName(gid_t pGid); void createUDSEntry(Node *pNode, KIO::UDSEntry & pUDSEntry, int pDetails); QHash mUsercache; QHash mGroupcache; Repository *mRepository; File *mOpenFile; }; BupSlave::BupSlave(const QByteArray &pPoolSocket, const QByteArray &pAppSocket) : SlaveBase("bup", pPoolSocket, pAppSocket) { mRepository = NULL; mOpenFile = NULL; #if LIBGIT2_VER_MAJOR == 0 && LIBGIT2_VER_MINOR >= 24 git_libgit2_init(); #else git_threads_init(); #endif } BupSlave::~BupSlave() { if(mRepository != NULL) { delete mRepository; } #if LIBGIT2_VER_MAJOR == 0 && LIBGIT2_VER_MINOR >= 24 git_libgit2_shutdown(); #else git_threads_shutdown(); #endif } void BupSlave::close() { mOpenFile = NULL; emit finished(); } void BupSlave::get(const QUrl &pUrl) { QStringList lPathInRepo; if(!checkCorrectRepository(pUrl, lPathInRepo)) { emit error(KIO::ERR_SLAVE_DEFINED, i18n("No bup repository found.\n%1", pUrl.toDisplayString())); return; } // Assume that a symlink should be followed. // Kio will never call get() on a symlink if it actually wants to copy a // symlink, it would just create a symlink on the destination kioslave using the // target it already got from calling stat() on this one. Node *lNode = mRepository->resolve(lPathInRepo, true); if(lNode == NULL) { emit error(KIO::ERR_DOES_NOT_EXIST, lPathInRepo.join(QStringLiteral("/"))); return; } File *lFile = qobject_cast(lNode); if(lFile == NULL) { emit error(KIO::ERR_IS_DIRECTORY, lPathInRepo.join(QStringLiteral("/"))); return; } emit mimeType(lFile->mMimeType); // Emit total size AFTER mimetype emit totalSize(lFile->size()); //make sure file is at the beginning lFile->seek(0); KIO::filesize_t lProcessedSize = 0; const QString lResumeOffset = metaData(QStringLiteral("resume")); if(!lResumeOffset.isEmpty()) { bool ok; KIO::fileoffset_t lOffset = lResumeOffset.toLongLong(&ok); if (ok && (lOffset > 0) && ((quint64)lOffset < lFile->size())) { if(0 == lFile->seek(lOffset)) { emit canResume(); lProcessedSize = lOffset; } } } QByteArray lResultArray; int lRetVal; while(0 == (lRetVal = lFile->read(lResultArray))) { emit data(lResultArray); lProcessedSize += lResultArray.length(); emit processedSize(lProcessedSize); } if(lRetVal == KIO::ERR_NO_CONTENT) { emit data(QByteArray()); emit processedSize(lProcessedSize); emit finished(); } else { emit error(lRetVal, lPathInRepo.join(QStringLiteral("/"))); } } void BupSlave::listDir(const QUrl &pUrl) { QStringList lPathInRepo; if(!checkCorrectRepository(pUrl, lPathInRepo)) { emit error(KIO::ERR_SLAVE_DEFINED, i18n("No bup repository found.\n%1", pUrl.toDisplayString())); return; } Node *lNode = mRepository->resolve(lPathInRepo, true); if(lNode == NULL) { emit error(KIO::ERR_DOES_NOT_EXIST, lPathInRepo.join(QStringLiteral("/"))); return; } Directory *lDir = qobject_cast(lNode); if(lDir == NULL) { emit error(KIO::ERR_IS_FILE, lPathInRepo.join(QStringLiteral("/"))); return; } // give the directory a chance to reload if necessary. lDir->reload(); const QString sDetails = metaData(QStringLiteral("details")); const int lDetails = sDetails.isEmpty() ? 2 : sDetails.toInt(); NodeMapIterator i(lDir->subNodes()); UDSEntry lEntry; while(i.hasNext()) { createUDSEntry(i.next().value(), lEntry, lDetails); emit listEntry(lEntry); } emit finished(); } void BupSlave::open(const QUrl &pUrl, QIODevice::OpenMode pMode) { if(pMode & QIODevice::WriteOnly) { emit error(KIO::ERR_CANNOT_OPEN_FOR_WRITING, pUrl.toDisplayString()); return; } QStringList lPathInRepo; if(!checkCorrectRepository(pUrl, lPathInRepo)) { emit error(KIO::ERR_SLAVE_DEFINED, i18n("No bup repository found.\n%1", pUrl.toDisplayString())); return; } Node *lNode = mRepository->resolve(lPathInRepo, true); if(lNode == NULL) { emit error(KIO::ERR_DOES_NOT_EXIST, lPathInRepo.join(QStringLiteral("/"))); return; } File *lFile = qobject_cast(lNode); if(lFile == NULL) { emit error(KIO::ERR_IS_DIRECTORY, lPathInRepo.join(QStringLiteral("/"))); return; } if(0 != lFile->seek(0)) { emit error(KIO::ERR_CANNOT_OPEN_FOR_READING, pUrl.toDisplayString()); return; } mOpenFile = lFile; emit mimeType(lFile->mMimeType); emit totalSize(lFile->size()); emit position(0); emit opened(); } void BupSlave::read(filesize_t pSize) { if(mOpenFile == NULL) { emit error(KIO::ERR_COULD_NOT_READ, QString()); return; } QByteArray lResultArray; int lRetVal = 0; while(pSize > 0 && 0 == (lRetVal = mOpenFile->read(lResultArray, pSize))) { pSize -= lResultArray.size(); emit data(lResultArray); } if(lRetVal == 0) { emit data(QByteArray()); emit finished(); } else { emit error(lRetVal, mOpenFile->completePath()); } } void BupSlave::seek(filesize_t pOffset) { if(mOpenFile == NULL) { emit error(KIO::ERR_COULD_NOT_SEEK, QString()); return; } if(0 != mOpenFile->seek(pOffset)) { emit error(KIO::ERR_COULD_NOT_SEEK, mOpenFile->completePath()); return; } emit position(pOffset); } void BupSlave::stat(const QUrl &pUrl) { QStringList lPathInRepo; if(!checkCorrectRepository(pUrl, lPathInRepo)) { emit error(KIO::ERR_SLAVE_DEFINED, i18n("No bup repository found.\n%1", pUrl.toDisplayString())); return; } Node *lNode = mRepository->resolve(lPathInRepo); if(lNode == NULL) { emit error(KIO::ERR_DOES_NOT_EXIST, lPathInRepo.join(QStringLiteral("/"))); return; } const QString sDetails = metaData(QStringLiteral("details")); const int lDetails = sDetails.isEmpty() ? 2 : sDetails.toInt(); UDSEntry lUDSEntry; createUDSEntry(lNode, lUDSEntry, lDetails); emit statEntry(lUDSEntry); emit finished(); } void BupSlave::mimetype(const QUrl &pUrl) { QStringList lPathInRepo; if(!checkCorrectRepository(pUrl, lPathInRepo)) { emit error(KIO::ERR_SLAVE_DEFINED, i18n("No bup repository found.\n%1", pUrl.toDisplayString())); return; } Node *lNode = mRepository->resolve(lPathInRepo); if(lNode == NULL) { emit error(KIO::ERR_DOES_NOT_EXIST, lPathInRepo.join(QStringLiteral("/"))); return; } emit mimeType(lNode->mMimeType); emit finished(); } bool BupSlave::checkCorrectRepository(const QUrl &pUrl, QStringList &pPathInRepository) { // make this slave accept most URLs.. even incorrect ones. (no slash (wrong), // one slash (correct), two slashes (wrong), three slashes (correct)) QString lPath; if(!pUrl.host().isEmpty()) { lPath = QStringLiteral("/") + pUrl.host() + pUrl.adjusted(QUrl::StripTrailingSlash).path() + '/'; } else { lPath = pUrl.adjusted(QUrl::StripTrailingSlash).path() + '/'; if(!lPath.startsWith(QLatin1Char('/'))) { lPath.prepend(QLatin1Char('/')); } } if(mRepository && mRepository->isValid()) { if(lPath.startsWith(mRepository->objectName())) { lPath.remove(0, mRepository->objectName().length()); pPathInRepository = lPath.split(QLatin1Char('/'), QString::SkipEmptyParts); return true; } else { delete mRepository; mRepository = NULL; } } pPathInRepository = lPath.split(QLatin1Char('/'), QString::SkipEmptyParts); QString lRepoPath = QStringLiteral("/"); while(!pPathInRepository.isEmpty()) { // make sure the repo path will end with a slash lRepoPath += pPathInRepository.takeFirst(); lRepoPath += QStringLiteral("/"); if((QFile::exists(lRepoPath + QStringLiteral("objects")) && QFile::exists(lRepoPath + QStringLiteral("refs"))) || (QFile::exists(lRepoPath + QStringLiteral(".git/objects")) && QFile::exists(lRepoPath + QStringLiteral(".git/refs")))) { mRepository = new Repository(NULL, lRepoPath); return mRepository->isValid(); } } return false; } QString BupSlave::getUserName(uid_t pUid) { if(!mUsercache.contains(pUid)) { struct passwd *lUserInfo = getpwuid(pUid); if(lUserInfo) { mUsercache.insert(pUid, QString::fromLocal8Bit(lUserInfo->pw_name)); } else { return QString::number(pUid); } } return mUsercache.value(pUid); } QString BupSlave::getGroupName(gid_t pGid) { if(!mGroupcache.contains(pGid)) { struct group *lGroupInfo = getgrgid(pGid); if(lGroupInfo) { mGroupcache.insert(pGid, QString::fromLocal8Bit(lGroupInfo->gr_name)); } else { return QString::number( pGid ); } } return mGroupcache.value(pGid); } void BupSlave::createUDSEntry(Node *pNode, UDSEntry &pUDSEntry, int pDetails) { pUDSEntry.clear(); pUDSEntry.insert(KIO::UDSEntry::UDS_NAME, pNode->objectName()); if(!pNode->mSymlinkTarget.isEmpty()) { pUDSEntry.insert(KIO::UDSEntry::UDS_LINK_DEST, pNode->mSymlinkTarget); if(pDetails > 1) { Node *lNode = qobject_cast(pNode->parent())->resolve(pNode->mSymlinkTarget, true); if(lNode != NULL) { // follow symlink only if details > 1 and it leads to something pNode = lNode; } } } pUDSEntry.insert(KIO::UDSEntry::UDS_FILE_TYPE, pNode->mMode & S_IFMT); pUDSEntry.insert(KIO::UDSEntry::UDS_ACCESS, pNode->mMode & 07777); if(pDetails > 0) { qint64 lSize = 0; File *lFile = qobject_cast(pNode); if(lFile != NULL) { lSize = lFile->size(); } pUDSEntry.insert(KIO::UDSEntry::UDS_SIZE, lSize); pUDSEntry.insert(KIO::UDSEntry::UDS_MIME_TYPE, pNode->mMimeType); pUDSEntry.insert(KIO::UDSEntry::UDS_ACCESS_TIME, pNode->mAtime); pUDSEntry.insert(KIO::UDSEntry::UDS_MODIFICATION_TIME, pNode->mMtime); pUDSEntry.insert(KIO::UDSEntry::UDS_USER, getUserName(pNode->mUid)); pUDSEntry.insert(KIO::UDSEntry::UDS_GROUP, getGroupName(pNode->mGid)); } } extern "C" int Q_DECL_EXPORT kdemain(int pArgc, char **pArgv) { QCoreApplication lApp(pArgc, pArgv); lApp.setApplicationName(QStringLiteral("kio_bup")); KLocalizedString::setApplicationDomain("kup"); if(pArgc != 4) { fprintf(stderr, "Usage: kio_bup protocol domain-socket1 domain-socket2\n"); exit(-1); } BupSlave lSlave(pArgv[2], pArgv[3]); lSlave.dispatchLoop(); return 0; } kup-backup-0.7.1+dfsg/kioslave/bupvfs.cpp000066400000000000000000000354061322613417100203360ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include "bupvfs.h" #include #include #include #include #include git_revwalk *Node::mRevisionWalker = NULL; git_repository *Node::mRepository = NULL; Node::Node(QObject *pParent, const QString &pName, quint64 pMode) :QObject(pParent), Metadata(pMode) { setObjectName(pName); } int Node::readMetadata(VintStream &pMetadataStream) { return ::readMetadata(pMetadataStream, *this); } Node *Node::resolve(const QString &pPath, bool pFollowLinks) { Node *lParentNode = this; QString lTarget = pPath; if(lTarget.startsWith(QLatin1Char('/'))) { lTarget.remove(0, 1); lParentNode = parentCommit(); } return lParentNode->resolve(lTarget.split(QLatin1Char('/'), QString::SkipEmptyParts), pFollowLinks); } Node *Node::resolve(const QStringList &pPathList, bool pFollowLinks) { Node *lNode = this; foreach(QString lPathComponent, pPathList) { if(lPathComponent == QStringLiteral(".")) { continue; } else if(lPathComponent == QStringLiteral("..")) { lNode = qobject_cast(lNode->parent()); } else { Directory *lDir = qobject_cast(lNode); if(lDir == NULL) { return NULL; } lNode = lDir->subNodes().value(lPathComponent, NULL); } if(lNode == NULL) { return NULL; } } if(pFollowLinks && !lNode->mSymlinkTarget.isEmpty()) { return qobject_cast(lNode->parent())->resolve(lNode->mSymlinkTarget, true); } return lNode; } QString Node::completePath() { QString lCompletePath; Node *lNode = this; while(lNode != NULL) { Node *lNewNode = qobject_cast(lNode->parent()); if(lNewNode == NULL) { //this must be the repository, already starts and ends with slash. QString lObjectName = lNode->objectName(); lObjectName.chop(1); lCompletePath.prepend(lObjectName); } else { lCompletePath.prepend(lNode->objectName()); lCompletePath.prepend(QStringLiteral("/")); } lNode = lNewNode; } return lCompletePath; } Node *Node::parentCommit() { Node *lNode = this; while(lNode != NULL && qobject_cast(lNode->parent()) == NULL) { lNode = qobject_cast(lNode->parent()); } return lNode; } //Node *Node::parentRepository() { // Node *lNode = this; // while(lNode->parent() != NULL && qobject_cast(lNode) == NULL) { // lNode = qobject_cast(lNode->parent()); // } // return lNode; //} Directory::Directory(QObject *pParent, const QString &pName, quint64 pMode) :Node(pParent, pName, pMode) { mSubNodes = NULL; mMimeType = QStringLiteral("inode/directory"); } NodeMap Directory::subNodes() { if(mSubNodes == NULL) { mSubNodes = new NodeMap(); generateSubNodes(); } return *mSubNodes; } int File::readMetadata(VintStream &pMetadataStream) { int lRetVal = Node::readMetadata(pMetadataStream); QByteArray lContent, lNextData; seek(0); while(lContent.size() < 1000 && 0 == read(lNextData)) { lContent.append(lNextData); } seek(0); QMimeDatabase db; if(!lContent.isEmpty()) { mMimeType = db.mimeTypeForFileNameAndData(objectName(), lContent).name(); } else { mMimeType = db.mimeTypeForFile(objectName()).name(); } return lRetVal; } BlobFile::BlobFile(Node *pParent, const git_oid *pOid, const QString &pName, quint64 pMode) : File(pParent, pName, pMode) { mOid = *pOid; mBlob = NULL; } BlobFile::~BlobFile() { if(mBlob != NULL) { git_blob_free(mBlob); } } int BlobFile::read(QByteArray &pChunk, int pReadSize) { if(mOffset >= size()) { return KIO::ERR_NO_CONTENT; } git_blob *lBlob = cachedBlob(); if(lBlob == NULL) { return KIO::ERR_COULD_NOT_READ; } int lAvailableSize = size() - mOffset; int lReadSize = lAvailableSize; if(pReadSize > 0 && pReadSize < lAvailableSize) { lReadSize = pReadSize; } pChunk = QByteArray::fromRawData(((char *)git_blob_rawcontent(lBlob)) + mOffset, lReadSize); mOffset += lReadSize; return 0; } git_blob *BlobFile::cachedBlob() { if(mBlob == NULL) { git_blob_lookup(&mBlob, mRepository, &mOid); } return mBlob; } quint64 BlobFile::calculateSize() { git_blob *lBlob = cachedBlob(); if(lBlob == NULL) { return 0; } return git_blob_rawsize(lBlob); } ChunkFile::ChunkFile(Node *pParent, const git_oid *pOid, const QString &pName, quint64 pMode) : File(pParent, pName, pMode) { mOid = *pOid; mValidSeekPosition = false; mCurrentBlob = NULL; seek(0); } ChunkFile::~ChunkFile() { if(mCurrentBlob != NULL) { git_blob_free(mCurrentBlob); } } int ChunkFile::seek(quint64 pOffset) { if(pOffset >= size()) { return KIO::ERR_COULD_NOT_SEEK; } if(mOffset == pOffset && mValidSeekPosition) { return 0; // nothing to do, success } mOffset = pOffset; mValidSeekPosition = false; while(!mPositionStack.isEmpty()) { delete mPositionStack.takeLast(); } if(mCurrentBlob != NULL) { git_blob_free(mCurrentBlob); mCurrentBlob = NULL; } git_tree *lTree; if(0 != git_tree_lookup(&lTree, mRepository, &mOid)) { return KIO::ERR_COULD_NOT_SEEK; } TreePosition *lCurrentPos = new TreePosition(lTree); mPositionStack.append(lCurrentPos); quint64 lLocalOffset = mOffset; while(true) { uint lLower = 0; const git_tree_entry *lLowerEntry = git_tree_entry_byindex(lCurrentPos->mTree, lLower); uint lLowerOffset = 0; uint lUpper = git_tree_entrycount(lCurrentPos->mTree); while(lUpper - lLower > 1) { uint lToCheck = lLower + (lUpper - lLower)/2; const git_tree_entry *lCheckEntry = git_tree_entry_byindex(lCurrentPos->mTree, lToCheck); quint64 lCheckOffset; if(!offsetFromName(lCheckEntry, lCheckOffset)) { return KIO::ERR_COULD_NOT_SEEK; } if(lCheckOffset > lLocalOffset) { lUpper = lToCheck; } else { lLower = lToCheck; lLowerEntry = lCheckEntry; lLowerOffset = lCheckOffset; } } lCurrentPos->mIndex = lLower; // the remainder of the offset will be a local offset into the blob or into the subtree. lLocalOffset -= lLowerOffset; if(S_ISDIR(git_tree_entry_filemode(lLowerEntry))) { git_tree *lTree; if(0 != git_tree_lookup(&lTree, mRepository, git_tree_entry_id(lLowerEntry))) { return KIO::ERR_COULD_NOT_SEEK; } lCurrentPos = new TreePosition(lTree); mPositionStack.append(lCurrentPos); } else { lCurrentPos->mSkipSize = lLocalOffset; break; } } mValidSeekPosition = true; return 0; // success. } int ChunkFile::read(QByteArray &pChunk, int pReadSize) { if(mOffset >= size()) { return KIO::ERR_NO_CONTENT; } if(!mValidSeekPosition) { return KIO::ERR_COULD_NOT_READ; } TreePosition *lCurrentPos = mPositionStack.last(); if(mCurrentBlob != NULL && lCurrentPos->mSkipSize == 0) { // skipsize has been reset, this means current blob has been exhausted. Free it // now as we're about to fetch a new one. git_blob_free(mCurrentBlob); mCurrentBlob = NULL; } if(mCurrentBlob == NULL) { const git_tree_entry *lTreeEntry = git_tree_entry_byindex(lCurrentPos->mTree, lCurrentPos->mIndex); if(0 != git_blob_lookup(&mCurrentBlob, mRepository, git_tree_entry_id(lTreeEntry))) { return KIO::ERR_COULD_NOT_READ; } } int lTotalSize = git_blob_rawsize(mCurrentBlob); int lAvailableSize = lTotalSize - lCurrentPos->mSkipSize; if(lAvailableSize < 0) { // this must mean a corrupt bup tree somehow return KIO::ERR_COULD_NOT_READ; } int lReadSize = lAvailableSize; if(pReadSize > 0 && pReadSize < lAvailableSize) { lReadSize = pReadSize; } pChunk = QByteArray::fromRawData(((char *)git_blob_rawcontent(mCurrentBlob)) + lCurrentPos->mSkipSize, lReadSize); mOffset += lReadSize; lCurrentPos->mSkipSize += lReadSize; // check if it's time to find next blob. if(lCurrentPos->mSkipSize == lTotalSize) { lCurrentPos->mSkipSize = 0; lCurrentPos->mIndex++; while(true) { if(lCurrentPos->mIndex < git_tree_entrycount(lCurrentPos->mTree)) { const git_tree_entry *lTreeEntry = git_tree_entry_byindex(lCurrentPos->mTree, lCurrentPos->mIndex); if(S_ISDIR(git_tree_entry_filemode(lTreeEntry))) { git_tree *lTree; if(0 != git_tree_lookup(&lTree, mRepository, git_tree_entry_id(lTreeEntry))) { return KIO::ERR_COULD_NOT_READ; } lCurrentPos = new TreePosition(lTree); // will have index and skipsize initialized to zero. mPositionStack.append(lCurrentPos); } else { // it's a blob break; } } else { delete mPositionStack.takeLast(); if(mPositionStack.isEmpty()) { Q_ASSERT(mOffset == size()); break; } lCurrentPos = mPositionStack.last(); lCurrentPos->mIndex++; } } } return 0; // success. } quint64 ChunkFile::calculateSize() { return calculateChunkFileSize(&mOid, mRepository); } ChunkFile::TreePosition::TreePosition(git_tree *pTree) { mTree = pTree; mIndex = 0; mSkipSize = 0; } ChunkFile::TreePosition::~TreePosition() { git_tree_free(mTree); } ArchivedDirectory::ArchivedDirectory(Node *pParent, const git_oid *pOid, const QString &pName, quint64 pMode) : Directory(pParent, pName, pMode) { mOid = *pOid; mMetadataStream = NULL; mTree = NULL; if(0 != git_tree_lookup(&mTree, mRepository, &mOid)) { return; } const git_tree_entry *lTreeEntry = git_tree_entry_byname(mTree, ".bupm"); if(lTreeEntry != NULL && 0 == git_blob_lookup(&mMetadataBlob, mRepository, git_tree_entry_id(lTreeEntry))) { mMetadataStream = new VintStream(git_blob_rawcontent(mMetadataBlob), git_blob_rawsize(mMetadataBlob), this); readMetadata(*mMetadataStream); // the first entry is metadata for the directory itself } } void ArchivedDirectory::generateSubNodes() { if(mTree == NULL) { return; } uint lEntryCount = git_tree_entrycount(mTree); for(uint i = 0; i < lEntryCount; ++i) { uint lMode; const git_oid *lOid; QString lName; bool lChunked; const git_tree_entry *lTreeEntry = git_tree_entry_byindex(mTree, i); getEntryAttributes(lTreeEntry, lMode, lChunked, lOid, lName); if(lName == QStringLiteral(".bupm")) { continue; } Node *lSubNode = NULL; if(S_ISDIR(lMode)) { lSubNode = new ArchivedDirectory(this, lOid, lName, lMode); } else if(S_ISLNK(lMode)) { lSubNode = new Symlink(this, lOid, lName, lMode); } else if(lChunked) { lSubNode = new ChunkFile(this, lOid, lName, lMode); } else { lSubNode = new BlobFile(this, lOid, lName, lMode); } mSubNodes->insert(lName, lSubNode); if(!S_ISDIR(lMode) && mMetadataStream != NULL) { lSubNode->readMetadata(*mMetadataStream); } } if(mMetadataStream != NULL) { delete mMetadataStream; mMetadataStream = NULL; git_blob_free(mMetadataBlob); mMetadataBlob = NULL; } git_tree_free(mTree); mTree = NULL; } Branch::Branch(Node *pParent, const char *pName) : Directory(pParent, QString::fromLocal8Bit(pName).remove(0, 11), DEFAULT_MODE_DIRECTORY) { mRefName = QByteArray(pName); QByteArray lPath = parent()->objectName().toLocal8Bit(); lPath.append(mRefName); struct stat lStat; if(0 == stat(lPath, &lStat)) { mAtime = lStat.st_atime; mMtime = lStat.st_mtime; } } void Branch::reload() { if(mSubNodes == NULL) { mSubNodes = new NodeMap(); } // potentially changed content in a branch, generateSubNodes is written so // that it can be called repetedly. generateSubNodes(); } void Branch::generateSubNodes() { if(0 != git_revwalk_push_ref(mRevisionWalker, mRefName)) { return; } git_oid lOid; while(0 == git_revwalk_next(&lOid, mRevisionWalker)) { git_commit *lCommit; if(0 != git_commit_lookup(&lCommit, mRepository, &lOid)) { continue; } QString lCommitTimeLocal = vfsTimeToString(git_commit_time(lCommit)); if(!mSubNodes->contains(lCommitTimeLocal)) { Directory * lDirectory = new ArchivedDirectory(this, git_commit_tree_id(lCommit), lCommitTimeLocal, DEFAULT_MODE_DIRECTORY); lDirectory->mMtime = git_commit_time(lCommit); mSubNodes->insert(lCommitTimeLocal, lDirectory); } git_commit_free(lCommit); } } Repository::Repository(QObject *pParent, const QString &pRepositoryPath) : Directory(pParent, pRepositoryPath, DEFAULT_MODE_DIRECTORY) { if(!objectName().endsWith(QLatin1Char('/'))) { setObjectName(objectName() + QLatin1Char('/')); } if(0 != git_repository_open(&mRepository, pRepositoryPath.toLocal8Bit())) { qWarning() << "could not open repository " << pRepositoryPath; mRepository = NULL; return; } git_strarray lBranchNames; git_reference_list(&lBranchNames, mRepository); for(uint i = 0; i < lBranchNames.count; ++i) { QString lRefName = QString::fromLocal8Bit(lBranchNames.strings[i]); if(lRefName.startsWith(QStringLiteral("refs/heads/"))) { QString lPath = objectName(); lPath.append(lRefName); struct stat lStat; stat(lPath.toLocal8Bit(), &lStat); if(lStat.st_atime > mAtime) { mAtime = lStat.st_atime; } if(lStat.st_mtime > mMtime) { mMtime = lStat.st_mtime; } } } git_strarray_free(&lBranchNames); if(0 != git_revwalk_new(&mRevisionWalker, mRepository)) { qWarning() << "could not create a revision walker in repository " << pRepositoryPath; mRevisionWalker = NULL; return; } } Repository::~Repository() { if(mRepository != NULL) { git_repository_free(mRepository); } if(mRevisionWalker != NULL) { git_revwalk_free(mRevisionWalker); } } void Repository::generateSubNodes() { git_strarray lBranchNames; git_reference_list(&lBranchNames, mRepository); for(uint i = 0; i < lBranchNames.count; ++i) { QString lRefName = QString::fromLocal8Bit(lBranchNames.strings[i]); if(lRefName.startsWith(QStringLiteral("refs/heads/"))) { Branch *lBranch = new Branch(this, lBranchNames.strings[i]); mSubNodes->insert(lBranch->objectName(), lBranch); } } git_strarray_free(&lBranchNames); } kup-backup-0.7.1+dfsg/kioslave/bupvfs.h000066400000000000000000000120521322613417100177730ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #ifndef BUPVFS_H #define BUPVFS_H #include #include #include #include #include "vfshelpers.h" class Node: public QObject, public Metadata { Q_OBJECT public: Node(QObject *pParent, const QString &pName, quint64 pMode); virtual ~Node() {} virtual int readMetadata(VintStream &pMetadataStream); Node *resolve(const QString &pPath, bool pFollowLinks = false); Node *resolve(const QStringList &pPathList, bool pFollowLinks = false); QString completePath(); Node *parentCommit(); // Node *parentRepository(); QString mMimeType; protected: static git_revwalk *mRevisionWalker; static git_repository *mRepository; }; typedef QHash NodeMap; typedef QHashIterator NodeMapIterator; class Directory: public Node { Q_OBJECT public: Directory(QObject *pParent, const QString &pName, quint64 pMode); virtual ~Directory() { if(mSubNodes != NULL) { delete mSubNodes; } } virtual NodeMap subNodes(); virtual void reload() {} protected: virtual void generateSubNodes() {} NodeMap *mSubNodes; }; class File: public Node { Q_OBJECT public: File(QObject *pParent, const QString &pName, quint64 pMode) :Node(pParent, pName, pMode) { mOffset = 0; mCachedSize = 0; } virtual quint64 size() { if(mCachedSize == 0) { mCachedSize = calculateSize(); } return mCachedSize; } virtual int seek(quint64 pOffset) { if(pOffset >= size()) { return KIO::ERR_COULD_NOT_SEEK; } mOffset = pOffset; return 0; // success } virtual int read(QByteArray &pChunk, int pReadSize = -1) = 0; virtual int readMetadata(VintStream &pMetadataStream); protected: virtual quint64 calculateSize() = 0; quint64 mOffset; quint64 mCachedSize; }; class BlobFile: public File { Q_OBJECT public: BlobFile(Node *pParent, const git_oid *pOid, const QString &pName, quint64 pMode); virtual ~BlobFile(); virtual int read(QByteArray &pChunk, int pReadSize = -1); protected: git_blob *cachedBlob(); virtual quint64 calculateSize(); git_oid mOid; git_blob *mBlob; }; class Symlink: public BlobFile { Q_OBJECT public: Symlink(Node *pParent, const git_oid *pOid, const QString &pName, quint64 pMode) : BlobFile(pParent, pOid, pName, pMode) { QByteArray lArray; if(0 == read(lArray)) { mSymlinkTarget = QString::fromUtf8(lArray.data(), lArray.size()); seek(0); } } }; class ChunkFile: public File { Q_OBJECT public: ChunkFile(Node *pParent, const git_oid *pOid, const QString &pName, quint64 pMode); virtual ~ChunkFile(); virtual int seek(quint64 pOffset); virtual int read(QByteArray &pChunk, int pReadSize = -1); protected: virtual quint64 calculateSize(); git_oid mOid; git_blob *mCurrentBlob; struct TreePosition { TreePosition(git_tree *pTree); ~TreePosition(); git_tree *mTree; uint mIndex; int mSkipSize; }; QList mPositionStack; bool mValidSeekPosition; }; class ArchivedDirectory: public Directory { Q_OBJECT public: ArchivedDirectory(Node *pParent, const git_oid *pOid, const QString &pName, quint64 pMode); protected: virtual void generateSubNodes(); git_oid mOid; git_blob *mMetadataBlob; git_tree *mTree; VintStream *mMetadataStream; }; class Branch: public Directory { Q_OBJECT public: Branch(Node *pParent, const char *pName); virtual void reload(); protected: virtual void generateSubNodes(); QByteArray mRefName; }; class Repository: public Directory { Q_OBJECT public: Repository(QObject *pParent, const QString &pRepositoryPath); virtual ~Repository(); bool isValid() { return mRepository != NULL && mRevisionWalker != NULL; } protected: virtual void generateSubNodes(); }; #endif // BUPVFS_H kup-backup-0.7.1+dfsg/kioslave/vfshelpers.cpp000066400000000000000000000156711322613417100212140ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include "vfshelpers.h" #include #include #include #include #include #define RECORD_END 0 #define RECORD_PATH 1 #define RECORD_COMMON 2 // times, user, group, type, perms, etc. (legacy version 1) #define RECORD_SYMLINK_TARGET 3 #define RECORD_POSIX1E_ACL 4 // getfacl(1), setfacl(1), etc. #define RECORD_NFSV4_ACL 5 // intended to supplant posix1e acls? #define RECORD_LINUX_ATTR 6 // lsattr(1) chattr(1) #define RECORD_LINUX_XATTR 7 // getfattr(1) setfattr(1) #define RECORD_HARDLINK_TARGET 8 // hard link target #define RECORD_COMMON_V2 9 // times, user, group, type, perms, etc. VintStream::VintStream(const void *pData, int pSize, QObject *pParent) : QObject(pParent) { mByteArray = QByteArray::fromRawData((char *)pData, pSize); mBuffer = new QBuffer(&mByteArray, this); mBuffer->open(QIODevice::ReadOnly); } VintStream &VintStream::operator>>(qint64 &pInt) { char c; if(!mBuffer->getChar(&c)) { throw 1; } int lOffset = 6; bool lNegative = (c & 0x40); pInt = c & 0x3F; while(c & 0x80) { if(!mBuffer->getChar(&c)) { throw 1; } pInt |= (c & 0x7F) << lOffset; lOffset += 7; } if(lNegative) { pInt = -pInt; } return *this; } VintStream &VintStream::operator >>(quint64 &pInt) { char c; int lOffset = 0; pInt = 0; do { if(!mBuffer->getChar(&c)) { throw 1; } pInt |= (c & 0x7F) << lOffset; lOffset += 7; } while(c & 0x80); return *this; } VintStream &VintStream::operator >>(QString &pString) { QByteArray lBytes; *this >> lBytes; pString = QString::fromUtf8(lBytes); return *this; } VintStream &VintStream::operator >>(QByteArray &pByteArray) { quint64 lByteCount; *this >> lByteCount; pByteArray.resize(lByteCount); if(mBuffer->read(pByteArray.data(), pByteArray.length()) < pByteArray.length()) { throw 1; } return *this; } quint64 Metadata::mDefaultUid; quint64 Metadata::mDefaultGid; bool Metadata::mDefaultsResolved = false; Metadata::Metadata(quint64 pMode) { mMode = pMode; mAtime = 0; mMtime = 0; if(!mDefaultsResolved) { mDefaultUid = getuid(); mDefaultGid = getgid(); mDefaultsResolved = true; } mUid = mDefaultUid; mGid = mDefaultGid; } int readMetadata(VintStream &pMetadataStream, Metadata &pMetadata) { try { quint64 lTag; do { pMetadataStream >> lTag; switch(lTag) { case RECORD_COMMON: { qint64 lNotUsedInt; quint64 lNotUsedUint, lTempUint; QString lNotUsedString; pMetadataStream >> lNotUsedUint >> lTempUint; pMetadata.mMode = lTempUint; pMetadataStream >> lTempUint >> lNotUsedString; // user name pMetadata.mUid = lTempUint; pMetadataStream >> lTempUint >> lNotUsedString; // group name pMetadata.mGid = lTempUint; pMetadataStream >> lNotUsedUint; // device number pMetadataStream >> pMetadata.mAtime >> lNotUsedUint; //nanoseconds pMetadataStream >> pMetadata.mMtime >> lNotUsedUint; // nanoseconds pMetadataStream >> lNotUsedInt >> lNotUsedUint; // status change time break; } case RECORD_COMMON_V2: { qint64 lNotUsedInt; quint64 lNotUsedUint; QString lNotUsedString; pMetadataStream >> lNotUsedUint >> pMetadata.mMode; pMetadataStream >> pMetadata.mUid >> lNotUsedString; // user name pMetadataStream >> pMetadata.mGid >> lNotUsedString; // group name pMetadataStream >> lNotUsedInt; // device number pMetadataStream >> pMetadata.mAtime >> lNotUsedUint; //nanoseconds pMetadataStream >> pMetadata.mMtime >> lNotUsedUint; // nanoseconds pMetadataStream >> lNotUsedInt >> lNotUsedUint; // status change time break; } case RECORD_SYMLINK_TARGET: { pMetadataStream >> pMetadata.mSymlinkTarget; break; } default: { if(lTag != RECORD_END) { QByteArray lNotUsed; pMetadataStream >> lNotUsed; } break; } } } while(lTag != RECORD_END); } catch(int) { return 1; } return 0; // success } quint64 calculateChunkFileSize(const git_oid *pOid, git_repository *pRepository) { quint64 lLastChunkOffset = 0; quint64 lLastChunkSize = 0; uint lMode; do { git_tree *lTree; if(0 != git_tree_lookup(&lTree, pRepository, pOid)) { return 0; } uint lEntryCount = git_tree_entrycount(lTree); const git_tree_entry *lEntry = git_tree_entry_byindex(lTree, lEntryCount - 1); quint64 lEntryOffset; if(!offsetFromName(lEntry, lEntryOffset)) { git_tree_free(lTree); return 0; } lLastChunkOffset += lEntryOffset; pOid = git_tree_entry_id(lEntry); lMode = git_tree_entry_filemode(lEntry); git_tree_free(lTree); } while(S_ISDIR(lMode)); git_blob *lBlob; if(0 != git_blob_lookup(&lBlob, pRepository, pOid)) { return 0; } lLastChunkSize = git_blob_rawsize(lBlob); git_blob_free(lBlob); return lLastChunkOffset + lLastChunkSize; } bool offsetFromName(const git_tree_entry *pEntry, quint64 &pUint) { bool lParsedOk; pUint = QString::fromUtf8(git_tree_entry_name(pEntry)).toULongLong(&lParsedOk, 16); return lParsedOk; } void getEntryAttributes(const git_tree_entry *pTreeEntry, uint &pMode, bool &pChunked, const git_oid *&pOid, QString &pName) { pMode = git_tree_entry_filemode(pTreeEntry); pOid = git_tree_entry_id(pTreeEntry); pName = QString::fromUtf8(git_tree_entry_name(pTreeEntry)); pChunked = false; if(pName.endsWith(QStringLiteral(".bupl"))) { pName.chop(5); } else if(pName.endsWith(QStringLiteral(".bup"))) { pName.chop(4); pMode = DEFAULT_MODE_FILE; pChunked = true; } } QString vfsTimeToString(git_time_t pTime) { QDateTime lDateTime; lDateTime.setTime_t(pTime); return lDateTime.toLocalTime().toString(QStringLiteral("yyyy-MM-dd hh:mm")); } kup-backup-0.7.1+dfsg/kioslave/vfshelpers.h000066400000000000000000000051511322613417100206510ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #ifndef VFSHELPERS_H #define VFSHELPERS_H #include #include class QBuffer; #include #define DEFAULT_MODE_DIRECTORY 0040755 #define DEFAULT_MODE_FILE 0100644 class VintStream: public QObject { Q_OBJECT public: VintStream(const void *pData, int pSize, QObject *pParent); VintStream &operator>>(qint64 &pInt); VintStream &operator>>(quint64 &pUint); VintStream &operator>>(QString &pString); VintStream &operator>>(QByteArray &pByteArray); protected: QByteArray mByteArray; QBuffer *mBuffer; }; struct Metadata { Metadata() {} Metadata(quint64 pMode); qint64 mMode; qint64 mUid; qint64 mGid; qint64 mAtime; qint64 mMtime; QString mSymlinkTarget; static quint64 mDefaultUid; static quint64 mDefaultGid; static bool mDefaultsResolved; }; int readMetadata(VintStream &pMetadataStream, Metadata &pMetadata); quint64 calculateChunkFileSize(const git_oid *pOid, git_repository *pRepository); bool offsetFromName(const git_tree_entry *pEntry, quint64 &pUint); void getEntryAttributes(const git_tree_entry *pTreeEntry, uint &pMode, bool &pChunked, const git_oid *&pOid, QString &pName); QString vfsTimeToString(git_time_t pTime); #endif // VFSHELPERS_H kup-backup-0.7.1+dfsg/plasmoid/000077500000000000000000000000001322613417100163105ustar00rootroot00000000000000kup-backup-0.7.1+dfsg/plasmoid/contents/000077500000000000000000000000001322613417100201455ustar00rootroot00000000000000kup-backup-0.7.1+dfsg/plasmoid/contents/ui/000077500000000000000000000000001322613417100205625ustar00rootroot00000000000000kup-backup-0.7.1+dfsg/plasmoid/contents/ui/FullRepresentation.qml000066400000000000000000000074201322613417100251250ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ import QtQuick 2.2 import QtQuick.Layouts 1.1 import org.kde.plasma.core 2.0 as PlasmaCore import org.kde.plasma.components 2.0 as PlasmaComponents import org.kde.plasma.extras 2.0 as PlasmaExtras Item { Layout.minimumWidth: units.gridUnit * 12 Layout.minimumHeight: units.gridUnit * 12 PlasmaExtras.Heading { width: parent.width level: 3 opacity: 0.6 text: getCommonStatus("no plan reason", "") visible: planCount == 0 } ColumnLayout { anchors.fill: parent PlasmaExtras.ScrollArea { Layout.fillWidth: true Layout.fillHeight: true ListView { model: planCount delegate: planDelegate boundsBehavior: Flickable.StopAtBounds } } } Component { id: planDelegate Column { width: parent.width spacing: theme.defaultFont.pointSize RowLayout { width: parent.width Column { Layout.fillWidth: true PlasmaExtras.Heading { level: 3 text: getPlanStatus(index, "description") } PlasmaExtras.Heading { level: 4 text: getPlanStatus(index, "status heading") } PlasmaExtras.Paragraph { text: getPlanStatus(index, "status details") } } PlasmaCore.IconItem { source: getPlanStatus(index, "icon name") Layout.alignment: Qt.AlignRight | Qt.AlignTop Layout.preferredWidth: units.iconSizes.huge Layout.preferredHeight: units.iconSizes.huge } } Flow { width: parent.width spacing: theme.defaultFont.pointSize PlasmaComponents.Button { text: i18nd("kup", "Save new backup") visible: getPlanStatus(index, "destination available") && !getPlanStatus(index, "busy") onClicked: startOperation(index, "save backup") } PlasmaComponents.Button { text: i18nd("kup", "Show files") visible: getPlanStatus(index, "destination available") onClicked: startOperation(index, "show backup files") } PlasmaComponents.Button { text: i18nd("kup", "Show log file") visible: getPlanStatus(index, "log file exists") onClicked: startOperation(index, "show log file") } } } } function getPlanStatus(planNumber, key){ return backupPlans.data[planNumber.toString()][key]; } function startOperation(i, name) { var service = backupPlans.serviceForSource(i.toString()); var operation = service.operationDescription(name); service.startOperationCall(operation); } } kup-backup-0.7.1+dfsg/plasmoid/contents/ui/Main.qml000066400000000000000000000053011322613417100221600ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ import QtQuick 2.0 import org.kde.plasma.plasmoid 2.0 import org.kde.plasma.core 2.0 as PlasmaCore Item { Plasmoid.switchWidth: units.gridUnit * 10 Plasmoid.switchHeight: units.gridUnit * 10 Plasmoid.toolTipMainText: getCommonStatus("tooltip title", "Error") Plasmoid.toolTipSubText: getCommonStatus("tooltip subtitle", "No connection") Plasmoid.icon: getCommonStatus("tooltip icon name", "kup") Plasmoid.status: getCommonStatus("tray icon active", false) ? PlasmaCore.Types.ActiveStatus : PlasmaCore.Types.PassiveStatus PlasmaCore.DataSource { id: backupPlans engine: "backups" connectedSources: sources onSourceAdded: { disconnectSource(source); connectSource(source); } onSourceRemoved: { disconnectSource(source); } } function getCommonStatus(key, def){ var result = backupPlans.data["common"][key]; if(result === undefined) { result = def; } return result; } property int planCount: backupPlans.data["common"]["plan count"] Plasmoid.fullRepresentation: FullRepresentation {} Plasmoid.compactRepresentation: PlasmaCore.IconItem { source: "kup" width: units.iconSizes.medium; height: units.iconSizes.medium; MouseArea { anchors.fill: parent onClicked: plasmoid.expanded = !plasmoid.expanded } } } kup-backup-0.7.1+dfsg/plasmoid/metadata.desktop000066400000000000000000000024631322613417100214700ustar00rootroot00000000000000[Desktop Entry] Type=Service Icon=kup X-KDE-PluginInfo-Author=Simon Persson X-KDE-PluginInfo-Email=simon.persson@mykolab.com X-KDE-PluginInfo-Name=org.kde.kupapplet X-KDE-PluginInfo-Version=1.0 X-KDE-PluginInfo-Website=http://github.com/spersson/kup X-KDE-PluginInfo-Category=System Information X-KDE-PluginInfo-Depends= X-KDE-PluginInfo-License=GPL X-KDE-PluginInfo-EnabledByDefault=true X-KDE-ServiceTypes=Plasma/Applet X-Plasma-API=declarativeappletscript X-Plasma-MainScript=ui/Main.qml X-Plasma-NotificationArea=true X-Plasma-NotificationAreaCategory=SystemServices X-Plasma-DBusActivationService=org.kde.kupdaemon Name=Backup Status Name[cs]=Stav zálohování Name[da]=Backupstatus Name[de]=Zustand des Backups Name[it]=Stato Backup Name[nl_NL]=Back-upstatus Name[pl]=Status kopii zapasowej Name[pt_BR]=Estado do backup Name[sv]=Säkerhetskopiornas status Name[zh_TW]=備份狀態 Comment=Displays status of backup plans Comment[cs]=Zobrazí stav plánu záloh Comment[de]=Status der Backupkonfigurationen anzeigen Comment[it]=Mostra lo stato dei piani di backup Comment[nl_NL]=Status van back-upschema's weergeven Comment[pl]=Wyświetl status planów tworzenia kopii zapasowych Comment[pt_BR]=Exibe o estado dos planos de backup Comment[sv]=Visar status för säkerhetskopior Comment[zh_TW]=顯示備份計畫的狀態 kup-backup-0.7.1+dfsg/plasmoid/metadata.desktop.template000066400000000000000000000012551322613417100233000ustar00rootroot00000000000000[Desktop Entry] Type=Service Icon=kup X-KDE-PluginInfo-Author=Simon Persson X-KDE-PluginInfo-Email=simon.persson@mykolab.com X-KDE-PluginInfo-Name=org.kde.kupapplet X-KDE-PluginInfo-Version=1.0 X-KDE-PluginInfo-Website=http://github.com/spersson/kup X-KDE-PluginInfo-Category=System Information X-KDE-PluginInfo-Depends= X-KDE-PluginInfo-License=GPL X-KDE-PluginInfo-EnabledByDefault=true X-KDE-ServiceTypes=Plasma/Applet X-Plasma-API=declarativeappletscript X-Plasma-MainScript=ui/Main.qml X-Plasma-NotificationArea=true X-Plasma-NotificationAreaCategory=SystemServices X-Plasma-DBusActivationService=org.kde.kupdaemon _Name=Backup Status _Comment=Displays status of backup plans kup-backup-0.7.1+dfsg/po/000077500000000000000000000000001322613417100151165ustar00rootroot00000000000000kup-backup-0.7.1+dfsg/po/CMakeLists.txt000066400000000000000000000020721322613417100176570ustar00rootroot00000000000000FIND_PROGRAM(GETTEXT_MSGFMT_EXECUTABLE msgfmt) IF(NOT GETTEXT_MSGFMT_EXECUTABLE) MESSAGE( "------ NOTE: msgfmt not found. Translations will *not* be installed ------") ELSE(NOT GETTEXT_MSGFMT_EXECUTABLE) SET(catalogname kup) ADD_CUSTOM_TARGET(translations ALL) FILE(GLOB PO_FILES *.po) FOREACH(_poFile ${PO_FILES}) GET_FILENAME_COMPONENT(_poFileName ${_poFile} NAME) STRING(REGEX REPLACE "^${catalogname}_?" "" _langCode ${_poFileName} ) STRING(REGEX REPLACE "\\.po$" "" _langCode ${_langCode} ) IF( _langCode ) GET_FILENAME_COMPONENT(_lang ${_poFile} NAME_WE) SET(_gmoFile ${CMAKE_CURRENT_BINARY_DIR}/${_lang}.gmo) ADD_CUSTOM_COMMAND(TARGET translations COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} --check-header --check-domain -o ${_gmoFile} ${_poFile} DEPENDS ${_poFile}) INSTALL(FILES ${_gmoFile} DESTINATION ${LOCALE_INSTALL_DIR}/${_langCode}/LC_MESSAGES/ RENAME ${catalogname}.mo) ENDIF( _langCode ) ENDFOREACH(_poFile ${PO_FILES}) ENDIF(NOT GETTEXT_MSGFMT_EXECUTABLE) kup-backup-0.7.1+dfsg/po/bs_BA.po000066400000000000000000001234771322613417100164420ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Asmer Mlaćo , 2015 # Asmer Mlaćo , 2016-2017 msgid "" msgstr "" "Project-Id-Version: kup\n" "Report-Msgid-Bugs-To: http://kde-apps.org/content/show.php/Kup+Backup+System?" "content=147465\n" "POT-Creation-Date: 2018-01-05 16:00+0800\n" "PO-Revision-Date: 2017-09-22 07:54+0000\n" "Last-Translator: Asmer Mlaćo \n" "Language-Team: Bosnian (Bosnia and Herzegovina) (http://www.transifex.com/" "kup/kup/language/bs_BA/)\n" "Language: bs_BA\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" #: daemon/bupjob.cpp:47 daemon/buprepairjob.cpp:38 #: daemon/bupverificationjob.cpp:37 #, kde-kuit-format msgctxt "@info notification" msgid "" "The bup program is needed but could not be found, " "maybe it is not installed?" msgstr "" "Aplikacijabup potrebna za rad, ali nije nađena. " "Možda nije instalirana?" #: daemon/bupjob.cpp:52 daemon/buprepairjob.cpp:43 #, kde-kuit-format msgctxt "@info notification" msgid "" "The par2 program is needed but could not be " "found, maybe it is not installed?" msgstr "" "Aplikacijapar2 potrebna za rad, ali nije nađena. " "Možda nije instalirana?" #: daemon/bupjob.cpp:71 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup destination could not be initialised. See log file for more details." msgstr "" "Odredište za pohranu backupa ne može biti inicijalizirano. Za detaljan info, " "pogledajte log datoteku" #: daemon/bupjob.cpp:93 #, kde-format msgid "Checking backup integrity" msgstr "Provjeravam integritet backupa" #: daemon/bupjob.cpp:104 daemon/bupverificationjob.cpp:67 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups could be corrupted! See log file " "for more details. Do you want to try repairing the backup files?" msgstr "" "Provjera integriteta backupa neuspješna. Vaši backupi su vjerovatno " "oštećeni. Pogledajte log datoteku. Da li želite pokušati popravak backup " "datoteka?" #: daemon/bupjob.cpp:108 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups could be corrupted! See log file " "for more details." msgstr "" "Provjera integriteta backupa neuspješna. Vaši backupi su vjerovatno " "oštećeni. Pogledajte log datoteku za detalje." #: daemon/bupjob.cpp:131 daemon/rsyncjob.cpp:57 #, kde-format msgid "Checking what to copy" msgstr "" #: daemon/bupjob.cpp:138 #, kde-kuit-format msgctxt "@info notification" msgid "Failed to analyze files. See log file for more details." msgstr "" #: daemon/bupjob.cpp:159 daemon/bupjob.cpp:253 daemon/rsyncjob.cpp:175 #, kde-format msgid "Saving backup" msgstr "" #: daemon/bupjob.cpp:167 daemon/rsyncjob.cpp:120 #, kde-kuit-format msgctxt "@info notification" msgid "Failed to save backup. See log file for more details." msgstr "" #: daemon/bupjob.cpp:189 #, kde-format msgid "Generating recovery information" msgstr "" #: daemon/bupjob.cpp:197 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed to generate recovery info for the backup. See log file for more " "details." msgstr "" "Generisanje recovery informacije nije uspjelo. Za više informacija, " "pogledajte log datoteku." #: daemon/bupjob.cpp:254 daemon/rsyncjob.cpp:176 #, kde-format msgctxt "Label for file currently being copied" msgid "File" msgstr "Datoteka" #: daemon/buprepairjob.cpp:72 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup repair failed. Your backups could be corrupted! See log file for more " "details." msgstr "" "Popravka backup arhive nije uspjela. Backupi su vjerovatno oštećeni! " "Provjerite log datoteku." #: daemon/buprepairjob.cpp:76 #, kde-kuit-format msgctxt "@info notification" msgid "Success! Backup repair worked. See log file for more details." msgstr "" "Popravke na backupu su uspješne. Za detaljan info, pogledajte log datoteku." #: daemon/buprepairjob.cpp:80 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup repair was not necessary. Your backups are not corrupted.See log file " "for more details." msgstr "" "Popravljanje backupa nije potrebno. Backupi nisu oštećeni. Za detalje, " "provjerite log datoteku." #: daemon/buprepairjob.cpp:85 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup repair failed. Your backups could still be corrupted! See log file " "for more details." msgstr "" "Popravka backupa neuspješna. Backupi su najvjerovatnije oštećeni! Provjerite " "log datoteku za detalje." #: daemon/bupverificationjob.cpp:70 daemon/bupverificationjob.cpp:87 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups are corrupted! See log file for " "more details." msgstr "" "Provjera integriteta backupa neuspješna. Backupi su oštećeni! Provjerite log " "datoteku." #: daemon/bupverificationjob.cpp:76 #, kde-kuit-format msgctxt "@info notification" msgid "Backup integrity test was successful, Your backups are fine." msgstr "Test integriteta backupa usješan. Backupi su ispravni." #: daemon/bupverificationjob.cpp:83 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups are corrupted! See log file for " "more details. Do you want to try repairing the backup files?" msgstr "" "Provjera integriteta backupa neuspješna. Vaši backupi su oštećeni. " "Pogledajte log datoteku. Da li želite pokušati popravak backup datoteka?" #: daemon/edexecutor.cpp:115 daemon/edexecutor.cpp:124 #: daemon/edexecutor.cpp:160 daemon/fsexecutor.cpp:114 #: daemon/fsexecutor.cpp:146 #, kde-kuit-format msgctxt "@title:window" msgid "Problem" msgstr "Problem" #: daemon/edexecutor.cpp:116 daemon/fsexecutor.cpp:115 #, kde-kuit-format msgctxt "notification" msgid "Invalid type of backup in configuration." msgstr "Tip backupa u konfiguraciji nije validan." #: daemon/edexecutor.cpp:125 #, kde-kuit-format msgctxt "notification" msgid "You don't have write permission to backup destination." msgstr "Nemate permisije da pišete na backup odredište" #: daemon/kupdaemon.cpp:171 #, kde-format msgid "Continue" msgstr "Dalje" #: daemon/kupdaemon.cpp:173 #, kde-format msgid "Stop" msgstr "Zaustavi" #: daemon/kupdaemon.cpp:175 #, kde-format msgctxt "%1 is a text explaining the current activity" msgid "Currently busy: %1" msgstr "" #: daemon/kupdaemon.cpp:176 #, kde-format msgid "Do you really want to stop?" msgstr "" #: daemon/kupdaemon.cpp:179 #, kde-format msgid "User Backups" msgstr "" #: daemon/kupdaemon.cpp:249 #, kde-format msgctxt "status in tooltip" msgid "Backup destination not available" msgstr "Odredište za backup nije dostupno" #: daemon/kupdaemon.cpp:253 daemon/kupdaemon.cpp:310 #, kde-format msgid "No backup plans configured" msgstr "" #: daemon/kupdaemon.cpp:259 #, kde-format msgctxt "status in tooltip" msgid "Backup destination available" msgstr "Odredište za backup dostupno" #: daemon/kupdaemon.cpp:269 daemon/planexecutor.cpp:84 #, kde-format msgctxt "status in tooltip" msgid "Backup status OK" msgstr "Status backupa: OK" #: daemon/kupdaemon.cpp:276 daemon/planexecutor.cpp:86 #, kde-format msgctxt "status in tooltip" msgid "New backup suggested" msgstr "Predlažem novi backup" #: daemon/kupdaemon.cpp:283 daemon/planexecutor.cpp:88 #, kde-format msgctxt "status in tooltip" msgid "New backup neeeded" msgstr "Potreban novi backup" #: daemon/main.cpp:41 #, kde-kuit-format msgctxt "@info:shell Error message at startup" msgid "" "Kup is not enabled, enable it from the system settings module. You can do " "that by running kcmshell5 kup" msgstr "" "Kup nije omogućen, omogućite ga kroz System Setting modul. Možete to uraditi " "pokretanjem sljedeće komande: kcmshell5 kup" #: daemon/main.cpp:47 #, kde-kuit-format msgctxt "@title" msgid "Kup Daemon" msgstr "Kup daemon" #: daemon/main.cpp:48 #, kde-format msgid "" "Kup is a flexible backup solution using the backup storage system 'bup'. " "This allows it to quickly perform incremental backups, only saving the parts " "of files that has actually changed since last backup was taken." msgstr "" "Kup je fleksibilno backup rješenje koje koristi bup system pohrane podataka. " "To mu omogućava da brzo izvrši inkementalne backupe, pomoću kojih se " "spašavaju samo dijelovi datoteka koji su se promijenili od zadnjeg backupa." #: daemon/main.cpp:51 kcm/kupkcm.cpp:52 #, kde-format msgid "Copyright (C) 2011-2015 Simon Persson" msgstr "Copyright (C) 2011-2015 Simon Persson" #: daemon/main.cpp:53 filedigger/main.cpp:51 kcm/kupkcm.cpp:54 #, kde-format msgid "Simon Persson" msgstr "Simon Persson" #: daemon/main.cpp:54 filedigger/main.cpp:52 kcm/kupkcm.cpp:55 #, kde-kuit-format msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "Vaša imena" #: daemon/main.cpp:54 filedigger/main.cpp:52 kcm/kupkcm.cpp:56 #, kde-kuit-format msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "Vaši e-mailovi" #: daemon/planexecutor.cpp:76 #, kde-format msgctxt "status in tooltip" msgid "Saving backup" msgstr "" #: daemon/planexecutor.cpp:78 #, kde-format msgctxt "status in tooltip" msgid "Checking backup integrity" msgstr "Provjeravam integritet backupa" #: daemon/planexecutor.cpp:80 #, kde-format msgctxt "status in tooltip" msgid "Repairing backups" msgstr "Popravljam backupe" #: daemon/planexecutor.cpp:118 daemon/planexecutor.cpp:133 #, kde-kuit-format msgctxt "@info" msgid "Do you want to save a first backup now?" msgstr "Da li želite sada pokrenuti prvi backup?" #: daemon/planexecutor.cpp:121 #, kde-kuit-format msgctxt "@info" msgid "" "It has been %1 since last backup was saved.\n" "Save a new backup now?" msgstr "" "Već je prošlo %1 od zadnjeg backupa.\n" "Da li želite pokrenuti novi backup?" #: daemon/planexecutor.cpp:137 #, kde-kuit-format msgctxt "@info" msgid "" "You have been active for %1 since last backup was saved.\n" "Save a new backup now?" msgstr "" #: daemon/planexecutor.cpp:170 daemon/planexecutor.cpp:200 #: daemon/planexecutor.cpp:278 #, kde-kuit-format msgctxt "@action:button" msgid "Yes" msgstr "Da" #: daemon/planexecutor.cpp:170 daemon/planexecutor.cpp:201 #: daemon/planexecutor.cpp:279 #, kde-kuit-format msgctxt "@action:button" msgid "No" msgstr "Ne" #: daemon/planexecutor.cpp:192 #, kde-kuit-format msgctxt "@title:window" msgid "Saving of Backup Failed" msgstr "Neuspješna pohrana backupa" #: daemon/planexecutor.cpp:197 daemon/planexecutor.cpp:275 #: daemon/planexecutor.cpp:309 #, kde-kuit-format msgctxt "@action:button" msgid "Show log file" msgstr "Prikaži log datoteku" #: daemon/planexecutor.cpp:221 #, kde-kuit-format msgctxt "@title:window" msgid "Backup Saved" msgstr "" #: daemon/planexecutor.cpp:222 #, kde-kuit-format msgctxt "@info notification" msgid "Saving backup completed successfully." msgstr "" #: daemon/planexecutor.cpp:271 #, kde-kuit-format msgctxt "@title:window" msgid "Integrity Check Completed" msgstr "Provjera integriteta završena" #: daemon/planexecutor.cpp:306 #, kde-kuit-format msgctxt "@title:window" msgid "Repair Completed" msgstr "Popravka završena" #: daemon/planexecutor.cpp:337 po/rc.cpp:47 rc.cpp:47 #, kde-format msgid "Kup Backup System" msgstr "Kup Backup System" #: daemon/rsyncjob.cpp:48 #, kde-kuit-format msgctxt "@info notification" msgid "" "The rsync program is needed but could not be " "found, maybe it is not installed?" msgstr "" "Aplikacijarsync potrebna za rad, ali nije nađena. " "Možda nije instalirana?" #: filedigger/main.cpp:47 #, kde-kuit-format msgctxt "@title" msgid "File Digger" msgstr "File Digger" #: filedigger/main.cpp:48 #, kde-format msgid "Browser for bup archives." msgstr "Pretraživač bup arhiva" #: filedigger/main.cpp:49 #, kde-format msgid "Copyright (C) 2013-2015 Simon Persson" msgstr "Copyright (C) 2013-2015 Simon Persson" #: filedigger/main.cpp:59 #, kde-format msgid "Name of the branch to be opened." msgstr "Ime grane koju treba otvoriti." #: filedigger/main.cpp:61 #, kde-format msgid "Path to the bup repository to be opened." msgstr "Putanja do bup repozitorija koju treba otvoriti." #: filedigger/main.cpp:70 #, kde-format msgctxt "@info:shell Error message at startup" msgid "" "You must supply the path to a bup or git repository that you wish to open " "for viewing." msgstr "Morate dati putanju do bup ili git repozitorija kojeg želite otvoriti." #: filedigger/main.cpp:85 #, kde-kuit-format msgctxt "@info messagebox, %1 is a folder path" msgid "" "The backup archive %1 could not be opened. Check if the " "backups really are located there." msgstr "" "Backup arhiva %1 se ne može otvoriti. Provjerite da li " "su backupi stvarno locirani tamo." #: filedigger/main.cpp:92 #, kde-kuit-format msgctxt "@info messagebox" msgid "You do not have permission needed to read this backup archive." msgstr "Nemate permisije potrebne za čitanje ove backup arhive." #: filedigger/mergedvfs.cpp:108 #, kde-kuit-format msgctxt "@info messagebox" msgid "" "Could not read this backup archive. Perhaps some files have become " "corrupted. Do you want to run an integrity check to test this?" msgstr "" "Nije moguće pročitati ovu backup arhivu. Možda su datoteke oštećene. Da li " "želite pokrenuti provjeru integriteta arhive?" #: filedigger/mergedvfs.cpp:156 #, kde-kuit-format msgctxt "added after folder name in some cases" msgid " (folder)" msgstr " (folder)" #: filedigger/mergedvfs.cpp:158 #, kde-kuit-format msgctxt "added after file name in some cases" msgid " (symlink)" msgstr " (simbolički link)" #: filedigger/mergedvfs.cpp:160 #, kde-kuit-format msgctxt "added after file name in some cases" msgid " (file)" msgstr "(datoteka)" #: filedigger/restoredialog.cpp:115 kcm/backupplanwidget.cpp:451 #, kde-kuit-format msgctxt "@action:button" msgid "New Folder..." msgstr "Novi folder..." #: filedigger/restoredialog.cpp:141 filedigger/restoredialog.cpp:160 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "No destination was selected, please select one." msgstr "Nije odabrano odredište, molim odaberite ga." #: filedigger/restoredialog.cpp:251 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "There was a problem while getting a list of all files to restore: %1" msgstr "Desio se problem kod dobavljanja liste datoteka za restore: %1" #: filedigger/restoredialog.cpp:264 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "The destination does not have enough space available. Please choose a " "different destination or free some space." msgstr "" "Odredište nema dovoljno slobodnog prostora. Molim odaberite drugo odredište, " "ili oslobodite prostora na trenutnom odredištu." #: filedigger/restoredialog.cpp:274 #, kde-kuit-format msgctxt "" "added to the suggested filename when restoring, %1 is the time when backup " "was taken" msgid " - saved at %1" msgstr "- spašeno u %1" #: filedigger/restoredialog.cpp:275 #, kde-kuit-format msgctxt "@info" msgid "Folder already exists, please choose a solution" msgstr "Folder već postoji, odaberite rješenje" #: filedigger/restoredialog.cpp:281 #, kde-kuit-format msgctxt "@info" msgid "File already exists" msgstr "Datoteka već postoji" #: filedigger/restoredialog.cpp:294 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "The new name entered already exists, please enter a different one." msgstr "Ime koje ste unijeli već postoji, molim odaberite drugo ime." #: filedigger/restoredialog.cpp:371 kcm/dirselector.cpp:50 #, kde-kuit-format msgctxt "default folder name when creating a new folder" msgid "New Folder" msgstr "Novi folder" #: filedigger/restoredialog.cpp:376 kcm/dirselector.cpp:55 #, kde-kuit-format msgctxt "@title:window" msgid "New Folder" msgstr "Novi folder" #: filedigger/restoredialog.cpp:377 kcm/dirselector.cpp:56 #, kde-kuit-format msgctxt "@label:textbox" msgid "" "Create new folder in:\n" "%1" msgstr "" "Kreirajte novi folder u:\n" "%1" #: filedigger/restoredialog.cpp:390 kcm/dirselector.cpp:68 #, kde-format msgid "A folder named %1 already exists." msgstr "Folder sa nazivom %1 već postoji." #: filedigger/restoredialog.cpp:396 kcm/dirselector.cpp:74 #, kde-format msgid "You do not have permission to create %1." msgstr "Nemate permisije da kreirate %1" #: filedigger/restorejob.cpp:99 #, kde-kuit-format msgctxt "progress report, current operation" msgid "Restoring" msgstr "Vraćam" #: filedigger/restorejob.cpp:100 #, kde-kuit-format msgctxt "progress report, label" msgid "File:" msgstr "Datoteka:" #: filedigger/versionlistdelegate.cpp:135 #, kde-kuit-format msgctxt "@action:button" msgid "Open" msgstr "Otvori" #: filedigger/versionlistdelegate.cpp:137 #, kde-kuit-format msgctxt "@action:button" msgid "Restore" msgstr "Vrati" #: kcm/backupplanwidget.cpp:282 #, kde-kuit-format msgctxt "@action:button" msgid "Exclude Folder" msgstr "Isključi mapu" #: kcm/backupplanwidget.cpp:285 #, kde-kuit-format msgctxt "@action:button" msgid "Include Folder" msgstr "Uključi mapu" #: kcm/backupplanwidget.cpp:382 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "You don't have permission to read this folder: %1It cannot be included in the source selection. If it does not contain " "anything important to you, one possible solution is to exclude the folder " "from the backup plan." msgstr "" #: kcm/backupplanwidget.cpp:393 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "You don't have permission to read this file: %1It " "cannot be included in the source selection. If the file is not important to " "you, one possible solution is to exclude the whole folder where the file is " "stored from the backup plan." msgstr "" #: kcm/backupplanwidget.cpp:409 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "The symbolic link %1 is currently included but it " "points to a folder which is not: %2.That is " "probably not what you want. One solution is to simply include the target " "folder in the backup plan." msgstr "" #: kcm/backupplanwidget.cpp:417 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "The symbolic link %1 is currently included but it " "points to a file which is not: %2.That is probably " "not what you want. One solution is to simply include the folder where the " "file is stored in the backup plan." msgstr "" #: kcm/backupplanwidget.cpp:440 #, kde-kuit-format msgctxt "@title:window" msgid "Select Folder" msgstr "Odaberi folder" #: kcm/backupplanwidget.cpp:478 #, kde-kuit-format msgctxt "@label" msgid "Description:" msgstr "Opis" #: kcm/backupplanwidget.cpp:481 #, kde-kuit-format msgctxt "@action:button" msgid "Back to overview" msgstr "Nazad na pregled" #: kcm/backupplanwidget.cpp:510 #, kde-kuit-format msgctxt "@info" msgid "" "This type of backup is an archive. It contains both the " "latest version of your files and earlier backed up versions. Using this type " "of backup allows you to recover older versions of your files, or files which " "were deleted on your computer at a later time. The storage space needed is " "minimized by looking for common parts of your files between versions and " "only storing those parts once. Nevertheless, the backup archive will keep " "growing in size as time goes by.Also important to know is that the " "files in the archive can not be accessed directly with a general file " "manager, a special program is needed." msgstr "" "Ovaj tip backupa je arhiva. On sadrži zadnju, i sve " "prethodne verzije datoteka koje ste spasili. Korištenje ovog tipa backupa " "dozvoljava vraćanje starijih verzija vaših datoteka, ili datoteka koje su " "pobrisane sa vašeg kompjutera. " #: kcm/backupplanwidget.cpp:525 #, kde-kuit-format msgctxt "@option:radio" msgid "" "Versioned Backup (not available because bup is " "not installed)" msgstr "" "Verzionirani backup (nije dostupan jer bup nije " "instalirana)." #: kcm/backupplanwidget.cpp:530 #, kde-kuit-format msgctxt "@option:radio" msgid "Versioned Backup (recommended)" msgstr "Backup sa verzijama (preporučeno)" #: kcm/backupplanwidget.cpp:535 #, kde-kuit-format msgctxt "@info" msgid "" "This type of backup is a folder which is synchronized with your selected " "source folders. Taking a backup simply means making the backup destination " "contain an exact copy of your source folders as they are now and nothing " "else. If a file has been deleted in a source folder it will get deleted from " "the backup folder.This type of backup can protect you against data loss " "due to a broken hard drive but it does not help you to recover from your own " "mistakes." msgstr "" "Ovaj tip backupa je ustvari folder koji je sinhroniziran sa izvornim " "folderom kojeg želite spasiti. Odredišna datoteka sadrži identičnu kopiju " "izvornih foldera i ništa drugo. Ako izbrišete datoteku u izvornom folderu, " "datoteka će biti pobrisana i na odredištu. Ovaj tip backup-a može vas " "zaštititi od slučajnog gubitka podataka zbog oštećenog hard diska, ali ne " "može vas zaštititi od vlatitih grešaka." #: kcm/backupplanwidget.cpp:548 #, kde-kuit-format msgctxt "@option:radio" msgid "" "Synchronized Backup (not available because rsync " "is not installed)" msgstr "" "Backup sa sinhronizacijom (nije dostupan, jer rsync nije instaliran)" #: kcm/backupplanwidget.cpp:553 #, kde-kuit-format msgctxt "@option:radio" msgid "Synchronized Backup" msgstr "Sinhronizirani backup" #: kcm/backupplanwidget.cpp:581 #, kde-kuit-format msgctxt "@title" msgid "Backup Type" msgstr "Tip backup-a" #: kcm/backupplanwidget.cpp:582 #, kde-kuit-format msgctxt "@label" msgid "Select what type of backup you want" msgstr "Odaberite koji tip backup-a želite" #: kcm/backupplanwidget.cpp:590 #, kde-kuit-format msgctxt "@title" msgid "Sources" msgstr "Izvorišta" #: kcm/backupplanwidget.cpp:591 #, kde-kuit-format msgctxt "@label" msgid "Select which folders to include in backup" msgstr "Odaberite foldere koje želite uključiti u backup" #: kcm/backupplanwidget.cpp:605 #, kde-kuit-format msgctxt "@option:radio" msgid "Filesystem Path" msgstr "Putanja na file sistemu" #: kcm/backupplanwidget.cpp:606 #, kde-kuit-format msgctxt "@option:radio" msgid "External Storage" msgstr "Vanjska pohrana" #: kcm/backupplanwidget.cpp:612 #, kde-kuit-format msgctxt "@info" msgid "" "You can use this option for backing up to a secondary internal harddrive, an " "external eSATA drive or networked storage. The requirement is just that you " "always mount it at the same path in the filesystem. The path specified here " "does not need to exist at all times, its existance will be monitored." msgstr "" "Ovu opciju možete koristiti za backup na drugi hard disk, eksterni eSATA " "disk ili na mrežni uređaj. Jedino što je potrebno je da ga mountate uvijek " "na istu putanju. Putanja koju specificirate ovdje ne mora postojati, ali će " "biti monitorirana." #: kcm/backupplanwidget.cpp:619 #, kde-kuit-format msgctxt "@label:textbox" msgid "Destination Path for Backup:" msgstr "Odredišna putanja za backup" #: kcm/backupplanwidget.cpp:638 #, kde-kuit-format msgctxt "@info" msgid "" "Use this option if you want to backup your files on an external storage that " "can be plugged in to this computer, such as a USB hard drive or memory stick." msgstr "" "Koristite ovu opciju ako želite backup na eksterni disk koji je priključen " "na vaš kompjuter, kao što su USB hard disk i stik." #: kcm/backupplanwidget.cpp:648 kcm/backupplanwidget.cpp:652 #, kde-kuit-format msgctxt "@info:tooltip" msgid "The specified folder will be created if it does not exist." msgstr "Navedeni folder će biti kreiran ako ne postoji." #: kcm/backupplanwidget.cpp:650 #, kde-kuit-format msgctxt "@label:textbox" msgid "Folder on Destination Drive:" msgstr "Folder na odredišnom disku:" #: kcm/backupplanwidget.cpp:658 #, kde-kuit-format msgctxt "@info:tooltip" msgid "Open dialog to select a folder" msgstr "Otvorite dijalog da odaberete folder" #: kcm/backupplanwidget.cpp:688 #, kde-kuit-format msgctxt "@title" msgid "Destination" msgstr "Odredište" #: kcm/backupplanwidget.cpp:689 #, kde-kuit-format msgctxt "@label" msgid "Select the backup destination" msgstr "Odaberite odredište za backup" #: kcm/backupplanwidget.cpp:706 #, kde-kuit-format msgctxt "@option:radio" msgid "Manual Activation" msgstr "Ručna aktivacija" #: kcm/backupplanwidget.cpp:707 #, kde-kuit-format msgctxt "@option:radio" msgid "Interval" msgstr "Interval" #: kcm/backupplanwidget.cpp:708 #, kde-kuit-format msgctxt "@option:radio" msgid "Active Usage Time" msgstr "Aktivno vrijeme korištenja" #: kcm/backupplanwidget.cpp:710 #, kde-kuit-format msgctxt "@info" msgid "" "Backups are only taken when manually requested. This can be done by using " "the popup menu from the backup system tray icon." msgstr "" "Backupi će se izvršiti samo ako je to manualno zatraženo. Za ovo možete " "korititi meni u ikoni sistemskih obavještenja." #: kcm/backupplanwidget.cpp:724 #, kde-kuit-format msgctxt "@info" msgid "" "New backup will be triggered when backup destination becomes available and " "more than the configured interval has passed since the last backup was taken." msgstr "" "Novi backup će se pokrenuti kada odredište postane dostupno, i ako je prošlo " "više od konfigurisanog intervala otkako se desio zadnji backup." #: kcm/backupplanwidget.cpp:741 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Minutes" msgstr "Minuta" #: kcm/backupplanwidget.cpp:742 kcm/backupplanwidget.cpp:769 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Hours" msgstr "Sati" #: kcm/backupplanwidget.cpp:743 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Days" msgstr "Dana" #: kcm/backupplanwidget.cpp:744 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Weeks" msgstr "Sedmica" #: kcm/backupplanwidget.cpp:754 #, kde-kuit-format msgctxt "@info" msgid "" "New backup will be triggered when backup destination becomes available and " "you have been using your computer actively for more than the configured time " "limit since the last backup was taken." msgstr "" "Novi backup će se pokrenuti kada odredište postane dostupno, i ako je prošlo " "više od konfigurisanog intervala otkako aktivno koristite računar." #: kcm/backupplanwidget.cpp:775 #, kde-kuit-format msgctxt "@option:check" msgid "Ask for confirmation before taking backup" msgstr "Traži potvrdu prije pokretanja backup-a." #: kcm/backupplanwidget.cpp:794 #, kde-kuit-format msgctxt "@title" msgid "Schedule" msgstr "Raspored" #: kcm/backupplanwidget.cpp:795 #, kde-kuit-format msgctxt "@label" msgid "Specify the backup schedule" msgstr "Specificirajte raspored backup-a" #: kcm/backupplanwidget.cpp:808 #, kde-kuit-format msgctxt "@option:check" msgid "Show hidden folders in source selection" msgstr "Prikaži skrivene foldere kod odabira izvora backup-a" #: kcm/backupplanwidget.cpp:814 #, kde-kuit-format msgctxt "@info" msgid "" "This makes it possible to explicitly include or exclude hidden folders in " "the backup source selection. Hidden folders have a name that starts with a " "dot. They are typically located in your home folder and are used to store " "settings and temporary files for your applications." msgstr "" "Ovo omogućava da se eksplicitno uključe ili isključe skrivene datoteke kod " "odabira šta će ići u sigurnosnu kopiju. Skrivene mape imaju imena koja " "počinju sa tačkom. Obično su locirani u vašoj korisničkoj mapi, i služe da " "se drže postavke i privremene datateke vaših aplikacija." #: kcm/backupplanwidget.cpp:832 #, kde-kuit-format msgctxt "@info" msgid "" "This will make your backups use around 10% more storage space and saving " "backups will take slightly longer time. In return it will be possible to " "recover from a partially corrupted backup." msgstr "" "Ova opcija će povećati korištenje diska za 10%, i spašavanje sigurnosnih " "kopija će potrajati malo duže. Zbog ovoga će biti moguće spašavanje " "sigurnosnih kopija iz djelimično oštećenih kopija." #: kcm/backupplanwidget.cpp:838 #, kde-kuit-format msgctxt "@option:check" msgid "Generate recovery information" msgstr "Kreiraj informacije za oporavak" #: kcm/backupplanwidget.cpp:840 #, kde-kuit-format msgctxt "@option:check" msgid "" "Generate recovery information (not available because par2 is not installed)" msgstr "" "Generisanje inforamcija za oporavak (nije dostupno jer par2 nije instalirana)" #: kcm/backupplanwidget.cpp:856 #, kde-kuit-format msgctxt "@option:check" msgid "Verify integrity of backups" msgstr "Provjeri integritet backup-a" #: kcm/backupplanwidget.cpp:860 #, kde-kuit-format msgctxt "@info" msgid "" "Checks the whole backup archive for corruption every time you save new data. " "Saving backups will take a little bit longer time but it allows you to catch " "corruption problems sooner than at the time you need to use a backup, at " "that time it could be too late." msgstr "" "Provjerava cijelu sigurnosnu kopiju na oštećenja svaki put kada spašavate " "podatke. Spašavanje kopija će trajati malo duže, ali dopušta detekciju " "problema u slučaju oštećenja prije trenutka kada trebate vratiti sigurnosne " "kopije, a tada već može biti prekasno." #: kcm/backupplanwidget.cpp:882 #, kde-kuit-format msgctxt "@title" msgid "Advanced" msgstr "Napredno" #: kcm/backupplanwidget.cpp:883 #, kde-kuit-format msgctxt "@label" msgid "Extra options for advanced users" msgstr "Dodatne opcije za napredne korisnike" #: kcm/driveselection.cpp:275 #, kde-kuit-format msgctxt "@label Only shown if no drives are detected" msgid "" "Plug in the external storage you wish to use, then select it in this list." msgstr "" "Priključite vanjski disk koji želite koristiti i odaberite ga u ovoj listi" #: kcm/driveselectiondelegate.cpp:75 #, kde-kuit-format msgctxt "@item:inlistbox this text is added if selected drive is disconnected" msgid " (disconnected)" msgstr "(odspojen)" #: kcm/driveselectiondelegate.cpp:78 #, kde-kuit-format msgctxt "@label %1 is amount of free storage space of hard drive" msgid "%1 free" msgstr "%1 slobodno" #: kcm/driveselectiondelegate.cpp:92 #, kde-kuit-format msgctxt "" "@item:inlistbox used for unnamed filesystems, more than one filesystem on " "device. %1 is partition number, %2 is device description, %3 is either empty " "or the \" (disconnected)\" text" msgid "Partition %1 on %2%3" msgstr "Particija %1 na %2%3" #: kcm/driveselectiondelegate.cpp:95 #, kde-kuit-format msgctxt "" "@item:inlistbox used when there is only one unnamed filesystem on device. %1 " "is device description, %2 is either empty or the \" (disconnected)\" text" msgid "%1%2" msgstr "%1%2" #: kcm/driveselectiondelegate.cpp:99 #, kde-kuit-format msgctxt "" "@item:inlistbox %1 is filesystem label, %2 is the device description, %3 is " "either empty or the \" (disconnected)\" text" msgid "%1 on %2%3" msgstr "%1 on %2%3" #: kcm/driveselectiondelegate.cpp:106 #, kde-kuit-format msgctxt "@item:inlistbox %1 is drive(partition) label, %2 is storage capacity" msgid "%1: %2 total capacity" msgstr "%1: %2 ukupni kapacitet" #: kcm/driveselectiondelegate.cpp:153 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "" "Warning: Symbolic links and file permissions can not be saved to this file " "system. File permissions only matters if there is more than one user of this " "computer or if you are backing up executable program files." msgstr "" "Upozorenje: Simbolički linkovi i dozvole na datotekama ne mogu biti spašene " "na ovaj datotečni sistem. Dozvole na datotekama su bitne samo ako ima više " "korisnika ovog računara ili ako spašavate programe i izvršne datoteke." #: kcm/driveselectiondelegate.cpp:157 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "" "Warning: File permissions can not be saved to this file system. File " "permissions only matters if there is more than one user of this computer or " "if you are backing up executable program files." msgstr "" "Upozorenje: Dozvole na datotekama ne mogu biti spašene na ovaj datotečni " "sistem. Dozvole na datotekama su bitne samo ako ima više korisnika ovog " "računara ili ako spašavate programe i izvršne datoteke." #: kcm/folderselectionmodel.cpp:107 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "" "%1will be included in the backup, except for " "unchecked subfolders" msgstr "" "%1biće uključen u backup, osim subfoldera koji " "nemaju kvačicu." #: kcm/folderselectionmodel.cpp:111 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "%1will be included in the backup" msgstr "%1će biti uključen u backup" #: kcm/folderselectionmodel.cpp:115 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "" "%1 will not be included in " "the backup but contains folders that will" msgstr "" "%1 neće biti uključen u " "backup, ali sadrži foldere koji će biti uključeni." #: kcm/folderselectionmodel.cpp:119 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "" "%1 will not be included in " "the backup" msgstr "" "%1 neće biti uključen u " "backup." #: kcm/kupkcm.cpp:49 #, kde-format msgid "Kup Configuration Module" msgstr "Konfiguracijski modul aplikacije Kup" #: kcm/kupkcm.cpp:51 #, kde-format msgid "Configuration of backup plans for the Kup backup system" msgstr "Postavka planova za sigurnosne kopijeza Kup backup sistem" #: kcm/kupkcm.cpp:54 #, kde-format msgid "Maintainer" msgstr "Održavatelj" #: kcm/kupkcm.cpp:87 #, kde-format msgid "" "

Backup programs are missing

Before you can activate any backup " "plan you need to install either of

  • bup, for versioned backups
  • rsync, for synchronized backups
" msgstr "" "

Nedostaju programi za backup

Prije nego možete aktivirati bilo " "koji plan sigurnosnih kopija, morate instalirati ili

  • bup, za " "verzionirane kopije ili
  • rsync, za sinhronizovane kopije
" #: kcm/kupkcm.cpp:168 #, kde-kuit-format msgctxt "@title:window" msgid "Warning" msgstr "Upozorenje" #: kcm/kupkcm.cpp:170 #, kde-kuit-format msgctxt "@info %1 is the name of the backup plan" msgid "" "%1 does not have a destination!No backups will be saved by this plan." msgstr "" "%1 nema odredište!Rezervne kopije iz ove specifikacije neće biti " "spašene." #: kcm/kupkcm.cpp:227 #, kde-kuit-format msgctxt "@action:button" msgid "Add New Plan" msgstr "Dodaj novi plan" #: kcm/kupkcm.cpp:238 #, kde-kuit-format msgctxt "@option:check" msgid "Backups Enabled" msgstr "Backupi uključeni" #: kcm/planstatuswidget.cpp:48 #, kde-kuit-format msgctxt "@action:button" msgid "Configure" msgstr "Podesi" #: kcm/planstatuswidget.cpp:51 #, kde-kuit-format msgctxt "@action:button" msgid "Remove" msgstr "Ukloni" #: kcm/planstatuswidget.cpp:54 #, kde-kuit-format msgctxt "@action:button" msgid "Duplicate" msgstr "" #: kioslave/bupslave.cpp:92 kioslave/bupslave.cpp:149 kioslave/bupslave.cpp:186 #: kioslave/bupslave.cpp:249 kioslave/bupslave.cpp:271 #, kde-format msgid "" "No bup repository found.\n" "%1" msgstr "" "bup repozitorij nije pronađen.\n" "%1" #: plasmoid/contents/ui/FullRepresentation.qml:88 #, kde-format msgid "Save new backup" msgstr "" #: plasmoid/contents/ui/FullRepresentation.qml:94 #, kde-format msgid "Show files" msgstr "" #: plasmoid/contents/ui/FullRepresentation.qml:99 #, kde-format msgid "Show log file" msgstr "" #. i18n: file: filedigger/restoredialog.ui:14 #. i18n: ectx: property (windowTitle), widget (QDialog, RestoreDialog) #: po/rc.cpp:3 rc.cpp:3 #, kde-format msgctxt "@title:window" msgid "Restore Guide" msgstr "Vodič za povratak podataka" #. i18n: file: filedigger/restoredialog.ui:55 #. i18n: ectx: property (text), widget (QPushButton, mRestoreOriginalButton) #: po/rc.cpp:6 rc.cpp:6 #, kde-format msgctxt "@action:button" msgid "Restore to original location" msgstr "Vratite na originalnu lokaciju" #. i18n: file: filedigger/restoredialog.ui:78 #. i18n: ectx: property (text), widget (QPushButton, mRestoreCustomButton) #: po/rc.cpp:9 rc.cpp:9 #, kde-format msgctxt "@action:button" msgid "Choose where to restore" msgstr "Odaberite gdje vratiti" #. i18n: file: filedigger/restoredialog.ui:132 #. i18n: ectx: property (text), widget (QPushButton, mDestBackButton) #: po/rc.cpp:12 rc.cpp:12 #, kde-format msgctxt "@action:button" msgid "Back" msgstr "Nazad" #. i18n: file: filedigger/restoredialog.ui:144 #. i18n: ectx: property (text), widget (QPushButton, mDestNextButton) #: po/rc.cpp:15 rc.cpp:15 #, kde-format msgctxt "@action:button" msgid "Next" msgstr "Naprijed" #. i18n: file: filedigger/restoredialog.ui:175 #. i18n: ectx: property (text), widget (QRadioButton, mNewNameRadioButton) #: po/rc.cpp:18 rc.cpp:18 #, kde-format msgctxt "@option:radio " msgid "Restore the folder under a new name" msgstr "Vrati folder pod novim imenom" #. i18n: file: filedigger/restoredialog.ui:208 #. i18n: ectx: property (text), widget (QRadioButton, mOverwriteRadioButton) #: po/rc.cpp:21 rc.cpp:21 #, kde-format msgctxt "@option:radio" msgid "Merge folders" msgstr "Udruži foldere" #. i18n: file: filedigger/restoredialog.ui:238 #. i18n: ectx: property (text), widget (QLabel, mConfirmOverwriteLabel) #: po/rc.cpp:24 rc.cpp:24 #, kde-format msgctxt "@info Question to user, in dialog" msgid "" "The following files would be overwritten, please confirm that you wish to " "continue." msgstr "" "Navedene datoteke će biti prepisane, molim potvrdite da želite nastaviti." #. i18n: file: filedigger/restoredialog.ui:274 #. i18n: ectx: property (text), widget (QPushButton, mOverwriteBackButton) #: po/rc.cpp:27 rc.cpp:27 #, kde-format msgctxt "@action:button go to previous page in dialog" msgid "Back" msgstr "Nazad" #. i18n: file: filedigger/restoredialog.ui:286 #. i18n: ectx: property (text), widget (QPushButton, mConfirmButton) #: po/rc.cpp:30 rc.cpp:30 #, kde-format msgctxt "@action:button User answers \"yes I confirm: overwrite files\"" msgid "Confirm" msgstr "Potvrdi" #. i18n: file: filedigger/restoredialog.ui:341 #. i18n: ectx: property (text), widget (QLabel, mErrorLabel) #: po/rc.cpp:33 rc.cpp:33 #, fuzzy, kde-format msgctxt "@label above the detailed error message" msgid "An error occured while restoring:" msgstr "Greška prilikom vraćanja podataka:" #. i18n: file: filedigger/restoredialog.ui:372 #. i18n: ectx: property (text), widget (QLabel, label) #: po/rc.cpp:36 rc.cpp:36 #, fuzzy, kde-format msgctxt "@label" msgid "Restoration completed successfully!" msgstr "Vraćanje podataka uspjelo!" #. i18n: file: filedigger/restoredialog.ui:413 #. i18n: ectx: property (text), widget (QPushButton, mOpenDestinationButton) #: po/rc.cpp:39 rc.cpp:39 #, kde-format msgid "Open Destination" msgstr "Otvori odredište" #. i18n: file: filedigger/restoredialog.ui:472 #. i18n: ectx: property (text), widget (QPushButton, mCloseButton) #: po/rc.cpp:42 rc.cpp:42 #, kde-format msgctxt "@action:button" msgid "Close" msgstr "Zatvori" #: po/rc.cpp:43 po/rc.cpp:58 settings/backupplan.cpp:69 rc.cpp:43 rc.cpp:58 #, kde-format msgid "Backups" msgstr "Backupi" #: po/rc.cpp:44 rc.cpp:44 msgid "Configure backup plans" msgstr "Podesite backup plan" #: po/rc.cpp:45 rc.cpp:45 msgid "backup,recovery,safety" msgstr "rezervna kopija, oporavak, sigurnost" #: po/rc.cpp:46 rc.cpp:46 msgid "Kup" msgstr "Kup" #: po/rc.cpp:48 rc.cpp:48 msgid "Start taking backup" msgstr "Pokrenite backup" #: po/rc.cpp:49 rc.cpp:49 msgid "A question if user wants to start taking a backup" msgstr "Pitanje da li korisnik želi da pokrene novi backup" #: po/rc.cpp:50 rc.cpp:50 msgid "Backup succeeded" msgstr "Backup uspješan" #: po/rc.cpp:51 rc.cpp:51 msgid "Saving of backup successfully completed" msgstr "Pohrana backupa završena" #: po/rc.cpp:52 rc.cpp:52 msgid "Backup failed" msgstr "Backup neuspješan" #: po/rc.cpp:53 rc.cpp:53 msgid "Saving of backup failed, offer user to see log file" msgstr "" "Spašavanje backupa nije uspjelo, ponuditi korisniku da pogleda log daTOTEKU" #: po/rc.cpp:54 rc.cpp:54 msgid "Integrity check completed" msgstr "Provjera integriteta završena" #: po/rc.cpp:55 rc.cpp:55 msgid "Finished checking integrity of backup archive" msgstr "Završena provjera integriteta backup arhive" #: po/rc.cpp:56 rc.cpp:56 msgid "Repair completed" msgstr "Popravka završena" #: po/rc.cpp:57 rc.cpp:57 msgid "Finished repairing backup archive" msgstr "Završen popravak backup arhive" #: po/rc.cpp:59 rc.cpp:59 msgid "Status of backup plans" msgstr "" #: po/rc.cpp:60 rc.cpp:60 msgid "Backup Status" msgstr "" #: po/rc.cpp:61 rc.cpp:61 msgid "Displays status of backup plans" msgstr "" #: settings/backupplan.cpp:38 #, kde-kuit-format msgctxt "" "@label Default name for a new backup plan, %1 is the number of the plan in " "order" msgid "Backup plan %1" msgstr "Backup plan %1" #: settings/backupplan.cpp:101 #, kde-format msgctxt "default description of newly duplicated backup plan" msgid "%1 (copy)" msgstr "" #: settings/backupplan.cpp:213 #, kde-format msgctxt "%1 is fancy formatted date" msgid "Last saved: %1" msgstr "" #: settings/backupplan.cpp:218 #, kde-format msgctxt "%1 is storage size of archive" msgid "Size: %1" msgstr "" #: settings/backupplan.cpp:223 #, kde-format msgctxt "%1 is free storage space" msgid "Free space: %1" msgstr "Slobodan prostor: %1" #: settings/backupplan.cpp:227 #, kde-kuit-format msgctxt "@label" msgid "This backup plan has never been run." msgstr "Ovaj backup plan nikad nije pokrenut." kup-backup-0.7.1+dfsg/po/cs.po000066400000000000000000001312651322613417100160730ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Pavel Borecki , 2017 msgid "" msgstr "" "Project-Id-Version: kup\n" "Report-Msgid-Bugs-To: http://kde-apps.org/content/show.php/Kup+Backup+System?" "content=147465\n" "POT-Creation-Date: 2018-01-05 16:00+0800\n" "PO-Revision-Date: 2017-09-22 13:44+0000\n" "Last-Translator: Pavel Borecki \n" "Language-Team: Czech (http://www.transifex.com/kup/kup/language/cs/)\n" "Language: cs\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" #: daemon/bupjob.cpp:47 daemon/buprepairjob.cpp:38 #: daemon/bupverificationjob.cpp:37 #, kde-kuit-format msgctxt "@info notification" msgid "" "The bup program is needed but could not be found, " "maybe it is not installed?" msgstr "" "Je zapotřebí programu bup ale ten není k nalezení " "– nejspíš není nainstalovaný?" #: daemon/bupjob.cpp:52 daemon/buprepairjob.cpp:43 #, kde-kuit-format msgctxt "@info notification" msgid "" "The par2 program is needed but could not be " "found, maybe it is not installed?" msgstr "" "Je zapotřebí programu par2 ale ten není k " "nalezení – nejspíš není nainstalovaný?" #: daemon/bupjob.cpp:71 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup destination could not be initialised. See log file for more details." msgstr "" "Cíl záloh se nepodařilo inicializovat. Podrobnosti naleznete v souboru se " "záznamem událostí (log)." #: daemon/bupjob.cpp:93 #, kde-format msgid "Checking backup integrity" msgstr "Kontroluje se neporušenost zálohy" #: daemon/bupjob.cpp:104 daemon/bupverificationjob.cpp:67 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups could be corrupted! See log file " "for more details. Do you want to try repairing the backup files?" msgstr "" "Kontrola neporušenosti zálohy nedopadla dobře. Vaše zálohy mohou být " "poškozené! Podrobnosti naleznete v souboru se záznamem událostí. Chcete se " "pokusit o opravu souborů se zálohou?" #: daemon/bupjob.cpp:108 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups could be corrupted! See log file " "for more details." msgstr "" "Kontrola neporušenosti zálohy nedopadla dobře. Vaše zálohy mohou být " "poškozené! Podrobnosti naleznete v souboru se záznamem událostí." #: daemon/bupjob.cpp:131 daemon/rsyncjob.cpp:57 #, kde-format msgid "Checking what to copy" msgstr "Zjišťování toho co zkopírovat" #: daemon/bupjob.cpp:138 #, kde-kuit-format msgctxt "@info notification" msgid "Failed to analyze files. See log file for more details." msgstr "" "Analýza souborů se nezdařila. Podrobnosti naleznete v souboru se záznamem " "událostí (log)." #: daemon/bupjob.cpp:159 daemon/bupjob.cpp:253 daemon/rsyncjob.cpp:175 #, kde-format msgid "Saving backup" msgstr "Ukládání zálohy" #: daemon/bupjob.cpp:167 daemon/rsyncjob.cpp:120 #, kde-kuit-format msgctxt "@info notification" msgid "Failed to save backup. See log file for more details." msgstr "" "Zálohu se nepodařilo uložit. Podrobnosti naleznete v souboru se záznamem " "události." #: daemon/bupjob.cpp:189 #, kde-format msgid "Generating recovery information" msgstr "Vytváření informací pro obnovení" #: daemon/bupjob.cpp:197 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed to generate recovery info for the backup. See log file for more " "details." msgstr "" "Nepodařilo se vytvořit informace pro obnovení ze zálohy. Podrobnosti " "naleznete v souboru se záznamem události." #: daemon/bupjob.cpp:254 daemon/rsyncjob.cpp:176 #, kde-format msgctxt "Label for file currently being copied" msgid "File" msgstr "Soubor" #: daemon/buprepairjob.cpp:72 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup repair failed. Your backups could be corrupted! See log file for more " "details." msgstr "" "Oprava zálohy se nezdařila. Vaše zálohy mohou být poškozené! Podrobnosti " "naleznete v souboru se záznamem události." #: daemon/buprepairjob.cpp:76 #, kde-kuit-format msgctxt "@info notification" msgid "Success! Backup repair worked. See log file for more details." msgstr "" "Úspěch! Oprava záloh se podařila. Podrobnosti naleznete v souboru se " "záznamem události." #: daemon/buprepairjob.cpp:80 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup repair was not necessary. Your backups are not corrupted.See log file " "for more details." msgstr "" "Oprava záloh nebyla potřebná. Vaše zálohy jsou v pořádku. Podrobnosti " "naleznete v souboru se záznamem události." #: daemon/buprepairjob.cpp:85 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup repair failed. Your backups could still be corrupted! See log file " "for more details." msgstr "" "Oprava zálohy se nezdařila. Vaše zálohy tak pořád mohou být poškozené! " "Podrobnosti naleznete v souboru se záznamem události." #: daemon/bupverificationjob.cpp:70 daemon/bupverificationjob.cpp:87 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups are corrupted! See log file for " "more details." msgstr "" "Kontrola neporušenosti zálohy nedopadla dobře. Vaše zálohy jsou poškozené! " "Podrobnosti naleznete v souboru se záznamem události." #: daemon/bupverificationjob.cpp:76 #, kde-kuit-format msgctxt "@info notification" msgid "Backup integrity test was successful, Your backups are fine." msgstr "" "Kontrola neporušenosti zálohy dopadla dobře, vaše zálohy jsou v pořádku." #: daemon/bupverificationjob.cpp:83 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups are corrupted! See log file for " "more details. Do you want to try repairing the backup files?" msgstr "" "Kontrola neporušenosti zálohy nedopadla dobře. Vaše zálohy jsou poškozené! " "Podrobnosti naleznete v souboru se záznamem událostí. Chcete se pokusit o " "opravu souborů se zálohou?" #: daemon/edexecutor.cpp:115 daemon/edexecutor.cpp:124 #: daemon/edexecutor.cpp:160 daemon/fsexecutor.cpp:114 #: daemon/fsexecutor.cpp:146 #, kde-kuit-format msgctxt "@title:window" msgid "Problem" msgstr "Problém" #: daemon/edexecutor.cpp:116 daemon/fsexecutor.cpp:115 #, kde-kuit-format msgctxt "notification" msgid "Invalid type of backup in configuration." msgstr "V nastaveních se nachází neplatný typ zálohy." #: daemon/edexecutor.cpp:125 #, kde-kuit-format msgctxt "notification" msgid "You don't have write permission to backup destination." msgstr "Chybí vám oprávnění k zápisu do cíle záloh." #: daemon/kupdaemon.cpp:171 #, kde-format msgid "Continue" msgstr "Pokračovat" #: daemon/kupdaemon.cpp:173 #, kde-format msgid "Stop" msgstr "Zastavit" #: daemon/kupdaemon.cpp:175 #, kde-format msgctxt "%1 is a text explaining the current activity" msgid "Currently busy: %1" msgstr "Nyní zaneprázdněno: %1" #: daemon/kupdaemon.cpp:176 #, kde-format msgid "Do you really want to stop?" msgstr "Opravdu chcete zastavit?" #: daemon/kupdaemon.cpp:179 #, kde-format msgid "User Backups" msgstr "Zálohy uživatelů" #: daemon/kupdaemon.cpp:249 #, kde-format msgctxt "status in tooltip" msgid "Backup destination not available" msgstr "Cíl záloh není dostupný" #: daemon/kupdaemon.cpp:253 daemon/kupdaemon.cpp:310 #, kde-format msgid "No backup plans configured" msgstr "Nejsou nastavené žádné plány záloh" #: daemon/kupdaemon.cpp:259 #, kde-format msgctxt "status in tooltip" msgid "Backup destination available" msgstr "Cíl záloh je dostupný" #: daemon/kupdaemon.cpp:269 daemon/planexecutor.cpp:84 #, kde-format msgctxt "status in tooltip" msgid "Backup status OK" msgstr "Záloha je v pořádku" #: daemon/kupdaemon.cpp:276 daemon/planexecutor.cpp:86 #, kde-format msgctxt "status in tooltip" msgid "New backup suggested" msgstr "Je doporučeno vytvořit novou zálohu" #: daemon/kupdaemon.cpp:283 daemon/planexecutor.cpp:88 #, kde-format msgctxt "status in tooltip" msgid "New backup neeeded" msgstr "Je třeba novou zálohu" #: daemon/main.cpp:41 #, kde-kuit-format msgctxt "@info:shell Error message at startup" msgid "" "Kup is not enabled, enable it from the system settings module. You can do " "that by running kcmshell5 kup" msgstr "" "Kup není zapnuté, zapněte ho z modulu nastavení systému. Provést je to možné " "spuštěním kcmshell5 kup" #: daemon/main.cpp:47 #, kde-kuit-format msgctxt "@title" msgid "Kup Daemon" msgstr "Proces služby Kup" #: daemon/main.cpp:48 #, kde-format msgid "" "Kup is a flexible backup solution using the backup storage system 'bup'. " "This allows it to quickly perform incremental backups, only saving the parts " "of files that has actually changed since last backup was taken." msgstr "" "Kup je přizpůsobivé zálohovací řešení využívající systém ukládání záloh " "„bup“. To umožňuje rychlé provádění přírůstkových záloh, kdy jsou ukládány " "pouze ty části souborů, které se skutečně změnily od okamžiku pořízení " "minulé zálohy." #: daemon/main.cpp:51 kcm/kupkcm.cpp:52 #, kde-format msgid "Copyright (C) 2011-2015 Simon Persson" msgstr "Copyright (C) 2011-2017 Simon Persson" #: daemon/main.cpp:53 filedigger/main.cpp:51 kcm/kupkcm.cpp:54 #, kde-format msgid "Simon Persson" msgstr "Simon Persson" #: daemon/main.cpp:54 filedigger/main.cpp:52 kcm/kupkcm.cpp:55 #, kde-kuit-format msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "Pavel Borecki" #: daemon/main.cpp:54 filedigger/main.cpp:52 kcm/kupkcm.cpp:56 #, kde-kuit-format msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "pavel.borecki@gmail.com" #: daemon/planexecutor.cpp:76 #, kde-format msgctxt "status in tooltip" msgid "Saving backup" msgstr "Ukládání záloh" #: daemon/planexecutor.cpp:78 #, kde-format msgctxt "status in tooltip" msgid "Checking backup integrity" msgstr "Kontrola neporušenosti záloh" #: daemon/planexecutor.cpp:80 #, kde-format msgctxt "status in tooltip" msgid "Repairing backups" msgstr "Oprava záloh" #: daemon/planexecutor.cpp:118 daemon/planexecutor.cpp:133 #, kde-kuit-format msgctxt "@info" msgid "Do you want to save a first backup now?" msgstr "Chcete nyní uložit první zálohu?" #: daemon/planexecutor.cpp:121 #, kde-kuit-format msgctxt "@info" msgid "" "It has been %1 since last backup was saved.\n" "Save a new backup now?" msgstr "" "Je tomu %1 od doby uložení poslední zálohy.\n" "Uložit nyní novou zálohu?" #: daemon/planexecutor.cpp:137 #, kde-kuit-format msgctxt "@info" msgid "" "You have been active for %1 since last backup was saved.\n" "Save a new backup now?" msgstr "" "Fungujete už %1 od doby uložení poslední zálohy.\n" "Uložit nyní novou zálohu?" #: daemon/planexecutor.cpp:170 daemon/planexecutor.cpp:200 #: daemon/planexecutor.cpp:278 #, kde-kuit-format msgctxt "@action:button" msgid "Yes" msgstr "Ano" #: daemon/planexecutor.cpp:170 daemon/planexecutor.cpp:201 #: daemon/planexecutor.cpp:279 #, kde-kuit-format msgctxt "@action:button" msgid "No" msgstr "Ne" #: daemon/planexecutor.cpp:192 #, kde-kuit-format msgctxt "@title:window" msgid "Saving of Backup Failed" msgstr "Uložení zálohy se nezdařilo" #: daemon/planexecutor.cpp:197 daemon/planexecutor.cpp:275 #: daemon/planexecutor.cpp:309 #, kde-kuit-format msgctxt "@action:button" msgid "Show log file" msgstr "Zobrazit soubor se záznamem událostí (log)" #: daemon/planexecutor.cpp:221 #, kde-kuit-format msgctxt "@title:window" msgid "Backup Saved" msgstr "Záloha uložena" #: daemon/planexecutor.cpp:222 #, kde-kuit-format msgctxt "@info notification" msgid "Saving backup completed successfully." msgstr "Ukládání záloh úspěšně dokončeno." #: daemon/planexecutor.cpp:271 #, kde-kuit-format msgctxt "@title:window" msgid "Integrity Check Completed" msgstr "Kontrola neporušenosti dokončena" #: daemon/planexecutor.cpp:306 #, kde-kuit-format msgctxt "@title:window" msgid "Repair Completed" msgstr "Oprava dokončena" #: daemon/planexecutor.cpp:337 po/rc.cpp:47 rc.cpp:47 #, kde-format msgid "Kup Backup System" msgstr "Zálohovací systém Kup" #: daemon/rsyncjob.cpp:48 #, kde-kuit-format msgctxt "@info notification" msgid "" "The rsync program is needed but could not be " "found, maybe it is not installed?" msgstr "" "Je zapotřebí program rsync ale ten není k " "nalezení – nejspíš není nainstalovaný?" #: filedigger/main.cpp:47 #, kde-kuit-format msgctxt "@title" msgid "File Digger" msgstr "Souborový archeolog" #: filedigger/main.cpp:48 #, kde-format msgid "Browser for bup archives." msgstr "Prohlížeč bup archivů" #: filedigger/main.cpp:49 #, kde-format msgid "Copyright (C) 2013-2015 Simon Persson" msgstr "Copyright (C) 2013-2017 Simon Persson" #: filedigger/main.cpp:59 #, kde-format msgid "Name of the branch to be opened." msgstr "Název větve kterou otevřít." #: filedigger/main.cpp:61 #, kde-format msgid "Path to the bup repository to be opened." msgstr "Popis umístění bup repozitáře který otevřít." #: filedigger/main.cpp:70 #, kde-format msgctxt "@info:shell Error message at startup" msgid "" "You must supply the path to a bup or git repository that you wish to open " "for viewing." msgstr "" "Je třeba zadat popis umístění bup nebo git repozitáře kterého obsah si " "chcete prohlížet." #: filedigger/main.cpp:85 #, kde-kuit-format msgctxt "@info messagebox, %1 is a folder path" msgid "" "The backup archive %1 could not be opened. Check if the " "backups really are located there." msgstr "" "Archiv se zálohou %1 se nepodařilo otevřít. Ověřte, že " "se zálohy skutečně nacházejí zde." #: filedigger/main.cpp:92 #, kde-kuit-format msgctxt "@info messagebox" msgid "You do not have permission needed to read this backup archive." msgstr "Nemáte potřebná oprávnění pro čtení tohoto archivu se zálohou." #: filedigger/mergedvfs.cpp:108 #, kde-kuit-format msgctxt "@info messagebox" msgid "" "Could not read this backup archive. Perhaps some files have become " "corrupted. Do you want to run an integrity check to test this?" msgstr "" "Archiv se zálohou se nepodařilo načíst. Některé soubory jsou nejspíš " "poškozené. Přejete si spustit test neporušenosti a ověřit to?" #: filedigger/mergedvfs.cpp:156 #, kde-kuit-format msgctxt "added after folder name in some cases" msgid " (folder)" msgstr "(složka)" #: filedigger/mergedvfs.cpp:158 #, kde-kuit-format msgctxt "added after file name in some cases" msgid " (symlink)" msgstr "(symbol. odkaz)" #: filedigger/mergedvfs.cpp:160 #, kde-kuit-format msgctxt "added after file name in some cases" msgid " (file)" msgstr "(soubor)" #: filedigger/restoredialog.cpp:115 kcm/backupplanwidget.cpp:451 #, kde-kuit-format msgctxt "@action:button" msgid "New Folder..." msgstr "Nová složka…" #: filedigger/restoredialog.cpp:141 filedigger/restoredialog.cpp:160 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "No destination was selected, please select one." msgstr "Není vybrán cíl – zvolte nějaký." #: filedigger/restoredialog.cpp:251 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "There was a problem while getting a list of all files to restore: %1" msgstr "" "Vyskytl se problém při získávání seznamu všech souborů které obnovit: %1" #: filedigger/restoredialog.cpp:264 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "The destination does not have enough space available. Please choose a " "different destination or free some space." msgstr "V cíli není dostatek volného místa. Zvolte jiný nebo místo uvolněte." #: filedigger/restoredialog.cpp:274 #, kde-kuit-format msgctxt "" "added to the suggested filename when restoring, %1 is the time when backup " "was taken" msgid " - saved at %1" msgstr " - uloženo v %1" #: filedigger/restoredialog.cpp:275 #, kde-kuit-format msgctxt "@info" msgid "Folder already exists, please choose a solution" msgstr "Složka už existuje, zvolte řešení" #: filedigger/restoredialog.cpp:281 #, kde-kuit-format msgctxt "@info" msgid "File already exists" msgstr "Soubor už existuje" #: filedigger/restoredialog.cpp:294 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "The new name entered already exists, please enter a different one." msgstr "Zadaný nový název už existuje, zadejte jiný." #: filedigger/restoredialog.cpp:371 kcm/dirselector.cpp:50 #, kde-kuit-format msgctxt "default folder name when creating a new folder" msgid "New Folder" msgstr "Nová složka" #: filedigger/restoredialog.cpp:376 kcm/dirselector.cpp:55 #, kde-kuit-format msgctxt "@title:window" msgid "New Folder" msgstr "Nová složka" #: filedigger/restoredialog.cpp:377 kcm/dirselector.cpp:56 #, kde-kuit-format msgctxt "@label:textbox" msgid "" "Create new folder in:\n" "%1" msgstr "" "Vytvořte novou složku v:\n" "%1" #: filedigger/restoredialog.cpp:390 kcm/dirselector.cpp:68 #, kde-format msgid "A folder named %1 already exists." msgstr "Složka nazvaná %1 už existuje." #: filedigger/restoredialog.cpp:396 kcm/dirselector.cpp:74 #, kde-format msgid "You do not have permission to create %1." msgstr "Nemáte potřebná oprávnění pro vytvoření %1." #: filedigger/restorejob.cpp:99 #, kde-kuit-format msgctxt "progress report, current operation" msgid "Restoring" msgstr "Obnovování" #: filedigger/restorejob.cpp:100 #, kde-kuit-format msgctxt "progress report, label" msgid "File:" msgstr "Soubor:" #: filedigger/versionlistdelegate.cpp:135 #, kde-kuit-format msgctxt "@action:button" msgid "Open" msgstr "Otevřít" #: filedigger/versionlistdelegate.cpp:137 #, kde-kuit-format msgctxt "@action:button" msgid "Restore" msgstr "Obnovit" #: kcm/backupplanwidget.cpp:282 #, kde-kuit-format msgctxt "@action:button" msgid "Exclude Folder" msgstr "Vynechat složku" #: kcm/backupplanwidget.cpp:285 #, kde-kuit-format msgctxt "@action:button" msgid "Include Folder" msgstr "Zahrnout složku" #: kcm/backupplanwidget.cpp:382 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "You don't have permission to read this folder: %1It cannot be included in the source selection. If it does not contain " "anything important to you, one possible solution is to exclude the folder " "from the backup plan." msgstr "" "Nemáte oprávnění pro čtení této složky: %1Ta proto " "nemůže být zahrnutá ve výběru zdroje. Pokud neobsahuje nic pro vás důležité, " "jedním z možných řešení je vynechat složku z plánu záloh." #: kcm/backupplanwidget.cpp:393 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "You don't have permission to read this file: %1It " "cannot be included in the source selection. If the file is not important to " "you, one possible solution is to exclude the whole folder where the file is " "stored from the backup plan." msgstr "" "Nemáte oprávnění pro čtení tohoto souboru: %1Ta " "proto nemůže být zahrnutá ve výběru zdroje. Pokud neobsahuje nic pro vás " "důležité, jedním z možných řešení je vynechat složku z plánu záloh." #: kcm/backupplanwidget.cpp:409 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "The symbolic link %1 is currently included but it " "points to a folder which is not: %2.That is " "probably not what you want. One solution is to simply include the target " "folder in the backup plan." msgstr "" "Symbolický odkaz %1 je nyní zahrnutý ale odkazuje na " "složku která zahrnutá není: %2.To nejspíš není to, " "co chcete. Jedním z řešení je prostě ji zahrnout do plánu záloh." #: kcm/backupplanwidget.cpp:417 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "The symbolic link %1 is currently included but it " "points to a file which is not: %2.That is probably " "not what you want. One solution is to simply include the folder where the " "file is stored in the backup plan." msgstr "" "Symbolický odkaz %1 je nyní zahrnutý ale odkazuje na soubor který zahrnutý " "není: %2.To nejspíš není to, co chcete. Jedním z řešení je prostě ho " "zahrnout do plánu záloh." #: kcm/backupplanwidget.cpp:440 #, kde-kuit-format msgctxt "@title:window" msgid "Select Folder" msgstr "Vyberte složku" #: kcm/backupplanwidget.cpp:478 #, kde-kuit-format msgctxt "@label" msgid "Description:" msgstr "Popis:" #: kcm/backupplanwidget.cpp:481 #, kde-kuit-format msgctxt "@action:button" msgid "Back to overview" msgstr "Zpět na přehled" #: kcm/backupplanwidget.cpp:510 #, kde-kuit-format msgctxt "@info" msgid "" "This type of backup is an archive. It contains both the " "latest version of your files and earlier backed up versions. Using this type " "of backup allows you to recover older versions of your files, or files which " "were deleted on your computer at a later time. The storage space needed is " "minimized by looking for common parts of your files between versions and " "only storing those parts once. Nevertheless, the backup archive will keep " "growing in size as time goes by.Also important to know is that the " "files in the archive can not be accessed directly with a general file " "manager, a special program is needed." msgstr "" "Tento typ zálohy je archiv. Obsahuje jak nejnovější " "verze vašich souborů, tak ty dříve zazálohované. Pomocí tohoto typu zálohy " "je možné obnovit starší verze vašich souborů, nebo souborů, které byly z " "počítače vymazány. Spotřeba úložného prostoru je snížena vyhledáváním " "společných částí souborů napříč jejich verzemi a ukládáním takových částí " "pouze jednou. Ale i tak bude velikost archivu časem růst.Je také " "důležité vědět, že k souborům k archivu se nedá přistupovat přímo z nějakého " "správce souborů, ale je zapotřebí speciálního programu." #: kcm/backupplanwidget.cpp:525 #, kde-kuit-format msgctxt "@option:radio" msgid "" "Versioned Backup (not available because bup is " "not installed)" msgstr "" "Verzovaná záloha (není k dispozici protože není nainstalován " "bup )" #: kcm/backupplanwidget.cpp:530 #, kde-kuit-format msgctxt "@option:radio" msgid "Versioned Backup (recommended)" msgstr "Verzovaná záloha (doporučeno)" #: kcm/backupplanwidget.cpp:535 #, kde-kuit-format msgctxt "@info" msgid "" "This type of backup is a folder which is synchronized with your selected " "source folders. Taking a backup simply means making the backup destination " "contain an exact copy of your source folders as they are now and nothing " "else. If a file has been deleted in a source folder it will get deleted from " "the backup folder.This type of backup can protect you against data loss " "due to a broken hard drive but it does not help you to recover from your own " "mistakes." msgstr "" "Tento typ záloh je složka která je synchronizována s vybranou zdrojovou " "složkou. Pořízení zálohy znamená vytvoření záložního umístění obsahujícího " "přesnou kopii zdrojových složek ve stávajícím stavu a nic víc. Pokud byl " "soubor smazán ve zdrojové složce, bude smazán také v záloze.Tento typ " "zálohy chrání proti ztrátě dat kvůli rozbité jednotce datového úložiště ale " "nepomůže v případě chyby uživatele." #: kcm/backupplanwidget.cpp:548 #, kde-kuit-format msgctxt "@option:radio" msgid "" "Synchronized Backup (not available because rsync " "is not installed)" msgstr "" "Synchronizovaná záloha (není k dispozici protože není nainstalován " "rsync )" #: kcm/backupplanwidget.cpp:553 #, kde-kuit-format msgctxt "@option:radio" msgid "Synchronized Backup" msgstr "Synchronizovaná záloha" #: kcm/backupplanwidget.cpp:581 #, kde-kuit-format msgctxt "@title" msgid "Backup Type" msgstr "Typ zálohy" #: kcm/backupplanwidget.cpp:582 #, kde-kuit-format msgctxt "@label" msgid "Select what type of backup you want" msgstr "Vyberte který typ zálohy chcete použít" #: kcm/backupplanwidget.cpp:590 #, kde-kuit-format msgctxt "@title" msgid "Sources" msgstr "Zdroje" #: kcm/backupplanwidget.cpp:591 #, kde-kuit-format msgctxt "@label" msgid "Select which folders to include in backup" msgstr "Vyberte které složky zahrnout do zálohy" #: kcm/backupplanwidget.cpp:605 #, kde-kuit-format msgctxt "@option:radio" msgid "Filesystem Path" msgstr "Popis umístění v souborovém systému" #: kcm/backupplanwidget.cpp:606 #, kde-kuit-format msgctxt "@option:radio" msgid "External Storage" msgstr "Vnější datové úložiště" #: kcm/backupplanwidget.cpp:612 #, kde-kuit-format msgctxt "@info" msgid "" "You can use this option for backing up to a secondary internal harddrive, an " "external eSATA drive or networked storage. The requirement is just that you " "always mount it at the same path in the filesystem. The path specified here " "does not need to exist at all times, its existance will be monitored." msgstr "" "Pomocí této předvolby je možné zálohovat na jinou vestavěnou jednotku " "datového úložiště, vnější eSATA jednotku nebo síťové úložiště. Jediné co je " "třeba je, aby bylo vždy připojené (mount) do stejného přípojného bodu. Zde " "zadaný popis umístění nemusí existovat trvale, jeho existence bude sledována." #: kcm/backupplanwidget.cpp:619 #, kde-kuit-format msgctxt "@label:textbox" msgid "Destination Path for Backup:" msgstr "Popis umístění cíle zálohy:" #: kcm/backupplanwidget.cpp:638 #, kde-kuit-format msgctxt "@info" msgid "" "Use this option if you want to backup your files on an external storage that " "can be plugged in to this computer, such as a USB hard drive or memory stick." msgstr "" "Tuto předvolbu použijte pokud chcete zálohovat své soubory na vnější " "úložiště, které se připojuje k počítači, jako například USB pevný disk nebo " "paměťová klíčenka." #: kcm/backupplanwidget.cpp:648 kcm/backupplanwidget.cpp:652 #, kde-kuit-format msgctxt "@info:tooltip" msgid "The specified folder will be created if it does not exist." msgstr "V případě že neexistuje, bude zadaná složka vytvořena." #: kcm/backupplanwidget.cpp:650 #, kde-kuit-format msgctxt "@label:textbox" msgid "Folder on Destination Drive:" msgstr "Složka na cílovém datovém úložišti:" #: kcm/backupplanwidget.cpp:658 #, kde-kuit-format msgctxt "@info:tooltip" msgid "Open dialog to select a folder" msgstr "Otevřít dialog pro výběr složky" #: kcm/backupplanwidget.cpp:688 #, kde-kuit-format msgctxt "@title" msgid "Destination" msgstr "Cíl" #: kcm/backupplanwidget.cpp:689 #, kde-kuit-format msgctxt "@label" msgid "Select the backup destination" msgstr "Vyberte cíl zálohy" #: kcm/backupplanwidget.cpp:706 #, kde-kuit-format msgctxt "@option:radio" msgid "Manual Activation" msgstr "Ruční aktivace" #: kcm/backupplanwidget.cpp:707 #, kde-kuit-format msgctxt "@option:radio" msgid "Interval" msgstr "Interval" #: kcm/backupplanwidget.cpp:708 #, kde-kuit-format msgctxt "@option:radio" msgid "Active Usage Time" msgstr "Doba aktivního používání" #: kcm/backupplanwidget.cpp:710 #, kde-kuit-format msgctxt "@info" msgid "" "Backups are only taken when manually requested. This can be done by using " "the popup menu from the backup system tray icon." msgstr "" "Zálohy jsou pořízeny pouze na ruční požadavek. Ten je možné vyvolat pomocí " "kontextové nabídky ikony zálohovacího systému v oznamovací oblasti " "systémového panelu." #: kcm/backupplanwidget.cpp:724 #, kde-kuit-format msgctxt "@info" msgid "" "New backup will be triggered when backup destination becomes available and " "more than the configured interval has passed since the last backup was taken." msgstr "" "Nová záloha bude spuštěna tím, že cíl zálohování bude dostupný a uplynul " "nastavený interval od minulé zálohy." #: kcm/backupplanwidget.cpp:741 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Minutes" msgstr "Minut" #: kcm/backupplanwidget.cpp:742 kcm/backupplanwidget.cpp:769 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Hours" msgstr "Hodin" #: kcm/backupplanwidget.cpp:743 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Days" msgstr "Dnů" #: kcm/backupplanwidget.cpp:744 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Weeks" msgstr "Týdnů" #: kcm/backupplanwidget.cpp:754 #, kde-kuit-format msgctxt "@info" msgid "" "New backup will be triggered when backup destination becomes available and " "you have been using your computer actively for more than the configured time " "limit since the last backup was taken." msgstr "" "Nová záloha bude spuštěna tím, že cíl zálohování bude dostupný a aktivně " "používáte počítač déle než nastavený limit od pořízení minulé zálohy." #: kcm/backupplanwidget.cpp:775 #, kde-kuit-format msgctxt "@option:check" msgid "Ask for confirmation before taking backup" msgstr "Před pořízením zálohy vyžadovat potvrzení" #: kcm/backupplanwidget.cpp:794 #, kde-kuit-format msgctxt "@title" msgid "Schedule" msgstr "Naplánovat" #: kcm/backupplanwidget.cpp:795 #, kde-kuit-format msgctxt "@label" msgid "Specify the backup schedule" msgstr "Zadejte plán zálohování" #: kcm/backupplanwidget.cpp:808 #, kde-kuit-format msgctxt "@option:check" msgid "Show hidden folders in source selection" msgstr "Ve výběru zdroje zobrazovat skryté složky" #: kcm/backupplanwidget.cpp:814 #, kde-kuit-format msgctxt "@info" msgid "" "This makes it possible to explicitly include or exclude hidden folders in " "the backup source selection. Hidden folders have a name that starts with a " "dot. They are typically located in your home folder and are used to store " "settings and temporary files for your applications." msgstr "" "Toto umožňuje výslovně zahrnout nebo vynechat skryté složky ve zdroji záloh. " "Skryté složky jsou ty, jejichž názvy začínají na tečku. Typicky se nacházejí " "v domovské složce a sloučí k ukládání nastavení a dočasných souborů vašich " "aplikací." #: kcm/backupplanwidget.cpp:832 #, kde-kuit-format msgctxt "@info" msgid "" "This will make your backups use around 10% more storage space and saving " "backups will take slightly longer time. In return it will be possible to " "recover from a partially corrupted backup." msgstr "" "Tímto zálohy zaberou přibližně 10% více místa a jejich ukládání bude trvat o " "chvilku déle. Na druhou stranu ale bude možné provést obnovu i z částečně " "poškozené zálohy." #: kcm/backupplanwidget.cpp:838 #, kde-kuit-format msgctxt "@option:check" msgid "Generate recovery information" msgstr "Vytvořit informace pro obnovení" #: kcm/backupplanwidget.cpp:840 #, kde-kuit-format msgctxt "@option:check" msgid "" "Generate recovery information (not available because par2 is not installed)" msgstr "" "Vytvoření informace pro obnovu (není k dispozici protože není nainstalován " "par2 )" #: kcm/backupplanwidget.cpp:856 #, kde-kuit-format msgctxt "@option:check" msgid "Verify integrity of backups" msgstr "Ověřit neporušenost záloh" #: kcm/backupplanwidget.cpp:860 #, kde-kuit-format msgctxt "@info" msgid "" "Checks the whole backup archive for corruption every time you save new data. " "Saving backups will take a little bit longer time but it allows you to catch " "corruption problems sooner than at the time you need to use a backup, at " "that time it could be too late." msgstr "" "Zkontroluje celý archiv se zálohou pokaždé když uložíte nová data. Ukládání " "záloh bude trvat o trochu déle ale podchytí to problémy s poškozením dříve, " "než budete zálohu potřebovat použít, což už by mohlo být pozdě." #: kcm/backupplanwidget.cpp:882 #, kde-kuit-format msgctxt "@title" msgid "Advanced" msgstr "Pokročilé" #: kcm/backupplanwidget.cpp:883 #, kde-kuit-format msgctxt "@label" msgid "Extra options for advanced users" msgstr "Další předvolby pro pokročilé uživatele" #: kcm/driveselection.cpp:275 #, kde-kuit-format msgctxt "@label Only shown if no drives are detected" msgid "" "Plug in the external storage you wish to use, then select it in this list." msgstr "" "Připojte vnější úložiště které chcete použít a pak ho vyberte ze seznamu." #: kcm/driveselectiondelegate.cpp:75 #, kde-kuit-format msgctxt "@item:inlistbox this text is added if selected drive is disconnected" msgid " (disconnected)" msgstr "(odpojeno)" #: kcm/driveselectiondelegate.cpp:78 #, kde-kuit-format msgctxt "@label %1 is amount of free storage space of hard drive" msgid "%1 free" msgstr "%1 volné" #: kcm/driveselectiondelegate.cpp:92 #, kde-kuit-format msgctxt "" "@item:inlistbox used for unnamed filesystems, more than one filesystem on " "device. %1 is partition number, %2 is device description, %3 is either empty " "or the \" (disconnected)\" text" msgid "Partition %1 on %2%3" msgstr "Oddíl %1 na 1%2% 3" #: kcm/driveselectiondelegate.cpp:95 #, kde-kuit-format msgctxt "" "@item:inlistbox used when there is only one unnamed filesystem on device. %1 " "is device description, %2 is either empty or the \" (disconnected)\" text" msgid "%1%2" msgstr "%1%2" #: kcm/driveselectiondelegate.cpp:99 #, kde-kuit-format msgctxt "" "@item:inlistbox %1 is filesystem label, %2 is the device description, %3 is " "either empty or the \" (disconnected)\" text" msgid "%1 on %2%3" msgstr "%1 na %2%3" #: kcm/driveselectiondelegate.cpp:106 #, kde-kuit-format msgctxt "@item:inlistbox %1 is drive(partition) label, %2 is storage capacity" msgid "%1: %2 total capacity" msgstr "%1: %2 celkové kapacity" #: kcm/driveselectiondelegate.cpp:153 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "" "Warning: Symbolic links and file permissions can not be saved to this file " "system. File permissions only matters if there is more than one user of this " "computer or if you are backing up executable program files." msgstr "" "Varování: symbolické odkazy a přístupová oprávnění k souborům nemohou být na " "tomto souborovém systému uložena. Na druhou stranu jsou důležitá pouze pokud " "počítač používá vícero uživatelů nebo pokud jsou zálohovány spustitelné " "soubory programů." #: kcm/driveselectiondelegate.cpp:157 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "" "Warning: File permissions can not be saved to this file system. File " "permissions only matters if there is more than one user of this computer or " "if you are backing up executable program files." msgstr "" "Varování: přístupová oprávnění k souborům nemohou být na tomto souborovém " "systému uložena. Na druhou stranu jsou důležitá pouze pokud počítač používá " "vícero uživatelů nebo pokud jsou zálohovány spustitelné soubory programů." #: kcm/folderselectionmodel.cpp:107 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "" "%1will be included in the backup, except for " "unchecked subfolders" msgstr "" "%1bude zahrnuto do zálohy, s výjimkou podložek, " "jejichž zaškrtnutí bylo zrušeno" #: kcm/folderselectionmodel.cpp:111 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "%1will be included in the backup" msgstr "%1bude zahrnuto do zálohy" #: kcm/folderselectionmodel.cpp:115 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "" "%1 will not be included in " "the backup but contains folders that will" msgstr "" "%1 ne bude zahrnuto do zálohy " "ale obsahuje složky, které budou" #: kcm/folderselectionmodel.cpp:119 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "" "%1 will not be included in " "the backup" msgstr "" "%1 nebude zahrnuto do zálohy" #: kcm/kupkcm.cpp:49 #, kde-format msgid "Kup Configuration Module" msgstr "Modul pro nastavení Kup" #: kcm/kupkcm.cpp:51 #, kde-format msgid "Configuration of backup plans for the Kup backup system" msgstr "Nastavení plánů záloh pro zálohovací systém Kup" #: kcm/kupkcm.cpp:54 #, kde-format msgid "Maintainer" msgstr "Správce (údržba)" #: kcm/kupkcm.cpp:87 #, kde-format msgid "" "

Backup programs are missing

Before you can activate any backup " "plan you need to install either of

  • bup, for versioned backups
  • rsync, for synchronized backups
" msgstr "" "

Chybí zálohovací programy

Aby bylo možné aktivovat plány " "zálohování, je třeba nainstalovat buď

  • bup, pro verzované zálohy
  • rsync, pro sychnronizované zálohy
" #: kcm/kupkcm.cpp:168 #, kde-kuit-format msgctxt "@title:window" msgid "Warning" msgstr "Varování" #: kcm/kupkcm.cpp:170 #, kde-kuit-format msgctxt "@info %1 is the name of the backup plan" msgid "" "%1 does not have a destination!No backups will be saved by this plan." msgstr "%1 nemá cíl!Tímto plánem nebudou uloženy žádné zálohy." #: kcm/kupkcm.cpp:227 #, kde-kuit-format msgctxt "@action:button" msgid "Add New Plan" msgstr "Přidat nový plán" #: kcm/kupkcm.cpp:238 #, kde-kuit-format msgctxt "@option:check" msgid "Backups Enabled" msgstr "Zálohování zapnuto" #: kcm/planstatuswidget.cpp:48 #, kde-kuit-format msgctxt "@action:button" msgid "Configure" msgstr "Nastavit" #: kcm/planstatuswidget.cpp:51 #, kde-kuit-format msgctxt "@action:button" msgid "Remove" msgstr "Odebrat" #: kcm/planstatuswidget.cpp:54 #, kde-kuit-format msgctxt "@action:button" msgid "Duplicate" msgstr "Zduplikovat" #: kioslave/bupslave.cpp:92 kioslave/bupslave.cpp:149 kioslave/bupslave.cpp:186 #: kioslave/bupslave.cpp:249 kioslave/bupslave.cpp:271 #, kde-format msgid "" "No bup repository found.\n" "%1" msgstr "" "Nebyl nalezen bup repozitář.\n" "%1" #: plasmoid/contents/ui/FullRepresentation.qml:88 #, kde-format msgid "Save new backup" msgstr "Uložit novou zálohu" #: plasmoid/contents/ui/FullRepresentation.qml:94 #, kde-format msgid "Show files" msgstr "Zobrazit soubory" #: plasmoid/contents/ui/FullRepresentation.qml:99 #, kde-format msgid "Show log file" msgstr "Zobrazit obsah souboru se záznamem událostí (log)" #. i18n: file: filedigger/restoredialog.ui:14 #. i18n: ectx: property (windowTitle), widget (QDialog, RestoreDialog) #: po/rc.cpp:3 rc.cpp:3 #, kde-format msgctxt "@title:window" msgid "Restore Guide" msgstr "Průvodce obnovou" #. i18n: file: filedigger/restoredialog.ui:55 #. i18n: ectx: property (text), widget (QPushButton, mRestoreOriginalButton) #: po/rc.cpp:6 rc.cpp:6 #, kde-format msgctxt "@action:button" msgid "Restore to original location" msgstr "Obnovit do původního umístění" #. i18n: file: filedigger/restoredialog.ui:78 #. i18n: ectx: property (text), widget (QPushButton, mRestoreCustomButton) #: po/rc.cpp:9 rc.cpp:9 #, kde-format msgctxt "@action:button" msgid "Choose where to restore" msgstr "Zvolte kam obnovit" #. i18n: file: filedigger/restoredialog.ui:132 #. i18n: ectx: property (text), widget (QPushButton, mDestBackButton) #: po/rc.cpp:12 rc.cpp:12 #, kde-format msgctxt "@action:button" msgid "Back" msgstr "Zpět" #. i18n: file: filedigger/restoredialog.ui:144 #. i18n: ectx: property (text), widget (QPushButton, mDestNextButton) #: po/rc.cpp:15 rc.cpp:15 #, kde-format msgctxt "@action:button" msgid "Next" msgstr "Další" #. i18n: file: filedigger/restoredialog.ui:175 #. i18n: ectx: property (text), widget (QRadioButton, mNewNameRadioButton) #: po/rc.cpp:18 rc.cpp:18 #, kde-format msgctxt "@option:radio " msgid "Restore the folder under a new name" msgstr "Obnovit složku pod jiným názvem" #. i18n: file: filedigger/restoredialog.ui:208 #. i18n: ectx: property (text), widget (QRadioButton, mOverwriteRadioButton) #: po/rc.cpp:21 rc.cpp:21 #, kde-format msgctxt "@option:radio" msgid "Merge folders" msgstr "Sloučit složky" #. i18n: file: filedigger/restoredialog.ui:238 #. i18n: ectx: property (text), widget (QLabel, mConfirmOverwriteLabel) #: po/rc.cpp:24 rc.cpp:24 #, kde-format msgctxt "@info Question to user, in dialog" msgid "" "The following files would be overwritten, please confirm that you wish to " "continue." msgstr "Následujíc soubory by byly přepsány, potvrďte pokud chcete pokračovat." #. i18n: file: filedigger/restoredialog.ui:274 #. i18n: ectx: property (text), widget (QPushButton, mOverwriteBackButton) #: po/rc.cpp:27 rc.cpp:27 #, kde-format msgctxt "@action:button go to previous page in dialog" msgid "Back" msgstr "Zpět" #. i18n: file: filedigger/restoredialog.ui:286 #. i18n: ectx: property (text), widget (QPushButton, mConfirmButton) #: po/rc.cpp:30 rc.cpp:30 #, kde-format msgctxt "@action:button User answers \"yes I confirm: overwrite files\"" msgid "Confirm" msgstr "Potvrdit" #. i18n: file: filedigger/restoredialog.ui:341 #. i18n: ectx: property (text), widget (QLabel, mErrorLabel) #: po/rc.cpp:33 rc.cpp:33 #, fuzzy, kde-format msgctxt "@label above the detailed error message" msgid "An error occured while restoring:" msgstr "Při obnovování došlo k chybě:" #. i18n: file: filedigger/restoredialog.ui:372 #. i18n: ectx: property (text), widget (QLabel, label) #: po/rc.cpp:36 rc.cpp:36 #, fuzzy, kde-format msgctxt "@label" msgid "Restoration completed successfully!" msgstr "Obnova úspěšně dokončena!" #. i18n: file: filedigger/restoredialog.ui:413 #. i18n: ectx: property (text), widget (QPushButton, mOpenDestinationButton) #: po/rc.cpp:39 rc.cpp:39 #, kde-format msgid "Open Destination" msgstr "Otevřít cíl" #. i18n: file: filedigger/restoredialog.ui:472 #. i18n: ectx: property (text), widget (QPushButton, mCloseButton) #: po/rc.cpp:42 rc.cpp:42 #, kde-format msgctxt "@action:button" msgid "Close" msgstr "Zavřít" #: po/rc.cpp:43 po/rc.cpp:58 settings/backupplan.cpp:69 rc.cpp:43 rc.cpp:58 #, kde-format msgid "Backups" msgstr "Zálohy" #: po/rc.cpp:44 rc.cpp:44 msgid "Configure backup plans" msgstr "Nastavit plány záloh" #: po/rc.cpp:45 rc.cpp:45 msgid "backup,recovery,safety" msgstr "záloha,obnovení,bezpečí" #: po/rc.cpp:46 rc.cpp:46 msgid "Kup" msgstr "Kup" #: po/rc.cpp:48 rc.cpp:48 msgid "Start taking backup" msgstr "Zahájit zálohování" #: po/rc.cpp:49 rc.cpp:49 msgid "A question if user wants to start taking a backup" msgstr "Dotaz na uživatele zda chce zahájit zálohování" #: po/rc.cpp:50 rc.cpp:50 msgid "Backup succeeded" msgstr "Úspěšně zazálohováno" #: po/rc.cpp:51 rc.cpp:51 msgid "Saving of backup successfully completed" msgstr "Ukládání zálohy úspěšně dokončeno" #: po/rc.cpp:52 rc.cpp:52 msgid "Backup failed" msgstr "Zálohování se nezdařilo" #: po/rc.cpp:53 rc.cpp:53 msgid "Saving of backup failed, offer user to see log file" msgstr "" "Uložení zálohy se nezdařilo, nabídněte uživateli pohled do souboru se " "záznamem událostí (log)" #: po/rc.cpp:54 rc.cpp:54 msgid "Integrity check completed" msgstr "Kontrola neporušenosti dokončena" #: po/rc.cpp:55 rc.cpp:55 msgid "Finished checking integrity of backup archive" msgstr "Dokončena kontrola neporušenosti archivu se zálohou" #: po/rc.cpp:56 rc.cpp:56 msgid "Repair completed" msgstr "Oprava dokončena" #: po/rc.cpp:57 rc.cpp:57 msgid "Finished repairing backup archive" msgstr "Oprava archivu se zálohou dokončena" #: po/rc.cpp:59 rc.cpp:59 msgid "Status of backup plans" msgstr "Stav plánu záloh" #: po/rc.cpp:60 rc.cpp:60 msgid "Backup Status" msgstr "Stav zálohování" #: po/rc.cpp:61 rc.cpp:61 msgid "Displays status of backup plans" msgstr "Zobrazí stav plánu záloh" #: settings/backupplan.cpp:38 #, kde-kuit-format msgctxt "" "@label Default name for a new backup plan, %1 is the number of the plan in " "order" msgid "Backup plan %1" msgstr "Plán záloh %1" #: settings/backupplan.cpp:101 #, kde-format msgctxt "default description of newly duplicated backup plan" msgid "%1 (copy)" msgstr "%1 (kopie)" #: settings/backupplan.cpp:213 #, kde-format msgctxt "%1 is fancy formatted date" msgid "Last saved: %1" msgstr "Naposledy uloženo: %1" #: settings/backupplan.cpp:218 #, kde-format msgctxt "%1 is storage size of archive" msgid "Size: %1" msgstr "Velikost: %1" #: settings/backupplan.cpp:223 #, kde-format msgctxt "%1 is free storage space" msgid "Free space: %1" msgstr "Volné místo: %1" #: settings/backupplan.cpp:227 #, kde-kuit-format msgctxt "@label" msgid "This backup plan has never been run." msgstr "Tento plán záloh ještě nebyl nikdy spuštěn." kup-backup-0.7.1+dfsg/po/da.po000066400000000000000000001125171322613417100160510ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Peter Jespersen , 2016-2017 msgid "" msgstr "" "Project-Id-Version: kup\n" "Report-Msgid-Bugs-To: http://kde-apps.org/content/show.php/Kup+Backup+System?" "content=147465\n" "POT-Creation-Date: 2018-01-05 16:00+0800\n" "PO-Revision-Date: 2017-09-23 00:12+0000\n" "Last-Translator: Peter Jespersen \n" "Language-Team: Danish (http://www.transifex.com/kup/kup/language/da/)\n" "Language: da\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" #: daemon/bupjob.cpp:47 daemon/buprepairjob.cpp:38 #: daemon/bupverificationjob.cpp:37 #, kde-kuit-format msgctxt "@info notification" msgid "" "The bup program is needed but could not be found, " "maybe it is not installed?" msgstr "" "Programmet bup er påkrævet, men kan ikke findes " "på systemet. Er du sikker på at det er installeret?" #: daemon/bupjob.cpp:52 daemon/buprepairjob.cpp:43 #, kde-kuit-format msgctxt "@info notification" msgid "" "The par2 program is needed but could not be " "found, maybe it is not installed?" msgstr "" "Programmet par2 er påkrævet, men kan ikke findes " "på systemet. Er du sikker på at det er installeret?" #: daemon/bupjob.cpp:71 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup destination could not be initialised. See log file for more details." msgstr "Backupslutpunkt kunne ikke klargøres. Se logfil for detaljer." #: daemon/bupjob.cpp:93 #, kde-format msgid "Checking backup integrity" msgstr "Tjekker integriteten af backup" #: daemon/bupjob.cpp:104 daemon/bupverificationjob.cpp:67 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups could be corrupted! See log file " "for more details. Do you want to try repairing the backup files?" msgstr "" "Integritetstjek fejlet. Dine backupper kan være korrupte! Se logfil for " "detaljer. Vil du prøve at reparere backupfilerne?" #: daemon/bupjob.cpp:108 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups could be corrupted! See log file " "for more details." msgstr "" "Integritetskontrol fejlet. Dine backupper kan være beskadigede! Se logfil " "for yderligere detaljer." #: daemon/bupjob.cpp:131 daemon/rsyncjob.cpp:57 #, kde-format msgid "Checking what to copy" msgstr "" #: daemon/bupjob.cpp:138 #, kde-kuit-format msgctxt "@info notification" msgid "Failed to analyze files. See log file for more details." msgstr "" #: daemon/bupjob.cpp:159 daemon/bupjob.cpp:253 daemon/rsyncjob.cpp:175 #, kde-format msgid "Saving backup" msgstr "Lagrer backup" #: daemon/bupjob.cpp:167 daemon/rsyncjob.cpp:120 #, kde-kuit-format msgctxt "@info notification" msgid "Failed to save backup. See log file for more details." msgstr "" #: daemon/bupjob.cpp:189 #, kde-format msgid "Generating recovery information" msgstr "" #: daemon/bupjob.cpp:197 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed to generate recovery info for the backup. See log file for more " "details." msgstr "" "Kunne ikke skabe gendannelsesinformation for backuppen. Se logfil for " "detaljer." #: daemon/bupjob.cpp:254 daemon/rsyncjob.cpp:176 #, kde-format msgctxt "Label for file currently being copied" msgid "File" msgstr "Fil" #: daemon/buprepairjob.cpp:72 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup repair failed. Your backups could be corrupted! See log file for more " "details." msgstr "" "Backup kan ikke repareres. Dine backupper kan være beskadigede! Se logfil " "for flere detaljer." #: daemon/buprepairjob.cpp:76 #, kde-kuit-format msgctxt "@info notification" msgid "Success! Backup repair worked. See log file for more details." msgstr "" #: daemon/buprepairjob.cpp:80 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup repair was not necessary. Your backups are not corrupted.See log file " "for more details." msgstr "" "Reperation af backup var ikke nødvendig. Dine backupper er ikke korrupte. De " "logfil for detaljer." #: daemon/buprepairjob.cpp:85 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup repair failed. Your backups could still be corrupted! See log file " "for more details." msgstr "" "Sikkerhedskopi kan ikke repareres. Dine sikkerhedskopier kan være " "beskadigede! Se logfil for flere detaljer." #: daemon/bupverificationjob.cpp:70 daemon/bupverificationjob.cpp:87 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups are corrupted! See log file for " "more details." msgstr "" "Integritetstjek af backup fejlet. Dine backupper er korrupte. Se logfil for " "detaljer." #: daemon/bupverificationjob.cpp:76 #, kde-kuit-format msgctxt "@info notification" msgid "Backup integrity test was successful, Your backups are fine." msgstr "Integriteten af dine sikkerhedskopier er OK." #: daemon/bupverificationjob.cpp:83 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups are corrupted! See log file for " "more details. Do you want to try repairing the backup files?" msgstr "" #: daemon/edexecutor.cpp:115 daemon/edexecutor.cpp:124 #: daemon/edexecutor.cpp:160 daemon/fsexecutor.cpp:114 #: daemon/fsexecutor.cpp:146 #, kde-kuit-format msgctxt "@title:window" msgid "Problem" msgstr "Problem" #: daemon/edexecutor.cpp:116 daemon/fsexecutor.cpp:115 #, kde-kuit-format msgctxt "notification" msgid "Invalid type of backup in configuration." msgstr "" #: daemon/edexecutor.cpp:125 #, kde-kuit-format msgctxt "notification" msgid "You don't have write permission to backup destination." msgstr "Du har ikke skriverettigheder til slutpunktet." #: daemon/kupdaemon.cpp:171 #, kde-format msgid "Continue" msgstr "Fortsæt" #: daemon/kupdaemon.cpp:173 #, kde-format msgid "Stop" msgstr "Stop" #: daemon/kupdaemon.cpp:175 #, kde-format msgctxt "%1 is a text explaining the current activity" msgid "Currently busy: %1" msgstr "" #: daemon/kupdaemon.cpp:176 #, kde-format msgid "Do you really want to stop?" msgstr "Vil du virkelig afbryde?" #: daemon/kupdaemon.cpp:179 #, kde-format msgid "User Backups" msgstr "" #: daemon/kupdaemon.cpp:249 #, kde-format msgctxt "status in tooltip" msgid "Backup destination not available" msgstr "" #: daemon/kupdaemon.cpp:253 daemon/kupdaemon.cpp:310 #, kde-format msgid "No backup plans configured" msgstr "" #: daemon/kupdaemon.cpp:259 #, kde-format msgctxt "status in tooltip" msgid "Backup destination available" msgstr "" #: daemon/kupdaemon.cpp:269 daemon/planexecutor.cpp:84 #, kde-format msgctxt "status in tooltip" msgid "Backup status OK" msgstr "Backupstatus OK" #: daemon/kupdaemon.cpp:276 daemon/planexecutor.cpp:86 #, kde-format msgctxt "status in tooltip" msgid "New backup suggested" msgstr "Ny backup foreslået" #: daemon/kupdaemon.cpp:283 daemon/planexecutor.cpp:88 #, kde-format msgctxt "status in tooltip" msgid "New backup neeeded" msgstr "Ny backup påkrævet" #: daemon/main.cpp:41 #, kde-kuit-format msgctxt "@info:shell Error message at startup" msgid "" "Kup is not enabled, enable it from the system settings module. You can do " "that by running kcmshell5 kup" msgstr "" "Kup er deaktiveret. Aktivér denne fra systemindstillinger. Det kan du gøre " "ved at afvikle kommandoen kcmshell5 kup" #: daemon/main.cpp:47 #, kde-kuit-format msgctxt "@title" msgid "Kup Daemon" msgstr "Kuptjeneste" #: daemon/main.cpp:48 #, kde-format msgid "" "Kup is a flexible backup solution using the backup storage system 'bup'. " "This allows it to quickly perform incremental backups, only saving the parts " "of files that has actually changed since last backup was taken." msgstr "" "Kup er en fleksibel backup løsning, der bruger backup lagringssystemet ´BUP" "´. Dette gør det muligt hurtigt at udføre trinvise backupper, hvor der kun " "gemmes de dele af filer, der faktisk er blevet ændret siden den sidste " "backup blev taget." #: daemon/main.cpp:51 kcm/kupkcm.cpp:52 #, kde-format msgid "Copyright (C) 2011-2015 Simon Persson" msgstr "Copyright (C) 2011-2015 Simon Persson" #: daemon/main.cpp:53 filedigger/main.cpp:51 kcm/kupkcm.cpp:54 #, kde-format msgid "Simon Persson" msgstr "Simon Persson" #: daemon/main.cpp:54 filedigger/main.cpp:52 kcm/kupkcm.cpp:55 #, kde-kuit-format msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "Dit navn" #: daemon/main.cpp:54 filedigger/main.cpp:52 kcm/kupkcm.cpp:56 #, kde-kuit-format msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "Din e-Post" #: daemon/planexecutor.cpp:76 #, kde-format msgctxt "status in tooltip" msgid "Saving backup" msgstr "Lagrer backup" #: daemon/planexecutor.cpp:78 #, kde-format msgctxt "status in tooltip" msgid "Checking backup integrity" msgstr "Tjekker integriteten af backup" #: daemon/planexecutor.cpp:80 #, kde-format msgctxt "status in tooltip" msgid "Repairing backups" msgstr "" #: daemon/planexecutor.cpp:118 daemon/planexecutor.cpp:133 #, kde-kuit-format msgctxt "@info" msgid "Do you want to save a first backup now?" msgstr "" #: daemon/planexecutor.cpp:121 #, kde-kuit-format msgctxt "@info" msgid "" "It has been %1 since last backup was saved.\n" "Save a new backup now?" msgstr "" #: daemon/planexecutor.cpp:137 #, kde-kuit-format msgctxt "@info" msgid "" "You have been active for %1 since last backup was saved.\n" "Save a new backup now?" msgstr "" #: daemon/planexecutor.cpp:170 daemon/planexecutor.cpp:200 #: daemon/planexecutor.cpp:278 #, kde-kuit-format msgctxt "@action:button" msgid "Yes" msgstr "Ja" #: daemon/planexecutor.cpp:170 daemon/planexecutor.cpp:201 #: daemon/planexecutor.cpp:279 #, kde-kuit-format msgctxt "@action:button" msgid "No" msgstr "Nej" #: daemon/planexecutor.cpp:192 #, kde-kuit-format msgctxt "@title:window" msgid "Saving of Backup Failed" msgstr "Kan ikke gemme Sikkerhedskopien" #: daemon/planexecutor.cpp:197 daemon/planexecutor.cpp:275 #: daemon/planexecutor.cpp:309 #, kde-kuit-format msgctxt "@action:button" msgid "Show log file" msgstr "Vis Logfil" #: daemon/planexecutor.cpp:221 #, kde-kuit-format msgctxt "@title:window" msgid "Backup Saved" msgstr "Backup Gemt" #: daemon/planexecutor.cpp:222 #, kde-kuit-format msgctxt "@info notification" msgid "Saving backup completed successfully." msgstr "Lagring af backup succesfuldt udført." #: daemon/planexecutor.cpp:271 #, kde-kuit-format msgctxt "@title:window" msgid "Integrity Check Completed" msgstr "Integritetskontrol Udført" #: daemon/planexecutor.cpp:306 #, kde-kuit-format msgctxt "@title:window" msgid "Repair Completed" msgstr "Reparation Udført" #: daemon/planexecutor.cpp:337 po/rc.cpp:47 rc.cpp:47 #, kde-format msgid "Kup Backup System" msgstr "Kup Backupsystem" #: daemon/rsyncjob.cpp:48 #, kde-kuit-format msgctxt "@info notification" msgid "" "The rsync program is needed but could not be " "found, maybe it is not installed?" msgstr "" #: filedigger/main.cpp:47 #, kde-kuit-format msgctxt "@title" msgid "File Digger" msgstr "" #: filedigger/main.cpp:48 #, kde-format msgid "Browser for bup archives." msgstr "Find bup-arkiver" #: filedigger/main.cpp:49 #, kde-format msgid "Copyright (C) 2013-2015 Simon Persson" msgstr "Copyright (C) 2013-2015 Simon Persson" #: filedigger/main.cpp:59 #, kde-format msgid "Name of the branch to be opened." msgstr "" #: filedigger/main.cpp:61 #, kde-format msgid "Path to the bup repository to be opened." msgstr "Sti til det bup-arkiv der skal åbnes." #: filedigger/main.cpp:70 #, kde-format msgctxt "@info:shell Error message at startup" msgid "" "You must supply the path to a bup or git repository that you wish to open " "for viewing." msgstr "" #: filedigger/main.cpp:85 #, kde-kuit-format msgctxt "@info messagebox, %1 is a folder path" msgid "" "The backup archive %1 could not be opened. Check if the " "backups really are located there." msgstr "" #: filedigger/main.cpp:92 #, kde-kuit-format msgctxt "@info messagebox" msgid "You do not have permission needed to read this backup archive." msgstr "" #: filedigger/mergedvfs.cpp:108 #, kde-kuit-format msgctxt "@info messagebox" msgid "" "Could not read this backup archive. Perhaps some files have become " "corrupted. Do you want to run an integrity check to test this?" msgstr "" #: filedigger/mergedvfs.cpp:156 #, kde-kuit-format msgctxt "added after folder name in some cases" msgid " (folder)" msgstr "(mappe)" #: filedigger/mergedvfs.cpp:158 #, kde-kuit-format msgctxt "added after file name in some cases" msgid " (symlink)" msgstr "(symbolsk link)" #: filedigger/mergedvfs.cpp:160 #, kde-kuit-format msgctxt "added after file name in some cases" msgid " (file)" msgstr " (fil)" #: filedigger/restoredialog.cpp:115 kcm/backupplanwidget.cpp:451 #, kde-kuit-format msgctxt "@action:button" msgid "New Folder..." msgstr "Ny Mappe..." #: filedigger/restoredialog.cpp:141 filedigger/restoredialog.cpp:160 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "No destination was selected, please select one." msgstr "" #: filedigger/restoredialog.cpp:251 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "There was a problem while getting a list of all files to restore: %1" msgstr "Et problem opstod ved indlæsningen af en filliste til gendannelse: %1" #: filedigger/restoredialog.cpp:264 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "The destination does not have enough space available. Please choose a " "different destination or free some space." msgstr "" #: filedigger/restoredialog.cpp:274 #, kde-kuit-format msgctxt "" "added to the suggested filename when restoring, %1 is the time when backup " "was taken" msgid " - saved at %1" msgstr " - gemt ved %1" #: filedigger/restoredialog.cpp:275 #, kde-kuit-format msgctxt "@info" msgid "Folder already exists, please choose a solution" msgstr "Mappen eksisterer allerede, vælg venligst en løsning på problemet" #: filedigger/restoredialog.cpp:281 #, kde-kuit-format msgctxt "@info" msgid "File already exists" msgstr "Filen eksisterer allerede" #: filedigger/restoredialog.cpp:294 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "The new name entered already exists, please enter a different one." msgstr "Det indtastede navn findes allerede, indtast venligst et andet." #: filedigger/restoredialog.cpp:371 kcm/dirselector.cpp:50 #, kde-kuit-format msgctxt "default folder name when creating a new folder" msgid "New Folder" msgstr "Ny Mappe" #: filedigger/restoredialog.cpp:376 kcm/dirselector.cpp:55 #, kde-kuit-format msgctxt "@title:window" msgid "New Folder" msgstr "Ny Mappe" #: filedigger/restoredialog.cpp:377 kcm/dirselector.cpp:56 #, kde-kuit-format msgctxt "@label:textbox" msgid "" "Create new folder in:\n" "%1" msgstr "" "Opret ny mappe i:\n" "%1" #: filedigger/restoredialog.cpp:390 kcm/dirselector.cpp:68 #, kde-format msgid "A folder named %1 already exists." msgstr "Mappen %1 eksisterer allerede." #: filedigger/restoredialog.cpp:396 kcm/dirselector.cpp:74 #, kde-format msgid "You do not have permission to create %1." msgstr "Du har ikke rettigheder til at oprette %1." #: filedigger/restorejob.cpp:99 #, kde-kuit-format msgctxt "progress report, current operation" msgid "Restoring" msgstr "Gendanner" #: filedigger/restorejob.cpp:100 #, kde-kuit-format msgctxt "progress report, label" msgid "File:" msgstr "Fil:" #: filedigger/versionlistdelegate.cpp:135 #, kde-kuit-format msgctxt "@action:button" msgid "Open" msgstr "Åben" #: filedigger/versionlistdelegate.cpp:137 #, kde-kuit-format msgctxt "@action:button" msgid "Restore" msgstr "Gendan" #: kcm/backupplanwidget.cpp:282 #, kde-kuit-format msgctxt "@action:button" msgid "Exclude Folder" msgstr "Ekskludér Mappe" #: kcm/backupplanwidget.cpp:285 #, kde-kuit-format msgctxt "@action:button" msgid "Include Folder" msgstr "Inkludér Mappe" #: kcm/backupplanwidget.cpp:382 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "You don't have permission to read this folder: %1It cannot be included in the source selection. If it does not contain " "anything important to you, one possible solution is to exclude the folder " "from the backup plan." msgstr "" #: kcm/backupplanwidget.cpp:393 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "You don't have permission to read this file: %1It " "cannot be included in the source selection. If the file is not important to " "you, one possible solution is to exclude the whole folder where the file is " "stored from the backup plan." msgstr "" #: kcm/backupplanwidget.cpp:409 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "The symbolic link %1 is currently included but it " "points to a folder which is not: %2.That is " "probably not what you want. One solution is to simply include the target " "folder in the backup plan." msgstr "" #: kcm/backupplanwidget.cpp:417 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "The symbolic link %1 is currently included but it " "points to a file which is not: %2.That is probably " "not what you want. One solution is to simply include the folder where the " "file is stored in the backup plan." msgstr "" #: kcm/backupplanwidget.cpp:440 #, kde-kuit-format msgctxt "@title:window" msgid "Select Folder" msgstr "Vælg Mappe" #: kcm/backupplanwidget.cpp:478 #, kde-kuit-format msgctxt "@label" msgid "Description:" msgstr "Beskrivelse:" #: kcm/backupplanwidget.cpp:481 #, kde-kuit-format msgctxt "@action:button" msgid "Back to overview" msgstr "Tilbage til oversigten" #: kcm/backupplanwidget.cpp:510 #, kde-kuit-format msgctxt "@info" msgid "" "This type of backup is an archive. It contains both the " "latest version of your files and earlier backed up versions. Using this type " "of backup allows you to recover older versions of your files, or files which " "were deleted on your computer at a later time. The storage space needed is " "minimized by looking for common parts of your files between versions and " "only storing those parts once. Nevertheless, the backup archive will keep " "growing in size as time goes by.Also important to know is that the " "files in the archive can not be accessed directly with a general file " "manager, a special program is needed." msgstr "" #: kcm/backupplanwidget.cpp:525 #, kde-kuit-format msgctxt "@option:radio" msgid "" "Versioned Backup (not available because bup is " "not installed)" msgstr "" "Versioneret Sikkerhedskopiering (Ikke tilgængelig fordi at bup ikke er installeret)" #: kcm/backupplanwidget.cpp:530 #, kde-kuit-format msgctxt "@option:radio" msgid "Versioned Backup (recommended)" msgstr "Versioneret Sikkerhedskopi (anbefalet)" #: kcm/backupplanwidget.cpp:535 #, kde-kuit-format msgctxt "@info" msgid "" "This type of backup is a folder which is synchronized with your selected " "source folders. Taking a backup simply means making the backup destination " "contain an exact copy of your source folders as they are now and nothing " "else. If a file has been deleted in a source folder it will get deleted from " "the backup folder.This type of backup can protect you against data loss " "due to a broken hard drive but it does not help you to recover from your own " "mistakes." msgstr "" #: kcm/backupplanwidget.cpp:548 #, kde-kuit-format msgctxt "@option:radio" msgid "" "Synchronized Backup (not available because rsync " "is not installed)" msgstr "" #: kcm/backupplanwidget.cpp:553 #, kde-kuit-format msgctxt "@option:radio" msgid "Synchronized Backup" msgstr "" #: kcm/backupplanwidget.cpp:581 #, kde-kuit-format msgctxt "@title" msgid "Backup Type" msgstr "Backup-type" #: kcm/backupplanwidget.cpp:582 #, kde-kuit-format msgctxt "@label" msgid "Select what type of backup you want" msgstr "" #: kcm/backupplanwidget.cpp:590 #, kde-kuit-format msgctxt "@title" msgid "Sources" msgstr "Kilder" #: kcm/backupplanwidget.cpp:591 #, kde-kuit-format msgctxt "@label" msgid "Select which folders to include in backup" msgstr "Vælg hvilke mapper der skal inkluderes i sikkerhedskopi" #: kcm/backupplanwidget.cpp:605 #, kde-kuit-format msgctxt "@option:radio" msgid "Filesystem Path" msgstr "" #: kcm/backupplanwidget.cpp:606 #, kde-kuit-format msgctxt "@option:radio" msgid "External Storage" msgstr "Eksternt lager" #: kcm/backupplanwidget.cpp:612 #, kde-kuit-format msgctxt "@info" msgid "" "You can use this option for backing up to a secondary internal harddrive, an " "external eSATA drive or networked storage. The requirement is just that you " "always mount it at the same path in the filesystem. The path specified here " "does not need to exist at all times, its existance will be monitored." msgstr "" #: kcm/backupplanwidget.cpp:619 #, kde-kuit-format msgctxt "@label:textbox" msgid "Destination Path for Backup:" msgstr "Destinationssti for Sikkerhedskopi:" #: kcm/backupplanwidget.cpp:638 #, kde-kuit-format msgctxt "@info" msgid "" "Use this option if you want to backup your files on an external storage that " "can be plugged in to this computer, such as a USB hard drive or memory stick." msgstr "" #: kcm/backupplanwidget.cpp:648 kcm/backupplanwidget.cpp:652 #, kde-kuit-format msgctxt "@info:tooltip" msgid "The specified folder will be created if it does not exist." msgstr "" #: kcm/backupplanwidget.cpp:650 #, kde-kuit-format msgctxt "@label:textbox" msgid "Folder on Destination Drive:" msgstr "" #: kcm/backupplanwidget.cpp:658 #, kde-kuit-format msgctxt "@info:tooltip" msgid "Open dialog to select a folder" msgstr "Åben dialogboks for at vælge en mappe" #: kcm/backupplanwidget.cpp:688 #, kde-kuit-format msgctxt "@title" msgid "Destination" msgstr "" #: kcm/backupplanwidget.cpp:689 #, kde-kuit-format msgctxt "@label" msgid "Select the backup destination" msgstr "Vælg backupslutpunkt" #: kcm/backupplanwidget.cpp:706 #, kde-kuit-format msgctxt "@option:radio" msgid "Manual Activation" msgstr "Manuel Aktivering" #: kcm/backupplanwidget.cpp:707 #, kde-kuit-format msgctxt "@option:radio" msgid "Interval" msgstr "Interval" #: kcm/backupplanwidget.cpp:708 #, kde-kuit-format msgctxt "@option:radio" msgid "Active Usage Time" msgstr "" #: kcm/backupplanwidget.cpp:710 #, kde-kuit-format msgctxt "@info" msgid "" "Backups are only taken when manually requested. This can be done by using " "the popup menu from the backup system tray icon." msgstr "" #: kcm/backupplanwidget.cpp:724 #, kde-kuit-format msgctxt "@info" msgid "" "New backup will be triggered when backup destination becomes available and " "more than the configured interval has passed since the last backup was taken." msgstr "" #: kcm/backupplanwidget.cpp:741 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Minutes" msgstr "Minutter" #: kcm/backupplanwidget.cpp:742 kcm/backupplanwidget.cpp:769 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Hours" msgstr "Timer" #: kcm/backupplanwidget.cpp:743 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Days" msgstr "Dage" #: kcm/backupplanwidget.cpp:744 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Weeks" msgstr "Uger" #: kcm/backupplanwidget.cpp:754 #, kde-kuit-format msgctxt "@info" msgid "" "New backup will be triggered when backup destination becomes available and " "you have been using your computer actively for more than the configured time " "limit since the last backup was taken." msgstr "" #: kcm/backupplanwidget.cpp:775 #, kde-kuit-format msgctxt "@option:check" msgid "Ask for confirmation before taking backup" msgstr "Spørg for bekræftelse før der tages backup" #: kcm/backupplanwidget.cpp:794 #, kde-kuit-format msgctxt "@title" msgid "Schedule" msgstr "Tidsplan" #: kcm/backupplanwidget.cpp:795 #, kde-kuit-format msgctxt "@label" msgid "Specify the backup schedule" msgstr "Definér tidsplan for sikkerhedskopiering" #: kcm/backupplanwidget.cpp:808 #, kde-kuit-format msgctxt "@option:check" msgid "Show hidden folders in source selection" msgstr "Vis skjulte mapper i kildeudvælgelsen" #: kcm/backupplanwidget.cpp:814 #, kde-kuit-format msgctxt "@info" msgid "" "This makes it possible to explicitly include or exclude hidden folders in " "the backup source selection. Hidden folders have a name that starts with a " "dot. They are typically located in your home folder and are used to store " "settings and temporary files for your applications." msgstr "" #: kcm/backupplanwidget.cpp:832 #, kde-kuit-format msgctxt "@info" msgid "" "This will make your backups use around 10% more storage space and saving " "backups will take slightly longer time. In return it will be possible to " "recover from a partially corrupted backup." msgstr "" #: kcm/backupplanwidget.cpp:838 #, kde-kuit-format msgctxt "@option:check" msgid "Generate recovery information" msgstr "Generer gendannelsesindformation" #: kcm/backupplanwidget.cpp:840 #, kde-kuit-format msgctxt "@option:check" msgid "" "Generate recovery information (not available because par2 is not installed)" msgstr "" #: kcm/backupplanwidget.cpp:856 #, kde-kuit-format msgctxt "@option:check" msgid "Verify integrity of backups" msgstr "Kontrollér integriteten af sikkerhedskopierne" #: kcm/backupplanwidget.cpp:860 #, kde-kuit-format msgctxt "@info" msgid "" "Checks the whole backup archive for corruption every time you save new data. " "Saving backups will take a little bit longer time but it allows you to catch " "corruption problems sooner than at the time you need to use a backup, at " "that time it could be too late." msgstr "" "Kontrollerer hele backuparkivet for korruption, hver gang du gemmer nye " "data. Lagring af backups vil tage lidt længere tid, men det giver dig " "mulighed for at fange korruptionsproblemer før du skal bruge backuppen, hvor " "det kan være for sent." #: kcm/backupplanwidget.cpp:882 #, kde-kuit-format msgctxt "@title" msgid "Advanced" msgstr "Avanceret" #: kcm/backupplanwidget.cpp:883 #, kde-kuit-format msgctxt "@label" msgid "Extra options for advanced users" msgstr "Ekstra indstillinger for ekspertbrugere" #: kcm/driveselection.cpp:275 #, kde-kuit-format msgctxt "@label Only shown if no drives are detected" msgid "" "Plug in the external storage you wish to use, then select it in this list." msgstr "" "Tilslut den eksterne lagerenhed, du ønsker at bruge, og vælg det på denne " "liste." #: kcm/driveselectiondelegate.cpp:75 #, kde-kuit-format msgctxt "@item:inlistbox this text is added if selected drive is disconnected" msgid " (disconnected)" msgstr "(frakoblet)" #: kcm/driveselectiondelegate.cpp:78 #, kde-kuit-format msgctxt "@label %1 is amount of free storage space of hard drive" msgid "%1 free" msgstr "%1 frit" #: kcm/driveselectiondelegate.cpp:92 #, kde-kuit-format msgctxt "" "@item:inlistbox used for unnamed filesystems, more than one filesystem on " "device. %1 is partition number, %2 is device description, %3 is either empty " "or the \" (disconnected)\" text" msgid "Partition %1 on %2%3" msgstr "Partition %1 på %2%3" #: kcm/driveselectiondelegate.cpp:95 #, kde-kuit-format msgctxt "" "@item:inlistbox used when there is only one unnamed filesystem on device. %1 " "is device description, %2 is either empty or the \" (disconnected)\" text" msgid "%1%2" msgstr "%1%2" #: kcm/driveselectiondelegate.cpp:99 #, kde-kuit-format msgctxt "" "@item:inlistbox %1 is filesystem label, %2 is the device description, %3 is " "either empty or the \" (disconnected)\" text" msgid "%1 on %2%3" msgstr "%1 på %2%3" #: kcm/driveselectiondelegate.cpp:106 #, kde-kuit-format msgctxt "@item:inlistbox %1 is drive(partition) label, %2 is storage capacity" msgid "%1: %2 total capacity" msgstr "%1: %2 total kapacitet" #: kcm/driveselectiondelegate.cpp:153 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "" "Warning: Symbolic links and file permissions can not be saved to this file " "system. File permissions only matters if there is more than one user of this " "computer or if you are backing up executable program files." msgstr "" #: kcm/driveselectiondelegate.cpp:157 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "" "Warning: File permissions can not be saved to this file system. File " "permissions only matters if there is more than one user of this computer or " "if you are backing up executable program files." msgstr "" #: kcm/folderselectionmodel.cpp:107 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "" "%1will be included in the backup, except for " "unchecked subfolders" msgstr "" #: kcm/folderselectionmodel.cpp:111 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "%1will be included in the backup" msgstr "" #: kcm/folderselectionmodel.cpp:115 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "" "%1 will not be included in " "the backup but contains folders that will" msgstr "" #: kcm/folderselectionmodel.cpp:119 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "" "%1 will not be included in " "the backup" msgstr "" "%1 vil ikke blive inkluderet " "i Sikkerhedskopien" #: kcm/kupkcm.cpp:49 #, kde-format msgid "Kup Configuration Module" msgstr "Kup Indstillingsmodul" #: kcm/kupkcm.cpp:51 #, kde-format msgid "Configuration of backup plans for the Kup backup system" msgstr "Indstilling af backupplaner for KUP backupsystemet." #: kcm/kupkcm.cpp:54 #, kde-format msgid "Maintainer" msgstr "Vedligeholdelse" #: kcm/kupkcm.cpp:87 #, kde-format msgid "" "

Backup programs are missing

Before you can activate any backup " "plan you need to install either of

  • bup, for versioned backups
  • rsync, for synchronized backups
" msgstr "" "

Backupprogrammer mangler

Før du kan aktivere nogen backupplaner, " "skal du installere:

  • BUP, for versionerede backupper
  • rsync " "for synkroniserede backupper
" #: kcm/kupkcm.cpp:168 #, kde-kuit-format msgctxt "@title:window" msgid "Warning" msgstr "Advarsel" #: kcm/kupkcm.cpp:170 #, kde-kuit-format msgctxt "@info %1 is the name of the backup plan" msgid "" "%1 does not have a destination!No backups will be saved by this plan." msgstr "" #: kcm/kupkcm.cpp:227 #, kde-kuit-format msgctxt "@action:button" msgid "Add New Plan" msgstr "Tilføj Ny Plan" #: kcm/kupkcm.cpp:238 #, kde-kuit-format msgctxt "@option:check" msgid "Backups Enabled" msgstr "Backup Aktiveret" #: kcm/planstatuswidget.cpp:48 #, kde-kuit-format msgctxt "@action:button" msgid "Configure" msgstr "Indstil" #: kcm/planstatuswidget.cpp:51 #, kde-kuit-format msgctxt "@action:button" msgid "Remove" msgstr "Fjern" #: kcm/planstatuswidget.cpp:54 #, kde-kuit-format msgctxt "@action:button" msgid "Duplicate" msgstr "Duplikér" #: kioslave/bupslave.cpp:92 kioslave/bupslave.cpp:149 kioslave/bupslave.cpp:186 #: kioslave/bupslave.cpp:249 kioslave/bupslave.cpp:271 #, kde-format msgid "" "No bup repository found.\n" "%1" msgstr "" "Kan ikke finde noget bup-arkiv.\n" "%1" #: plasmoid/contents/ui/FullRepresentation.qml:88 #, kde-format msgid "Save new backup" msgstr "Gem ny backup" #: plasmoid/contents/ui/FullRepresentation.qml:94 #, kde-format msgid "Show files" msgstr "Vis filer" #: plasmoid/contents/ui/FullRepresentation.qml:99 #, kde-format msgid "Show log file" msgstr "Vis logfiler" #. i18n: file: filedigger/restoredialog.ui:14 #. i18n: ectx: property (windowTitle), widget (QDialog, RestoreDialog) #: po/rc.cpp:3 rc.cpp:3 #, kde-format msgctxt "@title:window" msgid "Restore Guide" msgstr "Gendannelsesguide" #. i18n: file: filedigger/restoredialog.ui:55 #. i18n: ectx: property (text), widget (QPushButton, mRestoreOriginalButton) #: po/rc.cpp:6 rc.cpp:6 #, kde-format msgctxt "@action:button" msgid "Restore to original location" msgstr "Gendan til oprindeligt sted" #. i18n: file: filedigger/restoredialog.ui:78 #. i18n: ectx: property (text), widget (QPushButton, mRestoreCustomButton) #: po/rc.cpp:9 rc.cpp:9 #, kde-format msgctxt "@action:button" msgid "Choose where to restore" msgstr "Vælg sted for gendannelse" #. i18n: file: filedigger/restoredialog.ui:132 #. i18n: ectx: property (text), widget (QPushButton, mDestBackButton) #: po/rc.cpp:12 rc.cpp:12 #, kde-format msgctxt "@action:button" msgid "Back" msgstr "Tilbage" #. i18n: file: filedigger/restoredialog.ui:144 #. i18n: ectx: property (text), widget (QPushButton, mDestNextButton) #: po/rc.cpp:15 rc.cpp:15 #, kde-format msgctxt "@action:button" msgid "Next" msgstr "Næste" #. i18n: file: filedigger/restoredialog.ui:175 #. i18n: ectx: property (text), widget (QRadioButton, mNewNameRadioButton) #: po/rc.cpp:18 rc.cpp:18 #, kde-format msgctxt "@option:radio " msgid "Restore the folder under a new name" msgstr "Gendan mappen med nyt navn" #. i18n: file: filedigger/restoredialog.ui:208 #. i18n: ectx: property (text), widget (QRadioButton, mOverwriteRadioButton) #: po/rc.cpp:21 rc.cpp:21 #, kde-format msgctxt "@option:radio" msgid "Merge folders" msgstr "Flet mapper" #. i18n: file: filedigger/restoredialog.ui:238 #. i18n: ectx: property (text), widget (QLabel, mConfirmOverwriteLabel) #: po/rc.cpp:24 rc.cpp:24 #, kde-format msgctxt "@info Question to user, in dialog" msgid "" "The following files would be overwritten, please confirm that you wish to " "continue." msgstr "" "Følgende filer vil blive overskrevet, bekræft venligst at du vil fortsætte." #. i18n: file: filedigger/restoredialog.ui:274 #. i18n: ectx: property (text), widget (QPushButton, mOverwriteBackButton) #: po/rc.cpp:27 rc.cpp:27 #, kde-format msgctxt "@action:button go to previous page in dialog" msgid "Back" msgstr "Tilbage" #. i18n: file: filedigger/restoredialog.ui:286 #. i18n: ectx: property (text), widget (QPushButton, mConfirmButton) #: po/rc.cpp:30 rc.cpp:30 #, kde-format msgctxt "@action:button User answers \"yes I confirm: overwrite files\"" msgid "Confirm" msgstr "Bekræft" #. i18n: file: filedigger/restoredialog.ui:341 #. i18n: ectx: property (text), widget (QLabel, mErrorLabel) #: po/rc.cpp:33 rc.cpp:33 #, fuzzy, kde-format msgctxt "@label above the detailed error message" msgid "An error occured while restoring:" msgstr "En fejl opstod ved gendannelse:" #. i18n: file: filedigger/restoredialog.ui:372 #. i18n: ectx: property (text), widget (QLabel, label) #: po/rc.cpp:36 rc.cpp:36 #, fuzzy, kde-format msgctxt "@label" msgid "Restoration completed successfully!" msgstr "Gendannelse fuldført!" #. i18n: file: filedigger/restoredialog.ui:413 #. i18n: ectx: property (text), widget (QPushButton, mOpenDestinationButton) #: po/rc.cpp:39 rc.cpp:39 #, kde-format msgid "Open Destination" msgstr "Åben slutpunkt" #. i18n: file: filedigger/restoredialog.ui:472 #. i18n: ectx: property (text), widget (QPushButton, mCloseButton) #: po/rc.cpp:42 rc.cpp:42 #, kde-format msgctxt "@action:button" msgid "Close" msgstr "Luk" #: po/rc.cpp:43 po/rc.cpp:58 settings/backupplan.cpp:69 rc.cpp:43 rc.cpp:58 #, kde-format msgid "Backups" msgstr "Backupper" #: po/rc.cpp:44 rc.cpp:44 msgid "Configure backup plans" msgstr "Indstil backupplaner" #: po/rc.cpp:45 rc.cpp:45 msgid "backup,recovery,safety" msgstr "backup,gendannelse,sikkerhed" #: po/rc.cpp:46 rc.cpp:46 msgid "Kup" msgstr "Kup" #: po/rc.cpp:48 rc.cpp:48 msgid "Start taking backup" msgstr "Start backup" #: po/rc.cpp:49 rc.cpp:49 msgid "A question if user wants to start taking a backup" msgstr "Spørg om bruger gerne vil begynde at tage an backup" #: po/rc.cpp:50 rc.cpp:50 msgid "Backup succeeded" msgstr "" #: po/rc.cpp:51 rc.cpp:51 msgid "Saving of backup successfully completed" msgstr "" #: po/rc.cpp:52 rc.cpp:52 msgid "Backup failed" msgstr "backup fejlet" #: po/rc.cpp:53 rc.cpp:53 msgid "Saving of backup failed, offer user to see log file" msgstr "Lagring af backup fejlet, tilbyd bruger at se logfil" #: po/rc.cpp:54 rc.cpp:54 msgid "Integrity check completed" msgstr "Integritetskontrol fuldført" #: po/rc.cpp:55 rc.cpp:55 msgid "Finished checking integrity of backup archive" msgstr "Integritetstjek af backuparkiv afsluttet" #: po/rc.cpp:56 rc.cpp:56 msgid "Repair completed" msgstr "Reparation fuldført" #: po/rc.cpp:57 rc.cpp:57 msgid "Finished repairing backup archive" msgstr "Reparation af backup fuldført" #: po/rc.cpp:59 rc.cpp:59 msgid "Status of backup plans" msgstr "" #: po/rc.cpp:60 rc.cpp:60 msgid "Backup Status" msgstr "Backupstatus" #: po/rc.cpp:61 rc.cpp:61 msgid "Displays status of backup plans" msgstr "" #: settings/backupplan.cpp:38 #, kde-kuit-format msgctxt "" "@label Default name for a new backup plan, %1 is the number of the plan in " "order" msgid "Backup plan %1" msgstr "Backupplan %1" #: settings/backupplan.cpp:101 #, kde-format msgctxt "default description of newly duplicated backup plan" msgid "%1 (copy)" msgstr "%1 (kopi)" #: settings/backupplan.cpp:213 #, kde-format msgctxt "%1 is fancy formatted date" msgid "Last saved: %1" msgstr "Sidst gemt: %1" #: settings/backupplan.cpp:218 #, kde-format msgctxt "%1 is storage size of archive" msgid "Size: %1" msgstr "Størrelse: %1" #: settings/backupplan.cpp:223 #, kde-format msgctxt "%1 is free storage space" msgid "Free space: %1" msgstr "Fri plads: %1" #: settings/backupplan.cpp:227 #, kde-kuit-format msgctxt "@label" msgid "This backup plan has never been run." msgstr "Denne backupplan har aldrig været udført." kup-backup-0.7.1+dfsg/po/de.po000066400000000000000000001330671322613417100160600ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Georg Lassnig , 2013 # HinzundKunz , 2015 # jrabe, 2016 # jrabe, 2016 # HinzundKunz , 2015-2017 # Matthias Schuster Scharmer , 2015 # Simon Persson , 2014,2016 msgid "" msgstr "" "Project-Id-Version: kup\n" "Report-Msgid-Bugs-To: http://kde-apps.org/content/show.php/Kup+Backup+System?" "content=147465\n" "POT-Creation-Date: 2018-01-05 16:00+0800\n" "PO-Revision-Date: 2017-09-19 23:42+0000\n" "Last-Translator: HinzundKunz \n" "Language-Team: German (http://www.transifex.com/kup/kup/language/de/)\n" "Language: de\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" #: daemon/bupjob.cpp:47 daemon/buprepairjob.cpp:38 #: daemon/bupverificationjob.cpp:37 #, kde-kuit-format msgctxt "@info notification" msgid "" "The bup program is needed but could not be found, " "maybe it is not installed?" msgstr "" "Das bup Programm wird benötigt, konnte aber nicht " "gefunden werden. Bitte bup installieren." #: daemon/bupjob.cpp:52 daemon/buprepairjob.cpp:43 #, kde-kuit-format msgctxt "@info notification" msgid "" "The par2 program is needed but could not be " "found, maybe it is not installed?" msgstr "" "Das Programm par2 wird benötigt, konnte aber " "nicht gefunden werden. Eventuell ist es nicht installiert?" #: daemon/bupjob.cpp:71 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup destination could not be initialised. See log file for more details." msgstr "" "Das Zielverzeichnis konnte nicht initialisiert werden. Weitere Informationen " "finden Sie in der Log-Datei." #: daemon/bupjob.cpp:93 #, kde-format msgid "Checking backup integrity" msgstr "Überprüfe den Zustand der Sicherung" #: daemon/bupjob.cpp:104 daemon/bupverificationjob.cpp:67 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups could be corrupted! See log file " "for more details. Do you want to try repairing the backup files?" msgstr "" "Die Integritätsprüfung ist fehlgeschlagen. Ihr Backup könnte fehlerhaft " "sein. Weitere Informationen finden Sie in der Log-Datei. Möchten Sie " "probieren, die Sicherungsdateien zu reparieren?" #: daemon/bupjob.cpp:108 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups could be corrupted! See log file " "for more details." msgstr "" "Die Integritätsprüfung ist fehlgeschlagen. Ihr Backup könnte fehlerhaft " "sein. Weitere Informationen finden Sie in der Log-Datei." #: daemon/bupjob.cpp:131 daemon/rsyncjob.cpp:57 #, kde-format msgid "Checking what to copy" msgstr "Überprüfe, was kopiert werden soll" #: daemon/bupjob.cpp:138 #, kde-kuit-format msgctxt "@info notification" msgid "Failed to analyze files. See log file for more details." msgstr "" "Konnte die Dateien nicht analysieren. In der Log-Datei finden sich mehr " "Informationen dazu." #: daemon/bupjob.cpp:159 daemon/bupjob.cpp:253 daemon/rsyncjob.cpp:175 #, kde-format msgid "Saving backup" msgstr "Backup wird gesichert" #: daemon/bupjob.cpp:167 daemon/rsyncjob.cpp:120 #, kde-kuit-format msgctxt "@info notification" msgid "Failed to save backup. See log file for more details." msgstr "" "Backup konnte nicht gesichert werden. In der Log-Datei finden sich mehr " "Informationen dazu." #: daemon/bupjob.cpp:189 #, kde-format msgid "Generating recovery information" msgstr "Erzeuge Wiederherstellungsinformationen" #: daemon/bupjob.cpp:197 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed to generate recovery info for the backup. See log file for more " "details." msgstr "" "Die Wiederherstellungsinformationen für die Sicherung konnten nicht erstellt " "werden. Weitere Informationen finden Sie in der Log-Datei." #: daemon/bupjob.cpp:254 daemon/rsyncjob.cpp:176 #, kde-format msgctxt "Label for file currently being copied" msgid "File" msgstr "Datei" #: daemon/buprepairjob.cpp:72 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup repair failed. Your backups could be corrupted! See log file for more " "details." msgstr "" "Die Reparatur der Sicherungsdateien ist fehlgeschlagen. Ihre Sicherung " "könnte fehlerhaft sein! Weitere Informationen finden Sie in der Log-Datei." #: daemon/buprepairjob.cpp:76 #, kde-kuit-format msgctxt "@info notification" msgid "Success! Backup repair worked. See log file for more details." msgstr "" "Die Sicherungsdateien wurden erfolgreich repariert. Bitte lesen Sie die Log-" "Datei für mehr Informationen." #: daemon/buprepairjob.cpp:80 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup repair was not necessary. Your backups are not corrupted.See log file " "for more details." msgstr "" "Eine Reparatur war nicht nötig. Ihre Sicherungsdateien sind in Ordnung. " "Bitte lesen Sie die Log-Datei für mehr Informationen." #: daemon/buprepairjob.cpp:85 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup repair failed. Your backups could still be corrupted! See log file " "for more details." msgstr "" "Die Reparatur der Sicherungsdateien ist fehlgeschlagen. Ihre Sicherung " "könnte immer noch fehlerhaft sein! Weitere Informationen finden Sie in der " "Log-Datei." #: daemon/bupverificationjob.cpp:70 daemon/bupverificationjob.cpp:87 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups are corrupted! See log file for " "more details." msgstr "" "Die Integritätsprüfung der Sicherungsdateien ist fehlgeschlagen. Ihr Backup " "ist fehlerhaft! Weitere Informationen finden Sie in der Log-Datei." #: daemon/bupverificationjob.cpp:76 #, kde-kuit-format msgctxt "@info notification" msgid "Backup integrity test was successful, Your backups are fine." msgstr "" "Die Integritätsprüfung ihrer Sicherungsdateien war erfolgreich. Ihr Backup " "ist in Ordnung." #: daemon/bupverificationjob.cpp:83 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups are corrupted! See log file for " "more details. Do you want to try repairing the backup files?" msgstr "" "Die Integritätsprüfung ist fehlgeschlagen. Ihr Backup ist fehlerhaft! " "Weitere Informationen finden Sie in der Log-Datei. Möchten Sie versuchen, " "die Sicherungsdateien zu reparieren?" #: daemon/edexecutor.cpp:115 daemon/edexecutor.cpp:124 #: daemon/edexecutor.cpp:160 daemon/fsexecutor.cpp:114 #: daemon/fsexecutor.cpp:146 #, kde-kuit-format msgctxt "@title:window" msgid "Problem" msgstr "Problem" #: daemon/edexecutor.cpp:116 daemon/fsexecutor.cpp:115 #, kde-kuit-format msgctxt "notification" msgid "Invalid type of backup in configuration." msgstr "Ungültige Art der Sicherung in der Konfiguration." #: daemon/edexecutor.cpp:125 #, kde-kuit-format msgctxt "notification" msgid "You don't have write permission to backup destination." msgstr "Sie haben keine Schreibrechte auf das Sicherungsziel." #: daemon/kupdaemon.cpp:171 #, kde-format msgid "Continue" msgstr "Fortfahren" #: daemon/kupdaemon.cpp:173 #, kde-format msgid "Stop" msgstr "Anhalten" #: daemon/kupdaemon.cpp:175 #, kde-format msgctxt "%1 is a text explaining the current activity" msgid "Currently busy: %1" msgstr "Beschäftigt: %1" #: daemon/kupdaemon.cpp:176 #, kde-format msgid "Do you really want to stop?" msgstr "Möchten Sie wirklich aufhören?" #: daemon/kupdaemon.cpp:179 #, kde-format msgid "User Backups" msgstr "Benutzerbackups" #: daemon/kupdaemon.cpp:249 #, kde-format msgctxt "status in tooltip" msgid "Backup destination not available" msgstr "Backupziel nicht erreichbar" #: daemon/kupdaemon.cpp:253 daemon/kupdaemon.cpp:310 #, kde-format msgid "No backup plans configured" msgstr "Keine Backupkonfiguration vorhanden" #: daemon/kupdaemon.cpp:259 #, kde-format msgctxt "status in tooltip" msgid "Backup destination available" msgstr "Backupziel erreichbar" #: daemon/kupdaemon.cpp:269 daemon/planexecutor.cpp:84 #, kde-format msgctxt "status in tooltip" msgid "Backup status OK" msgstr "Zustand des Backups ist O.K." #: daemon/kupdaemon.cpp:276 daemon/planexecutor.cpp:86 #, kde-format msgctxt "status in tooltip" msgid "New backup suggested" msgstr "Neues Backup empfohlen" #: daemon/kupdaemon.cpp:283 daemon/planexecutor.cpp:88 #, kde-format msgctxt "status in tooltip" msgid "New backup neeeded" msgstr "Neues Backup nötig" #: daemon/main.cpp:41 #, kde-kuit-format msgctxt "@info:shell Error message at startup" msgid "" "Kup is not enabled, enable it from the system settings module. You can do " "that by running kcmshell5 kup" msgstr "" "Kup ist nicht aktiviert, bitte aktivieren sie es in den Systemeinstellungen. " "Alternativ können Sie kcmshell5 kup eingeben." #: daemon/main.cpp:47 #, kde-kuit-format msgctxt "@title" msgid "Kup Daemon" msgstr "Kup-Hintergrundprogramm" #: daemon/main.cpp:48 #, kde-format msgid "" "Kup is a flexible backup solution using the backup storage system 'bup'. " "This allows it to quickly perform incremental backups, only saving the parts " "of files that has actually changed since last backup was taken." msgstr "" "Kup ist eine flexible Lösung für Datensicherungen die auf dem " "Datensicherungssystem 'bup' basiert. Dies ermöglicht schnelle, inkrementelle " "Datensicherungen, wobei nur die Dateien erneut gesichert werden, die seit " "der letzten Sicherung verändert wurden." #: daemon/main.cpp:51 kcm/kupkcm.cpp:52 #, kde-format msgid "Copyright (C) 2011-2015 Simon Persson" msgstr "Copyright (C) 2011-2015 Simon Persson" #: daemon/main.cpp:53 filedigger/main.cpp:51 kcm/kupkcm.cpp:54 #, kde-format msgid "Simon Persson" msgstr "Simon Persson" #: daemon/main.cpp:54 filedigger/main.cpp:52 kcm/kupkcm.cpp:55 #, kde-kuit-format msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "Georg Lassnig" #: daemon/main.cpp:54 filedigger/main.cpp:52 kcm/kupkcm.cpp:56 #, kde-kuit-format msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "g.assnig@e67-its.de" #: daemon/planexecutor.cpp:76 #, kde-format msgctxt "status in tooltip" msgid "Saving backup" msgstr "Backup wird gespeichert" #: daemon/planexecutor.cpp:78 #, kde-format msgctxt "status in tooltip" msgid "Checking backup integrity" msgstr "Zustand des Backups wird überprüft" #: daemon/planexecutor.cpp:80 #, kde-format msgctxt "status in tooltip" msgid "Repairing backups" msgstr "Backups werden repariert" #: daemon/planexecutor.cpp:118 daemon/planexecutor.cpp:133 #, kde-kuit-format msgctxt "@info" msgid "Do you want to save a first backup now?" msgstr "Möchten Sie jetzt ein erstes Backup anlegen?" #: daemon/planexecutor.cpp:121 #, kde-kuit-format msgctxt "@info" msgid "" "It has been %1 since last backup was saved.\n" "Save a new backup now?" msgstr "" "Es ist %1 her, seit ihr letztes Backup gesichert wurde.\n" "Wollen Sie jetzt ein Backup durchführen?" #: daemon/planexecutor.cpp:137 #, kde-kuit-format msgctxt "@info" msgid "" "You have been active for %1 since last backup was saved.\n" "Save a new backup now?" msgstr "" "Sie waren seit dem letzten Backup für %1 aktiv.\n" "Wollen Sie jetzt ein Backup durchführen?" #: daemon/planexecutor.cpp:170 daemon/planexecutor.cpp:200 #: daemon/planexecutor.cpp:278 #, kde-kuit-format msgctxt "@action:button" msgid "Yes" msgstr "Ja" #: daemon/planexecutor.cpp:170 daemon/planexecutor.cpp:201 #: daemon/planexecutor.cpp:279 #, kde-kuit-format msgctxt "@action:button" msgid "No" msgstr "Nein" #: daemon/planexecutor.cpp:192 #, kde-kuit-format msgctxt "@title:window" msgid "Saving of Backup Failed" msgstr "Speicherung der Sicherungsdateien ist fehlgeschlagen" #: daemon/planexecutor.cpp:197 daemon/planexecutor.cpp:275 #: daemon/planexecutor.cpp:309 #, kde-kuit-format msgctxt "@action:button" msgid "Show log file" msgstr "Zeige Log-Datei" #: daemon/planexecutor.cpp:221 #, kde-kuit-format msgctxt "@title:window" msgid "Backup Saved" msgstr "Backup angelegt" #: daemon/planexecutor.cpp:222 #, kde-kuit-format msgctxt "@info notification" msgid "Saving backup completed successfully." msgstr "Backup erfolgreich durchgeführt" #: daemon/planexecutor.cpp:271 #, kde-kuit-format msgctxt "@title:window" msgid "Integrity Check Completed" msgstr "Integritätsprüfung abgeschlossen" #: daemon/planexecutor.cpp:306 #, kde-kuit-format msgctxt "@title:window" msgid "Repair Completed" msgstr "Reparatur abgeschlossen" #: daemon/planexecutor.cpp:337 po/rc.cpp:47 rc.cpp:47 #, kde-format msgid "Kup Backup System" msgstr "Kup-Datensicherungssystem" #: daemon/rsyncjob.cpp:48 #, kde-kuit-format msgctxt "@info notification" msgid "" "The rsync program is needed but could not be " "found, maybe it is not installed?" msgstr "" "Das rsync Programm wird benötigt, konnte aber " "nicht gefunden werden. Bitte rsync installieren." #: filedigger/main.cpp:47 #, kde-kuit-format msgctxt "@title" msgid "File Digger" msgstr "Datei-Browser" #: filedigger/main.cpp:48 #, kde-format msgid "Browser for bup archives." msgstr "Browser für bup-Archive." #: filedigger/main.cpp:49 #, kde-format msgid "Copyright (C) 2013-2015 Simon Persson" msgstr "Copyright (C) 2013-2015 Simon Persson" #: filedigger/main.cpp:59 #, kde-format msgid "Name of the branch to be opened." msgstr "Name des zu öffnenden Zweiges." #: filedigger/main.cpp:61 #, kde-format msgid "Path to the bup repository to be opened." msgstr "Pfad des zu öffnenden bup-Archivs." #: filedigger/main.cpp:70 #, kde-format msgctxt "@info:shell Error message at startup" msgid "" "You must supply the path to a bup or git repository that you wish to open " "for viewing." msgstr "" "Sie müssen den Pfad zu einem bup- oder git-Archiv angeben, das Sie ansehen " "möchten." #: filedigger/main.cpp:85 #, kde-kuit-format msgctxt "@info messagebox, %1 is a folder path" msgid "" "The backup archive %1 could not be opened. Check if the " "backups really are located there." msgstr "" "Das Sicherungsarchiv %1 konnte nicht geöffnet werden. " "Bitte überprüfen Sie, ob die Sicherungsdateien wirklich dort gespeichert " "sind." #: filedigger/main.cpp:92 #, kde-kuit-format msgctxt "@info messagebox" msgid "You do not have permission needed to read this backup archive." msgstr "" "Sie haben keine ausreichenden Berechtigungen, um dieses Sicherungsarchiv zu " "lesen." #: filedigger/mergedvfs.cpp:108 #, kde-kuit-format msgctxt "@info messagebox" msgid "" "Could not read this backup archive. Perhaps some files have become " "corrupted. Do you want to run an integrity check to test this?" msgstr "" "Das Sicherungsarchiv konnte nicht gelesen werden. Möglicherweise sind einige " "Dateien fehlerhaft. Möchten Sie eine Integritätsprüfung durchführen?" #: filedigger/mergedvfs.cpp:156 #, kde-kuit-format msgctxt "added after folder name in some cases" msgid " (folder)" msgstr " (Ordner)" #: filedigger/mergedvfs.cpp:158 #, kde-kuit-format msgctxt "added after file name in some cases" msgid " (symlink)" msgstr " (Symbolische Verknüpfung)" #: filedigger/mergedvfs.cpp:160 #, kde-kuit-format msgctxt "added after file name in some cases" msgid " (file)" msgstr " (Datei)" #: filedigger/restoredialog.cpp:115 kcm/backupplanwidget.cpp:451 #, kde-kuit-format msgctxt "@action:button" msgid "New Folder..." msgstr "Neuer Ordner..." #: filedigger/restoredialog.cpp:141 filedigger/restoredialog.cpp:160 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "No destination was selected, please select one." msgstr "Es wurde kein Ziel angegeben, bitte wählen Sie eines aus." #: filedigger/restoredialog.cpp:251 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "There was a problem while getting a list of all files to restore: %1" msgstr "" "Es gab ein Problem beim Erstellen einer Liste wiederherzustellender Dateien: " "%1" #: filedigger/restoredialog.cpp:264 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "The destination does not have enough space available. Please choose a " "different destination or free some space." msgstr "" "Auf dem gewählten Ziel ist nicht genügend freier Speicherplatz verfügbar. " "Bitte wählen Sie ein anderes Ziel aus oder geben Sie etwas Speicher frei." #: filedigger/restoredialog.cpp:274 #, kde-kuit-format msgctxt "" "added to the suggested filename when restoring, %1 is the time when backup " "was taken" msgid " - saved at %1" msgstr " - gespeichert in %1" #: filedigger/restoredialog.cpp:275 #, kde-kuit-format msgctxt "@info" msgid "Folder already exists, please choose a solution" msgstr "Der Ordner existiert bereits, bitte wählen Sie eine Lösung aus" #: filedigger/restoredialog.cpp:281 #, kde-kuit-format msgctxt "@info" msgid "File already exists" msgstr "Die Datei existiert bereits" #: filedigger/restoredialog.cpp:294 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "The new name entered already exists, please enter a different one." msgstr "" "Der angegebene Name existiert bereits, bitte geben Sie einen anderen ein." #: filedigger/restoredialog.cpp:371 kcm/dirselector.cpp:50 #, kde-kuit-format msgctxt "default folder name when creating a new folder" msgid "New Folder" msgstr "Neuer Ordner" #: filedigger/restoredialog.cpp:376 kcm/dirselector.cpp:55 #, kde-kuit-format msgctxt "@title:window" msgid "New Folder" msgstr "Neuer Ordner" #: filedigger/restoredialog.cpp:377 kcm/dirselector.cpp:56 #, kde-kuit-format msgctxt "@label:textbox" msgid "" "Create new folder in:\n" "%1" msgstr "" "Neuen Ordner anlegen in:\n" "%1" #: filedigger/restoredialog.cpp:390 kcm/dirselector.cpp:68 #, kde-format msgid "A folder named %1 already exists." msgstr "Ein Ordner namens %1 existiert bereits." #: filedigger/restoredialog.cpp:396 kcm/dirselector.cpp:74 #, kde-format msgid "You do not have permission to create %1." msgstr "Sie haben keine Berechtigung zum Erstellen von %1." #: filedigger/restorejob.cpp:99 #, kde-kuit-format msgctxt "progress report, current operation" msgid "Restoring" msgstr "Wiederherstellen" #: filedigger/restorejob.cpp:100 #, kde-kuit-format msgctxt "progress report, label" msgid "File:" msgstr "Datei:" #: filedigger/versionlistdelegate.cpp:135 #, kde-kuit-format msgctxt "@action:button" msgid "Open" msgstr "Öffnen" #: filedigger/versionlistdelegate.cpp:137 #, kde-kuit-format msgctxt "@action:button" msgid "Restore" msgstr "Wiederherstellen" #: kcm/backupplanwidget.cpp:282 #, kde-kuit-format msgctxt "@action:button" msgid "Exclude Folder" msgstr "Ordner auschließen" #: kcm/backupplanwidget.cpp:285 #, kde-kuit-format msgctxt "@action:button" msgid "Include Folder" msgstr "Ordner auswählen" #: kcm/backupplanwidget.cpp:382 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "You don't have permission to read this folder: %1It cannot be included in the source selection. If it does not contain " "anything important to you, one possible solution is to exclude the folder " "from the backup plan." msgstr "" "Sie haben keine Berechtigung den Ordner %1 zu " "lesen. Er kann nicht in die Quellenauswahl aufgenommen werden. Wenn sich " "darin nichts Wichtiges befindet, wäre eine Lösung, ihn aus der " "Backupkonfiguration zu entfernen." #: kcm/backupplanwidget.cpp:393 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "You don't have permission to read this file: %1It " "cannot be included in the source selection. If the file is not important to " "you, one possible solution is to exclude the whole folder where the file is " "stored from the backup plan." msgstr "" "Sie haben keine Berechtigung die Datei %1 zu " "lesen. Sie kann nicht in die Quellenauswahl aufgenommen werden. Wenn die " "Datei nichts Wichtiges enthält, wäre eine Lösung, den gesamten Ordner aus " "der Backupkonfiguration zu entfernen." #: kcm/backupplanwidget.cpp:409 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "The symbolic link %1 is currently included but it " "points to a folder which is not: %2.That is " "probably not what you want. One solution is to simply include the target " "folder in the backup plan." msgstr "" "Die symbolische Verknüpfung %1 ist zur Zeit Teil des " "Backups, aber der Ordner \"%2\", in der sie sich " "befindet, gehört nicht dazu. Das ist wahrscheinlich nicht, was Sie möchten. " "Eine Lösung wäre, einfach den ganzen Ordner zur Backupkonfiguration " "hinzuzufügen." #: kcm/backupplanwidget.cpp:417 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "The symbolic link %1 is currently included but it " "points to a file which is not: %2.That is probably " "not what you want. One solution is to simply include the folder where the " "file is stored in the backup plan." msgstr "" #: kcm/backupplanwidget.cpp:440 #, kde-kuit-format msgctxt "@title:window" msgid "Select Folder" msgstr "Ordner auswählen" #: kcm/backupplanwidget.cpp:478 #, kde-kuit-format msgctxt "@label" msgid "Description:" msgstr "Beschreibung:" #: kcm/backupplanwidget.cpp:481 #, kde-kuit-format msgctxt "@action:button" msgid "Back to overview" msgstr "Zurück zur Übersicht" #: kcm/backupplanwidget.cpp:510 #, kde-kuit-format msgctxt "@info" msgid "" "This type of backup is an archive. It contains both the " "latest version of your files and earlier backed up versions. Using this type " "of backup allows you to recover older versions of your files, or files which " "were deleted on your computer at a later time. The storage space needed is " "minimized by looking for common parts of your files between versions and " "only storing those parts once. Nevertheless, the backup archive will keep " "growing in size as time goes by.Also important to know is that the " "files in the archive can not be accessed directly with a general file " "manager, a special program is needed." msgstr "" "Diese Art der Sicherung ist ein Archiv. Es enthält " "sowohl die neueste Version Ihrer Dateien und früher gesicherte Versionen. " "Dieser Art von Backups erlaubt es, ältere Versionen von Dateien, oder " "Dateien die auf Ihrem Computer zu einem späteren Zeitpunkt gelöscht wurden, " "wiederherzustellen. Der benötigte Speicherplatz wird dadurch minimiert, dass " "gemeinsame Teile der Dateien innerhalb der Versionen nur einmal gespeichert " "werden. Dennoch wird das Backup-Archiv mit der Zeit wachsen.Auch " "wichtig zu wissen ist, dass die Dateien in dem Archiv kann nicht direkt mit " "einen Datei-Manager angezeigt werden können, es wird ein spezielles Programm " "für den Zugriff benötigt." #: kcm/backupplanwidget.cpp:525 #, kde-kuit-format msgctxt "@option:radio" msgid "" "Versioned Backup (not available because bup is " "not installed)" msgstr "" "Versionierte Datensicherung (nicht verfügbar weil bup nicht installiert ist)" #: kcm/backupplanwidget.cpp:530 #, kde-kuit-format msgctxt "@option:radio" msgid "Versioned Backup (recommended)" msgstr "Versionierte Datensicherung (empfohlen)" #: kcm/backupplanwidget.cpp:535 #, kde-kuit-format msgctxt "@info" msgid "" "This type of backup is a folder which is synchronized with your selected " "source folders. Taking a backup simply means making the backup destination " "contain an exact copy of your source folders as they are now and nothing " "else. If a file has been deleted in a source folder it will get deleted from " "the backup folder.This type of backup can protect you against data loss " "due to a broken hard drive but it does not help you to recover from your own " "mistakes." msgstr "" "Diese Art der Sicherung ist ein Ordner, der mit dem ausgewählten Quell-" "Ordner synchronisiert wird. Nach einem Backup wird der Zielordner lediglich " "eine exakte Kopie des Quellordners enthalten. Wenn eine Datei in einem Quell-" "Ordner gelöscht wird, wird diese auch im Backup-Ordner gelöscht.Diese " "Art der Sicherung kann Sie gegen Datenverlust durch eine defekte Festplatte " "schützen, aber sie hilft nicht bei eigenen Fehlern." #: kcm/backupplanwidget.cpp:548 #, kde-kuit-format msgctxt "@option:radio" msgid "" "Synchronized Backup (not available because rsync " "is not installed)" msgstr "" "Synchronisierte Datensicherung (nicht verfügbar weil rsync nicht installiert ist)" #: kcm/backupplanwidget.cpp:553 #, kde-kuit-format msgctxt "@option:radio" msgid "Synchronized Backup" msgstr "Synchronisierte Datensicherung" #: kcm/backupplanwidget.cpp:581 #, kde-kuit-format msgctxt "@title" msgid "Backup Type" msgstr "Art der Sicherung" #: kcm/backupplanwidget.cpp:582 #, kde-kuit-format msgctxt "@label" msgid "Select what type of backup you want" msgstr "Wählen Sie die Art der Datensicherung aus" #: kcm/backupplanwidget.cpp:590 #, kde-kuit-format msgctxt "@title" msgid "Sources" msgstr "Quellen" #: kcm/backupplanwidget.cpp:591 #, kde-kuit-format msgctxt "@label" msgid "Select which folders to include in backup" msgstr "Verzeichnisse zum Sichern auswählen" #: kcm/backupplanwidget.cpp:605 #, kde-kuit-format msgctxt "@option:radio" msgid "Filesystem Path" msgstr "Dateisystempfad" #: kcm/backupplanwidget.cpp:606 #, kde-kuit-format msgctxt "@option:radio" msgid "External Storage" msgstr "Externer Speicher" #: kcm/backupplanwidget.cpp:612 #, kde-kuit-format msgctxt "@info" msgid "" "You can use this option for backing up to a secondary internal harddrive, an " "external eSATA drive or networked storage. The requirement is just that you " "always mount it at the same path in the filesystem. The path specified here " "does not need to exist at all times, its existance will be monitored." msgstr "" "Sie können diese Option verwenden, um auf eine zweite interne Festplatte, " "eine externe eSATA-Festplatte oder einen Netzwerkspeicher zu sichern. Die " "einzige Voraussetzung dafür ist, dass der Speicher immer am gleichen Ort " "eingebunden wird. Der hier angegebene Pfad muss nicht dauerhaft existieren, " "kup überprüft seine Existenz." #: kcm/backupplanwidget.cpp:619 #, kde-kuit-format msgctxt "@label:textbox" msgid "Destination Path for Backup:" msgstr "Zielpfad für die Datensicherung:" #: kcm/backupplanwidget.cpp:638 #, kde-kuit-format msgctxt "@info" msgid "" "Use this option if you want to backup your files on an external storage that " "can be plugged in to this computer, such as a USB hard drive or memory stick." msgstr "" "Verwenden Sie diese Option, wenn Sie Ihre Dateien auf einem externen " "Speichermedium, der in diesen Computer eingesteckt werden kann, wie z. B. " "einer USB-Festplatte oder einem USB-Stick, sichern möchten." #: kcm/backupplanwidget.cpp:648 kcm/backupplanwidget.cpp:652 #, kde-kuit-format msgctxt "@info:tooltip" msgid "The specified folder will be created if it does not exist." msgstr "" "Das angegebene Verzeichnis wird erstellt falls es noch nicht existiert." #: kcm/backupplanwidget.cpp:650 #, kde-kuit-format msgctxt "@label:textbox" msgid "Folder on Destination Drive:" msgstr "Verzeichnis auf dem Ziellaufwerk:" #: kcm/backupplanwidget.cpp:658 #, kde-kuit-format msgctxt "@info:tooltip" msgid "Open dialog to select a folder" msgstr "Öffnet einen Dialog zur Auswahl eines Ordners" #: kcm/backupplanwidget.cpp:688 #, kde-kuit-format msgctxt "@title" msgid "Destination" msgstr "Ziel" #: kcm/backupplanwidget.cpp:689 #, kde-kuit-format msgctxt "@label" msgid "Select the backup destination" msgstr "Das Datensicherungsziel auswählen" #: kcm/backupplanwidget.cpp:706 #, kde-kuit-format msgctxt "@option:radio" msgid "Manual Activation" msgstr "Manuelle Aktivierung" #: kcm/backupplanwidget.cpp:707 #, kde-kuit-format msgctxt "@option:radio" msgid "Interval" msgstr "Zeitspanne" #: kcm/backupplanwidget.cpp:708 #, kde-kuit-format msgctxt "@option:radio" msgid "Active Usage Time" msgstr "Aktive Nutzungszeit" #: kcm/backupplanwidget.cpp:710 #, kde-kuit-format msgctxt "@info" msgid "" "Backups are only taken when manually requested. This can be done by using " "the popup menu from the backup system tray icon." msgstr "" "Datensicherungen werden nur manuell ausgeführt. Dies kann durch das Popup-" "Menü des Backup-Symbols in der Taskleiste erfolgen." #: kcm/backupplanwidget.cpp:724 #, kde-kuit-format msgctxt "@info" msgid "" "New backup will be triggered when backup destination becomes available and " "more than the configured interval has passed since the last backup was taken." msgstr "" "Ein neues Backup wird erstellt, wenn das Backup-Ziel zur Verfügung steht und " "das konfigurierte Zeit-Intervall seit der letzten Sicherung vergangen ist." #: kcm/backupplanwidget.cpp:741 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Minutes" msgstr "Minuten" #: kcm/backupplanwidget.cpp:742 kcm/backupplanwidget.cpp:769 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Hours" msgstr "Stunden" #: kcm/backupplanwidget.cpp:743 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Days" msgstr "Tagen" #: kcm/backupplanwidget.cpp:744 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Weeks" msgstr "Wochen" #: kcm/backupplanwidget.cpp:754 #, kde-kuit-format msgctxt "@info" msgid "" "New backup will be triggered when backup destination becomes available and " "you have been using your computer actively for more than the configured time " "limit since the last backup was taken." msgstr "" "Ein neues Backup wird erstellt, wenn das Backup-Ziel zur Verfügung steht und " "der Computer für länger als die konfigurierte Zeitspanne aktiv war." #: kcm/backupplanwidget.cpp:775 #, kde-kuit-format msgctxt "@option:check" msgid "Ask for confirmation before taking backup" msgstr "Nachfragen, bevor eine Datensicherung ausgeführt wird" #: kcm/backupplanwidget.cpp:794 #, kde-kuit-format msgctxt "@title" msgid "Schedule" msgstr "Zeitplan" #: kcm/backupplanwidget.cpp:795 #, kde-kuit-format msgctxt "@label" msgid "Specify the backup schedule" msgstr "Geben Sie den Sicherungszeitplan an" #: kcm/backupplanwidget.cpp:808 #, kde-kuit-format msgctxt "@option:check" msgid "Show hidden folders in source selection" msgstr "Versteckte Verzeichnisse in der Quellauswahl anzeigen" #: kcm/backupplanwidget.cpp:814 #, kde-kuit-format msgctxt "@info" msgid "" "This makes it possible to explicitly include or exclude hidden folders in " "the backup source selection. Hidden folders have a name that starts with a " "dot. They are typically located in your home folder and are used to store " "settings and temporary files for your applications." msgstr "" "Dies ermöglicht es, verborgene Verzeichnisse explizit ein- oder " "auszuschließen. Verborgene Verzeichnisse haben einen Namen, der mit einem " "Punkt beginnt. Typischerweise befinden sie sich im Benutzerverzeichnis und " "enthalten Konfigurationsdateien und temporäre Dateien für Ihre Anwendungen." #: kcm/backupplanwidget.cpp:832 #, kde-kuit-format msgctxt "@info" msgid "" "This will make your backups use around 10% more storage space and saving " "backups will take slightly longer time. In return it will be possible to " "recover from a partially corrupted backup." msgstr "" "Dadurch verbraucht Ihre Sicherung etwa 10% mehr Speicherplatz und dauert " "etwas länger. Dafür wird es möglich, eine teilweise fehlerhafte Sicherung zu " "reparieren." #: kcm/backupplanwidget.cpp:838 #, kde-kuit-format msgctxt "@option:check" msgid "Generate recovery information" msgstr "Wiederherstellungsinformationen erzeugen" #: kcm/backupplanwidget.cpp:840 #, kde-kuit-format msgctxt "@option:check" msgid "" "Generate recovery information (not available because par2 is not installed)" msgstr "" "Erzeuge Wiederherstellungsinformationen (nicht verfügbar, weil " "par2 nicht installiert ist)" #: kcm/backupplanwidget.cpp:856 #, kde-kuit-format msgctxt "@option:check" msgid "Verify integrity of backups" msgstr "Integrität der Sicherungen überprüfen" #: kcm/backupplanwidget.cpp:860 #, kde-kuit-format msgctxt "@info" msgid "" "Checks the whole backup archive for corruption every time you save new data. " "Saving backups will take a little bit longer time but it allows you to catch " "corruption problems sooner than at the time you need to use a backup, at " "that time it could be too late." msgstr "" "Überprüft das Sicherungsarchiv auf Fehler, wenn Sie neue Daten hinzufügen. " "Die Speicherung wird etwas länger dauern, dafür werden eventuelle Fehler " "schneller gefunden. Ansonsten könnten Fehler erst gefunden werden, wenn Sie " "die Sicherung wiederherstellen möchten, und dann könnte es zu spät sein." #: kcm/backupplanwidget.cpp:882 #, kde-kuit-format msgctxt "@title" msgid "Advanced" msgstr "Erweitert" #: kcm/backupplanwidget.cpp:883 #, kde-kuit-format msgctxt "@label" msgid "Extra options for advanced users" msgstr "Einstellungen für erfahrene Benutzer" #: kcm/driveselection.cpp:275 #, kde-kuit-format msgctxt "@label Only shown if no drives are detected" msgid "" "Plug in the external storage you wish to use, then select it in this list." msgstr "" "Schließen Sie den externen Speicher, den Sie verwenden möchten, an und " "wählen Sie diesen in der Liste aus." #: kcm/driveselectiondelegate.cpp:75 #, kde-kuit-format msgctxt "@item:inlistbox this text is added if selected drive is disconnected" msgid " (disconnected)" msgstr " (getrennt)" #: kcm/driveselectiondelegate.cpp:78 #, kde-kuit-format msgctxt "@label %1 is amount of free storage space of hard drive" msgid "%1 free" msgstr "%1 frei" #: kcm/driveselectiondelegate.cpp:92 #, kde-kuit-format msgctxt "" "@item:inlistbox used for unnamed filesystems, more than one filesystem on " "device. %1 is partition number, %2 is device description, %3 is either empty " "or the \" (disconnected)\" text" msgid "Partition %1 on %2%3" msgstr "Partition %1 auf %2%3" #: kcm/driveselectiondelegate.cpp:95 #, kde-kuit-format msgctxt "" "@item:inlistbox used when there is only one unnamed filesystem on device. %1 " "is device description, %2 is either empty or the \" (disconnected)\" text" msgid "%1%2" msgstr "%1%2" #: kcm/driveselectiondelegate.cpp:99 #, kde-kuit-format msgctxt "" "@item:inlistbox %1 is filesystem label, %2 is the device description, %3 is " "either empty or the \" (disconnected)\" text" msgid "%1 on %2%3" msgstr "%1 auf %2%3" #: kcm/driveselectiondelegate.cpp:106 #, kde-kuit-format msgctxt "@item:inlistbox %1 is drive(partition) label, %2 is storage capacity" msgid "%1: %2 total capacity" msgstr "%1: %2 Gesamtgröße" #: kcm/driveselectiondelegate.cpp:153 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "" "Warning: Symbolic links and file permissions can not be saved to this file " "system. File permissions only matters if there is more than one user of this " "computer or if you are backing up executable program files." msgstr "" "Warnung: Symbolische Verknüpfungen und Dateiberechtigungen können auf diesem " "Dateisystem nicht gespeichert werden. Berechtigungen sind nur dann wichtig, " "wenn mehrere Benutzer an diesem Computer arbeiten, oder wenn Sie ausführbare " "Programmdateien speichern wollen." #: kcm/driveselectiondelegate.cpp:157 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "" "Warning: File permissions can not be saved to this file system. File " "permissions only matters if there is more than one user of this computer or " "if you are backing up executable program files." msgstr "" "Warnung: Berechtigungen können auf diesem Dateisystem nicht gespeichert " "werden. Berechtigungen sind nur dann wichtig, wenn mehrere Benutzer an " "diesem Computer arbeiten, oder wenn Sie ausführbare Programmdateien " "speichern wollen." #: kcm/folderselectionmodel.cpp:107 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "" "%1will be included in the backup, except for " "unchecked subfolders" msgstr "" "%1wird der Datensicherung hinzugefügt, außer nicht " "ausgewählte Unterordner." #: kcm/folderselectionmodel.cpp:111 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "%1will be included in the backup" msgstr "%1wird der Datensicherung hinzugefügt" #: kcm/folderselectionmodel.cpp:115 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "" "%1 will not be included in " "the backup but contains folders that will" msgstr "" "%1 wird nicht gesichert, " "enthält aber Unterordner, die gesichert werden" #: kcm/folderselectionmodel.cpp:119 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "" "%1 will not be included in " "the backup" msgstr "" "%1wird nicht zur " "Datensicherung hinzugefügt" #: kcm/kupkcm.cpp:49 #, kde-format msgid "Kup Configuration Module" msgstr "Kup-Konfigurationsmodul" #: kcm/kupkcm.cpp:51 #, kde-format msgid "Configuration of backup plans for the Kup backup system" msgstr "" "Zeitpläne für Datensicherungen mit dem Kup-Datensicherungssystem " "konfigurieren" #: kcm/kupkcm.cpp:54 #, kde-format msgid "Maintainer" msgstr "Hauptentwickler" #: kcm/kupkcm.cpp:87 #, kde-format msgid "" "

Backup programs are missing

Before you can activate any backup " "plan you need to install either of

  • bup, for versioned backups
  • rsync, for synchronized backups
" msgstr "" "

Datensicherungsprogramme fehlen

Bevor Sie ein Backup aktivieren " "können, installieren Sie eines der folgenden Programme

  • bup, für " "versionierte Backups
  • rsync, für synchronisierte Backups
" #: kcm/kupkcm.cpp:168 #, kde-kuit-format msgctxt "@title:window" msgid "Warning" msgstr "Warnung" #: kcm/kupkcm.cpp:170 #, kde-kuit-format msgctxt "@info %1 is the name of the backup plan" msgid "" "%1 does not have a destination!No backups will be saved by this plan." msgstr "%1 hat kein ZielEs werden keine Backups von diesem Plan erstellt." #: kcm/kupkcm.cpp:227 #, kde-kuit-format msgctxt "@action:button" msgid "Add New Plan" msgstr "Neuer Datensicherungsplan" #: kcm/kupkcm.cpp:238 #, kde-kuit-format msgctxt "@option:check" msgid "Backups Enabled" msgstr "Datensicherungen aktiviert" #: kcm/planstatuswidget.cpp:48 #, kde-kuit-format msgctxt "@action:button" msgid "Configure" msgstr "Konfigurieren" #: kcm/planstatuswidget.cpp:51 #, kde-kuit-format msgctxt "@action:button" msgid "Remove" msgstr "Entfernen" #: kcm/planstatuswidget.cpp:54 #, kde-kuit-format msgctxt "@action:button" msgid "Duplicate" msgstr "Duplizieren" #: kioslave/bupslave.cpp:92 kioslave/bupslave.cpp:149 kioslave/bupslave.cpp:186 #: kioslave/bupslave.cpp:249 kioslave/bupslave.cpp:271 #, kde-format msgid "" "No bup repository found.\n" "%1" msgstr "" "Kein bup-Archiv gefunden.\n" "%1" #: plasmoid/contents/ui/FullRepresentation.qml:88 #, kde-format msgid "Save new backup" msgstr "Neues Backup anlegen" #: plasmoid/contents/ui/FullRepresentation.qml:94 #, kde-format msgid "Show files" msgstr "Dateien anzeigen" #: plasmoid/contents/ui/FullRepresentation.qml:99 #, kde-format msgid "Show log file" msgstr "Log-Datei anzeigen" #. i18n: file: filedigger/restoredialog.ui:14 #. i18n: ectx: property (windowTitle), widget (QDialog, RestoreDialog) #: po/rc.cpp:3 rc.cpp:3 #, kde-format msgctxt "@title:window" msgid "Restore Guide" msgstr "Wiederherstellungshandbuch" #. i18n: file: filedigger/restoredialog.ui:55 #. i18n: ectx: property (text), widget (QPushButton, mRestoreOriginalButton) #: po/rc.cpp:6 rc.cpp:6 #, kde-format msgctxt "@action:button" msgid "Restore to original location" msgstr "Zum ursprünglichen Speicherort wiederherstellen" #. i18n: file: filedigger/restoredialog.ui:78 #. i18n: ectx: property (text), widget (QPushButton, mRestoreCustomButton) #: po/rc.cpp:9 rc.cpp:9 #, kde-format msgctxt "@action:button" msgid "Choose where to restore" msgstr "Ziel zum Wiederherstellen wählen" #. i18n: file: filedigger/restoredialog.ui:132 #. i18n: ectx: property (text), widget (QPushButton, mDestBackButton) #: po/rc.cpp:12 rc.cpp:12 #, kde-format msgctxt "@action:button" msgid "Back" msgstr "Zurück" #. i18n: file: filedigger/restoredialog.ui:144 #. i18n: ectx: property (text), widget (QPushButton, mDestNextButton) #: po/rc.cpp:15 rc.cpp:15 #, kde-format msgctxt "@action:button" msgid "Next" msgstr "Weiter" #. i18n: file: filedigger/restoredialog.ui:175 #. i18n: ectx: property (text), widget (QRadioButton, mNewNameRadioButton) #: po/rc.cpp:18 rc.cpp:18 #, kde-format msgctxt "@option:radio " msgid "Restore the folder under a new name" msgstr "Ordner unter einem neuen Namen wiederherstellen" #. i18n: file: filedigger/restoredialog.ui:208 #. i18n: ectx: property (text), widget (QRadioButton, mOverwriteRadioButton) #: po/rc.cpp:21 rc.cpp:21 #, kde-format msgctxt "@option:radio" msgid "Merge folders" msgstr "Ordner zusammenführen" #. i18n: file: filedigger/restoredialog.ui:238 #. i18n: ectx: property (text), widget (QLabel, mConfirmOverwriteLabel) #: po/rc.cpp:24 rc.cpp:24 #, kde-format msgctxt "@info Question to user, in dialog" msgid "" "The following files would be overwritten, please confirm that you wish to " "continue." msgstr "" "Die folgenden Dateien werden überschrieben. Bitte bestätigen Sie, dass Sie " "fortfahren möchten." #. i18n: file: filedigger/restoredialog.ui:274 #. i18n: ectx: property (text), widget (QPushButton, mOverwriteBackButton) #: po/rc.cpp:27 rc.cpp:27 #, kde-format msgctxt "@action:button go to previous page in dialog" msgid "Back" msgstr "Zurück" #. i18n: file: filedigger/restoredialog.ui:286 #. i18n: ectx: property (text), widget (QPushButton, mConfirmButton) #: po/rc.cpp:30 rc.cpp:30 #, kde-format msgctxt "@action:button User answers \"yes I confirm: overwrite files\"" msgid "Confirm" msgstr "Bestätigen" #. i18n: file: filedigger/restoredialog.ui:341 #. i18n: ectx: property (text), widget (QLabel, mErrorLabel) #: po/rc.cpp:33 rc.cpp:33 #, fuzzy, kde-format msgctxt "@label above the detailed error message" msgid "An error occured while restoring:" msgstr "Bei der Wiederherstellung ist ein Fehler aufgetreten:" #. i18n: file: filedigger/restoredialog.ui:372 #. i18n: ectx: property (text), widget (QLabel, label) #: po/rc.cpp:36 rc.cpp:36 #, fuzzy, kde-format msgctxt "@label" msgid "Restoration completed successfully!" msgstr "Wiederherstellung erfolgreich abgeschlossen!" #. i18n: file: filedigger/restoredialog.ui:413 #. i18n: ectx: property (text), widget (QPushButton, mOpenDestinationButton) #: po/rc.cpp:39 rc.cpp:39 #, kde-format msgid "Open Destination" msgstr "Zielordner öffnen" #. i18n: file: filedigger/restoredialog.ui:472 #. i18n: ectx: property (text), widget (QPushButton, mCloseButton) #: po/rc.cpp:42 rc.cpp:42 #, kde-format msgctxt "@action:button" msgid "Close" msgstr "Schließen" #: po/rc.cpp:43 po/rc.cpp:58 settings/backupplan.cpp:69 rc.cpp:43 rc.cpp:58 #, kde-format msgid "Backups" msgstr "Datensicherungen" #: po/rc.cpp:44 rc.cpp:44 msgid "Configure backup plans" msgstr "Datensicherungspläne konfigurieren" #: po/rc.cpp:45 rc.cpp:45 msgid "backup,recovery,safety" msgstr "Datensicherung,Wiederherstellung,Sicherheit" #: po/rc.cpp:46 rc.cpp:46 msgid "Kup" msgstr "Kup" #: po/rc.cpp:48 rc.cpp:48 msgid "Start taking backup" msgstr "Erstellen der Sicherung starten" #: po/rc.cpp:49 rc.cpp:49 msgid "A question if user wants to start taking a backup" msgstr "Die Frage, ob der Benutzer die Sicherung starten möchte" #: po/rc.cpp:50 rc.cpp:50 msgid "Backup succeeded" msgstr "Backup erfolgreich" #: po/rc.cpp:51 rc.cpp:51 msgid "Saving of backup successfully completed" msgstr "Sicherung des Backups erfolgreich abgeschlossen" #: po/rc.cpp:52 rc.cpp:52 msgid "Backup failed" msgstr "Sicherung fehlgeschlagen" #: po/rc.cpp:53 rc.cpp:53 msgid "Saving of backup failed, offer user to see log file" msgstr "" "Ein Fehler bei der Sicherung ist aufgetreten, dem Benutzer wird angeboten, " "die Log-Datei zu lesen." #: po/rc.cpp:54 rc.cpp:54 msgid "Integrity check completed" msgstr "Integritätsprüfung abgeschlossen" #: po/rc.cpp:55 rc.cpp:55 msgid "Finished checking integrity of backup archive" msgstr "Integritätsprüfung des Datensicherungsarchivs abgeschlossen" #: po/rc.cpp:56 rc.cpp:56 msgid "Repair completed" msgstr "Reparatur abgeschlossen" #: po/rc.cpp:57 rc.cpp:57 msgid "Finished repairing backup archive" msgstr "Reparatur des Datensicherungsarchivs abgeschlossen" #: po/rc.cpp:59 rc.cpp:59 msgid "Status of backup plans" msgstr "Zustand der Backupkonfiguration" #: po/rc.cpp:60 rc.cpp:60 msgid "Backup Status" msgstr "Zustand des Backups" #: po/rc.cpp:61 rc.cpp:61 msgid "Displays status of backup plans" msgstr "Status der Backupkonfigurationen anzeigen" #: settings/backupplan.cpp:38 #, kde-kuit-format msgctxt "" "@label Default name for a new backup plan, %1 is the number of the plan in " "order" msgid "Backup plan %1" msgstr "Datensicherungsplan %1" #: settings/backupplan.cpp:101 #, kde-format msgctxt "default description of newly duplicated backup plan" msgid "%1 (copy)" msgstr "%1 (kopieren)" #: settings/backupplan.cpp:213 #, kde-format msgctxt "%1 is fancy formatted date" msgid "Last saved: %1" msgstr "Zuletzt gesichert: %1" #: settings/backupplan.cpp:218 #, kde-format msgctxt "%1 is storage size of archive" msgid "Size: %1" msgstr "Größe: %1" #: settings/backupplan.cpp:223 #, kde-format msgctxt "%1 is free storage space" msgid "Free space: %1" msgstr "Speicher frei: %1" #: settings/backupplan.cpp:227 #, kde-kuit-format msgctxt "@label" msgid "This backup plan has never been run." msgstr "Dieser Sicherungsplan wurde noch nie ausgeführt." kup-backup-0.7.1+dfsg/po/es.po000066400000000000000000001205301322613417100160660ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Administrador de Sistemas de Koali , 2014 # Alex Castilla , 2017 # Francisco García Cisneros , 2013 # seryeb - , 2017 # Simon Persson , 2014 # Simon Persson , 2014-2015,2018 msgid "" msgstr "" "Project-Id-Version: kup\n" "Report-Msgid-Bugs-To: http://kde-apps.org/content/show.php/Kup+Backup+System?" "content=147465\n" "POT-Creation-Date: 2018-01-05 16:00+0800\n" "PO-Revision-Date: 2018-01-05 07:58+0000\n" "Last-Translator: Simon Persson \n" "Language-Team: Spanish (http://www.transifex.com/kup/kup/language/es/)\n" "Language: es\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" #: daemon/bupjob.cpp:47 daemon/buprepairjob.cpp:38 #: daemon/bupverificationjob.cpp:37 #, kde-kuit-format msgctxt "@info notification" msgid "" "The bup program is needed but could not be found, " "maybe it is not installed?" msgstr "" "El programa bup es necesario pero no pudo " "encontrarse, ¿podría no estar instalado?" #: daemon/bupjob.cpp:52 daemon/buprepairjob.cpp:43 #, kde-kuit-format msgctxt "@info notification" msgid "" "The par2 program is needed but could not be " "found, maybe it is not installed?" msgstr "" "El programa par2 es necesario pero no pudo " "encontrarse, ¿podría no estar instalado?" #: daemon/bupjob.cpp:71 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup destination could not be initialised. See log file for more details." msgstr "" "El destino de la copia de seguridad no pudo ser inicializado. Revisa los " "eventos para más detalles." #: daemon/bupjob.cpp:93 #, kde-format msgid "Checking backup integrity" msgstr "Comprobando la integridad de la copia de seguridad" #: daemon/bupjob.cpp:104 daemon/bupverificationjob.cpp:67 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups could be corrupted! See log file " "for more details. Do you want to try repairing the backup files?" msgstr "" "Fallo la comprobación de integridad. Su copia de seguridad puede estar " "corrupta!! Ver el archivo de log para mas detalles. Quiere que se intente la " "reparación de los archivos de copia de seguridad?" #: daemon/bupjob.cpp:108 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups could be corrupted! See log file " "for more details." msgstr "" "Fallo la comprobación de integridad. Su copia de seguridad puede estar " "corrupta!! Ver el archivo de log para mas detalles." #: daemon/bupjob.cpp:131 daemon/rsyncjob.cpp:57 #, kde-format msgid "Checking what to copy" msgstr "" #: daemon/bupjob.cpp:138 #, kde-kuit-format msgctxt "@info notification" msgid "Failed to analyze files. See log file for more details." msgstr "" #: daemon/bupjob.cpp:159 daemon/bupjob.cpp:253 daemon/rsyncjob.cpp:175 #, kde-format msgid "Saving backup" msgstr "Haciendo nueva copia de seguridad" #: daemon/bupjob.cpp:167 daemon/rsyncjob.cpp:120 #, kde-kuit-format msgctxt "@info notification" msgid "Failed to save backup. See log file for more details." msgstr "" #: daemon/bupjob.cpp:189 #, kde-format msgid "Generating recovery information" msgstr "" #: daemon/bupjob.cpp:197 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed to generate recovery info for the backup. See log file for more " "details." msgstr "" #: daemon/bupjob.cpp:254 daemon/rsyncjob.cpp:176 #, kde-format msgctxt "Label for file currently being copied" msgid "File" msgstr "Archivo" #: daemon/buprepairjob.cpp:72 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup repair failed. Your backups could be corrupted! See log file for more " "details." msgstr "" #: daemon/buprepairjob.cpp:76 #, kde-kuit-format msgctxt "@info notification" msgid "Success! Backup repair worked. See log file for more details." msgstr "" #: daemon/buprepairjob.cpp:80 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup repair was not necessary. Your backups are not corrupted.See log file " "for more details." msgstr "" #: daemon/buprepairjob.cpp:85 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup repair failed. Your backups could still be corrupted! See log file " "for more details." msgstr "" #: daemon/bupverificationjob.cpp:70 daemon/bupverificationjob.cpp:87 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups are corrupted! See log file for " "more details." msgstr "" "Fallo la comprobación de integridad. Su copia de seguridad puede estar " "corrupta!! Ver el archivo de log para mas detalles. Quiere que se intente la " "reparación de los archivos de copia de seguridad?" #: daemon/bupverificationjob.cpp:76 #, kde-kuit-format msgctxt "@info notification" msgid "Backup integrity test was successful, Your backups are fine." msgstr "" #: daemon/bupverificationjob.cpp:83 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups are corrupted! See log file for " "more details. Do you want to try repairing the backup files?" msgstr "" "Fallo la comprobación de integridad. Su copia de seguridad puede estar " "corrupta!! Ver el archivo de log para mas detalles. Quiere que se intente la " "reparación de los archivos de copia de seguridad?" #: daemon/edexecutor.cpp:115 daemon/edexecutor.cpp:124 #: daemon/edexecutor.cpp:160 daemon/fsexecutor.cpp:114 #: daemon/fsexecutor.cpp:146 #, kde-kuit-format msgctxt "@title:window" msgid "Problem" msgstr "Problema" #: daemon/edexecutor.cpp:116 daemon/fsexecutor.cpp:115 #, kde-kuit-format msgctxt "notification" msgid "Invalid type of backup in configuration." msgstr "Tipo incorrecto de copia en la configuración." #: daemon/edexecutor.cpp:125 #, kde-kuit-format msgctxt "notification" msgid "You don't have write permission to backup destination." msgstr "" #: daemon/kupdaemon.cpp:171 #, kde-format msgid "Continue" msgstr "" #: daemon/kupdaemon.cpp:173 #, kde-format msgid "Stop" msgstr "" #: daemon/kupdaemon.cpp:175 #, kde-format msgctxt "%1 is a text explaining the current activity" msgid "Currently busy: %1" msgstr "" #: daemon/kupdaemon.cpp:176 #, kde-format msgid "Do you really want to stop?" msgstr "" #: daemon/kupdaemon.cpp:179 #, kde-format msgid "User Backups" msgstr "" #: daemon/kupdaemon.cpp:249 #, kde-format msgctxt "status in tooltip" msgid "Backup destination not available" msgstr "Destino de la copia de seguridad no disponible" #: daemon/kupdaemon.cpp:253 daemon/kupdaemon.cpp:310 #, kde-format msgid "No backup plans configured" msgstr "" #: daemon/kupdaemon.cpp:259 #, kde-format msgctxt "status in tooltip" msgid "Backup destination available" msgstr "Destino de la copia de seguridad disponible" #: daemon/kupdaemon.cpp:269 daemon/planexecutor.cpp:84 #, kde-format msgctxt "status in tooltip" msgid "Backup status OK" msgstr "Estado de la copia de seguridad correcto" #: daemon/kupdaemon.cpp:276 daemon/planexecutor.cpp:86 #, kde-format msgctxt "status in tooltip" msgid "New backup suggested" msgstr "Recomendada nueva copia de seguridad" #: daemon/kupdaemon.cpp:283 daemon/planexecutor.cpp:88 #, kde-format msgctxt "status in tooltip" msgid "New backup neeeded" msgstr "Necesaria nueva copia de seguridad" #: daemon/main.cpp:41 #, kde-kuit-format msgctxt "@info:shell Error message at startup" msgid "" "Kup is not enabled, enable it from the system settings module. You can do " "that by running kcmshell5 kup" msgstr "" "Kup no está habilitado, habilítalo desde el módulo de Preferencias del " "Sistema:kcmshell5 kup" #: daemon/main.cpp:47 #, kde-kuit-format msgctxt "@title" msgid "Kup Daemon" msgstr "Demonio Kup" #: daemon/main.cpp:48 #, kde-format msgid "" "Kup is a flexible backup solution using the backup storage system 'bup'. " "This allows it to quickly perform incremental backups, only saving the parts " "of files that has actually changed since last backup was taken." msgstr "" "Kup es una solución de copias de seguridad flexible que usa el sistema de " "almacenamiento de copias de seguridad 'bup'. Esto permite realizar copias de " "seguridad incrementales rápidamente, sólo guardando las partes de los " "archivos que realmente han cambiado desde que se realizó la última copia de " "seguridad." #: daemon/main.cpp:51 kcm/kupkcm.cpp:52 #, kde-format msgid "Copyright (C) 2011-2015 Simon Persson" msgstr "Copyright (C) 2011-2015 Simon Persson" #: daemon/main.cpp:53 filedigger/main.cpp:51 kcm/kupkcm.cpp:54 #, kde-format msgid "Simon Persson" msgstr "Simon Persson" #: daemon/main.cpp:54 filedigger/main.cpp:52 kcm/kupkcm.cpp:55 #, kde-kuit-format msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "Administrador de Sistemas de Koali" #: daemon/main.cpp:54 filedigger/main.cpp:52 kcm/kupkcm.cpp:56 #, kde-kuit-format msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "admin@koali.es" #: daemon/planexecutor.cpp:76 #, kde-format msgctxt "status in tooltip" msgid "Saving backup" msgstr "Haciendo nueva copia de seguridad" #: daemon/planexecutor.cpp:78 #, kde-format msgctxt "status in tooltip" msgid "Checking backup integrity" msgstr "Comprobando la integridad de la copia de seguridad" #: daemon/planexecutor.cpp:80 #, kde-format msgctxt "status in tooltip" msgid "Repairing backups" msgstr "" #: daemon/planexecutor.cpp:118 daemon/planexecutor.cpp:133 #, kde-kuit-format msgctxt "@info" msgid "Do you want to save a first backup now?" msgstr "¿Desea realizar la primera copia de seguridad ahora?" #: daemon/planexecutor.cpp:121 #, kde-kuit-format msgctxt "@info" msgid "" "It has been %1 since last backup was saved.\n" "Save a new backup now?" msgstr "" "Hace %1 desde que se realizó la última copia de seguridad.\n" "¿Desea realizar una copia de seguridad ahora?" #: daemon/planexecutor.cpp:137 #, kde-kuit-format msgctxt "@info" msgid "" "You have been active for %1 since last backup was saved.\n" "Save a new backup now?" msgstr "" "Ha estado activo con este ordenador por %1 desde que se realizó la última " "copia de seguridad.\n" " ¿Desea realizar una copia de seguridad ahora?" #: daemon/planexecutor.cpp:170 daemon/planexecutor.cpp:200 #: daemon/planexecutor.cpp:278 #, kde-kuit-format msgctxt "@action:button" msgid "Yes" msgstr "Sí" #: daemon/planexecutor.cpp:170 daemon/planexecutor.cpp:201 #: daemon/planexecutor.cpp:279 #, kde-kuit-format msgctxt "@action:button" msgid "No" msgstr "No" #: daemon/planexecutor.cpp:192 #, kde-kuit-format msgctxt "@title:window" msgid "Saving of Backup Failed" msgstr "" #: daemon/planexecutor.cpp:197 daemon/planexecutor.cpp:275 #: daemon/planexecutor.cpp:309 #, kde-kuit-format msgctxt "@action:button" msgid "Show log file" msgstr "" #: daemon/planexecutor.cpp:221 #, kde-kuit-format msgctxt "@title:window" msgid "Backup Saved" msgstr "" #: daemon/planexecutor.cpp:222 #, kde-kuit-format msgctxt "@info notification" msgid "Saving backup completed successfully." msgstr "" #: daemon/planexecutor.cpp:271 #, kde-kuit-format msgctxt "@title:window" msgid "Integrity Check Completed" msgstr "" #: daemon/planexecutor.cpp:306 #, kde-kuit-format msgctxt "@title:window" msgid "Repair Completed" msgstr "" #: daemon/planexecutor.cpp:337 po/rc.cpp:47 rc.cpp:47 #, kde-format msgid "Kup Backup System" msgstr "" #: daemon/rsyncjob.cpp:48 #, kde-kuit-format msgctxt "@info notification" msgid "" "The rsync program is needed but could not be " "found, maybe it is not installed?" msgstr "" "El programa rsync es necesario pero no pudo " "encontrarse, ¿podría no estar instalado?" #: filedigger/main.cpp:47 #, kde-kuit-format msgctxt "@title" msgid "File Digger" msgstr "Extractor de Archivos" #: filedigger/main.cpp:48 #, kde-format msgid "Browser for bup archives." msgstr "Navegador para archivos bup." #: filedigger/main.cpp:49 #, kde-format msgid "Copyright (C) 2013-2015 Simon Persson" msgstr "Copyright (C) 2013-2015 Simon Persson" #: filedigger/main.cpp:59 #, kde-format msgid "Name of the branch to be opened." msgstr "Nombre de la rama a abrir." #: filedigger/main.cpp:61 #, kde-format msgid "Path to the bup repository to be opened." msgstr "Ruta al repositorio bup a abrir." #: filedigger/main.cpp:70 #, kde-format msgctxt "@info:shell Error message at startup" msgid "" "You must supply the path to a bup or git repository that you wish to open " "for viewing." msgstr "" "Debe suministrar la ruta a un repositorio bup o git que desee abrir par ser " "mostrado." #: filedigger/main.cpp:85 #, kde-kuit-format msgctxt "@info messagebox, %1 is a folder path" msgid "" "The backup archive %1 could not be opened. Check if the " "backups really are located there." msgstr "" #: filedigger/main.cpp:92 #, kde-kuit-format msgctxt "@info messagebox" msgid "You do not have permission needed to read this backup archive." msgstr "" #: filedigger/mergedvfs.cpp:108 #, kde-kuit-format msgctxt "@info messagebox" msgid "" "Could not read this backup archive. Perhaps some files have become " "corrupted. Do you want to run an integrity check to test this?" msgstr "" #: filedigger/mergedvfs.cpp:156 #, kde-kuit-format msgctxt "added after folder name in some cases" msgid " (folder)" msgstr "(carpeta)" #: filedigger/mergedvfs.cpp:158 #, kde-kuit-format msgctxt "added after file name in some cases" msgid " (symlink)" msgstr "(enlace)" #: filedigger/mergedvfs.cpp:160 #, kde-kuit-format msgctxt "added after file name in some cases" msgid " (file)" msgstr "(archivo)" #: filedigger/restoredialog.cpp:115 kcm/backupplanwidget.cpp:451 #, kde-kuit-format msgctxt "@action:button" msgid "New Folder..." msgstr "Nueva Carpeta..." #: filedigger/restoredialog.cpp:141 filedigger/restoredialog.cpp:160 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "No destination was selected, please select one." msgstr "No se seleccionó destino, por favor, seleccione uno." #: filedigger/restoredialog.cpp:251 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "There was a problem while getting a list of all files to restore: %1" msgstr "" #: filedigger/restoredialog.cpp:264 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "The destination does not have enough space available. Please choose a " "different destination or free some space." msgstr "" "El destino no tiene suficiente espacio disponible. Por favor, escoja otro " "destino diferente o libere más espacio." #: filedigger/restoredialog.cpp:274 #, kde-kuit-format msgctxt "" "added to the suggested filename when restoring, %1 is the time when backup " "was taken" msgid " - saved at %1" msgstr "- guardado en %1" #: filedigger/restoredialog.cpp:275 #, kde-kuit-format msgctxt "@info" msgid "Folder already exists, please choose a solution" msgstr "La carpeta ya existe, por favor, escoja una solución" #: filedigger/restoredialog.cpp:281 #, kde-kuit-format msgctxt "@info" msgid "File already exists" msgstr "El archivo ya existe" #: filedigger/restoredialog.cpp:294 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "The new name entered already exists, please enter a different one." msgstr "" "El nuevo nombre introducido ya existe, por favor, introduzca uno diferente." #: filedigger/restoredialog.cpp:371 kcm/dirselector.cpp:50 #, kde-kuit-format msgctxt "default folder name when creating a new folder" msgid "New Folder" msgstr "Nueva Carpeta" #: filedigger/restoredialog.cpp:376 kcm/dirselector.cpp:55 #, kde-kuit-format msgctxt "@title:window" msgid "New Folder" msgstr "Nueva Carpeta" #: filedigger/restoredialog.cpp:377 kcm/dirselector.cpp:56 #, kde-kuit-format msgctxt "@label:textbox" msgid "" "Create new folder in:\n" "%1" msgstr "" "Crear nueva carpeta en:\n" "%1" #: filedigger/restoredialog.cpp:390 kcm/dirselector.cpp:68 #, kde-format msgid "A folder named %1 already exists." msgstr "Una carpeta llamada %1 ya existe." #: filedigger/restoredialog.cpp:396 kcm/dirselector.cpp:74 #, kde-format msgid "You do not have permission to create %1." msgstr "No tienes permiso para crear %1." #: filedigger/restorejob.cpp:99 #, kde-kuit-format msgctxt "progress report, current operation" msgid "Restoring" msgstr "Restaurando" #: filedigger/restorejob.cpp:100 #, kde-kuit-format msgctxt "progress report, label" msgid "File:" msgstr "Archivo:" #: filedigger/versionlistdelegate.cpp:135 #, kde-kuit-format msgctxt "@action:button" msgid "Open" msgstr "Abrir" #: filedigger/versionlistdelegate.cpp:137 #, kde-kuit-format msgctxt "@action:button" msgid "Restore" msgstr "Restaurar" #: kcm/backupplanwidget.cpp:282 #, kde-kuit-format msgctxt "@action:button" msgid "Exclude Folder" msgstr "" #: kcm/backupplanwidget.cpp:285 #, kde-kuit-format msgctxt "@action:button" msgid "Include Folder" msgstr "" #: kcm/backupplanwidget.cpp:382 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "You don't have permission to read this folder: %1It cannot be included in the source selection. If it does not contain " "anything important to you, one possible solution is to exclude the folder " "from the backup plan." msgstr "" #: kcm/backupplanwidget.cpp:393 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "You don't have permission to read this file: %1It " "cannot be included in the source selection. If the file is not important to " "you, one possible solution is to exclude the whole folder where the file is " "stored from the backup plan." msgstr "" #: kcm/backupplanwidget.cpp:409 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "The symbolic link %1 is currently included but it " "points to a folder which is not: %2.That is " "probably not what you want. One solution is to simply include the target " "folder in the backup plan." msgstr "" #: kcm/backupplanwidget.cpp:417 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "The symbolic link %1 is currently included but it " "points to a file which is not: %2.That is probably " "not what you want. One solution is to simply include the folder where the " "file is stored in the backup plan." msgstr "" #: kcm/backupplanwidget.cpp:440 #, kde-kuit-format msgctxt "@title:window" msgid "Select Folder" msgstr "Seleccionar Carpeta" #: kcm/backupplanwidget.cpp:478 #, kde-kuit-format msgctxt "@label" msgid "Description:" msgstr "Descripción:" #: kcm/backupplanwidget.cpp:481 #, kde-kuit-format msgctxt "@action:button" msgid "Back to overview" msgstr "Volver a vista general" #: kcm/backupplanwidget.cpp:510 #, kde-kuit-format msgctxt "@info" msgid "" "This type of backup is an archive. It contains both the " "latest version of your files and earlier backed up versions. Using this type " "of backup allows you to recover older versions of your files, or files which " "were deleted on your computer at a later time. The storage space needed is " "minimized by looking for common parts of your files between versions and " "only storing those parts once. Nevertheless, the backup archive will keep " "growing in size as time goes by.Also important to know is that the " "files in the archive can not be accessed directly with a general file " "manager, a special program is needed." msgstr "" "Este tipo de copia es un archivo. Contiene tanto la " "última versión de sus archivos como las versiones anteriormente copiadas. " "Esar este tipo de copia te permite recuperar versiones antiguas de tus " "archivos, o archivos que fueron borrados del ordenador más tarde. El espacio " "necesario se minimiza buscando partes comunes en tus archivos entre " "versiones, sólo copiando dichas partes una única vez. Sin embargo, el " "archivo de copias seguirá creciendo de tamaño según el tiempo avance.También es importante saber que los archivos no pueden abrirse directamente " "con un gestor de archivos estándar, se necesita un programa especial." #: kcm/backupplanwidget.cpp:525 #, kde-kuit-format msgctxt "@option:radio" msgid "" "Versioned Backup (not available because bup is " "not installed)" msgstr "" "Control de Versiones (no disponible porque bup no " "está instalado)" #: kcm/backupplanwidget.cpp:530 #, kde-kuit-format msgctxt "@option:radio" msgid "Versioned Backup (recommended)" msgstr "Control de Versiones (recomendado)" #: kcm/backupplanwidget.cpp:535 #, kde-kuit-format msgctxt "@info" msgid "" "This type of backup is a folder which is synchronized with your selected " "source folders. Taking a backup simply means making the backup destination " "contain an exact copy of your source folders as they are now and nothing " "else. If a file has been deleted in a source folder it will get deleted from " "the backup folder.This type of backup can protect you against data loss " "due to a broken hard drive but it does not help you to recover from your own " "mistakes." msgstr "" "Este tipo de copia es una carpeta que está sincronizada con tus carpetas " "origen seleccionadas. Hacer una copia simplemente significa hacer que el " "destino de la copia contenga una copia exacta del origen tal cual está ahora " "y nada más. Si un archivo ha sido borrado en el origen, éste será borrado en " "la carpeta copia.Este tipo de copia puede protegerte contra una pérdida " "de información por un disco duro defectuoso, pero no ayudar a recuperar " "errores humanos." #: kcm/backupplanwidget.cpp:548 #, kde-kuit-format msgctxt "@option:radio" msgid "" "Synchronized Backup (not available because rsync " "is not installed)" msgstr "" "Copia Sincronizada (no disponible porque rsync no " "está instalado)" #: kcm/backupplanwidget.cpp:553 #, kde-kuit-format msgctxt "@option:radio" msgid "Synchronized Backup" msgstr "Copia Sincronizada" #: kcm/backupplanwidget.cpp:581 #, kde-kuit-format msgctxt "@title" msgid "Backup Type" msgstr "Tipo de Copia" #: kcm/backupplanwidget.cpp:582 #, kde-kuit-format msgctxt "@label" msgid "Select what type of backup you want" msgstr "Selecciona qué tipo de copia quieres" #: kcm/backupplanwidget.cpp:590 #, kde-kuit-format msgctxt "@title" msgid "Sources" msgstr "Fuentes" #: kcm/backupplanwidget.cpp:591 #, kde-kuit-format msgctxt "@label" msgid "Select which folders to include in backup" msgstr "Selecciona las carpetas a incluir en la copia de seguridad" #: kcm/backupplanwidget.cpp:605 #, kde-kuit-format msgctxt "@option:radio" msgid "Filesystem Path" msgstr "Ruta del sistema de archivos" #: kcm/backupplanwidget.cpp:606 #, kde-kuit-format msgctxt "@option:radio" msgid "External Storage" msgstr "Almacenamiento externo" #: kcm/backupplanwidget.cpp:612 #, kde-kuit-format msgctxt "@info" msgid "" "You can use this option for backing up to a secondary internal harddrive, an " "external eSATA drive or networked storage. The requirement is just that you " "always mount it at the same path in the filesystem. The path specified here " "does not need to exist at all times, its existance will be monitored." msgstr "" #: kcm/backupplanwidget.cpp:619 #, kde-kuit-format msgctxt "@label:textbox" msgid "Destination Path for Backup:" msgstr "Ruta de destino para la Copia:" #: kcm/backupplanwidget.cpp:638 #, kde-kuit-format msgctxt "@info" msgid "" "Use this option if you want to backup your files on an external storage that " "can be plugged in to this computer, such as a USB hard drive or memory stick." msgstr "" "Usa esta opción si quieres copiar tus archivos en un almacenamiento externo " "que puede ser enchufado al ordenador, como un disco duro USB o un pendrive." #: kcm/backupplanwidget.cpp:648 kcm/backupplanwidget.cpp:652 #, kde-kuit-format msgctxt "@info:tooltip" msgid "The specified folder will be created if it does not exist." msgstr "La carpeta espeficicada será creada si no existe." #: kcm/backupplanwidget.cpp:650 #, kde-kuit-format msgctxt "@label:textbox" msgid "Folder on Destination Drive:" msgstr "Carpeta en el dispositivo de destino:" #: kcm/backupplanwidget.cpp:658 #, kde-kuit-format msgctxt "@info:tooltip" msgid "Open dialog to select a folder" msgstr "Abrir diálogo para seleccionar carpeta" #: kcm/backupplanwidget.cpp:688 #, kde-kuit-format msgctxt "@title" msgid "Destination" msgstr "Destino" #: kcm/backupplanwidget.cpp:689 #, kde-kuit-format msgctxt "@label" msgid "Select the backup destination" msgstr "Selecciona el destino de la copia de seguridad" #: kcm/backupplanwidget.cpp:706 #, kde-kuit-format msgctxt "@option:radio" msgid "Manual Activation" msgstr "Activación Manual" #: kcm/backupplanwidget.cpp:707 #, kde-kuit-format msgctxt "@option:radio" msgid "Interval" msgstr "Intervalo" #: kcm/backupplanwidget.cpp:708 #, kde-kuit-format msgctxt "@option:radio" msgid "Active Usage Time" msgstr "Tiempo de uso activo" #: kcm/backupplanwidget.cpp:710 #, kde-kuit-format msgctxt "@info" msgid "" "Backups are only taken when manually requested. This can be done by using " "the popup menu from the backup system tray icon." msgstr "" "Las copias de seguridad sólo se realizan cuando se solicita manualmente. " "Esto se puede hacer usando el menu contextual desde el icono de la bandeja " "del sistema de copias de seguridad." #: kcm/backupplanwidget.cpp:724 #, kde-kuit-format msgctxt "@info" msgid "" "New backup will be triggered when backup destination becomes available and " "more than the configured interval has passed since the last backup was taken." msgstr "" "Una nueva copia de seguridad se lanzará cuando el destino de la copia de " "seguridad esté disponible y haya transcurrido un intervalo de tiempo mayor " "del configurado desde que se realizó la última copia de seguridad." #: kcm/backupplanwidget.cpp:741 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Minutes" msgstr "Minutos" #: kcm/backupplanwidget.cpp:742 kcm/backupplanwidget.cpp:769 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Hours" msgstr "Horas" #: kcm/backupplanwidget.cpp:743 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Days" msgstr "Días" #: kcm/backupplanwidget.cpp:744 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Weeks" msgstr "Semanas" #: kcm/backupplanwidget.cpp:754 #, kde-kuit-format msgctxt "@info" msgid "" "New backup will be triggered when backup destination becomes available and " "you have been using your computer actively for more than the configured time " "limit since the last backup was taken." msgstr "" "Se activará una nueva copia de seguridad cuando la carpeta destino esté " "disponible y se haya usado tu ordenador activamente más del tiempo límite " "configurado desde que se hizo la última copia de seguridad." #: kcm/backupplanwidget.cpp:775 #, kde-kuit-format msgctxt "@option:check" msgid "Ask for confirmation before taking backup" msgstr "Pedir confirmación antes de realizar una copia de seguridad" #: kcm/backupplanwidget.cpp:794 #, kde-kuit-format msgctxt "@title" msgid "Schedule" msgstr "Calendario" #: kcm/backupplanwidget.cpp:795 #, kde-kuit-format msgctxt "@label" msgid "Specify the backup schedule" msgstr "Especificar el calendario de copias de seguridad" #: kcm/backupplanwidget.cpp:808 #, kde-kuit-format msgctxt "@option:check" msgid "Show hidden folders in source selection" msgstr "Mostrar carpetas ocultas en la selección de orígenes" #: kcm/backupplanwidget.cpp:814 #, kde-kuit-format msgctxt "@info" msgid "" "This makes it possible to explicitly include or exclude hidden folders in " "the backup source selection. Hidden folders have a name that starts with a " "dot. They are typically located in your home folder and are used to store " "settings and temporary files for your applications." msgstr "" #: kcm/backupplanwidget.cpp:832 #, kde-kuit-format msgctxt "@info" msgid "" "This will make your backups use around 10% more storage space and saving " "backups will take slightly longer time. In return it will be possible to " "recover from a partially corrupted backup." msgstr "" #: kcm/backupplanwidget.cpp:838 #, kde-kuit-format msgctxt "@option:check" msgid "Generate recovery information" msgstr "" #: kcm/backupplanwidget.cpp:840 #, kde-kuit-format msgctxt "@option:check" msgid "" "Generate recovery information (not available because par2 is not installed)" msgstr "" #: kcm/backupplanwidget.cpp:856 #, kde-kuit-format msgctxt "@option:check" msgid "Verify integrity of backups" msgstr "" #: kcm/backupplanwidget.cpp:860 #, kde-kuit-format msgctxt "@info" msgid "" "Checks the whole backup archive for corruption every time you save new data. " "Saving backups will take a little bit longer time but it allows you to catch " "corruption problems sooner than at the time you need to use a backup, at " "that time it could be too late." msgstr "" #: kcm/backupplanwidget.cpp:882 #, kde-kuit-format msgctxt "@title" msgid "Advanced" msgstr "Avanzado" #: kcm/backupplanwidget.cpp:883 #, kde-kuit-format msgctxt "@label" msgid "Extra options for advanced users" msgstr "Opciones para usuarios avanzados" #: kcm/driveselection.cpp:275 #, kde-kuit-format msgctxt "@label Only shown if no drives are detected" msgid "" "Plug in the external storage you wish to use, then select it in this list." msgstr "" "Conecta el almacenamiento externo si deseas usarlo, luego selecciónalo en " "esta lista." #: kcm/driveselectiondelegate.cpp:75 #, kde-kuit-format msgctxt "@item:inlistbox this text is added if selected drive is disconnected" msgid " (disconnected)" msgstr " (desconectado)" #: kcm/driveselectiondelegate.cpp:78 #, kde-kuit-format msgctxt "@label %1 is amount of free storage space of hard drive" msgid "%1 free" msgstr "%1 libre" #: kcm/driveselectiondelegate.cpp:92 #, kde-kuit-format msgctxt "" "@item:inlistbox used for unnamed filesystems, more than one filesystem on " "device. %1 is partition number, %2 is device description, %3 is either empty " "or the \" (disconnected)\" text" msgid "Partition %1 on %2%3" msgstr "Partición %1 en %2%3" #: kcm/driveselectiondelegate.cpp:95 #, kde-kuit-format msgctxt "" "@item:inlistbox used when there is only one unnamed filesystem on device. %1 " "is device description, %2 is either empty or the \" (disconnected)\" text" msgid "%1%2" msgstr "%1%2" #: kcm/driveselectiondelegate.cpp:99 #, kde-kuit-format msgctxt "" "@item:inlistbox %1 is filesystem label, %2 is the device description, %3 is " "either empty or the \" (disconnected)\" text" msgid "%1 on %2%3" msgstr "%1 en %2%3" #: kcm/driveselectiondelegate.cpp:106 #, kde-kuit-format msgctxt "@item:inlistbox %1 is drive(partition) label, %2 is storage capacity" msgid "%1: %2 total capacity" msgstr "%1: %2 capacidad total" #: kcm/driveselectiondelegate.cpp:153 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "" "Warning: Symbolic links and file permissions can not be saved to this file " "system. File permissions only matters if there is more than one user of this " "computer or if you are backing up executable program files." msgstr "" #: kcm/driveselectiondelegate.cpp:157 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "" "Warning: File permissions can not be saved to this file system. File " "permissions only matters if there is more than one user of this computer or " "if you are backing up executable program files." msgstr "" #: kcm/folderselectionmodel.cpp:107 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "" "%1will be included in the backup, except for " "unchecked subfolders" msgstr "" #: kcm/folderselectionmodel.cpp:111 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "%1will be included in the backup" msgstr "%1será incluido en la copia de seguridad" #: kcm/folderselectionmodel.cpp:115 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "" "%1 will not be included in " "the backup but contains folders that will" msgstr "" #: kcm/folderselectionmodel.cpp:119 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "" "%1 will not be included in " "the backup" msgstr "" "%1no será incluido en la " "copia de seguridad" #: kcm/kupkcm.cpp:49 #, kde-format msgid "Kup Configuration Module" msgstr "Módulo de configuración de Kup" #: kcm/kupkcm.cpp:51 #, kde-format msgid "Configuration of backup plans for the Kup backup system" msgstr "Planes de configuración para el sistema de copias de seguridad Kup" #: kcm/kupkcm.cpp:54 #, kde-format msgid "Maintainer" msgstr "Mantenedor" #: kcm/kupkcm.cpp:87 #, kde-format msgid "" "

Backup programs are missing

Before you can activate any backup " "plan you need to install either of

  • bup, for versioned backups
  • rsync, for synchronized backups
" msgstr "" "

No se encuentran los programas de copia

Antes de que puedas " "activar cualquier plan de copias, necesitas instalar al menos uno de estos " "dos:

  • bup, para control de versiones
  • rsync, para copias " "sincronizadas
" #: kcm/kupkcm.cpp:168 #, kde-kuit-format msgctxt "@title:window" msgid "Warning" msgstr "Aviso" #: kcm/kupkcm.cpp:170 #, kde-kuit-format msgctxt "@info %1 is the name of the backup plan" msgid "" "%1 does not have a destination!No backups will be saved by this plan." msgstr "¡%1 no hay destino!No se harán copias con este plan." #: kcm/kupkcm.cpp:227 #, kde-kuit-format msgctxt "@action:button" msgid "Add New Plan" msgstr "Añadir nuevo plan" #: kcm/kupkcm.cpp:238 #, kde-kuit-format msgctxt "@option:check" msgid "Backups Enabled" msgstr "Copias de seguridad Activadas" #: kcm/planstatuswidget.cpp:48 #, kde-kuit-format msgctxt "@action:button" msgid "Configure" msgstr "Configurar" #: kcm/planstatuswidget.cpp:51 #, kde-kuit-format msgctxt "@action:button" msgid "Remove" msgstr "Eliminar" #: kcm/planstatuswidget.cpp:54 #, kde-kuit-format msgctxt "@action:button" msgid "Duplicate" msgstr "" #: kioslave/bupslave.cpp:92 kioslave/bupslave.cpp:149 kioslave/bupslave.cpp:186 #: kioslave/bupslave.cpp:249 kioslave/bupslave.cpp:271 #, kde-format msgid "" "No bup repository found.\n" "%1" msgstr "" "No se ha encontrado el repositorio bup.\n" "%1" #: plasmoid/contents/ui/FullRepresentation.qml:88 #, kde-format msgid "Save new backup" msgstr "" #: plasmoid/contents/ui/FullRepresentation.qml:94 #, kde-format msgid "Show files" msgstr "Mostrar archivos" #: plasmoid/contents/ui/FullRepresentation.qml:99 #, kde-format msgid "Show log file" msgstr "" #. i18n: file: filedigger/restoredialog.ui:14 #. i18n: ectx: property (windowTitle), widget (QDialog, RestoreDialog) #: po/rc.cpp:3 rc.cpp:3 #, kde-format msgctxt "@title:window" msgid "Restore Guide" msgstr "Guía de restauración" #. i18n: file: filedigger/restoredialog.ui:55 #. i18n: ectx: property (text), widget (QPushButton, mRestoreOriginalButton) #: po/rc.cpp:6 rc.cpp:6 #, kde-format msgctxt "@action:button" msgid "Restore to original location" msgstr "Restaurar a su ubicación original" #. i18n: file: filedigger/restoredialog.ui:78 #. i18n: ectx: property (text), widget (QPushButton, mRestoreCustomButton) #: po/rc.cpp:9 rc.cpp:9 #, kde-format msgctxt "@action:button" msgid "Choose where to restore" msgstr "Elegir dónde restuarar" #. i18n: file: filedigger/restoredialog.ui:132 #. i18n: ectx: property (text), widget (QPushButton, mDestBackButton) #: po/rc.cpp:12 rc.cpp:12 #, kde-format msgctxt "@action:button" msgid "Back" msgstr "Atrás" #. i18n: file: filedigger/restoredialog.ui:144 #. i18n: ectx: property (text), widget (QPushButton, mDestNextButton) #: po/rc.cpp:15 rc.cpp:15 #, kde-format msgctxt "@action:button" msgid "Next" msgstr "Siguiente" #. i18n: file: filedigger/restoredialog.ui:175 #. i18n: ectx: property (text), widget (QRadioButton, mNewNameRadioButton) #: po/rc.cpp:18 rc.cpp:18 #, kde-format msgctxt "@option:radio " msgid "Restore the folder under a new name" msgstr "Restuarar la carpeta con un nuevo nombre" #. i18n: file: filedigger/restoredialog.ui:208 #. i18n: ectx: property (text), widget (QRadioButton, mOverwriteRadioButton) #: po/rc.cpp:21 rc.cpp:21 #, kde-format msgctxt "@option:radio" msgid "Merge folders" msgstr "Mezclar carpetas" #. i18n: file: filedigger/restoredialog.ui:238 #. i18n: ectx: property (text), widget (QLabel, mConfirmOverwriteLabel) #: po/rc.cpp:24 rc.cpp:24 #, kde-format msgctxt "@info Question to user, in dialog" msgid "" "The following files would be overwritten, please confirm that you wish to " "continue." msgstr "" "Los siguientes archivos van a ser sobrescritos, por favor, confirma que " "quieres continuar." #. i18n: file: filedigger/restoredialog.ui:274 #. i18n: ectx: property (text), widget (QPushButton, mOverwriteBackButton) #: po/rc.cpp:27 rc.cpp:27 #, kde-format msgctxt "@action:button go to previous page in dialog" msgid "Back" msgstr "Atrás" #. i18n: file: filedigger/restoredialog.ui:286 #. i18n: ectx: property (text), widget (QPushButton, mConfirmButton) #: po/rc.cpp:30 rc.cpp:30 #, kde-format msgctxt "@action:button User answers \"yes I confirm: overwrite files\"" msgid "Confirm" msgstr "Confirmar" #. i18n: file: filedigger/restoredialog.ui:341 #. i18n: ectx: property (text), widget (QLabel, mErrorLabel) #: po/rc.cpp:33 rc.cpp:33 #, fuzzy, kde-format msgctxt "@label above the detailed error message" msgid "An error occured while restoring:" msgstr "Ocurrió un error durante la restauración:" #. i18n: file: filedigger/restoredialog.ui:372 #. i18n: ectx: property (text), widget (QLabel, label) #: po/rc.cpp:36 rc.cpp:36 #, fuzzy, kde-format msgctxt "@label" msgid "Restoration completed successfully!" msgstr "¡Restauración completada con éxito!" #. i18n: file: filedigger/restoredialog.ui:413 #. i18n: ectx: property (text), widget (QPushButton, mOpenDestinationButton) #: po/rc.cpp:39 rc.cpp:39 #, kde-format msgid "Open Destination" msgstr "Abrir destino" #. i18n: file: filedigger/restoredialog.ui:472 #. i18n: ectx: property (text), widget (QPushButton, mCloseButton) #: po/rc.cpp:42 rc.cpp:42 #, kde-format msgctxt "@action:button" msgid "Close" msgstr "Cerrar" #: po/rc.cpp:43 po/rc.cpp:58 settings/backupplan.cpp:69 rc.cpp:43 rc.cpp:58 #, kde-format msgid "Backups" msgstr "Copias de seguridad" #: po/rc.cpp:44 rc.cpp:44 msgid "Configure backup plans" msgstr "Configurar planes de copias de seguridad" #: po/rc.cpp:45 rc.cpp:45 msgid "backup,recovery,safety" msgstr "copia de seguridad, recuperación, seguridad" #: po/rc.cpp:46 rc.cpp:46 msgid "Kup" msgstr "" #: po/rc.cpp:48 rc.cpp:48 msgid "Start taking backup" msgstr "" #: po/rc.cpp:49 rc.cpp:49 msgid "A question if user wants to start taking a backup" msgstr "" #: po/rc.cpp:50 rc.cpp:50 msgid "Backup succeeded" msgstr "" #: po/rc.cpp:51 rc.cpp:51 msgid "Saving of backup successfully completed" msgstr "" #: po/rc.cpp:52 rc.cpp:52 msgid "Backup failed" msgstr "" #: po/rc.cpp:53 rc.cpp:53 msgid "Saving of backup failed, offer user to see log file" msgstr "" #: po/rc.cpp:54 rc.cpp:54 msgid "Integrity check completed" msgstr "" #: po/rc.cpp:55 rc.cpp:55 msgid "Finished checking integrity of backup archive" msgstr "" #: po/rc.cpp:56 rc.cpp:56 msgid "Repair completed" msgstr "" #: po/rc.cpp:57 rc.cpp:57 msgid "Finished repairing backup archive" msgstr "" #: po/rc.cpp:59 rc.cpp:59 msgid "Status of backup plans" msgstr "" #: po/rc.cpp:60 rc.cpp:60 msgid "Backup Status" msgstr "" #: po/rc.cpp:61 rc.cpp:61 msgid "Displays status of backup plans" msgstr "" #: settings/backupplan.cpp:38 #, kde-kuit-format msgctxt "" "@label Default name for a new backup plan, %1 is the number of the plan in " "order" msgid "Backup plan %1" msgstr "Plan de copia de seguridad %1" #: settings/backupplan.cpp:101 #, kde-format msgctxt "default description of newly duplicated backup plan" msgid "%1 (copy)" msgstr "" #: settings/backupplan.cpp:213 #, kde-format msgctxt "%1 is fancy formatted date" msgid "Last saved: %1" msgstr "" #: settings/backupplan.cpp:218 #, kde-format msgctxt "%1 is storage size of archive" msgid "Size: %1" msgstr "" #: settings/backupplan.cpp:223 #, kde-format msgctxt "%1 is free storage space" msgid "Free space: %1" msgstr "" #: settings/backupplan.cpp:227 #, kde-kuit-format msgctxt "@label" msgid "This backup plan has never been run." msgstr "Este plan de copias de seguridad nunca ha sido usado." kup-backup-0.7.1+dfsg/po/extract-messages.sh000077500000000000000000000054741322613417100207460ustar00rootroot00000000000000#!/bin/sh BASEDIR="../" # root of translatable sources PROJECT="kup" # project name BUGADDR="http://kde-apps.org/content/show.php/Kup+Backup+System?content=147465" # MSGID-Bugs WDIR=`pwd` # working dir echo "Preparing rc files" cd ${BASEDIR} # we use simple sorting to make sure the lines do not jump around too much from system to system find . -name 'libgit2*' -prune -o '(' -name '*.rc' -o -name '*.ui' -o -name '*.kcfg' ')' -print | sort > ${WDIR}/rcfiles.list xargs --arg-file=${WDIR}/rcfiles.list extractrc > ${WDIR}/rc.cpp #extract strings from .desktop file intltool-extract --quiet --type=gettext/ini kcm/kcm_kup.desktop.template cat kcm/kcm_kup.desktop.template.h >> ${WDIR}/rc.cpp rm kcm/kcm_kup.desktop.template.h intltool-extract --quiet --type=gettext/ini daemon/kupdaemon.notifyrc.template cat daemon/kupdaemon.notifyrc.template.h >> ${WDIR}/rc.cpp rm daemon/kupdaemon.notifyrc.template.h intltool-extract --quiet --type=gettext/ini dataengine/plasma-dataengine-kup.desktop.template cat dataengine/plasma-dataengine-kup.desktop.template.h >> ${WDIR}/rc.cpp rm dataengine/plasma-dataengine-kup.desktop.template.h intltool-extract --quiet --type=gettext/ini plasmoid/metadata.desktop.template cat plasmoid/metadata.desktop.template.h >> ${WDIR}/rc.cpp rm plasmoid/metadata.desktop.template.h cd ${WDIR} echo "Done preparing rc files" echo "Extracting messages" cd ${BASEDIR} # see above on sorting find . -name 'libgit2*' -prune -o '(' -name '*.cpp' -o -name '*.h' -o -name '*.qml' ')' -print | sort > ${WDIR}/infiles.list echo "rc.cpp" >> ${WDIR}/infiles.list cd ${WDIR} xgettext --from-code=UTF-8 -C --kde -ci18n -ki18n:1 -ki18nc:1c,2 -ki18np:1,2 -ki18ncp:1c,2,3 -ktr2i18n:1 \ -kI18N_NOOP:1 -kI18N_NOOP2:1c,2 -kaliasLocale -kki18n:1 -kki18nc:1c,2 -kki18np:1,2 -kki18ncp:1c,2,3 \ -kN_:1 -kxi18nc:1c,2 -kxi18ncp:1c,2,3 --msgid-bugs-address="${BUGADDR}" \ --files-from=infiles.list -D ${BASEDIR} -D ${WDIR} -o ${PROJECT}.pot || { echo "error while calling xgettext. aborting."; exit 1; } echo "Done extracting messages" echo "Merging translations" catalogs=`find . -name '*.po'` for cat in $catalogs; do echo $cat msgmerge -o $cat.new $cat ${PROJECT}.pot mv $cat.new $cat done cd ${WDIR} intltool-merge --quiet --desktop-style ${WDIR} ${BASEDIR}/kcm/kcm_kup.desktop.template ${BASEDIR}/kcm/kcm_kup.desktop intltool-merge --quiet --desktop-style ${WDIR} ${BASEDIR}/daemon/kupdaemon.notifyrc.template ${BASEDIR}/daemon/kupdaemon.notifyrc intltool-merge --quiet --desktop-style ${WDIR} ${BASEDIR}/dataengine/plasma-dataengine-kup.desktop.template ${BASEDIR}/dataengine/plasma-dataengine-kup.desktop intltool-merge --quiet --desktop-style ${WDIR} ${BASEDIR}/plasmoid/metadata.desktop.template ${BASEDIR}/plasmoid/metadata.desktop echo "Done merging translations" echo "Cleaning up" cd ${WDIR} rm rcfiles.list rm infiles.list rm rc.cpp echo "Done" kup-backup-0.7.1+dfsg/po/fr_FR.po000066400000000000000000001271001322613417100164550ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # benoits , 2014 # benoits , 2014-2015 # MerMouY, 2015 # MerMouY, 2015 # Simon Persson , 2014-2015 msgid "" msgstr "" "Project-Id-Version: kup\n" "Report-Msgid-Bugs-To: http://kde-apps.org/content/show.php/Kup+Backup+System?" "content=147465\n" "POT-Creation-Date: 2018-01-05 16:00+0800\n" "PO-Revision-Date: 2016-06-11 14:47+0000\n" "Last-Translator: Simon Persson \n" "Language-Team: French (France) (http://www.transifex.com/kup/kup/language/" "fr_FR/)\n" "Language: fr_FR\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" #: daemon/bupjob.cpp:47 daemon/buprepairjob.cpp:38 #: daemon/bupverificationjob.cpp:37 #, kde-kuit-format msgctxt "@info notification" msgid "" "The bup program is needed but could not be found, " "maybe it is not installed?" msgstr "" "Le programme bup est requis mais n'a pu être " "trouvé. Est-il installé ?" #: daemon/bupjob.cpp:52 daemon/buprepairjob.cpp:43 #, kde-kuit-format msgctxt "@info notification" msgid "" "The par2 program is needed but could not be " "found, maybe it is not installed?" msgstr "" "Le programme par2 est requis mais n'a pu être " "trouvé. Est-il installé ?" #: daemon/bupjob.cpp:71 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup destination could not be initialised. See log file for more details." msgstr "" "Le répertoire de sauvegarde ne peut être initialisé. Voyez le fichier de log " "pour plus de détails." #: daemon/bupjob.cpp:93 #, fuzzy, kde-format msgid "Checking backup integrity" msgstr "Vérification de l'intégrité de la sauvegarde" #: daemon/bupjob.cpp:104 daemon/bupverificationjob.cpp:67 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups could be corrupted! See log file " "for more details. Do you want to try repairing the backup files?" msgstr "" "La vérification de la sauvegarde a échoué. . Votre sauvegarde pourrait être " "corrompue! Voyez le fichier de log pour plus de détails. Voulez vous essayer " "de réparer le fichier de sauvegarde?" #: daemon/bupjob.cpp:108 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups could be corrupted! See log file " "for more details." msgstr "" "La vérification de la sauvegarde a échoué. Votre sauvegarde pourrait être " "corrompue! Voyez le fichier de log pour plus d'informations." #: daemon/bupjob.cpp:131 daemon/rsyncjob.cpp:57 #, kde-format msgid "Checking what to copy" msgstr "" #: daemon/bupjob.cpp:138 #, fuzzy, kde-kuit-format msgctxt "@info notification" msgid "Failed to analyze files. See log file for more details." msgstr "" "Indexation du système de fichier échouée. Voyez le fichier de log pour plus " "de détails." #: daemon/bupjob.cpp:159 daemon/bupjob.cpp:253 daemon/rsyncjob.cpp:175 #, fuzzy, kde-format msgid "Saving backup" msgstr "Commencer la sauvegarde" #: daemon/bupjob.cpp:167 daemon/rsyncjob.cpp:120 #, fuzzy, kde-kuit-format msgctxt "@info notification" msgid "Failed to save backup. See log file for more details." msgstr "" "Échec à l'enregistrement de la sauvegarde complète. Voyez le fichier de log " "pour plus de détails." #: daemon/bupjob.cpp:189 #, fuzzy, kde-format msgid "Generating recovery information" msgstr "Générer les informations de restauration" #: daemon/bupjob.cpp:197 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed to generate recovery info for the backup. See log file for more " "details." msgstr "" "Informations sur la sauvegarde non enregistrées. Voyez le fichier de log " "pour plus de détails." #: daemon/bupjob.cpp:254 daemon/rsyncjob.cpp:176 #, fuzzy, kde-format msgctxt "Label for file currently being copied" msgid "File" msgstr "Fichier :" #: daemon/buprepairjob.cpp:72 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup repair failed. Your backups could be corrupted! See log file for more " "details." msgstr "" "La réparation de la sauvegarde a échoué. Vos sauvegardes pourraient être " "endommagées! Voyez le fichier de log pour plus de détails." #: daemon/buprepairjob.cpp:76 #, kde-kuit-format msgctxt "@info notification" msgid "Success! Backup repair worked. See log file for more details." msgstr "" "La réparation de la sauvegarde a réussi! Voyez le fichier de log pour plus " "de détails." #: daemon/buprepairjob.cpp:80 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup repair was not necessary. Your backups are not corrupted.See log file " "for more details." msgstr "" "La réparation de la sauvegarde n'était pas nécessaire. Vos sauvegardes ne " "semblent pas être corrompues. Voyez le fichier de log pour plus de détails." #: daemon/buprepairjob.cpp:85 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup repair failed. Your backups could still be corrupted! See log file " "for more details." msgstr "" "Réparation de la sauvegarde échouée. Voyez le fichier de log pour plus de " "détails." #: daemon/bupverificationjob.cpp:70 daemon/bupverificationjob.cpp:87 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups are corrupted! See log file for " "more details." msgstr "" "Le contrôle d'intégrité de la sauvegarde a échoué. Vos sauvegardes sont " "corrompues! Voyez le fichier de log pour plus de détails." #: daemon/bupverificationjob.cpp:76 #, kde-kuit-format msgctxt "@info notification" msgid "Backup integrity test was successful, Your backups are fine." msgstr "" "La vérification de l'intégrité de la sauvegarde a réussi, vos sauvegardes " "sont correctes." #: daemon/bupverificationjob.cpp:83 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups are corrupted! See log file for " "more details. Do you want to try repairing the backup files?" msgstr "" "La vérification de la sauvegarde a échoué. . Votre sauvegarde pourrait être " "corrompue! Voyez le fichier de log pour plus de détails. Voulez vous essayer " "de réparer le fichier de sauvegarde?" #: daemon/edexecutor.cpp:115 daemon/edexecutor.cpp:124 #: daemon/edexecutor.cpp:160 daemon/fsexecutor.cpp:114 #: daemon/fsexecutor.cpp:146 #, kde-kuit-format msgctxt "@title:window" msgid "Problem" msgstr "Problème" #: daemon/edexecutor.cpp:116 daemon/fsexecutor.cpp:115 #, kde-kuit-format msgctxt "notification" msgid "Invalid type of backup in configuration." msgstr "Type de sauvegarde invalide dans la configuration." #: daemon/edexecutor.cpp:125 #, kde-kuit-format msgctxt "notification" msgid "You don't have write permission to backup destination." msgstr "" #: daemon/kupdaemon.cpp:171 #, kde-format msgid "Continue" msgstr "" #: daemon/kupdaemon.cpp:173 #, kde-format msgid "Stop" msgstr "" #: daemon/kupdaemon.cpp:175 #, kde-format msgctxt "%1 is a text explaining the current activity" msgid "Currently busy: %1" msgstr "" #: daemon/kupdaemon.cpp:176 #, kde-format msgid "Do you really want to stop?" msgstr "" #: daemon/kupdaemon.cpp:179 #, fuzzy, kde-format msgid "User Backups" msgstr "Sauvegardes" #: daemon/kupdaemon.cpp:249 #, fuzzy, kde-format msgctxt "status in tooltip" msgid "Backup destination not available" msgstr "Destination de sauvegarde indisponible" #: daemon/kupdaemon.cpp:253 daemon/kupdaemon.cpp:310 #, kde-format msgid "No backup plans configured" msgstr "" #: daemon/kupdaemon.cpp:259 #, fuzzy, kde-format msgctxt "status in tooltip" msgid "Backup destination available" msgstr "Destination de sauvegarde disponible" #: daemon/kupdaemon.cpp:269 daemon/planexecutor.cpp:84 #, fuzzy, kde-format msgctxt "status in tooltip" msgid "Backup status OK" msgstr "Statut de la sauvegarde OK" #: daemon/kupdaemon.cpp:276 daemon/planexecutor.cpp:86 #, fuzzy, kde-format msgctxt "status in tooltip" msgid "New backup suggested" msgstr "Nouvelle sauvegarde recommandée" #: daemon/kupdaemon.cpp:283 daemon/planexecutor.cpp:88 #, fuzzy, kde-format msgctxt "status in tooltip" msgid "New backup neeeded" msgstr "Nouvelle sauvegarde requise" #: daemon/main.cpp:41 #, kde-kuit-format msgctxt "@info:shell Error message at startup" msgid "" "Kup is not enabled, enable it from the system settings module. You can do " "that by running kcmshell5 kup" msgstr "" "Kup n'est pas activé. Activez-le depuis le module de configuration du " "système. Vous pouvez également l'activer en lançant kcmshell5 kup" #: daemon/main.cpp:47 #, kde-kuit-format msgctxt "@title" msgid "Kup Daemon" msgstr "Démon Kup" #: daemon/main.cpp:48 #, kde-format msgid "" "Kup is a flexible backup solution using the backup storage system 'bup'. " "This allows it to quickly perform incremental backups, only saving the parts " "of files that has actually changed since last backup was taken." msgstr "" "Kup est une solution de sauvegarde flexible qui utilise le système de " "stockage de sauvegarde 'bup'. Ceci permet de faire des sauvegardes " "incrémentales, ne sauvegardant que les parties des fichiers qui ont changé " "depuis la dernière sauvegarde." #: daemon/main.cpp:51 kcm/kupkcm.cpp:52 #, kde-format msgid "Copyright (C) 2011-2015 Simon Persson" msgstr "Copyright (C) 2011-2015 Simon Persson" #: daemon/main.cpp:53 filedigger/main.cpp:51 kcm/kupkcm.cpp:54 #, kde-format msgid "Simon Persson" msgstr "Simon Persson" #: daemon/main.cpp:54 filedigger/main.cpp:52 kcm/kupkcm.cpp:55 #, kde-kuit-format msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "Benoit SCHWINDEN" #: daemon/main.cpp:54 filedigger/main.cpp:52 kcm/kupkcm.cpp:56 #, kde-kuit-format msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "" #: daemon/planexecutor.cpp:76 #, fuzzy, kde-format msgctxt "status in tooltip" msgid "Saving backup" msgstr "Commencer la sauvegarde" #: daemon/planexecutor.cpp:78 #, fuzzy, kde-format msgctxt "status in tooltip" msgid "Checking backup integrity" msgstr "Vérification de l'intégrité de la sauvegarde" #: daemon/planexecutor.cpp:80 #, fuzzy, kde-format msgctxt "status in tooltip" msgid "Repairing backups" msgstr "Réparation des sauvegardes" #: daemon/planexecutor.cpp:118 daemon/planexecutor.cpp:133 #, fuzzy, kde-kuit-format msgctxt "@info" msgid "Do you want to save a first backup now?" msgstr "Voulez-vous lancer une première sauvegarde maintenant ?" #: daemon/planexecutor.cpp:121 #, fuzzy, kde-kuit-format msgctxt "@info" msgid "" "It has been %1 since last backup was saved.\n" "Save a new backup now?" msgstr "Aucune sauvegarde depuis %1. Voulez-vous sauvegarder maintenant ?" #: daemon/planexecutor.cpp:137 #, fuzzy, kde-kuit-format msgctxt "@info" msgid "" "You have been active for %1 since last backup was saved.\n" "Save a new backup now?" msgstr "" "Vous avez utilisé cet ordinateur depuis %1 depuis la dernière sauvegarde. " "Voulez-vous sauvegarder maintenant ?" #: daemon/planexecutor.cpp:170 daemon/planexecutor.cpp:200 #: daemon/planexecutor.cpp:278 #, kde-kuit-format msgctxt "@action:button" msgid "Yes" msgstr "Oui" #: daemon/planexecutor.cpp:170 daemon/planexecutor.cpp:201 #: daemon/planexecutor.cpp:279 #, kde-kuit-format msgctxt "@action:button" msgid "No" msgstr "Non" #: daemon/planexecutor.cpp:192 #, kde-kuit-format msgctxt "@title:window" msgid "Saving of Backup Failed" msgstr "Enregistrement de la sauvegardé échoué" #: daemon/planexecutor.cpp:197 daemon/planexecutor.cpp:275 #: daemon/planexecutor.cpp:309 #, kde-kuit-format msgctxt "@action:button" msgid "Show log file" msgstr "Voir le journal" #: daemon/planexecutor.cpp:221 #, fuzzy, kde-kuit-format msgctxt "@title:window" msgid "Backup Saved" msgstr "Sauvegarde échouée" #: daemon/planexecutor.cpp:222 #, fuzzy, kde-kuit-format msgctxt "@info notification" msgid "Saving backup completed successfully." msgstr "La restauration a réussi !" #: daemon/planexecutor.cpp:271 #, kde-kuit-format msgctxt "@title:window" msgid "Integrity Check Completed" msgstr "Contrôle d'intégrité effectué" #: daemon/planexecutor.cpp:306 #, kde-kuit-format msgctxt "@title:window" msgid "Repair Completed" msgstr "Réparation effectuée" #: daemon/planexecutor.cpp:337 po/rc.cpp:47 rc.cpp:47 #, kde-format msgid "Kup Backup System" msgstr "Système de Sauvegarde Kup" #: daemon/rsyncjob.cpp:48 #, kde-kuit-format msgctxt "@info notification" msgid "" "The rsync program is needed but could not be " "found, maybe it is not installed?" msgstr "" "Le programme rsync est requis, mais n'a pu être " "trouvé. Est-il installé ?" #: filedigger/main.cpp:47 #, kde-kuit-format msgctxt "@title" msgid "File Digger" msgstr "" #: filedigger/main.cpp:48 #, kde-format msgid "Browser for bup archives." msgstr "Explorateur pour les archives bup" #: filedigger/main.cpp:49 #, kde-format msgid "Copyright (C) 2013-2015 Simon Persson" msgstr "Copyright (C) 2013-2015 Simon Persson" #: filedigger/main.cpp:59 #, kde-format msgid "Name of the branch to be opened." msgstr "Nom de la branche à ouvrir." #: filedigger/main.cpp:61 #, kde-format msgid "Path to the bup repository to be opened." msgstr "Chemin du dépôt Bup à ouvrir." #: filedigger/main.cpp:70 #, kde-format msgctxt "@info:shell Error message at startup" msgid "" "You must supply the path to a bup or git repository that you wish to open " "for viewing." msgstr "" "Vous devez indiquer le chemin vers le dépôt bup ou git que vous souhaitez " "visualiser." #: filedigger/main.cpp:85 #, kde-kuit-format msgctxt "@info messagebox, %1 is a folder path" msgid "" "The backup archive %1 could not be opened. Check if the " "backups really are located there." msgstr "" "L'archive %1 n'a pu être ouverte. Veuillez vérifier le " "chemin d'accès à la sauvegarde." #: filedigger/main.cpp:92 #, kde-kuit-format msgctxt "@info messagebox" msgid "You do not have permission needed to read this backup archive." msgstr "Vous n'avez pas les permissions nécessaires pour lire cette archive." #: filedigger/mergedvfs.cpp:108 #, kde-kuit-format msgctxt "@info messagebox" msgid "" "Could not read this backup archive. Perhaps some files have become " "corrupted. Do you want to run an integrity check to test this?" msgstr "" "Impossible de lire cette archive. Certains fichiers ont peut-être été " "corrompus. Voulez-vous lancer un test d'intégrité pour vérifier cette " "hypothèse ?" #: filedigger/mergedvfs.cpp:156 #, kde-kuit-format msgctxt "added after folder name in some cases" msgid " (folder)" msgstr "(répertoire)" #: filedigger/mergedvfs.cpp:158 #, kde-kuit-format msgctxt "added after file name in some cases" msgid " (symlink)" msgstr "(lien symbolique)" #: filedigger/mergedvfs.cpp:160 #, kde-kuit-format msgctxt "added after file name in some cases" msgid " (file)" msgstr "(fichier)" #: filedigger/restoredialog.cpp:115 kcm/backupplanwidget.cpp:451 #, kde-kuit-format msgctxt "@action:button" msgid "New Folder..." msgstr "Nouveau dossier..." #: filedigger/restoredialog.cpp:141 filedigger/restoredialog.cpp:160 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "No destination was selected, please select one." msgstr "Aucune destination sélectionnée. Veuillez en choisir une." #: filedigger/restoredialog.cpp:251 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "There was a problem while getting a list of all files to restore: %1" msgstr "" "Un problème est survenu lors de la récupération de la liste de tous les " "fichiers à restaurer : %1" #: filedigger/restoredialog.cpp:264 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "The destination does not have enough space available. Please choose a " "different destination or free some space." msgstr "" "L'espace libre sur la destination est insuffisant. Veuillez choisir une " "autre destination ou libérer de l'espace." #: filedigger/restoredialog.cpp:274 #, kde-kuit-format msgctxt "" "added to the suggested filename when restoring, %1 is the time when backup " "was taken" msgid " - saved at %1" msgstr "- sauvegardé à %1" #: filedigger/restoredialog.cpp:275 #, kde-kuit-format msgctxt "@info" msgid "Folder already exists, please choose a solution" msgstr "Le répertoire existe déjà : indiquez une solution" #: filedigger/restoredialog.cpp:281 #, kde-kuit-format msgctxt "@info" msgid "File already exists" msgstr "Le fichier existe déjà" #: filedigger/restoredialog.cpp:294 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "The new name entered already exists, please enter a different one." msgstr "Le nouveau nom saisi existe déjà. Veuillez en saisir un autre." #: filedigger/restoredialog.cpp:371 kcm/dirselector.cpp:50 #, kde-kuit-format msgctxt "default folder name when creating a new folder" msgid "New Folder" msgstr "Nouveau dossier" #: filedigger/restoredialog.cpp:376 kcm/dirselector.cpp:55 #, kde-kuit-format msgctxt "@title:window" msgid "New Folder" msgstr "Nouveau dossier" #: filedigger/restoredialog.cpp:377 kcm/dirselector.cpp:56 #, kde-kuit-format msgctxt "@label:textbox" msgid "" "Create new folder in:\n" "%1" msgstr "" "Créer un nouveau dossier dans :\n" "%1" #: filedigger/restoredialog.cpp:390 kcm/dirselector.cpp:68 #, kde-format msgid "A folder named %1 already exists." msgstr "Le répertoire %1 existe déjà." #: filedigger/restoredialog.cpp:396 kcm/dirselector.cpp:74 #, kde-format msgid "You do not have permission to create %1." msgstr "Vous n'avez pas les droits pour créer %1." #: filedigger/restorejob.cpp:99 #, kde-kuit-format msgctxt "progress report, current operation" msgid "Restoring" msgstr "Restauration" #: filedigger/restorejob.cpp:100 #, kde-kuit-format msgctxt "progress report, label" msgid "File:" msgstr "Fichier :" #: filedigger/versionlistdelegate.cpp:135 #, kde-kuit-format msgctxt "@action:button" msgid "Open" msgstr "Ouvrir" #: filedigger/versionlistdelegate.cpp:137 #, kde-kuit-format msgctxt "@action:button" msgid "Restore" msgstr "Restaurer" #: kcm/backupplanwidget.cpp:282 #, kde-kuit-format msgctxt "@action:button" msgid "Exclude Folder" msgstr "" #: kcm/backupplanwidget.cpp:285 #, kde-kuit-format msgctxt "@action:button" msgid "Include Folder" msgstr "" #: kcm/backupplanwidget.cpp:382 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "You don't have permission to read this folder: %1It cannot be included in the source selection. If it does not contain " "anything important to you, one possible solution is to exclude the folder " "from the backup plan." msgstr "" #: kcm/backupplanwidget.cpp:393 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "You don't have permission to read this file: %1It " "cannot be included in the source selection. If the file is not important to " "you, one possible solution is to exclude the whole folder where the file is " "stored from the backup plan." msgstr "" #: kcm/backupplanwidget.cpp:409 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "The symbolic link %1 is currently included but it " "points to a folder which is not: %2.That is " "probably not what you want. One solution is to simply include the target " "folder in the backup plan." msgstr "" #: kcm/backupplanwidget.cpp:417 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "The symbolic link %1 is currently included but it " "points to a file which is not: %2.That is probably " "not what you want. One solution is to simply include the folder where the " "file is stored in the backup plan." msgstr "" #: kcm/backupplanwidget.cpp:440 #, kde-kuit-format msgctxt "@title:window" msgid "Select Folder" msgstr "Sélection d'un répertoire" #: kcm/backupplanwidget.cpp:478 #, kde-kuit-format msgctxt "@label" msgid "Description:" msgstr "Description :" #: kcm/backupplanwidget.cpp:481 #, kde-kuit-format msgctxt "@action:button" msgid "Back to overview" msgstr "Retour à la vue d'ensemble" #: kcm/backupplanwidget.cpp:510 #, kde-kuit-format msgctxt "@info" msgid "" "This type of backup is an archive. It contains both the " "latest version of your files and earlier backed up versions. Using this type " "of backup allows you to recover older versions of your files, or files which " "were deleted on your computer at a later time. The storage space needed is " "minimized by looking for common parts of your files between versions and " "only storing those parts once. Nevertheless, the backup archive will keep " "growing in size as time goes by.Also important to know is that the " "files in the archive can not be accessed directly with a general file " "manager, a special program is needed." msgstr "" "Ce type de sauvegarde est une archive. Elle contient " "aussi bien les dernières versions de vos fichiers que les versions plus " "anciennes déjà sauvegardées. L'utilisation de ce type de sauvegarde permet " "de restaurer des anciennes versions de vos fichiers ou encore des fichiers " "effacés. L'espace disque nécessaire est minimisé car seuls les changements " "éventuels sont sauvegardés, les « parties communes » des fichiers étant " "laissées telles quelles. Néanmoins, la taille des archives de sauvegarde " "grossit avec le temps.Cependant, il est important de noter que les " "fichiers à l'intérieur de l'archive ne seront pas accessibles directement à " "l'aide d'un gestionnaire de fichiers, un programme spécial est nécessaire." #: kcm/backupplanwidget.cpp:525 #, kde-kuit-format msgctxt "@option:radio" msgid "" "Versioned Backup (not available because bup is " "not installed)" msgstr "" "Sauvegarde versionnée (indisponible car bup n'est " "pas installé)" #: kcm/backupplanwidget.cpp:530 #, kde-kuit-format msgctxt "@option:radio" msgid "Versioned Backup (recommended)" msgstr "Sauvegarde versionnée (recommandée)" #: kcm/backupplanwidget.cpp:535 #, kde-kuit-format msgctxt "@info" msgid "" "This type of backup is a folder which is synchronized with your selected " "source folders. Taking a backup simply means making the backup destination " "contain an exact copy of your source folders as they are now and nothing " "else. If a file has been deleted in a source folder it will get deleted from " "the backup folder.This type of backup can protect you against data loss " "due to a broken hard drive but it does not help you to recover from your own " "mistakes." msgstr "" "Ce type de sauvegarde est un répertoire synchronisé avec l'emplacement " "d'origine que vous avez sélectionné. Faire une sauvegarde signifie " "simplement que le répertoire de sauvegarde contient une copie exacte des " "emplacements d'origine à l'instant de la sauvegarde, et rien d'autre. Si un " "fichier a été effacé dans l'emplacement d'origine, il sera également effacé " "du répertoire de sauvegarde.Ce type de sauvegarde vous protégera contre " "les défaillances matérielles, mais ne pourra pas vous aider à revenir en " "arrière en cas d'erreur ou de mauvaise manipulation." #: kcm/backupplanwidget.cpp:548 #, kde-kuit-format msgctxt "@option:radio" msgid "" "Synchronized Backup (not available because rsync " "is not installed)" msgstr "" "Sauvegarde synchronisée (indisponible car rsync " "n'est pas installé)" #: kcm/backupplanwidget.cpp:553 #, kde-kuit-format msgctxt "@option:radio" msgid "Synchronized Backup" msgstr "Sauvegarde synchronisée" #: kcm/backupplanwidget.cpp:581 #, kde-kuit-format msgctxt "@title" msgid "Backup Type" msgstr "Type de sauvegarde" #: kcm/backupplanwidget.cpp:582 #, kde-kuit-format msgctxt "@label" msgid "Select what type of backup you want" msgstr "Choisissez le type de sauvegarde souhaité" #: kcm/backupplanwidget.cpp:590 #, kde-kuit-format msgctxt "@title" msgid "Sources" msgstr "Sources" #: kcm/backupplanwidget.cpp:591 #, kde-kuit-format msgctxt "@label" msgid "Select which folders to include in backup" msgstr "Sélectionnez les répertoires à inclure dans la sauvegarde" #: kcm/backupplanwidget.cpp:605 #, kde-kuit-format msgctxt "@option:radio" msgid "Filesystem Path" msgstr "Chemin du système de fichiers" #: kcm/backupplanwidget.cpp:606 #, kde-kuit-format msgctxt "@option:radio" msgid "External Storage" msgstr "Stockage externe" #: kcm/backupplanwidget.cpp:612 #, kde-kuit-format msgctxt "@info" msgid "" "You can use this option for backing up to a secondary internal harddrive, an " "external eSATA drive or networked storage. The requirement is just that you " "always mount it at the same path in the filesystem. The path specified here " "does not need to exist at all times, its existance will be monitored." msgstr "" #: kcm/backupplanwidget.cpp:619 #, kde-kuit-format msgctxt "@label:textbox" msgid "Destination Path for Backup:" msgstr "Chemin de la destination pour la sauvegarde :" #: kcm/backupplanwidget.cpp:638 #, kde-kuit-format msgctxt "@info" msgid "" "Use this option if you want to backup your files on an external storage that " "can be plugged in to this computer, such as a USB hard drive or memory stick." msgstr "" "Utilisez cette option si vous souhaitez sauvegarder vos fichiers sur un " "périphérique de stockage externe pouvant être connecté à cet ordinateur, " "comme un disque dur ou une clé USB." #: kcm/backupplanwidget.cpp:648 kcm/backupplanwidget.cpp:652 #, kde-kuit-format msgctxt "@info:tooltip" msgid "The specified folder will be created if it does not exist." msgstr "Le répertoire spécifié sera crée s'il n'existe pas." #: kcm/backupplanwidget.cpp:650 #, kde-kuit-format msgctxt "@label:textbox" msgid "Folder on Destination Drive:" msgstr "Dossier sur le lecteur de destination :" #: kcm/backupplanwidget.cpp:658 #, kde-kuit-format msgctxt "@info:tooltip" msgid "Open dialog to select a folder" msgstr "Afficher la boîte de sélection de répertoire" #: kcm/backupplanwidget.cpp:688 #, kde-kuit-format msgctxt "@title" msgid "Destination" msgstr "Destination" #: kcm/backupplanwidget.cpp:689 #, kde-kuit-format msgctxt "@label" msgid "Select the backup destination" msgstr "Choisissez la destination de sauvegarde" #: kcm/backupplanwidget.cpp:706 #, kde-kuit-format msgctxt "@option:radio" msgid "Manual Activation" msgstr "Activation manuelle" #: kcm/backupplanwidget.cpp:707 #, kde-kuit-format msgctxt "@option:radio" msgid "Interval" msgstr "Intervalle" #: kcm/backupplanwidget.cpp:708 #, kde-kuit-format msgctxt "@option:radio" msgid "Active Usage Time" msgstr "Temps d'utilisation active" #: kcm/backupplanwidget.cpp:710 #, kde-kuit-format msgctxt "@info" msgid "" "Backups are only taken when manually requested. This can be done by using " "the popup menu from the backup system tray icon." msgstr "" "Les sauvegardes ne seront exécutées que sur demande manuelle à partir du " "menu accessible via l'icône de la barre des tâches." #: kcm/backupplanwidget.cpp:724 #, kde-kuit-format msgctxt "@info" msgid "" "New backup will be triggered when backup destination becomes available and " "more than the configured interval has passed since the last backup was taken." msgstr "" "Une nouvelle sauvegarde sera lancée dès que la destination sera disponible " "et si la dernière sauvegarde est plus ancienne que l'intervalle configuré." #: kcm/backupplanwidget.cpp:741 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Minutes" msgstr "Minutes" #: kcm/backupplanwidget.cpp:742 kcm/backupplanwidget.cpp:769 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Hours" msgstr "Heures" #: kcm/backupplanwidget.cpp:743 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Days" msgstr "Jours" #: kcm/backupplanwidget.cpp:744 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Weeks" msgstr "Semaines" #: kcm/backupplanwidget.cpp:754 #, kde-kuit-format msgctxt "@info" msgid "" "New backup will be triggered when backup destination becomes available and " "you have been using your computer actively for more than the configured time " "limit since the last backup was taken." msgstr "" "Une nouvelle sauvegarde sera lancée lorsque la destination sera disponible, " "et que la durée minimale d'utilisation configurée a été dépassée depuis la " "dernière sauvegarde." #: kcm/backupplanwidget.cpp:775 #, kde-kuit-format msgctxt "@option:check" msgid "Ask for confirmation before taking backup" msgstr "Demander confirmation avant d'exécuter la sauvegarde" #: kcm/backupplanwidget.cpp:794 #, kde-kuit-format msgctxt "@title" msgid "Schedule" msgstr "Planifier" #: kcm/backupplanwidget.cpp:795 #, kde-kuit-format msgctxt "@label" msgid "Specify the backup schedule" msgstr "Spécifiez la planification de la sauvegarde" #: kcm/backupplanwidget.cpp:808 #, kde-kuit-format msgctxt "@option:check" msgid "Show hidden folders in source selection" msgstr "Afficher les dossiers cachés dans la sélection de la source" #: kcm/backupplanwidget.cpp:814 #, kde-kuit-format msgctxt "@info" msgid "" "This makes it possible to explicitly include or exclude hidden folders in " "the backup source selection. Hidden folders have a name that starts with a " "dot. They are typically located in your home folder and are used to store " "settings and temporary files for your applications." msgstr "" #: kcm/backupplanwidget.cpp:832 #, kde-kuit-format msgctxt "@info" msgid "" "This will make your backups use around 10% more storage space and saving " "backups will take slightly longer time. In return it will be possible to " "recover from a partially corrupted backup." msgstr "" #: kcm/backupplanwidget.cpp:838 #, kde-kuit-format msgctxt "@option:check" msgid "Generate recovery information" msgstr "Générer les informations de restauration" #: kcm/backupplanwidget.cpp:840 #, kde-kuit-format msgctxt "@option:check" msgid "" "Generate recovery information (not available because par2 is not installed)" msgstr "" #: kcm/backupplanwidget.cpp:856 #, kde-kuit-format msgctxt "@option:check" msgid "Verify integrity of backups" msgstr "Vérifier l'intégrité des sauvegardes" #: kcm/backupplanwidget.cpp:860 #, kde-kuit-format msgctxt "@info" msgid "" "Checks the whole backup archive for corruption every time you save new data. " "Saving backups will take a little bit longer time but it allows you to catch " "corruption problems sooner than at the time you need to use a backup, at " "that time it could be too late." msgstr "" #: kcm/backupplanwidget.cpp:882 #, kde-kuit-format msgctxt "@title" msgid "Advanced" msgstr "Avancé" #: kcm/backupplanwidget.cpp:883 #, kde-kuit-format msgctxt "@label" msgid "Extra options for advanced users" msgstr "Autres options pour les utilisateurs avancés" #: kcm/driveselection.cpp:275 #, kde-kuit-format msgctxt "@label Only shown if no drives are detected" msgid "" "Plug in the external storage you wish to use, then select it in this list." msgstr "" "Branchez le périphérique se stockage externe que vous souhaitez utiliser, " "puis sélectionnez-le dans la liste." #: kcm/driveselectiondelegate.cpp:75 #, kde-kuit-format msgctxt "@item:inlistbox this text is added if selected drive is disconnected" msgid " (disconnected)" msgstr "(déconnecté)" #: kcm/driveselectiondelegate.cpp:78 #, kde-kuit-format msgctxt "@label %1 is amount of free storage space of hard drive" msgid "%1 free" msgstr "%1 libre" #: kcm/driveselectiondelegate.cpp:92 #, kde-kuit-format msgctxt "" "@item:inlistbox used for unnamed filesystems, more than one filesystem on " "device. %1 is partition number, %2 is device description, %3 is either empty " "or the \" (disconnected)\" text" msgid "Partition %1 on %2%3" msgstr "Partition %1 sur %2%3" #: kcm/driveselectiondelegate.cpp:95 #, kde-kuit-format msgctxt "" "@item:inlistbox used when there is only one unnamed filesystem on device. %1 " "is device description, %2 is either empty or the \" (disconnected)\" text" msgid "%1%2" msgstr "%1%2" #: kcm/driveselectiondelegate.cpp:99 #, kde-kuit-format msgctxt "" "@item:inlistbox %1 is filesystem label, %2 is the device description, %3 is " "either empty or the \" (disconnected)\" text" msgid "%1 on %2%3" msgstr "%1 sur %2%3" #: kcm/driveselectiondelegate.cpp:106 #, kde-kuit-format msgctxt "@item:inlistbox %1 is drive(partition) label, %2 is storage capacity" msgid "%1: %2 total capacity" msgstr "%1: %2 capacité totale" #: kcm/driveselectiondelegate.cpp:153 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "" "Warning: Symbolic links and file permissions can not be saved to this file " "system. File permissions only matters if there is more than one user of this " "computer or if you are backing up executable program files." msgstr "" #: kcm/driveselectiondelegate.cpp:157 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "" "Warning: File permissions can not be saved to this file system. File " "permissions only matters if there is more than one user of this computer or " "if you are backing up executable program files." msgstr "" #: kcm/folderselectionmodel.cpp:107 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "" "%1will be included in the backup, except for " "unchecked subfolders" msgstr "" #: kcm/folderselectionmodel.cpp:111 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "%1will be included in the backup" msgstr "%1sera inclus dans la sauvegarde" #: kcm/folderselectionmodel.cpp:115 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "" "%1 will not be included in " "the backup but contains folders that will" msgstr "" #: kcm/folderselectionmodel.cpp:119 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "" "%1 will not be included in " "the backup" msgstr "" "%1ne sera pas inclus dans la " "sauvegarde" #: kcm/kupkcm.cpp:49 #, kde-format msgid "Kup Configuration Module" msgstr "Module de configuration de Kup" #: kcm/kupkcm.cpp:51 #, kde-format msgid "Configuration of backup plans for the Kup backup system" msgstr "" "Configuration des plans de sauvegardes pour le système de sauvegarde Kup" #: kcm/kupkcm.cpp:54 #, kde-format msgid "Maintainer" msgstr "Mainteneur" #: kcm/kupkcm.cpp:87 #, kde-format msgid "" "

Backup programs are missing

Before you can activate any backup " "plan you need to install either of

  • bup, for versioned backups
  • rsync, for synchronized backups
" msgstr "" "

Programmes de sauvegarde manquants

Avant de pouvoir activer un " "plan de sauvegarde, vous devez installer soit

  • bup, pour les " "sauvegardes versionnées
  • rsync, pour les sauvegardes synchronisées
" #: kcm/kupkcm.cpp:168 #, kde-kuit-format msgctxt "@title:window" msgid "Warning" msgstr "Avertissement" #: kcm/kupkcm.cpp:170 #, kde-kuit-format msgctxt "@info %1 is the name of the backup plan" msgid "" "%1 does not have a destination!No backups will be saved by this plan." msgstr "" "%1 ne comporte aucune destination !Aucune sauvegarde ne sera exécutée " "par ce plan." #: kcm/kupkcm.cpp:227 #, kde-kuit-format msgctxt "@action:button" msgid "Add New Plan" msgstr "Ajouter un nouveau plan" #: kcm/kupkcm.cpp:238 #, kde-kuit-format msgctxt "@option:check" msgid "Backups Enabled" msgstr "Sauvegardes activées" #: kcm/planstatuswidget.cpp:48 #, kde-kuit-format msgctxt "@action:button" msgid "Configure" msgstr "Configurer" #: kcm/planstatuswidget.cpp:51 #, kde-kuit-format msgctxt "@action:button" msgid "Remove" msgstr "Ôter" #: kcm/planstatuswidget.cpp:54 #, kde-kuit-format msgctxt "@action:button" msgid "Duplicate" msgstr "" #: kioslave/bupslave.cpp:92 kioslave/bupslave.cpp:149 kioslave/bupslave.cpp:186 #: kioslave/bupslave.cpp:249 kioslave/bupslave.cpp:271 #, kde-format msgid "" "No bup repository found.\n" "%1" msgstr "" "Aucun dépôt bup trouvé.\n" "%1" #: plasmoid/contents/ui/FullRepresentation.qml:88 #, fuzzy, kde-format msgid "Save new backup" msgstr "Nouvelle sauvegarde en cours" #: plasmoid/contents/ui/FullRepresentation.qml:94 #, fuzzy, kde-format msgid "Show files" msgstr "Voir les fichiers" #: plasmoid/contents/ui/FullRepresentation.qml:99 #, fuzzy, kde-format msgid "Show log file" msgstr "Voir le journal" #. i18n: file: filedigger/restoredialog.ui:14 #. i18n: ectx: property (windowTitle), widget (QDialog, RestoreDialog) #: po/rc.cpp:3 rc.cpp:3 #, kde-format msgctxt "@title:window" msgid "Restore Guide" msgstr "Guide de restauration" #. i18n: file: filedigger/restoredialog.ui:55 #. i18n: ectx: property (text), widget (QPushButton, mRestoreOriginalButton) #: po/rc.cpp:6 rc.cpp:6 #, kde-format msgctxt "@action:button" msgid "Restore to original location" msgstr "Restaurer à l'emplacement initial" #. i18n: file: filedigger/restoredialog.ui:78 #. i18n: ectx: property (text), widget (QPushButton, mRestoreCustomButton) #: po/rc.cpp:9 rc.cpp:9 #, kde-format msgctxt "@action:button" msgid "Choose where to restore" msgstr "Choisissez l'emplacement pour la restauration" #. i18n: file: filedigger/restoredialog.ui:132 #. i18n: ectx: property (text), widget (QPushButton, mDestBackButton) #: po/rc.cpp:12 rc.cpp:12 #, kde-format msgctxt "@action:button" msgid "Back" msgstr "Précédent" #. i18n: file: filedigger/restoredialog.ui:144 #. i18n: ectx: property (text), widget (QPushButton, mDestNextButton) #: po/rc.cpp:15 rc.cpp:15 #, kde-format msgctxt "@action:button" msgid "Next" msgstr "Suivant" #. i18n: file: filedigger/restoredialog.ui:175 #. i18n: ectx: property (text), widget (QRadioButton, mNewNameRadioButton) #: po/rc.cpp:18 rc.cpp:18 #, kde-format msgctxt "@option:radio " msgid "Restore the folder under a new name" msgstr "Restaurer le dossier sous un autre nom" #. i18n: file: filedigger/restoredialog.ui:208 #. i18n: ectx: property (text), widget (QRadioButton, mOverwriteRadioButton) #: po/rc.cpp:21 rc.cpp:21 #, kde-format msgctxt "@option:radio" msgid "Merge folders" msgstr "Fusionner les dossiers" #. i18n: file: filedigger/restoredialog.ui:238 #. i18n: ectx: property (text), widget (QLabel, mConfirmOverwriteLabel) #: po/rc.cpp:24 rc.cpp:24 #, kde-format msgctxt "@info Question to user, in dialog" msgid "" "The following files would be overwritten, please confirm that you wish to " "continue." msgstr "" "Les fichiers suivant seront écrasés. Veuillez confirmer pour continuer." #. i18n: file: filedigger/restoredialog.ui:274 #. i18n: ectx: property (text), widget (QPushButton, mOverwriteBackButton) #: po/rc.cpp:27 rc.cpp:27 #, kde-format msgctxt "@action:button go to previous page in dialog" msgid "Back" msgstr "Précédent" #. i18n: file: filedigger/restoredialog.ui:286 #. i18n: ectx: property (text), widget (QPushButton, mConfirmButton) #: po/rc.cpp:30 rc.cpp:30 #, kde-format msgctxt "@action:button User answers \"yes I confirm: overwrite files\"" msgid "Confirm" msgstr "Confirmer" #. i18n: file: filedigger/restoredialog.ui:341 #. i18n: ectx: property (text), widget (QLabel, mErrorLabel) #: po/rc.cpp:33 rc.cpp:33 #, kde-format msgctxt "@label above the detailed error message" msgid "An error occured while restoring:" msgstr "Une erreur est survenue durant la restauration :" #. i18n: file: filedigger/restoredialog.ui:372 #. i18n: ectx: property (text), widget (QLabel, label) #: po/rc.cpp:36 rc.cpp:36 #, kde-format msgctxt "@label" msgid "Restoration completed successfully!" msgstr "La restauration a réussi !" #. i18n: file: filedigger/restoredialog.ui:413 #. i18n: ectx: property (text), widget (QPushButton, mOpenDestinationButton) #: po/rc.cpp:39 rc.cpp:39 #, kde-format msgid "Open Destination" msgstr "Ouvrir la destination" #. i18n: file: filedigger/restoredialog.ui:472 #. i18n: ectx: property (text), widget (QPushButton, mCloseButton) #: po/rc.cpp:42 rc.cpp:42 #, kde-format msgctxt "@action:button" msgid "Close" msgstr "Fermer" #: po/rc.cpp:43 po/rc.cpp:58 settings/backupplan.cpp:69 rc.cpp:43 rc.cpp:58 #, kde-format msgid "Backups" msgstr "Sauvegardes" #: po/rc.cpp:44 rc.cpp:44 msgid "Configure backup plans" msgstr "Configurer les plans de sauvegarde" #: po/rc.cpp:45 rc.cpp:45 msgid "backup,recovery,safety" msgstr "sauvegarde,restauration,sécurité" #: po/rc.cpp:46 rc.cpp:46 msgid "Kup" msgstr "Kup" #: po/rc.cpp:48 rc.cpp:48 msgid "Start taking backup" msgstr "Commencer la sauvegarde" #: po/rc.cpp:49 rc.cpp:49 msgid "A question if user wants to start taking a backup" msgstr "" #: po/rc.cpp:50 rc.cpp:50 #, fuzzy msgid "Backup succeeded" msgstr "Nouvelle sauvegarde requise" #: po/rc.cpp:51 rc.cpp:51 #, fuzzy msgid "Saving of backup successfully completed" msgstr "Enregistrement de la sauvegardé échoué" #: po/rc.cpp:52 rc.cpp:52 msgid "Backup failed" msgstr "Sauvegarde échouée" #: po/rc.cpp:53 rc.cpp:53 msgid "Saving of backup failed, offer user to see log file" msgstr "" #: po/rc.cpp:54 rc.cpp:54 msgid "Integrity check completed" msgstr "Contrôle d'intégrité effectué" #: po/rc.cpp:55 rc.cpp:55 msgid "Finished checking integrity of backup archive" msgstr "" #: po/rc.cpp:56 rc.cpp:56 msgid "Repair completed" msgstr "" #: po/rc.cpp:57 rc.cpp:57 msgid "Finished repairing backup archive" msgstr "Réparation de l'archive effectuée" #: po/rc.cpp:59 rc.cpp:59 #, fuzzy msgid "Status of backup plans" msgstr "Configurer les plans de sauvegarde" #: po/rc.cpp:60 rc.cpp:60 #, fuzzy msgid "Backup Status" msgstr "Statut de la sauvegarde OK" #: po/rc.cpp:61 rc.cpp:61 msgid "Displays status of backup plans" msgstr "" #: settings/backupplan.cpp:38 #, kde-kuit-format msgctxt "" "@label Default name for a new backup plan, %1 is the number of the plan in " "order" msgid "Backup plan %1" msgstr "Plan de sauvegarde %1" #: settings/backupplan.cpp:101 #, kde-format msgctxt "default description of newly duplicated backup plan" msgid "%1 (copy)" msgstr "" #: settings/backupplan.cpp:213 #, fuzzy, kde-format msgctxt "%1 is fancy formatted date" msgid "Last saved: %1" msgstr "- sauvegardé à %1" #: settings/backupplan.cpp:218 #, kde-format msgctxt "%1 is storage size of archive" msgid "Size: %1" msgstr "" #: settings/backupplan.cpp:223 #, kde-format msgctxt "%1 is free storage space" msgid "Free space: %1" msgstr "" #: settings/backupplan.cpp:227 #, kde-kuit-format msgctxt "@label" msgid "This backup plan has never been run." msgstr "Ce plan de sauvegarde n'a jamais été exécuté." #~ msgctxt "@title:window" #~ msgid "Backups" #~ msgstr "Sauvegardes" #~ msgctxt "@title:menu" #~ msgid "Backups" #~ msgstr "Sauvegardes" #~ msgctxt "@action:inmenu" #~ msgid "Configure Backups" #~ msgstr "Configurer les sauvegardes" #~ msgctxt "@action:inmenu" #~ msgid "Take Backup Now" #~ msgstr "Lancer une sauvegarde maintenant" #~ msgctxt "@action:inmenu" #~ msgid "Show Log File" #~ msgstr "Voir les journaux" #~ msgctxt "@title:window" #~ msgid "Backup Device Available - %1" #~ msgstr "Périphérique de sauvegarde disponible - %1" #~ msgctxt "@info notification" #~ msgid "" #~ "Saving backup did not complete successfully. See log file for more " #~ "details." #~ msgstr "" #~ "Échec à l'enregistrement de la sauvegarde complète. Voyez le fichier de " #~ "log pour plus de détails." #~ msgctxt "@label %1 is fancy formatted date, %2 is time of day" #~ msgid "Last backup was taken %1 at %2.\n" #~ msgstr "La dernière sauvegarde a eu lieu le %1 à %2.\n" #~ msgctxt "@label %1 is storage size of archive" #~ msgid "The size of the backup archive was %1.\n" #~ msgstr "La taille de l'archive de sauvegarde est de %1.\n" #~ msgctxt "@label %1 is free storage space" #~ msgid "The destination still had %1 available.\n" #~ msgstr "Il reste toujours %1 disponible sur la destination.\n" kup-backup-0.7.1+dfsg/po/it.po000066400000000000000000001324701322613417100161010ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Francesco Marinucci , 2013 # Francesco Marinucci , 2013 # Francesco Marinucci , 2014 # Francesco Marinucci , 2013-2014,2016-2017 # Francesco Marinucci , 2014 # Simon Persson , 2014 # Tichy , 2018 msgid "" msgstr "" "Project-Id-Version: kup\n" "Report-Msgid-Bugs-To: http://kde-apps.org/content/show.php/Kup+Backup+System?" "content=147465\n" "POT-Creation-Date: 2018-01-05 16:00+0800\n" "PO-Revision-Date: 2018-01-01 23:12+0000\n" "Last-Translator: Tichy \n" "Language-Team: Italian (http://www.transifex.com/kup/kup/language/it/)\n" "Language: it\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" #: daemon/bupjob.cpp:47 daemon/buprepairjob.cpp:38 #: daemon/bupverificationjob.cpp:37 #, kde-kuit-format msgctxt "@info notification" msgid "" "The bup program is needed but could not be found, " "maybe it is not installed?" msgstr "" "Il programma bup è necessario ma non è stato " "trovato; forse non è installato?" #: daemon/bupjob.cpp:52 daemon/buprepairjob.cpp:43 #, kde-kuit-format msgctxt "@info notification" msgid "" "The par2 program is needed but could not be " "found, maybe it is not installed?" msgstr "" "Il programma par2 è necessario ma non è stato " "trovato; forse non è installato?" #: daemon/bupjob.cpp:71 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup destination could not be initialised. See log file for more details." msgstr "" "La destinazione di backup non può essere inizializzata. Controllare il file " "di log per ulteriori dettagli." #: daemon/bupjob.cpp:93 #, kde-format msgid "Checking backup integrity" msgstr "Controllo dell'integrità del backup" #: daemon/bupjob.cpp:104 daemon/bupverificationjob.cpp:67 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups could be corrupted! See log file " "for more details. Do you want to try repairing the backup files?" msgstr "" "Controllo dell'integrità del backup fallito. I tuoi backup potrebbero essere " "corrotti! Controlla il file di log per ulteriori dettagli. Vuoi provare a " "riparare i file di backup?" #: daemon/bupjob.cpp:108 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups could be corrupted! See log file " "for more details." msgstr "" "Controllo dell'integrità del backup fallito. I tuoi backup potrebbero essere " "corrotti! Controlla il file di log per ulteriori dettagli." #: daemon/bupjob.cpp:131 daemon/rsyncjob.cpp:57 #, kde-format msgid "Checking what to copy" msgstr "Controllo dei file da copiare" #: daemon/bupjob.cpp:138 #, kde-kuit-format msgctxt "@info notification" msgid "Failed to analyze files. See log file for more details." msgstr "" "Analisi dei file fallita. Controllare il file di log per ulteriori dettagli." #: daemon/bupjob.cpp:159 daemon/bupjob.cpp:253 daemon/rsyncjob.cpp:175 #, kde-format msgid "Saving backup" msgstr "Salvataggio backup" #: daemon/bupjob.cpp:167 daemon/rsyncjob.cpp:120 #, kde-kuit-format msgctxt "@info notification" msgid "Failed to save backup. See log file for more details." msgstr "" "Salvataggio del backup fallito. Controllare il file di log per ulteriori " "dettagli." #: daemon/bupjob.cpp:189 #, kde-format msgid "Generating recovery information" msgstr "Generazione informazioni di ripristino" #: daemon/bupjob.cpp:197 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed to generate recovery info for the backup. See log file for more " "details." msgstr "" "Impossibile generare le informazioni di recupero per il backup. Consultare " "il log per ulteriori dettagli." #: daemon/bupjob.cpp:254 daemon/rsyncjob.cpp:176 #, kde-format msgctxt "Label for file currently being copied" msgid "File" msgstr "File" #: daemon/buprepairjob.cpp:72 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup repair failed. Your backups could be corrupted! See log file for more " "details." msgstr "" "Riparazione del backup fallita. I tuoi backup potrebbero essere corrotti! " "Consultare il file di log per ulteriori dettagli." #: daemon/buprepairjob.cpp:76 #, kde-kuit-format msgctxt "@info notification" msgid "Success! Backup repair worked. See log file for more details." msgstr "" "Fatto! La riparazione del backup ha funzionato. Consultare il file di log " "per ulteriori dettagli." #: daemon/buprepairjob.cpp:80 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup repair was not necessary. Your backups are not corrupted.See log file " "for more details." msgstr "" "Riparazione del backup non necessaria. I tuoi backup non sono corrotti. " "Consultare il file di log per ulteriori dettagli." #: daemon/buprepairjob.cpp:85 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup repair failed. Your backups could still be corrupted! See log file " "for more details." msgstr "" "Riparazione del backup fallita. I tuoi backup potrebbero essere ancora " "corrotti! Consultare il file di log per ulteriori dettagli." #: daemon/bupverificationjob.cpp:70 daemon/bupverificationjob.cpp:87 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups are corrupted! See log file for " "more details." msgstr "" "Controllo dell'integrità del backup fallito. I tuoi backup sono corrotti! " "Controlla il file di log per ulteriori dettagli." #: daemon/bupverificationjob.cpp:76 #, kde-kuit-format msgctxt "@info notification" msgid "Backup integrity test was successful, Your backups are fine." msgstr "" "Test dell'integrità del backup completato. I tuoi backup sono corretti." #: daemon/bupverificationjob.cpp:83 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups are corrupted! See log file for " "more details. Do you want to try repairing the backup files?" msgstr "" "Controllo dell'integrità del backup fallito. I tuoi backup sono corrotti! " "Controlla il file di log per ulteriori dettagli. Vuoi provare a riparare i " "file di backup?" #: daemon/edexecutor.cpp:115 daemon/edexecutor.cpp:124 #: daemon/edexecutor.cpp:160 daemon/fsexecutor.cpp:114 #: daemon/fsexecutor.cpp:146 #, kde-kuit-format msgctxt "@title:window" msgid "Problem" msgstr "Problema" #: daemon/edexecutor.cpp:116 daemon/fsexecutor.cpp:115 #, kde-kuit-format msgctxt "notification" msgid "Invalid type of backup in configuration." msgstr "Tipo di backup non valido nelle impostazioni." #: daemon/edexecutor.cpp:125 #, kde-kuit-format msgctxt "notification" msgid "You don't have write permission to backup destination." msgstr "Non hai i permessi di scrittura per la destinazione di backup." #: daemon/kupdaemon.cpp:171 #, kde-format msgid "Continue" msgstr "Continua" #: daemon/kupdaemon.cpp:173 #, kde-format msgid "Stop" msgstr "Stop" #: daemon/kupdaemon.cpp:175 #, kde-format msgctxt "%1 is a text explaining the current activity" msgid "Currently busy: %1" msgstr "Attualmente occupato: %1" #: daemon/kupdaemon.cpp:176 #, kde-format msgid "Do you really want to stop?" msgstr "Vuoi veramente interrompere l'operazione?" #: daemon/kupdaemon.cpp:179 #, kde-format msgid "User Backups" msgstr "Backup Utente" #: daemon/kupdaemon.cpp:249 #, kde-format msgctxt "status in tooltip" msgid "Backup destination not available" msgstr "Destinazione per il backup non disponibile" #: daemon/kupdaemon.cpp:253 daemon/kupdaemon.cpp:310 #, kde-format msgid "No backup plans configured" msgstr "Non sono stati configurati piani di backup" #: daemon/kupdaemon.cpp:259 #, kde-format msgctxt "status in tooltip" msgid "Backup destination available" msgstr "Destinazione per il backup disponibile" #: daemon/kupdaemon.cpp:269 daemon/planexecutor.cpp:84 #, kde-format msgctxt "status in tooltip" msgid "Backup status OK" msgstr "Stato backup OK" #: daemon/kupdaemon.cpp:276 daemon/planexecutor.cpp:86 #, kde-format msgctxt "status in tooltip" msgid "New backup suggested" msgstr "Si consiglia un nuovo backup" #: daemon/kupdaemon.cpp:283 daemon/planexecutor.cpp:88 #, kde-format msgctxt "status in tooltip" msgid "New backup neeeded" msgstr "È necessario un nuovo backup" #: daemon/main.cpp:41 #, kde-kuit-format msgctxt "@info:shell Error message at startup" msgid "" "Kup is not enabled, enable it from the system settings module. You can do " "that by running kcmshell5 kup" msgstr "" "Kup non è abilitato, puoi abilitarlo dal modulo nelle impostazioni di " "sistema. È possibile farlo eseguendo kcmshell5 kup" #: daemon/main.cpp:47 #, kde-kuit-format msgctxt "@title" msgid "Kup Daemon" msgstr "Demone di Kup" #: daemon/main.cpp:48 #, kde-format msgid "" "Kup is a flexible backup solution using the backup storage system 'bup'. " "This allows it to quickly perform incremental backups, only saving the parts " "of files that has actually changed since last backup was taken." msgstr "" "Kup è una soluzione flessibile per i backup che utilizza il sistema di " "salvataggio dei backup 'bup'. Ciò gli consente di eseguire rapidamente " "backup incrementali, salvando solo le parti dei file che sono state " "realmente modificate da quando è stato eseguito l'ultimo backup. " #: daemon/main.cpp:51 kcm/kupkcm.cpp:52 #, kde-format msgid "Copyright (C) 2011-2015 Simon Persson" msgstr "Copyright (C) 2011-2015 Simon Persson" #: daemon/main.cpp:53 filedigger/main.cpp:51 kcm/kupkcm.cpp:54 #, kde-format msgid "Simon Persson" msgstr "Simon Persson" #: daemon/main.cpp:54 filedigger/main.cpp:52 kcm/kupkcm.cpp:55 #, kde-kuit-format msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "Francesco Marinucci" #: daemon/main.cpp:54 filedigger/main.cpp:52 kcm/kupkcm.cpp:56 #, kde-kuit-format msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "framarinucci@gmail.com" #: daemon/planexecutor.cpp:76 #, kde-format msgctxt "status in tooltip" msgid "Saving backup" msgstr "Salvataggio backup" #: daemon/planexecutor.cpp:78 #, kde-format msgctxt "status in tooltip" msgid "Checking backup integrity" msgstr "Controllo integrità del backup" #: daemon/planexecutor.cpp:80 #, kde-format msgctxt "status in tooltip" msgid "Repairing backups" msgstr "Riparazione dei backup" #: daemon/planexecutor.cpp:118 daemon/planexecutor.cpp:133 #, kde-kuit-format msgctxt "@info" msgid "Do you want to save a first backup now?" msgstr "Vuoi salvare ora il primo backup?" #: daemon/planexecutor.cpp:121 #, kde-kuit-format msgctxt "@info" msgid "" "It has been %1 since last backup was saved.\n" "Save a new backup now?" msgstr "" "L'ultimo backup risale a %1.\n" "Salvare un nuovo backup ora?" #: daemon/planexecutor.cpp:137 #, kde-kuit-format msgctxt "@info" msgid "" "You have been active for %1 since last backup was saved.\n" "Save a new backup now?" msgstr "" "Sei stato attivo per %1 da quando è stato salvato l'ultimo backup.\n" "Salvare un nuovo backup ora?" #: daemon/planexecutor.cpp:170 daemon/planexecutor.cpp:200 #: daemon/planexecutor.cpp:278 #, kde-kuit-format msgctxt "@action:button" msgid "Yes" msgstr "Sì" #: daemon/planexecutor.cpp:170 daemon/planexecutor.cpp:201 #: daemon/planexecutor.cpp:279 #, kde-kuit-format msgctxt "@action:button" msgid "No" msgstr "No" #: daemon/planexecutor.cpp:192 #, kde-kuit-format msgctxt "@title:window" msgid "Saving of Backup Failed" msgstr "Salvataggio del backup fallito" #: daemon/planexecutor.cpp:197 daemon/planexecutor.cpp:275 #: daemon/planexecutor.cpp:309 #, kde-kuit-format msgctxt "@action:button" msgid "Show log file" msgstr "Mostra il file di log" #: daemon/planexecutor.cpp:221 #, kde-kuit-format msgctxt "@title:window" msgid "Backup Saved" msgstr "Backup Salvato" #: daemon/planexecutor.cpp:222 #, kde-kuit-format msgctxt "@info notification" msgid "Saving backup completed successfully." msgstr "Salvataggio del backup completato con successo." #: daemon/planexecutor.cpp:271 #, kde-kuit-format msgctxt "@title:window" msgid "Integrity Check Completed" msgstr "Controllo dell'integrità completato" #: daemon/planexecutor.cpp:306 #, kde-kuit-format msgctxt "@title:window" msgid "Repair Completed" msgstr "Riparazione completata" #: daemon/planexecutor.cpp:337 po/rc.cpp:47 rc.cpp:47 #, kde-format msgid "Kup Backup System" msgstr "Kup Backup System" #: daemon/rsyncjob.cpp:48 #, kde-kuit-format msgctxt "@info notification" msgid "" "The rsync program is needed but could not be " "found, maybe it is not installed?" msgstr "" "Il programma rsync è necessario ma non è stato " "trovato; forse non è installato?" #: filedigger/main.cpp:47 #, kde-kuit-format msgctxt "@title" msgid "File Digger" msgstr "File Digger" #: filedigger/main.cpp:48 #, kde-format msgid "Browser for bup archives." msgstr "Visualizzatore degli archivi di bup." #: filedigger/main.cpp:49 #, kde-format msgid "Copyright (C) 2013-2015 Simon Persson" msgstr "Copyright (C) 2013-2015 Simon Persson" #: filedigger/main.cpp:59 #, kde-format msgid "Name of the branch to be opened." msgstr "Nome del ramo da aprire." #: filedigger/main.cpp:61 #, kde-format msgid "Path to the bup repository to be opened." msgstr "Percorso del repository bup da aprire." #: filedigger/main.cpp:70 #, kde-format msgctxt "@info:shell Error message at startup" msgid "" "You must supply the path to a bup or git repository that you wish to open " "for viewing." msgstr "" "Devi indicare il percorso al repository bup o git che vuoi aprire per " "visualizzarlo." #: filedigger/main.cpp:85 #, kde-kuit-format msgctxt "@info messagebox, %1 is a folder path" msgid "" "The backup archive %1 could not be opened. Check if the " "backups really are located there." msgstr "" "Impossibile aprire l'archivio di backup %1. Controlla " "che i backup si trovino effettivamente lì." #: filedigger/main.cpp:92 #, kde-kuit-format msgctxt "@info messagebox" msgid "You do not have permission needed to read this backup archive." msgstr "Non hai i permessi necessari per leggere questo archivio di backup." #: filedigger/mergedvfs.cpp:108 #, kde-kuit-format msgctxt "@info messagebox" msgid "" "Could not read this backup archive. Perhaps some files have become " "corrupted. Do you want to run an integrity check to test this?" msgstr "" "Impossibile leggere questo archivio di backup. Alcuni file potrebbero essere " "corrotti. Vuoi eseguire il controllo dell'integrità per verificare?" #: filedigger/mergedvfs.cpp:156 #, kde-kuit-format msgctxt "added after folder name in some cases" msgid " (folder)" msgstr "(cartella)" #: filedigger/mergedvfs.cpp:158 #, kde-kuit-format msgctxt "added after file name in some cases" msgid " (symlink)" msgstr "(collegamento)" #: filedigger/mergedvfs.cpp:160 #, kde-kuit-format msgctxt "added after file name in some cases" msgid " (file)" msgstr "(file)" #: filedigger/restoredialog.cpp:115 kcm/backupplanwidget.cpp:451 #, kde-kuit-format msgctxt "@action:button" msgid "New Folder..." msgstr "Nuova cartella..." #: filedigger/restoredialog.cpp:141 filedigger/restoredialog.cpp:160 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "No destination was selected, please select one." msgstr "Nessuna destinazione selezionata, selezionane una." #: filedigger/restoredialog.cpp:251 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "There was a problem while getting a list of all files to restore: %1" msgstr "" "Si è verificato un problema durante l'elaborazione della lista dei file da " "ripristinare: %1" #: filedigger/restoredialog.cpp:264 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "The destination does not have enough space available. Please choose a " "different destination or free some space." msgstr "" "La destinazione non ha abbastanza spazio disponibile. Seleziona una " "destinazione diversa o libera dello spazio." #: filedigger/restoredialog.cpp:274 #, kde-kuit-format msgctxt "" "added to the suggested filename when restoring, %1 is the time when backup " "was taken" msgid " - saved at %1" msgstr "-salvato il %1" #: filedigger/restoredialog.cpp:275 #, kde-kuit-format msgctxt "@info" msgid "Folder already exists, please choose a solution" msgstr "La cartella esiste già, scegli una soluzione" #: filedigger/restoredialog.cpp:281 #, kde-kuit-format msgctxt "@info" msgid "File already exists" msgstr "Il file esiste già" #: filedigger/restoredialog.cpp:294 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "The new name entered already exists, please enter a different one." msgstr "Il nuovo nome inserito esiste già, inseriscine uno diverso." #: filedigger/restoredialog.cpp:371 kcm/dirselector.cpp:50 #, kde-kuit-format msgctxt "default folder name when creating a new folder" msgid "New Folder" msgstr "Nuova cartella" #: filedigger/restoredialog.cpp:376 kcm/dirselector.cpp:55 #, kde-kuit-format msgctxt "@title:window" msgid "New Folder" msgstr "Nuova cartella" #: filedigger/restoredialog.cpp:377 kcm/dirselector.cpp:56 #, kde-kuit-format msgctxt "@label:textbox" msgid "" "Create new folder in:\n" "%1" msgstr "" "Crea la nuova cartella in:\n" "%1" #: filedigger/restoredialog.cpp:390 kcm/dirselector.cpp:68 #, kde-format msgid "A folder named %1 already exists." msgstr "Esiste già una cartella di nome %1." #: filedigger/restoredialog.cpp:396 kcm/dirselector.cpp:74 #, kde-format msgid "You do not have permission to create %1." msgstr "Non hai i permessi per creare %1." #: filedigger/restorejob.cpp:99 #, kde-kuit-format msgctxt "progress report, current operation" msgid "Restoring" msgstr "Ripristino" #: filedigger/restorejob.cpp:100 #, kde-kuit-format msgctxt "progress report, label" msgid "File:" msgstr "File:" #: filedigger/versionlistdelegate.cpp:135 #, kde-kuit-format msgctxt "@action:button" msgid "Open" msgstr "Apri" #: filedigger/versionlistdelegate.cpp:137 #, kde-kuit-format msgctxt "@action:button" msgid "Restore" msgstr "Ripristina" #: kcm/backupplanwidget.cpp:282 #, kde-kuit-format msgctxt "@action:button" msgid "Exclude Folder" msgstr "Escludi Cartelle" #: kcm/backupplanwidget.cpp:285 #, kde-kuit-format msgctxt "@action:button" msgid "Include Folder" msgstr "Includi Cartelle" #: kcm/backupplanwidget.cpp:382 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "You don't have permission to read this folder: %1It cannot be included in the source selection. If it does not contain " "anything important to you, one possible solution is to exclude the folder " "from the backup plan." msgstr "" "Non hai i permessi per leggere la cartella: %1Non " "può essere inclusa nella selezione dei sorgenti. Se non contiene cose " "importanti, una soluzione possibile è di escludere la cartella dal piano di " "backup." #: kcm/backupplanwidget.cpp:393 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "You don't have permission to read this file: %1It " "cannot be included in the source selection. If the file is not important to " "you, one possible solution is to exclude the whole folder where the file is " "stored from the backup plan." msgstr "" "Non hai i permessi per leggere il file: %1Non può " "essere incluso nella selezione dei sorgenti. Se il file non è importante per " "te, una soluzione possibile è di escludere dal piano di backup l'intera " "cartella dov'è memorizzato." #: kcm/backupplanwidget.cpp:409 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "The symbolic link %1 is currently included but it " "points to a folder which is not: %2.That is " "probably not what you want. One solution is to simply include the target " "folder in the backup plan." msgstr "" "Il collegamento simbolico %1 è attualmente incluso, ma " "punta ad una cartella che non lo è: %2.Questo non " "è probabilmente nelle tue intenzioni. Una soluzione è di includere " "semplicemente nel piano di backup la cartella a cui punta." #: kcm/backupplanwidget.cpp:417 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "The symbolic link %1 is currently included but it " "points to a file which is not: %2.That is probably " "not what you want. One solution is to simply include the folder where the " "file is stored in the backup plan." msgstr "" "Il collegamento simbolico %1 è attualmente incluso, ma " "punta ad un file che non lo è: %2.Questo non è " "probabilmente nelle tue intenzioni. Una soluzione è di includere " "semplicemente nel piano di backup la cartella che contiene il file a cui il " "collegamento punta." #: kcm/backupplanwidget.cpp:440 #, kde-kuit-format msgctxt "@title:window" msgid "Select Folder" msgstr "Seleziona cartella" #: kcm/backupplanwidget.cpp:478 #, kde-kuit-format msgctxt "@label" msgid "Description:" msgstr "Descrizione:" #: kcm/backupplanwidget.cpp:481 #, kde-kuit-format msgctxt "@action:button" msgid "Back to overview" msgstr "Torna al riepilogo" #: kcm/backupplanwidget.cpp:510 #, kde-kuit-format msgctxt "@info" msgid "" "This type of backup is an archive. It contains both the " "latest version of your files and earlier backed up versions. Using this type " "of backup allows you to recover older versions of your files, or files which " "were deleted on your computer at a later time. The storage space needed is " "minimized by looking for common parts of your files between versions and " "only storing those parts once. Nevertheless, the backup archive will keep " "growing in size as time goes by.Also important to know is that the " "files in the archive can not be accessed directly with a general file " "manager, a special program is needed." msgstr "" "Questo tipo di backup consiste in un archivio. Contiene " "l'ultima versione dei tuoi file ed anche quelle archiviate in precedenza. " "Usando questo tipo di backup potrai ripristinare versioni più vecchie dei " "tuoi file, o file che erano stati cancellati dal computer in un secondo " "momento. Lo spazio di archiviazione richiesto è ridotto al minimo cercando " "le parti dei file in comune tra le differenti versioni e salvando tali parti " "solo una volta. Tuttavia, l'archivio di backup continuerà ad aumentare di " "dimensioni man mano che passa il tempo.È importante sapere che i file " "nell'archivio non sono accessibili tramite un normale file manager, ma è " "necessario un programma apposito." #: kcm/backupplanwidget.cpp:525 #, kde-kuit-format msgctxt "@option:radio" msgid "" "Versioned Backup (not available because bup is " "not installed)" msgstr "" "Backup Incrementale (non disponibile perché bup " "non è installato)" #: kcm/backupplanwidget.cpp:530 #, kde-kuit-format msgctxt "@option:radio" msgid "Versioned Backup (recommended)" msgstr "Backup incrementale (raccomandato)" #: kcm/backupplanwidget.cpp:535 #, kde-kuit-format msgctxt "@info" msgid "" "This type of backup is a folder which is synchronized with your selected " "source folders. Taking a backup simply means making the backup destination " "contain an exact copy of your source folders as they are now and nothing " "else. If a file has been deleted in a source folder it will get deleted from " "the backup folder.This type of backup can protect you against data loss " "due to a broken hard drive but it does not help you to recover from your own " "mistakes." msgstr "" "Questo tipo di backup consiste in una cartella che viene sincronizzata con " "le cartelle sorgente che hai selezionato. Eseguire un backup consiste " "semplicemente nel rendere la cartella di destinazione una copia esatta del " "contenuto delle cartelle sorgente allo stato attuale e null'altro. Se un " "file è stato cancellato dalla cartella sorgente, verrà cancellato anche " "dalla cartella di backup.Questo tipo di backup può proteggerti dalla " "perdita di dati dovuta ad un disco rotto, ma non ti aiuta a rimediare ai " "tuoi stessi errori." #: kcm/backupplanwidget.cpp:548 #, kde-kuit-format msgctxt "@option:radio" msgid "" "Synchronized Backup (not available because rsync " "is not installed)" msgstr "" "Backup sincronizzato (non disponibile perché rsync non è installato)" #: kcm/backupplanwidget.cpp:553 #, kde-kuit-format msgctxt "@option:radio" msgid "Synchronized Backup" msgstr "Backup sincronizzato" #: kcm/backupplanwidget.cpp:581 #, kde-kuit-format msgctxt "@title" msgid "Backup Type" msgstr "Tipo di backup" #: kcm/backupplanwidget.cpp:582 #, kde-kuit-format msgctxt "@label" msgid "Select what type of backup you want" msgstr "Seleziona il tipo di backup desiderato" #: kcm/backupplanwidget.cpp:590 #, kde-kuit-format msgctxt "@title" msgid "Sources" msgstr "Sorgenti" #: kcm/backupplanwidget.cpp:591 #, kde-kuit-format msgctxt "@label" msgid "Select which folders to include in backup" msgstr "Seleziona quali cartelle includere nel backup" #: kcm/backupplanwidget.cpp:605 #, kde-kuit-format msgctxt "@option:radio" msgid "Filesystem Path" msgstr "Percorso del filesystem" #: kcm/backupplanwidget.cpp:606 #, kde-kuit-format msgctxt "@option:radio" msgid "External Storage" msgstr "Archivio esterno" #: kcm/backupplanwidget.cpp:612 #, kde-kuit-format msgctxt "@info" msgid "" "You can use this option for backing up to a secondary internal harddrive, an " "external eSATA drive or networked storage. The requirement is just that you " "always mount it at the same path in the filesystem. The path specified here " "does not need to exist at all times, its existance will be monitored." msgstr "" "Puoi usare questa opzione per effettuare il backup in di un disco interno " "secondario, in un dispositivo esterno eSATA o in un archivio di rete. È " "solamente necessario montarlo sempre nello stesso percorso del filesystem. " "Il percorso indicato qui non deve necessariamente esistere sempre, la sua " "presenza verrà monitorata." #: kcm/backupplanwidget.cpp:619 #, kde-kuit-format msgctxt "@label:textbox" msgid "Destination Path for Backup:" msgstr "Percorso di destinazione del backup:" #: kcm/backupplanwidget.cpp:638 #, kde-kuit-format msgctxt "@info" msgid "" "Use this option if you want to backup your files on an external storage that " "can be plugged in to this computer, such as a USB hard drive or memory stick." msgstr "" "Usa questa opzione se vuoi salvare il tuo backup su una periferica esterna " "che può essere collegata a questo computer, come un disco USB o una " "chiavetta." #: kcm/backupplanwidget.cpp:648 kcm/backupplanwidget.cpp:652 #, kde-kuit-format msgctxt "@info:tooltip" msgid "The specified folder will be created if it does not exist." msgstr "La cartella specificata verrà creata se non esistente." #: kcm/backupplanwidget.cpp:650 #, kde-kuit-format msgctxt "@label:textbox" msgid "Folder on Destination Drive:" msgstr "Cartella nel disco di destinazione:" #: kcm/backupplanwidget.cpp:658 #, kde-kuit-format msgctxt "@info:tooltip" msgid "Open dialog to select a folder" msgstr "Apri la finestra di dialogo per selezionare una cartella" #: kcm/backupplanwidget.cpp:688 #, kde-kuit-format msgctxt "@title" msgid "Destination" msgstr "Destinazione" #: kcm/backupplanwidget.cpp:689 #, kde-kuit-format msgctxt "@label" msgid "Select the backup destination" msgstr "Seleziona la destinazione di backup" #: kcm/backupplanwidget.cpp:706 #, kde-kuit-format msgctxt "@option:radio" msgid "Manual Activation" msgstr "Attivazione manuale" #: kcm/backupplanwidget.cpp:707 #, kde-kuit-format msgctxt "@option:radio" msgid "Interval" msgstr "Intervallo" #: kcm/backupplanwidget.cpp:708 #, kde-kuit-format msgctxt "@option:radio" msgid "Active Usage Time" msgstr "Tempo di utilizzo attivo" #: kcm/backupplanwidget.cpp:710 #, kde-kuit-format msgctxt "@info" msgid "" "Backups are only taken when manually requested. This can be done by using " "the popup menu from the backup system tray icon." msgstr "" "I backup vengono eseguiti solo quando richiesto manualmente. Ciò può essere " "fatto usando il menu a comparsa dell'icona di backup nel vassoio di sistema." #: kcm/backupplanwidget.cpp:724 #, kde-kuit-format msgctxt "@info" msgid "" "New backup will be triggered when backup destination becomes available and " "more than the configured interval has passed since the last backup was taken." msgstr "" "Un nuovo backup verrà eseguito quando la destinazione di backup sarà " "disponibile e sarà trascorso un intervallo di tempo superiore a quello " "impostato dall'esecuzione dell'ultimo backup." #: kcm/backupplanwidget.cpp:741 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Minutes" msgstr "Minuti" #: kcm/backupplanwidget.cpp:742 kcm/backupplanwidget.cpp:769 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Hours" msgstr "Ore" #: kcm/backupplanwidget.cpp:743 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Days" msgstr "Giorni" #: kcm/backupplanwidget.cpp:744 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Weeks" msgstr "Settimane" #: kcm/backupplanwidget.cpp:754 #, kde-kuit-format msgctxt "@info" msgid "" "New backup will be triggered when backup destination becomes available and " "you have been using your computer actively for more than the configured time " "limit since the last backup was taken." msgstr "" "Un nuovo backup verrà eseguito quando la destinazione di backup sarà " "disponibile e avrai utilizzato attivamente il computer per un tempo " "superiore a quello impostato dall'esecuzione dell'ultimo backup." #: kcm/backupplanwidget.cpp:775 #, kde-kuit-format msgctxt "@option:check" msgid "Ask for confirmation before taking backup" msgstr "Chiedi conferma prima di eseguire il backup" #: kcm/backupplanwidget.cpp:794 #, kde-kuit-format msgctxt "@title" msgid "Schedule" msgstr "Programmazione" #: kcm/backupplanwidget.cpp:795 #, kde-kuit-format msgctxt "@label" msgid "Specify the backup schedule" msgstr "Specifica la programmazione del backup" #: kcm/backupplanwidget.cpp:808 #, kde-kuit-format msgctxt "@option:check" msgid "Show hidden folders in source selection" msgstr "" "Mostra le cartelle nascoste nella schermata di selezione delle sorgenti" #: kcm/backupplanwidget.cpp:814 #, kde-kuit-format msgctxt "@info" msgid "" "This makes it possible to explicitly include or exclude hidden folders in " "the backup source selection. Hidden folders have a name that starts with a " "dot. They are typically located in your home folder and are used to store " "settings and temporary files for your applications." msgstr "" "Questo permette di includere o escludere esplicitamente le cartelle nascoste " "nella selezione delle sorgenti del backup. Le cartelle nascoste hanno un " "nome che inizia con un punto. Normalmente sono posizionate nella tua " "cartella home e vengono utilizzate per salvare impostazioni e file " "temporanei delle tue applicazioni." #: kcm/backupplanwidget.cpp:832 #, kde-kuit-format msgctxt "@info" msgid "" "This will make your backups use around 10% more storage space and saving " "backups will take slightly longer time. In return it will be possible to " "recover from a partially corrupted backup." msgstr "" "This will make your backups use around 10% more storage space and saving " "backups will take slightly longer time. In return it will be possible to " "recover from a partially corrupted backup." #: kcm/backupplanwidget.cpp:838 #, kde-kuit-format msgctxt "@option:check" msgid "Generate recovery information" msgstr "Genera informazioni di ripristino" #: kcm/backupplanwidget.cpp:840 #, kde-kuit-format msgctxt "@option:check" msgid "" "Generate recovery information (not available because par2 is not installed)" msgstr "" "Genera informazioni di ripristino (non disponibile perché par2 non è installato)" #: kcm/backupplanwidget.cpp:856 #, kde-kuit-format msgctxt "@option:check" msgid "Verify integrity of backups" msgstr "Verifica l'integrità dei backup" #: kcm/backupplanwidget.cpp:860 #, kde-kuit-format msgctxt "@info" msgid "" "Checks the whole backup archive for corruption every time you save new data. " "Saving backups will take a little bit longer time but it allows you to catch " "corruption problems sooner than at the time you need to use a backup, at " "that time it could be too late." msgstr "" "Controlla l'intero archivio di backup per verificarne l'eventuale corruzione " "ogni volta che salvi nuovi dati. Il salvataggio dei backup richiederà un po' " "più tempo, ma permetterà di individuare eventuali problemi prima che sia " "necessario utilizzare i dati di backup, momento in cui potrebbe essere " "troppo tardi." #: kcm/backupplanwidget.cpp:882 #, kde-kuit-format msgctxt "@title" msgid "Advanced" msgstr "Avanzato" #: kcm/backupplanwidget.cpp:883 #, kde-kuit-format msgctxt "@label" msgid "Extra options for advanced users" msgstr "Opzioni aggiuntive per utenti esperti" #: kcm/driveselection.cpp:275 #, kde-kuit-format msgctxt "@label Only shown if no drives are detected" msgid "" "Plug in the external storage you wish to use, then select it in this list." msgstr "" "Collega la periferica esterna che vuoi utilizzare , poi selezionala in " "questa lista." #: kcm/driveselectiondelegate.cpp:75 #, kde-kuit-format msgctxt "@item:inlistbox this text is added if selected drive is disconnected" msgid " (disconnected)" msgstr " (disconnesso)" #: kcm/driveselectiondelegate.cpp:78 #, kde-kuit-format msgctxt "@label %1 is amount of free storage space of hard drive" msgid "%1 free" msgstr "%1 libero" #: kcm/driveselectiondelegate.cpp:92 #, kde-kuit-format msgctxt "" "@item:inlistbox used for unnamed filesystems, more than one filesystem on " "device. %1 is partition number, %2 is device description, %3 is either empty " "or the \" (disconnected)\" text" msgid "Partition %1 on %2%3" msgstr "Partizione %1 su %2%3" #: kcm/driveselectiondelegate.cpp:95 #, kde-kuit-format msgctxt "" "@item:inlistbox used when there is only one unnamed filesystem on device. %1 " "is device description, %2 is either empty or the \" (disconnected)\" text" msgid "%1%2" msgstr "%1%2" #: kcm/driveselectiondelegate.cpp:99 #, kde-kuit-format msgctxt "" "@item:inlistbox %1 is filesystem label, %2 is the device description, %3 is " "either empty or the \" (disconnected)\" text" msgid "%1 on %2%3" msgstr "%1 su %2%3" #: kcm/driveselectiondelegate.cpp:106 #, kde-kuit-format msgctxt "@item:inlistbox %1 is drive(partition) label, %2 is storage capacity" msgid "%1: %2 total capacity" msgstr "%1: capacità totale %2" #: kcm/driveselectiondelegate.cpp:153 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "" "Warning: Symbolic links and file permissions can not be saved to this file " "system. File permissions only matters if there is more than one user of this " "computer or if you are backing up executable program files." msgstr "" "Attenzione: i link simbolici ed i permessi dei file non possono essere " "salvati in questo filesystem. I permessi dei file sono importanti solo se " "più di un utente usa il computer o se si sta facendo il backup di file " "eseguibili di programmi. " #: kcm/driveselectiondelegate.cpp:157 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "" "Warning: File permissions can not be saved to this file system. File " "permissions only matters if there is more than one user of this computer or " "if you are backing up executable program files." msgstr "" "Attenzione: I permessi dei file non possono essere salvati in questo " "filesystem. I permessi dei file sono importanti solo se più di un utente usa " "il computer o se si sta facendo il backup di file eseguibili di programmi. " #: kcm/folderselectionmodel.cpp:107 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "" "%1will be included in the backup, except for " "unchecked subfolders" msgstr "" "%1sarà incluso nel backup, tranne le cartelle " "deselezionate" #: kcm/folderselectionmodel.cpp:111 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "%1will be included in the backup" msgstr "%1sarà incluso nel backup" #: kcm/folderselectionmodel.cpp:115 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "" "%1 will not be included in " "the backup but contains folders that will" msgstr "" "%1 non sarà incluso nel " "backup, ma contiene cartelle che lo saranno" #: kcm/folderselectionmodel.cpp:119 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "" "%1 will not be included in " "the backup" msgstr "" "%1non sarà incluso nel backup" #: kcm/kupkcm.cpp:49 #, kde-format msgid "Kup Configuration Module" msgstr "Modulo di configurazione di Kup" #: kcm/kupkcm.cpp:51 #, kde-format msgid "Configuration of backup plans for the Kup backup system" msgstr "Configurazione dei piani di backup per il sistema di backup Kup" #: kcm/kupkcm.cpp:54 #, kde-format msgid "Maintainer" msgstr "Manutentore" #: kcm/kupkcm.cpp:87 #, kde-format msgid "" "

Backup programs are missing

Before you can activate any backup " "plan you need to install either of

  • bup, for versioned backups
  • rsync, for synchronized backups
" msgstr "" "

Mancano i programmi di backup

Prima di poter attivare qualunque " "piano di backup devi installare

  • bup, per i backup incrementali, " "oppure
  • rsync, per i backup sincronizzati
" #: kcm/kupkcm.cpp:168 #, kde-kuit-format msgctxt "@title:window" msgid "Warning" msgstr "Attenzione" #: kcm/kupkcm.cpp:170 #, kde-kuit-format msgctxt "@info %1 is the name of the backup plan" msgid "" "%1 does not have a destination!No backups will be saved by this plan." msgstr "" "%1 non ha una destinazione!Nessun backup verrà salvato da questo piano." #: kcm/kupkcm.cpp:227 #, kde-kuit-format msgctxt "@action:button" msgid "Add New Plan" msgstr "Aggiungi nuovo piano" #: kcm/kupkcm.cpp:238 #, kde-kuit-format msgctxt "@option:check" msgid "Backups Enabled" msgstr "Backup abilitati" #: kcm/planstatuswidget.cpp:48 #, kde-kuit-format msgctxt "@action:button" msgid "Configure" msgstr "Configura" #: kcm/planstatuswidget.cpp:51 #, kde-kuit-format msgctxt "@action:button" msgid "Remove" msgstr "Rimuovi" #: kcm/planstatuswidget.cpp:54 #, kde-kuit-format msgctxt "@action:button" msgid "Duplicate" msgstr "Duplica" #: kioslave/bupslave.cpp:92 kioslave/bupslave.cpp:149 kioslave/bupslave.cpp:186 #: kioslave/bupslave.cpp:249 kioslave/bupslave.cpp:271 #, kde-format msgid "" "No bup repository found.\n" "%1" msgstr "" "Nessun repository bup trovato.\n" "%1" #: plasmoid/contents/ui/FullRepresentation.qml:88 #, kde-format msgid "Save new backup" msgstr "Salva nuovo backup" #: plasmoid/contents/ui/FullRepresentation.qml:94 #, kde-format msgid "Show files" msgstr "Mostra file" #: plasmoid/contents/ui/FullRepresentation.qml:99 #, kde-format msgid "Show log file" msgstr "Mostra file di log" #. i18n: file: filedigger/restoredialog.ui:14 #. i18n: ectx: property (windowTitle), widget (QDialog, RestoreDialog) #: po/rc.cpp:3 rc.cpp:3 #, kde-format msgctxt "@title:window" msgid "Restore Guide" msgstr "Ripristino guidato" #. i18n: file: filedigger/restoredialog.ui:55 #. i18n: ectx: property (text), widget (QPushButton, mRestoreOriginalButton) #: po/rc.cpp:6 rc.cpp:6 #, kde-format msgctxt "@action:button" msgid "Restore to original location" msgstr "Ripristina nella posizione originale" #. i18n: file: filedigger/restoredialog.ui:78 #. i18n: ectx: property (text), widget (QPushButton, mRestoreCustomButton) #: po/rc.cpp:9 rc.cpp:9 #, kde-format msgctxt "@action:button" msgid "Choose where to restore" msgstr "Scegli dove ripristinare" #. i18n: file: filedigger/restoredialog.ui:132 #. i18n: ectx: property (text), widget (QPushButton, mDestBackButton) #: po/rc.cpp:12 rc.cpp:12 #, kde-format msgctxt "@action:button" msgid "Back" msgstr "Indietro" #. i18n: file: filedigger/restoredialog.ui:144 #. i18n: ectx: property (text), widget (QPushButton, mDestNextButton) #: po/rc.cpp:15 rc.cpp:15 #, kde-format msgctxt "@action:button" msgid "Next" msgstr "Avanti" #. i18n: file: filedigger/restoredialog.ui:175 #. i18n: ectx: property (text), widget (QRadioButton, mNewNameRadioButton) #: po/rc.cpp:18 rc.cpp:18 #, kde-format msgctxt "@option:radio " msgid "Restore the folder under a new name" msgstr "Ripristina la cartella con un nuovo nome" #. i18n: file: filedigger/restoredialog.ui:208 #. i18n: ectx: property (text), widget (QRadioButton, mOverwriteRadioButton) #: po/rc.cpp:21 rc.cpp:21 #, kde-format msgctxt "@option:radio" msgid "Merge folders" msgstr "Unisci cartelle" #. i18n: file: filedigger/restoredialog.ui:238 #. i18n: ectx: property (text), widget (QLabel, mConfirmOverwriteLabel) #: po/rc.cpp:24 rc.cpp:24 #, kde-format msgctxt "@info Question to user, in dialog" msgid "" "The following files would be overwritten, please confirm that you wish to " "continue." msgstr "I seguenti file verranno sovrascritti, conferma di voler continuare." #. i18n: file: filedigger/restoredialog.ui:274 #. i18n: ectx: property (text), widget (QPushButton, mOverwriteBackButton) #: po/rc.cpp:27 rc.cpp:27 #, kde-format msgctxt "@action:button go to previous page in dialog" msgid "Back" msgstr "Indietro" #. i18n: file: filedigger/restoredialog.ui:286 #. i18n: ectx: property (text), widget (QPushButton, mConfirmButton) #: po/rc.cpp:30 rc.cpp:30 #, kde-format msgctxt "@action:button User answers \"yes I confirm: overwrite files\"" msgid "Confirm" msgstr "Conferma" #. i18n: file: filedigger/restoredialog.ui:341 #. i18n: ectx: property (text), widget (QLabel, mErrorLabel) #: po/rc.cpp:33 rc.cpp:33 #, fuzzy, kde-format msgctxt "@label above the detailed error message" msgid "An error occured while restoring:" msgstr "Si è verificato un errore durante il ripristino:" #. i18n: file: filedigger/restoredialog.ui:372 #. i18n: ectx: property (text), widget (QLabel, label) #: po/rc.cpp:36 rc.cpp:36 #, fuzzy, kde-format msgctxt "@label" msgid "Restoration completed successfully!" msgstr "Ripristino completato!" #. i18n: file: filedigger/restoredialog.ui:413 #. i18n: ectx: property (text), widget (QPushButton, mOpenDestinationButton) #: po/rc.cpp:39 rc.cpp:39 #, kde-format msgid "Open Destination" msgstr "Apri destinazione" #. i18n: file: filedigger/restoredialog.ui:472 #. i18n: ectx: property (text), widget (QPushButton, mCloseButton) #: po/rc.cpp:42 rc.cpp:42 #, kde-format msgctxt "@action:button" msgid "Close" msgstr "Chiudi" #: po/rc.cpp:43 po/rc.cpp:58 settings/backupplan.cpp:69 rc.cpp:43 rc.cpp:58 #, kde-format msgid "Backups" msgstr "Backup" #: po/rc.cpp:44 rc.cpp:44 msgid "Configure backup plans" msgstr "Configura i piani di backup" #: po/rc.cpp:45 rc.cpp:45 msgid "backup,recovery,safety" msgstr "backup, ripristino, sicurezza" #: po/rc.cpp:46 rc.cpp:46 msgid "Kup" msgstr "Kup" #: po/rc.cpp:48 rc.cpp:48 msgid "Start taking backup" msgstr "Esegui un nuovo backup" #: po/rc.cpp:49 rc.cpp:49 msgid "A question if user wants to start taking a backup" msgstr "Domanda se l'utente vuole eseguire un backup" #: po/rc.cpp:50 rc.cpp:50 msgid "Backup succeeded" msgstr "Backup completato con successo" #: po/rc.cpp:51 rc.cpp:51 msgid "Saving of backup successfully completed" msgstr "Il salvataggio del backup è stato completato con successo" #: po/rc.cpp:52 rc.cpp:52 msgid "Backup failed" msgstr "Backup fallito" #: po/rc.cpp:53 rc.cpp:53 msgid "Saving of backup failed, offer user to see log file" msgstr "" "Salvataggio del backup fallito, proponi all'utente di visualizzare il file " "di log" #: po/rc.cpp:54 rc.cpp:54 msgid "Integrity check completed" msgstr "Controllo integrità completato" #: po/rc.cpp:55 rc.cpp:55 msgid "Finished checking integrity of backup archive" msgstr "Controllo dell'integrità del backup completato" #: po/rc.cpp:56 rc.cpp:56 msgid "Repair completed" msgstr "Ripristino completato" #: po/rc.cpp:57 rc.cpp:57 msgid "Finished repairing backup archive" msgstr "Riparazione dei backup completata" #: po/rc.cpp:59 rc.cpp:59 msgid "Status of backup plans" msgstr "Stato dei piani di backup" #: po/rc.cpp:60 rc.cpp:60 msgid "Backup Status" msgstr "Stato Backup" #: po/rc.cpp:61 rc.cpp:61 msgid "Displays status of backup plans" msgstr "Mostra lo stato dei piani di backup" #: settings/backupplan.cpp:38 #, kde-kuit-format msgctxt "" "@label Default name for a new backup plan, %1 is the number of the plan in " "order" msgid "Backup plan %1" msgstr "Piano di backup %1" #: settings/backupplan.cpp:101 #, kde-format msgctxt "default description of newly duplicated backup plan" msgid "%1 (copy)" msgstr "%1 (copia)" #: settings/backupplan.cpp:213 #, kde-format msgctxt "%1 is fancy formatted date" msgid "Last saved: %1" msgstr "Ultimo salvataggio: %1" #: settings/backupplan.cpp:218 #, kde-format msgctxt "%1 is storage size of archive" msgid "Size: %1" msgstr "Dimensione: %1" #: settings/backupplan.cpp:223 #, kde-format msgctxt "%1 is free storage space" msgid "Free space: %1" msgstr "Spazio libero: %1" #: settings/backupplan.cpp:227 #, kde-kuit-format msgctxt "@label" msgid "This backup plan has never been run." msgstr "Questo piano di backup non è mai stato eseguito." kup-backup-0.7.1+dfsg/po/kup.pot000066400000000000000000001007411322613417100164440ustar00rootroot00000000000000# 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: http://kde-apps.org/content/show.php/Kup+Backup+System?" "content=147465\n" "POT-Creation-Date: 2018-01-05 16:00+0800\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" #: daemon/bupjob.cpp:47 daemon/buprepairjob.cpp:38 #: daemon/bupverificationjob.cpp:37 #, kde-kuit-format msgctxt "@info notification" msgid "" "The bup program is needed but could not be found, " "maybe it is not installed?" msgstr "" #: daemon/bupjob.cpp:52 daemon/buprepairjob.cpp:43 #, kde-kuit-format msgctxt "@info notification" msgid "" "The par2 program is needed but could not be " "found, maybe it is not installed?" msgstr "" #: daemon/bupjob.cpp:71 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup destination could not be initialised. See log file for more details." msgstr "" #: daemon/bupjob.cpp:93 #, kde-format msgid "Checking backup integrity" msgstr "" #: daemon/bupjob.cpp:104 daemon/bupverificationjob.cpp:67 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups could be corrupted! See log file " "for more details. Do you want to try repairing the backup files?" msgstr "" #: daemon/bupjob.cpp:108 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups could be corrupted! See log file " "for more details." msgstr "" #: daemon/bupjob.cpp:131 daemon/rsyncjob.cpp:57 #, kde-format msgid "Checking what to copy" msgstr "" #: daemon/bupjob.cpp:138 #, kde-kuit-format msgctxt "@info notification" msgid "Failed to analyze files. See log file for more details." msgstr "" #: daemon/bupjob.cpp:159 daemon/bupjob.cpp:253 daemon/rsyncjob.cpp:175 #, kde-format msgid "Saving backup" msgstr "" #: daemon/bupjob.cpp:167 daemon/rsyncjob.cpp:120 #, kde-kuit-format msgctxt "@info notification" msgid "Failed to save backup. See log file for more details." msgstr "" #: daemon/bupjob.cpp:189 #, kde-format msgid "Generating recovery information" msgstr "" #: daemon/bupjob.cpp:197 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed to generate recovery info for the backup. See log file for more " "details." msgstr "" #: daemon/bupjob.cpp:254 daemon/rsyncjob.cpp:176 #, kde-format msgctxt "Label for file currently being copied" msgid "File" msgstr "" #: daemon/buprepairjob.cpp:72 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup repair failed. Your backups could be corrupted! See log file for more " "details." msgstr "" #: daemon/buprepairjob.cpp:76 #, kde-kuit-format msgctxt "@info notification" msgid "Success! Backup repair worked. See log file for more details." msgstr "" #: daemon/buprepairjob.cpp:80 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup repair was not necessary. Your backups are not corrupted.See log file " "for more details." msgstr "" #: daemon/buprepairjob.cpp:85 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup repair failed. Your backups could still be corrupted! See log file " "for more details." msgstr "" #: daemon/bupverificationjob.cpp:70 daemon/bupverificationjob.cpp:87 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups are corrupted! See log file for " "more details." msgstr "" #: daemon/bupverificationjob.cpp:76 #, kde-kuit-format msgctxt "@info notification" msgid "Backup integrity test was successful, Your backups are fine." msgstr "" #: daemon/bupverificationjob.cpp:83 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups are corrupted! See log file for " "more details. Do you want to try repairing the backup files?" msgstr "" #: daemon/edexecutor.cpp:115 daemon/edexecutor.cpp:124 #: daemon/edexecutor.cpp:160 daemon/fsexecutor.cpp:114 #: daemon/fsexecutor.cpp:146 #, kde-kuit-format msgctxt "@title:window" msgid "Problem" msgstr "" #: daemon/edexecutor.cpp:116 daemon/fsexecutor.cpp:115 #, kde-kuit-format msgctxt "notification" msgid "Invalid type of backup in configuration." msgstr "" #: daemon/edexecutor.cpp:125 #, kde-kuit-format msgctxt "notification" msgid "You don't have write permission to backup destination." msgstr "" #: daemon/kupdaemon.cpp:171 #, kde-format msgid "Continue" msgstr "" #: daemon/kupdaemon.cpp:173 #, kde-format msgid "Stop" msgstr "" #: daemon/kupdaemon.cpp:175 #, kde-format msgctxt "%1 is a text explaining the current activity" msgid "Currently busy: %1" msgstr "" #: daemon/kupdaemon.cpp:176 #, kde-format msgid "Do you really want to stop?" msgstr "" #: daemon/kupdaemon.cpp:179 #, kde-format msgid "User Backups" msgstr "" #: daemon/kupdaemon.cpp:249 #, kde-format msgctxt "status in tooltip" msgid "Backup destination not available" msgstr "" #: daemon/kupdaemon.cpp:253 daemon/kupdaemon.cpp:310 #, kde-format msgid "No backup plans configured" msgstr "" #: daemon/kupdaemon.cpp:259 #, kde-format msgctxt "status in tooltip" msgid "Backup destination available" msgstr "" #: daemon/kupdaemon.cpp:269 daemon/planexecutor.cpp:84 #, kde-format msgctxt "status in tooltip" msgid "Backup status OK" msgstr "" #: daemon/kupdaemon.cpp:276 daemon/planexecutor.cpp:86 #, kde-format msgctxt "status in tooltip" msgid "New backup suggested" msgstr "" #: daemon/kupdaemon.cpp:283 daemon/planexecutor.cpp:88 #, kde-format msgctxt "status in tooltip" msgid "New backup neeeded" msgstr "" #: daemon/main.cpp:41 #, kde-kuit-format msgctxt "@info:shell Error message at startup" msgid "" "Kup is not enabled, enable it from the system settings module. You can do " "that by running kcmshell5 kup" msgstr "" #: daemon/main.cpp:47 #, kde-kuit-format msgctxt "@title" msgid "Kup Daemon" msgstr "" #: daemon/main.cpp:48 #, kde-format msgid "" "Kup is a flexible backup solution using the backup storage system 'bup'. " "This allows it to quickly perform incremental backups, only saving the parts " "of files that has actually changed since last backup was taken." msgstr "" #: daemon/main.cpp:51 kcm/kupkcm.cpp:52 #, kde-format msgid "Copyright (C) 2011-2015 Simon Persson" msgstr "" #: daemon/main.cpp:53 filedigger/main.cpp:51 kcm/kupkcm.cpp:54 #, kde-format msgid "Simon Persson" msgstr "" #: daemon/main.cpp:54 filedigger/main.cpp:52 kcm/kupkcm.cpp:55 #, kde-kuit-format msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "" #: daemon/main.cpp:54 filedigger/main.cpp:52 kcm/kupkcm.cpp:56 #, kde-kuit-format msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "" #: daemon/planexecutor.cpp:76 #, kde-format msgctxt "status in tooltip" msgid "Saving backup" msgstr "" #: daemon/planexecutor.cpp:78 #, kde-format msgctxt "status in tooltip" msgid "Checking backup integrity" msgstr "" #: daemon/planexecutor.cpp:80 #, kde-format msgctxt "status in tooltip" msgid "Repairing backups" msgstr "" #: daemon/planexecutor.cpp:118 daemon/planexecutor.cpp:133 #, kde-kuit-format msgctxt "@info" msgid "Do you want to save a first backup now?" msgstr "" #: daemon/planexecutor.cpp:121 #, kde-kuit-format msgctxt "@info" msgid "" "It has been %1 since last backup was saved.\n" "Save a new backup now?" msgstr "" #: daemon/planexecutor.cpp:137 #, kde-kuit-format msgctxt "@info" msgid "" "You have been active for %1 since last backup was saved.\n" "Save a new backup now?" msgstr "" #: daemon/planexecutor.cpp:170 daemon/planexecutor.cpp:200 #: daemon/planexecutor.cpp:278 #, kde-kuit-format msgctxt "@action:button" msgid "Yes" msgstr "" #: daemon/planexecutor.cpp:170 daemon/planexecutor.cpp:201 #: daemon/planexecutor.cpp:279 #, kde-kuit-format msgctxt "@action:button" msgid "No" msgstr "" #: daemon/planexecutor.cpp:192 #, kde-kuit-format msgctxt "@title:window" msgid "Saving of Backup Failed" msgstr "" #: daemon/planexecutor.cpp:197 daemon/planexecutor.cpp:275 #: daemon/planexecutor.cpp:309 #, kde-kuit-format msgctxt "@action:button" msgid "Show log file" msgstr "" #: daemon/planexecutor.cpp:221 #, kde-kuit-format msgctxt "@title:window" msgid "Backup Saved" msgstr "" #: daemon/planexecutor.cpp:222 #, kde-kuit-format msgctxt "@info notification" msgid "Saving backup completed successfully." msgstr "" #: daemon/planexecutor.cpp:271 #, kde-kuit-format msgctxt "@title:window" msgid "Integrity Check Completed" msgstr "" #: daemon/planexecutor.cpp:306 #, kde-kuit-format msgctxt "@title:window" msgid "Repair Completed" msgstr "" #: daemon/planexecutor.cpp:337 po/rc.cpp:47 rc.cpp:47 #, kde-format msgid "Kup Backup System" msgstr "" #: daemon/rsyncjob.cpp:48 #, kde-kuit-format msgctxt "@info notification" msgid "" "The rsync program is needed but could not be " "found, maybe it is not installed?" msgstr "" #: filedigger/main.cpp:47 #, kde-kuit-format msgctxt "@title" msgid "File Digger" msgstr "" #: filedigger/main.cpp:48 #, kde-format msgid "Browser for bup archives." msgstr "" #: filedigger/main.cpp:49 #, kde-format msgid "Copyright (C) 2013-2015 Simon Persson" msgstr "" #: filedigger/main.cpp:59 #, kde-format msgid "Name of the branch to be opened." msgstr "" #: filedigger/main.cpp:61 #, kde-format msgid "Path to the bup repository to be opened." msgstr "" #: filedigger/main.cpp:70 #, kde-format msgctxt "@info:shell Error message at startup" msgid "" "You must supply the path to a bup or git repository that you wish to open " "for viewing." msgstr "" #: filedigger/main.cpp:85 #, kde-kuit-format msgctxt "@info messagebox, %1 is a folder path" msgid "" "The backup archive %1 could not be opened. Check if the " "backups really are located there." msgstr "" #: filedigger/main.cpp:92 #, kde-kuit-format msgctxt "@info messagebox" msgid "You do not have permission needed to read this backup archive." msgstr "" #: filedigger/mergedvfs.cpp:108 #, kde-kuit-format msgctxt "@info messagebox" msgid "" "Could not read this backup archive. Perhaps some files have become " "corrupted. Do you want to run an integrity check to test this?" msgstr "" #: filedigger/mergedvfs.cpp:156 #, kde-kuit-format msgctxt "added after folder name in some cases" msgid " (folder)" msgstr "" #: filedigger/mergedvfs.cpp:158 #, kde-kuit-format msgctxt "added after file name in some cases" msgid " (symlink)" msgstr "" #: filedigger/mergedvfs.cpp:160 #, kde-kuit-format msgctxt "added after file name in some cases" msgid " (file)" msgstr "" #: filedigger/restoredialog.cpp:115 kcm/backupplanwidget.cpp:451 #, kde-kuit-format msgctxt "@action:button" msgid "New Folder..." msgstr "" #: filedigger/restoredialog.cpp:141 filedigger/restoredialog.cpp:160 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "No destination was selected, please select one." msgstr "" #: filedigger/restoredialog.cpp:251 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "There was a problem while getting a list of all files to restore: %1" msgstr "" #: filedigger/restoredialog.cpp:264 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "The destination does not have enough space available. Please choose a " "different destination or free some space." msgstr "" #: filedigger/restoredialog.cpp:274 #, kde-kuit-format msgctxt "" "added to the suggested filename when restoring, %1 is the time when backup " "was taken" msgid " - saved at %1" msgstr "" #: filedigger/restoredialog.cpp:275 #, kde-kuit-format msgctxt "@info" msgid "Folder already exists, please choose a solution" msgstr "" #: filedigger/restoredialog.cpp:281 #, kde-kuit-format msgctxt "@info" msgid "File already exists" msgstr "" #: filedigger/restoredialog.cpp:294 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "The new name entered already exists, please enter a different one." msgstr "" #: filedigger/restoredialog.cpp:371 kcm/dirselector.cpp:50 #, kde-kuit-format msgctxt "default folder name when creating a new folder" msgid "New Folder" msgstr "" #: filedigger/restoredialog.cpp:376 kcm/dirselector.cpp:55 #, kde-kuit-format msgctxt "@title:window" msgid "New Folder" msgstr "" #: filedigger/restoredialog.cpp:377 kcm/dirselector.cpp:56 #, kde-kuit-format msgctxt "@label:textbox" msgid "" "Create new folder in:\n" "%1" msgstr "" #: filedigger/restoredialog.cpp:390 kcm/dirselector.cpp:68 #, kde-format msgid "A folder named %1 already exists." msgstr "" #: filedigger/restoredialog.cpp:396 kcm/dirselector.cpp:74 #, kde-format msgid "You do not have permission to create %1." msgstr "" #: filedigger/restorejob.cpp:99 #, kde-kuit-format msgctxt "progress report, current operation" msgid "Restoring" msgstr "" #: filedigger/restorejob.cpp:100 #, kde-kuit-format msgctxt "progress report, label" msgid "File:" msgstr "" #: filedigger/versionlistdelegate.cpp:135 #, kde-kuit-format msgctxt "@action:button" msgid "Open" msgstr "" #: filedigger/versionlistdelegate.cpp:137 #, kde-kuit-format msgctxt "@action:button" msgid "Restore" msgstr "" #: kcm/backupplanwidget.cpp:282 #, kde-kuit-format msgctxt "@action:button" msgid "Exclude Folder" msgstr "" #: kcm/backupplanwidget.cpp:285 #, kde-kuit-format msgctxt "@action:button" msgid "Include Folder" msgstr "" #: kcm/backupplanwidget.cpp:382 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "You don't have permission to read this folder: %1It cannot be included in the source selection. If it does not contain " "anything important to you, one possible solution is to exclude the folder " "from the backup plan." msgstr "" #: kcm/backupplanwidget.cpp:393 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "You don't have permission to read this file: %1It " "cannot be included in the source selection. If the file is not important to " "you, one possible solution is to exclude the whole folder where the file is " "stored from the backup plan." msgstr "" #: kcm/backupplanwidget.cpp:409 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "The symbolic link %1 is currently included but it " "points to a folder which is not: %2.That is " "probably not what you want. One solution is to simply include the target " "folder in the backup plan." msgstr "" #: kcm/backupplanwidget.cpp:417 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "The symbolic link %1 is currently included but it " "points to a file which is not: %2.That is probably " "not what you want. One solution is to simply include the folder where the " "file is stored in the backup plan." msgstr "" #: kcm/backupplanwidget.cpp:440 #, kde-kuit-format msgctxt "@title:window" msgid "Select Folder" msgstr "" #: kcm/backupplanwidget.cpp:478 #, kde-kuit-format msgctxt "@label" msgid "Description:" msgstr "" #: kcm/backupplanwidget.cpp:481 #, kde-kuit-format msgctxt "@action:button" msgid "Back to overview" msgstr "" #: kcm/backupplanwidget.cpp:510 #, kde-kuit-format msgctxt "@info" msgid "" "This type of backup is an archive. It contains both the " "latest version of your files and earlier backed up versions. Using this type " "of backup allows you to recover older versions of your files, or files which " "were deleted on your computer at a later time. The storage space needed is " "minimized by looking for common parts of your files between versions and " "only storing those parts once. Nevertheless, the backup archive will keep " "growing in size as time goes by.Also important to know is that the " "files in the archive can not be accessed directly with a general file " "manager, a special program is needed." msgstr "" #: kcm/backupplanwidget.cpp:525 #, kde-kuit-format msgctxt "@option:radio" msgid "" "Versioned Backup (not available because bup is " "not installed)" msgstr "" #: kcm/backupplanwidget.cpp:530 #, kde-kuit-format msgctxt "@option:radio" msgid "Versioned Backup (recommended)" msgstr "" #: kcm/backupplanwidget.cpp:535 #, kde-kuit-format msgctxt "@info" msgid "" "This type of backup is a folder which is synchronized with your selected " "source folders. Taking a backup simply means making the backup destination " "contain an exact copy of your source folders as they are now and nothing " "else. If a file has been deleted in a source folder it will get deleted from " "the backup folder.This type of backup can protect you against data loss " "due to a broken hard drive but it does not help you to recover from your own " "mistakes." msgstr "" #: kcm/backupplanwidget.cpp:548 #, kde-kuit-format msgctxt "@option:radio" msgid "" "Synchronized Backup (not available because rsync " "is not installed)" msgstr "" #: kcm/backupplanwidget.cpp:553 #, kde-kuit-format msgctxt "@option:radio" msgid "Synchronized Backup" msgstr "" #: kcm/backupplanwidget.cpp:581 #, kde-kuit-format msgctxt "@title" msgid "Backup Type" msgstr "" #: kcm/backupplanwidget.cpp:582 #, kde-kuit-format msgctxt "@label" msgid "Select what type of backup you want" msgstr "" #: kcm/backupplanwidget.cpp:590 #, kde-kuit-format msgctxt "@title" msgid "Sources" msgstr "" #: kcm/backupplanwidget.cpp:591 #, kde-kuit-format msgctxt "@label" msgid "Select which folders to include in backup" msgstr "" #: kcm/backupplanwidget.cpp:605 #, kde-kuit-format msgctxt "@option:radio" msgid "Filesystem Path" msgstr "" #: kcm/backupplanwidget.cpp:606 #, kde-kuit-format msgctxt "@option:radio" msgid "External Storage" msgstr "" #: kcm/backupplanwidget.cpp:612 #, kde-kuit-format msgctxt "@info" msgid "" "You can use this option for backing up to a secondary internal harddrive, an " "external eSATA drive or networked storage. The requirement is just that you " "always mount it at the same path in the filesystem. The path specified here " "does not need to exist at all times, its existance will be monitored." msgstr "" #: kcm/backupplanwidget.cpp:619 #, kde-kuit-format msgctxt "@label:textbox" msgid "Destination Path for Backup:" msgstr "" #: kcm/backupplanwidget.cpp:638 #, kde-kuit-format msgctxt "@info" msgid "" "Use this option if you want to backup your files on an external storage that " "can be plugged in to this computer, such as a USB hard drive or memory stick." msgstr "" #: kcm/backupplanwidget.cpp:648 kcm/backupplanwidget.cpp:652 #, kde-kuit-format msgctxt "@info:tooltip" msgid "The specified folder will be created if it does not exist." msgstr "" #: kcm/backupplanwidget.cpp:650 #, kde-kuit-format msgctxt "@label:textbox" msgid "Folder on Destination Drive:" msgstr "" #: kcm/backupplanwidget.cpp:658 #, kde-kuit-format msgctxt "@info:tooltip" msgid "Open dialog to select a folder" msgstr "" #: kcm/backupplanwidget.cpp:688 #, kde-kuit-format msgctxt "@title" msgid "Destination" msgstr "" #: kcm/backupplanwidget.cpp:689 #, kde-kuit-format msgctxt "@label" msgid "Select the backup destination" msgstr "" #: kcm/backupplanwidget.cpp:706 #, kde-kuit-format msgctxt "@option:radio" msgid "Manual Activation" msgstr "" #: kcm/backupplanwidget.cpp:707 #, kde-kuit-format msgctxt "@option:radio" msgid "Interval" msgstr "" #: kcm/backupplanwidget.cpp:708 #, kde-kuit-format msgctxt "@option:radio" msgid "Active Usage Time" msgstr "" #: kcm/backupplanwidget.cpp:710 #, kde-kuit-format msgctxt "@info" msgid "" "Backups are only taken when manually requested. This can be done by using " "the popup menu from the backup system tray icon." msgstr "" #: kcm/backupplanwidget.cpp:724 #, kde-kuit-format msgctxt "@info" msgid "" "New backup will be triggered when backup destination becomes available and " "more than the configured interval has passed since the last backup was taken." msgstr "" #: kcm/backupplanwidget.cpp:741 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Minutes" msgstr "" #: kcm/backupplanwidget.cpp:742 kcm/backupplanwidget.cpp:769 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Hours" msgstr "" #: kcm/backupplanwidget.cpp:743 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Days" msgstr "" #: kcm/backupplanwidget.cpp:744 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Weeks" msgstr "" #: kcm/backupplanwidget.cpp:754 #, kde-kuit-format msgctxt "@info" msgid "" "New backup will be triggered when backup destination becomes available and " "you have been using your computer actively for more than the configured time " "limit since the last backup was taken." msgstr "" #: kcm/backupplanwidget.cpp:775 #, kde-kuit-format msgctxt "@option:check" msgid "Ask for confirmation before taking backup" msgstr "" #: kcm/backupplanwidget.cpp:794 #, kde-kuit-format msgctxt "@title" msgid "Schedule" msgstr "" #: kcm/backupplanwidget.cpp:795 #, kde-kuit-format msgctxt "@label" msgid "Specify the backup schedule" msgstr "" #: kcm/backupplanwidget.cpp:808 #, kde-kuit-format msgctxt "@option:check" msgid "Show hidden folders in source selection" msgstr "" #: kcm/backupplanwidget.cpp:814 #, kde-kuit-format msgctxt "@info" msgid "" "This makes it possible to explicitly include or exclude hidden folders in " "the backup source selection. Hidden folders have a name that starts with a " "dot. They are typically located in your home folder and are used to store " "settings and temporary files for your applications." msgstr "" #: kcm/backupplanwidget.cpp:832 #, kde-kuit-format msgctxt "@info" msgid "" "This will make your backups use around 10% more storage space and saving " "backups will take slightly longer time. In return it will be possible to " "recover from a partially corrupted backup." msgstr "" #: kcm/backupplanwidget.cpp:838 #, kde-kuit-format msgctxt "@option:check" msgid "Generate recovery information" msgstr "" #: kcm/backupplanwidget.cpp:840 #, kde-kuit-format msgctxt "@option:check" msgid "" "Generate recovery information (not available because par2 is not installed)" msgstr "" #: kcm/backupplanwidget.cpp:856 #, kde-kuit-format msgctxt "@option:check" msgid "Verify integrity of backups" msgstr "" #: kcm/backupplanwidget.cpp:860 #, kde-kuit-format msgctxt "@info" msgid "" "Checks the whole backup archive for corruption every time you save new data. " "Saving backups will take a little bit longer time but it allows you to catch " "corruption problems sooner than at the time you need to use a backup, at " "that time it could be too late." msgstr "" #: kcm/backupplanwidget.cpp:882 #, kde-kuit-format msgctxt "@title" msgid "Advanced" msgstr "" #: kcm/backupplanwidget.cpp:883 #, kde-kuit-format msgctxt "@label" msgid "Extra options for advanced users" msgstr "" #: kcm/driveselection.cpp:275 #, kde-kuit-format msgctxt "@label Only shown if no drives are detected" msgid "" "Plug in the external storage you wish to use, then select it in this list." msgstr "" #: kcm/driveselectiondelegate.cpp:75 #, kde-kuit-format msgctxt "@item:inlistbox this text is added if selected drive is disconnected" msgid " (disconnected)" msgstr "" #: kcm/driveselectiondelegate.cpp:78 #, kde-kuit-format msgctxt "@label %1 is amount of free storage space of hard drive" msgid "%1 free" msgstr "" #: kcm/driveselectiondelegate.cpp:92 #, kde-kuit-format msgctxt "" "@item:inlistbox used for unnamed filesystems, more than one filesystem on " "device. %1 is partition number, %2 is device description, %3 is either empty " "or the \" (disconnected)\" text" msgid "Partition %1 on %2%3" msgstr "" #: kcm/driveselectiondelegate.cpp:95 #, kde-kuit-format msgctxt "" "@item:inlistbox used when there is only one unnamed filesystem on device. %1 " "is device description, %2 is either empty or the \" (disconnected)\" text" msgid "%1%2" msgstr "" #: kcm/driveselectiondelegate.cpp:99 #, kde-kuit-format msgctxt "" "@item:inlistbox %1 is filesystem label, %2 is the device description, %3 is " "either empty or the \" (disconnected)\" text" msgid "%1 on %2%3" msgstr "" #: kcm/driveselectiondelegate.cpp:106 #, kde-kuit-format msgctxt "@item:inlistbox %1 is drive(partition) label, %2 is storage capacity" msgid "%1: %2 total capacity" msgstr "" #: kcm/driveselectiondelegate.cpp:153 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "" "Warning: Symbolic links and file permissions can not be saved to this file " "system. File permissions only matters if there is more than one user of this " "computer or if you are backing up executable program files." msgstr "" #: kcm/driveselectiondelegate.cpp:157 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "" "Warning: File permissions can not be saved to this file system. File " "permissions only matters if there is more than one user of this computer or " "if you are backing up executable program files." msgstr "" #: kcm/folderselectionmodel.cpp:107 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "" "%1will be included in the backup, except for " "unchecked subfolders" msgstr "" #: kcm/folderselectionmodel.cpp:111 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "%1will be included in the backup" msgstr "" #: kcm/folderselectionmodel.cpp:115 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "" "%1 will not be included in " "the backup but contains folders that will" msgstr "" #: kcm/folderselectionmodel.cpp:119 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "" "%1 will not be included in " "the backup" msgstr "" #: kcm/kupkcm.cpp:49 #, kde-format msgid "Kup Configuration Module" msgstr "" #: kcm/kupkcm.cpp:51 #, kde-format msgid "Configuration of backup plans for the Kup backup system" msgstr "" #: kcm/kupkcm.cpp:54 #, kde-format msgid "Maintainer" msgstr "" #: kcm/kupkcm.cpp:87 #, kde-format msgid "" "

Backup programs are missing

Before you can activate any backup " "plan you need to install either of

  • bup, for versioned backups
  • rsync, for synchronized backups
" msgstr "" #: kcm/kupkcm.cpp:168 #, kde-kuit-format msgctxt "@title:window" msgid "Warning" msgstr "" #: kcm/kupkcm.cpp:170 #, kde-kuit-format msgctxt "@info %1 is the name of the backup plan" msgid "" "%1 does not have a destination!No backups will be saved by this plan." msgstr "" #: kcm/kupkcm.cpp:227 #, kde-kuit-format msgctxt "@action:button" msgid "Add New Plan" msgstr "" #: kcm/kupkcm.cpp:238 #, kde-kuit-format msgctxt "@option:check" msgid "Backups Enabled" msgstr "" #: kcm/planstatuswidget.cpp:48 #, kde-kuit-format msgctxt "@action:button" msgid "Configure" msgstr "" #: kcm/planstatuswidget.cpp:51 #, kde-kuit-format msgctxt "@action:button" msgid "Remove" msgstr "" #: kcm/planstatuswidget.cpp:54 #, kde-kuit-format msgctxt "@action:button" msgid "Duplicate" msgstr "" #: kioslave/bupslave.cpp:92 kioslave/bupslave.cpp:149 kioslave/bupslave.cpp:186 #: kioslave/bupslave.cpp:249 kioslave/bupslave.cpp:271 #, kde-format msgid "" "No bup repository found.\n" "%1" msgstr "" #: plasmoid/contents/ui/FullRepresentation.qml:88 #, kde-format msgid "Save new backup" msgstr "" #: plasmoid/contents/ui/FullRepresentation.qml:94 #, kde-format msgid "Show files" msgstr "" #: plasmoid/contents/ui/FullRepresentation.qml:99 #, kde-format msgid "Show log file" msgstr "" #. i18n: file: filedigger/restoredialog.ui:14 #. i18n: ectx: property (windowTitle), widget (QDialog, RestoreDialog) #: po/rc.cpp:3 rc.cpp:3 #, kde-format msgctxt "@title:window" msgid "Restore Guide" msgstr "" #. i18n: file: filedigger/restoredialog.ui:55 #. i18n: ectx: property (text), widget (QPushButton, mRestoreOriginalButton) #: po/rc.cpp:6 rc.cpp:6 #, kde-format msgctxt "@action:button" msgid "Restore to original location" msgstr "" #. i18n: file: filedigger/restoredialog.ui:78 #. i18n: ectx: property (text), widget (QPushButton, mRestoreCustomButton) #: po/rc.cpp:9 rc.cpp:9 #, kde-format msgctxt "@action:button" msgid "Choose where to restore" msgstr "" #. i18n: file: filedigger/restoredialog.ui:132 #. i18n: ectx: property (text), widget (QPushButton, mDestBackButton) #: po/rc.cpp:12 rc.cpp:12 #, kde-format msgctxt "@action:button" msgid "Back" msgstr "" #. i18n: file: filedigger/restoredialog.ui:144 #. i18n: ectx: property (text), widget (QPushButton, mDestNextButton) #: po/rc.cpp:15 rc.cpp:15 #, kde-format msgctxt "@action:button" msgid "Next" msgstr "" #. i18n: file: filedigger/restoredialog.ui:175 #. i18n: ectx: property (text), widget (QRadioButton, mNewNameRadioButton) #: po/rc.cpp:18 rc.cpp:18 #, kde-format msgctxt "@option:radio " msgid "Restore the folder under a new name" msgstr "" #. i18n: file: filedigger/restoredialog.ui:208 #. i18n: ectx: property (text), widget (QRadioButton, mOverwriteRadioButton) #: po/rc.cpp:21 rc.cpp:21 #, kde-format msgctxt "@option:radio" msgid "Merge folders" msgstr "" #. i18n: file: filedigger/restoredialog.ui:238 #. i18n: ectx: property (text), widget (QLabel, mConfirmOverwriteLabel) #: po/rc.cpp:24 rc.cpp:24 #, kde-format msgctxt "@info Question to user, in dialog" msgid "" "The following files would be overwritten, please confirm that you wish to " "continue." msgstr "" #. i18n: file: filedigger/restoredialog.ui:274 #. i18n: ectx: property (text), widget (QPushButton, mOverwriteBackButton) #: po/rc.cpp:27 rc.cpp:27 #, kde-format msgctxt "@action:button go to previous page in dialog" msgid "Back" msgstr "" #. i18n: file: filedigger/restoredialog.ui:286 #. i18n: ectx: property (text), widget (QPushButton, mConfirmButton) #: po/rc.cpp:30 rc.cpp:30 #, kde-format msgctxt "@action:button User answers \"yes I confirm: overwrite files\"" msgid "Confirm" msgstr "" #. i18n: file: filedigger/restoredialog.ui:341 #. i18n: ectx: property (text), widget (QLabel, mErrorLabel) #: po/rc.cpp:33 rc.cpp:33 #, kde-format msgctxt "@label above the detailed error message" msgid "An error occured while restoring:" msgstr "" #. i18n: file: filedigger/restoredialog.ui:372 #. i18n: ectx: property (text), widget (QLabel, label) #: po/rc.cpp:36 rc.cpp:36 #, kde-format msgctxt "@label" msgid "Restoration completed successfully!" msgstr "" #. i18n: file: filedigger/restoredialog.ui:413 #. i18n: ectx: property (text), widget (QPushButton, mOpenDestinationButton) #: po/rc.cpp:39 rc.cpp:39 #, kde-format msgid "Open Destination" msgstr "" #. i18n: file: filedigger/restoredialog.ui:472 #. i18n: ectx: property (text), widget (QPushButton, mCloseButton) #: po/rc.cpp:42 rc.cpp:42 #, kde-format msgctxt "@action:button" msgid "Close" msgstr "" #: po/rc.cpp:43 po/rc.cpp:58 settings/backupplan.cpp:69 rc.cpp:43 rc.cpp:58 #, kde-format msgid "Backups" msgstr "" #: po/rc.cpp:44 rc.cpp:44 msgid "Configure backup plans" msgstr "" #: po/rc.cpp:45 rc.cpp:45 msgid "backup,recovery,safety" msgstr "" #: po/rc.cpp:46 rc.cpp:46 msgid "Kup" msgstr "" #: po/rc.cpp:48 rc.cpp:48 msgid "Start taking backup" msgstr "" #: po/rc.cpp:49 rc.cpp:49 msgid "A question if user wants to start taking a backup" msgstr "" #: po/rc.cpp:50 rc.cpp:50 msgid "Backup succeeded" msgstr "" #: po/rc.cpp:51 rc.cpp:51 msgid "Saving of backup successfully completed" msgstr "" #: po/rc.cpp:52 rc.cpp:52 msgid "Backup failed" msgstr "" #: po/rc.cpp:53 rc.cpp:53 msgid "Saving of backup failed, offer user to see log file" msgstr "" #: po/rc.cpp:54 rc.cpp:54 msgid "Integrity check completed" msgstr "" #: po/rc.cpp:55 rc.cpp:55 msgid "Finished checking integrity of backup archive" msgstr "" #: po/rc.cpp:56 rc.cpp:56 msgid "Repair completed" msgstr "" #: po/rc.cpp:57 rc.cpp:57 msgid "Finished repairing backup archive" msgstr "" #: po/rc.cpp:59 rc.cpp:59 msgid "Status of backup plans" msgstr "" #: po/rc.cpp:60 rc.cpp:60 msgid "Backup Status" msgstr "" #: po/rc.cpp:61 rc.cpp:61 msgid "Displays status of backup plans" msgstr "" #: settings/backupplan.cpp:38 #, kde-kuit-format msgctxt "" "@label Default name for a new backup plan, %1 is the number of the plan in " "order" msgid "Backup plan %1" msgstr "" #: settings/backupplan.cpp:101 #, kde-format msgctxt "default description of newly duplicated backup plan" msgid "%1 (copy)" msgstr "" #: settings/backupplan.cpp:213 #, kde-format msgctxt "%1 is fancy formatted date" msgid "Last saved: %1" msgstr "" #: settings/backupplan.cpp:218 #, kde-format msgctxt "%1 is storage size of archive" msgid "Size: %1" msgstr "" #: settings/backupplan.cpp:223 #, kde-format msgctxt "%1 is free storage space" msgid "Free space: %1" msgstr "" #: settings/backupplan.cpp:227 #, kde-kuit-format msgctxt "@label" msgid "This backup plan has never been run." msgstr "" kup-backup-0.7.1+dfsg/po/lt_LT.po000066400000000000000000001342721322613417100165050ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # dgvirtual , 2014-2015 # Simon Persson , 2014 msgid "" msgstr "" "Project-Id-Version: kup\n" "Report-Msgid-Bugs-To: http://kde-apps.org/content/show.php/Kup+Backup+System?" "content=147465\n" "POT-Creation-Date: 2018-01-05 16:00+0800\n" "PO-Revision-Date: 2016-06-11 14:46+0000\n" "Last-Translator: Simon Persson \n" "Language-Team: Lithuanian (Lithuania) (http://www.transifex.com/kup/kup/" "language/lt_LT/)\n" "Language: lt_LT\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" #: daemon/bupjob.cpp:47 daemon/buprepairjob.cpp:38 #: daemon/bupverificationjob.cpp:37 #, kde-kuit-format msgctxt "@info notification" msgid "" "The bup program is needed but could not be found, " "maybe it is not installed?" msgstr "" "Reikalinga bup programa, tačiau jos rasti " "nepavyko. Gal ji neįdiegta?" #: daemon/bupjob.cpp:52 daemon/buprepairjob.cpp:43 #, kde-kuit-format msgctxt "@info notification" msgid "" "The par2 program is needed but could not be " "found, maybe it is not installed?" msgstr "" "Reikalinga par2 programa, bet jos rasti nepavyko, " "gal ji neįdiegta?" #: daemon/bupjob.cpp:71 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup destination could not be initialised. See log file for more details." msgstr "" "Nepavyko nuskaityti atsarginių kopijų kūrimo vietos failų. Daugiau detalių " "rasite žurnalo faile. " #: daemon/bupjob.cpp:93 #, fuzzy, kde-format msgid "Checking backup integrity" msgstr "Tikrinamas atsarginių kopijų integralumas" #: daemon/bupjob.cpp:104 daemon/bupverificationjob.cpp:67 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups could be corrupted! See log file " "for more details. Do you want to try repairing the backup files?" msgstr "" "Integralumo patikra nepavyko. Jūsų atsarginės kopijos gali būti sugadintos! " "Daugiau informacijos ieškokite žurnalo faile. Ar norite pamėginti sutaisyti " "atsarginių kopijų failus?" #: daemon/bupjob.cpp:108 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups could be corrupted! See log file " "for more details." msgstr "" "Atsarginių kopijų integralumo patikra rodo, kad jūsų atsarginės kopijos gali " "būti sugadintos! Daugiau informacijos ieškokite žurnalo faile." #: daemon/bupjob.cpp:131 daemon/rsyncjob.cpp:57 #, kde-format msgid "Checking what to copy" msgstr "" #: daemon/bupjob.cpp:138 #, fuzzy, kde-kuit-format msgctxt "@info notification" msgid "Failed to analyze files. See log file for more details." msgstr "" "Nepavyko indeksuoti failų sistemos. Daugiau informacijos ieškokite žurnalo " "faile." #: daemon/bupjob.cpp:159 daemon/bupjob.cpp:253 daemon/rsyncjob.cpp:175 #, fuzzy, kde-format msgid "Saving backup" msgstr "Pradėti kurti atsarginę kopiją" #: daemon/bupjob.cpp:167 daemon/rsyncjob.cpp:120 #, fuzzy, kde-kuit-format msgctxt "@info notification" msgid "Failed to save backup. See log file for more details." msgstr "" "Nepavyko įrašyti padarytos atsarginės kopijos. Daugiau informacijos " "ieškokite žurnalo faile." #: daemon/bupjob.cpp:189 #, fuzzy, kde-format msgid "Generating recovery information" msgstr "Atkūrimo informacijos generavimas" #: daemon/bupjob.cpp:197 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed to generate recovery info for the backup. See log file for more " "details." msgstr "" "Nepavyko sukurti atkūrimo informacijos šiai atsarginei kopijai. Daugiau " "informacijos ieškokite žurnalo faile." #: daemon/bupjob.cpp:254 daemon/rsyncjob.cpp:176 #, fuzzy, kde-format msgctxt "Label for file currently being copied" msgid "File" msgstr "Failas:" #: daemon/buprepairjob.cpp:72 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup repair failed. Your backups could be corrupted! See log file for more " "details." msgstr "" "Atsarginės kopijos sukurti nepavyko. Jūsų atsarginės kopijos gali būti " "sugadintos! Daugiau informacijos ieškokite žurnalo faile." #: daemon/buprepairjob.cpp:76 #, kde-kuit-format msgctxt "@info notification" msgid "Success! Backup repair worked. See log file for more details." msgstr "" "Pavyko! Atsarginė kopija sutaisyta. Daugiau informacijos ieškokite žurnalo " "faile." #: daemon/buprepairjob.cpp:80 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup repair was not necessary. Your backups are not corrupted.See log file " "for more details." msgstr "" "Atsarginės kopijos taisyti nereikėjo. Jūsų atsarginės kopijos nėra " "sugadintos. Daugiau informacijos ieškokite žurnalo faile." #: daemon/buprepairjob.cpp:85 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup repair failed. Your backups could still be corrupted! See log file " "for more details." msgstr "" "Atsarginės kopijos sutaisyti nepavyko. Jūsų atsarginės kopijos gali būti " "sugadintos! Daugiau informacijos ieškokite žurnalo faile." #: daemon/bupverificationjob.cpp:70 daemon/bupverificationjob.cpp:87 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups are corrupted! See log file for " "more details." msgstr "" "Atsarginių kopijų integralumo patikros rezultatas neigiamas. Jūsų atsarginės " "kopijos yra sugadintos! Daugiau informacijos ieškokite žurnalo faile." #: daemon/bupverificationjob.cpp:76 #, kde-kuit-format msgctxt "@info notification" msgid "Backup integrity test was successful, Your backups are fine." msgstr "" "Atsarginės kopijos integralumo patikros rezultatas teigiamas. Viskas gerai " "su jūsų atsarginėmis kopijomis." #: daemon/bupverificationjob.cpp:83 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups are corrupted! See log file for " "more details. Do you want to try repairing the backup files?" msgstr "" "Atsarginių kopijų integralumo patikros rezultatas neigiamas. Jūsų atsarginės " "kopijos yra sugadintos! Daugiau informacijos ieškokite žurnalo faile. Ar " "norite pamėginti pataisyti atsarginių kopijų failus?" #: daemon/edexecutor.cpp:115 daemon/edexecutor.cpp:124 #: daemon/edexecutor.cpp:160 daemon/fsexecutor.cpp:114 #: daemon/fsexecutor.cpp:146 #, kde-kuit-format msgctxt "@title:window" msgid "Problem" msgstr "Problema" #: daemon/edexecutor.cpp:116 daemon/fsexecutor.cpp:115 #, kde-kuit-format msgctxt "notification" msgid "Invalid type of backup in configuration." msgstr "Netinkamas tipas atsarginių kopijų konfigūracijoje." #: daemon/edexecutor.cpp:125 #, kde-kuit-format msgctxt "notification" msgid "You don't have write permission to backup destination." msgstr "" #: daemon/kupdaemon.cpp:171 #, kde-format msgid "Continue" msgstr "" #: daemon/kupdaemon.cpp:173 #, kde-format msgid "Stop" msgstr "" #: daemon/kupdaemon.cpp:175 #, kde-format msgctxt "%1 is a text explaining the current activity" msgid "Currently busy: %1" msgstr "" #: daemon/kupdaemon.cpp:176 #, kde-format msgid "Do you really want to stop?" msgstr "" #: daemon/kupdaemon.cpp:179 #, fuzzy, kde-format msgid "User Backups" msgstr "Atsarginės kopijos" #: daemon/kupdaemon.cpp:249 #, fuzzy, kde-format msgctxt "status in tooltip" msgid "Backup destination not available" msgstr "Nėra atsarginių kopijų saugojimo vietos" #: daemon/kupdaemon.cpp:253 daemon/kupdaemon.cpp:310 #, kde-format msgid "No backup plans configured" msgstr "" #: daemon/kupdaemon.cpp:259 #, fuzzy, kde-format msgctxt "status in tooltip" msgid "Backup destination available" msgstr "Atsarginių kopijų saugojimo vieta prieinama" #: daemon/kupdaemon.cpp:269 daemon/planexecutor.cpp:84 #, fuzzy, kde-format msgctxt "status in tooltip" msgid "Backup status OK" msgstr "Atsarginių kopijų statusas - geras" #: daemon/kupdaemon.cpp:276 daemon/planexecutor.cpp:86 #, fuzzy, kde-format msgctxt "status in tooltip" msgid "New backup suggested" msgstr "Siūloma sukurti atsarginę kopiją" #: daemon/kupdaemon.cpp:283 daemon/planexecutor.cpp:88 #, fuzzy, kde-format msgctxt "status in tooltip" msgid "New backup neeeded" msgstr "Reikia sukurti atsarginę kopiją" #: daemon/main.cpp:41 #, kde-kuit-format msgctxt "@info:shell Error message at startup" msgid "" "Kup is not enabled, enable it from the system settings module. You can do " "that by running kcmshell5 kup" msgstr "" "Kup nėra įgalinta. Įgalinkite šią programą sistemos nustatymų modulyje. Tai " "galite atlikti ir paleisdami komandą kcmshell5 kup" #: daemon/main.cpp:47 #, kde-kuit-format msgctxt "@title" msgid "Kup Daemon" msgstr "Kup tarnyba" #: daemon/main.cpp:48 #, kde-format msgid "" "Kup is a flexible backup solution using the backup storage system 'bup'. " "This allows it to quickly perform incremental backups, only saving the parts " "of files that has actually changed since last backup was taken." msgstr "" "Kup yra lanksti atsarginių kopijų kūrimo programa, naudojanti atsarginių " "kopijų darymo sistemą „bup“. Pastaroji leidžia greitai daryti atsargines " "kopijas išsaugant tik tuos failus ir failų dalis, kurie pasikeitė palyginus " "su paskutine atsargine kopija." #: daemon/main.cpp:51 kcm/kupkcm.cpp:52 #, kde-format msgid "Copyright (C) 2011-2015 Simon Persson" msgstr "Autorinės teisės (C) 2011-2015 Simon Persson" #: daemon/main.cpp:53 filedigger/main.cpp:51 kcm/kupkcm.cpp:54 #, kde-format msgid "Simon Persson" msgstr "Simon Persson" #: daemon/main.cpp:54 filedigger/main.cpp:52 kcm/kupkcm.cpp:55 #, kde-kuit-format msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "Donatas Glodenis" #: daemon/main.cpp:54 filedigger/main.cpp:52 kcm/kupkcm.cpp:56 #, kde-kuit-format msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "dgvirtual@akl.lt" #: daemon/planexecutor.cpp:76 #, fuzzy, kde-format msgctxt "status in tooltip" msgid "Saving backup" msgstr "Pradėti kurti atsarginę kopiją" #: daemon/planexecutor.cpp:78 #, fuzzy, kde-format msgctxt "status in tooltip" msgid "Checking backup integrity" msgstr "Tikrinamas atsarginių kopijų integralumas" #: daemon/planexecutor.cpp:80 #, fuzzy, kde-format msgctxt "status in tooltip" msgid "Repairing backups" msgstr "Taisomos atsarginės kopijos" #: daemon/planexecutor.cpp:118 daemon/planexecutor.cpp:133 #, fuzzy, kde-kuit-format msgctxt "@info" msgid "Do you want to save a first backup now?" msgstr "Ar norite dabar padaryti pirmąją atsarginę kopiją?" #: daemon/planexecutor.cpp:121 #, fuzzy, kde-kuit-format msgctxt "@info" msgid "" "It has been %1 since last backup was saved.\n" "Save a new backup now?" msgstr "" "Nuo paskutinės atsarginės kopijos padarytmo praėjo %1. Ar norite padaryti " "atsarginę kopiją dabar?" #: daemon/planexecutor.cpp:137 #, fuzzy, kde-kuit-format msgctxt "@info" msgid "" "You have been active for %1 since last backup was saved.\n" "Save a new backup now?" msgstr "" "Nuo tada, kai buvo padaryta paskutinė atsarginė kopija, jūs prie šio " "kompiuterio dirbote %1 dienų. Ar norite padaryti atsarginę kopiją dabar?" #: daemon/planexecutor.cpp:170 daemon/planexecutor.cpp:200 #: daemon/planexecutor.cpp:278 #, kde-kuit-format msgctxt "@action:button" msgid "Yes" msgstr "Taip" #: daemon/planexecutor.cpp:170 daemon/planexecutor.cpp:201 #: daemon/planexecutor.cpp:279 #, kde-kuit-format msgctxt "@action:button" msgid "No" msgstr "Ne" #: daemon/planexecutor.cpp:192 #, kde-kuit-format msgctxt "@title:window" msgid "Saving of Backup Failed" msgstr "Nepavyko įrašyti atsarginės kopijos" #: daemon/planexecutor.cpp:197 daemon/planexecutor.cpp:275 #: daemon/planexecutor.cpp:309 #, kde-kuit-format msgctxt "@action:button" msgid "Show log file" msgstr "Rodyti žurnalo failą" #: daemon/planexecutor.cpp:221 #, fuzzy, kde-kuit-format msgctxt "@title:window" msgid "Backup Saved" msgstr "Atsarginės kopijos sukurti nepavyko" #: daemon/planexecutor.cpp:222 #, fuzzy, kde-kuit-format msgctxt "@info notification" msgid "Saving backup completed successfully." msgstr "Atkūrimas baigtas sėkmingai!" #: daemon/planexecutor.cpp:271 #, kde-kuit-format msgctxt "@title:window" msgid "Integrity Check Completed" msgstr "Integralumo patikrinimas atliktas" #: daemon/planexecutor.cpp:306 #, kde-kuit-format msgctxt "@title:window" msgid "Repair Completed" msgstr "Taisymas atliktas" #: daemon/planexecutor.cpp:337 po/rc.cpp:47 rc.cpp:47 #, kde-format msgid "Kup Backup System" msgstr "Kup atsarginių kopijų sistema" #: daemon/rsyncjob.cpp:48 #, kde-kuit-format msgctxt "@info notification" msgid "" "The rsync program is needed but could not be " "found, maybe it is not installed?" msgstr "" "Reikia rsync programos, tačiau jos rasti " "nepavyko; gal ji nėra įdiegta?" #: filedigger/main.cpp:47 #, kde-kuit-format msgctxt "@title" msgid "File Digger" msgstr "File Digger" #: filedigger/main.cpp:48 #, kde-format msgid "Browser for bup archives." msgstr "Bup archyvų naršyklė." #: filedigger/main.cpp:49 #, kde-format msgid "Copyright (C) 2013-2015 Simon Persson" msgstr "Autorinės teisės (C) 2013-2015 Simon Persson" #: filedigger/main.cpp:59 #, kde-format msgid "Name of the branch to be opened." msgstr "Atšakos, kurią norite atverti, pavadinimas." #: filedigger/main.cpp:61 #, kde-format msgid "Path to the bup repository to be opened." msgstr "Kelias iki norimos atverti pub repozitorijos." #: filedigger/main.cpp:70 #, kde-format msgctxt "@info:shell Error message at startup" msgid "" "You must supply the path to a bup or git repository that you wish to open " "for viewing." msgstr "" "Turite įrašyti kelią į bup arba git repozitoriją, kurią norite atverti " "peržiūrai." #: filedigger/main.cpp:85 #, kde-kuit-format msgctxt "@info messagebox, %1 is a folder path" msgid "" "The backup archive %1 could not be opened. Check if the " "backups really are located there." msgstr "" "Atsarginių kopijų archyvo %1 atverti nepavyko. " "Patikrinkite, ar atsarginės kopijos iš tiesų ten yra." #: filedigger/main.cpp:92 #, kde-kuit-format msgctxt "@info messagebox" msgid "You do not have permission needed to read this backup archive." msgstr "" "Jūs neturi leidimų, kurių reikia norint atverti šį atsarginių kopijų archyvą." #: filedigger/mergedvfs.cpp:108 #, kde-kuit-format msgctxt "@info messagebox" msgid "" "Could not read this backup archive. Perhaps some files have become " "corrupted. Do you want to run an integrity check to test this?" msgstr "" "Nepavyko nuskaityti atsarginių kopijų archyvo. Gali būti, kad kai kurie " "failai buvo sugadinti. Ar norite paleisti integralumo patikrą?" #: filedigger/mergedvfs.cpp:156 #, kde-kuit-format msgctxt "added after folder name in some cases" msgid " (folder)" msgstr "(aplankas)" #: filedigger/mergedvfs.cpp:158 #, kde-kuit-format msgctxt "added after file name in some cases" msgid " (symlink)" msgstr "(simbolinė nuoroda)" #: filedigger/mergedvfs.cpp:160 #, kde-kuit-format msgctxt "added after file name in some cases" msgid " (file)" msgstr "(failas)" #: filedigger/restoredialog.cpp:115 kcm/backupplanwidget.cpp:451 #, kde-kuit-format msgctxt "@action:button" msgid "New Folder..." msgstr "Naujas aplankas..." #: filedigger/restoredialog.cpp:141 filedigger/restoredialog.cpp:160 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "No destination was selected, please select one." msgstr "" "Nenurodytas diskas ir konkretus aplankas, į kurį bus daromos atsarginės " "kopijos. Prašome jį nurodyti." #: filedigger/restoredialog.cpp:251 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "There was a problem while getting a list of all files to restore: %1" msgstr "Bandant gauti sąrašą atkurtinų failų susidurta su problema: %1" #: filedigger/restoredialog.cpp:264 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "The destination does not have enough space available. Please choose a " "different destination or free some space." msgstr "" "Pasirinktas diskas neturi užtektinai vietos atsarginėms kopijoms. Prašome " "nurodyti kitą aplanką (diską) arba atlaisvinti vietos diske." #: filedigger/restoredialog.cpp:274 #, kde-kuit-format msgctxt "" "added to the suggested filename when restoring, %1 is the time when backup " "was taken" msgid " - saved at %1" msgstr "- įrašyta %1" #: filedigger/restoredialog.cpp:275 #, kde-kuit-format msgctxt "@info" msgid "Folder already exists, please choose a solution" msgstr "Aplankas jau egzistuoja, prašome nurodyti sprendimą" #: filedigger/restoredialog.cpp:281 #, kde-kuit-format msgctxt "@info" msgid "File already exists" msgstr "Failas jau egzistuoja" #: filedigger/restoredialog.cpp:294 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "The new name entered already exists, please enter a different one." msgstr "Įrašytas naujasis pavadinimas jau egzistuoja, įrašykite kitą vardą." #: filedigger/restoredialog.cpp:371 kcm/dirselector.cpp:50 #, kde-kuit-format msgctxt "default folder name when creating a new folder" msgid "New Folder" msgstr "Naujas aplankas" #: filedigger/restoredialog.cpp:376 kcm/dirselector.cpp:55 #, kde-kuit-format msgctxt "@title:window" msgid "New Folder" msgstr "Naujas aplankas" #: filedigger/restoredialog.cpp:377 kcm/dirselector.cpp:56 #, kde-kuit-format msgctxt "@label:textbox" msgid "" "Create new folder in:\n" "%1" msgstr "" "Sukurkite naują aplanką čia:\n" "%1" #: filedigger/restoredialog.cpp:390 kcm/dirselector.cpp:68 #, kde-format msgid "A folder named %1 already exists." msgstr "Aplankas, pavadintas %1, jau egzistuoja." #: filedigger/restoredialog.cpp:396 kcm/dirselector.cpp:74 #, kde-format msgid "You do not have permission to create %1." msgstr "Neturite leidimų sukurti %1." #: filedigger/restorejob.cpp:99 #, kde-kuit-format msgctxt "progress report, current operation" msgid "Restoring" msgstr "Atkuriama" #: filedigger/restorejob.cpp:100 #, kde-kuit-format msgctxt "progress report, label" msgid "File:" msgstr "Failas:" #: filedigger/versionlistdelegate.cpp:135 #, kde-kuit-format msgctxt "@action:button" msgid "Open" msgstr "Atverti" #: filedigger/versionlistdelegate.cpp:137 #, kde-kuit-format msgctxt "@action:button" msgid "Restore" msgstr "Atkurti" #: kcm/backupplanwidget.cpp:282 #, kde-kuit-format msgctxt "@action:button" msgid "Exclude Folder" msgstr "" #: kcm/backupplanwidget.cpp:285 #, kde-kuit-format msgctxt "@action:button" msgid "Include Folder" msgstr "" #: kcm/backupplanwidget.cpp:382 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "You don't have permission to read this folder: %1It cannot be included in the source selection. If it does not contain " "anything important to you, one possible solution is to exclude the folder " "from the backup plan." msgstr "" #: kcm/backupplanwidget.cpp:393 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "You don't have permission to read this file: %1It " "cannot be included in the source selection. If the file is not important to " "you, one possible solution is to exclude the whole folder where the file is " "stored from the backup plan." msgstr "" #: kcm/backupplanwidget.cpp:409 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "The symbolic link %1 is currently included but it " "points to a folder which is not: %2.That is " "probably not what you want. One solution is to simply include the target " "folder in the backup plan." msgstr "" #: kcm/backupplanwidget.cpp:417 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "The symbolic link %1 is currently included but it " "points to a file which is not: %2.That is probably " "not what you want. One solution is to simply include the folder where the " "file is stored in the backup plan." msgstr "" #: kcm/backupplanwidget.cpp:440 #, kde-kuit-format msgctxt "@title:window" msgid "Select Folder" msgstr "Pasirinkite aplanką" #: kcm/backupplanwidget.cpp:478 #, kde-kuit-format msgctxt "@label" msgid "Description:" msgstr "Aprašymas:" #: kcm/backupplanwidget.cpp:481 #, kde-kuit-format msgctxt "@action:button" msgid "Back to overview" msgstr "Grįžti prie apžvalgos" #: kcm/backupplanwidget.cpp:510 #, kde-kuit-format msgctxt "@info" msgid "" "This type of backup is an archive. It contains both the " "latest version of your files and earlier backed up versions. Using this type " "of backup allows you to recover older versions of your files, or files which " "were deleted on your computer at a later time. The storage space needed is " "minimized by looking for common parts of your files between versions and " "only storing those parts once. Nevertheless, the backup archive will keep " "growing in size as time goes by.Also important to know is that the " "files in the archive can not be accessed directly with a general file " "manager, a special program is needed." msgstr "" "Šios atsarginės kopijos tipas - archyvas. Jame bus ir " "vėliausia jūsų failų versija, ir anksčiau padarytų atsarginių kopijų " "versijos. Naudojant šį atsarginių kopijų tipą bus galima atkurti senesnes " "failų versijas ar failus, kurie buvo anksčiau ištrinti iš jūsų kompiuterio. " "Reikiama saugojimui vieta yra taupoma, nes programa randa tarp skirtingų " "atsarginių kopijų nepasikeitusius failus ar nepasikeitusias failų dalis ir " "įrašo tuos failus ar jų dalis tik vieną kartą. Tačiau atsarginių kopijų " "archyvas vis tiek pamažu augs laikui bėgant.Taip pat svarbu žinoti, kad " "failai tokiame archyve nebus pasiekiami naudojant paprastą failų naršyklę. " "Tuo tikslu reikės naudoti specialią programą." #: kcm/backupplanwidget.cpp:525 #, kde-kuit-format msgctxt "@option:radio" msgid "" "Versioned Backup (not available because bup is " "not installed)" msgstr "" "Atsarginės kopijos su versijomis (neprieinama, nes bup nėra įdiegta)" #: kcm/backupplanwidget.cpp:530 #, kde-kuit-format msgctxt "@option:radio" msgid "Versioned Backup (recommended)" msgstr "Atsarginės kopijos su versijomis (rekomenduojama)" #: kcm/backupplanwidget.cpp:535 #, kde-kuit-format msgctxt "@info" msgid "" "This type of backup is a folder which is synchronized with your selected " "source folders. Taking a backup simply means making the backup destination " "contain an exact copy of your source folders as they are now and nothing " "else. If a file has been deleted in a source folder it will get deleted from " "the backup folder.This type of backup can protect you against data loss " "due to a broken hard drive but it does not help you to recover from your own " "mistakes." msgstr "" "Šis atsarginių kopijų tipas - tai aplankas, kuris sinchronizuojamas su " "nurodytais šaltinių aplankais. Atsarginės kopijos padarymas reiškia, kad " "atsarginės kopijos tikslas turės tikslią kopiją šaltinio aplankų, tokių, " "kokie jie yra dabar, ir - nieko daugiau. Jei failas bus ištrintas šaltinio " "aplanke, jis bus ištrintas iš atsarginės kopijos aplanke.Tokia " "atsarginė kopija gali apsaugoti nuo duomenų praradimo dėl sugedusio kietojo " "disko, tačiau ji neapsaugos nuo Jūsų pačių klaidų. " #: kcm/backupplanwidget.cpp:548 #, kde-kuit-format msgctxt "@option:radio" msgid "" "Synchronized Backup (not available because rsync " "is not installed)" msgstr "" "Sinchruonizuojama atsarginė kopija (neprieinama, nes rsync nėra įdiegta)" #: kcm/backupplanwidget.cpp:553 #, kde-kuit-format msgctxt "@option:radio" msgid "Synchronized Backup" msgstr "Sinchronizuojama atsarginė kopija" #: kcm/backupplanwidget.cpp:581 #, kde-kuit-format msgctxt "@title" msgid "Backup Type" msgstr "Atsarginių kopijų tipas" #: kcm/backupplanwidget.cpp:582 #, kde-kuit-format msgctxt "@label" msgid "Select what type of backup you want" msgstr "Nurodykite, kokio atsarginių kopijų tipo norite" #: kcm/backupplanwidget.cpp:590 #, kde-kuit-format msgctxt "@title" msgid "Sources" msgstr "Šaltiniai" #: kcm/backupplanwidget.cpp:591 #, kde-kuit-format msgctxt "@label" msgid "Select which folders to include in backup" msgstr "" "Pažymėkite aplankus, kurie turėtų būti įtraukiami darant atsargines kopijas" #: kcm/backupplanwidget.cpp:605 #, kde-kuit-format msgctxt "@option:radio" msgid "Filesystem Path" msgstr "Failų sistemos kelias" #: kcm/backupplanwidget.cpp:606 #, kde-kuit-format msgctxt "@option:radio" msgid "External Storage" msgstr "Išorinė saugykla" #: kcm/backupplanwidget.cpp:612 #, kde-kuit-format msgctxt "@info" msgid "" "You can use this option for backing up to a secondary internal harddrive, an " "external eSATA drive or networked storage. The requirement is just that you " "always mount it at the same path in the filesystem. The path specified here " "does not need to exist at all times, its existance will be monitored." msgstr "" "Šią parinktį galite naudoti norėdami daryti atsarginę kopiją į antrinį " "vidinį kietąjį diską, išorinį eSATA diską ar tinklo saugyklą. Vienintelis " "reikalavimas - visuomet prijungti ją tuo pačiu vidinės failų sistemos " "adresu. Čia nurodytas adresas neturi egzistuoti visą laiką, jo atsiradimą " "sistema pati pastebės." #: kcm/backupplanwidget.cpp:619 #, kde-kuit-format msgctxt "@label:textbox" msgid "Destination Path for Backup:" msgstr "Kelias iki vietos, kur bus saugomos atsarginės kopijos: " #: kcm/backupplanwidget.cpp:638 #, kde-kuit-format msgctxt "@info" msgid "" "Use this option if you want to backup your files on an external storage that " "can be plugged in to this computer, such as a USB hard drive or memory stick." msgstr "" "Pažymėkite šią parinktį jei norite, kad atsarginė kopija būtų daroma " "išorinėje laikmenoje, prijungiamoje prie šio kompiuterio, pvz., išoriniame " "USB diske ar atminties kortelėje." #: kcm/backupplanwidget.cpp:648 kcm/backupplanwidget.cpp:652 #, kde-kuit-format msgctxt "@info:tooltip" msgid "The specified folder will be created if it does not exist." msgstr "Nurodytas aplankas bus sukurtas, jei jis neegzistuoja." #: kcm/backupplanwidget.cpp:650 #, kde-kuit-format msgctxt "@label:textbox" msgid "Folder on Destination Drive:" msgstr "Aplankas atsarginių kopijų diske:" #: kcm/backupplanwidget.cpp:658 #, kde-kuit-format msgctxt "@info:tooltip" msgid "Open dialog to select a folder" msgstr "Atverkite dialogą ir pasirinkite aplanką" #: kcm/backupplanwidget.cpp:688 #, kde-kuit-format msgctxt "@title" msgid "Destination" msgstr "Tikslas" #: kcm/backupplanwidget.cpp:689 #, kde-kuit-format msgctxt "@label" msgid "Select the backup destination" msgstr "Pasirinkite, kur bus saugomos kopijos" #: kcm/backupplanwidget.cpp:706 #, kde-kuit-format msgctxt "@option:radio" msgid "Manual Activation" msgstr "Rankinis aktyvavimas" #: kcm/backupplanwidget.cpp:707 #, kde-kuit-format msgctxt "@option:radio" msgid "Interval" msgstr "Intervalas" #: kcm/backupplanwidget.cpp:708 #, kde-kuit-format msgctxt "@option:radio" msgid "Active Usage Time" msgstr "Aktyvaus naudojimo laikas" #: kcm/backupplanwidget.cpp:710 #, kde-kuit-format msgctxt "@info" msgid "" "Backups are only taken when manually requested. This can be done by using " "the popup menu from the backup system tray icon." msgstr "" "Atsarginės kopijos daromos tik tada, kai to prašo vartotojas. Tai gali būti " "daroma pasinaudojus sistemos dėklo ženkliuko pasirodančiu meniu. " #: kcm/backupplanwidget.cpp:724 #, kde-kuit-format msgctxt "@info" msgid "" "New backup will be triggered when backup destination becomes available and " "more than the configured interval has passed since the last backup was taken." msgstr "" "Daryti naują atsarginę kopiją bus siūloma praėjus nurodytam intervalui nuo " "paskutinės kopijos padarymo ir prijungus atsarginių kopijų tikslą." #: kcm/backupplanwidget.cpp:741 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Minutes" msgstr "Minutės" #: kcm/backupplanwidget.cpp:742 kcm/backupplanwidget.cpp:769 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Hours" msgstr "Valandos" #: kcm/backupplanwidget.cpp:743 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Days" msgstr "Dienos" #: kcm/backupplanwidget.cpp:744 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Weeks" msgstr "Savaitės" #: kcm/backupplanwidget.cpp:754 #, kde-kuit-format msgctxt "@info" msgid "" "New backup will be triggered when backup destination becomes available and " "you have been using your computer actively for more than the configured time " "limit since the last backup was taken." msgstr "" "Jei atsarginių kopijų darymo vieta taps prieinama, ir jei būsite naudoję " "kompiuterį tam tikrą nustatytą laiką nuo praėjusios kopijos padarymo, " "sistema pasiūlys daryti naują atsarginę kopiją." #: kcm/backupplanwidget.cpp:775 #, kde-kuit-format msgctxt "@option:check" msgid "Ask for confirmation before taking backup" msgstr "Prieš pradedant daryti atsarginę kopiją prašyti patvirtinimo" #: kcm/backupplanwidget.cpp:794 #, kde-kuit-format msgctxt "@title" msgid "Schedule" msgstr "Tvarkaraštis" #: kcm/backupplanwidget.cpp:795 #, kde-kuit-format msgctxt "@label" msgid "Specify the backup schedule" msgstr "Nurodyti atsarginių kopijų darymo tvarkaraštį" #: kcm/backupplanwidget.cpp:808 #, kde-kuit-format msgctxt "@option:check" msgid "Show hidden folders in source selection" msgstr "Rodyti paslėptus aplankus pasirenkant šaltinį" #: kcm/backupplanwidget.cpp:814 #, kde-kuit-format msgctxt "@info" msgid "" "This makes it possible to explicitly include or exclude hidden folders in " "the backup source selection. Hidden folders have a name that starts with a " "dot. They are typically located in your home folder and are used to store " "settings and temporary files for your applications." msgstr "" "Ši parinktis leidžia įtraukti arba neįtraukti paslėptų aplankų renkantis, ką " "sistema turėtų įtraukti į atsarginę kopiją. Paslėptų aplankų pavadinimai " "prasideda tašku. Jie paprastai yra namų aplanke, juose saugomi programų " "nustatymai ir laikinieji programų failai." #: kcm/backupplanwidget.cpp:832 #, kde-kuit-format msgctxt "@info" msgid "" "This will make your backups use around 10% more storage space and saving " "backups will take slightly longer time. In return it will be possible to " "recover from a partially corrupted backup." msgstr "" "Pasirinkus šią parinktį atsarginės kopijos užims maždaug 10 proc. daugiau " "vietos ir atsarginių kopijų įrašymas užtruks šiek tiek ilgiau. Tačiau užtat " "bus galima atkurti failus iš dalinai sugadintos atsarginės kopijos. " #: kcm/backupplanwidget.cpp:838 #, kde-kuit-format msgctxt "@option:check" msgid "Generate recovery information" msgstr "Atkūrimo informacijos generavimas" #: kcm/backupplanwidget.cpp:840 #, kde-kuit-format msgctxt "@option:check" msgid "" "Generate recovery information (not available because par2 is not installed)" msgstr "" "Atkūrimo informacijos generavimas (neprieinama nes par2 programa nėra įdiegta)" #: kcm/backupplanwidget.cpp:856 #, kde-kuit-format msgctxt "@option:check" msgid "Verify integrity of backups" msgstr "Atsarginių kopijų integralumo patikrinimas" #: kcm/backupplanwidget.cpp:860 #, kde-kuit-format msgctxt "@info" msgid "" "Checks the whole backup archive for corruption every time you save new data. " "Saving backups will take a little bit longer time but it allows you to catch " "corruption problems sooner than at the time you need to use a backup, at " "that time it could be too late." msgstr "" "Patikrina visą atsarginių kopijų archyvą dėl galimų sugadinimų kiekvieną " "kartą įrašant naujus duomenis. Atsarginių kopijų įrašymas truks šiek tiek " "ilgiau, tačiau taip galėsite aptikti sugadinimo problemas prieš tai, kai " "atsarginės kopijos jums prireiks. O tuo metu jau gali būti per vėlu. " #: kcm/backupplanwidget.cpp:882 #, kde-kuit-format msgctxt "@title" msgid "Advanced" msgstr "Sudėtingesni nustatymai" #: kcm/backupplanwidget.cpp:883 #, kde-kuit-format msgctxt "@label" msgid "Extra options for advanced users" msgstr "Papildomos parinktys pažengusiems vartotojams" #: kcm/driveselection.cpp:275 #, kde-kuit-format msgctxt "@label Only shown if no drives are detected" msgid "" "Plug in the external storage you wish to use, then select it in this list." msgstr "" "Prijunkite išorinį saugojimo diską, kurį norite naudoti, ir pasirinkite iš " "šio sąrašo." #: kcm/driveselectiondelegate.cpp:75 #, kde-kuit-format msgctxt "@item:inlistbox this text is added if selected drive is disconnected" msgid " (disconnected)" msgstr "(atjungta)" #: kcm/driveselectiondelegate.cpp:78 #, kde-kuit-format msgctxt "@label %1 is amount of free storage space of hard drive" msgid "%1 free" msgstr "%1 laisva" #: kcm/driveselectiondelegate.cpp:92 #, kde-kuit-format msgctxt "" "@item:inlistbox used for unnamed filesystems, more than one filesystem on " "device. %1 is partition number, %2 is device description, %3 is either empty " "or the \" (disconnected)\" text" msgid "Partition %1 on %2%3" msgstr "Skirsnis %1 diske %2%3" #: kcm/driveselectiondelegate.cpp:95 #, kde-kuit-format msgctxt "" "@item:inlistbox used when there is only one unnamed filesystem on device. %1 " "is device description, %2 is either empty or the \" (disconnected)\" text" msgid "%1%2" msgstr "%1%2" #: kcm/driveselectiondelegate.cpp:99 #, kde-kuit-format msgctxt "" "@item:inlistbox %1 is filesystem label, %2 is the device description, %3 is " "either empty or the \" (disconnected)\" text" msgid "%1 on %2%3" msgstr "%1 diske %2%3" #: kcm/driveselectiondelegate.cpp:106 #, kde-kuit-format msgctxt "@item:inlistbox %1 is drive(partition) label, %2 is storage capacity" msgid "%1: %2 total capacity" msgstr "%1: %2 visos talpos" #: kcm/driveselectiondelegate.cpp:153 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "" "Warning: Symbolic links and file permissions can not be saved to this file " "system. File permissions only matters if there is more than one user of this " "computer or if you are backing up executable program files." msgstr "" "Perspėjimas: šioje failų sistemoje negalima išsaugoti simbolinių nuorodų ir " "failų leidimų. Failų leidimai svarbūs tik tuo atveju, jei kompiuteriu " "naudojasi daugiau nei vienas asmuo, arba, jei darote vykdomųjų programų " "atsargines kopijas." #: kcm/driveselectiondelegate.cpp:157 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "" "Warning: File permissions can not be saved to this file system. File " "permissions only matters if there is more than one user of this computer or " "if you are backing up executable program files." msgstr "" "Perspėjimas: šioje failų sistemoje negalima išsaugoti failų leidimų. Failų " "leidimai svarbūs tik tuo atveju, jei kompiuteriu naudojasi daugiau nei " "vienas asmuo, arba, jei darote vykdomųjų programų atsargines kopijas." #: kcm/folderselectionmodel.cpp:107 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "" "%1will be included in the backup, except for " "unchecked subfolders" msgstr "" "%1 bus įtrauktas į atsarginę kopiją, neskaitant " "nepažymėtų paaplankių" #: kcm/folderselectionmodel.cpp:111 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "%1will be included in the backup" msgstr "%1bus įtrauktas į atsarginę kopiją" #: kcm/folderselectionmodel.cpp:115 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "" "%1 will not be included in " "the backup but contains folders that will" msgstr "" "%1 nebus įtrauktas į atsarginę kopiją, tačiau kai " "kurie jame esantys aplankai bus įtraukti" #: kcm/folderselectionmodel.cpp:119 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "" "%1 will not be included in " "the backup" msgstr "" "%1nebus įtrauktas į atsarginę " "kopiją" #: kcm/kupkcm.cpp:49 #, kde-format msgid "Kup Configuration Module" msgstr "Kup konfigūravimo modulis" #: kcm/kupkcm.cpp:51 #, kde-format msgid "Configuration of backup plans for the Kup backup system" msgstr "Kup atsarginių kopijų sistemos planų konfigūravimas" #: kcm/kupkcm.cpp:54 #, kde-format msgid "Maintainer" msgstr "Palaikytojas" #: kcm/kupkcm.cpp:87 #, kde-format msgid "" "

Backup programs are missing

Before you can activate any backup " "plan you need to install either of

  • bup, for versioned backups
  • rsync, for synchronized backups
" msgstr "" "

Nėra atsarginių kopijų programų

Prieš aktyvuodami bet kurį " "atsarginių kopijų planą turite įdiegti

  • bup, jei norite atsarginių " "kopijų su versijomis
  • arba
  • rsync, sinchronizuotai atsarginei " "kopijai
" #: kcm/kupkcm.cpp:168 #, kde-kuit-format msgctxt "@title:window" msgid "Warning" msgstr "Perspėjimas" #: kcm/kupkcm.cpp:170 #, kde-kuit-format msgctxt "@info %1 is the name of the backup plan" msgid "" "%1 does not have a destination!No backups will be saved by this plan." msgstr "" "%1 nėra atsarginių kopijų aplanko!Pagal šį planą nebus išsaugota " "atsarginių kopijų." #: kcm/kupkcm.cpp:227 #, kde-kuit-format msgctxt "@action:button" msgid "Add New Plan" msgstr "Pridėti naują planą" #: kcm/kupkcm.cpp:238 #, kde-kuit-format msgctxt "@option:check" msgid "Backups Enabled" msgstr "Atsarginių kopijų galimybė įjungta" #: kcm/planstatuswidget.cpp:48 #, kde-kuit-format msgctxt "@action:button" msgid "Configure" msgstr "Konfigūruoti" #: kcm/planstatuswidget.cpp:51 #, kde-kuit-format msgctxt "@action:button" msgid "Remove" msgstr "Pašalinti" #: kcm/planstatuswidget.cpp:54 #, kde-kuit-format msgctxt "@action:button" msgid "Duplicate" msgstr "" #: kioslave/bupslave.cpp:92 kioslave/bupslave.cpp:149 kioslave/bupslave.cpp:186 #: kioslave/bupslave.cpp:249 kioslave/bupslave.cpp:271 #, kde-format msgid "" "No bup repository found.\n" "%1" msgstr "" "Nerasta atsarginių kopijų repozitorijos.\n" "%1" #: plasmoid/contents/ui/FullRepresentation.qml:88 #, fuzzy, kde-format msgid "Save new backup" msgstr "Daroma atsarginė kopija" #: plasmoid/contents/ui/FullRepresentation.qml:94 #, fuzzy, kde-format msgid "Show files" msgstr "Rodyti failus" #: plasmoid/contents/ui/FullRepresentation.qml:99 #, fuzzy, kde-format msgid "Show log file" msgstr "Rodyti žurnalo failą" #. i18n: file: filedigger/restoredialog.ui:14 #. i18n: ectx: property (windowTitle), widget (QDialog, RestoreDialog) #: po/rc.cpp:3 rc.cpp:3 #, kde-format msgctxt "@title:window" msgid "Restore Guide" msgstr "Atkūrimo vadovas" #. i18n: file: filedigger/restoredialog.ui:55 #. i18n: ectx: property (text), widget (QPushButton, mRestoreOriginalButton) #: po/rc.cpp:6 rc.cpp:6 #, kde-format msgctxt "@action:button" msgid "Restore to original location" msgstr "Atkurti į pirminę vietą" #. i18n: file: filedigger/restoredialog.ui:78 #. i18n: ectx: property (text), widget (QPushButton, mRestoreCustomButton) #: po/rc.cpp:9 rc.cpp:9 #, kde-format msgctxt "@action:button" msgid "Choose where to restore" msgstr "Pasirinkti, kur atkurti" #. i18n: file: filedigger/restoredialog.ui:132 #. i18n: ectx: property (text), widget (QPushButton, mDestBackButton) #: po/rc.cpp:12 rc.cpp:12 #, kde-format msgctxt "@action:button" msgid "Back" msgstr "Atgal" #. i18n: file: filedigger/restoredialog.ui:144 #. i18n: ectx: property (text), widget (QPushButton, mDestNextButton) #: po/rc.cpp:15 rc.cpp:15 #, kde-format msgctxt "@action:button" msgid "Next" msgstr "Kitas" #. i18n: file: filedigger/restoredialog.ui:175 #. i18n: ectx: property (text), widget (QRadioButton, mNewNameRadioButton) #: po/rc.cpp:18 rc.cpp:18 #, kde-format msgctxt "@option:radio " msgid "Restore the folder under a new name" msgstr "Atkurti aplanką nauju pavadinimu" #. i18n: file: filedigger/restoredialog.ui:208 #. i18n: ectx: property (text), widget (QRadioButton, mOverwriteRadioButton) #: po/rc.cpp:21 rc.cpp:21 #, kde-format msgctxt "@option:radio" msgid "Merge folders" msgstr "Sulieti aplankus" #. i18n: file: filedigger/restoredialog.ui:238 #. i18n: ectx: property (text), widget (QLabel, mConfirmOverwriteLabel) #: po/rc.cpp:24 rc.cpp:24 #, kde-format msgctxt "@info Question to user, in dialog" msgid "" "The following files would be overwritten, please confirm that you wish to " "continue." msgstr "" "Žemiau išvardinti failai bus perrašyti, prašome patvirtinti, kad norite " "tęsti." #. i18n: file: filedigger/restoredialog.ui:274 #. i18n: ectx: property (text), widget (QPushButton, mOverwriteBackButton) #: po/rc.cpp:27 rc.cpp:27 #, kde-format msgctxt "@action:button go to previous page in dialog" msgid "Back" msgstr "Atgal" #. i18n: file: filedigger/restoredialog.ui:286 #. i18n: ectx: property (text), widget (QPushButton, mConfirmButton) #: po/rc.cpp:30 rc.cpp:30 #, kde-format msgctxt "@action:button User answers \"yes I confirm: overwrite files\"" msgid "Confirm" msgstr "Patvirtinti" #. i18n: file: filedigger/restoredialog.ui:341 #. i18n: ectx: property (text), widget (QLabel, mErrorLabel) #: po/rc.cpp:33 rc.cpp:33 #, kde-format msgctxt "@label above the detailed error message" msgid "An error occured while restoring:" msgstr "Atkuriant nutiko klaida: " #. i18n: file: filedigger/restoredialog.ui:372 #. i18n: ectx: property (text), widget (QLabel, label) #: po/rc.cpp:36 rc.cpp:36 #, kde-format msgctxt "@label" msgid "Restoration completed successfully!" msgstr "Atkūrimas baigtas sėkmingai!" #. i18n: file: filedigger/restoredialog.ui:413 #. i18n: ectx: property (text), widget (QPushButton, mOpenDestinationButton) #: po/rc.cpp:39 rc.cpp:39 #, kde-format msgid "Open Destination" msgstr "Atverti tikslą" #. i18n: file: filedigger/restoredialog.ui:472 #. i18n: ectx: property (text), widget (QPushButton, mCloseButton) #: po/rc.cpp:42 rc.cpp:42 #, kde-format msgctxt "@action:button" msgid "Close" msgstr "Užverti" #: po/rc.cpp:43 po/rc.cpp:58 settings/backupplan.cpp:69 rc.cpp:43 rc.cpp:58 #, kde-format msgid "Backups" msgstr "Atsarginės kopijos" #: po/rc.cpp:44 rc.cpp:44 msgid "Configure backup plans" msgstr "Konfigūruoti atsarginių kopijų planus" #: po/rc.cpp:45 rc.cpp:45 msgid "backup,recovery,safety" msgstr "kopijos,atkūrimas,saugumas" #: po/rc.cpp:46 rc.cpp:46 msgid "Kup" msgstr "Kup" #: po/rc.cpp:48 rc.cpp:48 msgid "Start taking backup" msgstr "Pradėti kurti atsarginę kopiją" #: po/rc.cpp:49 rc.cpp:49 msgid "A question if user wants to start taking a backup" msgstr "Klausimas, ar vartotojas nori pradėti kurti atsarginę kopiją" #: po/rc.cpp:50 rc.cpp:50 #, fuzzy msgid "Backup succeeded" msgstr "Reikia sukurti atsarginę kopiją" #: po/rc.cpp:51 rc.cpp:51 #, fuzzy msgid "Saving of backup successfully completed" msgstr "Nepavyko įrašyti atsarginės kopijos" #: po/rc.cpp:52 rc.cpp:52 msgid "Backup failed" msgstr "Atsarginės kopijos sukurti nepavyko" #: po/rc.cpp:53 rc.cpp:53 msgid "Saving of backup failed, offer user to see log file" msgstr "" "Sukurti atsarginės kopijos nepavyko, pasiūlykite vartotojui peržiūrėti " "žurnalo failą" #: po/rc.cpp:54 rc.cpp:54 msgid "Integrity check completed" msgstr "Integralumo patikra baigta" #: po/rc.cpp:55 rc.cpp:55 msgid "Finished checking integrity of backup archive" msgstr "Baigta atsarginių kopijų archyvo integralumo patikra" #: po/rc.cpp:56 rc.cpp:56 msgid "Repair completed" msgstr "Taisymas baigtas" #: po/rc.cpp:57 rc.cpp:57 msgid "Finished repairing backup archive" msgstr "Atsarginių kopijų archyvo taisymas baigtas" #: po/rc.cpp:59 rc.cpp:59 #, fuzzy msgid "Status of backup plans" msgstr "Konfigūruoti atsarginių kopijų planus" #: po/rc.cpp:60 rc.cpp:60 #, fuzzy msgid "Backup Status" msgstr "Atsarginių kopijų statusas - geras" #: po/rc.cpp:61 rc.cpp:61 msgid "Displays status of backup plans" msgstr "" #: settings/backupplan.cpp:38 #, kde-kuit-format msgctxt "" "@label Default name for a new backup plan, %1 is the number of the plan in " "order" msgid "Backup plan %1" msgstr "Atsarginių kopijų planas %1" #: settings/backupplan.cpp:101 #, kde-format msgctxt "default description of newly duplicated backup plan" msgid "%1 (copy)" msgstr "" #: settings/backupplan.cpp:213 #, fuzzy, kde-format msgctxt "%1 is fancy formatted date" msgid "Last saved: %1" msgstr "- įrašyta %1" #: settings/backupplan.cpp:218 #, kde-format msgctxt "%1 is storage size of archive" msgid "Size: %1" msgstr "" #: settings/backupplan.cpp:223 #, kde-format msgctxt "%1 is free storage space" msgid "Free space: %1" msgstr "" #: settings/backupplan.cpp:227 #, kde-kuit-format msgctxt "@label" msgid "This backup plan has never been run." msgstr "Šis atsarginių kopijų planas dar nebuvo paleistas." #~ msgctxt "@title:window" #~ msgid "Backups" #~ msgstr "Atsarginės kopijos" #~ msgctxt "@title:menu" #~ msgid "Backups" #~ msgstr "Atsarginės kopijos" #~ msgctxt "@action:inmenu" #~ msgid "Configure Backups" #~ msgstr "Konfigūruoti atsargines kopijas" #~ msgctxt "@action:inmenu" #~ msgid "Take Backup Now" #~ msgstr "Daryti atsarginę kopiją dabar" #~ msgctxt "@action:inmenu" #~ msgid "Show Log File" #~ msgstr "Rodyti žurnalą" #~ msgctxt "@title:window" #~ msgid "Backup Device Available - %1" #~ msgstr "Atsarginių kopijų įreginys prieinamas - %1" #~ msgctxt "@info notification" #~ msgid "" #~ "Saving backup did not complete successfully. See log file for more " #~ "details." #~ msgstr "" #~ "Nepavyko užbaigti atsarginės kopijos. Daugiau informacijos ieškokite " #~ "žurnalo faile." #~ msgctxt "@label %1 is fancy formatted date, %2 is time of day" #~ msgid "Last backup was taken %1 at %2.\n" #~ msgstr "Paskutinį kartą atsarginė kopija %1 sukurta %2.\n" #~ msgctxt "@label %1 is storage size of archive" #~ msgid "The size of the backup archive was %1.\n" #~ msgstr "Atsarginių kopijų archyvo dydis buvo %1.\n" #~ msgctxt "@label %1 is free storage space" #~ msgid "The destination still had %1 available.\n" #~ msgstr "Atsarginių kopijų diske dar yra %1 vietos.\n" kup-backup-0.7.1+dfsg/po/nl_NL.po000066400000000000000000001311041322613417100164600ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Heimen Stoffels , 2017 msgid "" msgstr "" "Project-Id-Version: kup\n" "Report-Msgid-Bugs-To: http://kde-apps.org/content/show.php/Kup+Backup+System?" "content=147465\n" "POT-Creation-Date: 2018-01-05 16:00+0800\n" "PO-Revision-Date: 2017-09-19 08:33+0000\n" "Last-Translator: Heimen Stoffels \n" "Language-Team: Dutch (Netherlands) (http://www.transifex.com/kup/kup/" "language/nl_NL/)\n" "Language: nl_NL\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" #: daemon/bupjob.cpp:47 daemon/buprepairjob.cpp:38 #: daemon/bupverificationjob.cpp:37 #, kde-kuit-format msgctxt "@info notification" msgid "" "The bup program is needed but could not be found, " "maybe it is not installed?" msgstr "" "De vereiste applicatie bup kan niet worden " "gevonden op uw systeem. Is het wel geïnstalleerd?" #: daemon/bupjob.cpp:52 daemon/buprepairjob.cpp:43 #, kde-kuit-format msgctxt "@info notification" msgid "" "The par2 program is needed but could not be " "found, maybe it is not installed?" msgstr "" "De vereiste applicatie par2 kan niet worden " "gevonden op uw systeem. Is het wel geïnstalleerd?" #: daemon/bupjob.cpp:71 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup destination could not be initialised. See log file for more details." msgstr "" "De back-upbestemming kan niet worden geïnitialiseerd. Bekijk het logbestand " "voor meer informatie." #: daemon/bupjob.cpp:93 #, kde-format msgid "Checking backup integrity" msgstr "Bezig met controleren van back-upintegriteit" #: daemon/bupjob.cpp:104 daemon/bupverificationjob.cpp:67 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups could be corrupted! See log file " "for more details. Do you want to try repairing the backup files?" msgstr "" "De back-upintegriteitscontrole is mislukt. Uw back-ups zijn mogelijk " "beschadigd! Bekijk het logbestand voor meer informatie. Wilt u proberen om " "de back-upbestanden te repareren?" #: daemon/bupjob.cpp:108 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups could be corrupted! See log file " "for more details." msgstr "" "De back-upintegriteitscontrole is mislukt. Uw back-ups zijn mogelijk " "beschadigd! Bekijk het logbestand voor meer informatie." #: daemon/bupjob.cpp:131 daemon/rsyncjob.cpp:57 #, kde-format msgid "Checking what to copy" msgstr "Bezig met de te kopiëren items te controleren" #: daemon/bupjob.cpp:138 #, kde-kuit-format msgctxt "@info notification" msgid "Failed to analyze files. See log file for more details." msgstr "" "Het analyseren van de bestanden is mislukt. Bekijk het logbestand voor meer " "informatie." #: daemon/bupjob.cpp:159 daemon/bupjob.cpp:253 daemon/rsyncjob.cpp:175 #, kde-format msgid "Saving backup" msgstr "Bezig met opslaan van back-up" #: daemon/bupjob.cpp:167 daemon/rsyncjob.cpp:120 #, kde-kuit-format msgctxt "@info notification" msgid "Failed to save backup. See log file for more details." msgstr "" "Het opslaan van de back-up is mislukt. Bekijk het logbestand voor meer " "informatie." #: daemon/bupjob.cpp:189 #, kde-format msgid "Generating recovery information" msgstr "Bezig met genereren van herstelinformatie" #: daemon/bupjob.cpp:197 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed to generate recovery info for the backup. See log file for more " "details." msgstr "" "Het genereren van herstelinformatie is mislukt. Bekijk het logbestand voor " "meer informatie." #: daemon/bupjob.cpp:254 daemon/rsyncjob.cpp:176 #, kde-format msgctxt "Label for file currently being copied" msgid "File" msgstr "Bestand" #: daemon/buprepairjob.cpp:72 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup repair failed. Your backups could be corrupted! See log file for more " "details." msgstr "" "De back-upreparatie is mislukt. Uw back-ups zijn mogelijk beschadigd! Bekijk " "het logbestand voor meer informatie." #: daemon/buprepairjob.cpp:76 #, kde-kuit-format msgctxt "@info notification" msgid "Success! Backup repair worked. See log file for more details." msgstr "" "Het repareren van de back-up is gelukt! Bekijk het logbestand voor meer " "informatie." #: daemon/buprepairjob.cpp:80 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup repair was not necessary. Your backups are not corrupted.See log file " "for more details." msgstr "" "Back-upreparatie was niet nodig. Uw back-ups zijn niet beschadigd. Bekijk " "het logbestand voor meer informatie." #: daemon/buprepairjob.cpp:85 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup repair failed. Your backups could still be corrupted! See log file " "for more details." msgstr "" "De back-upreparatie is mislukt. Uw back-ups zijn mogelijk nog steeds " "beschadigd! Bekijk het logbestand voor meer informatie." #: daemon/bupverificationjob.cpp:70 daemon/bupverificationjob.cpp:87 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups are corrupted! See log file for " "more details." msgstr "" "De back-upintegriteitscontrole is mislukt. Uw back-ups zijn beschadigd! " "Bekijk het logbestand voor meer informatie." #: daemon/bupverificationjob.cpp:76 #, kde-kuit-format msgctxt "@info notification" msgid "Backup integrity test was successful, Your backups are fine." msgstr "" "De back-upintegriteitscontrole is succesvol afgerond. Uw back-ups zijn " "onbeschadigd." #: daemon/bupverificationjob.cpp:83 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups are corrupted! See log file for " "more details. Do you want to try repairing the backup files?" msgstr "" "De back-upintegriteitscontrole is mislukt. Uw back-ups zijn beschadigd! " "Bekijk het logbestand voor meer informatie. Wilt u proberen om de back-" "upbestanden te repareren?" #: daemon/edexecutor.cpp:115 daemon/edexecutor.cpp:124 #: daemon/edexecutor.cpp:160 daemon/fsexecutor.cpp:114 #: daemon/fsexecutor.cpp:146 #, kde-kuit-format msgctxt "@title:window" msgid "Problem" msgstr "Probleem" #: daemon/edexecutor.cpp:116 daemon/fsexecutor.cpp:115 #, kde-kuit-format msgctxt "notification" msgid "Invalid type of backup in configuration." msgstr "Ongeldig type back-up in de configuratie." #: daemon/edexecutor.cpp:125 #, kde-kuit-format msgctxt "notification" msgid "You don't have write permission to backup destination." msgstr "U heeft geen schrijfrechten op de back-upbestemming." #: daemon/kupdaemon.cpp:171 #, kde-format msgid "Continue" msgstr "Doorgaan" #: daemon/kupdaemon.cpp:173 #, kde-format msgid "Stop" msgstr "Stoppen" #: daemon/kupdaemon.cpp:175 #, kde-format msgctxt "%1 is a text explaining the current activity" msgid "Currently busy: %1" msgstr "Momenteel bezig met: %1" #: daemon/kupdaemon.cpp:176 #, kde-format msgid "Do you really want to stop?" msgstr "Weet u zeker dat u wilt stoppen?" #: daemon/kupdaemon.cpp:179 #, kde-format msgid "User Backups" msgstr "Gebruikersback-ups" #: daemon/kupdaemon.cpp:249 #, kde-format msgctxt "status in tooltip" msgid "Backup destination not available" msgstr "De back-upbestemming is niet beschikbaar" #: daemon/kupdaemon.cpp:253 daemon/kupdaemon.cpp:310 #, kde-format msgid "No backup plans configured" msgstr "Er zijn geen back-upschema's ingesteld" #: daemon/kupdaemon.cpp:259 #, kde-format msgctxt "status in tooltip" msgid "Backup destination available" msgstr "De back-upbestemming is beschikbaar" #: daemon/kupdaemon.cpp:269 daemon/planexecutor.cpp:84 #, kde-format msgctxt "status in tooltip" msgid "Backup status OK" msgstr "Back-upstatus: IN ORDE" #: daemon/kupdaemon.cpp:276 daemon/planexecutor.cpp:86 #, kde-format msgctxt "status in tooltip" msgid "New backup suggested" msgstr "Nieuwe back-up wordt aanbevolen" #: daemon/kupdaemon.cpp:283 daemon/planexecutor.cpp:88 #, kde-format msgctxt "status in tooltip" msgid "New backup neeeded" msgstr "Nieuwe back-up is benodigd" #: daemon/main.cpp:41 #, kde-kuit-format msgctxt "@info:shell Error message at startup" msgid "" "Kup is not enabled, enable it from the system settings module. You can do " "that by running kcmshell5 kup" msgstr "" "Kup is niet ingeschakeld. Schakel Kup in middels de " "systeeminstellingenmodule. U kunt dit doen door kcmshell5 kup uit te voeren." #: daemon/main.cpp:47 #, kde-kuit-format msgctxt "@title" msgid "Kup Daemon" msgstr "Kup-achtergronddienst" #: daemon/main.cpp:48 #, kde-format msgid "" "Kup is a flexible backup solution using the backup storage system 'bup'. " "This allows it to quickly perform incremental backups, only saving the parts " "of files that has actually changed since last backup was taken." msgstr "" "Kup is een flexibel back-upsysteem dat gebruik maakt van het opslagsysteem " "'bup'. Dit stelt Kup in staat om snel incrementele back-ups uit te voeren; " "alleen de delen die gewijzigd zijn sinds de laatste back-up worden " "gebackup'd." #: daemon/main.cpp:51 kcm/kupkcm.cpp:52 #, kde-format msgid "Copyright (C) 2011-2015 Simon Persson" msgstr "Copyright (C) 2011-2015 Simon Persson" #: daemon/main.cpp:53 filedigger/main.cpp:51 kcm/kupkcm.cpp:54 #, kde-format msgid "Simon Persson" msgstr "Simon Persson" #: daemon/main.cpp:54 filedigger/main.cpp:52 kcm/kupkcm.cpp:55 #, kde-kuit-format msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "Heimen Stoffels" #: daemon/main.cpp:54 filedigger/main.cpp:52 kcm/kupkcm.cpp:56 #, kde-kuit-format msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "vistausss@outlook.com" #: daemon/planexecutor.cpp:76 #, kde-format msgctxt "status in tooltip" msgid "Saving backup" msgstr "Bezig met opslaan van back-up" #: daemon/planexecutor.cpp:78 #, kde-format msgctxt "status in tooltip" msgid "Checking backup integrity" msgstr "Bezig met controleren van back-upintegriteit" #: daemon/planexecutor.cpp:80 #, kde-format msgctxt "status in tooltip" msgid "Repairing backups" msgstr "Bezig met repareren van back-ups" #: daemon/planexecutor.cpp:118 daemon/planexecutor.cpp:133 #, kde-kuit-format msgctxt "@info" msgid "Do you want to save a first backup now?" msgstr "Wilt u nu uw eerste back-up maken?" #: daemon/planexecutor.cpp:121 #, kde-kuit-format msgctxt "@info" msgid "" "It has been %1 since last backup was saved.\n" "Save a new backup now?" msgstr "" "Het is %1 geleden sinds de laatste back-up is opgeslagen.\n" "Wilt u nu een nieuwe back-up maken?" #: daemon/planexecutor.cpp:137 #, kde-kuit-format msgctxt "@info" msgid "" "You have been active for %1 since last backup was saved.\n" "Save a new backup now?" msgstr "" "U bent %1 actief geweest sinds de laatste back-up is opgeslagen.\n" "Wilt u nu een nieuwe back-up maken?" #: daemon/planexecutor.cpp:170 daemon/planexecutor.cpp:200 #: daemon/planexecutor.cpp:278 #, kde-kuit-format msgctxt "@action:button" msgid "Yes" msgstr "Ja" #: daemon/planexecutor.cpp:170 daemon/planexecutor.cpp:201 #: daemon/planexecutor.cpp:279 #, kde-kuit-format msgctxt "@action:button" msgid "No" msgstr "Nee" #: daemon/planexecutor.cpp:192 #, kde-kuit-format msgctxt "@title:window" msgid "Saving of Backup Failed" msgstr "Opslaan van back-up is mislukt" #: daemon/planexecutor.cpp:197 daemon/planexecutor.cpp:275 #: daemon/planexecutor.cpp:309 #, kde-kuit-format msgctxt "@action:button" msgid "Show log file" msgstr "Logbestand weergeven" #: daemon/planexecutor.cpp:221 #, kde-kuit-format msgctxt "@title:window" msgid "Backup Saved" msgstr "Back-up is opgeslagen" #: daemon/planexecutor.cpp:222 #, kde-kuit-format msgctxt "@info notification" msgid "Saving backup completed successfully." msgstr "Het opslaan van de back-up is succesvol afgerond." #: daemon/planexecutor.cpp:271 #, kde-kuit-format msgctxt "@title:window" msgid "Integrity Check Completed" msgstr "Integriteitscontrole voltooid" #: daemon/planexecutor.cpp:306 #, kde-kuit-format msgctxt "@title:window" msgid "Repair Completed" msgstr "Reparatie voltooid" #: daemon/planexecutor.cpp:337 po/rc.cpp:47 rc.cpp:47 #, kde-format msgid "Kup Backup System" msgstr "Kup back-upsysteem" #: daemon/rsyncjob.cpp:48 #, kde-kuit-format msgctxt "@info notification" msgid "" "The rsync program is needed but could not be " "found, maybe it is not installed?" msgstr "" "De vereiste applicatie rsync kan niet worden " "gevonden op uw systeem. Is het wel geïnstalleerd?" #: filedigger/main.cpp:47 #, kde-kuit-format msgctxt "@title" msgid "File Digger" msgstr "Bestandsdoorzoeker" #: filedigger/main.cpp:48 #, kde-format msgid "Browser for bup archives." msgstr "Verkenner voor bup-archieven." #: filedigger/main.cpp:49 #, kde-format msgid "Copyright (C) 2013-2015 Simon Persson" msgstr "Copyright (C) 2013-2015 Simon Persson" #: filedigger/main.cpp:59 #, kde-format msgid "Name of the branch to be opened." msgstr "Naam van de te openen afsplitsing." #: filedigger/main.cpp:61 #, kde-format msgid "Path to the bup repository to be opened." msgstr "Pad van de te openen bup-bron." #: filedigger/main.cpp:70 #, kde-format msgctxt "@info:shell Error message at startup" msgid "" "You must supply the path to a bup or git repository that you wish to open " "for viewing." msgstr "U moet een pad opgeven van de bup- of git-bron die u wilt openen." #: filedigger/main.cpp:85 #, kde-kuit-format msgctxt "@info messagebox, %1 is a folder path" msgid "" "The backup archive %1 could not be opened. Check if the " "backups really are located there." msgstr "" "Het back-uparchief %1 kan niet worden geopend. " "Controleer of de back-ups zich daar werkelijk bevinden." #: filedigger/main.cpp:92 #, kde-kuit-format msgctxt "@info messagebox" msgid "You do not have permission needed to read this backup archive." msgstr "" "U beschikt niet over de benodigde rechten om dit back-uparchief te mogen " "lezen." #: filedigger/mergedvfs.cpp:108 #, kde-kuit-format msgctxt "@info messagebox" msgid "" "Could not read this backup archive. Perhaps some files have become " "corrupted. Do you want to run an integrity check to test this?" msgstr "" "Dit back-uparchief kan niet worden gelezen. Sommige bestanden zijn mogelijk " "beschadigd. Wilt u een integriteitscontrole uitvoeren?" #: filedigger/mergedvfs.cpp:156 #, kde-kuit-format msgctxt "added after folder name in some cases" msgid " (folder)" msgstr "(map)" #: filedigger/mergedvfs.cpp:158 #, kde-kuit-format msgctxt "added after file name in some cases" msgid " (symlink)" msgstr "(zachte koppeling)" #: filedigger/mergedvfs.cpp:160 #, kde-kuit-format msgctxt "added after file name in some cases" msgid " (file)" msgstr "(bestand)" #: filedigger/restoredialog.cpp:115 kcm/backupplanwidget.cpp:451 #, kde-kuit-format msgctxt "@action:button" msgid "New Folder..." msgstr "Nieuwe map..." #: filedigger/restoredialog.cpp:141 filedigger/restoredialog.cpp:160 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "No destination was selected, please select one." msgstr "Selecteer een bestemming." #: filedigger/restoredialog.cpp:251 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "There was a problem while getting a list of all files to restore: %1" msgstr "" "Eris een probleem opgetreden tijdens het verkrijgen van de te herstellen " "bestanden: %1" #: filedigger/restoredialog.cpp:264 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "The destination does not have enough space available. Please choose a " "different destination or free some space." msgstr "" "Er is onvoldoende vrije ruimte beschikbaar op de bestemming. Kies een andere " "bestemming of maak ruimte vrij." #: filedigger/restoredialog.cpp:274 #, kde-kuit-format msgctxt "" "added to the suggested filename when restoring, %1 is the time when backup " "was taken" msgid " - saved at %1" msgstr "- opgeslagen op %1" #: filedigger/restoredialog.cpp:275 #, kde-kuit-format msgctxt "@info" msgid "Folder already exists, please choose a solution" msgstr "De map bestaat al; kies een oplossing" #: filedigger/restoredialog.cpp:281 #, kde-kuit-format msgctxt "@info" msgid "File already exists" msgstr "Het bestand bestaat al" #: filedigger/restoredialog.cpp:294 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "The new name entered already exists, please enter a different one." msgstr "De nieuwe, ingevoerde naam bestaat al; kies een andere." #: filedigger/restoredialog.cpp:371 kcm/dirselector.cpp:50 #, kde-kuit-format msgctxt "default folder name when creating a new folder" msgid "New Folder" msgstr "Nieuwe map" #: filedigger/restoredialog.cpp:376 kcm/dirselector.cpp:55 #, kde-kuit-format msgctxt "@title:window" msgid "New Folder" msgstr "Nieuwe map" #: filedigger/restoredialog.cpp:377 kcm/dirselector.cpp:56 #, kde-kuit-format msgctxt "@label:textbox" msgid "" "Create new folder in:\n" "%1" msgstr "" "Nieuwe map creëren in:\n" "%1" #: filedigger/restoredialog.cpp:390 kcm/dirselector.cpp:68 #, kde-format msgid "A folder named %1 already exists." msgstr "Er bestaat al een map met de naam %1." #: filedigger/restoredialog.cpp:396 kcm/dirselector.cpp:74 #, kde-format msgid "You do not have permission to create %1." msgstr "U heeft geen rechten om %1 te mogen creëren." #: filedigger/restorejob.cpp:99 #, kde-kuit-format msgctxt "progress report, current operation" msgid "Restoring" msgstr "Bezig met herstellen" #: filedigger/restorejob.cpp:100 #, kde-kuit-format msgctxt "progress report, label" msgid "File:" msgstr "Bestand:" #: filedigger/versionlistdelegate.cpp:135 #, kde-kuit-format msgctxt "@action:button" msgid "Open" msgstr "Openen" #: filedigger/versionlistdelegate.cpp:137 #, kde-kuit-format msgctxt "@action:button" msgid "Restore" msgstr "Herstellen" #: kcm/backupplanwidget.cpp:282 #, kde-kuit-format msgctxt "@action:button" msgid "Exclude Folder" msgstr "Map uitsluiten" #: kcm/backupplanwidget.cpp:285 #, kde-kuit-format msgctxt "@action:button" msgid "Include Folder" msgstr "Map opnemen" #: kcm/backupplanwidget.cpp:382 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "You don't have permission to read this folder: %1It cannot be included in the source selection. If it does not contain " "anything important to you, one possible solution is to exclude the folder " "from the backup plan." msgstr "" "U beschikt niet over de juiste rechten om deze map te mogen lezen: " "%1 De map kan daarom niet worden opgenomen in de " "bronselectie. Als er geen belangrijke dingen instaan, dan kunt u ervoor " "kiezen om de map uit te sluiten." #: kcm/backupplanwidget.cpp:393 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "You don't have permission to read this file: %1It " "cannot be included in the source selection. If the file is not important to " "you, one possible solution is to exclude the whole folder where the file is " "stored from the backup plan." msgstr "" "U beschikt niet over de juiste rechten om dit bestand te mogen lezen: " "%1 Het bestand kan daarom niet worden opgenomen in " "de bronselectie. Als er geen belangrijke dingen instaan, dan kunt u ervoor " "kiezen om het bestand uit te sluiten." #: kcm/backupplanwidget.cpp:409 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "The symbolic link %1 is currently included but it " "points to a folder which is not: %2.That is " "probably not what you want. One solution is to simply include the target " "folder in the backup plan." msgstr "" "De symbolische link, %1, is momenteel opgenomen maar " "verwijst naar een map die niet %2 is. U wilt dit " "waarschijnlijk niet. U kunt ervoor kiezen om de doelmap op te nemen." #: kcm/backupplanwidget.cpp:417 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "The symbolic link %1 is currently included but it " "points to a file which is not: %2.That is probably " "not what you want. One solution is to simply include the folder where the " "file is stored in the backup plan." msgstr "" "De symbolische link, %1, is momenteel opgenomen maar " "verwijst naar een bestand dat niet %2 is. U wilt " "dit waarschijnlijk niet. U kunt ervoor kiezen om de map waarin het bestand " "zich bevindt op te nemen." #: kcm/backupplanwidget.cpp:440 #, kde-kuit-format msgctxt "@title:window" msgid "Select Folder" msgstr "Map selecteren" #: kcm/backupplanwidget.cpp:478 #, kde-kuit-format msgctxt "@label" msgid "Description:" msgstr "Omschrijving:" #: kcm/backupplanwidget.cpp:481 #, kde-kuit-format msgctxt "@action:button" msgid "Back to overview" msgstr "Terug naar overzicht" #: kcm/backupplanwidget.cpp:510 #, kde-kuit-format msgctxt "@info" msgid "" "This type of backup is an archive. It contains both the " "latest version of your files and earlier backed up versions. Using this type " "of backup allows you to recover older versions of your files, or files which " "were deleted on your computer at a later time. The storage space needed is " "minimized by looking for common parts of your files between versions and " "only storing those parts once. Nevertheless, the backup archive will keep " "growing in size as time goes by.Also important to know is that the " "files in the archive can not be accessed directly with a general file " "manager, a special program is needed." msgstr "" "Dit type back-up is een archief. Het bevat zowel de " "laatste versie van uw bestanden alsmede eerder geback-upte versies. Dit type " "back-up stelt u in staat om oudere versies van uw bestanden te herstellen of " "bestanden die u later verwijdert heeft op uw computer. De benodigde " "opslagruimte wordt zo beperkt mogelijk gehouden omdat er alleen wordt " "gekeken naar de veelvoorkomende delen van uw bestanden tussen versies. Tóch " "zal het back-uparchief t.z.t. groeien. Ook belangrijk om te weten is " "dat bestanden in het archief niet direct kunnen worden benaderd met een " "algeneme bestandsbeheerder; een speciale applicatie is hiervoor vereist." #: kcm/backupplanwidget.cpp:525 #, kde-kuit-format msgctxt "@option:radio" msgid "" "Versioned Backup (not available because bup is " "not installed)" msgstr "" "Back-up met versiebeheer (niet beschikbaar omdat bup niet geïnstalleerd is)" #: kcm/backupplanwidget.cpp:530 #, kde-kuit-format msgctxt "@option:radio" msgid "Versioned Backup (recommended)" msgstr "Back-up met versiebeheer (aanbevolen)" #: kcm/backupplanwidget.cpp:535 #, kde-kuit-format msgctxt "@info" msgid "" "This type of backup is a folder which is synchronized with your selected " "source folders. Taking a backup simply means making the backup destination " "contain an exact copy of your source folders as they are now and nothing " "else. If a file has been deleted in a source folder it will get deleted from " "the backup folder.This type of backup can protect you against data loss " "due to a broken hard drive but it does not help you to recover from your own " "mistakes." msgstr "" "Dit type back-up is een map die wordt gesynchroniseerd met uw geselecteerde " "bronmappen. Het maken van een back-up betekent simpelweg dat de back-" "upbestemming een exacte kopie bevat van uw bronmappen zoals ze op dit moment " "zijn. Als een bestand verwijderd wordt in de bronmap, dan wordt deze tevens " "verwijderd uit de back-upmap. Dit type back-up kan u beschermen tegen " "gegevensverlies door een kapotte harde schijf maar helpt u niet herstellen " "na zelf fouten gemaakt te hebben." #: kcm/backupplanwidget.cpp:548 #, kde-kuit-format msgctxt "@option:radio" msgid "" "Synchronized Backup (not available because rsync " "is not installed)" msgstr "" "Gesynchroniseerde back-up (niet beschikbaar omdat rsync niet geïnstalleerd is)" #: kcm/backupplanwidget.cpp:553 #, kde-kuit-format msgctxt "@option:radio" msgid "Synchronized Backup" msgstr "Gesynchroniseerde back-up" #: kcm/backupplanwidget.cpp:581 #, kde-kuit-format msgctxt "@title" msgid "Backup Type" msgstr "Back-uptype" #: kcm/backupplanwidget.cpp:582 #, kde-kuit-format msgctxt "@label" msgid "Select what type of backup you want" msgstr "Selecteer het te gebruiken back-uptype" #: kcm/backupplanwidget.cpp:590 #, kde-kuit-format msgctxt "@title" msgid "Sources" msgstr "Bronnen" #: kcm/backupplanwidget.cpp:591 #, kde-kuit-format msgctxt "@label" msgid "Select which folders to include in backup" msgstr "Selecteer de mappen die u wilt opnemen in de back-up" #: kcm/backupplanwidget.cpp:605 #, kde-kuit-format msgctxt "@option:radio" msgid "Filesystem Path" msgstr "Bestandssysteempad" #: kcm/backupplanwidget.cpp:606 #, kde-kuit-format msgctxt "@option:radio" msgid "External Storage" msgstr "Externe opslag" #: kcm/backupplanwidget.cpp:612 #, kde-kuit-format msgctxt "@info" msgid "" "You can use this option for backing up to a secondary internal harddrive, an " "external eSATA drive or networked storage. The requirement is just that you " "always mount it at the same path in the filesystem. The path specified here " "does not need to exist at all times, its existance will be monitored." msgstr "" "U kunt deze optie gebruiken om back-ups te maken naar een tweede interne " "harde schijf, een externe eSATA-schijf of een netwerkschijf. De enige " "vereiste is dat u de schijf altijd aankoppelt op hetzelfde pad in het " "bestandssysteem. Het hier opgegeven pad hoeft niet altijd te bestand; het " "bestand wordt gemonitord." #: kcm/backupplanwidget.cpp:619 #, kde-kuit-format msgctxt "@label:textbox" msgid "Destination Path for Backup:" msgstr "Bestemmingspad voor back-up:" #: kcm/backupplanwidget.cpp:638 #, kde-kuit-format msgctxt "@info" msgid "" "Use this option if you want to backup your files on an external storage that " "can be plugged in to this computer, such as a USB hard drive or memory stick." msgstr "" "Gebruik deze optie als u uw bestanden wilt back-uppen op een externe schijf, " "zoals een USB-schijf of -stick." #: kcm/backupplanwidget.cpp:648 kcm/backupplanwidget.cpp:652 #, kde-kuit-format msgctxt "@info:tooltip" msgid "The specified folder will be created if it does not exist." msgstr "Als de opgegeven map niet bestaat, dan zal deze worden gecreëerd." #: kcm/backupplanwidget.cpp:650 #, kde-kuit-format msgctxt "@label:textbox" msgid "Folder on Destination Drive:" msgstr "Map op bestemmingsschijf:" #: kcm/backupplanwidget.cpp:658 #, kde-kuit-format msgctxt "@info:tooltip" msgid "Open dialog to select a folder" msgstr "Dialoogvenster openen om map te selecteren" #: kcm/backupplanwidget.cpp:688 #, kde-kuit-format msgctxt "@title" msgid "Destination" msgstr "Bestemming" #: kcm/backupplanwidget.cpp:689 #, kde-kuit-format msgctxt "@label" msgid "Select the backup destination" msgstr "Selecteer de back-upbestemming" #: kcm/backupplanwidget.cpp:706 #, kde-kuit-format msgctxt "@option:radio" msgid "Manual Activation" msgstr "Handmatig activeren" #: kcm/backupplanwidget.cpp:707 #, kde-kuit-format msgctxt "@option:radio" msgid "Interval" msgstr "Tussenpoos" #: kcm/backupplanwidget.cpp:708 #, kde-kuit-format msgctxt "@option:radio" msgid "Active Usage Time" msgstr "Actieve gebruikstijd" #: kcm/backupplanwidget.cpp:710 #, kde-kuit-format msgctxt "@info" msgid "" "Backups are only taken when manually requested. This can be done by using " "the popup menu from the backup system tray icon." msgstr "" "Back-ups worden alleen gemaakt als u er handmatig om vraagt. Dit kan worden " "gedaan middels het pop-upmenu van het systeemvakpictogram." #: kcm/backupplanwidget.cpp:724 #, kde-kuit-format msgctxt "@info" msgid "" "New backup will be triggered when backup destination becomes available and " "more than the configured interval has passed since the last backup was taken." msgstr "" "Er zal een nieuwe back-up worden gemaakt zodra de back-upbestemming " "beschikbaar is en er langer verstreken is dan de opgegeven tussenpoos." #: kcm/backupplanwidget.cpp:741 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Minutes" msgstr "Minuten" #: kcm/backupplanwidget.cpp:742 kcm/backupplanwidget.cpp:769 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Hours" msgstr "Uur" #: kcm/backupplanwidget.cpp:743 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Days" msgstr "Dagen" #: kcm/backupplanwidget.cpp:744 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Weeks" msgstr "Weken" #: kcm/backupplanwidget.cpp:754 #, kde-kuit-format msgctxt "@info" msgid "" "New backup will be triggered when backup destination becomes available and " "you have been using your computer actively for more than the configured time " "limit since the last backup was taken." msgstr "" "Er zal een nieuwe back-up worden gemaakt zodra de back-upbestemming " "beschikbaar is en u de computer langt heeft gebruikt dan het opgegeven " "tijdslimiet." #: kcm/backupplanwidget.cpp:775 #, kde-kuit-format msgctxt "@option:check" msgid "Ask for confirmation before taking backup" msgstr "Om bevestiging vragen alvorens te back-uppen" #: kcm/backupplanwidget.cpp:794 #, kde-kuit-format msgctxt "@title" msgid "Schedule" msgstr "Inplannen" #: kcm/backupplanwidget.cpp:795 #, kde-kuit-format msgctxt "@label" msgid "Specify the backup schedule" msgstr "Geef het back-upschema op" #: kcm/backupplanwidget.cpp:808 #, kde-kuit-format msgctxt "@option:check" msgid "Show hidden folders in source selection" msgstr "Verborgen mappen weergeven in bronselectie" #: kcm/backupplanwidget.cpp:814 #, kde-kuit-format msgctxt "@info" msgid "" "This makes it possible to explicitly include or exclude hidden folders in " "the backup source selection. Hidden folders have a name that starts with a " "dot. They are typically located in your home folder and are used to store " "settings and temporary files for your applications." msgstr "" "Dit maakt het mogelijk om verborgen mappen expliciet op te nemen in of uit " "te sluiten van de back-up bronselectie. Verborgen mappen hebben een naam die " "begint met een punt. Ze zijn meestal te vinden in uw persoonlijke map en " "worden gebruikt om instellingen en tijdelijke bestanden van applicaties op " "te slaan." #: kcm/backupplanwidget.cpp:832 #, kde-kuit-format msgctxt "@info" msgid "" "This will make your backups use around 10% more storage space and saving " "backups will take slightly longer time. In return it will be possible to " "recover from a partially corrupted backup." msgstr "" "Dit zorgt ervoor dat uw back-ups ong. 10% meer opslagruimte in beslag nemen. " "Ook duurt het maken van back-ups iets langer. Wél is het hierdoor mogelijk " "om te herstellen van een deels beschadigde back-up." #: kcm/backupplanwidget.cpp:838 #, kde-kuit-format msgctxt "@option:check" msgid "Generate recovery information" msgstr "Herstelinformatie genereren" #: kcm/backupplanwidget.cpp:840 #, kde-kuit-format msgctxt "@option:check" msgid "" "Generate recovery information (not available because par2 is not installed)" msgstr "" "Herstelinformatie genereren (niet beschikbaar omdat par2 niet is geïnstalleerd)" #: kcm/backupplanwidget.cpp:856 #, kde-kuit-format msgctxt "@option:check" msgid "Verify integrity of backups" msgstr "Integriteit van back-ups verifiëren" #: kcm/backupplanwidget.cpp:860 #, kde-kuit-format msgctxt "@info" msgid "" "Checks the whole backup archive for corruption every time you save new data. " "Saving backups will take a little bit longer time but it allows you to catch " "corruption problems sooner than at the time you need to use a backup, at " "that time it could be too late." msgstr "" "Controleert het gehele back-uparchief op beschadigingen elke keer als u " "nieuwe gegevens back-upt. Het opslaan van back-ups duurt iets langer maar " "het stelt u in staat om beschadigingen eerder op te sporen, voordat het te " "laat is." #: kcm/backupplanwidget.cpp:882 #, kde-kuit-format msgctxt "@title" msgid "Advanced" msgstr "Geavanceerd" #: kcm/backupplanwidget.cpp:883 #, kde-kuit-format msgctxt "@label" msgid "Extra options for advanced users" msgstr "Extra opties voor geavanceerde gebruikers" #: kcm/driveselection.cpp:275 #, kde-kuit-format msgctxt "@label Only shown if no drives are detected" msgid "" "Plug in the external storage you wish to use, then select it in this list." msgstr "" "Plug de te gebruiken externe opslag in en selecteer hem dan in deze lijst." #: kcm/driveselectiondelegate.cpp:75 #, kde-kuit-format msgctxt "@item:inlistbox this text is added if selected drive is disconnected" msgid " (disconnected)" msgstr "(verbinding verbroken)" #: kcm/driveselectiondelegate.cpp:78 #, kde-kuit-format msgctxt "@label %1 is amount of free storage space of hard drive" msgid "%1 free" msgstr "%1 vrije ruimte" #: kcm/driveselectiondelegate.cpp:92 #, kde-kuit-format msgctxt "" "@item:inlistbox used for unnamed filesystems, more than one filesystem on " "device. %1 is partition number, %2 is device description, %3 is either empty " "or the \" (disconnected)\" text" msgid "Partition %1 on %2%3" msgstr "Partitie %1 op %2%3" #: kcm/driveselectiondelegate.cpp:95 #, kde-kuit-format msgctxt "" "@item:inlistbox used when there is only one unnamed filesystem on device. %1 " "is device description, %2 is either empty or the \" (disconnected)\" text" msgid "%1%2" msgstr "%1%2" #: kcm/driveselectiondelegate.cpp:99 #, kde-kuit-format msgctxt "" "@item:inlistbox %1 is filesystem label, %2 is the device description, %3 is " "either empty or the \" (disconnected)\" text" msgid "%1 on %2%3" msgstr "%1 op %2%3" #: kcm/driveselectiondelegate.cpp:106 #, kde-kuit-format msgctxt "@item:inlistbox %1 is drive(partition) label, %2 is storage capacity" msgid "%1: %2 total capacity" msgstr "%1: %2 totale opslagruimte" #: kcm/driveselectiondelegate.cpp:153 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "" "Warning: Symbolic links and file permissions can not be saved to this file " "system. File permissions only matters if there is more than one user of this " "computer or if you are backing up executable program files." msgstr "" "Waarschuwing: zachte koppelingen en bestandsrechten kunnen niet worden " "opgeslagen op dit bestandssysteem. Bestandsrechten zijn alleen belangrijk " "als er meer dan één gebruiker aanwezig is op deze computer of als u " "uitvoerbare bestanden back-upt." #: kcm/driveselectiondelegate.cpp:157 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "" "Warning: File permissions can not be saved to this file system. File " "permissions only matters if there is more than one user of this computer or " "if you are backing up executable program files." msgstr "" "Waarschuwing: bestandsrechten kunnen niet worden opgeslagen op dit " "bestandssysteem. Bestandsrechten zijn alleen belangrijk als er meer dan één " "gebruiker aanwezig is op deze computer of als u uitvoerbare bestanden back-" "upt." #: kcm/folderselectionmodel.cpp:107 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "" "%1will be included in the backup, except for " "unchecked subfolders" msgstr "" "%1zal worden opgenomen in de back-up, m.u.v. niet-" "aangevinkte submappen" #: kcm/folderselectionmodel.cpp:111 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "%1will be included in the backup" msgstr "%1zal worden opgenomen in de back-up" #: kcm/folderselectionmodel.cpp:115 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "" "%1 will not be included in " "the backup but contains folders that will" msgstr "" "%1zalnietworden opgenomen in " "de back-up, maar bevat mappen die wél worden opgenomen" #: kcm/folderselectionmodel.cpp:119 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "" "%1 will not be included in " "the backup" msgstr "" "%1zalnietworden opgenomen in " "de back-up" #: kcm/kupkcm.cpp:49 #, kde-format msgid "Kup Configuration Module" msgstr "Kup-configuratiemodule" #: kcm/kupkcm.cpp:51 #, kde-format msgid "Configuration of backup plans for the Kup backup system" msgstr "Configuratie van back-upschema's voor het Kup-systeem" #: kcm/kupkcm.cpp:54 #, kde-format msgid "Maintainer" msgstr "Beheerder" #: kcm/kupkcm.cpp:87 #, kde-format msgid "" "

Backup programs are missing

Before you can activate any backup " "plan you need to install either of

  • bup, for versioned backups
  • rsync, for synchronized backups
" msgstr "" "

Ontbrekende back-upapplicaties

Voordat u een back-upschema kunt " "activeren, moet u óf

  • bup (voor back-ups met versiebeheer)óf
  • rsync (voor gesynchroniseerde back-ups)
  • installeren
" #: kcm/kupkcm.cpp:168 #, kde-kuit-format msgctxt "@title:window" msgid "Warning" msgstr "Waarschuwing" #: kcm/kupkcm.cpp:170 #, kde-kuit-format msgctxt "@info %1 is the name of the backup plan" msgid "" "%1 does not have a destination!No backups will be saved by this plan." msgstr "" "%1 heeft geen bestemming! Er zullen geen back-ups worden gemaakt aan de " "hand van dit schema." #: kcm/kupkcm.cpp:227 #, kde-kuit-format msgctxt "@action:button" msgid "Add New Plan" msgstr "Nieuw schema toevoegen" #: kcm/kupkcm.cpp:238 #, kde-kuit-format msgctxt "@option:check" msgid "Backups Enabled" msgstr "Back-ups ingeschakeld" #: kcm/planstatuswidget.cpp:48 #, kde-kuit-format msgctxt "@action:button" msgid "Configure" msgstr "Instellen" #: kcm/planstatuswidget.cpp:51 #, kde-kuit-format msgctxt "@action:button" msgid "Remove" msgstr "Verwijderen" #: kcm/planstatuswidget.cpp:54 #, kde-kuit-format msgctxt "@action:button" msgid "Duplicate" msgstr "Dupliceren" #: kioslave/bupslave.cpp:92 kioslave/bupslave.cpp:149 kioslave/bupslave.cpp:186 #: kioslave/bupslave.cpp:249 kioslave/bupslave.cpp:271 #, kde-format msgid "" "No bup repository found.\n" "%1" msgstr "" "Geen bup-bron gevonden.\n" "%1" #: plasmoid/contents/ui/FullRepresentation.qml:88 #, kde-format msgid "Save new backup" msgstr "Nieuwe back-up maken" #: plasmoid/contents/ui/FullRepresentation.qml:94 #, kde-format msgid "Show files" msgstr "Bestanden weergeven" #: plasmoid/contents/ui/FullRepresentation.qml:99 #, kde-format msgid "Show log file" msgstr "Logbestand weergeven" #. i18n: file: filedigger/restoredialog.ui:14 #. i18n: ectx: property (windowTitle), widget (QDialog, RestoreDialog) #: po/rc.cpp:3 rc.cpp:3 #, kde-format msgctxt "@title:window" msgid "Restore Guide" msgstr "Herstelhandleiding" #. i18n: file: filedigger/restoredialog.ui:55 #. i18n: ectx: property (text), widget (QPushButton, mRestoreOriginalButton) #: po/rc.cpp:6 rc.cpp:6 #, kde-format msgctxt "@action:button" msgid "Restore to original location" msgstr "Terugzetten op originele locatie" #. i18n: file: filedigger/restoredialog.ui:78 #. i18n: ectx: property (text), widget (QPushButton, mRestoreCustomButton) #: po/rc.cpp:9 rc.cpp:9 #, kde-format msgctxt "@action:button" msgid "Choose where to restore" msgstr "Kies de herstellocatie" #. i18n: file: filedigger/restoredialog.ui:132 #. i18n: ectx: property (text), widget (QPushButton, mDestBackButton) #: po/rc.cpp:12 rc.cpp:12 #, kde-format msgctxt "@action:button" msgid "Back" msgstr "Vorige" #. i18n: file: filedigger/restoredialog.ui:144 #. i18n: ectx: property (text), widget (QPushButton, mDestNextButton) #: po/rc.cpp:15 rc.cpp:15 #, kde-format msgctxt "@action:button" msgid "Next" msgstr "Volgende" #. i18n: file: filedigger/restoredialog.ui:175 #. i18n: ectx: property (text), widget (QRadioButton, mNewNameRadioButton) #: po/rc.cpp:18 rc.cpp:18 #, kde-format msgctxt "@option:radio " msgid "Restore the folder under a new name" msgstr "Map herstellen met nieuwe naam" #. i18n: file: filedigger/restoredialog.ui:208 #. i18n: ectx: property (text), widget (QRadioButton, mOverwriteRadioButton) #: po/rc.cpp:21 rc.cpp:21 #, kde-format msgctxt "@option:radio" msgid "Merge folders" msgstr "Mappen samenvoegen" #. i18n: file: filedigger/restoredialog.ui:238 #. i18n: ectx: property (text), widget (QLabel, mConfirmOverwriteLabel) #: po/rc.cpp:24 rc.cpp:24 #, kde-format msgctxt "@info Question to user, in dialog" msgid "" "The following files would be overwritten, please confirm that you wish to " "continue." msgstr "" "De volgende bestanden worden overschreven. Bevestig dat u door wilt gaan." #. i18n: file: filedigger/restoredialog.ui:274 #. i18n: ectx: property (text), widget (QPushButton, mOverwriteBackButton) #: po/rc.cpp:27 rc.cpp:27 #, kde-format msgctxt "@action:button go to previous page in dialog" msgid "Back" msgstr "Terug" #. i18n: file: filedigger/restoredialog.ui:286 #. i18n: ectx: property (text), widget (QPushButton, mConfirmButton) #: po/rc.cpp:30 rc.cpp:30 #, kde-format msgctxt "@action:button User answers \"yes I confirm: overwrite files\"" msgid "Confirm" msgstr "Bevestigen" #. i18n: file: filedigger/restoredialog.ui:341 #. i18n: ectx: property (text), widget (QLabel, mErrorLabel) #: po/rc.cpp:33 rc.cpp:33 #, fuzzy, kde-format msgctxt "@label above the detailed error message" msgid "An error occured while restoring:" msgstr "Er is een fout opgetreden tijdens het herstellen van:" #. i18n: file: filedigger/restoredialog.ui:372 #. i18n: ectx: property (text), widget (QLabel, label) #: po/rc.cpp:36 rc.cpp:36 #, fuzzy, kde-format msgctxt "@label" msgid "Restoration completed successfully!" msgstr "Succesvol hersteld!" #. i18n: file: filedigger/restoredialog.ui:413 #. i18n: ectx: property (text), widget (QPushButton, mOpenDestinationButton) #: po/rc.cpp:39 rc.cpp:39 #, kde-format msgid "Open Destination" msgstr "Bestemming openen" #. i18n: file: filedigger/restoredialog.ui:472 #. i18n: ectx: property (text), widget (QPushButton, mCloseButton) #: po/rc.cpp:42 rc.cpp:42 #, kde-format msgctxt "@action:button" msgid "Close" msgstr "Sluiten" #: po/rc.cpp:43 po/rc.cpp:58 settings/backupplan.cpp:69 rc.cpp:43 rc.cpp:58 #, kde-format msgid "Backups" msgstr "Back-ups" #: po/rc.cpp:44 rc.cpp:44 msgid "Configure backup plans" msgstr "Back-upschema's instellen" #: po/rc.cpp:45 rc.cpp:45 msgid "backup,recovery,safety" msgstr "back-up,herstel,veiligheid" #: po/rc.cpp:46 rc.cpp:46 msgid "Kup" msgstr "Ku" #: po/rc.cpp:48 rc.cpp:48 msgid "Start taking backup" msgstr "Beginnen met maken van back-up" #: po/rc.cpp:49 rc.cpp:49 msgid "A question if user wants to start taking a backup" msgstr "" "Een vraag aan de gebuikers of deze wil beginnen met het maken van een back-up" #: po/rc.cpp:50 rc.cpp:50 msgid "Backup succeeded" msgstr "Back-up voltooid" #: po/rc.cpp:51 rc.cpp:51 msgid "Saving of backup successfully completed" msgstr "De back-up is succesvol gemaakt" #: po/rc.cpp:52 rc.cpp:52 msgid "Backup failed" msgstr "Back-up mislukt" #: po/rc.cpp:53 rc.cpp:53 msgid "Saving of backup failed, offer user to see log file" msgstr "" "Het maken van de back-up is mislukt; biedt aan om het logbestand te bekijken" #: po/rc.cpp:54 rc.cpp:54 msgid "Integrity check completed" msgstr "Integriteitscontrole voltooid" #: po/rc.cpp:55 rc.cpp:55 msgid "Finished checking integrity of backup archive" msgstr "Integriteitscontrole van back-uparchief is voltooid" #: po/rc.cpp:56 rc.cpp:56 msgid "Repair completed" msgstr "Reparatie voltooid" #: po/rc.cpp:57 rc.cpp:57 msgid "Finished repairing backup archive" msgstr "Repareren van back-uparchief is voltooid" #: po/rc.cpp:59 rc.cpp:59 msgid "Status of backup plans" msgstr "Status van back-upschema's" #: po/rc.cpp:60 rc.cpp:60 msgid "Backup Status" msgstr "Back-upstatus" #: po/rc.cpp:61 rc.cpp:61 msgid "Displays status of backup plans" msgstr "Status van back-upschema's weergeven" #: settings/backupplan.cpp:38 #, kde-kuit-format msgctxt "" "@label Default name for a new backup plan, %1 is the number of the plan in " "order" msgid "Backup plan %1" msgstr "Back-upschema: %1" #: settings/backupplan.cpp:101 #, kde-format msgctxt "default description of newly duplicated backup plan" msgid "%1 (copy)" msgstr "%1 (kopie)" #: settings/backupplan.cpp:213 #, kde-format msgctxt "%1 is fancy formatted date" msgid "Last saved: %1" msgstr "Laatst opgeslagen: %1" #: settings/backupplan.cpp:218 #, kde-format msgctxt "%1 is storage size of archive" msgid "Size: %1" msgstr "Grootte: %1" #: settings/backupplan.cpp:223 #, kde-format msgctxt "%1 is free storage space" msgid "Free space: %1" msgstr "Vrije ruimte: %1" #: settings/backupplan.cpp:227 #, kde-kuit-format msgctxt "@label" msgid "This backup plan has never been run." msgstr "Dit back-upschema is nog nooit uitgevoerd." kup-backup-0.7.1+dfsg/po/pl.po000066400000000000000000001345551322613417100161060ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Marcin Kralka , 2014 # Marcin Kralka , 2014 # Przemyslaw Ka. , 2017 # Simon Persson , 2014 # Simon Persson , 2014-2015 msgid "" msgstr "" "Project-Id-Version: kup\n" "Report-Msgid-Bugs-To: http://kde-apps.org/content/show.php/Kup+Backup+System?" "content=147465\n" "POT-Creation-Date: 2018-01-05 16:00+0800\n" "PO-Revision-Date: 2017-09-23 19:34+0000\n" "Last-Translator: Przemyslaw Ka. \n" "Language-Team: Polish (http://www.transifex.com/kup/kup/language/pl/)\n" "Language: pl\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==1 ? 0 : (n%10>=2 && n%10<=4) && (n" "%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n" "%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" #: daemon/bupjob.cpp:47 daemon/buprepairjob.cpp:38 #: daemon/bupverificationjob.cpp:37 #, kde-kuit-format msgctxt "@info notification" msgid "" "The bup program is needed but could not be found, " "maybe it is not installed?" msgstr "" "Program bup jest wymagany, ale nie może zostać " "odnaleziony, może nie jest zainstalowany?" #: daemon/bupjob.cpp:52 daemon/buprepairjob.cpp:43 #, kde-kuit-format msgctxt "@info notification" msgid "" "The par2 program is needed but could not be " "found, maybe it is not installed?" msgstr "" "Program par2 jest wymagany, ale nie może zostać " "odnaleziony, może nie jest zainstalowany?" #: daemon/bupjob.cpp:71 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup destination could not be initialised. See log file for more details." msgstr "" "Inicjalizacja kopii w miejscu docelowym nie powiodła się. Aby uzyskać " "bardziej szczególowe informacje, przejrzyj plik dziennika." #: daemon/bupjob.cpp:93 #, kde-format msgid "Checking backup integrity" msgstr "Sprawdzanie spójności kopii" #: daemon/bupjob.cpp:104 daemon/bupverificationjob.cpp:67 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups could be corrupted! See log file " "for more details. Do you want to try repairing the backup files?" msgstr "" "Sprawdzanie spójności kopii zapasowej nie powiodło się. Kopie zapasowe mogą " "być uszkodzone! Aby uzyskać bardziej szczególowe informacje, przejrzyj plik " "dziennika. Czy chcesz spróbować naprawić pliki kopii ?" #: daemon/bupjob.cpp:108 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups could be corrupted! See log file " "for more details." msgstr "" "Nie udało się dokonać sprawdzenia spójności kopii. Kopie zapasowe mogą być " "uszkodzone! Aby uzyskać bardziej szczególowe informacje, przejrzyj plik " "dziennika." #: daemon/bupjob.cpp:131 daemon/rsyncjob.cpp:57 #, kde-format msgid "Checking what to copy" msgstr "Poszukiwanie danych do skopiowania" #: daemon/bupjob.cpp:138 #, kde-kuit-format msgctxt "@info notification" msgid "Failed to analyze files. See log file for more details." msgstr "" "Nie udało się przeanalizować plików. Aby uzyskać bardziej szczególowe " "informacje, przejrzyj plik dziennika." #: daemon/bupjob.cpp:159 daemon/bupjob.cpp:253 daemon/rsyncjob.cpp:175 #, kde-format msgid "Saving backup" msgstr "Zapisywanie kopii" #: daemon/bupjob.cpp:167 daemon/rsyncjob.cpp:120 #, kde-kuit-format msgctxt "@info notification" msgid "Failed to save backup. See log file for more details." msgstr "" "Nie udało się zapisać kopii. Aby uzyskać bardziej szczególowe informacje, " "przejrzyj plik dziennika." #: daemon/bupjob.cpp:189 #, kde-format msgid "Generating recovery information" msgstr "Generowanie informacji ratunkowych" #: daemon/bupjob.cpp:197 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed to generate recovery info for the backup. See log file for more " "details." msgstr "" "Nie udało się wygenerować informacji ratunkowych dla kopii zapasowej. Aby " "uzyskać szczegółowe informacje, przejrzyj plik dziennika." #: daemon/bupjob.cpp:254 daemon/rsyncjob.cpp:176 #, kde-format msgctxt "Label for file currently being copied" msgid "File" msgstr "Plik" #: daemon/buprepairjob.cpp:72 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup repair failed. Your backups could be corrupted! See log file for more " "details." msgstr "" "Naprawa kopii nie powiodła się. Kopie zapasowe mogą być uszkodzone! Aby " "uzyskać bardziej szczególowe informacje, przejrzyj plik dziennika." #: daemon/buprepairjob.cpp:76 #, kde-kuit-format msgctxt "@info notification" msgid "Success! Backup repair worked. See log file for more details." msgstr "" "Sukces! Naprawa kopii udała się. Aby uzyskać bardziej szczególowe " "informacje, przejrzyj plik dziennika." #: daemon/buprepairjob.cpp:80 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup repair was not necessary. Your backups are not corrupted.See log file " "for more details." msgstr "" "Naprawa kopii nie była potrzebna. Kopie zapasowe nie są uszkodzone. Aby " "uzyskać bardziej szczególowe informacje, przejrzyj plik dziennika." #: daemon/buprepairjob.cpp:85 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup repair failed. Your backups could still be corrupted! See log file " "for more details." msgstr "" "Naprawa kopii nie powiodła się. Twoje kopie nadal mogą zawierać błędy! Aby " "uzyskać szczegółowe informacje, przejrzyj plik dziennika." #: daemon/bupverificationjob.cpp:70 daemon/bupverificationjob.cpp:87 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups are corrupted! See log file for " "more details." msgstr "" "Sprawdzanie spójności kopii nie powiodło się. Twoje kopie zawierają błędy! " "Aby uzyskać szczegółowe informacje, przejrzyj plik dziennika." #: daemon/bupverificationjob.cpp:76 #, kde-kuit-format msgctxt "@info notification" msgid "Backup integrity test was successful, Your backups are fine." msgstr "" "Test spójności kopii zakończył się sukcesem, kopie zapasowe wyglądają " "poprawnie." #: daemon/bupverificationjob.cpp:83 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups are corrupted! See log file for " "more details. Do you want to try repairing the backup files?" msgstr "" "Sprawdzanie spójności kopii nie powiodło się. Twoje kopie zawierają błędy! " "Aby uzyskać szczegółowe informacje, przejrzyj plik dziennika. Czy chcesz " "wykonać próbę naprawy plików kopii?" #: daemon/edexecutor.cpp:115 daemon/edexecutor.cpp:124 #: daemon/edexecutor.cpp:160 daemon/fsexecutor.cpp:114 #: daemon/fsexecutor.cpp:146 #, kde-kuit-format msgctxt "@title:window" msgid "Problem" msgstr "Problem" #: daemon/edexecutor.cpp:116 daemon/fsexecutor.cpp:115 #, kde-kuit-format msgctxt "notification" msgid "Invalid type of backup in configuration." msgstr "Nieprawidłowy typ kopii zapasowej w konfiguracji." #: daemon/edexecutor.cpp:125 #, kde-kuit-format msgctxt "notification" msgid "You don't have write permission to backup destination." msgstr "Nie masz uprawnień do zapisu kopii w miejscu docelowym." #: daemon/kupdaemon.cpp:171 #, kde-format msgid "Continue" msgstr "Dalej" #: daemon/kupdaemon.cpp:173 #, kde-format msgid "Stop" msgstr "Zatrzymaj" #: daemon/kupdaemon.cpp:175 #, kde-format msgctxt "%1 is a text explaining the current activity" msgid "Currently busy: %1" msgstr "W tej chwili pracuje: %1" #: daemon/kupdaemon.cpp:176 #, kde-format msgid "Do you really want to stop?" msgstr "Czy na pewno chcesz zatrzymać?" #: daemon/kupdaemon.cpp:179 #, kde-format msgid "User Backups" msgstr "Kopie zapasowe użytkownika" #: daemon/kupdaemon.cpp:249 #, kde-format msgctxt "status in tooltip" msgid "Backup destination not available" msgstr "Miejsce docelowe kopii zapasowej nie jest dostępne" #: daemon/kupdaemon.cpp:253 daemon/kupdaemon.cpp:310 #, kde-format msgid "No backup plans configured" msgstr "Nie skonfigurowano żadnego planu tworzenia kopii zapasowych" #: daemon/kupdaemon.cpp:259 #, kde-format msgctxt "status in tooltip" msgid "Backup destination available" msgstr "Miejsce docelowe kopii zapasowej jest dostępne" #: daemon/kupdaemon.cpp:269 daemon/planexecutor.cpp:84 #, kde-format msgctxt "status in tooltip" msgid "Backup status OK" msgstr "Status kopii zapasowej: OK" #: daemon/kupdaemon.cpp:276 daemon/planexecutor.cpp:86 #, kde-format msgctxt "status in tooltip" msgid "New backup suggested" msgstr "Zasugerowano utworzenie nowej kopii zapasowej" #: daemon/kupdaemon.cpp:283 daemon/planexecutor.cpp:88 #, kde-format msgctxt "status in tooltip" msgid "New backup neeeded" msgstr "Konieczne jest utworzenie nowej kopii zapasowej" #: daemon/main.cpp:41 #, kde-kuit-format msgctxt "@info:shell Error message at startup" msgid "" "Kup is not enabled, enable it from the system settings module. You can do " "that by running kcmshell5 kup" msgstr "" "Kup nie jest włączony, należy go włączyć z poziomu modułu ustawień " "systemowych. Można to zrobić uruchamiając polecenie kcmshell5 kup" #: daemon/main.cpp:47 #, kde-kuit-format msgctxt "@title" msgid "Kup Daemon" msgstr "Demon Kup" #: daemon/main.cpp:48 #, kde-format msgid "" "Kup is a flexible backup solution using the backup storage system 'bup'. " "This allows it to quickly perform incremental backups, only saving the parts " "of files that has actually changed since last backup was taken." msgstr "" "Kup jest elastycznym rozwiązaniem tworzenia kopii zapasowych używającym " "systemu przechowywania kopii 'bup'. Pozwala na szybkie wykonywanie " "przyrostowych kopii, zapisując tylko części plików które zostały zmienione " "od ostatniej zrobionej kopii zapasowej." #: daemon/main.cpp:51 kcm/kupkcm.cpp:52 #, kde-format msgid "Copyright (C) 2011-2015 Simon Persson" msgstr "Wszystkie prawa zastrzeżone (C) 2011-2015 Simon Persson" #: daemon/main.cpp:53 filedigger/main.cpp:51 kcm/kupkcm.cpp:54 #, kde-format msgid "Simon Persson" msgstr "Simon Persson" #: daemon/main.cpp:54 filedigger/main.cpp:52 kcm/kupkcm.cpp:55 #, kde-kuit-format msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "Marcin Kralka,Jacek Baszkiewicz" #: daemon/main.cpp:54 filedigger/main.cpp:52 kcm/kupkcm.cpp:56 #, kde-kuit-format msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "marcink96@gmail.com,jbaszkiewicz@o2.pl" #: daemon/planexecutor.cpp:76 #, kde-format msgctxt "status in tooltip" msgid "Saving backup" msgstr "Zapisywanie kopii" #: daemon/planexecutor.cpp:78 #, kde-format msgctxt "status in tooltip" msgid "Checking backup integrity" msgstr "Sprawdzanie spójności kopii" #: daemon/planexecutor.cpp:80 #, kde-format msgctxt "status in tooltip" msgid "Repairing backups" msgstr "Naprawianie kopii" #: daemon/planexecutor.cpp:118 daemon/planexecutor.cpp:133 #, kde-kuit-format msgctxt "@info" msgid "Do you want to save a first backup now?" msgstr "Czy chcesz teraz zapisać pierwszą kopię zapasową?" #: daemon/planexecutor.cpp:121 #, kde-kuit-format msgctxt "@info" msgid "" "It has been %1 since last backup was saved.\n" "Save a new backup now?" msgstr "" "Upłynęło już %1 od kiedy została zapisana ostatnia kopia zapasowa.\n" "Czy chcesz zapisać kopię teraz?" #: daemon/planexecutor.cpp:137 #, kde-kuit-format msgctxt "@info" msgid "" "You have been active for %1 since last backup was saved.\n" "Save a new backup now?" msgstr "" "Byłeś aktywny na tym komputerze przez %1 od czasu, kiedy została zapisana " "ostatnia kopia zapasowa.\n" "Czy chcesz zapisać kopię teraz?" #: daemon/planexecutor.cpp:170 daemon/planexecutor.cpp:200 #: daemon/planexecutor.cpp:278 #, kde-kuit-format msgctxt "@action:button" msgid "Yes" msgstr "Tak" #: daemon/planexecutor.cpp:170 daemon/planexecutor.cpp:201 #: daemon/planexecutor.cpp:279 #, kde-kuit-format msgctxt "@action:button" msgid "No" msgstr "Nie" #: daemon/planexecutor.cpp:192 #, kde-kuit-format msgctxt "@title:window" msgid "Saving of Backup Failed" msgstr "Zapisywanie kopii nie powiodło się" #: daemon/planexecutor.cpp:197 daemon/planexecutor.cpp:275 #: daemon/planexecutor.cpp:309 #, kde-kuit-format msgctxt "@action:button" msgid "Show log file" msgstr "Wyświetl plik dziennika" #: daemon/planexecutor.cpp:221 #, kde-kuit-format msgctxt "@title:window" msgid "Backup Saved" msgstr "Zapisano kopię" #: daemon/planexecutor.cpp:222 #, kde-kuit-format msgctxt "@info notification" msgid "Saving backup completed successfully." msgstr "Zapisywanie kopii zakończyło się sukcesem." #: daemon/planexecutor.cpp:271 #, kde-kuit-format msgctxt "@title:window" msgid "Integrity Check Completed" msgstr "Zakończono Sprawdzanie Spójności." #: daemon/planexecutor.cpp:306 #, kde-kuit-format msgctxt "@title:window" msgid "Repair Completed" msgstr "Zakończono naprawę" #: daemon/planexecutor.cpp:337 po/rc.cpp:47 rc.cpp:47 #, kde-format msgid "Kup Backup System" msgstr "Kup System Kopii Zapasowych" #: daemon/rsyncjob.cpp:48 #, kde-kuit-format msgctxt "@info notification" msgid "" "The rsync program is needed but could not be " "found, maybe it is not installed?" msgstr "" "Program rsync jest wymagany, ale nie może zostać " "odnaleziony, może nie jest zainstalowany?" #: filedigger/main.cpp:47 #, kde-kuit-format msgctxt "@title" msgid "File Digger" msgstr "Wyszukiwarka plików" #: filedigger/main.cpp:48 #, kde-format msgid "Browser for bup archives." msgstr "Przeglądarka archiwów bup" #: filedigger/main.cpp:49 #, kde-format msgid "Copyright (C) 2013-2015 Simon Persson" msgstr "Wszystkie prawa zastrzeżone (C) 2013-2015 Simon Persson" #: filedigger/main.cpp:59 #, kde-format msgid "Name of the branch to be opened." msgstr "Nazwa gałęzi jaka ma być otwarta." #: filedigger/main.cpp:61 #, kde-format msgid "Path to the bup repository to be opened." msgstr "Ścieżka do repozytorium bup jaka ma zostać otwarta." #: filedigger/main.cpp:70 #, kde-format msgctxt "@info:shell Error message at startup" msgid "" "You must supply the path to a bup or git repository that you wish to open " "for viewing." msgstr "" "Musisz podać ścieżkę do repozytorium bup lub git który chcesz otworzyć do " "wyświetlania." #: filedigger/main.cpp:85 #, kde-kuit-format msgctxt "@info messagebox, %1 is a folder path" msgid "" "The backup archive %1 could not be opened. Check if the " "backups really are located there." msgstr "" "Archiwum kopii zapasowej %1 nie mogło zostać otworzone. " "Upewnij się, że kopie zapasowe znajdują sie właśnie w tym miejscu." #: filedigger/main.cpp:92 #, kde-kuit-format msgctxt "@info messagebox" msgid "You do not have permission needed to read this backup archive." msgstr "Nie masz odpowiednich uprawnień, aby odczytać to archiwum." #: filedigger/mergedvfs.cpp:108 #, kde-kuit-format msgctxt "@info messagebox" msgid "" "Could not read this backup archive. Perhaps some files have become " "corrupted. Do you want to run an integrity check to test this?" msgstr "" "Nie można było odczytać tej kopii. Być może niektóre pliki uległy " "uszkodzeniu. Czy chcesz wykonać kontrolę spójności, aby to sprawdzić?" #: filedigger/mergedvfs.cpp:156 #, kde-kuit-format msgctxt "added after folder name in some cases" msgid " (folder)" msgstr "(folder)" #: filedigger/mergedvfs.cpp:158 #, kde-kuit-format msgctxt "added after file name in some cases" msgid " (symlink)" msgstr "(dowiązanie symboliczne)" #: filedigger/mergedvfs.cpp:160 #, kde-kuit-format msgctxt "added after file name in some cases" msgid " (file)" msgstr "(plik)" #: filedigger/restoredialog.cpp:115 kcm/backupplanwidget.cpp:451 #, kde-kuit-format msgctxt "@action:button" msgid "New Folder..." msgstr "Nowy folder..." #: filedigger/restoredialog.cpp:141 filedigger/restoredialog.cpp:160 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "No destination was selected, please select one." msgstr "Miejsce docelowe nie zostało wybrane, proszę wybrać jedno." #: filedigger/restoredialog.cpp:251 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "There was a problem while getting a list of all files to restore: %1" msgstr "Wystąpił problem podczas pobierania listy plików do odtworzenia: %1" #: filedigger/restoredialog.cpp:264 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "The destination does not have enough space available. Please choose a " "different destination or free some space." msgstr "" "Miejsce docelowe nie posiada wystarczająco wolnego miejsca. Proszę wybrać " "inne miejsce docelowe lub zwolnić trochę miejsca." #: filedigger/restoredialog.cpp:274 #, kde-kuit-format msgctxt "" "added to the suggested filename when restoring, %1 is the time when backup " "was taken" msgid " - saved at %1" msgstr "- zapisano w %1" #: filedigger/restoredialog.cpp:275 #, kde-kuit-format msgctxt "@info" msgid "Folder already exists, please choose a solution" msgstr "Folder już istnieje, proszę wybrać inne rozwiązanie" #: filedigger/restoredialog.cpp:281 #, kde-kuit-format msgctxt "@info" msgid "File already exists" msgstr "Plik już istnieje" #: filedigger/restoredialog.cpp:294 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "The new name entered already exists, please enter a different one." msgstr "Wprowadzona nowa nazwa już istnieje, proszę podać inną." #: filedigger/restoredialog.cpp:371 kcm/dirselector.cpp:50 #, kde-kuit-format msgctxt "default folder name when creating a new folder" msgid "New Folder" msgstr "Nowy Folder" #: filedigger/restoredialog.cpp:376 kcm/dirselector.cpp:55 #, kde-kuit-format msgctxt "@title:window" msgid "New Folder" msgstr "Nowy Folder" #: filedigger/restoredialog.cpp:377 kcm/dirselector.cpp:56 #, kde-kuit-format msgctxt "@label:textbox" msgid "" "Create new folder in:\n" "%1" msgstr "" "Utwórz nowy folder w:\n" "%1" #: filedigger/restoredialog.cpp:390 kcm/dirselector.cpp:68 #, kde-format msgid "A folder named %1 already exists." msgstr "Folder o nazwie %1 już istnieje." #: filedigger/restoredialog.cpp:396 kcm/dirselector.cpp:74 #, kde-format msgid "You do not have permission to create %1." msgstr "Nie masz uprawnień aby utworzyć %1." #: filedigger/restorejob.cpp:99 #, kde-kuit-format msgctxt "progress report, current operation" msgid "Restoring" msgstr "Przywracanie" #: filedigger/restorejob.cpp:100 #, kde-kuit-format msgctxt "progress report, label" msgid "File:" msgstr "Plik:" #: filedigger/versionlistdelegate.cpp:135 #, kde-kuit-format msgctxt "@action:button" msgid "Open" msgstr "Otwórz" #: filedigger/versionlistdelegate.cpp:137 #, kde-kuit-format msgctxt "@action:button" msgid "Restore" msgstr "Przywróć" #: kcm/backupplanwidget.cpp:282 #, kde-kuit-format msgctxt "@action:button" msgid "Exclude Folder" msgstr "Wyklucz Folder" #: kcm/backupplanwidget.cpp:285 #, kde-kuit-format msgctxt "@action:button" msgid "Include Folder" msgstr "Dołącz Folder" #: kcm/backupplanwidget.cpp:382 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "You don't have permission to read this folder: %1It cannot be included in the source selection. If it does not contain " "anything important to you, one possible solution is to exclude the folder " "from the backup plan." msgstr "" "Nie posiadasz uprawnień do odczytu tego folderu: %1Nie można go wybrać jako źródła kopii. Jeśli nie zawiera niczego ważnego, " "jednym z możliwych rozwiązań jest wyłączenie katalogu z planu tworzenia " "kopii. " #: kcm/backupplanwidget.cpp:393 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "You don't have permission to read this file: %1It " "cannot be included in the source selection. If the file is not important to " "you, one possible solution is to exclude the whole folder where the file is " "stored from the backup plan." msgstr "" "Nie posiadasz uprawnień do odczytu dla tego pliku: %1Nie można go wybrać jako źródła kopii. Jeśli plik nie zawiera " "niczego ważnego, jednym z możliwych rozwiązań jest wyłączenie go z planu " "tworzenia kopii." #: kcm/backupplanwidget.cpp:409 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "The symbolic link %1 is currently included but it " "points to a folder which is not: %2.That is " "probably not what you want. One solution is to simply include the target " "folder in the backup plan." msgstr "" "Dowiązanie symboliczne %1 jest dołączone do kopii " "zapasowej, ale wskazuje na katalog, który nie jest: %2." "To prawdopodobnie nie jest pożądana sytuacja. Rozwiązaniem jest " "dołączenie wskazywanego katalogu do planu tworzenia kopii." #: kcm/backupplanwidget.cpp:417 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "The symbolic link %1 is currently included but it " "points to a file which is not: %2.That is probably " "not what you want. One solution is to simply include the folder where the " "file is stored in the backup plan." msgstr "" "Dowiązanie symboliczne %1 jest dołączone do kopii " "zapasowej, ale wskazuje na plik, który nie jest: %2.To prawdopodobnie nie jest pożądana sytuacja. Rozwiązaniem jest dołączenie " "wskazywanego katalogu do planu tworzenia kopii." #: kcm/backupplanwidget.cpp:440 #, kde-kuit-format msgctxt "@title:window" msgid "Select Folder" msgstr "Wybierz folder" #: kcm/backupplanwidget.cpp:478 #, kde-kuit-format msgctxt "@label" msgid "Description:" msgstr "Opis:" #: kcm/backupplanwidget.cpp:481 #, kde-kuit-format msgctxt "@action:button" msgid "Back to overview" msgstr "Wróć do przeglądu" #: kcm/backupplanwidget.cpp:510 #, kde-kuit-format msgctxt "@info" msgid "" "This type of backup is an archive. It contains both the " "latest version of your files and earlier backed up versions. Using this type " "of backup allows you to recover older versions of your files, or files which " "were deleted on your computer at a later time. The storage space needed is " "minimized by looking for common parts of your files between versions and " "only storing those parts once. Nevertheless, the backup archive will keep " "growing in size as time goes by.Also important to know is that the " "files in the archive can not be accessed directly with a general file " "manager, a special program is needed." msgstr "" "Ten typ kopii to archiwum. Zawiera zarówno ostatnią " "wersję twoich plików, jak i wersje zachowane poprzednio. Użycie tego typu " "kopii pozwala na odtworzenie starszych wersji plików bądź też plików " "usuniętych wcześniej z dysku. Przestrzeń dyskowa potrzebna do zachowania " "kopii jest minimalizowana poprzez wyszukiwanie w kolejnych wersjach plików " "ich części wspólnych i zapisywanie tych części tylko raz. Niemniej jednak " "archiwum będzie z czasem coraz większe.Należy również pamiętać, że " "pliki archiwum tego typu nie będą dostępne bezpośrednio w systemowym " "menedżerze plików - niezbędny jest specjalny program." #: kcm/backupplanwidget.cpp:525 #, kde-kuit-format msgctxt "@option:radio" msgid "" "Versioned Backup (not available because bup is " "not installed)" msgstr "" "Wersjonowana kopia zapasowa (nie jest dostępna ponieważ bup nie jest zainstalowany)" #: kcm/backupplanwidget.cpp:530 #, kde-kuit-format msgctxt "@option:radio" msgid "Versioned Backup (recommended)" msgstr "Wersjonowana kopia zapasowa (rekomendowane)" #: kcm/backupplanwidget.cpp:535 #, kde-kuit-format msgctxt "@info" msgid "" "This type of backup is a folder which is synchronized with your selected " "source folders. Taking a backup simply means making the backup destination " "contain an exact copy of your source folders as they are now and nothing " "else. If a file has been deleted in a source folder it will get deleted from " "the backup folder.This type of backup can protect you against data loss " "due to a broken hard drive but it does not help you to recover from your own " "mistakes." msgstr "" "Ten typ kopii to folder docelowy synchronizowany z wybranymi folderami " "źródłowymi. Utworzenie kopii oznacza po prostu przekopiowanie do lokalizacji " "docelowej dokładnie wszystkich plików zawartych w folderach źródłowych i nic " "poza tym. Jeśli jakiś plik został usunięty w folderze źródłowym, to po " "utworzeniu kopii nie będzie go również w folderze docelowym.Ten typ " "kopii zabezpiecza cię przed utratą danych na skutek uszkodzenia dysku " "twardego, ale nie pomoże ci odzyskać plików utraconych w wyniku twych " "własnych błędów. " #: kcm/backupplanwidget.cpp:548 #, kde-kuit-format msgctxt "@option:radio" msgid "" "Synchronized Backup (not available because rsync " "is not installed)" msgstr "" "Synchronizowana kopia zapasowa (nie dostępna ponieważ rsync nie jest zainstalowany)" #: kcm/backupplanwidget.cpp:553 #, kde-kuit-format msgctxt "@option:radio" msgid "Synchronized Backup" msgstr "Synchronizowana kopia zapasowa" #: kcm/backupplanwidget.cpp:581 #, kde-kuit-format msgctxt "@title" msgid "Backup Type" msgstr "Typ kopii zapasowej" #: kcm/backupplanwidget.cpp:582 #, kde-kuit-format msgctxt "@label" msgid "Select what type of backup you want" msgstr "Wybierz jaki typ kopii zapasowej chcesz" #: kcm/backupplanwidget.cpp:590 #, kde-kuit-format msgctxt "@title" msgid "Sources" msgstr "Źródła" #: kcm/backupplanwidget.cpp:591 #, kde-kuit-format msgctxt "@label" msgid "Select which folders to include in backup" msgstr "Wybierz które foldery mają być zawarte w kopii zapasowej" #: kcm/backupplanwidget.cpp:605 #, kde-kuit-format msgctxt "@option:radio" msgid "Filesystem Path" msgstr "Ścieżka systemu plików" #: kcm/backupplanwidget.cpp:606 #, kde-kuit-format msgctxt "@option:radio" msgid "External Storage" msgstr "Pamięć zewnętrzna" #: kcm/backupplanwidget.cpp:612 #, kde-kuit-format msgctxt "@info" msgid "" "You can use this option for backing up to a secondary internal harddrive, an " "external eSATA drive or networked storage. The requirement is just that you " "always mount it at the same path in the filesystem. The path specified here " "does not need to exist at all times, its existance will be monitored." msgstr "" "Możesz użyć tej opcji do tworzenia kopii zapasowej na drugim dysku " "wewnętrznym, zewnętrznym dysku eSATA lub na dysku sieciowym. Wymogiem jest " "montowanie dysku zawsze w tej samej ścieżce. Określona ścieżka nie musi " "istnieć cały czas, jej dostępność będzie monitorowana." #: kcm/backupplanwidget.cpp:619 #, kde-kuit-format msgctxt "@label:textbox" msgid "Destination Path for Backup:" msgstr "Ścieżka docelowa dla kopii zapasowej:" #: kcm/backupplanwidget.cpp:638 #, kde-kuit-format msgctxt "@info" msgid "" "Use this option if you want to backup your files on an external storage that " "can be plugged in to this computer, such as a USB hard drive or memory stick." msgstr "" "Użyj tej opcji jeśli chcesz tworzyć kopie zapasową twoich plików na pamięci " "zewnętrznej, która może być podłączana do tego komputera, czyli na przykład " "dysk zewnętrzny lub karta pamięci." #: kcm/backupplanwidget.cpp:648 kcm/backupplanwidget.cpp:652 #, kde-kuit-format msgctxt "@info:tooltip" msgid "The specified folder will be created if it does not exist." msgstr "Określony folder zostanie stworzony, jeżeli jeszcze nie istnieje." #: kcm/backupplanwidget.cpp:650 #, kde-kuit-format msgctxt "@label:textbox" msgid "Folder on Destination Drive:" msgstr "Folder na dysku docelowym:" #: kcm/backupplanwidget.cpp:658 #, kde-kuit-format msgctxt "@info:tooltip" msgid "Open dialog to select a folder" msgstr "Otwórz okno dialogowe aby wybrać folder" #: kcm/backupplanwidget.cpp:688 #, kde-kuit-format msgctxt "@title" msgid "Destination" msgstr "Miejsce docelowe" #: kcm/backupplanwidget.cpp:689 #, kde-kuit-format msgctxt "@label" msgid "Select the backup destination" msgstr "Wybierz miejsce docelowe kopii zapasowej" #: kcm/backupplanwidget.cpp:706 #, kde-kuit-format msgctxt "@option:radio" msgid "Manual Activation" msgstr "Manualna aktywacja" #: kcm/backupplanwidget.cpp:707 #, kde-kuit-format msgctxt "@option:radio" msgid "Interval" msgstr "Interwał" #: kcm/backupplanwidget.cpp:708 #, kde-kuit-format msgctxt "@option:radio" msgid "Active Usage Time" msgstr "Czas aktywnego używania" #: kcm/backupplanwidget.cpp:710 #, kde-kuit-format msgctxt "@info" msgid "" "Backups are only taken when manually requested. This can be done by using " "the popup menu from the backup system tray icon." msgstr "" "Kopie zapasowe są tworzone tylko ręcznie. Można je utworzyć przez menu " "kontekstowe ikony zasobnika systemowego." #: kcm/backupplanwidget.cpp:724 #, kde-kuit-format msgctxt "@info" msgid "" "New backup will be triggered when backup destination becomes available and " "more than the configured interval has passed since the last backup was taken." msgstr "" "Nowa kopia zapasowa zostanie wywołana kiedy miejsce docelowe kopii będzie " "dostępne i kiedy więcej czasu minie niż w skonfigurowanym interwale od kiedy " "ostatnia kopia została zrobiona." #: kcm/backupplanwidget.cpp:741 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Minutes" msgstr "Minuty" #: kcm/backupplanwidget.cpp:742 kcm/backupplanwidget.cpp:769 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Hours" msgstr "Godziny" #: kcm/backupplanwidget.cpp:743 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Days" msgstr "Dni" #: kcm/backupplanwidget.cpp:744 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Weeks" msgstr "Tygodnie" #: kcm/backupplanwidget.cpp:754 #, kde-kuit-format msgctxt "@info" msgid "" "New backup will be triggered when backup destination becomes available and " "you have been using your computer actively for more than the configured time " "limit since the last backup was taken." msgstr "" "Nowa kopia zostanie utworzona, gdy lokalizacja docelowa stanie się dostępna, " "a czas aktywnego użycia komputera od chwili utworzenia ostatniej kopii " "przekroczy wartość podaną w konfiguracji." #: kcm/backupplanwidget.cpp:775 #, kde-kuit-format msgctxt "@option:check" msgid "Ask for confirmation before taking backup" msgstr "Pytaj o potwierdzenie przed wykonaniem kopii zapasowej" #: kcm/backupplanwidget.cpp:794 #, kde-kuit-format msgctxt "@title" msgid "Schedule" msgstr "Harmonogram" #: kcm/backupplanwidget.cpp:795 #, kde-kuit-format msgctxt "@label" msgid "Specify the backup schedule" msgstr "Określ harmonogram wykonywania kopii zapasowych" #: kcm/backupplanwidget.cpp:808 #, kde-kuit-format msgctxt "@option:check" msgid "Show hidden folders in source selection" msgstr "Wyświetl ukryte foldery w wyborze ścieżki" #: kcm/backupplanwidget.cpp:814 #, kde-kuit-format msgctxt "@info" msgid "" "This makes it possible to explicitly include or exclude hidden folders in " "the backup source selection. Hidden folders have a name that starts with a " "dot. They are typically located in your home folder and are used to store " "settings and temporary files for your applications." msgstr "" "To daje możliwość wybiórczego dołączenia lub wyłączenia ukrytych katalogów " "przy wyborze źródła dla kopii zapasowej. Ukryte katalogi mają nazwy " "zaczynające się od kropki. Zazwyczaj umieszczone są w Twoim katalogu domowym " "i używane do przechowywania ustawień oraz plików tymczasowych Twoich " "aplikacji." #: kcm/backupplanwidget.cpp:832 #, kde-kuit-format msgctxt "@info" msgid "" "This will make your backups use around 10% more storage space and saving " "backups will take slightly longer time. In return it will be possible to " "recover from a partially corrupted backup." msgstr "" "Ta opcja zwiększy rozmiar kopii zapasowych o około 10%, również ich " "tworzenie zajmie nieco więcej czasu. W zamian za to będzie możliwe " "odzyskanie danych z częściowo uszkodzonej kopii zapasowej." #: kcm/backupplanwidget.cpp:838 #, kde-kuit-format msgctxt "@option:check" msgid "Generate recovery information" msgstr "Generowanie informacji ratunkowych" #: kcm/backupplanwidget.cpp:840 #, kde-kuit-format msgctxt "@option:check" msgid "" "Generate recovery information (not available because par2 is not installed)" msgstr "" "Generowanie informacji ratunkowych (niedostępne z uwagi na brak " "zainstalowanej aplikacji par2)" #: kcm/backupplanwidget.cpp:856 #, kde-kuit-format msgctxt "@option:check" msgid "Verify integrity of backups" msgstr "Sprawdź spójność kopii zapasowych" #: kcm/backupplanwidget.cpp:860 #, kde-kuit-format msgctxt "@info" msgid "" "Checks the whole backup archive for corruption every time you save new data. " "Saving backups will take a little bit longer time but it allows you to catch " "corruption problems sooner than at the time you need to use a backup, at " "that time it could be too late." msgstr "" "Sprawdź całe archiwum kopii zapasowej pod kątem występowania błędów za " "każdym razem, kiedy archiwizowane są nowe dane. Tworzenie kopii zajmie nieco " "więcej czasu, ale pozwoli znaleźć błędy zanim nadejdzie potrzeba użycia " "kopii, kiedy może być już za późno." #: kcm/backupplanwidget.cpp:882 #, kde-kuit-format msgctxt "@title" msgid "Advanced" msgstr "Zaawansowane" #: kcm/backupplanwidget.cpp:883 #, kde-kuit-format msgctxt "@label" msgid "Extra options for advanced users" msgstr "Dodatkowe opcje dla zaawansowanych użytkowników" #: kcm/driveselection.cpp:275 #, kde-kuit-format msgctxt "@label Only shown if no drives are detected" msgid "" "Plug in the external storage you wish to use, then select it in this list." msgstr "" "Podłącz pamięć zewnętrzną którą chcesz użyć i wybierz ją na tej liście." #: kcm/driveselectiondelegate.cpp:75 #, kde-kuit-format msgctxt "@item:inlistbox this text is added if selected drive is disconnected" msgid " (disconnected)" msgstr "(rozłączono)" #: kcm/driveselectiondelegate.cpp:78 #, kde-kuit-format msgctxt "@label %1 is amount of free storage space of hard drive" msgid "%1 free" msgstr "%1 wolnych" #: kcm/driveselectiondelegate.cpp:92 #, kde-kuit-format msgctxt "" "@item:inlistbox used for unnamed filesystems, more than one filesystem on " "device. %1 is partition number, %2 is device description, %3 is either empty " "or the \" (disconnected)\" text" msgid "Partition %1 on %2%3" msgstr "Partycja %1 na %2%3" #: kcm/driveselectiondelegate.cpp:95 #, kde-kuit-format msgctxt "" "@item:inlistbox used when there is only one unnamed filesystem on device. %1 " "is device description, %2 is either empty or the \" (disconnected)\" text" msgid "%1%2" msgstr "%1%2" #: kcm/driveselectiondelegate.cpp:99 #, kde-kuit-format msgctxt "" "@item:inlistbox %1 is filesystem label, %2 is the device description, %3 is " "either empty or the \" (disconnected)\" text" msgid "%1 on %2%3" msgstr "%1 na %2%3" #: kcm/driveselectiondelegate.cpp:106 #, kde-kuit-format msgctxt "@item:inlistbox %1 is drive(partition) label, %2 is storage capacity" msgid "%1: %2 total capacity" msgstr "%1: %2 całkowitej pojemności" #: kcm/driveselectiondelegate.cpp:153 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "" "Warning: Symbolic links and file permissions can not be saved to this file " "system. File permissions only matters if there is more than one user of this " "computer or if you are backing up executable program files." msgstr "" "Uwaga: Dowiązania symboliczne i uprawnienia plików nie mogą zostać zachowane " "na tym systemie plików. Uprawnienia plików mają znaczenie tylko w przypadku, " "jeśli tego komputera używa więcej niż jedna osoba, lub archiwizowane są " "pliki wykonywalne." #: kcm/driveselectiondelegate.cpp:157 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "" "Warning: File permissions can not be saved to this file system. File " "permissions only matters if there is more than one user of this computer or " "if you are backing up executable program files." msgstr "" "Uwaga: Uprawnienia plików nie mogą zostać zachowane na tym systemie plików. " "Uprawnienia plików mają znaczenie tylko w przypadku, jeśli tego komputera " "używa więcej niż jedna osoba, lub archiwizowane są pliki wykonywalne." #: kcm/folderselectionmodel.cpp:107 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "" "%1will be included in the backup, except for " "unchecked subfolders" msgstr "" "%1zostanie zarchiwizowana, za wyjątkiem " "podfolderów, które nie są zaznaczone" #: kcm/folderselectionmodel.cpp:111 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "%1will be included in the backup" msgstr "%1zostanie zawarte w kopii zapasowej" #: kcm/folderselectionmodel.cpp:115 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "" "%1 will not be included in " "the backup but contains folders that will" msgstr "" "%1nie nie zostanie " "zarchiwizowany, ale zawiera foldery, które zostaną" #: kcm/folderselectionmodel.cpp:119 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "" "%1 will not be included in " "the backup" msgstr "" "%1nieBackup programs are missing

Before you can activate any backup " "plan you need to install either of

  • bup, for versioned backups
  • rsync, for synchronized backups
" msgstr "" "

Nie odnaleziono programów do kopii zapasowych

Przed aktywowaniem " "jakiegokolwiek planu kopii zapasowych musisz zainstalować albo

  • bup, do wersjonowanych kopii zapasowych
  • rsync, do " "synchronizowanych kopii zapasowych
" #: kcm/kupkcm.cpp:168 #, kde-kuit-format msgctxt "@title:window" msgid "Warning" msgstr "Ostrzeżenie" #: kcm/kupkcm.cpp:170 #, kde-kuit-format msgctxt "@info %1 is the name of the backup plan" msgid "" "%1 does not have a destination!No backups will be saved by this plan." msgstr "" "%1 nie ma miejsca docelowego!Żadna kopia zapasowa nie zostanie zapisana " "przez ten plan." #: kcm/kupkcm.cpp:227 #, kde-kuit-format msgctxt "@action:button" msgid "Add New Plan" msgstr "Dodaj nowy plan" #: kcm/kupkcm.cpp:238 #, kde-kuit-format msgctxt "@option:check" msgid "Backups Enabled" msgstr "Kopie zapasowe włączone" #: kcm/planstatuswidget.cpp:48 #, kde-kuit-format msgctxt "@action:button" msgid "Configure" msgstr "Konfiguruj" #: kcm/planstatuswidget.cpp:51 #, kde-kuit-format msgctxt "@action:button" msgid "Remove" msgstr "Usuń" #: kcm/planstatuswidget.cpp:54 #, kde-kuit-format msgctxt "@action:button" msgid "Duplicate" msgstr "Duplikat" #: kioslave/bupslave.cpp:92 kioslave/bupslave.cpp:149 kioslave/bupslave.cpp:186 #: kioslave/bupslave.cpp:249 kioslave/bupslave.cpp:271 #, kde-format msgid "" "No bup repository found.\n" "%1" msgstr "" "Nie odnaleziono żadnego repozytorium bup.\n" "%1" #: plasmoid/contents/ui/FullRepresentation.qml:88 #, kde-format msgid "Save new backup" msgstr "Zapisz nową kopię" #: plasmoid/contents/ui/FullRepresentation.qml:94 #, kde-format msgid "Show files" msgstr "Wyświetl pliki" #: plasmoid/contents/ui/FullRepresentation.qml:99 #, kde-format msgid "Show log file" msgstr "Wyświetl plik dziennika" #. i18n: file: filedigger/restoredialog.ui:14 #. i18n: ectx: property (windowTitle), widget (QDialog, RestoreDialog) #: po/rc.cpp:3 rc.cpp:3 #, kde-format msgctxt "@title:window" msgid "Restore Guide" msgstr "Przewodnik przywracania" #. i18n: file: filedigger/restoredialog.ui:55 #. i18n: ectx: property (text), widget (QPushButton, mRestoreOriginalButton) #: po/rc.cpp:6 rc.cpp:6 #, kde-format msgctxt "@action:button" msgid "Restore to original location" msgstr "Przywróć do oryginalnej lokalizacji" #. i18n: file: filedigger/restoredialog.ui:78 #. i18n: ectx: property (text), widget (QPushButton, mRestoreCustomButton) #: po/rc.cpp:9 rc.cpp:9 #, kde-format msgctxt "@action:button" msgid "Choose where to restore" msgstr "Wybierz gdzie chcesz przywrócić" #. i18n: file: filedigger/restoredialog.ui:132 #. i18n: ectx: property (text), widget (QPushButton, mDestBackButton) #: po/rc.cpp:12 rc.cpp:12 #, kde-format msgctxt "@action:button" msgid "Back" msgstr "Wstecz" #. i18n: file: filedigger/restoredialog.ui:144 #. i18n: ectx: property (text), widget (QPushButton, mDestNextButton) #: po/rc.cpp:15 rc.cpp:15 #, kde-format msgctxt "@action:button" msgid "Next" msgstr "Dalej" #. i18n: file: filedigger/restoredialog.ui:175 #. i18n: ectx: property (text), widget (QRadioButton, mNewNameRadioButton) #: po/rc.cpp:18 rc.cpp:18 #, kde-format msgctxt "@option:radio " msgid "Restore the folder under a new name" msgstr "Przywróć folder pod nową nazwą" #. i18n: file: filedigger/restoredialog.ui:208 #. i18n: ectx: property (text), widget (QRadioButton, mOverwriteRadioButton) #: po/rc.cpp:21 rc.cpp:21 #, kde-format msgctxt "@option:radio" msgid "Merge folders" msgstr "Połącz foldery" #. i18n: file: filedigger/restoredialog.ui:238 #. i18n: ectx: property (text), widget (QLabel, mConfirmOverwriteLabel) #: po/rc.cpp:24 rc.cpp:24 #, kde-format msgctxt "@info Question to user, in dialog" msgid "" "The following files would be overwritten, please confirm that you wish to " "continue." msgstr "" "Następujące pliki zostaną nadpisane, proszę potwierdzić czy chcesz " "kontynuować." #. i18n: file: filedigger/restoredialog.ui:274 #. i18n: ectx: property (text), widget (QPushButton, mOverwriteBackButton) #: po/rc.cpp:27 rc.cpp:27 #, kde-format msgctxt "@action:button go to previous page in dialog" msgid "Back" msgstr "Wstecz" #. i18n: file: filedigger/restoredialog.ui:286 #. i18n: ectx: property (text), widget (QPushButton, mConfirmButton) #: po/rc.cpp:30 rc.cpp:30 #, kde-format msgctxt "@action:button User answers \"yes I confirm: overwrite files\"" msgid "Confirm" msgstr "Potwierdź" #. i18n: file: filedigger/restoredialog.ui:341 #. i18n: ectx: property (text), widget (QLabel, mErrorLabel) #: po/rc.cpp:33 rc.cpp:33 #, fuzzy, kde-format msgctxt "@label above the detailed error message" msgid "An error occured while restoring:" msgstr "Wystąpił błąd podczas przywracania:" #. i18n: file: filedigger/restoredialog.ui:372 #. i18n: ectx: property (text), widget (QLabel, label) #: po/rc.cpp:36 rc.cpp:36 #, fuzzy, kde-format msgctxt "@label" msgid "Restoration completed successfully!" msgstr "Przywracanie zostało zakończone pomyślnie!" #. i18n: file: filedigger/restoredialog.ui:413 #. i18n: ectx: property (text), widget (QPushButton, mOpenDestinationButton) #: po/rc.cpp:39 rc.cpp:39 #, kde-format msgid "Open Destination" msgstr "Otwórz miejsce docelowe" #. i18n: file: filedigger/restoredialog.ui:472 #. i18n: ectx: property (text), widget (QPushButton, mCloseButton) #: po/rc.cpp:42 rc.cpp:42 #, kde-format msgctxt "@action:button" msgid "Close" msgstr "Zamknij" #: po/rc.cpp:43 po/rc.cpp:58 settings/backupplan.cpp:69 rc.cpp:43 rc.cpp:58 #, kde-format msgid "Backups" msgstr "Kopie zapasowe" #: po/rc.cpp:44 rc.cpp:44 msgid "Configure backup plans" msgstr "Konfiguruj plany kopii zapasowych" #: po/rc.cpp:45 rc.cpp:45 msgid "backup,recovery,safety" msgstr "kopia,odzyskiwanie,bezpieczeństwo" #: po/rc.cpp:46 rc.cpp:46 msgid "Kup" msgstr "Kup" #: po/rc.cpp:48 rc.cpp:48 msgid "Start taking backup" msgstr "Rozpocznij tworzenie kopii zapasowej" #: po/rc.cpp:49 rc.cpp:49 msgid "A question if user wants to start taking a backup" msgstr "Pytanie, czy użytkownik chce rozpocząć tworzenie kopii zapasowej" #: po/rc.cpp:50 rc.cpp:50 msgid "Backup succeeded" msgstr "Kopia zapasowa została utworzona prawidłowo" #: po/rc.cpp:51 rc.cpp:51 msgid "Saving of backup successfully completed" msgstr "Zapisywanie kopii zakończyło się sukcesem." #: po/rc.cpp:52 rc.cpp:52 msgid "Backup failed" msgstr "Utworzenie kopii nie powiodło się" #: po/rc.cpp:53 rc.cpp:53 msgid "Saving of backup failed, offer user to see log file" msgstr "" "Zapis kopii zakończył się niepowodzeniem, zaproponuj użytkownikowi " "przejrzenie pliku dziennika " #: po/rc.cpp:54 rc.cpp:54 msgid "Integrity check completed" msgstr "Zakończono sprawdzanie spójności" #: po/rc.cpp:55 rc.cpp:55 msgid "Finished checking integrity of backup archive" msgstr "Zakończono sprawdzenie spójności archiwum kopii" #: po/rc.cpp:56 rc.cpp:56 msgid "Repair completed" msgstr "Naprawa zakończona" #: po/rc.cpp:57 rc.cpp:57 msgid "Finished repairing backup archive" msgstr "Zakończono naprawę archiwum kopii" #: po/rc.cpp:59 rc.cpp:59 msgid "Status of backup plans" msgstr "Status planów tworzenia kopii zapasowych" #: po/rc.cpp:60 rc.cpp:60 msgid "Backup Status" msgstr "Status kopii zapasowej" #: po/rc.cpp:61 rc.cpp:61 msgid "Displays status of backup plans" msgstr "Wyświetl status planów tworzenia kopii zapasowych" #: settings/backupplan.cpp:38 #, kde-kuit-format msgctxt "" "@label Default name for a new backup plan, %1 is the number of the plan in " "order" msgid "Backup plan %1" msgstr "Plan kopii zapasowej %1" #: settings/backupplan.cpp:101 #, kde-format msgctxt "default description of newly duplicated backup plan" msgid "%1 (copy)" msgstr "%1 (kopiowanie)" #: settings/backupplan.cpp:213 #, kde-format msgctxt "%1 is fancy formatted date" msgid "Last saved: %1" msgstr "Ostatnio zapisano: %1" #: settings/backupplan.cpp:218 #, kde-format msgctxt "%1 is storage size of archive" msgid "Size: %1" msgstr "Rozmiar: %1" #: settings/backupplan.cpp:223 #, kde-format msgctxt "%1 is free storage space" msgid "Free space: %1" msgstr "Wolne miejsce: %1" #: settings/backupplan.cpp:227 #, kde-kuit-format msgctxt "@label" msgid "This backup plan has never been run." msgstr "Ten plan kopii zapasowej nigdy nie był uruchomiony." kup-backup-0.7.1+dfsg/po/pt_BR.po000066400000000000000000001311521322613417100164670ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # carlo giusepe tadei valente sasaki , 2014-2017 # carlo giusepe tadei valente sasaki , 2014 # Simon Persson , 2014 # Simon Persson , 2014-2015 msgid "" msgstr "" "Project-Id-Version: kup\n" "Report-Msgid-Bugs-To: http://kde-apps.org/content/show.php/Kup+Backup+System?" "content=147465\n" "POT-Creation-Date: 2018-01-05 16:00+0800\n" "PO-Revision-Date: 2017-09-19 23:43+0000\n" "Last-Translator: carlo giusepe tadei valente sasaki \n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/kup/kup/" "language/pt_BR/)\n" "Language: pt_BR\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" #: daemon/bupjob.cpp:47 daemon/buprepairjob.cpp:38 #: daemon/bupverificationjob.cpp:37 #, kde-kuit-format msgctxt "@info notification" msgid "" "The bup program is needed but could not be found, " "maybe it is not installed?" msgstr "" "O programa bup é necessário mas não pôde ser " "encontrado, talvez não esteja instalado?" #: daemon/bupjob.cpp:52 daemon/buprepairjob.cpp:43 #, kde-kuit-format msgctxt "@info notification" msgid "" "The par2 program is needed but could not be " "found, maybe it is not installed?" msgstr "" "O programa par2 é necessário mas não pôde ser " "encontrado, talvez não esteja instalado?" #: daemon/bupjob.cpp:71 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup destination could not be initialised. See log file for more details." msgstr "" "O destino do backup não pôde ser iniciado. Veja o arquivo de log para mais " "detalhes." #: daemon/bupjob.cpp:93 #, kde-format msgid "Checking backup integrity" msgstr "Verificando a integridade do backup" #: daemon/bupjob.cpp:104 daemon/bupverificationjob.cpp:67 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups could be corrupted! See log file " "for more details. Do you want to try repairing the backup files?" msgstr "" "A verificação da integridade do backup falhou. Seus backups podem estar " "corrompidos! Veja o arquivo de log para mais detalhes. Deseja tentar reparar " "os arquivos de backup?" #: daemon/bupjob.cpp:108 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups could be corrupted! See log file " "for more details." msgstr "" "A verificação da integridade do backup falhou. Seus backups podem estar " "corrompidos! Veja o arquivo de log para mais detalhes." #: daemon/bupjob.cpp:131 daemon/rsyncjob.cpp:57 #, kde-format msgid "Checking what to copy" msgstr "Verificando o que deve ser copiado" #: daemon/bupjob.cpp:138 #, kde-kuit-format msgctxt "@info notification" msgid "Failed to analyze files. See log file for more details." msgstr "" "Falha ao analisar os arquivos. Veja o arquivo de log para mais detalhes." #: daemon/bupjob.cpp:159 daemon/bupjob.cpp:253 daemon/rsyncjob.cpp:175 #, kde-format msgid "Saving backup" msgstr "Salvando o backup" #: daemon/bupjob.cpp:167 daemon/rsyncjob.cpp:120 #, kde-kuit-format msgctxt "@info notification" msgid "Failed to save backup. See log file for more details." msgstr "Falha ao salvar o backup. Veja o arquivo de log para mais detalhes." #: daemon/bupjob.cpp:189 #, kde-format msgid "Generating recovery information" msgstr "Gerando informação de recuperação" #: daemon/bupjob.cpp:197 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed to generate recovery info for the backup. See log file for more " "details." msgstr "" "Falha ao gerar informações de recuperação para o backup. Veja o arquivo de " "log para mais detalhes." #: daemon/bupjob.cpp:254 daemon/rsyncjob.cpp:176 #, kde-format msgctxt "Label for file currently being copied" msgid "File" msgstr "Arquivo" #: daemon/buprepairjob.cpp:72 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup repair failed. Your backups could be corrupted! See log file for more " "details." msgstr "" "Falha ao reparar o backup. Seus backups podem estar corrompidos! Veja o " "arquivo de log para mais detalhes." #: daemon/buprepairjob.cpp:76 #, kde-kuit-format msgctxt "@info notification" msgid "Success! Backup repair worked. See log file for more details." msgstr "Sucesso no reparo do backup! Veja o arquivo de log para mais detalhes." #: daemon/buprepairjob.cpp:80 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup repair was not necessary. Your backups are not corrupted.See log file " "for more details." msgstr "" "O reparo do backup não foi necessário. Seus backups não estão corrompidos. " "Veja o arquivo de log para mais detalhes." #: daemon/buprepairjob.cpp:85 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup repair failed. Your backups could still be corrupted! See log file " "for more details." msgstr "" "Falha ao reparar o backup. Seus backups ainda podem estar corrompidos! Veja " "o arquivo de log para mais detalhes." #: daemon/bupverificationjob.cpp:70 daemon/bupverificationjob.cpp:87 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups are corrupted! See log file for " "more details." msgstr "" "A verificação da integridade do backup falhou. Seus backups estão " "corrompidos! Veja o arquivo de log para mais detalhes." #: daemon/bupverificationjob.cpp:76 #, kde-kuit-format msgctxt "@info notification" msgid "Backup integrity test was successful, Your backups are fine." msgstr "" "Sucesso ao testar a integridade do backup! Tudo certo com seus backups." #: daemon/bupverificationjob.cpp:83 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups are corrupted! See log file for " "more details. Do you want to try repairing the backup files?" msgstr "" "A verificação da integridade do backup falhou. Seus backups estão " "corrompidos! Veja o arquivo de log para mais detalhes. Deseja tentar reparar " "os arquivos de backup?" #: daemon/edexecutor.cpp:115 daemon/edexecutor.cpp:124 #: daemon/edexecutor.cpp:160 daemon/fsexecutor.cpp:114 #: daemon/fsexecutor.cpp:146 #, kde-kuit-format msgctxt "@title:window" msgid "Problem" msgstr "Problema" #: daemon/edexecutor.cpp:116 daemon/fsexecutor.cpp:115 #, kde-kuit-format msgctxt "notification" msgid "Invalid type of backup in configuration." msgstr "Tipo inválido de backup na configuração." #: daemon/edexecutor.cpp:125 #, kde-kuit-format msgctxt "notification" msgid "You don't have write permission to backup destination." msgstr "Você não possui permissão de escrita para o destino do backup." #: daemon/kupdaemon.cpp:171 #, kde-format msgid "Continue" msgstr "Continuar" #: daemon/kupdaemon.cpp:173 #, kde-format msgid "Stop" msgstr "Parar" #: daemon/kupdaemon.cpp:175 #, kde-format msgctxt "%1 is a text explaining the current activity" msgid "Currently busy: %1" msgstr "Ocupação atual: %1" #: daemon/kupdaemon.cpp:176 #, kde-format msgid "Do you really want to stop?" msgstr "Deseja realmente parar?" #: daemon/kupdaemon.cpp:179 #, kde-format msgid "User Backups" msgstr "Backups do usuário" #: daemon/kupdaemon.cpp:249 #, kde-format msgctxt "status in tooltip" msgid "Backup destination not available" msgstr "Destino do backup indisponível" #: daemon/kupdaemon.cpp:253 daemon/kupdaemon.cpp:310 #, kde-format msgid "No backup plans configured" msgstr "Nenhum plano de backup foi configurado" #: daemon/kupdaemon.cpp:259 #, kde-format msgctxt "status in tooltip" msgid "Backup destination available" msgstr "Destino do backup disponível" #: daemon/kupdaemon.cpp:269 daemon/planexecutor.cpp:84 #, kde-format msgctxt "status in tooltip" msgid "Backup status OK" msgstr "Estado do backup OK" #: daemon/kupdaemon.cpp:276 daemon/planexecutor.cpp:86 #, kde-format msgctxt "status in tooltip" msgid "New backup suggested" msgstr "Novo backup sugerido" #: daemon/kupdaemon.cpp:283 daemon/planexecutor.cpp:88 #, kde-format msgctxt "status in tooltip" msgid "New backup neeeded" msgstr "Novo backup necessário" #: daemon/main.cpp:41 #, kde-kuit-format msgctxt "@info:shell Error message at startup" msgid "" "Kup is not enabled, enable it from the system settings module. You can do " "that by running kcmshell5 kup" msgstr "" "O kup não está habilitado, habilite-o no módulo de configurações do sistema. " "Você pode fazê-lo executando kcmshell5 kup" #: daemon/main.cpp:47 #, kde-kuit-format msgctxt "@title" msgid "Kup Daemon" msgstr "Serviço Kup" #: daemon/main.cpp:48 #, kde-format msgid "" "Kup is a flexible backup solution using the backup storage system 'bup'. " "This allows it to quickly perform incremental backups, only saving the parts " "of files that has actually changed since last backup was taken." msgstr "" "Kup é uma solução flexível de backup que usa o sistema de armazenamento de " "backup 'bup'. Isto lhe permite realizar rapidamente backups incrementais, " "salvando apenas as partes dos arquivos que realmente mudaram desde o último " "backup." #: daemon/main.cpp:51 kcm/kupkcm.cpp:52 #, kde-format msgid "Copyright (C) 2011-2015 Simon Persson" msgstr "Copyright (C) 2011-2015 Simon Persson" #: daemon/main.cpp:53 filedigger/main.cpp:51 kcm/kupkcm.cpp:54 #, kde-format msgid "Simon Persson" msgstr "Simon Persson" #: daemon/main.cpp:54 filedigger/main.cpp:52 kcm/kupkcm.cpp:55 #, kde-kuit-format msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "Carlo Valente" #: daemon/main.cpp:54 filedigger/main.cpp:52 kcm/kupkcm.cpp:56 #, kde-kuit-format msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "carlo.gt.valente@gmail.com" #: daemon/planexecutor.cpp:76 #, kde-format msgctxt "status in tooltip" msgid "Saving backup" msgstr "Salvando o backup" #: daemon/planexecutor.cpp:78 #, kde-format msgctxt "status in tooltip" msgid "Checking backup integrity" msgstr "Verificando a integridade do backup" #: daemon/planexecutor.cpp:80 #, kde-format msgctxt "status in tooltip" msgid "Repairing backups" msgstr "Reparando backups" #: daemon/planexecutor.cpp:118 daemon/planexecutor.cpp:133 #, kde-kuit-format msgctxt "@info" msgid "Do you want to save a first backup now?" msgstr "Quer salvar um backup inicial agora?" #: daemon/planexecutor.cpp:121 #, kde-kuit-format msgctxt "@info" msgid "" "It has been %1 since last backup was saved.\n" "Save a new backup now?" msgstr "" "O último backup salvo foi há %1.\n" "Quer salvar um novo backup agora?" #: daemon/planexecutor.cpp:137 #, kde-kuit-format msgctxt "@info" msgid "" "You have been active for %1 since last backup was saved.\n" "Save a new backup now?" msgstr "" "Você esteve ativo por %1 desde que o último backup foi salvo.\n" "Quer salvar um novo backup agora?" #: daemon/planexecutor.cpp:170 daemon/planexecutor.cpp:200 #: daemon/planexecutor.cpp:278 #, kde-kuit-format msgctxt "@action:button" msgid "Yes" msgstr "Sim" #: daemon/planexecutor.cpp:170 daemon/planexecutor.cpp:201 #: daemon/planexecutor.cpp:279 #, kde-kuit-format msgctxt "@action:button" msgid "No" msgstr "Não" #: daemon/planexecutor.cpp:192 #, kde-kuit-format msgctxt "@title:window" msgid "Saving of Backup Failed" msgstr "Falha ao salvar o backup" #: daemon/planexecutor.cpp:197 daemon/planexecutor.cpp:275 #: daemon/planexecutor.cpp:309 #, kde-kuit-format msgctxt "@action:button" msgid "Show log file" msgstr "Exibir arquivo de log" #: daemon/planexecutor.cpp:221 #, kde-kuit-format msgctxt "@title:window" msgid "Backup Saved" msgstr "Backup salvo" #: daemon/planexecutor.cpp:222 #, kde-kuit-format msgctxt "@info notification" msgid "Saving backup completed successfully." msgstr "Backup salvo com sucesso." #: daemon/planexecutor.cpp:271 #, kde-kuit-format msgctxt "@title:window" msgid "Integrity Check Completed" msgstr "Verificação de integridade completada" #: daemon/planexecutor.cpp:306 #, kde-kuit-format msgctxt "@title:window" msgid "Repair Completed" msgstr "Reparo completado" #: daemon/planexecutor.cpp:337 po/rc.cpp:47 rc.cpp:47 #, kde-format msgid "Kup Backup System" msgstr "Sistema de backups Kup" #: daemon/rsyncjob.cpp:48 #, kde-kuit-format msgctxt "@info notification" msgid "" "The rsync program is needed but could not be " "found, maybe it is not installed?" msgstr "" "O programa rsync é necessário mas não pôde ser " "encontrado, talvez não esteja instalado?" #: filedigger/main.cpp:47 #, kde-kuit-format msgctxt "@title" msgid "File Digger" msgstr "File Digger" #: filedigger/main.cpp:48 #, kde-format msgid "Browser for bup archives." msgstr "Navegador para arquivos do bup." #: filedigger/main.cpp:49 #, kde-format msgid "Copyright (C) 2013-2015 Simon Persson" msgstr "Copyright (C) 2013-2015 Simon Persson" #: filedigger/main.cpp:59 #, kde-format msgid "Name of the branch to be opened." msgstr "Nome da seção a ser aberta." #: filedigger/main.cpp:61 #, kde-format msgid "Path to the bup repository to be opened." msgstr "Caminho ao repositório do bup a ser aberto." #: filedigger/main.cpp:70 #, kde-format msgctxt "@info:shell Error message at startup" msgid "" "You must supply the path to a bup or git repository that you wish to open " "for viewing." msgstr "" "Você deve fornecer o caminho para um repositório bup ou git que você deseja " "abrir para visualização." #: filedigger/main.cpp:85 #, kde-kuit-format msgctxt "@info messagebox, %1 is a folder path" msgid "" "The backup archive %1 could not be opened. Check if the " "backups really are located there." msgstr "" "O arquivo de backup %1 não pôde ser aberto. Verifique " "se os arquivos de backup realmente estão nesse local." #: filedigger/main.cpp:92 #, kde-kuit-format msgctxt "@info messagebox" msgid "You do not have permission needed to read this backup archive." msgstr "" "Você não possui a permissão necessária para ler esse arquivo de backup." #: filedigger/mergedvfs.cpp:108 #, kde-kuit-format msgctxt "@info messagebox" msgid "" "Could not read this backup archive. Perhaps some files have become " "corrupted. Do you want to run an integrity check to test this?" msgstr "" "Não foi possível ler esse arquivo de backup. Talvez alguns arquivos estejam " "corrompidos. Deseja executar uma verificação de integridade?" #: filedigger/mergedvfs.cpp:156 #, kde-kuit-format msgctxt "added after folder name in some cases" msgid " (folder)" msgstr "(pasta)" #: filedigger/mergedvfs.cpp:158 #, kde-kuit-format msgctxt "added after file name in some cases" msgid " (symlink)" msgstr " (link simbólico)" #: filedigger/mergedvfs.cpp:160 #, kde-kuit-format msgctxt "added after file name in some cases" msgid " (file)" msgstr "(arquivo)" #: filedigger/restoredialog.cpp:115 kcm/backupplanwidget.cpp:451 #, kde-kuit-format msgctxt "@action:button" msgid "New Folder..." msgstr "Nova pasta..." #: filedigger/restoredialog.cpp:141 filedigger/restoredialog.cpp:160 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "No destination was selected, please select one." msgstr "Nenhum destino foi selecionado, por favor selecione um." #: filedigger/restoredialog.cpp:251 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "There was a problem while getting a list of all files to restore: %1" msgstr "" "Houve um problema ao obter uma lista de todos os arquivos a restaurar: %1" #: filedigger/restoredialog.cpp:264 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "The destination does not have enough space available. Please choose a " "different destination or free some space." msgstr "" "O destino não possui espaço suficiente disponível. Por favor, escolha um " "destino diferente ou libere algum espaço." #: filedigger/restoredialog.cpp:274 #, kde-kuit-format msgctxt "" "added to the suggested filename when restoring, %1 is the time when backup " "was taken" msgid " - saved at %1" msgstr "- salvo em %1" #: filedigger/restoredialog.cpp:275 #, kde-kuit-format msgctxt "@info" msgid "Folder already exists, please choose a solution" msgstr "A pasta já existe, por favor escolha uma solução" #: filedigger/restoredialog.cpp:281 #, kde-kuit-format msgctxt "@info" msgid "File already exists" msgstr "O arquivo já existe" #: filedigger/restoredialog.cpp:294 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "The new name entered already exists, please enter a different one." msgstr "O novo nome digitado já existe, por favor escolha outro." #: filedigger/restoredialog.cpp:371 kcm/dirselector.cpp:50 #, kde-kuit-format msgctxt "default folder name when creating a new folder" msgid "New Folder" msgstr "Nova pasta" #: filedigger/restoredialog.cpp:376 kcm/dirselector.cpp:55 #, kde-kuit-format msgctxt "@title:window" msgid "New Folder" msgstr "Nova pasta" #: filedigger/restoredialog.cpp:377 kcm/dirselector.cpp:56 #, kde-kuit-format msgctxt "@label:textbox" msgid "" "Create new folder in:\n" "%1" msgstr "" "Criar nova pasta em:\n" "%1" #: filedigger/restoredialog.cpp:390 kcm/dirselector.cpp:68 #, kde-format msgid "A folder named %1 already exists." msgstr "Uma pasta chamada %1 já existe." #: filedigger/restoredialog.cpp:396 kcm/dirselector.cpp:74 #, kde-format msgid "You do not have permission to create %1." msgstr "Você não possui permissão para criar %1." #: filedigger/restorejob.cpp:99 #, kde-kuit-format msgctxt "progress report, current operation" msgid "Restoring" msgstr "Restaurando" #: filedigger/restorejob.cpp:100 #, kde-kuit-format msgctxt "progress report, label" msgid "File:" msgstr "Arquivo:" #: filedigger/versionlistdelegate.cpp:135 #, kde-kuit-format msgctxt "@action:button" msgid "Open" msgstr "Abrir" #: filedigger/versionlistdelegate.cpp:137 #, kde-kuit-format msgctxt "@action:button" msgid "Restore" msgstr "Restaurar" #: kcm/backupplanwidget.cpp:282 #, kde-kuit-format msgctxt "@action:button" msgid "Exclude Folder" msgstr "Excluir pasta" #: kcm/backupplanwidget.cpp:285 #, kde-kuit-format msgctxt "@action:button" msgid "Include Folder" msgstr "Incluir pasta" #: kcm/backupplanwidget.cpp:382 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "You don't have permission to read this folder: %1It cannot be included in the source selection. If it does not contain " "anything important to you, one possible solution is to exclude the folder " "from the backup plan." msgstr "" "Você não possui permissão para ler essa pasta: %1Ela não será incluída na seleção de fontes. Caso ela não contenha nada " "importante para você, uma possível solução seria excluí-la do plano de " "backup." #: kcm/backupplanwidget.cpp:393 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "You don't have permission to read this file: %1It " "cannot be included in the source selection. If the file is not important to " "you, one possible solution is to exclude the whole folder where the file is " "stored from the backup plan." msgstr "" "Você não possui permissão para ler esse arquivo: %1Ele não será incluído na seleção de fontes. Caso ele não seja importante " "para você, uma possível solução seria excluir toda a pasta onde ele está do " "plano de backup." #: kcm/backupplanwidget.cpp:409 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "The symbolic link %1 is currently included but it " "points to a folder which is not: %2.That is " "probably not what you want. One solution is to simply include the target " "folder in the backup plan." msgstr "" "O link simbólico %1 está incluído no momento, mas " "aponta para uma pasta que não está: %2.Provavelmente, não é isso o que você deseja. Uma possível solução seria " "simplesmente incluir a pasta alvo no plano de backup." #: kcm/backupplanwidget.cpp:417 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "The symbolic link %1 is currently included but it " "points to a file which is not: %2.That is probably " "not what you want. One solution is to simply include the folder where the " "file is stored in the backup plan." msgstr "" "O link simbólico %1 está incluído no momento, mas " "aponta para um arquivo que não está: %2.Provavelmente, não é isso o que você deseja. Uma possível solução seria " "simplesmente incluir a pasta onde o arquivo alvo está no plano de backup." #: kcm/backupplanwidget.cpp:440 #, kde-kuit-format msgctxt "@title:window" msgid "Select Folder" msgstr "Selecionar pasta" #: kcm/backupplanwidget.cpp:478 #, kde-kuit-format msgctxt "@label" msgid "Description:" msgstr "Descrição:" #: kcm/backupplanwidget.cpp:481 #, kde-kuit-format msgctxt "@action:button" msgid "Back to overview" msgstr "Retornar à visão geral" #: kcm/backupplanwidget.cpp:510 #, kde-kuit-format msgctxt "@info" msgid "" "This type of backup is an archive. It contains both the " "latest version of your files and earlier backed up versions. Using this type " "of backup allows you to recover older versions of your files, or files which " "were deleted on your computer at a later time. The storage space needed is " "minimized by looking for common parts of your files between versions and " "only storing those parts once. Nevertheless, the backup archive will keep " "growing in size as time goes by.Also important to know is that the " "files in the archive can not be accessed directly with a general file " "manager, a special program is needed." msgstr "" "Esse tipo de backup é um pacote. Ele contém tanto a " "última versão de seus arquivos quanto versões anteriores. Usar esse tipo de " "backup lhe permite recuperar versões antigas de seus arquivos ou arquivos " "que já foram deletados do seu computador. O espaço de armazenamento " "necessário é minimizado ao se procurar por partes comuns dos arquivos entre " "as versões e salvando essas partes apenas uma vez. Apesar disso, o pacote de " "backup aumentará com o tempo.Vale notar que os arquivos dentro do " "pacote não podem ser acessados diretamente com um gerenciador de arquivos " "comum, é necessário um programa especial." #: kcm/backupplanwidget.cpp:525 #, kde-kuit-format msgctxt "@option:radio" msgid "" "Versioned Backup (not available because bup is " "not installed)" msgstr "" "Backup de versões (indisponível porque o bup não " "está instalado)" #: kcm/backupplanwidget.cpp:530 #, kde-kuit-format msgctxt "@option:radio" msgid "Versioned Backup (recommended)" msgstr "Backup de versões (recomendado)" #: kcm/backupplanwidget.cpp:535 #, kde-kuit-format msgctxt "@info" msgid "" "This type of backup is a folder which is synchronized with your selected " "source folders. Taking a backup simply means making the backup destination " "contain an exact copy of your source folders as they are now and nothing " "else. If a file has been deleted in a source folder it will get deleted from " "the backup folder.This type of backup can protect you against data loss " "due to a broken hard drive but it does not help you to recover from your own " "mistakes." msgstr "" "Esse tipo de backup consiste de uma pasta que é sincronizada com as pastas " "fonte selecionadas. Fazer um backup significa que o destino do backup " "conterá uma cópia exata das pastas fonte como elas são no momento e nada " "mais. Se um arquivo foi deletado numa pasta fonte, ele será deletado na " "pasta de backup.Esse tipo de backup pode protegê-lo contra perda de " "dados devido a um HD defeituoso, mas não de seus próprios erros." #: kcm/backupplanwidget.cpp:548 #, kde-kuit-format msgctxt "@option:radio" msgid "" "Synchronized Backup (not available because rsync " "is not installed)" msgstr "" "Backup sincronizado (indisponível porque o rsync " "não está instalado)" #: kcm/backupplanwidget.cpp:553 #, kde-kuit-format msgctxt "@option:radio" msgid "Synchronized Backup" msgstr "Backup sincronizado" #: kcm/backupplanwidget.cpp:581 #, kde-kuit-format msgctxt "@title" msgid "Backup Type" msgstr "Tipo de backup" #: kcm/backupplanwidget.cpp:582 #, kde-kuit-format msgctxt "@label" msgid "Select what type of backup you want" msgstr "Selecione o tipo de backup que você quer" #: kcm/backupplanwidget.cpp:590 #, kde-kuit-format msgctxt "@title" msgid "Sources" msgstr "Fontes" #: kcm/backupplanwidget.cpp:591 #, kde-kuit-format msgctxt "@label" msgid "Select which folders to include in backup" msgstr "Selecione quais pastas quer incluir no backup" #: kcm/backupplanwidget.cpp:605 #, kde-kuit-format msgctxt "@option:radio" msgid "Filesystem Path" msgstr "Caminho no sistema de arquivo" #: kcm/backupplanwidget.cpp:606 #, kde-kuit-format msgctxt "@option:radio" msgid "External Storage" msgstr "Armazenamento externo" #: kcm/backupplanwidget.cpp:612 #, kde-kuit-format msgctxt "@info" msgid "" "You can use this option for backing up to a secondary internal harddrive, an " "external eSATA drive or networked storage. The requirement is just that you " "always mount it at the same path in the filesystem. The path specified here " "does not need to exist at all times, its existance will be monitored." msgstr "" "Você pode usar essa opção para um backup em um HD interno secundário, um " "drive eSATA ou um armazenamento pela rede. O requerimento é que você sempre " "use o mesmo ponto de montagem para ele. O caminho especificado aqui não " "precisa existir sempre, sua existência será monitorada." #: kcm/backupplanwidget.cpp:619 #, kde-kuit-format msgctxt "@label:textbox" msgid "Destination Path for Backup:" msgstr "Caminho de destino para o backup:" #: kcm/backupplanwidget.cpp:638 #, kde-kuit-format msgctxt "@info" msgid "" "Use this option if you want to backup your files on an external storage that " "can be plugged in to this computer, such as a USB hard drive or memory stick." msgstr "" "Use essa opção se desejar um backup de seus arquivos num dispositivo externo " "que possa ser plugado em seu computador, como um HD USB ou pendrive." #: kcm/backupplanwidget.cpp:648 kcm/backupplanwidget.cpp:652 #, kde-kuit-format msgctxt "@info:tooltip" msgid "The specified folder will be created if it does not exist." msgstr "A pasta especificada será criada caso não exista." #: kcm/backupplanwidget.cpp:650 #, kde-kuit-format msgctxt "@label:textbox" msgid "Folder on Destination Drive:" msgstr "Pasta no drive de destino:" #: kcm/backupplanwidget.cpp:658 #, kde-kuit-format msgctxt "@info:tooltip" msgid "Open dialog to select a folder" msgstr "Diálogo para seleção de uma pasta" #: kcm/backupplanwidget.cpp:688 #, kde-kuit-format msgctxt "@title" msgid "Destination" msgstr "Destino" #: kcm/backupplanwidget.cpp:689 #, kde-kuit-format msgctxt "@label" msgid "Select the backup destination" msgstr "Selecione o destino do backup" #: kcm/backupplanwidget.cpp:706 #, kde-kuit-format msgctxt "@option:radio" msgid "Manual Activation" msgstr "Ativação manual" #: kcm/backupplanwidget.cpp:707 #, kde-kuit-format msgctxt "@option:radio" msgid "Interval" msgstr "Intervalo" #: kcm/backupplanwidget.cpp:708 #, kde-kuit-format msgctxt "@option:radio" msgid "Active Usage Time" msgstr "Tempo de atividade" #: kcm/backupplanwidget.cpp:710 #, kde-kuit-format msgctxt "@info" msgid "" "Backups are only taken when manually requested. This can be done by using " "the popup menu from the backup system tray icon." msgstr "" "Os backups serão realizados apenas quando requisitados manualmente. Isso " "pode ser feito usando o menu que aparece ao clicar no ícone de backup da " "barra do sistema." #: kcm/backupplanwidget.cpp:724 #, kde-kuit-format msgctxt "@info" msgid "" "New backup will be triggered when backup destination becomes available and " "more than the configured interval has passed since the last backup was taken." msgstr "" "Um novo backup será iniciado quando a pasta destino se tornar disponível e " "um intervalo de tempo maior que o configurado tiver passado desde o último " "backup." #: kcm/backupplanwidget.cpp:741 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Minutes" msgstr "Minutos" #: kcm/backupplanwidget.cpp:742 kcm/backupplanwidget.cpp:769 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Hours" msgstr "Horas" #: kcm/backupplanwidget.cpp:743 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Days" msgstr "Dias" #: kcm/backupplanwidget.cpp:744 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Weeks" msgstr "Semanas" #: kcm/backupplanwidget.cpp:754 #, kde-kuit-format msgctxt "@info" msgid "" "New backup will be triggered when backup destination becomes available and " "you have been using your computer actively for more than the configured time " "limit since the last backup was taken." msgstr "" "Um novo backup será iniciado quando a pasta destino se tornar disponível e " "você tiver usado seu computador ativamente por um tempo maior que o " "configurado desde o último backup." #: kcm/backupplanwidget.cpp:775 #, kde-kuit-format msgctxt "@option:check" msgid "Ask for confirmation before taking backup" msgstr "Pedir por confirmação antes de realizar o backup" #: kcm/backupplanwidget.cpp:794 #, kde-kuit-format msgctxt "@title" msgid "Schedule" msgstr "Agendamento" #: kcm/backupplanwidget.cpp:795 #, kde-kuit-format msgctxt "@label" msgid "Specify the backup schedule" msgstr "Especifique o horário do backup" #: kcm/backupplanwidget.cpp:808 #, kde-kuit-format msgctxt "@option:check" msgid "Show hidden folders in source selection" msgstr "Mostrar pastas ocultas na seleção da fonte" #: kcm/backupplanwidget.cpp:814 #, kde-kuit-format msgctxt "@info" msgid "" "This makes it possible to explicitly include or exclude hidden folders in " "the backup source selection. Hidden folders have a name that starts with a " "dot. They are typically located in your home folder and are used to store " "settings and temporary files for your applications." msgstr "" "Isso torna possível incluir ou excluir pastas ocultas na seleção da fonte do " "backup. Pastas ocultas possuem um nome que inicia com um ponto. Elas estão " "geralmente localizadas em sua pasta pessoal e são usadas para armazenar " "configurações e arquivos temporários de seus aplicativos." #: kcm/backupplanwidget.cpp:832 #, kde-kuit-format msgctxt "@info" msgid "" "This will make your backups use around 10% more storage space and saving " "backups will take slightly longer time. In return it will be possible to " "recover from a partially corrupted backup." msgstr "" "Isso fará com que seus backups usem cerca de 10% mais espaço de " "armazenamento e levará um pouco mais de tempo para salvá-los. Por outro " "lado, pode ser possível recuperar de um backup parcialmente corrompido." #: kcm/backupplanwidget.cpp:838 #, kde-kuit-format msgctxt "@option:check" msgid "Generate recovery information" msgstr "Gerar informação de recuperação" #: kcm/backupplanwidget.cpp:840 #, kde-kuit-format msgctxt "@option:check" msgid "" "Generate recovery information (not available because par2 is not installed)" msgstr "" "Gerar informação de recuperação (indisponível porque o par2 não está instalado)" #: kcm/backupplanwidget.cpp:856 #, kde-kuit-format msgctxt "@option:check" msgid "Verify integrity of backups" msgstr "Verificar integridade dos backups" #: kcm/backupplanwidget.cpp:860 #, kde-kuit-format msgctxt "@info" msgid "" "Checks the whole backup archive for corruption every time you save new data. " "Saving backups will take a little bit longer time but it allows you to catch " "corruption problems sooner than at the time you need to use a backup, at " "that time it could be too late." msgstr "" "Verifica se o arquivo de backup não está corrompido sempre que for salvar " "novos dados. Os backups levarão mais tempo, mas lhe permitirá encontrar " "problemas de corrupção antes que você precise usar o backup, quando poderá " "ser muito tarde." #: kcm/backupplanwidget.cpp:882 #, kde-kuit-format msgctxt "@title" msgid "Advanced" msgstr "Avançado" #: kcm/backupplanwidget.cpp:883 #, kde-kuit-format msgctxt "@label" msgid "Extra options for advanced users" msgstr "Opções extras para usuários avançados" #: kcm/driveselection.cpp:275 #, kde-kuit-format msgctxt "@label Only shown if no drives are detected" msgid "" "Plug in the external storage you wish to use, then select it in this list." msgstr "" "Plugue o armazenamento externo que deseja usar e o selecione nessa lista." #: kcm/driveselectiondelegate.cpp:75 #, kde-kuit-format msgctxt "@item:inlistbox this text is added if selected drive is disconnected" msgid " (disconnected)" msgstr "(desconectado)" #: kcm/driveselectiondelegate.cpp:78 #, kde-kuit-format msgctxt "@label %1 is amount of free storage space of hard drive" msgid "%1 free" msgstr "%1 livre(s)" #: kcm/driveselectiondelegate.cpp:92 #, kde-kuit-format msgctxt "" "@item:inlistbox used for unnamed filesystems, more than one filesystem on " "device. %1 is partition number, %2 is device description, %3 is either empty " "or the \" (disconnected)\" text" msgid "Partition %1 on %2%3" msgstr "Partição %1 em %2%3" #: kcm/driveselectiondelegate.cpp:95 #, kde-kuit-format msgctxt "" "@item:inlistbox used when there is only one unnamed filesystem on device. %1 " "is device description, %2 is either empty or the \" (disconnected)\" text" msgid "%1%2" msgstr "%1%2" #: kcm/driveselectiondelegate.cpp:99 #, kde-kuit-format msgctxt "" "@item:inlistbox %1 is filesystem label, %2 is the device description, %3 is " "either empty or the \" (disconnected)\" text" msgid "%1 on %2%3" msgstr "%1 em %2%3" #: kcm/driveselectiondelegate.cpp:106 #, kde-kuit-format msgctxt "@item:inlistbox %1 is drive(partition) label, %2 is storage capacity" msgid "%1: %2 total capacity" msgstr "%1: %2 capacidade total" #: kcm/driveselectiondelegate.cpp:153 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "" "Warning: Symbolic links and file permissions can not be saved to this file " "system. File permissions only matters if there is more than one user of this " "computer or if you are backing up executable program files." msgstr "" "Atenção: links simbólicos e permissões de arquivos não podem ser salvas " "nesse sistema de arquivos. Permissões de arquivos só são importantes se " "houver mais de um usuário nesse computador ou no caso de arquivos " "executáveis." #: kcm/driveselectiondelegate.cpp:157 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "" "Warning: File permissions can not be saved to this file system. File " "permissions only matters if there is more than one user of this computer or " "if you are backing up executable program files." msgstr "" "Atenção: permissões de arquivos não podem ser salvas nesse sistema de " "arquivos. Permissões de arquivos só são importantes se houver mais de um " "usuário nesse computador ou no caso de arquivos executáveis." #: kcm/folderselectionmodel.cpp:107 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "" "%1will be included in the backup, except for " "unchecked subfolders" msgstr "" "%1será inclusa no backup, exceto as subpastas " "desmarcadas" #: kcm/folderselectionmodel.cpp:111 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "%1will be included in the backup" msgstr "%1será incluso no backup" #: kcm/folderselectionmodel.cpp:115 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "" "%1 will not be included in " "the backup but contains folders that will" msgstr "" "%1não será inclusa no backup " "mas contém pastas que serão" #: kcm/folderselectionmodel.cpp:119 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "" "%1 will not be included in " "the backup" msgstr "" "%1não será incluso no backup" #: kcm/kupkcm.cpp:49 #, kde-format msgid "Kup Configuration Module" msgstr "Módulo de configuração do Kup" #: kcm/kupkcm.cpp:51 #, kde-format msgid "Configuration of backup plans for the Kup backup system" msgstr "Configuração dos planos de backup para o sistema de backup Kup" #: kcm/kupkcm.cpp:54 #, kde-format msgid "Maintainer" msgstr "Mantenedor" #: kcm/kupkcm.cpp:87 #, kde-format msgid "" "

Backup programs are missing

Before you can activate any backup " "plan you need to install either of

  • bup, for versioned backups
  • rsync, for synchronized backups
" msgstr "" "

Programas de backup estão ausentes

Antes de ativar qualquer plano " "de backup, você precisa instalar

  • bup, para backups de versõesou
  • rsync, para backups sincronizados
" #: kcm/kupkcm.cpp:168 #, kde-kuit-format msgctxt "@title:window" msgid "Warning" msgstr "Aviso" #: kcm/kupkcm.cpp:170 #, kde-kuit-format msgctxt "@info %1 is the name of the backup plan" msgid "" "%1 does not have a destination!No backups will be saved by this plan." msgstr "%1 não possui um destinoNenhum backup será salvo nesse plano." #: kcm/kupkcm.cpp:227 #, kde-kuit-format msgctxt "@action:button" msgid "Add New Plan" msgstr "Adicionar novo plano" #: kcm/kupkcm.cpp:238 #, kde-kuit-format msgctxt "@option:check" msgid "Backups Enabled" msgstr "Backups habilitados" #: kcm/planstatuswidget.cpp:48 #, kde-kuit-format msgctxt "@action:button" msgid "Configure" msgstr "Configurar" #: kcm/planstatuswidget.cpp:51 #, kde-kuit-format msgctxt "@action:button" msgid "Remove" msgstr "Remover" #: kcm/planstatuswidget.cpp:54 #, kde-kuit-format msgctxt "@action:button" msgid "Duplicate" msgstr "Duplicar" #: kioslave/bupslave.cpp:92 kioslave/bupslave.cpp:149 kioslave/bupslave.cpp:186 #: kioslave/bupslave.cpp:249 kioslave/bupslave.cpp:271 #, kde-format msgid "" "No bup repository found.\n" "%1" msgstr "" "Nenhum repositório bup encontrado.\n" "%1" #: plasmoid/contents/ui/FullRepresentation.qml:88 #, kde-format msgid "Save new backup" msgstr "Salvar novo backup" #: plasmoid/contents/ui/FullRepresentation.qml:94 #, kde-format msgid "Show files" msgstr "Mostrar arquivos" #: plasmoid/contents/ui/FullRepresentation.qml:99 #, kde-format msgid "Show log file" msgstr "Exibir arquivo de log" #. i18n: file: filedigger/restoredialog.ui:14 #. i18n: ectx: property (windowTitle), widget (QDialog, RestoreDialog) #: po/rc.cpp:3 rc.cpp:3 #, kde-format msgctxt "@title:window" msgid "Restore Guide" msgstr "Guia de restauração" #. i18n: file: filedigger/restoredialog.ui:55 #. i18n: ectx: property (text), widget (QPushButton, mRestoreOriginalButton) #: po/rc.cpp:6 rc.cpp:6 #, kde-format msgctxt "@action:button" msgid "Restore to original location" msgstr "Restaurar para sua localização original" #. i18n: file: filedigger/restoredialog.ui:78 #. i18n: ectx: property (text), widget (QPushButton, mRestoreCustomButton) #: po/rc.cpp:9 rc.cpp:9 #, kde-format msgctxt "@action:button" msgid "Choose where to restore" msgstr "Escolha onde restaurar" #. i18n: file: filedigger/restoredialog.ui:132 #. i18n: ectx: property (text), widget (QPushButton, mDestBackButton) #: po/rc.cpp:12 rc.cpp:12 #, kde-format msgctxt "@action:button" msgid "Back" msgstr "Voltar" #. i18n: file: filedigger/restoredialog.ui:144 #. i18n: ectx: property (text), widget (QPushButton, mDestNextButton) #: po/rc.cpp:15 rc.cpp:15 #, kde-format msgctxt "@action:button" msgid "Next" msgstr "Próximo" #. i18n: file: filedigger/restoredialog.ui:175 #. i18n: ectx: property (text), widget (QRadioButton, mNewNameRadioButton) #: po/rc.cpp:18 rc.cpp:18 #, kde-format msgctxt "@option:radio " msgid "Restore the folder under a new name" msgstr "Restaurar a pasta com um novo nome" #. i18n: file: filedigger/restoredialog.ui:208 #. i18n: ectx: property (text), widget (QRadioButton, mOverwriteRadioButton) #: po/rc.cpp:21 rc.cpp:21 #, kde-format msgctxt "@option:radio" msgid "Merge folders" msgstr "Mesclar pastas" #. i18n: file: filedigger/restoredialog.ui:238 #. i18n: ectx: property (text), widget (QLabel, mConfirmOverwriteLabel) #: po/rc.cpp:24 rc.cpp:24 #, kde-format msgctxt "@info Question to user, in dialog" msgid "" "The following files would be overwritten, please confirm that you wish to " "continue." msgstr "" "Os seguintes arquivos serão substituídos, por favor confirme seu desejo de " "continuar." #. i18n: file: filedigger/restoredialog.ui:274 #. i18n: ectx: property (text), widget (QPushButton, mOverwriteBackButton) #: po/rc.cpp:27 rc.cpp:27 #, kde-format msgctxt "@action:button go to previous page in dialog" msgid "Back" msgstr "Voltar" #. i18n: file: filedigger/restoredialog.ui:286 #. i18n: ectx: property (text), widget (QPushButton, mConfirmButton) #: po/rc.cpp:30 rc.cpp:30 #, kde-format msgctxt "@action:button User answers \"yes I confirm: overwrite files\"" msgid "Confirm" msgstr "Confirmar" #. i18n: file: filedigger/restoredialog.ui:341 #. i18n: ectx: property (text), widget (QLabel, mErrorLabel) #: po/rc.cpp:33 rc.cpp:33 #, fuzzy, kde-format msgctxt "@label above the detailed error message" msgid "An error occured while restoring:" msgstr "Ocorreu um erro ao restaurar:" #. i18n: file: filedigger/restoredialog.ui:372 #. i18n: ectx: property (text), widget (QLabel, label) #: po/rc.cpp:36 rc.cpp:36 #, fuzzy, kde-format msgctxt "@label" msgid "Restoration completed successfully!" msgstr "Restauração completada com sucesso!" #. i18n: file: filedigger/restoredialog.ui:413 #. i18n: ectx: property (text), widget (QPushButton, mOpenDestinationButton) #: po/rc.cpp:39 rc.cpp:39 #, kde-format msgid "Open Destination" msgstr "Abrir destino" #. i18n: file: filedigger/restoredialog.ui:472 #. i18n: ectx: property (text), widget (QPushButton, mCloseButton) #: po/rc.cpp:42 rc.cpp:42 #, kde-format msgctxt "@action:button" msgid "Close" msgstr "Fechar" #: po/rc.cpp:43 po/rc.cpp:58 settings/backupplan.cpp:69 rc.cpp:43 rc.cpp:58 #, kde-format msgid "Backups" msgstr "Backups" #: po/rc.cpp:44 rc.cpp:44 msgid "Configure backup plans" msgstr "Configurar planos de backup" #: po/rc.cpp:45 rc.cpp:45 msgid "backup,recovery,safety" msgstr "backup, recuperação, segurança" #: po/rc.cpp:46 rc.cpp:46 msgid "Kup" msgstr "Kup" #: po/rc.cpp:48 rc.cpp:48 msgid "Start taking backup" msgstr "Iniciar o backup" #: po/rc.cpp:49 rc.cpp:49 msgid "A question if user wants to start taking a backup" msgstr "Pergunta se o usuário deseja iniciar o backup" #: po/rc.cpp:50 rc.cpp:50 msgid "Backup succeeded" msgstr "Backup realizado" #: po/rc.cpp:51 rc.cpp:51 msgid "Saving of backup successfully completed" msgstr "Backup salvo com sucesso" #: po/rc.cpp:52 rc.cpp:52 msgid "Backup failed" msgstr "Falha no backup" #: po/rc.cpp:53 rc.cpp:53 msgid "Saving of backup failed, offer user to see log file" msgstr "Falha ao salvar o backup, oferecer ajuda para ver o arquivo de log" #: po/rc.cpp:54 rc.cpp:54 msgid "Integrity check completed" msgstr "Verificação de integridade completada" #: po/rc.cpp:55 rc.cpp:55 msgid "Finished checking integrity of backup archive" msgstr "Verificação de integridade do arquivo de backup terminada" #: po/rc.cpp:56 rc.cpp:56 msgid "Repair completed" msgstr "Reparo completado" #: po/rc.cpp:57 rc.cpp:57 msgid "Finished repairing backup archive" msgstr "Reparo do arquivo de backup terminado" #: po/rc.cpp:59 rc.cpp:59 msgid "Status of backup plans" msgstr "Estado dos planos de backup" #: po/rc.cpp:60 rc.cpp:60 msgid "Backup Status" msgstr "Estado do backup" #: po/rc.cpp:61 rc.cpp:61 msgid "Displays status of backup plans" msgstr "Exibe o estado dos planos de backup" #: settings/backupplan.cpp:38 #, kde-kuit-format msgctxt "" "@label Default name for a new backup plan, %1 is the number of the plan in " "order" msgid "Backup plan %1" msgstr "Plano de backup %1" #: settings/backupplan.cpp:101 #, kde-format msgctxt "default description of newly duplicated backup plan" msgid "%1 (copy)" msgstr "%1 (cópia)" #: settings/backupplan.cpp:213 #, kde-format msgctxt "%1 is fancy formatted date" msgid "Last saved: %1" msgstr "Última cópia: %1" #: settings/backupplan.cpp:218 #, kde-format msgctxt "%1 is storage size of archive" msgid "Size: %1" msgstr "Tamanho: %1" #: settings/backupplan.cpp:223 #, kde-format msgctxt "%1 is free storage space" msgid "Free space: %1" msgstr "Espaço livre: %1" #: settings/backupplan.cpp:227 #, kde-kuit-format msgctxt "@label" msgid "This backup plan has never been run." msgstr "Esse plano de backup nunca foi executado." kup-backup-0.7.1+dfsg/po/ru.po000066400000000000000000001405501322613417100161110ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Alex , 2015 # Drosera Sprout , 2015 # Ilya Ostapenko , 2014 # Simon Persson , 2014-2015 msgid "" msgstr "" "Project-Id-Version: kup\n" "Report-Msgid-Bugs-To: http://kde-apps.org/content/show.php/Kup+Backup+System?" "content=147465\n" "POT-Creation-Date: 2018-01-05 16:00+0800\n" "PO-Revision-Date: 2016-06-11 14:48+0000\n" "Last-Translator: Simon Persson \n" "Language-Team: Russian (http://www.transifex.com/kup/kup/language/ru/)\n" "Language: ru\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%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n" "%100>=11 && n%100<=14)? 2 : 3);\n" #: daemon/bupjob.cpp:47 daemon/buprepairjob.cpp:38 #: daemon/bupverificationjob.cpp:37 #, kde-kuit-format msgctxt "@info notification" msgid "" "The bup program is needed but could not be found, " "maybe it is not installed?" msgstr "" "Требуется программа bup, но она не найдена. " "Похоже, она не установлена." #: daemon/bupjob.cpp:52 daemon/buprepairjob.cpp:43 #, kde-kuit-format msgctxt "@info notification" msgid "" "The par2 program is needed but could not be " "found, maybe it is not installed?" msgstr "" "Требуется программа par2, но она не найдена. " "Похоже, она не установлена." #: daemon/bupjob.cpp:71 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup destination could not be initialised. See log file for more details." msgstr "" "Назначение резервной копии не может быть установлено. Смотрите лог-файл для " "более детального отчёта." #: daemon/bupjob.cpp:93 #, fuzzy, kde-format msgid "Checking backup integrity" msgstr "Проверка целостности резервной копии" #: daemon/bupjob.cpp:104 daemon/bupverificationjob.cpp:67 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups could be corrupted! See log file " "for more details. Do you want to try repairing the backup files?" msgstr "" "Резевная копия не прошла проверку целостности. Возможно, она повреждена. " "Смотрите лог-файл для более детального отчёта. Хотите попробовать " "восстановить резервную копию?" #: daemon/bupjob.cpp:108 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups could be corrupted! See log file " "for more details." msgstr "" "Резевная копия не прошла проверку целостности. Возможно, она повреждена. " "Смотрите лог-файл для более детального отчёта." #: daemon/bupjob.cpp:131 daemon/rsyncjob.cpp:57 #, kde-format msgid "Checking what to copy" msgstr "" #: daemon/bupjob.cpp:138 #, fuzzy, kde-kuit-format msgctxt "@info notification" msgid "Failed to analyze files. See log file for more details." msgstr "" "Не удалось проиндексировать файловую систему. Смотрите лог-файл для более " "детального отчёта." #: daemon/bupjob.cpp:159 daemon/bupjob.cpp:253 daemon/rsyncjob.cpp:175 #, fuzzy, kde-format msgid "Saving backup" msgstr "Создание новой резервной копии" #: daemon/bupjob.cpp:167 daemon/rsyncjob.cpp:120 #, fuzzy, kde-kuit-format msgctxt "@info notification" msgid "Failed to save backup. See log file for more details." msgstr "" "Не удалось сохранить резервную копию. Смотрите лог-файл для более детального " "отчёта." #: daemon/bupjob.cpp:189 #, kde-format msgid "Generating recovery information" msgstr "" #: daemon/bupjob.cpp:197 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed to generate recovery info for the backup. See log file for more " "details." msgstr "" "Не удалось сгенерировать информацию для восстановления резервной копии. " "Смотрите лог-файл для более детального отчёта." #: daemon/bupjob.cpp:254 daemon/rsyncjob.cpp:176 #, fuzzy, kde-format msgctxt "Label for file currently being copied" msgid "File" msgstr "Файл:" #: daemon/buprepairjob.cpp:72 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup repair failed. Your backups could be corrupted! See log file for more " "details." msgstr "" "Не удалось восстановить резервную копию. Возможно, она повреждена! Смотрите " "лог-файл для более детального отчёта." #: daemon/buprepairjob.cpp:76 #, kde-kuit-format msgctxt "@info notification" msgid "Success! Backup repair worked. See log file for more details." msgstr "" #: daemon/buprepairjob.cpp:80 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup repair was not necessary. Your backups are not corrupted.See log file " "for more details." msgstr "" #: daemon/buprepairjob.cpp:85 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup repair failed. Your backups could still be corrupted! See log file " "for more details." msgstr "" "Не удалось восстановить резервную копию. Возможно, она всё ещё повреждена. " "Смотрите лог-файл для более детального отчёта." #: daemon/bupverificationjob.cpp:70 daemon/bupverificationjob.cpp:87 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups are corrupted! See log file for " "more details." msgstr "" "Резервная копия не прошла проверку целостности и повреждена! Смотрите лог-" "файл для более детального отчёта." #: daemon/bupverificationjob.cpp:76 #, kde-kuit-format msgctxt "@info notification" msgid "Backup integrity test was successful, Your backups are fine." msgstr "Резерная копия успешно прошла проверку целостности." #: daemon/bupverificationjob.cpp:83 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups are corrupted! See log file for " "more details. Do you want to try repairing the backup files?" msgstr "" "Резервная копия не прошла проверку целостности и повреждена! Смотрите лог-" "файл для более детального отчёта. Хотите попробовать восстановить резервную " "копию?" #: daemon/edexecutor.cpp:115 daemon/edexecutor.cpp:124 #: daemon/edexecutor.cpp:160 daemon/fsexecutor.cpp:114 #: daemon/fsexecutor.cpp:146 #, kde-kuit-format msgctxt "@title:window" msgid "Problem" msgstr "Проблема" #: daemon/edexecutor.cpp:116 daemon/fsexecutor.cpp:115 #, kde-kuit-format msgctxt "notification" msgid "Invalid type of backup in configuration." msgstr "Неверно сконфигурирован тип резервного копирования." #: daemon/edexecutor.cpp:125 #, kde-kuit-format msgctxt "notification" msgid "You don't have write permission to backup destination." msgstr "У вас нет прав на запись в каталог назначения." #: daemon/kupdaemon.cpp:171 #, kde-format msgid "Continue" msgstr "" #: daemon/kupdaemon.cpp:173 #, kde-format msgid "Stop" msgstr "" #: daemon/kupdaemon.cpp:175 #, kde-format msgctxt "%1 is a text explaining the current activity" msgid "Currently busy: %1" msgstr "" #: daemon/kupdaemon.cpp:176 #, kde-format msgid "Do you really want to stop?" msgstr "" #: daemon/kupdaemon.cpp:179 #, fuzzy, kde-format msgid "User Backups" msgstr "Резервные копии" #: daemon/kupdaemon.cpp:249 #, fuzzy, kde-format msgctxt "status in tooltip" msgid "Backup destination not available" msgstr "Место под хранение резервной копии недоступно" #: daemon/kupdaemon.cpp:253 daemon/kupdaemon.cpp:310 #, kde-format msgid "No backup plans configured" msgstr "" #: daemon/kupdaemon.cpp:259 #, fuzzy, kde-format msgctxt "status in tooltip" msgid "Backup destination available" msgstr "Место под хранение резервной копии доступно" #: daemon/kupdaemon.cpp:269 daemon/planexecutor.cpp:84 #, fuzzy, kde-format msgctxt "status in tooltip" msgid "Backup status OK" msgstr "Резервное копирование настроено" #: daemon/kupdaemon.cpp:276 daemon/planexecutor.cpp:86 #, fuzzy, kde-format msgctxt "status in tooltip" msgid "New backup suggested" msgstr "Рекомендуется создать новую резервную копию" #: daemon/kupdaemon.cpp:283 daemon/planexecutor.cpp:88 #, fuzzy, kde-format msgctxt "status in tooltip" msgid "New backup neeeded" msgstr "Необходимо создать новую резервную копию" #: daemon/main.cpp:41 #, kde-kuit-format msgctxt "@info:shell Error message at startup" msgid "" "Kup is not enabled, enable it from the system settings module. You can do " "that by running kcmshell5 kup" msgstr "" "Kup отключён, включите его, используя модуль в системных настройках или " "команду kcmshell5 kup." #: daemon/main.cpp:47 #, kde-kuit-format msgctxt "@title" msgid "Kup Daemon" msgstr "Демон Kup" #: daemon/main.cpp:48 #, kde-format msgid "" "Kup is a flexible backup solution using the backup storage system 'bup'. " "This allows it to quickly perform incremental backups, only saving the parts " "of files that has actually changed since last backup was taken." msgstr "" "Kup является гибким решением для резервного копирования, основанным на " "системе 'bup'. Оно позволяет быстро выполнять пошаговое резервное " "копирование с сохранением только тех частей файлов, которые изменились с " "момента прошлого резервного копирования." #: daemon/main.cpp:51 kcm/kupkcm.cpp:52 #, kde-format msgid "Copyright (C) 2011-2015 Simon Persson" msgstr "Copyright (C) 2011-2015 Simon Persson" #: daemon/main.cpp:53 filedigger/main.cpp:51 kcm/kupkcm.cpp:54 #, kde-format msgid "Simon Persson" msgstr "Simon Persson" #: daemon/main.cpp:54 filedigger/main.cpp:52 kcm/kupkcm.cpp:55 #, kde-kuit-format msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "Jacobtey, Alex" #: daemon/main.cpp:54 filedigger/main.cpp:52 kcm/kupkcm.cpp:56 #, kde-kuit-format msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "jacobtey@gmail.com, lehaemail@yandex.ru" #: daemon/planexecutor.cpp:76 #, fuzzy, kde-format msgctxt "status in tooltip" msgid "Saving backup" msgstr "Создание новой резервной копии" #: daemon/planexecutor.cpp:78 #, fuzzy, kde-format msgctxt "status in tooltip" msgid "Checking backup integrity" msgstr "Проверка целостности резервной копии" #: daemon/planexecutor.cpp:80 #, fuzzy, kde-format msgctxt "status in tooltip" msgid "Repairing backups" msgstr "Создание новой резервной копии" #: daemon/planexecutor.cpp:118 daemon/planexecutor.cpp:133 #, fuzzy, kde-kuit-format msgctxt "@info" msgid "Do you want to save a first backup now?" msgstr "Хотите создать первую резервную копию сейчас?" #: daemon/planexecutor.cpp:121 #, fuzzy, kde-kuit-format msgctxt "@info" msgid "" "It has been %1 since last backup was saved.\n" "Save a new backup now?" msgstr "" "С момента последнего резервного копирования прошло %1. Хотите начать " "резервное копирование сейчас?" #: daemon/planexecutor.cpp:137 #, fuzzy, kde-kuit-format msgctxt "@info" msgid "" "You have been active for %1 since last backup was saved.\n" "Save a new backup now?" msgstr "" "С момента создания последней резервной копии компьютер использовался %1. " "Хотите начать резервное копирование сейчас?" #: daemon/planexecutor.cpp:170 daemon/planexecutor.cpp:200 #: daemon/planexecutor.cpp:278 #, kde-kuit-format msgctxt "@action:button" msgid "Yes" msgstr "Да" #: daemon/planexecutor.cpp:170 daemon/planexecutor.cpp:201 #: daemon/planexecutor.cpp:279 #, kde-kuit-format msgctxt "@action:button" msgid "No" msgstr "Нет" #: daemon/planexecutor.cpp:192 #, kde-kuit-format msgctxt "@title:window" msgid "Saving of Backup Failed" msgstr "" #: daemon/planexecutor.cpp:197 daemon/planexecutor.cpp:275 #: daemon/planexecutor.cpp:309 #, kde-kuit-format msgctxt "@action:button" msgid "Show log file" msgstr "Показать файлы" #: daemon/planexecutor.cpp:221 #, fuzzy, kde-kuit-format msgctxt "@title:window" msgid "Backup Saved" msgstr "Доступно резервное копирование" #: daemon/planexecutor.cpp:222 #, fuzzy, kde-kuit-format msgctxt "@info notification" msgid "Saving backup completed successfully." msgstr "Восстановление прошло успешно!" #: daemon/planexecutor.cpp:271 #, kde-kuit-format msgctxt "@title:window" msgid "Integrity Check Completed" msgstr "Проверка целостности завершена" #: daemon/planexecutor.cpp:306 #, kde-kuit-format msgctxt "@title:window" msgid "Repair Completed" msgstr "Восстановление завершено" #: daemon/planexecutor.cpp:337 po/rc.cpp:47 rc.cpp:47 #, kde-format msgid "Kup Backup System" msgstr "" #: daemon/rsyncjob.cpp:48 #, kde-kuit-format msgctxt "@info notification" msgid "" "The rsync program is needed but could not be " "found, maybe it is not installed?" msgstr "" "Нужна программа rsync, но она не найдена. Похоже, " "она не установлена." #: filedigger/main.cpp:47 #, kde-kuit-format msgctxt "@title" msgid "File Digger" msgstr "Анализ файлов" #: filedigger/main.cpp:48 #, kde-format msgid "Browser for bup archives." msgstr "Браузер bup-архивов." #: filedigger/main.cpp:49 #, kde-format msgid "Copyright (C) 2013-2015 Simon Persson" msgstr "Copyright (C) 2013-2015 Simon Persson" #: filedigger/main.cpp:59 #, kde-format msgid "Name of the branch to be opened." msgstr "Имя открываемой ветки." #: filedigger/main.cpp:61 #, kde-format msgid "Path to the bup repository to be opened." msgstr "Путь к открываемому репозиторию bup." #: filedigger/main.cpp:70 #, kde-format msgctxt "@info:shell Error message at startup" msgid "" "You must supply the path to a bup or git repository that you wish to open " "for viewing." msgstr "" "Необходимо указать путь к репозиторию bup или git, который вы хотите открыть " "для просмотра." #: filedigger/main.cpp:85 #, kde-kuit-format msgctxt "@info messagebox, %1 is a folder path" msgid "" "The backup archive %1 could not be opened. Check if the " "backups really are located there." msgstr "" #: filedigger/main.cpp:92 #, kde-kuit-format msgctxt "@info messagebox" msgid "You do not have permission needed to read this backup archive." msgstr "" #: filedigger/mergedvfs.cpp:108 #, kde-kuit-format msgctxt "@info messagebox" msgid "" "Could not read this backup archive. Perhaps some files have become " "corrupted. Do you want to run an integrity check to test this?" msgstr "" #: filedigger/mergedvfs.cpp:156 #, kde-kuit-format msgctxt "added after folder name in some cases" msgid " (folder)" msgstr "(папка)" #: filedigger/mergedvfs.cpp:158 #, kde-kuit-format msgctxt "added after file name in some cases" msgid " (symlink)" msgstr "(ссылка)" #: filedigger/mergedvfs.cpp:160 #, kde-kuit-format msgctxt "added after file name in some cases" msgid " (file)" msgstr "(файл)" #: filedigger/restoredialog.cpp:115 kcm/backupplanwidget.cpp:451 #, kde-kuit-format msgctxt "@action:button" msgid "New Folder..." msgstr "Новая папка..." #: filedigger/restoredialog.cpp:141 filedigger/restoredialog.cpp:160 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "No destination was selected, please select one." msgstr "Ни одного места под хранение не выбрано. Сделайте выбор." #: filedigger/restoredialog.cpp:251 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "There was a problem while getting a list of all files to restore: %1" msgstr "" #: filedigger/restoredialog.cpp:264 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "The destination does not have enough space available. Please choose a " "different destination or free some space." msgstr "" "Недостаточно места для размещения резервной копии. Выберите другое место или " "освободите больше места здесь." #: filedigger/restoredialog.cpp:274 #, kde-kuit-format msgctxt "" "added to the suggested filename when restoring, %1 is the time when backup " "was taken" msgid " - saved at %1" msgstr "- сохранено в %1" #: filedigger/restoredialog.cpp:275 #, kde-kuit-format msgctxt "@info" msgid "Folder already exists, please choose a solution" msgstr "Папка с таким именем уже существует. Пожалуйста, выберите решение" #: filedigger/restoredialog.cpp:281 #, kde-kuit-format msgctxt "@info" msgid "File already exists" msgstr "Файл уже существует" #: filedigger/restoredialog.cpp:294 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "The new name entered already exists, please enter a different one." msgstr "Введенное имя уже существует. Нужно выбрать другое." #: filedigger/restoredialog.cpp:371 kcm/dirselector.cpp:50 #, kde-kuit-format msgctxt "default folder name when creating a new folder" msgid "New Folder" msgstr "Новая папка" #: filedigger/restoredialog.cpp:376 kcm/dirselector.cpp:55 #, kde-kuit-format msgctxt "@title:window" msgid "New Folder" msgstr "Новая папка" #: filedigger/restoredialog.cpp:377 kcm/dirselector.cpp:56 #, kde-kuit-format msgctxt "@label:textbox" msgid "" "Create new folder in:\n" "%1" msgstr "Создать новую папку в: %1" #: filedigger/restoredialog.cpp:390 kcm/dirselector.cpp:68 #, kde-format msgid "A folder named %1 already exists." msgstr "Папка с именем %1 уже существует." #: filedigger/restoredialog.cpp:396 kcm/dirselector.cpp:74 #, kde-format msgid "You do not have permission to create %1." msgstr "Недостаточно прав для создания %1." #: filedigger/restorejob.cpp:99 #, kde-kuit-format msgctxt "progress report, current operation" msgid "Restoring" msgstr "Восстановление" #: filedigger/restorejob.cpp:100 #, kde-kuit-format msgctxt "progress report, label" msgid "File:" msgstr "Файл:" #: filedigger/versionlistdelegate.cpp:135 #, kde-kuit-format msgctxt "@action:button" msgid "Open" msgstr "Открыть" #: filedigger/versionlistdelegate.cpp:137 #, kde-kuit-format msgctxt "@action:button" msgid "Restore" msgstr "Восстановить" #: kcm/backupplanwidget.cpp:282 #, kde-kuit-format msgctxt "@action:button" msgid "Exclude Folder" msgstr "" #: kcm/backupplanwidget.cpp:285 #, kde-kuit-format msgctxt "@action:button" msgid "Include Folder" msgstr "" #: kcm/backupplanwidget.cpp:382 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "You don't have permission to read this folder: %1It cannot be included in the source selection. If it does not contain " "anything important to you, one possible solution is to exclude the folder " "from the backup plan." msgstr "" #: kcm/backupplanwidget.cpp:393 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "You don't have permission to read this file: %1It " "cannot be included in the source selection. If the file is not important to " "you, one possible solution is to exclude the whole folder where the file is " "stored from the backup plan." msgstr "" #: kcm/backupplanwidget.cpp:409 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "The symbolic link %1 is currently included but it " "points to a folder which is not: %2.That is " "probably not what you want. One solution is to simply include the target " "folder in the backup plan." msgstr "" #: kcm/backupplanwidget.cpp:417 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "The symbolic link %1 is currently included but it " "points to a file which is not: %2.That is probably " "not what you want. One solution is to simply include the folder where the " "file is stored in the backup plan." msgstr "" #: kcm/backupplanwidget.cpp:440 #, kde-kuit-format msgctxt "@title:window" msgid "Select Folder" msgstr "Выбрать папку" #: kcm/backupplanwidget.cpp:478 #, kde-kuit-format msgctxt "@label" msgid "Description:" msgstr "Описание:" #: kcm/backupplanwidget.cpp:481 #, kde-kuit-format msgctxt "@action:button" msgid "Back to overview" msgstr "Назад к обзору" #: kcm/backupplanwidget.cpp:510 #, kde-kuit-format msgctxt "@info" msgid "" "This type of backup is an archive. It contains both the " "latest version of your files and earlier backed up versions. Using this type " "of backup allows you to recover older versions of your files, or files which " "were deleted on your computer at a later time. The storage space needed is " "minimized by looking for common parts of your files between versions and " "only storing those parts once. Nevertheless, the backup archive will keep " "growing in size as time goes by.Also important to know is that the " "files in the archive can not be accessed directly with a general file " "manager, a special program is needed." msgstr "" "Этот тип резервного копирования является архивом. Он " "содержит как последнюю версию файлов, так и предыдущие версии резервных " "копий. Использование этого типа резервного копирования позволяет " "восстанавливать старые версии файлов или файлы, которые впоследствии были " "удалены на компьютере. Требуется меньше места для хранения за счет поиска в " "версиях файлов одинаковых частей и сохранения их только один раз. Тем не " "менее, архив резервных копий со временем будет расти в размерах.Также " "важно знать, что файлы в архиве невозможно открыть обычным файловым " "менеджером. Для этого нужна специальная программа." #: kcm/backupplanwidget.cpp:525 #, kde-kuit-format msgctxt "@option:radio" msgid "" "Versioned Backup (not available because bup is " "not installed)" msgstr "" "Версионное резервное копирование (недоступно, т.к. bup не установлен)" #: kcm/backupplanwidget.cpp:530 #, kde-kuit-format msgctxt "@option:radio" msgid "Versioned Backup (recommended)" msgstr "Версионное резервное копирование (рекомендовано)" #: kcm/backupplanwidget.cpp:535 #, kde-kuit-format msgctxt "@info" msgid "" "This type of backup is a folder which is synchronized with your selected " "source folders. Taking a backup simply means making the backup destination " "contain an exact copy of your source folders as they are now and nothing " "else. If a file has been deleted in a source folder it will get deleted from " "the backup folder.This type of backup can protect you against data loss " "due to a broken hard drive but it does not help you to recover from your own " "mistakes." msgstr "" "Этот тип резервного копирования представляет собой папку, которая " "синхронизируется с папками, подлежащими резервному копированию. Резервное " "копирование при этом означает, что просто создается точная копия исходных " "данных, и больше ничего. Если файл был удален в исходной папке он будет " "удален и из папки резервного копирования.Данный тип резервного " "копирования может защитить вас от потери данных в случае выхода из строя " "жесткого диска, но бесполезен, если восстановить предыдущее состояние " "потребуется для исправления допущенных вами ошибок." #: kcm/backupplanwidget.cpp:548 #, kde-kuit-format msgctxt "@option:radio" msgid "" "Synchronized Backup (not available because rsync " "is not installed)" msgstr "" "Синхронное резервное копирование (недоступно, т.к. rsync не установлен)" #: kcm/backupplanwidget.cpp:553 #, kde-kuit-format msgctxt "@option:radio" msgid "Synchronized Backup" msgstr "Синхронное резервное копирование" #: kcm/backupplanwidget.cpp:581 #, kde-kuit-format msgctxt "@title" msgid "Backup Type" msgstr "Тип резервного копирования" #: kcm/backupplanwidget.cpp:582 #, kde-kuit-format msgctxt "@label" msgid "Select what type of backup you want" msgstr "Выберите тип резервного копирования" #: kcm/backupplanwidget.cpp:590 #, kde-kuit-format msgctxt "@title" msgid "Sources" msgstr "Источники" #: kcm/backupplanwidget.cpp:591 #, kde-kuit-format msgctxt "@label" msgid "Select which folders to include in backup" msgstr "Выберите папки для резервного копирования" #: kcm/backupplanwidget.cpp:605 #, kde-kuit-format msgctxt "@option:radio" msgid "Filesystem Path" msgstr "Путь файловой системы" #: kcm/backupplanwidget.cpp:606 #, kde-kuit-format msgctxt "@option:radio" msgid "External Storage" msgstr "Внешнее хранилище" #: kcm/backupplanwidget.cpp:612 #, kde-kuit-format msgctxt "@info" msgid "" "You can use this option for backing up to a secondary internal harddrive, an " "external eSATA drive or networked storage. The requirement is just that you " "always mount it at the same path in the filesystem. The path specified here " "does not need to exist at all times, its existance will be monitored." msgstr "" #: kcm/backupplanwidget.cpp:619 #, kde-kuit-format msgctxt "@label:textbox" msgid "Destination Path for Backup:" msgstr "Путь к месту хранения резервных копий:" #: kcm/backupplanwidget.cpp:638 #, kde-kuit-format msgctxt "@info" msgid "" "Use this option if you want to backup your files on an external storage that " "can be plugged in to this computer, such as a USB hard drive or memory stick." msgstr "" "Используйте эту опцию, если нужно сделать резервную копию файлов на внешние " "устройства хранения, которые могут быть подключены к этому компьютеру, такие " "как жесткий диск USB или карта памяти." #: kcm/backupplanwidget.cpp:648 kcm/backupplanwidget.cpp:652 #, kde-kuit-format msgctxt "@info:tooltip" msgid "The specified folder will be created if it does not exist." msgstr "Указанная папка будет создана, если она еще не существует." #: kcm/backupplanwidget.cpp:650 #, kde-kuit-format msgctxt "@label:textbox" msgid "Folder on Destination Drive:" msgstr "Папка на диске хранилища:" #: kcm/backupplanwidget.cpp:658 #, kde-kuit-format msgctxt "@info:tooltip" msgid "Open dialog to select a folder" msgstr "Открыть диалог выбора папки" #: kcm/backupplanwidget.cpp:688 #, kde-kuit-format msgctxt "@title" msgid "Destination" msgstr "Место хранения" #: kcm/backupplanwidget.cpp:689 #, kde-kuit-format msgctxt "@label" msgid "Select the backup destination" msgstr "Выбрать место хранения резервной копии" #: kcm/backupplanwidget.cpp:706 #, kde-kuit-format msgctxt "@option:radio" msgid "Manual Activation" msgstr "Запуск вручную" #: kcm/backupplanwidget.cpp:707 #, kde-kuit-format msgctxt "@option:radio" msgid "Interval" msgstr "Интервал" #: kcm/backupplanwidget.cpp:708 #, kde-kuit-format msgctxt "@option:radio" msgid "Active Usage Time" msgstr "Длительность работы" #: kcm/backupplanwidget.cpp:710 #, kde-kuit-format msgctxt "@info" msgid "" "Backups are only taken when manually requested. This can be done by using " "the popup menu from the backup system tray icon." msgstr "" "Резервное копирование начнется только после активации вручную. Это можно " "сделано в контекстном меню значка системы резервного копирования в трее." #: kcm/backupplanwidget.cpp:724 #, kde-kuit-format msgctxt "@info" msgid "" "New backup will be triggered when backup destination becomes available and " "more than the configured interval has passed since the last backup was taken." msgstr "" "Новое резервное копирование начнется с момента доступности места хранения, " "но не раньше, чем истечет заданный интервал времени с момента создания " "последней резервной копии." #: kcm/backupplanwidget.cpp:741 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Minutes" msgstr "Минуты" #: kcm/backupplanwidget.cpp:742 kcm/backupplanwidget.cpp:769 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Hours" msgstr "Часы" #: kcm/backupplanwidget.cpp:743 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Days" msgstr "Дни" #: kcm/backupplanwidget.cpp:744 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Weeks" msgstr "Недели" #: kcm/backupplanwidget.cpp:754 #, kde-kuit-format msgctxt "@info" msgid "" "New backup will be triggered when backup destination becomes available and " "you have been using your computer actively for more than the configured time " "limit since the last backup was taken." msgstr "" "Новое резервное копирование начнется с того момента, как станет доступным " "назначенное место хранения, при этом время работы компьютера с момента " "последнего резервного копирования будет превышать заданное значение." #: kcm/backupplanwidget.cpp:775 #, kde-kuit-format msgctxt "@option:check" msgid "Ask for confirmation before taking backup" msgstr "Запрашивать подтверждение резервного копирования" #: kcm/backupplanwidget.cpp:794 #, kde-kuit-format msgctxt "@title" msgid "Schedule" msgstr "Расписание" #: kcm/backupplanwidget.cpp:795 #, kde-kuit-format msgctxt "@label" msgid "Specify the backup schedule" msgstr "Составить план резервного копирования" #: kcm/backupplanwidget.cpp:808 #, kde-kuit-format msgctxt "@option:check" msgid "Show hidden folders in source selection" msgstr "" #: kcm/backupplanwidget.cpp:814 #, kde-kuit-format msgctxt "@info" msgid "" "This makes it possible to explicitly include or exclude hidden folders in " "the backup source selection. Hidden folders have a name that starts with a " "dot. They are typically located in your home folder and are used to store " "settings and temporary files for your applications." msgstr "" #: kcm/backupplanwidget.cpp:832 #, kde-kuit-format msgctxt "@info" msgid "" "This will make your backups use around 10% more storage space and saving " "backups will take slightly longer time. In return it will be possible to " "recover from a partially corrupted backup." msgstr "" #: kcm/backupplanwidget.cpp:838 #, kde-kuit-format msgctxt "@option:check" msgid "Generate recovery information" msgstr "" #: kcm/backupplanwidget.cpp:840 #, kde-kuit-format msgctxt "@option:check" msgid "" "Generate recovery information (not available because par2 is not installed)" msgstr "" #: kcm/backupplanwidget.cpp:856 #, kde-kuit-format msgctxt "@option:check" msgid "Verify integrity of backups" msgstr "" #: kcm/backupplanwidget.cpp:860 #, kde-kuit-format msgctxt "@info" msgid "" "Checks the whole backup archive for corruption every time you save new data. " "Saving backups will take a little bit longer time but it allows you to catch " "corruption problems sooner than at the time you need to use a backup, at " "that time it could be too late." msgstr "" #: kcm/backupplanwidget.cpp:882 #, kde-kuit-format msgctxt "@title" msgid "Advanced" msgstr "Дополнительно" #: kcm/backupplanwidget.cpp:883 #, kde-kuit-format msgctxt "@label" msgid "Extra options for advanced users" msgstr "Расширенные настройки для продвинутых пользователей" #: kcm/driveselection.cpp:275 #, kde-kuit-format msgctxt "@label Only shown if no drives are detected" msgid "" "Plug in the external storage you wish to use, then select it in this list." msgstr "Подключите внешнее хранилище и выберите его из списка." #: kcm/driveselectiondelegate.cpp:75 #, kde-kuit-format msgctxt "@item:inlistbox this text is added if selected drive is disconnected" msgid " (disconnected)" msgstr "(отключено)" #: kcm/driveselectiondelegate.cpp:78 #, kde-kuit-format msgctxt "@label %1 is amount of free storage space of hard drive" msgid "%1 free" msgstr "%1 свободно" #: kcm/driveselectiondelegate.cpp:92 #, kde-kuit-format msgctxt "" "@item:inlistbox used for unnamed filesystems, more than one filesystem on " "device. %1 is partition number, %2 is device description, %3 is either empty " "or the \" (disconnected)\" text" msgid "Partition %1 on %2%3" msgstr "Раздел %1 на %2%3" #: kcm/driveselectiondelegate.cpp:95 #, kde-kuit-format msgctxt "" "@item:inlistbox used when there is only one unnamed filesystem on device. %1 " "is device description, %2 is either empty or the \" (disconnected)\" text" msgid "%1%2" msgstr "%1%2" #: kcm/driveselectiondelegate.cpp:99 #, kde-kuit-format msgctxt "" "@item:inlistbox %1 is filesystem label, %2 is the device description, %3 is " "either empty or the \" (disconnected)\" text" msgid "%1 on %2%3" msgstr "%1 на %2%3" #: kcm/driveselectiondelegate.cpp:106 #, kde-kuit-format msgctxt "@item:inlistbox %1 is drive(partition) label, %2 is storage capacity" msgid "%1: %2 total capacity" msgstr "%1: %2 общего объема" #: kcm/driveselectiondelegate.cpp:153 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "" "Warning: Symbolic links and file permissions can not be saved to this file " "system. File permissions only matters if there is more than one user of this " "computer or if you are backing up executable program files." msgstr "" #: kcm/driveselectiondelegate.cpp:157 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "" "Warning: File permissions can not be saved to this file system. File " "permissions only matters if there is more than one user of this computer or " "if you are backing up executable program files." msgstr "" #: kcm/folderselectionmodel.cpp:107 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "" "%1will be included in the backup, except for " "unchecked subfolders" msgstr "" #: kcm/folderselectionmodel.cpp:111 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "%1will be included in the backup" msgstr "%1будет включено в резервную копию" #: kcm/folderselectionmodel.cpp:115 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "" "%1 will not be included in " "the backup but contains folders that will" msgstr "" #: kcm/folderselectionmodel.cpp:119 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "" "%1 will not be included in " "the backup" msgstr "" "%1не будет включено в " "резервную копию" #: kcm/kupkcm.cpp:49 #, kde-format msgid "Kup Configuration Module" msgstr "Модуль настройки Kup" #: kcm/kupkcm.cpp:51 #, kde-format msgid "Configuration of backup plans for the Kup backup system" msgstr "Настройка расписания плана резервного копирования системы Kup" #: kcm/kupkcm.cpp:54 #, kde-format msgid "Maintainer" msgstr "Мэйнтейнер" #: kcm/kupkcm.cpp:87 #, kde-format msgid "" "

Backup programs are missing

Before you can activate any backup " "plan you need to install either of

  • bup, for versioned backups
  • rsync, for synchronized backups
" msgstr "" "

Отсутствуют программы резервного копирования

Прежде, чем " "поставить на исполнение план резервного копирования, необходимо установить " "или

  • bup для версионого резервного копирования
  • или rsync, " "для синхронного
" #: kcm/kupkcm.cpp:168 #, kde-kuit-format msgctxt "@title:window" msgid "Warning" msgstr "Предупреждение" #: kcm/kupkcm.cpp:170 #, kde-kuit-format msgctxt "@info %1 is the name of the backup plan" msgid "" "%1 does not have a destination!No backups will be saved by this plan." msgstr "" "Для %1 не определено место храненияРезервных копий по этому плану " "создано не будет." #: kcm/kupkcm.cpp:227 #, kde-kuit-format msgctxt "@action:button" msgid "Add New Plan" msgstr "Добавить новый план" #: kcm/kupkcm.cpp:238 #, kde-kuit-format msgctxt "@option:check" msgid "Backups Enabled" msgstr "Доступно резервное копирование" #: kcm/planstatuswidget.cpp:48 #, kde-kuit-format msgctxt "@action:button" msgid "Configure" msgstr "Настроить" #: kcm/planstatuswidget.cpp:51 #, kde-kuit-format msgctxt "@action:button" msgid "Remove" msgstr "Удалить" #: kcm/planstatuswidget.cpp:54 #, kde-kuit-format msgctxt "@action:button" msgid "Duplicate" msgstr "" #: kioslave/bupslave.cpp:92 kioslave/bupslave.cpp:149 kioslave/bupslave.cpp:186 #: kioslave/bupslave.cpp:249 kioslave/bupslave.cpp:271 #, kde-format msgid "" "No bup repository found.\n" "%1" msgstr "" "Не найден репозиторий bup.\n" "%1" #: plasmoid/contents/ui/FullRepresentation.qml:88 #, fuzzy, kde-format msgid "Save new backup" msgstr "Создание новой резервной копии" #: plasmoid/contents/ui/FullRepresentation.qml:94 #, fuzzy, kde-format msgid "Show files" msgstr "Показать файлы" #: plasmoid/contents/ui/FullRepresentation.qml:99 #, fuzzy, kde-format msgid "Show log file" msgstr "Показать файлы" #. i18n: file: filedigger/restoredialog.ui:14 #. i18n: ectx: property (windowTitle), widget (QDialog, RestoreDialog) #: po/rc.cpp:3 rc.cpp:3 #, kde-format msgctxt "@title:window" msgid "Restore Guide" msgstr "Инструкция по восстановлению" #. i18n: file: filedigger/restoredialog.ui:55 #. i18n: ectx: property (text), widget (QPushButton, mRestoreOriginalButton) #: po/rc.cpp:6 rc.cpp:6 #, kde-format msgctxt "@action:button" msgid "Restore to original location" msgstr "Восстановить в исходное место" #. i18n: file: filedigger/restoredialog.ui:78 #. i18n: ectx: property (text), widget (QPushButton, mRestoreCustomButton) #: po/rc.cpp:9 rc.cpp:9 #, kde-format msgctxt "@action:button" msgid "Choose where to restore" msgstr "Выбрать, куда восстановить" #. i18n: file: filedigger/restoredialog.ui:132 #. i18n: ectx: property (text), widget (QPushButton, mDestBackButton) #: po/rc.cpp:12 rc.cpp:12 #, kde-format msgctxt "@action:button" msgid "Back" msgstr "Назад" #. i18n: file: filedigger/restoredialog.ui:144 #. i18n: ectx: property (text), widget (QPushButton, mDestNextButton) #: po/rc.cpp:15 rc.cpp:15 #, kde-format msgctxt "@action:button" msgid "Next" msgstr "Далее" #. i18n: file: filedigger/restoredialog.ui:175 #. i18n: ectx: property (text), widget (QRadioButton, mNewNameRadioButton) #: po/rc.cpp:18 rc.cpp:18 #, kde-format msgctxt "@option:radio " msgid "Restore the folder under a new name" msgstr "Восстановить папку под новым именем" #. i18n: file: filedigger/restoredialog.ui:208 #. i18n: ectx: property (text), widget (QRadioButton, mOverwriteRadioButton) #: po/rc.cpp:21 rc.cpp:21 #, kde-format msgctxt "@option:radio" msgid "Merge folders" msgstr "Упорядочить папки" #. i18n: file: filedigger/restoredialog.ui:238 #. i18n: ectx: property (text), widget (QLabel, mConfirmOverwriteLabel) #: po/rc.cpp:24 rc.cpp:24 #, kde-format msgctxt "@info Question to user, in dialog" msgid "" "The following files would be overwritten, please confirm that you wish to " "continue." msgstr "Следующие файлы будут перезаписаны. Продолжить?" #. i18n: file: filedigger/restoredialog.ui:274 #. i18n: ectx: property (text), widget (QPushButton, mOverwriteBackButton) #: po/rc.cpp:27 rc.cpp:27 #, kde-format msgctxt "@action:button go to previous page in dialog" msgid "Back" msgstr "Назад" #. i18n: file: filedigger/restoredialog.ui:286 #. i18n: ectx: property (text), widget (QPushButton, mConfirmButton) #: po/rc.cpp:30 rc.cpp:30 #, kde-format msgctxt "@action:button User answers \"yes I confirm: overwrite files\"" msgid "Confirm" msgstr "Готово" #. i18n: file: filedigger/restoredialog.ui:341 #. i18n: ectx: property (text), widget (QLabel, mErrorLabel) #: po/rc.cpp:33 rc.cpp:33 #, kde-format msgctxt "@label above the detailed error message" msgid "An error occured while restoring:" msgstr "Во время восстановления произошла ошибка:" #. i18n: file: filedigger/restoredialog.ui:372 #. i18n: ectx: property (text), widget (QLabel, label) #: po/rc.cpp:36 rc.cpp:36 #, kde-format msgctxt "@label" msgid "Restoration completed successfully!" msgstr "Восстановление прошло успешно!" #. i18n: file: filedigger/restoredialog.ui:413 #. i18n: ectx: property (text), widget (QPushButton, mOpenDestinationButton) #: po/rc.cpp:39 rc.cpp:39 #, kde-format msgid "Open Destination" msgstr "Открыть место хранения" #. i18n: file: filedigger/restoredialog.ui:472 #. i18n: ectx: property (text), widget (QPushButton, mCloseButton) #: po/rc.cpp:42 rc.cpp:42 #, kde-format msgctxt "@action:button" msgid "Close" msgstr "Закрыть" #: po/rc.cpp:43 po/rc.cpp:58 settings/backupplan.cpp:69 rc.cpp:43 rc.cpp:58 #, kde-format msgid "Backups" msgstr "Резервные копии" #: po/rc.cpp:44 rc.cpp:44 msgid "Configure backup plans" msgstr "Настроить планы резервного копирования" #: po/rc.cpp:45 rc.cpp:45 msgid "backup,recovery,safety" msgstr "резервное копирование,восстановление,безопасность" #: po/rc.cpp:46 rc.cpp:46 msgid "Kup" msgstr "" #: po/rc.cpp:48 rc.cpp:48 msgid "Start taking backup" msgstr "" #: po/rc.cpp:49 rc.cpp:49 msgid "A question if user wants to start taking a backup" msgstr "" #: po/rc.cpp:50 rc.cpp:50 #, fuzzy msgid "Backup succeeded" msgstr "Необходимо создать новую резервную копию" #: po/rc.cpp:51 rc.cpp:51 msgid "Saving of backup successfully completed" msgstr "" #: po/rc.cpp:52 rc.cpp:52 msgid "Backup failed" msgstr "" #: po/rc.cpp:53 rc.cpp:53 msgid "Saving of backup failed, offer user to see log file" msgstr "" #: po/rc.cpp:54 rc.cpp:54 msgid "Integrity check completed" msgstr "" #: po/rc.cpp:55 rc.cpp:55 msgid "Finished checking integrity of backup archive" msgstr "" #: po/rc.cpp:56 rc.cpp:56 msgid "Repair completed" msgstr "" #: po/rc.cpp:57 rc.cpp:57 msgid "Finished repairing backup archive" msgstr "" #: po/rc.cpp:59 rc.cpp:59 #, fuzzy msgid "Status of backup plans" msgstr "Настроить планы резервного копирования" #: po/rc.cpp:60 rc.cpp:60 #, fuzzy msgid "Backup Status" msgstr "Резервное копирование настроено" #: po/rc.cpp:61 rc.cpp:61 msgid "Displays status of backup plans" msgstr "" #: settings/backupplan.cpp:38 #, kde-kuit-format msgctxt "" "@label Default name for a new backup plan, %1 is the number of the plan in " "order" msgid "Backup plan %1" msgstr "План резервного копирования %1" #: settings/backupplan.cpp:101 #, kde-format msgctxt "default description of newly duplicated backup plan" msgid "%1 (copy)" msgstr "" #: settings/backupplan.cpp:213 #, fuzzy, kde-format msgctxt "%1 is fancy formatted date" msgid "Last saved: %1" msgstr "- сохранено в %1" #: settings/backupplan.cpp:218 #, kde-format msgctxt "%1 is storage size of archive" msgid "Size: %1" msgstr "" #: settings/backupplan.cpp:223 #, kde-format msgctxt "%1 is free storage space" msgid "Free space: %1" msgstr "" #: settings/backupplan.cpp:227 #, kde-kuit-format msgctxt "@label" msgid "This backup plan has never been run." msgstr "Этот план резервного копирования еще не запускался." #~ msgctxt "@title:window" #~ msgid "Backups" #~ msgstr "Резервные копии" #~ msgctxt "@title:menu" #~ msgid "Backups" #~ msgstr "Резервные копии" #~ msgctxt "@action:inmenu" #~ msgid "Configure Backups" #~ msgstr "Настройка резервного копирования" #~ msgctxt "@action:inmenu" #~ msgid "Take Backup Now" #~ msgstr "Начать резервное копирование сейчас" #~ msgctxt "@action:inmenu" #~ msgid "Show Log File" #~ msgstr "Показать файлы" #~ msgctxt "@title:window" #~ msgid "Backup Device Available - %1" #~ msgstr "Доступно резервное копирование устройства - 1%" #~ msgctxt "@label %1 is fancy formatted date, %2 is time of day" #~ msgid "Last backup was taken %1 at %2.\n" #~ msgstr "Последнее резервное копирование было сделано %1 в %2. \n" #~ msgctxt "@label %1 is storage size of archive" #~ msgid "The size of the backup archive was %1.\n" #~ msgstr "Размер архива резервного копирования составлял %1.\n" #~ msgctxt "@label %1 is free storage space" #~ msgid "The destination still had %1 available.\n" #~ msgstr "В области хранения доступно %1.\n" kup-backup-0.7.1+dfsg/po/sv.po000066400000000000000000001326501322613417100161150ustar00rootroot00000000000000# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # antoneliasson , 2015. # Simon Persson , 2012-2014. # Simon Persson , 2014-2015, 2017. msgid "" msgstr "" "Project-Id-Version: kup\n" "Report-Msgid-Bugs-To: http://kde-apps.org/content/show.php/Kup+Backup+System?" "content=147465\n" "POT-Creation-Date: 2018-01-05 16:00+0800\n" "PO-Revision-Date: 2017-04-22 11:59+0800\n" "Last-Translator: Simon Persson \n" "Language-Team: English \n" "Language: sv\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-Generator: Lokalize 2.0\n" #: daemon/bupjob.cpp:47 daemon/buprepairjob.cpp:38 #: daemon/bupverificationjob.cpp:37 #, kde-kuit-format msgctxt "@info notification" msgid "" "The bup program is needed but could not be found, " "maybe it is not installed?" msgstr "" "Programmet bup behövs men kunde inte hittas, det " "kanske inte är installerat?" #: daemon/bupjob.cpp:52 daemon/buprepairjob.cpp:43 #, kde-kuit-format msgctxt "@info notification" msgid "" "The par2 program is needed but could not be " "found, maybe it is not installed?" msgstr "" "Programmet par2 behövs men kunde inte hittas, det " "kanske inte är installerat?" #: daemon/bupjob.cpp:71 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup destination could not be initialised. See log file for more details." msgstr "" "Arkiv för säkerhetskopior kunde inte initialiseras. Se loggfil för detaljer." #: daemon/bupjob.cpp:93 #, kde-format msgid "Checking backup integrity" msgstr "Kontrollerar säkerhetskopiornas integritet" #: daemon/bupjob.cpp:104 daemon/bupverificationjob.cpp:67 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups could be corrupted! See log file " "for more details. Do you want to try repairing the backup files?" msgstr "" "Integritetskontroll misslyckades. Dina säkerhetskopior kan vara skadade! Se " "loggfil för detaljer. Vill du försöka reparera säkerhetskopiorna?" #: daemon/bupjob.cpp:108 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups could be corrupted! See log file " "for more details." msgstr "" "Integritetskontroll misslyckades. Dina säkerhetskopior kan vara skadade! Se " "loggfil för detaljer." #: daemon/bupjob.cpp:131 daemon/rsyncjob.cpp:57 #, kde-format msgid "Checking what to copy" msgstr "Kollar vad som ska kopieras" #: daemon/bupjob.cpp:138 #, kde-kuit-format msgctxt "@info notification" msgid "Failed to analyze files. See log file for more details." msgstr "Misslyckades att analysera filer. Se loggfil för detaljer." #: daemon/bupjob.cpp:159 daemon/bupjob.cpp:253 daemon/rsyncjob.cpp:175 #, kde-format msgid "Saving backup" msgstr "Sparar säkerhetskopia" #: daemon/bupjob.cpp:167 daemon/rsyncjob.cpp:120 #, kde-kuit-format msgctxt "@info notification" msgid "Failed to save backup. See log file for more details." msgstr "Misslyckades att spara ny säkerhetskopia. Se loggfil för detaljer." #: daemon/bupjob.cpp:189 #, kde-format msgid "Generating recovery information" msgstr "Genererar återställningsinformation" #: daemon/bupjob.cpp:197 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed to generate recovery info for the backup. See log file for more " "details." msgstr "" "Misslyckades med att generera återställningsinfo. Se loggfil för detaljer." #: daemon/bupjob.cpp:254 daemon/rsyncjob.cpp:176 #, kde-format msgctxt "Label for file currently being copied" msgid "File" msgstr "Fil" #: daemon/buprepairjob.cpp:72 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup repair failed. Your backups could be corrupted! See log file for more " "details." msgstr "" "Misslyckades med reparation. Dina säkerhetskopior kan vara skadade " "fortfarande. Se loggfil för detaljer." #: daemon/buprepairjob.cpp:76 #, kde-kuit-format msgctxt "@info notification" msgid "Success! Backup repair worked. See log file for more details." msgstr "Reparationen lyckades! Se loggfil för detaljer." #: daemon/buprepairjob.cpp:80 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup repair was not necessary. Your backups are not corrupted.See log file " "for more details." msgstr "" "Reparation behövdes inte, dina säkerhetskopior är ok. Se loggfil för " "detaljer." #: daemon/buprepairjob.cpp:85 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup repair failed. Your backups could still be corrupted! See log file " "for more details." msgstr "" "Reparationen misslyckades. Dina säkerhetskopior kan fortfarande vara " "skadade! Se loggfil för detaljer." #: daemon/bupverificationjob.cpp:70 daemon/bupverificationjob.cpp:87 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups are corrupted! See log file for " "more details." msgstr "" "Integritetskontrollen gick dåligt, dina säkerhetskopior är skadade! Se " "loggfil för detaljer." #: daemon/bupverificationjob.cpp:76 #, kde-kuit-format msgctxt "@info notification" msgid "Backup integrity test was successful, Your backups are fine." msgstr "Integritetskontroll gick bra. Dina säkerhetskopior är i fin form." #: daemon/bupverificationjob.cpp:83 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups are corrupted! See log file for " "more details. Do you want to try repairing the backup files?" msgstr "" "Integritetskontrollen gick dåligt, dina säkerhetskopior är skadade! Se " "loggfil för detaljer. Vill du försöka reparera säkerhetskopiorna?" #: daemon/edexecutor.cpp:115 daemon/edexecutor.cpp:124 #: daemon/edexecutor.cpp:160 daemon/fsexecutor.cpp:114 #: daemon/fsexecutor.cpp:146 #, kde-kuit-format msgctxt "@title:window" msgid "Problem" msgstr "Problem" #: daemon/edexecutor.cpp:116 daemon/fsexecutor.cpp:115 #, kde-kuit-format msgctxt "notification" msgid "Invalid type of backup in configuration." msgstr "Ogiltig kopieringstyp i dina inställningar." #: daemon/edexecutor.cpp:125 #, kde-kuit-format msgctxt "notification" msgid "You don't have write permission to backup destination." msgstr "Du har inte skrivrättigheter till destinationsmappen." #: daemon/kupdaemon.cpp:171 #, kde-format msgid "Continue" msgstr "Fortsätt" #: daemon/kupdaemon.cpp:173 #, kde-format msgid "Stop" msgstr "Avbryt" #: daemon/kupdaemon.cpp:175 #, kde-format msgctxt "%1 is a text explaining the current activity" msgid "Currently busy: %1" msgstr "Upptagen för tillfället: %1" #: daemon/kupdaemon.cpp:176 #, kde-format msgid "Do you really want to stop?" msgstr "Vill du verkligen avbryta?" #: daemon/kupdaemon.cpp:179 #, kde-format msgid "User Backups" msgstr "Säkerhetskopior" #: daemon/kupdaemon.cpp:249 #, kde-format msgctxt "status in tooltip" msgid "Backup destination not available" msgstr "Destination inte tillgänglig" #: daemon/kupdaemon.cpp:253 daemon/kupdaemon.cpp:310 #, kde-format msgid "No backup plans configured" msgstr "Inga planer för säkerhetskopiering" #: daemon/kupdaemon.cpp:259 #, kde-format msgctxt "status in tooltip" msgid "Backup destination available" msgstr "Destination tillgänglig" #: daemon/kupdaemon.cpp:269 daemon/planexecutor.cpp:84 #, kde-format msgctxt "status in tooltip" msgid "Backup status OK" msgstr "Status OK" #: daemon/kupdaemon.cpp:276 daemon/planexecutor.cpp:86 #, kde-format msgctxt "status in tooltip" msgid "New backup suggested" msgstr "Ny säkerhetskopia rekommenderas" #: daemon/kupdaemon.cpp:283 daemon/planexecutor.cpp:88 #, kde-format msgctxt "status in tooltip" msgid "New backup neeeded" msgstr "Ny säkerhetskopia behövs" #: daemon/main.cpp:41 #, kde-kuit-format msgctxt "@info:shell Error message at startup" msgid "" "Kup is not enabled, enable it from the system settings module. You can do " "that by running kcmshell5 kup" msgstr "" "Kup är inte aktivt, aktivera det från modulen i systeminställningarna. Du " "kan göra det genom att köra kcmshell5 kup." #: daemon/main.cpp:47 #, kde-kuit-format msgctxt "@title" msgid "Kup Daemon" msgstr "Kupdemon" #: daemon/main.cpp:48 #, kde-format msgid "" "Kup is a flexible backup solution using the backup storage system 'bup'. " "This allows it to quickly perform incremental backups, only saving the parts " "of files that has actually changed since last backup was taken." msgstr "" "Kup är en flexibel lösning för säkerhetskopiering som använder programmet " "'bup' för lagring. Detta ger möjlighet att snabbt ta inkrementella " "säkerhetskopior, endast de delar av filer som har ändrats sedan förra " "kopieringen kopieras på nytt." #: daemon/main.cpp:51 kcm/kupkcm.cpp:52 #, kde-format msgid "Copyright (C) 2011-2015 Simon Persson" msgstr "Upphovsrätt (C) 2011-2015 Simon Persson" #: daemon/main.cpp:53 filedigger/main.cpp:51 kcm/kupkcm.cpp:54 #, kde-format msgid "Simon Persson" msgstr "Simon Persson" #: daemon/main.cpp:54 filedigger/main.cpp:52 kcm/kupkcm.cpp:55 #, kde-kuit-format msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "Simon Persson" #: daemon/main.cpp:54 filedigger/main.cpp:52 kcm/kupkcm.cpp:56 #, kde-kuit-format msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "simonpersson1@gmail.com" #: daemon/planexecutor.cpp:76 #, kde-format msgctxt "status in tooltip" msgid "Saving backup" msgstr "Sparar säkerhetskopia" #: daemon/planexecutor.cpp:78 #, kde-format msgctxt "status in tooltip" msgid "Checking backup integrity" msgstr "Kontrollerar integritet" #: daemon/planexecutor.cpp:80 #, kde-format msgctxt "status in tooltip" msgid "Repairing backups" msgstr "Reparerar säkerhetskopior" #: daemon/planexecutor.cpp:118 daemon/planexecutor.cpp:133 #, kde-kuit-format msgctxt "@info" msgid "Do you want to save a first backup now?" msgstr "Vill du spara den första säkerhetskopian nu?" #: daemon/planexecutor.cpp:121 #, kde-kuit-format msgctxt "@info" msgid "" "It has been %1 since last backup was saved.\n" "Save a new backup now?" msgstr "" "Det har gått %1 sedan förra säkerhetskopian sparades.\n" "Vill du ta en ny nu?" #: daemon/planexecutor.cpp:137 #, kde-kuit-format msgctxt "@info" msgid "" "You have been active for %1 since last backup was saved.\n" "Save a new backup now?" msgstr "" "Du har varit aktiv i %1 sedan förra säkerhetskopieringen.\n" "Vill du spara en ny kopia nu?" #: daemon/planexecutor.cpp:170 daemon/planexecutor.cpp:200 #: daemon/planexecutor.cpp:278 #, kde-kuit-format msgctxt "@action:button" msgid "Yes" msgstr "Ja" #: daemon/planexecutor.cpp:170 daemon/planexecutor.cpp:201 #: daemon/planexecutor.cpp:279 #, kde-kuit-format msgctxt "@action:button" msgid "No" msgstr "Nej" #: daemon/planexecutor.cpp:192 #, kde-kuit-format msgctxt "@title:window" msgid "Saving of Backup Failed" msgstr "Säkerhetskopiering misslyckades" #: daemon/planexecutor.cpp:197 daemon/planexecutor.cpp:275 #: daemon/planexecutor.cpp:309 #, kde-kuit-format msgctxt "@action:button" msgid "Show log file" msgstr "Visa loggfil" #: daemon/planexecutor.cpp:221 #, kde-kuit-format msgctxt "@title:window" msgid "Backup Saved" msgstr "Säkerhetskopiering färdig" #: daemon/planexecutor.cpp:222 #, kde-kuit-format msgctxt "@info notification" msgid "Saving backup completed successfully." msgstr "Färdig med att spara säkerhetskopia." #: daemon/planexecutor.cpp:271 #, kde-kuit-format msgctxt "@title:window" msgid "Integrity Check Completed" msgstr "Färdig med integritetskontroll" #: daemon/planexecutor.cpp:306 #, kde-kuit-format msgctxt "@title:window" msgid "Repair Completed" msgstr "Färdig med reparation" #: daemon/planexecutor.cpp:337 po/rc.cpp:47 rc.cpp:47 #, kde-format msgid "Kup Backup System" msgstr "Kup Säkerhetskopiering" #: daemon/rsyncjob.cpp:48 #, kde-kuit-format msgctxt "@info notification" msgid "" "The rsync program is needed but could not be " "found, maybe it is not installed?" msgstr "" "Programmet rsync behövs men kunde inte hittas, " "det kanske inte är installerat?" #: filedigger/main.cpp:47 #, kde-kuit-format msgctxt "@title" msgid "File Digger" msgstr "Filgrävaren" #: filedigger/main.cpp:48 #, kde-format msgid "Browser for bup archives." msgstr "Browser för bup arkiv" #: filedigger/main.cpp:49 #, kde-format msgid "Copyright (C) 2013-2015 Simon Persson" msgstr "Upphovsrätt (C) 2013-2015 Simon Persson" #: filedigger/main.cpp:59 #, kde-format msgid "Name of the branch to be opened." msgstr "Namn på arkivgren att öppna" #: filedigger/main.cpp:61 #, kde-format msgid "Path to the bup repository to be opened." msgstr "Sökväg till det bup-arkiv som ska öppnas" #: filedigger/main.cpp:70 #, kde-format msgctxt "@info:shell Error message at startup" msgid "" "You must supply the path to a bup or git repository that you wish to open " "for viewing." msgstr "Du måste ge sökvägen till det bup-, eller git-arkiv som du vill öppna." #: filedigger/main.cpp:85 #, kde-kuit-format msgctxt "@info messagebox, %1 is a folder path" msgid "" "The backup archive %1 could not be opened. Check if the " "backups really are located there." msgstr "" "Arkivet med säkerhetskopior, %1, kunde inte öppnas. " "Kolla att detta verkligen är platsen där säkerhetskopiorna ligger." #: filedigger/main.cpp:92 #, kde-kuit-format msgctxt "@info messagebox" msgid "You do not have permission needed to read this backup archive." msgstr "Du har inte tillräckliga rättigheter för att läsa detta arkivet." #: filedigger/mergedvfs.cpp:108 #, kde-kuit-format msgctxt "@info messagebox" msgid "" "Could not read this backup archive. Perhaps some files have become " "corrupted. Do you want to run an integrity check to test this?" msgstr "" "Kunde inte läsa arkivet med säkerhetskopiorna, det kanske är någon fil som " "har blivit skadad. Vill du köra en integritetskontroll?" #: filedigger/mergedvfs.cpp:156 #, kde-kuit-format msgctxt "added after folder name in some cases" msgid " (folder)" msgstr "(mapp)" #: filedigger/mergedvfs.cpp:158 #, kde-kuit-format msgctxt "added after file name in some cases" msgid " (symlink)" msgstr "(symbolisk länk)" #: filedigger/mergedvfs.cpp:160 #, kde-kuit-format msgctxt "added after file name in some cases" msgid " (file)" msgstr "(fil)" #: filedigger/restoredialog.cpp:115 kcm/backupplanwidget.cpp:451 #, kde-kuit-format msgctxt "@action:button" msgid "New Folder..." msgstr "Ny Mapp..." #: filedigger/restoredialog.cpp:141 filedigger/restoredialog.cpp:160 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "No destination was selected, please select one." msgstr "Ingen destination vald, du måste välja en." #: filedigger/restoredialog.cpp:251 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "There was a problem while getting a list of all files to restore: %1" msgstr "Det uppstod ett problem när antal filer att återställa undersöktes: %1" #: filedigger/restoredialog.cpp:264 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "The destination does not have enough space available. Please choose a " "different destination or free some space." msgstr "" "Destinationsenheten har inte tillräckligt med plats ledigt. Välj en annan " "enhet eller frigör plats först." #: filedigger/restoredialog.cpp:274 #, kde-kuit-format msgctxt "" "added to the suggested filename when restoring, %1 is the time when backup " "was taken" msgid " - saved at %1" msgstr " - sparad %1" #: filedigger/restoredialog.cpp:275 #, kde-kuit-format msgctxt "@info" msgid "Folder already exists, please choose a solution" msgstr "Mappen finns redan, välj en lösning" #: filedigger/restoredialog.cpp:281 #, kde-kuit-format msgctxt "@info" msgid "File already exists" msgstr "Filen finns redan" #: filedigger/restoredialog.cpp:294 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "The new name entered already exists, please enter a different one." msgstr "Det nya namnet är upptaget, välj ett annat." #: filedigger/restoredialog.cpp:371 kcm/dirselector.cpp:50 #, kde-kuit-format msgctxt "default folder name when creating a new folder" msgid "New Folder" msgstr "Ny Mapp" #: filedigger/restoredialog.cpp:376 kcm/dirselector.cpp:55 #, kde-kuit-format msgctxt "@title:window" msgid "New Folder" msgstr "Skapa Ny Mapp" #: filedigger/restoredialog.cpp:377 kcm/dirselector.cpp:56 #, kde-kuit-format msgctxt "@label:textbox" msgid "" "Create new folder in:\n" "%1" msgstr "" "Skapa ny mapp i:\n" "%1" #: filedigger/restoredialog.cpp:390 kcm/dirselector.cpp:68 #, kde-format msgid "A folder named %1 already exists." msgstr "En mapp med namnet %1 finns redan." #: filedigger/restoredialog.cpp:396 kcm/dirselector.cpp:74 #, kde-format msgid "You do not have permission to create %1." msgstr "Du har inte rättighet att skapa %1." #: filedigger/restorejob.cpp:99 #, kde-kuit-format msgctxt "progress report, current operation" msgid "Restoring" msgstr "Återställer" #: filedigger/restorejob.cpp:100 #, kde-kuit-format msgctxt "progress report, label" msgid "File:" msgstr "Fil: " #: filedigger/versionlistdelegate.cpp:135 #, kde-kuit-format msgctxt "@action:button" msgid "Open" msgstr "Öppna" #: filedigger/versionlistdelegate.cpp:137 #, kde-kuit-format msgctxt "@action:button" msgid "Restore" msgstr "Återställ" #: kcm/backupplanwidget.cpp:282 #, kde-kuit-format msgctxt "@action:button" msgid "Exclude Folder" msgstr "Exkludera mapp" #: kcm/backupplanwidget.cpp:285 #, kde-kuit-format msgctxt "@action:button" msgid "Include Folder" msgstr "Inkludera mapp" #: kcm/backupplanwidget.cpp:382 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "You don't have permission to read this folder: %1It cannot be included in the source selection. If it does not contain " "anything important to you, one possible solution is to exclude the folder " "from the backup plan." msgstr "" "Du har inte rättighet att läsa mappen: %1Den kan " "inte inkluderas i säkerhetskopieringen. Om den inte innehåller något viktigt " "så kan en möjlig lösning vara att exkludera mappen." #: kcm/backupplanwidget.cpp:393 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "You don't have permission to read this file: %1It " "cannot be included in the source selection. If the file is not important to " "you, one possible solution is to exclude the whole folder where the file is " "stored from the backup plan." msgstr "" "Du har inte rättighet att läsa filen: %1Den kan " "inte inkluderas i säkerhetskopieringen. Om den inte innehåller något viktigt " "så kan en möjlig lösning vara att exkludera hela mappen där den är lagrad." #: kcm/backupplanwidget.cpp:409 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "The symbolic link %1 is currently included but it " "points to a folder which is not: %2.That is " "probably not what you want. One solution is to simply include the target " "folder in the backup plan." msgstr "" "Den symboliska länken %1 är inkluderad i planen men " "refererar till mappen %2 som inte är med.Antagligen är detta inte något du önskar. En möjlig lösning är att helt " "enkelt inkludera mappen." #: kcm/backupplanwidget.cpp:417 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "The symbolic link %1 is currently included but it " "points to a file which is not: %2.That is probably " "not what you want. One solution is to simply include the folder where the " "file is stored in the backup plan." msgstr "" "Den symboliska länken %1 är inkluderad i planen men " "refererar till filen %2 som inte är med.Antagligen är detta inte något du önskar. En möjlig lösning är att " "inkludera mappen där den faktiska filen är lagrad." #: kcm/backupplanwidget.cpp:440 #, kde-kuit-format msgctxt "@title:window" msgid "Select Folder" msgstr "Välj Mapp" #: kcm/backupplanwidget.cpp:478 #, kde-kuit-format msgctxt "@label" msgid "Description:" msgstr "Beskrivning:" #: kcm/backupplanwidget.cpp:481 #, kde-kuit-format msgctxt "@action:button" msgid "Back to overview" msgstr "Tillbaka till översikten" #: kcm/backupplanwidget.cpp:510 #, kde-kuit-format msgctxt "@info" msgid "" "This type of backup is an archive. It contains both the " "latest version of your files and earlier backed up versions. Using this type " "of backup allows you to recover older versions of your files, or files which " "were deleted on your computer at a later time. The storage space needed is " "minimized by looking for common parts of your files between versions and " "only storing those parts once. Nevertheless, the backup archive will keep " "growing in size as time goes by.Also important to know is that the " "files in the archive can not be accessed directly with a general file " "manager, a special program is needed." msgstr "" "Lägger dina säkerhetskopior i ett arkiv. Detta kommer " "innehålla både den senast sparade versionen och alla tidigare versioner av " "dina filer, inklusive filer som senare har tagits bort. Använt " "lagringsutrymme minimeras genom att leta efter gemensamma delar mellan de " "olika versionerna av dina filer och bara lagra dessa delarna en gång. Trots " "det så kommer arkivet att växa i storlek allt eftersom tiden går.Du bör " "också veta att du inte kan läsa filerna i arkivet direkt med en vanlig " "filhanterare, ett speciellt program behövs istället." #: kcm/backupplanwidget.cpp:525 #, kde-kuit-format msgctxt "@option:radio" msgid "" "Versioned Backup (not available because bup is " "not installed)" msgstr "" "Arkivering (inte tillgängligt eftersom bup inte " "är installerat)" #: kcm/backupplanwidget.cpp:530 #, kde-kuit-format msgctxt "@option:radio" msgid "Versioned Backup (recommended)" msgstr "Arkivering (rekommenderas)" #: kcm/backupplanwidget.cpp:535 #, kde-kuit-format msgctxt "@info" msgid "" "This type of backup is a folder which is synchronized with your selected " "source folders. Taking a backup simply means making the backup destination " "contain an exact copy of your source folders as they are now and nothing " "else. If a file has been deleted in a source folder it will get deleted from " "the backup folder.This type of backup can protect you against data loss " "due to a broken hard drive but it does not help you to recover from your own " "mistakes." msgstr "" "Denna typen av säkerhetskopiering håller destinationsmappen synkroniserad " "med dina valda källor. När du tar en ny säkerhetskopia kommer helt enkelt " "den mappen ändras till att innehålla en exakt kopia av dina källor som de är " "nu och ingenting annat. Om en fil har tagits bort i en källmapp så kommer " "den också tas bort från destinationsmappen.Denna kopieringstypen " "hjälper dig att återställa filer om en hårddisk skulle gå sönder eller " "liknande men den hjälper inte mycket om du kommer på att du har gjort ett " "misstag och vill ha tillbaka en gammal fil." #: kcm/backupplanwidget.cpp:548 #, kde-kuit-format msgctxt "@option:radio" msgid "" "Synchronized Backup (not available because rsync " "is not installed)" msgstr "" "Synkroniserade mappar (inte tillgängligt eftersom rsync inte är installerat)" #: kcm/backupplanwidget.cpp:553 #, kde-kuit-format msgctxt "@option:radio" msgid "Synchronized Backup" msgstr "Synkroniserade mappar" #: kcm/backupplanwidget.cpp:581 #, kde-kuit-format msgctxt "@title" msgid "Backup Type" msgstr "Kopieringstyp" #: kcm/backupplanwidget.cpp:582 #, kde-kuit-format msgctxt "@label" msgid "Select what type of backup you want" msgstr "Välj vilken typ av säkerhetskopiering du vill göra" #: kcm/backupplanwidget.cpp:590 #, kde-kuit-format msgctxt "@title" msgid "Sources" msgstr "Källor" #: kcm/backupplanwidget.cpp:591 #, kde-kuit-format msgctxt "@label" msgid "Select which folders to include in backup" msgstr "Välj vilka mappar som ska inkluderas i säkerhetskopior" #: kcm/backupplanwidget.cpp:605 #, kde-kuit-format msgctxt "@option:radio" msgid "Filesystem Path" msgstr "Fast plats i filsystemet" #: kcm/backupplanwidget.cpp:606 #, kde-kuit-format msgctxt "@option:radio" msgid "External Storage" msgstr "Externt lagringsmedium" #: kcm/backupplanwidget.cpp:612 #, kde-kuit-format msgctxt "@info" msgid "" "You can use this option for backing up to a secondary internal harddrive, an " "external eSATA drive or networked storage. The requirement is just that you " "always mount it at the same path in the filesystem. The path specified here " "does not need to exist at all times, its existance will be monitored." msgstr "" "Du kan välja detta alternativet för att säkerhetskopiera till en annan " "intern hårddisk, en extern eSATA-hårddisk eller en lagringsplats på ditt " "nätverk. Kravet är bara att du alltid monterar disken på samma plats i " "filsystemet. Mappen du väljer behöver inte finnas tillgänglig hela tiden, " "dess existens kommer att monitoreras." #: kcm/backupplanwidget.cpp:619 #, kde-kuit-format msgctxt "@label:textbox" msgid "Destination Path for Backup:" msgstr "Plats att lagra säkerhetskopiorna:" #: kcm/backupplanwidget.cpp:638 #, kde-kuit-format msgctxt "@info" msgid "" "Use this option if you want to backup your files on an external storage that " "can be plugged in to this computer, such as a USB hard drive or memory stick." msgstr "" "Välj detta alternativet om du vill lagra säkerhetskopiorna på en extern " "lagringsenhet som kopplas in direkt i denna datorn, till exempel en USB-" "hårddisk eller minnepinne." #: kcm/backupplanwidget.cpp:648 kcm/backupplanwidget.cpp:652 #, kde-kuit-format msgctxt "@info:tooltip" msgid "The specified folder will be created if it does not exist." msgstr "Den mapp som väljs kommer att skapas om den inte redan finns." #: kcm/backupplanwidget.cpp:650 #, kde-kuit-format msgctxt "@label:textbox" msgid "Folder on Destination Drive:" msgstr "Mapp på destinationsenheten:" #: kcm/backupplanwidget.cpp:658 #, kde-kuit-format msgctxt "@info:tooltip" msgid "Open dialog to select a folder" msgstr "Öppna dialog för att välja en mapp" #: kcm/backupplanwidget.cpp:688 #, kde-kuit-format msgctxt "@title" msgid "Destination" msgstr "Lagringsplats" #: kcm/backupplanwidget.cpp:689 #, kde-kuit-format msgctxt "@label" msgid "Select the backup destination" msgstr "Välj lagringsplats för säkerhetskopior" #: kcm/backupplanwidget.cpp:706 #, kde-kuit-format msgctxt "@option:radio" msgid "Manual Activation" msgstr "Manuell aktivering" #: kcm/backupplanwidget.cpp:707 #, kde-kuit-format msgctxt "@option:radio" msgid "Interval" msgstr "Intervall" #: kcm/backupplanwidget.cpp:708 #, kde-kuit-format msgctxt "@option:radio" msgid "Active Usage Time" msgstr "Aktiv användningstid" #: kcm/backupplanwidget.cpp:710 #, kde-kuit-format msgctxt "@info" msgid "" "Backups are only taken when manually requested. This can be done by using " "the popup menu from the backup system tray icon." msgstr "" "Säkerhetskopior tas endast när du ber om det. Detta kan göras från " "popupmenyn när du högerklickar på ikonen i systembrickan." #: kcm/backupplanwidget.cpp:724 #, kde-kuit-format msgctxt "@info" msgid "" "New backup will be triggered when backup destination becomes available and " "more than the configured interval has passed since the last backup was taken." msgstr "" "En ny säkerhetskopia kommer tas när lagringsplatsen är tillgänglig och mer " "än konfigurerat intervall har gått sedan förra kopian togs." #: kcm/backupplanwidget.cpp:741 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Minutes" msgstr "Minuter" #: kcm/backupplanwidget.cpp:742 kcm/backupplanwidget.cpp:769 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Hours" msgstr "Timmar" #: kcm/backupplanwidget.cpp:743 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Days" msgstr "Dagar" #: kcm/backupplanwidget.cpp:744 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Weeks" msgstr "Veckor" #: kcm/backupplanwidget.cpp:754 #, kde-kuit-format msgctxt "@info" msgid "" "New backup will be triggered when backup destination becomes available and " "you have been using your computer actively for more than the configured time " "limit since the last backup was taken." msgstr "" "En ny säkerhetskopia kommer tas när lagringsplatsen är tillgänglig och du " "har använt datorn aktivt under mer än konfigurerad tidsgräns sedan förra " "kopian togs." #: kcm/backupplanwidget.cpp:775 #, kde-kuit-format msgctxt "@option:check" msgid "Ask for confirmation before taking backup" msgstr "Fråga innan ny säkerhetskopia tas" #: kcm/backupplanwidget.cpp:794 #, kde-kuit-format msgctxt "@title" msgid "Schedule" msgstr "Schema" #: kcm/backupplanwidget.cpp:795 #, kde-kuit-format msgctxt "@label" msgid "Specify the backup schedule" msgstr "Specificera schema för säkerhetskopiering" #: kcm/backupplanwidget.cpp:808 #, kde-kuit-format msgctxt "@option:check" msgid "Show hidden folders in source selection" msgstr "Visa dolda mappar i val av källor" #: kcm/backupplanwidget.cpp:814 #, kde-kuit-format msgctxt "@info" msgid "" "This makes it possible to explicitly include or exclude hidden folders in " "the backup source selection. Hidden folders have a name that starts with a " "dot. They are typically located in your home folder and are used to store " "settings and temporary files for your applications." msgstr "" "Detta valet gör det möjligt att uttryckligen inkludera eller exkludera dolda " "mappar i valet av källor. Dolda mappar har ett namn som börjar med en punkt. " "De finns typiskt i din användarmapp och används för att lagra inställningar " "och temporära filer för dina applikationer." #: kcm/backupplanwidget.cpp:832 #, kde-kuit-format msgctxt "@info" msgid "" "This will make your backups use around 10% more storage space and saving " "backups will take slightly longer time. In return it will be possible to " "recover from a partially corrupted backup." msgstr "" "Detta valet gör att dina säkerhetskopior använder cirka 10% mer utrymme och " "det kommer ta lite längre tid att lagra en ny kopia. Fördelen är att det " "blir möjligt att reparera delvis skadade säkerhetskopior." #: kcm/backupplanwidget.cpp:838 #, kde-kuit-format msgctxt "@option:check" msgid "Generate recovery information" msgstr "Generera återställningsinformation" #: kcm/backupplanwidget.cpp:840 #, kde-kuit-format msgctxt "@option:check" msgid "" "Generate recovery information (not available because par2 is not installed)" msgstr "" "Generera återställningsinformation (inte tillgängligt eftersom " "par2 inte är installerat)" #: kcm/backupplanwidget.cpp:856 #, kde-kuit-format msgctxt "@option:check" msgid "Verify integrity of backups" msgstr "Automatisk integritetskontroll" #: kcm/backupplanwidget.cpp:860 #, kde-kuit-format msgctxt "@info" msgid "" "Checks the whole backup archive for corruption every time you save new data. " "Saving backups will take a little bit longer time but it allows you to catch " "corruption problems sooner than at the time you need to use a backup, at " "that time it could be too late." msgstr "" "Kontrollera hela arkivet med säkerhetskopior varje gång en ny kopia ska " "lagras. Det gör att processen tar lite längre tid men hjälper dig genom att " "hitta eventuellt skadade filer så tidigt som möjligt. När du behöver använda " "en säkerhetskopia så är det oftast för sent." #: kcm/backupplanwidget.cpp:882 #, kde-kuit-format msgctxt "@title" msgid "Advanced" msgstr "Avancerat" #: kcm/backupplanwidget.cpp:883 #, kde-kuit-format msgctxt "@label" msgid "Extra options for advanced users" msgstr "Extra inställningar för avancerade användare" #: kcm/driveselection.cpp:275 #, kde-kuit-format msgctxt "@label Only shown if no drives are detected" msgid "" "Plug in the external storage you wish to use, then select it in this list." msgstr "" "Koppla in den externa lagringsenhet du vill använda, välj den sen i denna " "listan." #: kcm/driveselectiondelegate.cpp:75 #, kde-kuit-format msgctxt "@item:inlistbox this text is added if selected drive is disconnected" msgid " (disconnected)" msgstr " (frånkopplad)" #: kcm/driveselectiondelegate.cpp:78 #, kde-kuit-format msgctxt "@label %1 is amount of free storage space of hard drive" msgid "%1 free" msgstr "%1 ledigt" #: kcm/driveselectiondelegate.cpp:92 #, kde-kuit-format msgctxt "" "@item:inlistbox used for unnamed filesystems, more than one filesystem on " "device. %1 is partition number, %2 is device description, %3 is either empty " "or the \" (disconnected)\" text" msgid "Partition %1 on %2%3" msgstr "Partition %1 på %2%3" #: kcm/driveselectiondelegate.cpp:95 #, kde-kuit-format msgctxt "" "@item:inlistbox used when there is only one unnamed filesystem on device. %1 " "is device description, %2 is either empty or the \" (disconnected)\" text" msgid "%1%2" msgstr "%1%2" #: kcm/driveselectiondelegate.cpp:99 #, kde-kuit-format msgctxt "" "@item:inlistbox %1 is filesystem label, %2 is the device description, %3 is " "either empty or the \" (disconnected)\" text" msgid "%1 on %2%3" msgstr "%1 på %2%3" #: kcm/driveselectiondelegate.cpp:106 #, kde-kuit-format msgctxt "@item:inlistbox %1 is drive(partition) label, %2 is storage capacity" msgid "%1: %2 total capacity" msgstr "%1: %2 total kapacitet" #: kcm/driveselectiondelegate.cpp:153 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "" "Warning: Symbolic links and file permissions can not be saved to this file " "system. File permissions only matters if there is more than one user of this " "computer or if you are backing up executable program files." msgstr "" "Varning: symboliska länkar och filrättigheter kan inte lagras på detta " "filsystemet. Filrättigheter är bara viktigt om det är flera användare på " "denna datorn eller om du tar säkerhetskopior av körbara programfiler." #: kcm/driveselectiondelegate.cpp:157 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "" "Warning: File permissions can not be saved to this file system. File " "permissions only matters if there is more than one user of this computer or " "if you are backing up executable program files." msgstr "" "Varning: Filrättigheter can inte lagras på detta filsystemet. Filrättigheter " "är bara viktigt om det är flera användare på denna datorn eller om du tar " "säkerhetskopior av körbara programfiler." #: kcm/folderselectionmodel.cpp:107 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "" "%1will be included in the backup, except for " "unchecked subfolders" msgstr "" "%1kommer inkluderas, förutom avmarkerade " "undermappar" #: kcm/folderselectionmodel.cpp:111 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "%1will be included in the backup" msgstr "%1kommer inkluderas" #: kcm/folderselectionmodel.cpp:115 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "" "%1 will not be included in " "the backup but contains folders that will" msgstr "" "%1kommer inte inkluderas men " "innehåller inkluderade undermappar " #: kcm/folderselectionmodel.cpp:119 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "" "%1 will not be included in " "the backup" msgstr "" "%1kommer inte inkluderas" #: kcm/kupkcm.cpp:49 #, kde-format msgid "Kup Configuration Module" msgstr "Kup Konfigurationsmodul" #: kcm/kupkcm.cpp:51 #, kde-format msgid "Configuration of backup plans for the Kup backup system" msgstr "Konfiguration av säkerhetskopior för Kup" #: kcm/kupkcm.cpp:54 #, kde-format msgid "Maintainer" msgstr "Underhållsansvarig" #: kcm/kupkcm.cpp:87 #, kde-format msgid "" "

Backup programs are missing

Before you can activate any backup " "plan you need to install either of

  • bup, for versioned backups
  • rsync, for synchronized backups
" msgstr "" "

Säkerhetskopieringsprogram saknas

Innan du kan aktivera en plan " "för säkerhetskopiering behöver du installera något av

  • bup, för " "arkiverade säkerhetskopior
  • rsync, för synkroniserade mappar
" #: kcm/kupkcm.cpp:168 #, kde-kuit-format msgctxt "@title:window" msgid "Warning" msgstr "Varning" #: kcm/kupkcm.cpp:170 #, kde-kuit-format msgctxt "@info %1 is the name of the backup plan" msgid "" "%1 does not have a destination!No backups will be saved by this plan." msgstr "%1 har ingen destination!Inga säkerhetskopior kommer att tas." #: kcm/kupkcm.cpp:227 #, kde-kuit-format msgctxt "@action:button" msgid "Add New Plan" msgstr "Lägg till säkerhetskopia" #: kcm/kupkcm.cpp:238 #, kde-kuit-format msgctxt "@option:check" msgid "Backups Enabled" msgstr "Säkerhetskopiering aktivt" #: kcm/planstatuswidget.cpp:48 #, kde-kuit-format msgctxt "@action:button" msgid "Configure" msgstr "Konfigurera" #: kcm/planstatuswidget.cpp:51 #, kde-kuit-format msgctxt "@action:button" msgid "Remove" msgstr "Ta bort" #: kcm/planstatuswidget.cpp:54 #, kde-kuit-format msgctxt "@action:button" msgid "Duplicate" msgstr "Duplicera" #: kioslave/bupslave.cpp:92 kioslave/bupslave.cpp:149 kioslave/bupslave.cpp:186 #: kioslave/bupslave.cpp:249 kioslave/bupslave.cpp:271 #, kde-format msgid "" "No bup repository found.\n" "%1" msgstr "" "Inget bup-arkiv hittades.\n" "%1" #: plasmoid/contents/ui/FullRepresentation.qml:88 #, kde-format msgid "Save new backup" msgstr "Spara säkerhetskopia" #: plasmoid/contents/ui/FullRepresentation.qml:94 #, kde-format msgid "Show files" msgstr "Visa filer" #: plasmoid/contents/ui/FullRepresentation.qml:99 #, kde-format msgid "Show log file" msgstr "Visa loggfil" #. i18n: file: filedigger/restoredialog.ui:14 #. i18n: ectx: property (windowTitle), widget (QDialog, RestoreDialog) #: po/rc.cpp:3 rc.cpp:3 #, kde-format msgctxt "@title:window" msgid "Restore Guide" msgstr "Återställningsguide" #. i18n: file: filedigger/restoredialog.ui:55 #. i18n: ectx: property (text), widget (QPushButton, mRestoreOriginalButton) #: po/rc.cpp:6 rc.cpp:6 #, kde-format msgctxt "@action:button" msgid "Restore to original location" msgstr "Återställ till ursprunglig plats" #. i18n: file: filedigger/restoredialog.ui:78 #. i18n: ectx: property (text), widget (QPushButton, mRestoreCustomButton) #: po/rc.cpp:9 rc.cpp:9 #, kde-format msgctxt "@action:button" msgid "Choose where to restore" msgstr "Välj plats att återställa till" #. i18n: file: filedigger/restoredialog.ui:132 #. i18n: ectx: property (text), widget (QPushButton, mDestBackButton) #: po/rc.cpp:12 rc.cpp:12 #, kde-format msgctxt "@action:button" msgid "Back" msgstr "Tillbaka" #. i18n: file: filedigger/restoredialog.ui:144 #. i18n: ectx: property (text), widget (QPushButton, mDestNextButton) #: po/rc.cpp:15 rc.cpp:15 #, kde-format msgctxt "@action:button" msgid "Next" msgstr "Nästa" #. i18n: file: filedigger/restoredialog.ui:175 #. i18n: ectx: property (text), widget (QRadioButton, mNewNameRadioButton) #: po/rc.cpp:18 rc.cpp:18 #, kde-format msgctxt "@option:radio " msgid "Restore the folder under a new name" msgstr "Återställ mappen med ett nytt namn" #. i18n: file: filedigger/restoredialog.ui:208 #. i18n: ectx: property (text), widget (QRadioButton, mOverwriteRadioButton) #: po/rc.cpp:21 rc.cpp:21 #, kde-format msgctxt "@option:radio" msgid "Merge folders" msgstr "Slå samman mappar" #. i18n: file: filedigger/restoredialog.ui:238 #. i18n: ectx: property (text), widget (QLabel, mConfirmOverwriteLabel) #: po/rc.cpp:24 rc.cpp:24 #, kde-format msgctxt "@info Question to user, in dialog" msgid "" "The following files would be overwritten, please confirm that you wish to " "continue." msgstr "Följande filer kommer överskrivas, bekräfta om du vill fortsätta." #. i18n: file: filedigger/restoredialog.ui:274 #. i18n: ectx: property (text), widget (QPushButton, mOverwriteBackButton) #: po/rc.cpp:27 rc.cpp:27 #, kde-format msgctxt "@action:button go to previous page in dialog" msgid "Back" msgstr "Tillbaka" #. i18n: file: filedigger/restoredialog.ui:286 #. i18n: ectx: property (text), widget (QPushButton, mConfirmButton) #: po/rc.cpp:30 rc.cpp:30 #, kde-format msgctxt "@action:button User answers \"yes I confirm: overwrite files\"" msgid "Confirm" msgstr "Bekräfta" #. i18n: file: filedigger/restoredialog.ui:341 #. i18n: ectx: property (text), widget (QLabel, mErrorLabel) #: po/rc.cpp:33 rc.cpp:33 #, kde-format msgctxt "@label above the detailed error message" msgid "An error occured while restoring:" msgstr "Ett fel inträffade under återställningen:" #. i18n: file: filedigger/restoredialog.ui:372 #. i18n: ectx: property (text), widget (QLabel, label) #: po/rc.cpp:36 rc.cpp:36 #, kde-format msgctxt "@label" msgid "Restoration completed successfully!" msgstr "Färdig med återställning!" #. i18n: file: filedigger/restoredialog.ui:413 #. i18n: ectx: property (text), widget (QPushButton, mOpenDestinationButton) #: po/rc.cpp:39 rc.cpp:39 #, kde-format msgid "Open Destination" msgstr "Öppna destinationen" #. i18n: file: filedigger/restoredialog.ui:472 #. i18n: ectx: property (text), widget (QPushButton, mCloseButton) #: po/rc.cpp:42 rc.cpp:42 #, kde-format msgctxt "@action:button" msgid "Close" msgstr "Stäng" #: po/rc.cpp:43 po/rc.cpp:58 settings/backupplan.cpp:69 rc.cpp:43 rc.cpp:58 #, kde-format msgid "Backups" msgstr "Säkerhetskopior" #: po/rc.cpp:44 rc.cpp:44 msgid "Configure backup plans" msgstr "Konfigurera planer för säkerhetskopiering" #: po/rc.cpp:45 rc.cpp:45 msgid "backup,recovery,safety" msgstr "säkerhetskopior,återställning,backup" #: po/rc.cpp:46 rc.cpp:46 msgid "Kup" msgstr "Kup" #: po/rc.cpp:48 rc.cpp:48 msgid "Start taking backup" msgstr "Ta ny säkerhetskopia" #: po/rc.cpp:49 rc.cpp:49 msgid "A question if user wants to start taking a backup" msgstr "En fråga om användaren vill ta en ny säkerhetskopia" #: po/rc.cpp:50 rc.cpp:50 msgid "Backup succeeded" msgstr "Säkerhetskopiering färdig" #: po/rc.cpp:51 rc.cpp:51 msgid "Saving of backup successfully completed" msgstr "Färdig med att spara säkerhetskopia" #: po/rc.cpp:52 rc.cpp:52 msgid "Backup failed" msgstr "Säkerhetskopiering misslyckades" #: po/rc.cpp:53 rc.cpp:53 msgid "Saving of backup failed, offer user to see log file" msgstr "Säkerhetskopiering misslyckades, erbjud att se loggfil" #: po/rc.cpp:54 rc.cpp:54 msgid "Integrity check completed" msgstr "Integritetstest färdig" #: po/rc.cpp:55 rc.cpp:55 msgid "Finished checking integrity of backup archive" msgstr "Färdig med att testa integritet av säkerhetskopior" #: po/rc.cpp:56 rc.cpp:56 msgid "Repair completed" msgstr "Färdig med reparation" #: po/rc.cpp:57 rc.cpp:57 msgid "Finished repairing backup archive" msgstr "Blev färdig med att reparera säkerhetskopior" #: po/rc.cpp:59 rc.cpp:59 msgid "Status of backup plans" msgstr "Status för säkerhetskopior" #: po/rc.cpp:60 rc.cpp:60 msgid "Backup Status" msgstr "Säkerhetskopiornas status" #: po/rc.cpp:61 rc.cpp:61 msgid "Displays status of backup plans" msgstr "Visar status för säkerhetskopior" #: settings/backupplan.cpp:38 #, kde-kuit-format msgctxt "" "@label Default name for a new backup plan, %1 is the number of the plan in " "order" msgid "Backup plan %1" msgstr "Säkerhetskopia %1" #: settings/backupplan.cpp:101 #, kde-format msgctxt "default description of newly duplicated backup plan" msgid "%1 (copy)" msgstr "%1 (kopia)" #: settings/backupplan.cpp:213 #, kde-format msgctxt "%1 is fancy formatted date" msgid "Last saved: %1" msgstr "Sist sparad: %1" #: settings/backupplan.cpp:218 #, kde-format msgctxt "%1 is storage size of archive" msgid "Size: %1" msgstr "Storlek: %1" #: settings/backupplan.cpp:223 #, kde-format msgctxt "%1 is free storage space" msgid "Free space: %1" msgstr "Tillgängligt utrymme: %1" #: settings/backupplan.cpp:227 #, kde-kuit-format msgctxt "@label" msgid "This backup plan has never been run." msgstr "Denna säkerhetskopieringen har aldrig gjorts." #~ msgctxt "@title:window" #~ msgid "Backups" #~ msgstr "Säkerhetskopior" #~ msgctxt "@title:menu" #~ msgid "Backups" #~ msgstr "Säkerhetskopior" #~ msgctxt "@action:inmenu" #~ msgid "Configure Backups" #~ msgstr "Inställningar" #~ msgctxt "@action:inmenu" #~ msgid "Take Backup Now" #~ msgstr "Ta Ny Säkerhetskopia" #~ msgctxt "@action:inmenu" #~ msgid "Show Log File" #~ msgstr "Visa loggfil" #~ msgctxt "@title:window" #~ msgid "Backup Device Available - %1" #~ msgstr "Destination för säkerhetskopior tillgänglig - %1" #~ msgctxt "@info notification" #~ msgid "" #~ "Saving backup did not complete successfully. See log file for more " #~ "details." #~ msgstr "Säkerhetskopiering misslyckades. Se loggfil för detaljer." #~ msgctxt "@label %1 is fancy formatted date, %2 is time of day" #~ msgid "Last backup was taken %1 at %2.\n" #~ msgstr "Senaste säkerhetskopieringen gjordes %1 kl %2.\n" #~ msgctxt "@label %1 is storage size of archive" #~ msgid "The size of the backup archive was %1.\n" #~ msgstr "Storleken på arkivet var %1.\n" #~ msgctxt "@label %1 is free storage space" #~ msgid "The destination still had %1 available.\n" #~ msgstr "Lagringsplatsen hade fortfarande %1 tillgängligt.\n" kup-backup-0.7.1+dfsg/po/tl.po000066400000000000000000001357641322613417100161150ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Simon Persson , 2014 # Simon Persson , 2014-2015 # Wendy, 2014-2015 # Wendy, 2015 # Wendy, 2014 # Wendy, 2013 msgid "" msgstr "" "Project-Id-Version: kup\n" "Report-Msgid-Bugs-To: http://kde-apps.org/content/show.php/Kup+Backup+System?" "content=147465\n" "POT-Creation-Date: 2018-01-05 16:00+0800\n" "PO-Revision-Date: 2016-06-11 14:47+0000\n" "Last-Translator: Simon Persson \n" "Language-Team: Tagalog (http://www.transifex.com/kup/kup/language/tl/)\n" "Language: tl\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" #: daemon/bupjob.cpp:47 daemon/buprepairjob.cpp:38 #: daemon/bupverificationjob.cpp:37 #, kde-kuit-format msgctxt "@info notification" msgid "" "The bup program is needed but could not be found, " "maybe it is not installed?" msgstr "" "Ang programmang bup ay kinakailangan ngunit ito " "ay hindi mahanap sa sistema. Maaring hindi ito nakalagay sa sistema?" #: daemon/bupjob.cpp:52 daemon/buprepairjob.cpp:43 #, kde-kuit-format msgctxt "@info notification" msgid "" "The par2 program is needed but could not be " "found, maybe it is not installed?" msgstr "" "Ang programang par2 ay kinakailangan ngunit ito " "ay hindi mahanap sa sistema. Maaring hindi ito nakalagay sa sistema?" #: daemon/bupjob.cpp:71 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup destination could not be initialised. See log file for more details." msgstr "" "Hindi maumpisahan ang destinasyon ng seguridad na kopya. Tingnan ang " "karagdagang detalye." #: daemon/bupjob.cpp:93 #, fuzzy, kde-format msgid "Checking backup integrity" msgstr "Sinisiyasat ang integridad ng seguridad na kopya." #: daemon/bupjob.cpp:104 daemon/bupverificationjob.cpp:67 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups could be corrupted! See log file " "for more details. Do you want to try repairing the backup files?" msgstr "" "Nabigo ang pagsusuri ng integridad ng iyong mga seguridad na kopya. Maari " "itong may sira! Tingnan ang karagdagang detalye. Gusto mo bang ayusing ang " "iyong mga seguridad na kopya?" #: daemon/bupjob.cpp:108 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups could be corrupted! See log file " "for more details." msgstr "" "Nabigo ang pagsisiyasat integridad. Ang iyong mga seguridad na kopya ay " "maaring may sira! Tingnan ang karagdagang detalye." #: daemon/bupjob.cpp:131 daemon/rsyncjob.cpp:57 #, kde-format msgid "Checking what to copy" msgstr "" #: daemon/bupjob.cpp:138 #, fuzzy, kde-kuit-format msgctxt "@info notification" msgid "Failed to analyze files. See log file for more details." msgstr "" "Nabigo ang pagtataluntunan ng sistemang pangtalaksan. Tingnan ang " "karagdagang detalye." #: daemon/bupjob.cpp:159 daemon/bupjob.cpp:253 daemon/rsyncjob.cpp:175 #, fuzzy, kde-format msgid "Saving backup" msgstr "Simulan ang pagkuha ng seguridad na kopya" #: daemon/bupjob.cpp:167 daemon/rsyncjob.cpp:120 #, fuzzy, kde-kuit-format msgctxt "@info notification" msgid "Failed to save backup. See log file for more details." msgstr "" "Nabigo ang kumpletong pag-iimpok ng seguridad na kopya. Tingnan ang " "karagdagang detalye." #: daemon/bupjob.cpp:189 #, fuzzy, kde-format msgid "Generating recovery information" msgstr "Gumawa ng inpormasyon tungkol sa pagbawi" #: daemon/bupjob.cpp:197 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed to generate recovery info for the backup. See log file for more " "details." msgstr "" "Nabigo ang pagbawi ng inpormasyon ng iyong seguridad na kopya. Tingnan ang " "karagdagang detalye." #: daemon/bupjob.cpp:254 daemon/rsyncjob.cpp:176 #, fuzzy, kde-format msgctxt "Label for file currently being copied" msgid "File" msgstr "Talaksan:" #: daemon/buprepairjob.cpp:72 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup repair failed. Your backups could be corrupted! See log file for more " "details." msgstr "" "Nabigo ang pag-aayos ng seguridad na kopya. Ang iyong seguridad na kopya ay " "maaaring may sira! Tingnan ang karagdagang detalye." #: daemon/buprepairjob.cpp:76 #, kde-kuit-format msgctxt "@info notification" msgid "Success! Backup repair worked. See log file for more details." msgstr "" "Tagumpay na naayos ang iyong seguridad na kopya. Tingnan ang karagdagang " "detalye." #: daemon/buprepairjob.cpp:80 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup repair was not necessary. Your backups are not corrupted.See log file " "for more details." msgstr "" "Hindi kinakailangang ayusin ang iyong seguridad na kopya dahil ito ay walang " "sira. Tingnan ang karagdagang detalye." #: daemon/buprepairjob.cpp:85 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup repair failed. Your backups could still be corrupted! See log file " "for more details." msgstr "" "Nabigo ang pag-aayos ng iyong seguridad na kopya. Maaring sira parin. " "Tingnan ang karagdagang detalye." #: daemon/bupverificationjob.cpp:70 daemon/bupverificationjob.cpp:87 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups are corrupted! See log file for " "more details." msgstr "" "Nabigo ang pagsisiyasat integridad. Ang iyong mga seguridad na kopya ay " "sira! Tingnan ang karagdagang detalye." #: daemon/bupverificationjob.cpp:76 #, kde-kuit-format msgctxt "@info notification" msgid "Backup integrity test was successful, Your backups are fine." msgstr "" "Matagumpay na nasuri ang integridad ng iyong mga seguridad na kopya. Ang mga " "ito ay walang sira." #: daemon/bupverificationjob.cpp:83 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups are corrupted! See log file for " "more details. Do you want to try repairing the backup files?" msgstr "" "Nabigo ang pagsusuri ng integridad ng iyong mga seguridad na kopya dahil ito " "ay may sira! Tingnan ang karagdagang detalye. Gusto mo bang ayusing ang " "iyong mga seguridad na kopya?" #: daemon/edexecutor.cpp:115 daemon/edexecutor.cpp:124 #: daemon/edexecutor.cpp:160 daemon/fsexecutor.cpp:114 #: daemon/fsexecutor.cpp:146 #, kde-kuit-format msgctxt "@title:window" msgid "Problem" msgstr "Problema" #: daemon/edexecutor.cpp:116 daemon/fsexecutor.cpp:115 #, kde-kuit-format msgctxt "notification" msgid "Invalid type of backup in configuration." msgstr "Hindi wastong uri ng seguridad na kopya sa kompigurasyon" #: daemon/edexecutor.cpp:125 #, kde-kuit-format msgctxt "notification" msgid "You don't have write permission to backup destination." msgstr "" #: daemon/kupdaemon.cpp:171 #, kde-format msgid "Continue" msgstr "" #: daemon/kupdaemon.cpp:173 #, kde-format msgid "Stop" msgstr "" #: daemon/kupdaemon.cpp:175 #, kde-format msgctxt "%1 is a text explaining the current activity" msgid "Currently busy: %1" msgstr "" #: daemon/kupdaemon.cpp:176 #, kde-format msgid "Do you really want to stop?" msgstr "" #: daemon/kupdaemon.cpp:179 #, fuzzy, kde-format msgid "User Backups" msgstr "Mga seguridad na kopya" #: daemon/kupdaemon.cpp:249 #, fuzzy, kde-format msgctxt "status in tooltip" msgid "Backup destination not available" msgstr "Walang magagamit na imbakan para sa seguridad na kopya" #: daemon/kupdaemon.cpp:253 daemon/kupdaemon.cpp:310 #, kde-format msgid "No backup plans configured" msgstr "" #: daemon/kupdaemon.cpp:259 #, fuzzy, kde-format msgctxt "status in tooltip" msgid "Backup destination available" msgstr "May magagamit na imbakan para sa seguridad na kopya" #: daemon/kupdaemon.cpp:269 daemon/planexecutor.cpp:84 #, fuzzy, kde-format msgctxt "status in tooltip" msgid "Backup status OK" msgstr "Maayos ang katayuan ng seguridad na kopya" #: daemon/kupdaemon.cpp:276 daemon/planexecutor.cpp:86 #, fuzzy, kde-format msgctxt "status in tooltip" msgid "New backup suggested" msgstr "Kinakailangan ng bagong seguridad na kopya" #: daemon/kupdaemon.cpp:283 daemon/planexecutor.cpp:88 #, fuzzy, kde-format msgctxt "status in tooltip" msgid "New backup neeeded" msgstr "Kinakailangan ng bagong seguridad na kopya" #: daemon/main.cpp:41 #, kde-kuit-format msgctxt "@info:shell Error message at startup" msgid "" "Kup is not enabled, enable it from the system settings module. You can do " "that by running kcmshell5 kup" msgstr "" "Ang Kup ay hindi gumagana. Pwede itong paganahin mula sa tagapangasiwa ng " "nilalaman ng sistema sa pamamagitan ng pagbukas ng kcmshell5 kup" #: daemon/main.cpp:47 #, kde-kuit-format msgctxt "@title" msgid "Kup Daemon" msgstr "Kup Daemon" #: daemon/main.cpp:48 #, kde-format msgid "" "Kup is a flexible backup solution using the backup storage system 'bup'. " "This allows it to quickly perform incremental backups, only saving the parts " "of files that has actually changed since last backup was taken." msgstr "" "Ang Kup ay isang solusyon para sa seguridad na kopya na gamit ang sistemang " "imbakan ng seguridad na kopya ng 'bup'. Ito ay nagbibigay daan upang " "mapabilis ang pagkuha ng dumadaming seguridad na kopya sa pamamagitan ng pag-" "imbak lamang ng mga talaksan na may aktwal na pagbabago mula noong huling " "kinunan ang seguridad na kopya." #: daemon/main.cpp:51 kcm/kupkcm.cpp:52 #, kde-format msgid "Copyright (C) 2011-2015 Simon Persson" msgstr "Karapatang-ari (C) 2011-2015 ni Simon Persson" #: daemon/main.cpp:53 filedigger/main.cpp:51 kcm/kupkcm.cpp:54 #, kde-format msgid "Simon Persson" msgstr "Simon Persson" #: daemon/main.cpp:54 filedigger/main.cpp:52 kcm/kupkcm.cpp:55 #, kde-kuit-format msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "Wendy Faye" #: daemon/main.cpp:54 filedigger/main.cpp:52 kcm/kupkcm.cpp:56 #, kde-kuit-format msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "faye_333@yahoo.com.sg" #: daemon/planexecutor.cpp:76 #, fuzzy, kde-format msgctxt "status in tooltip" msgid "Saving backup" msgstr "Simulan ang pagkuha ng seguridad na kopya" #: daemon/planexecutor.cpp:78 #, fuzzy, kde-format msgctxt "status in tooltip" msgid "Checking backup integrity" msgstr "Sinisiyasat ang integridad ng seguridad na kopya." #: daemon/planexecutor.cpp:80 #, fuzzy, kde-format msgctxt "status in tooltip" msgid "Repairing backups" msgstr "Ina-ayos ang mga seguridad na kopya" #: daemon/planexecutor.cpp:118 daemon/planexecutor.cpp:133 #, fuzzy, kde-kuit-format msgctxt "@info" msgid "Do you want to save a first backup now?" msgstr "Gusto mo na bang kumuha ng pangunahing seguridad na kopya?" #: daemon/planexecutor.cpp:121 #, fuzzy, kde-kuit-format msgctxt "@info" msgid "" "It has been %1 since last backup was saved.\n" "Save a new backup now?" msgstr "" "%1 na ang nakaraan mula noong huling gumuwa ng seguridad na kopya. Gusto mo " "bang gumawa ng bagong seguridad na kopya?" #: daemon/planexecutor.cpp:137 #, fuzzy, kde-kuit-format msgctxt "@info" msgid "" "You have been active for %1 since last backup was saved.\n" "Save a new backup now?" msgstr "" "%1 ka nang aktibo sa kompyuter na ito simula nung huling nakuha ang " "seguridad na kopya. Gusto mo na bang kumuha ng bagong seguridad na kopya?" #: daemon/planexecutor.cpp:170 daemon/planexecutor.cpp:200 #: daemon/planexecutor.cpp:278 #, kde-kuit-format msgctxt "@action:button" msgid "Yes" msgstr "Oo" #: daemon/planexecutor.cpp:170 daemon/planexecutor.cpp:201 #: daemon/planexecutor.cpp:279 #, kde-kuit-format msgctxt "@action:button" msgid "No" msgstr "Hindi" #: daemon/planexecutor.cpp:192 #, kde-kuit-format msgctxt "@title:window" msgid "Saving of Backup Failed" msgstr "Nabigo ang pag-iimpok ng seguridad na kopya" #: daemon/planexecutor.cpp:197 daemon/planexecutor.cpp:275 #: daemon/planexecutor.cpp:309 #, kde-kuit-format msgctxt "@action:button" msgid "Show log file" msgstr "Ipakita ang listahan ng talaksan" #: daemon/planexecutor.cpp:221 #, fuzzy, kde-kuit-format msgctxt "@title:window" msgid "Backup Saved" msgstr "Nabigo ang seguridad na kopya" #: daemon/planexecutor.cpp:222 #, fuzzy, kde-kuit-format msgctxt "@info notification" msgid "Saving backup completed successfully." msgstr "Ang pagpapanumbalik ay ganap na natapos ng maayos" #: daemon/planexecutor.cpp:271 #, kde-kuit-format msgctxt "@title:window" msgid "Integrity Check Completed" msgstr "Nakumpleto na ang pagsisiyasat integridad" #: daemon/planexecutor.cpp:306 #, kde-kuit-format msgctxt "@title:window" msgid "Repair Completed" msgstr "Nakumpleto na ang pag-aayos" #: daemon/planexecutor.cpp:337 po/rc.cpp:47 rc.cpp:47 #, kde-format msgid "Kup Backup System" msgstr "Sistema ng seguridad na kopya ng Kup" #: daemon/rsyncjob.cpp:48 #, kde-kuit-format msgctxt "@info notification" msgid "" "The rsync program is needed but could not be " "found, maybe it is not installed?" msgstr "" " Kinakailangan ang programang rsync ngunit hindi " "ito matagpuan, baka hindi pa nakalagay sa kompyuter na ito?" #: filedigger/main.cpp:47 #, kde-kuit-format msgctxt "@title" msgid "File Digger" msgstr "File Digger" #: filedigger/main.cpp:48 #, kde-format msgid "Browser for bup archives." msgstr "Browser para sa mga arkibo ng bup." #: filedigger/main.cpp:49 #, kde-format msgid "Copyright (C) 2013-2015 Simon Persson" msgstr "Karapatang-ari (C) 2013-2015 ni Simon Persson" #: filedigger/main.cpp:59 #, kde-format msgid "Name of the branch to be opened." msgstr "Pangalan ng sangay na bubuksan." #: filedigger/main.cpp:61 #, kde-format msgid "Path to the bup repository to be opened." msgstr "Bakas na magbubukas sa repositoryo ng bup." #: filedigger/main.cpp:70 #, kde-format msgctxt "@info:shell Error message at startup" msgid "" "You must supply the path to a bup or git repository that you wish to open " "for viewing." msgstr "" "Kinakailangan mong ibigay ang bakas papunta sa repositoryo ng bup o git na " "nais mong buksan." #: filedigger/main.cpp:85 #, kde-kuit-format msgctxt "@info messagebox, %1 is a folder path" msgid "" "The backup archive %1 could not be opened. Check if the " "backups really are located there." msgstr "" "Ang arkibo ng seguridad na kopa %1 ay hindi mabuksan. " "Siyasatin kung ang mga seguridad na kopya na ito ay talagang naka-impok sa " "lokasyon na ito." #: filedigger/main.cpp:92 #, kde-kuit-format msgctxt "@info messagebox" msgid "You do not have permission needed to read this backup archive." msgstr "" "Wala kang pahintulot para basahin ang mga arkibo ng seguridad na kopya." #: filedigger/mergedvfs.cpp:108 #, kde-kuit-format msgctxt "@info messagebox" msgid "" "Could not read this backup archive. Perhaps some files have become " "corrupted. Do you want to run an integrity check to test this?" msgstr "" "Itong arkibo ng seguridad na kopya ay hindi mabasa. Baka ito ay may sira. " "Gusto mo bang siyasatin ang integridad nito?" #: filedigger/mergedvfs.cpp:156 #, kde-kuit-format msgctxt "added after folder name in some cases" msgid " (folder)" msgstr "(polder)" #: filedigger/mergedvfs.cpp:158 #, kde-kuit-format msgctxt "added after file name in some cases" msgid " (symlink)" msgstr "(symlink)" #: filedigger/mergedvfs.cpp:160 #, kde-kuit-format msgctxt "added after file name in some cases" msgid " (file)" msgstr "(talaksan)" #: filedigger/restoredialog.cpp:115 kcm/backupplanwidget.cpp:451 #, kde-kuit-format msgctxt "@action:button" msgid "New Folder..." msgstr "Bagong polder" #: filedigger/restoredialog.cpp:141 filedigger/restoredialog.cpp:160 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "No destination was selected, please select one." msgstr "Walang pang napiling destinasyon, kailangang pumili ng isa." #: filedigger/restoredialog.cpp:251 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "There was a problem while getting a list of all files to restore: %1" msgstr "" "Nagkaroon ng problema habang kinukuha ang listahan ng lahat ng talaksan na " "kailangang ipanumbalik: %1 " #: filedigger/restoredialog.cpp:264 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "The destination does not have enough space available. Please choose a " "different destination or free some space." msgstr "" "Walang sapat na espasyo sa destinasyon na ito. Mangyaring pumili ng ibang " "destinasyon na may sapat na espasyo o magpalaya ng espasyo sa destinasyon na " "ito." #: filedigger/restoredialog.cpp:274 #, kde-kuit-format msgctxt "" "added to the suggested filename when restoring, %1 is the time when backup " "was taken" msgid " - saved at %1" msgstr "- nakaimpok na ng %1" #: filedigger/restoredialog.cpp:275 #, kde-kuit-format msgctxt "@info" msgid "Folder already exists, please choose a solution" msgstr "" "Ang polder na ito ay nakalagay na sa sistema, kailangan pumili ng solusyon." #: filedigger/restoredialog.cpp:281 #, kde-kuit-format msgctxt "@info" msgid "File already exists" msgstr "Ang talaksan na ito ay nakalagay na sa sistema" #: filedigger/restoredialog.cpp:294 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "The new name entered already exists, please enter a different one." msgstr "" "Ang bagong pangalan na ipinasok ay nakalagay na sa sistema, kailangang " "maglagay ng ibang pangalan." #: filedigger/restoredialog.cpp:371 kcm/dirselector.cpp:50 #, kde-kuit-format msgctxt "default folder name when creating a new folder" msgid "New Folder" msgstr "Bagong polder" #: filedigger/restoredialog.cpp:376 kcm/dirselector.cpp:55 #, kde-kuit-format msgctxt "@title:window" msgid "New Folder" msgstr "Bagong polder" #: filedigger/restoredialog.cpp:377 kcm/dirselector.cpp:56 #, kde-kuit-format msgctxt "@label:textbox" msgid "" "Create new folder in:\n" "%1" msgstr "" "Gumawa ng bagong polder sa:\n" "%1" #: filedigger/restoredialog.cpp:390 kcm/dirselector.cpp:68 #, kde-format msgid "A folder named %1 already exists." msgstr "Ang %1 na pangalan ay nagamit na." #: filedigger/restoredialog.cpp:396 kcm/dirselector.cpp:74 #, kde-format msgid "You do not have permission to create %1." msgstr "Wala kang pahintulot na lumikha %1." #: filedigger/restorejob.cpp:99 #, kde-kuit-format msgctxt "progress report, current operation" msgid "Restoring" msgstr "Nagpapanumbalik" #: filedigger/restorejob.cpp:100 #, kde-kuit-format msgctxt "progress report, label" msgid "File:" msgstr "Talaksan:" #: filedigger/versionlistdelegate.cpp:135 #, kde-kuit-format msgctxt "@action:button" msgid "Open" msgstr "Buksan" #: filedigger/versionlistdelegate.cpp:137 #, kde-kuit-format msgctxt "@action:button" msgid "Restore" msgstr "Ibalik" #: kcm/backupplanwidget.cpp:282 #, kde-kuit-format msgctxt "@action:button" msgid "Exclude Folder" msgstr "" #: kcm/backupplanwidget.cpp:285 #, kde-kuit-format msgctxt "@action:button" msgid "Include Folder" msgstr "" #: kcm/backupplanwidget.cpp:382 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "You don't have permission to read this folder: %1It cannot be included in the source selection. If it does not contain " "anything important to you, one possible solution is to exclude the folder " "from the backup plan." msgstr "" #: kcm/backupplanwidget.cpp:393 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "You don't have permission to read this file: %1It " "cannot be included in the source selection. If the file is not important to " "you, one possible solution is to exclude the whole folder where the file is " "stored from the backup plan." msgstr "" #: kcm/backupplanwidget.cpp:409 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "The symbolic link %1 is currently included but it " "points to a folder which is not: %2.That is " "probably not what you want. One solution is to simply include the target " "folder in the backup plan." msgstr "" #: kcm/backupplanwidget.cpp:417 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "The symbolic link %1 is currently included but it " "points to a file which is not: %2.That is probably " "not what you want. One solution is to simply include the folder where the " "file is stored in the backup plan." msgstr "" #: kcm/backupplanwidget.cpp:440 #, kde-kuit-format msgctxt "@title:window" msgid "Select Folder" msgstr "Piliin ang polder" #: kcm/backupplanwidget.cpp:478 #, kde-kuit-format msgctxt "@label" msgid "Description:" msgstr "Paglalarawan:" #: kcm/backupplanwidget.cpp:481 #, kde-kuit-format msgctxt "@action:button" msgid "Back to overview" msgstr "Bumalik sa kabuudan" #: kcm/backupplanwidget.cpp:510 #, kde-kuit-format msgctxt "@info" msgid "" "This type of backup is an archive. It contains both the " "latest version of your files and earlier backed up versions. Using this type " "of backup allows you to recover older versions of your files, or files which " "were deleted on your computer at a later time. The storage space needed is " "minimized by looking for common parts of your files between versions and " "only storing those parts once. Nevertheless, the backup archive will keep " "growing in size as time goes by.Also important to know is that the " "files in the archive can not be accessed directly with a general file " "manager, a special program is needed." msgstr "" "Ang uri ng seguridad na kopya na ito na nakaimbak. " "Naglalaman ito ng pinakabagong salin at ang mga naunang salin ng iyong mga " "talaksan. Maaari mong kunin ang mga naunang salin ng iyong mga talaksan o " "kung ano man ang iyong tatanggalin balang araw ay maaari mo din ibalik sa " "pamamagitan nitong seguridad na kopya. Ang kabuuan ng imbakan na " "kinakailangan ay pinaliliit sa pamamagitan ng pagkuha lamang ng kung ano " "mang binago sa iyong mga talaksan. Pero habang panahon hindi maiiwasan ang " "pagdami ng mga pagbabagong ito na magdudulot ng paglaki ng imbakan na " "kinakailangan.Importanteng iyong malaman na ang mga talaksan na " "nakaimbak ay maaari lamang buksan sa pamamagitan ng espesyal na programa." #: kcm/backupplanwidget.cpp:525 #, kde-kuit-format msgctxt "@option:radio" msgid "" "Versioned Backup (not available because bup is " "not installed)" msgstr "" "May salin na seduridad na kopya (hindi magagamit dahil ang bup ay hindi pa nakalagay sa kompyuter na ito)" #: kcm/backupplanwidget.cpp:530 #, kde-kuit-format msgctxt "@option:radio" msgid "Versioned Backup (recommended)" msgstr "May salin na seguridad na kopya (inirerekomenda)" #: kcm/backupplanwidget.cpp:535 #, kde-kuit-format msgctxt "@info" msgid "" "This type of backup is a folder which is synchronized with your selected " "source folders. Taking a backup simply means making the backup destination " "contain an exact copy of your source folders as they are now and nothing " "else. If a file has been deleted in a source folder it will get deleted from " "the backup folder.This type of backup can protect you against data loss " "due to a broken hard drive but it does not help you to recover from your own " "mistakes." msgstr "" "Ang uri ng polder na ito na naglalaman ng seguridad na kopya ay ang " "nakapareha sa iyong napiling ugat ng polder o ang polder na naglalaman ng " "mga talaksan na gusto mong may seguridad na kopya. Ang ibig sabihin ng " "pagkuha ng seguridad na kopya ay pangu-ngopya ng eksaktong laman ng ugat " "polder na iyong pinili para makunan ng seguridad na kopya. Kung ang isang " "talaksan ay sadyang tinanggal, inalis o binura sa ugat na polder, ito din ay " "mabubura sa polder ng seguridad na kopya.Ang seguridad na kopya na ito " "ay maaring makaprotekta sa pagkawala ng mga talaksan dahilan nga pagkasira " "ng iyong hard drive pero hindi ito makakatulong sa pagkuha o pagbawi ng mga " "talaksang iyong nabura dahil sa pagkakamali." #: kcm/backupplanwidget.cpp:548 #, kde-kuit-format msgctxt "@option:radio" msgid "" "Synchronized Backup (not available because rsync " "is not installed)" msgstr "" "Magkapanabay na kopya (Hindi magagamit dahil ang rsync ay hindi pa nakalagay sa kompyuter na ito)" #: kcm/backupplanwidget.cpp:553 #, kde-kuit-format msgctxt "@option:radio" msgid "Synchronized Backup" msgstr "Magkapanabay na seguridad na kopya" #: kcm/backupplanwidget.cpp:581 #, kde-kuit-format msgctxt "@title" msgid "Backup Type" msgstr "Uri ng seguridad na kopya" #: kcm/backupplanwidget.cpp:582 #, kde-kuit-format msgctxt "@label" msgid "Select what type of backup you want" msgstr "Piliin kung anong uri ng seguridad na kopya ang kinakailangan" #: kcm/backupplanwidget.cpp:590 #, kde-kuit-format msgctxt "@title" msgid "Sources" msgstr "Pinagmumulan" #: kcm/backupplanwidget.cpp:591 #, kde-kuit-format msgctxt "@label" msgid "Select which folders to include in backup" msgstr "Piliin ang mga polder na kailangan isama sa seguridad na kopya" #: kcm/backupplanwidget.cpp:605 #, kde-kuit-format msgctxt "@option:radio" msgid "Filesystem Path" msgstr "Lokasyon ng talaksang pang-sistema" #: kcm/backupplanwidget.cpp:606 #, kde-kuit-format msgctxt "@option:radio" msgid "External Storage" msgstr "Panlabas na imbakan" #: kcm/backupplanwidget.cpp:612 #, kde-kuit-format msgctxt "@info" msgid "" "You can use this option for backing up to a secondary internal harddrive, an " "external eSATA drive or networked storage. The requirement is just that you " "always mount it at the same path in the filesystem. The path specified here " "does not need to exist at all times, its existance will be monitored." msgstr "" "Maari mo itong piliin kung gusto mong ilagay ang iyong seguridad na kopya sa " "pangalawang panloob na hard drive, eSATA o imbakan sa network. Kinakailangan " "lang na palagi itong konektado sa iisang landas sa sistemang pangtalaksan." #: kcm/backupplanwidget.cpp:619 #, kde-kuit-format msgctxt "@label:textbox" msgid "Destination Path for Backup:" msgstr "Destinasyon para sa seguridad na kopya:" #: kcm/backupplanwidget.cpp:638 #, kde-kuit-format msgctxt "@info" msgid "" "Use this option if you want to backup your files on an external storage that " "can be plugged in to this computer, such as a USB hard drive or memory stick." msgstr "" "Gamitin ang alternatibong ito kung gusto mo ilagay ang iyong mga seguridad " "na kopya sa panlabasang imbakan na pwedeng isaksak sa kompyuter na ito " "kagaya ng USB hard drive o memory stick." #: kcm/backupplanwidget.cpp:648 kcm/backupplanwidget.cpp:652 #, kde-kuit-format msgctxt "@info:tooltip" msgid "The specified folder will be created if it does not exist." msgstr "" "Ang tinutukoy na polder ay pwedeng ilikha kung ito ay hindi pa nalilikha." #: kcm/backupplanwidget.cpp:650 #, kde-kuit-format msgctxt "@label:textbox" msgid "Folder on Destination Drive:" msgstr "Polder sa destinasyon:" #: kcm/backupplanwidget.cpp:658 #, kde-kuit-format msgctxt "@info:tooltip" msgid "Open dialog to select a folder" msgstr "Buksan ang diyalogo para pumili ng polder" #: kcm/backupplanwidget.cpp:688 #, kde-kuit-format msgctxt "@title" msgid "Destination" msgstr "Destinasyon" #: kcm/backupplanwidget.cpp:689 #, kde-kuit-format msgctxt "@label" msgid "Select the backup destination" msgstr "Piliin ang destinasyon ng seguridad na kopya" #: kcm/backupplanwidget.cpp:706 #, kde-kuit-format msgctxt "@option:radio" msgid "Manual Activation" msgstr "Manu-manong paganahin" #: kcm/backupplanwidget.cpp:707 #, kde-kuit-format msgctxt "@option:radio" msgid "Interval" msgstr "Pagitan" #: kcm/backupplanwidget.cpp:708 #, kde-kuit-format msgctxt "@option:radio" msgid "Active Usage Time" msgstr "Aktibong Oras ng Paggamit" #: kcm/backupplanwidget.cpp:710 #, kde-kuit-format msgctxt "@info" msgid "" "Backups are only taken when manually requested. This can be done by using " "the popup menu from the backup system tray icon." msgstr "" "Kinukuha lamang ang seguridad na kopya sang-ayon sa iyong kahilingan. Ito ay " "maaaring hilingin o piliin sa pamamagitan ng talaan sa may system tray icon. " #: kcm/backupplanwidget.cpp:724 #, kde-kuit-format msgctxt "@info" msgid "" "New backup will be triggered when backup destination becomes available and " "more than the configured interval has passed since the last backup was taken." msgstr "" "Ang pagkuha ng bagong seguridad na kopya ay magpapakita kung may magagamit " "na imbakan at kung lumagpas na ang panahon na nakalagay sa kompigurasyon ng " "pagkuha ng seguridad na kopya mula nung huli ito ay nakuha." #: kcm/backupplanwidget.cpp:741 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Minutes" msgstr "Minuto" #: kcm/backupplanwidget.cpp:742 kcm/backupplanwidget.cpp:769 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Hours" msgstr "Oras" #: kcm/backupplanwidget.cpp:743 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Days" msgstr "Araw" #: kcm/backupplanwidget.cpp:744 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Weeks" msgstr "Linggo" #: kcm/backupplanwidget.cpp:754 #, kde-kuit-format msgctxt "@info" msgid "" "New backup will be triggered when backup destination becomes available and " "you have been using your computer actively for more than the configured time " "limit since the last backup was taken." msgstr "" "Ang pagkuha ng bagong seguridad na kopya ay magpapakita kung may magagamit " "na imbakan at kung ikaw ay aktibong gumagamit sa kompyuter na ito sa " "humigit na oras nakalagay sa kompigurasyon sa sistema ng pagkuha ng " "seguridad na kopya o kung lumagpas na ang panahon na nakalagay sa " "kompigurasyon ng pagkuha ng seguridad na kopya mula nung huli ito ay nakuha." #: kcm/backupplanwidget.cpp:775 #, kde-kuit-format msgctxt "@option:check" msgid "Ask for confirmation before taking backup" msgstr "Kumpirmahin bago kumuha ng seguridad na kopya" #: kcm/backupplanwidget.cpp:794 #, kde-kuit-format msgctxt "@title" msgid "Schedule" msgstr "Talatakdaan" #: kcm/backupplanwidget.cpp:795 #, kde-kuit-format msgctxt "@label" msgid "Specify the backup schedule" msgstr "Magtakda ng iskedyul para sa seguridad na kopya" #: kcm/backupplanwidget.cpp:808 #, kde-kuit-format msgctxt "@option:check" msgid "Show hidden folders in source selection" msgstr "Ipakita ang mga nakatagong polder sa piniling panggagalingan polder." #: kcm/backupplanwidget.cpp:814 #, kde-kuit-format msgctxt "@info" msgid "" "This makes it possible to explicitly include or exclude hidden folders in " "the backup source selection. Hidden folders have a name that starts with a " "dot. They are typically located in your home folder and are used to store " "settings and temporary files for your applications." msgstr "" #: kcm/backupplanwidget.cpp:832 #, kde-kuit-format msgctxt "@info" msgid "" "This will make your backups use around 10% more storage space and saving " "backups will take slightly longer time. In return it will be possible to " "recover from a partially corrupted backup." msgstr "" "Ito ay magbibigay daan sa iyong seguridad na kopya na gumamit pa ng higit na " "10 porsiyento na espasyo sa imbakan at mas tatagal ng konti ang pag-iimpok. " "Pero ito ay magbibigay posibilidad na ayusin ang mga may bahagyang sirang " "seguridad na kopya." #: kcm/backupplanwidget.cpp:838 #, kde-kuit-format msgctxt "@option:check" msgid "Generate recovery information" msgstr "Gumawa ng inpormasyon tungkol sa pagbawi" #: kcm/backupplanwidget.cpp:840 #, kde-kuit-format msgctxt "@option:check" msgid "" "Generate recovery information (not available because par2 is not installed)" msgstr "" "Gumawa ng inpormasyon tungkol sa pagbawi (hindi ito maisagawa dahil ang " "par2 ay hindi nakalagay)" #: kcm/backupplanwidget.cpp:856 #, kde-kuit-format msgctxt "@option:check" msgid "Verify integrity of backups" msgstr "Beripikahin ang integridad ng seguridad na kopya" #: kcm/backupplanwidget.cpp:860 #, kde-kuit-format msgctxt "@info" msgid "" "Checks the whole backup archive for corruption every time you save new data. " "Saving backups will take a little bit longer time but it allows you to catch " "corruption problems sooner than at the time you need to use a backup, at " "that time it could be too late." msgstr "" "Sinisiyasat kung may sira ang buong arkibo ng seguridad na kopya sa tuwing " "ikaw ay nag-iimpok ng bagong talaksan. Gagawin nitong mas mabagal ng konti " "ang pang-impok ng seguridad na kopya pero ito ay nakakatulong sa " "pagsisiyasat ng anumang sira sa iyong mga seguridad na kopya sa mas maagang " "panahon." #: kcm/backupplanwidget.cpp:882 #, kde-kuit-format msgctxt "@title" msgid "Advanced" msgstr "Pauna" #: kcm/backupplanwidget.cpp:883 #, kde-kuit-format msgctxt "@label" msgid "Extra options for advanced users" msgstr "Karagdagang pamilian para sa mga dalubhasa" #: kcm/driveselection.cpp:275 #, kde-kuit-format msgctxt "@label Only shown if no drives are detected" msgid "" "Plug in the external storage you wish to use, then select it in this list." msgstr "" "Isaksak ang imbakan na nais mong gamitin para sa seguridad na kopya at " "pagkatapos ay pillin ito sa listahan." #: kcm/driveselectiondelegate.cpp:75 #, kde-kuit-format msgctxt "@item:inlistbox this text is added if selected drive is disconnected" msgid " (disconnected)" msgstr "(hindi nakakabit)" #: kcm/driveselectiondelegate.cpp:78 #, kde-kuit-format msgctxt "@label %1 is amount of free storage space of hard drive" msgid "%1 free" msgstr "May %1 na libre" #: kcm/driveselectiondelegate.cpp:92 #, kde-kuit-format msgctxt "" "@item:inlistbox used for unnamed filesystems, more than one filesystem on " "device. %1 is partition number, %2 is device description, %3 is either empty " "or the \" (disconnected)\" text" msgid "Partition %1 on %2%3" msgstr "Partisyon %1 sa %2%3" #: kcm/driveselectiondelegate.cpp:95 #, kde-kuit-format msgctxt "" "@item:inlistbox used when there is only one unnamed filesystem on device. %1 " "is device description, %2 is either empty or the \" (disconnected)\" text" msgid "%1%2" msgstr "%1%2" #: kcm/driveselectiondelegate.cpp:99 #, kde-kuit-format msgctxt "" "@item:inlistbox %1 is filesystem label, %2 is the device description, %3 is " "either empty or the \" (disconnected)\" text" msgid "%1 on %2%3" msgstr "%1 sa %2%3" #: kcm/driveselectiondelegate.cpp:106 #, kde-kuit-format msgctxt "@item:inlistbox %1 is drive(partition) label, %2 is storage capacity" msgid "%1: %2 total capacity" msgstr "%1:%2 kabuuan ng kapasidad" #: kcm/driveselectiondelegate.cpp:153 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "" "Warning: Symbolic links and file permissions can not be saved to this file " "system. File permissions only matters if there is more than one user of this " "computer or if you are backing up executable program files." msgstr "" "Babala: Ang mga pahintulot para sa mga talaksan ay hindi maaaring mailagay " "sa sistemang pangtalaksan. Ang mga pahintulot na ito ay kinakailangan lamang " "kapag may dalawa o higit pang taga- gamit ng kompyuter o kung ikaw ay " "naglalagay ng mga seguridad na kopya sa isang executable program files." #: kcm/driveselectiondelegate.cpp:157 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "" "Warning: File permissions can not be saved to this file system. File " "permissions only matters if there is more than one user of this computer or " "if you are backing up executable program files." msgstr "" "Babala: Ang mga pahintulot para sa mga talaksan ay hindi maaaring mailagay " "sa sistemang pangtalaksan. Ang mga pahintulot na ito ay kinakailangan lamang " "kapag may dalawa o higit pang taga- gamit ng kompyuter o kung ikaw ay " "naglalagay ng mga seguridad na kopya sa isang executable program files." #: kcm/folderselectionmodel.cpp:107 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "" "%1will be included in the backup, except for " "unchecked subfolders" msgstr "" "%1ay maidadagdag sa seguridad na kopya, maliban sa " "mga hindi napiling polder na nasa loob nito" #: kcm/folderselectionmodel.cpp:111 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "%1will be included in the backup" msgstr "%1kasali sa seguridad na kopya" #: kcm/folderselectionmodel.cpp:115 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "" "%1 will not be included in " "the backup but contains folders that will" msgstr "" "%1ayhindi maidadagdag sa " "seguridad na kopya pero may mga polder na napiling maidagdag sa seguridad na " "kopya" #: kcm/folderselectionmodel.cpp:119 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "" "%1 will not be included in " "the backup" msgstr "" "%1ay hindi isasama sa " "seguridad na kopya" #: kcm/kupkcm.cpp:49 #, kde-format msgid "Kup Configuration Module" msgstr "Tagapamahala ng kumpigurasyon ng Kup" #: kcm/kupkcm.cpp:51 #, kde-format msgid "Configuration of backup plans for the Kup backup system" msgstr "Kompigurasyon ng seguridad na kopya para sa sistema ng Kup " #: kcm/kupkcm.cpp:54 #, kde-format msgid "Maintainer" msgstr "Taga-panatili" #: kcm/kupkcm.cpp:87 #, kde-format msgid "" "

Backup programs are missing

Before you can activate any backup " "plan you need to install either of

  • bup, for versioned backups
  • rsync, for synchronized backups
" msgstr "" "

Nawawalang programa para sa seguridad na kopya

Bago mapagana ang " "anumang plano para sa seguridad na kopya, kailangang ilagay ang isa sa mga

  • bup, para sa mga isasaling seguridad na kopya
  • rsync, para " "sa mga magkasabay na seguridad na kopya
" #: kcm/kupkcm.cpp:168 #, kde-kuit-format msgctxt "@title:window" msgid "Warning" msgstr "Babala" #: kcm/kupkcm.cpp:170 #, fuzzy, kde-kuit-format msgctxt "@info %1 is the name of the backup plan" msgid "" "%1 does not have a destination!No backups will be saved by this plan." msgstr "" "Ang 1% ay walang destinasyon!Walang seguridad na kopya ang magagawa sa " "planong ito." #: kcm/kupkcm.cpp:227 #, kde-kuit-format msgctxt "@action:button" msgid "Add New Plan" msgstr "Magdagdag ng bagong plano" #: kcm/kupkcm.cpp:238 #, kde-kuit-format msgctxt "@option:check" msgid "Backups Enabled" msgstr "Ang mga seguridad na kopya ay gumagana" #: kcm/planstatuswidget.cpp:48 #, kde-kuit-format msgctxt "@action:button" msgid "Configure" msgstr "Magkompigura" #: kcm/planstatuswidget.cpp:51 #, kde-kuit-format msgctxt "@action:button" msgid "Remove" msgstr "Tanggalin" #: kcm/planstatuswidget.cpp:54 #, kde-kuit-format msgctxt "@action:button" msgid "Duplicate" msgstr "" #: kioslave/bupslave.cpp:92 kioslave/bupslave.cpp:149 kioslave/bupslave.cpp:186 #: kioslave/bupslave.cpp:249 kioslave/bupslave.cpp:271 #, kde-format msgid "" "No bup repository found.\n" "%1" msgstr "" "Walang mahanap na repositoryo ng bup.\n" "%1" #: plasmoid/contents/ui/FullRepresentation.qml:88 #, fuzzy, kde-format msgid "Save new backup" msgstr "Kumukuha ng bagong seguridad na kopya" #: plasmoid/contents/ui/FullRepresentation.qml:94 #, fuzzy, kde-format msgid "Show files" msgstr "Ipakita ang mga talaksan" #: plasmoid/contents/ui/FullRepresentation.qml:99 #, fuzzy, kde-format msgid "Show log file" msgstr "Ipakita ang listahan ng talaksan" #. i18n: file: filedigger/restoredialog.ui:14 #. i18n: ectx: property (windowTitle), widget (QDialog, RestoreDialog) #: po/rc.cpp:3 rc.cpp:3 #, kde-format msgctxt "@title:window" msgid "Restore Guide" msgstr "Gabay Para sa Pagpapanumbalik" #. i18n: file: filedigger/restoredialog.ui:55 #. i18n: ectx: property (text), widget (QPushButton, mRestoreOriginalButton) #: po/rc.cpp:6 rc.cpp:6 #, kde-format msgctxt "@action:button" msgid "Restore to original location" msgstr "Ibalik sa orihinal na lokasyon" #. i18n: file: filedigger/restoredialog.ui:78 #. i18n: ectx: property (text), widget (QPushButton, mRestoreCustomButton) #: po/rc.cpp:9 rc.cpp:9 #, kde-format msgctxt "@action:button" msgid "Choose where to restore" msgstr "Piliin kung saan mo gustong ibalik" #. i18n: file: filedigger/restoredialog.ui:132 #. i18n: ectx: property (text), widget (QPushButton, mDestBackButton) #: po/rc.cpp:12 rc.cpp:12 #, kde-format msgctxt "@action:button" msgid "Back" msgstr "Bumalik" #. i18n: file: filedigger/restoredialog.ui:144 #. i18n: ectx: property (text), widget (QPushButton, mDestNextButton) #: po/rc.cpp:15 rc.cpp:15 #, kde-format msgctxt "@action:button" msgid "Next" msgstr "Susunod" #. i18n: file: filedigger/restoredialog.ui:175 #. i18n: ectx: property (text), widget (QRadioButton, mNewNameRadioButton) #: po/rc.cpp:18 rc.cpp:18 #, kde-format msgctxt "@option:radio " msgid "Restore the folder under a new name" msgstr "Ipanumbalik ang polder sa bagong pangalan" #. i18n: file: filedigger/restoredialog.ui:208 #. i18n: ectx: property (text), widget (QRadioButton, mOverwriteRadioButton) #: po/rc.cpp:21 rc.cpp:21 #, kde-format msgctxt "@option:radio" msgid "Merge folders" msgstr "Pagsamahin ang mga polder" #. i18n: file: filedigger/restoredialog.ui:238 #. i18n: ectx: property (text), widget (QLabel, mConfirmOverwriteLabel) #: po/rc.cpp:24 rc.cpp:24 #, kde-format msgctxt "@info Question to user, in dialog" msgid "" "The following files would be overwritten, please confirm that you wish to " "continue." msgstr "" "Ang mga sumusunod na talaksan ay mapapalitan, mangyaring kumpirmahin kung " "nais mong ipagpatuloy." #. i18n: file: filedigger/restoredialog.ui:274 #. i18n: ectx: property (text), widget (QPushButton, mOverwriteBackButton) #: po/rc.cpp:27 rc.cpp:27 #, kde-format msgctxt "@action:button go to previous page in dialog" msgid "Back" msgstr "Bumalik" #. i18n: file: filedigger/restoredialog.ui:286 #. i18n: ectx: property (text), widget (QPushButton, mConfirmButton) #: po/rc.cpp:30 rc.cpp:30 #, kde-format msgctxt "@action:button User answers \"yes I confirm: overwrite files\"" msgid "Confirm" msgstr "Kompirmahin" #. i18n: file: filedigger/restoredialog.ui:341 #. i18n: ectx: property (text), widget (QLabel, mErrorLabel) #: po/rc.cpp:33 rc.cpp:33 #, kde-format msgctxt "@label above the detailed error message" msgid "An error occured while restoring:" msgstr "May naganap na mali habang nagpapanumbalik ng:" #. i18n: file: filedigger/restoredialog.ui:372 #. i18n: ectx: property (text), widget (QLabel, label) #: po/rc.cpp:36 rc.cpp:36 #, kde-format msgctxt "@label" msgid "Restoration completed successfully!" msgstr "Ang pagpapanumbalik ay ganap na natapos ng maayos" #. i18n: file: filedigger/restoredialog.ui:413 #. i18n: ectx: property (text), widget (QPushButton, mOpenDestinationButton) #: po/rc.cpp:39 rc.cpp:39 #, kde-format msgid "Open Destination" msgstr "Buksan ang destinasyon" #. i18n: file: filedigger/restoredialog.ui:472 #. i18n: ectx: property (text), widget (QPushButton, mCloseButton) #: po/rc.cpp:42 rc.cpp:42 #, kde-format msgctxt "@action:button" msgid "Close" msgstr "Isara" #: po/rc.cpp:43 po/rc.cpp:58 settings/backupplan.cpp:69 rc.cpp:43 rc.cpp:58 #, kde-format msgid "Backups" msgstr "Mga seguridad na kopya" #: po/rc.cpp:44 rc.cpp:44 msgid "Configure backup plans" msgstr "Magkompigura ng plano para sa seguridad na kopya" #: po/rc.cpp:45 rc.cpp:45 msgid "backup,recovery,safety" msgstr "seguridad na kopya, pagkabawi,kaligtasan" #: po/rc.cpp:46 rc.cpp:46 msgid "Kup" msgstr "Kup" #: po/rc.cpp:48 rc.cpp:48 msgid "Start taking backup" msgstr "Simulan ang pagkuha ng seguridad na kopya" #: po/rc.cpp:49 rc.cpp:49 msgid "A question if user wants to start taking a backup" msgstr "" "Tanong kung gusto ng taga-gamit na magsimula ng pagkuha ng seguridad na kopya" #: po/rc.cpp:50 rc.cpp:50 #, fuzzy msgid "Backup succeeded" msgstr "Kinakailangan ng bagong seguridad na kopya" #: po/rc.cpp:51 rc.cpp:51 #, fuzzy msgid "Saving of backup successfully completed" msgstr "Nabigo ang pag-iimpok ng seguridad na kopya" #: po/rc.cpp:52 rc.cpp:52 msgid "Backup failed" msgstr "Nabigo ang seguridad na kopya" #: po/rc.cpp:53 rc.cpp:53 msgid "Saving of backup failed, offer user to see log file" msgstr "" "Ang pag-impok ng seguridad na kopya ay nabigo, paki-tingnan ang listahan ng " "talaksan kung bakit ito ay nabigo" #: po/rc.cpp:54 rc.cpp:54 msgid "Integrity check completed" msgstr "Ang pagsisiyasat ng integridad sa seguridad na kopya ay nakumpleto na" #: po/rc.cpp:55 rc.cpp:55 msgid "Finished checking integrity of backup archive" msgstr "" "Natapos na ang pagsisiyasat ang integridad ng arkibo ng seguridad na kopya." #: po/rc.cpp:56 rc.cpp:56 msgid "Repair completed" msgstr "Ang pag-aayos ay nakumpleto na" #: po/rc.cpp:57 rc.cpp:57 msgid "Finished repairing backup archive" msgstr "Natapos na ang pag-aayos sa arkibo ng seguridad na kopya" #: po/rc.cpp:59 rc.cpp:59 #, fuzzy msgid "Status of backup plans" msgstr "Magkompigura ng plano para sa seguridad na kopya" #: po/rc.cpp:60 rc.cpp:60 #, fuzzy msgid "Backup Status" msgstr "Maayos ang katayuan ng seguridad na kopya" #: po/rc.cpp:61 rc.cpp:61 msgid "Displays status of backup plans" msgstr "" #: settings/backupplan.cpp:38 #, kde-kuit-format msgctxt "" "@label Default name for a new backup plan, %1 is the number of the plan in " "order" msgid "Backup plan %1" msgstr "Plano ng seguridad na kopya %1" #: settings/backupplan.cpp:101 #, kde-format msgctxt "default description of newly duplicated backup plan" msgid "%1 (copy)" msgstr "" #: settings/backupplan.cpp:213 #, fuzzy, kde-format msgctxt "%1 is fancy formatted date" msgid "Last saved: %1" msgstr "- nakaimpok na ng %1" #: settings/backupplan.cpp:218 #, kde-format msgctxt "%1 is storage size of archive" msgid "Size: %1" msgstr "" #: settings/backupplan.cpp:223 #, kde-format msgctxt "%1 is free storage space" msgid "Free space: %1" msgstr "" #: settings/backupplan.cpp:227 #, kde-kuit-format msgctxt "@label" msgid "This backup plan has never been run." msgstr "Ang plano na ito ay hindi kailanman nagamit." #~ msgctxt "@title:window" #~ msgid "Backups" #~ msgstr "Mga seguridad na kopya" #~ msgctxt "@title:menu" #~ msgid "Backups" #~ msgstr "Mga Seguridad na kopya" #~ msgctxt "@action:inmenu" #~ msgid "Configure Backups" #~ msgstr "Kompigurasyon para sa seguridad na kopya" #~ msgctxt "@action:inmenu" #~ msgid "Take Backup Now" #~ msgstr "Gumawa ng seguridad na kopya" #~ msgctxt "@action:inmenu" #~ msgid "Show Log File" #~ msgstr "Ipakita ang listahan ng talaksan" #~ msgctxt "@title:window" #~ msgid "Backup Device Available - %1" #~ msgstr "May imbakan na maaring gamitin para sa seguridad na kopya - %1" #~ msgctxt "@info notification" #~ msgid "" #~ "Saving backup did not complete successfully. See log file for more " #~ "details." #~ msgstr "" #~ "Ang pag-iimpok ng seguridad na kopya ang hindi nakumpleto. Tingnan ang " #~ "detalye sa listahan ng talaksan. " #~ msgctxt "@label %1 is fancy formatted date, %2 is time of day" #~ msgid "Last backup was taken %1 at %2.\n" #~ msgstr "Ang huling seguridad na kopya ay kinuha noong %1 at %2.\n" #~ msgctxt "@label %1 is storage size of archive" #~ msgid "The size of the backup archive was %1.\n" #~ msgstr "Ang sukat ng seguridad na kopya na naka-arkibo ay %1.\n" #~ msgctxt "@label %1 is free storage space" #~ msgid "The destination still had %1 available.\n" #~ msgstr "May %1 pang libre para sa destinayon na ito.\n" kup-backup-0.7.1+dfsg/po/translation-HOWTO000066400000000000000000000024211322613417100202740ustar00rootroot00000000000000For translators: Please visit https://www.transifex.com/projects/p/kup/ and create an account there, join an existing language team or request a new language. Then just start translating directly in the web interface there or download the .po file for offline translation in a locally installed translation editor, for example virtaal, poedit or lokalize. Most texts should have a "context" attached to them, informing you a little about how each text string is used. For developers: The script called "extract-messages.sh" is designed to be run from the "po" directory. It can be run at any time and should never cause any dataloss or other problems. It extracts text strings that needs translation from the source code and merges that with already existing translation files. Run it if the source code has been changed with new or modified user-visible texts. It also extracts texts from .desktop.template files that needs translation. After that it spits out .desktop files by using those templates and translations from all the *.po files in the po directory. So if you have updated or added translations of the text strings from .desktop files, running extract-messages.sh is needed to generate an updated .desktop file. That generated .desktop file is kept in git for convenience. kup-backup-0.7.1+dfsg/po/zh_TW.po000066400000000000000000001251151322613417100165160ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Jeff Huang , 2014-2017 # Simon Persson , 2014-2015 msgid "" msgstr "" "Project-Id-Version: kup\n" "Report-Msgid-Bugs-To: http://kde-apps.org/content/show.php/Kup+Backup+System?" "content=147465\n" "POT-Creation-Date: 2018-01-05 16:00+0800\n" "PO-Revision-Date: 2017-09-20 03:56+0000\n" "Last-Translator: Jeff Huang \n" "Language-Team: Chinese (Taiwan) (http://www.transifex.com/kup/kup/language/" "zh_TW/)\n" "Language: zh_TW\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" #: daemon/bupjob.cpp:47 daemon/buprepairjob.cpp:38 #: daemon/bupverificationjob.cpp:37 #, kde-kuit-format msgctxt "@info notification" msgid "" "The bup program is needed but could not be found, " "maybe it is not installed?" msgstr "" "必須的 bup 程式是必須的但找不到,也許它尚未被安" "裝?" #: daemon/bupjob.cpp:52 daemon/buprepairjob.cpp:43 #, kde-kuit-format msgctxt "@info notification" msgid "" "The par2 program is needed but could not be " "found, maybe it is not installed?" msgstr "" "必須的 par2 程式是必須的但找不到,也許它尚未被安" "裝?" #: daemon/bupjob.cpp:71 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup destination could not be initialised. See log file for more details." msgstr "備份目的地無法被初始化。參見記錄檔以取得更多詳細資訊。" #: daemon/bupjob.cpp:93 #, kde-format msgid "Checking backup integrity" msgstr "正在校驗備份完整性" #: daemon/bupjob.cpp:104 daemon/bupverificationjob.cpp:67 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups could be corrupted! See log file " "for more details. Do you want to try repairing the backup files?" msgstr "" "備份完整性校驗失敗。您的備份可能已損毀!參見記錄檔以取得更多詳細資訊。您想要" "嘗試修復備份檔案嗎?" #: daemon/bupjob.cpp:108 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups could be corrupted! See log file " "for more details." msgstr "備份完整性校驗失敗。您的備份可能已損毀!參見記錄檔以取得更多詳細資訊。" #: daemon/bupjob.cpp:131 daemon/rsyncjob.cpp:57 #, kde-format msgid "Checking what to copy" msgstr "勾選哪些要複製" #: daemon/bupjob.cpp:138 #, kde-kuit-format msgctxt "@info notification" msgid "Failed to analyze files. See log file for more details." msgstr "分析檔案失敗。參見記錄檔以取得更多詳細資訊。" #: daemon/bupjob.cpp:159 daemon/bupjob.cpp:253 daemon/rsyncjob.cpp:175 #, kde-format msgid "Saving backup" msgstr "正在儲存備份" #: daemon/bupjob.cpp:167 daemon/rsyncjob.cpp:120 #, kde-kuit-format msgctxt "@info notification" msgid "Failed to save backup. See log file for more details." msgstr "儲存備份失敗。參見記錄檔以取得更多詳細資訊。" #: daemon/bupjob.cpp:189 #, kde-format msgid "Generating recovery information" msgstr "正在生成復原資訊" #: daemon/bupjob.cpp:197 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed to generate recovery info for the backup. See log file for more " "details." msgstr "產生備份的復原資訊失敗。參見記錄檔以取得更多詳細資訊。" #: daemon/bupjob.cpp:254 daemon/rsyncjob.cpp:176 #, kde-format msgctxt "Label for file currently being copied" msgid "File" msgstr "檔案" #: daemon/buprepairjob.cpp:72 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup repair failed. Your backups could be corrupted! See log file for more " "details." msgstr "備份修復失敗。您的備份可能已損毀!參見記錄檔以取得更多詳細資訊。" #: daemon/buprepairjob.cpp:76 #, kde-kuit-format msgctxt "@info notification" msgid "Success! Backup repair worked. See log file for more details." msgstr "成功!備份修復完成。參見記錄檔以取得更多詳細資訊。" #: daemon/buprepairjob.cpp:80 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup repair was not necessary. Your backups are not corrupted.See log file " "for more details." msgstr "不需要修復備份。您的備份並無損毀。參見記錄檔以取得更多詳細資訊。" #: daemon/buprepairjob.cpp:85 #, kde-kuit-format msgctxt "@info notification" msgid "" "Backup repair failed. Your backups could still be corrupted! See log file " "for more details." msgstr "" "備份修復失敗。您的備份可能仍處於損毀狀態!參見記錄檔以取得更多詳細資訊。" #: daemon/bupverificationjob.cpp:70 daemon/bupverificationjob.cpp:87 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups are corrupted! See log file for " "more details." msgstr "備份完整性校驗失敗。您的備份已損毀!參見記錄檔以取得更多詳細資訊。" #: daemon/bupverificationjob.cpp:76 #, kde-kuit-format msgctxt "@info notification" msgid "Backup integrity test was successful, Your backups are fine." msgstr "備份完整性測試成功。您的備份狀態良好。" #: daemon/bupverificationjob.cpp:83 #, kde-kuit-format msgctxt "@info notification" msgid "" "Failed backup integrity check. Your backups are corrupted! See log file for " "more details. Do you want to try repairing the backup files?" msgstr "" "備份完整性校驗失敗。您的備份已損毀!參見記錄檔以取得更多詳細資訊。您想要嘗試" "修復備份檔案嗎?" #: daemon/edexecutor.cpp:115 daemon/edexecutor.cpp:124 #: daemon/edexecutor.cpp:160 daemon/fsexecutor.cpp:114 #: daemon/fsexecutor.cpp:146 #, kde-kuit-format msgctxt "@title:window" msgid "Problem" msgstr "問題" #: daemon/edexecutor.cpp:116 daemon/fsexecutor.cpp:115 #, kde-kuit-format msgctxt "notification" msgid "Invalid type of backup in configuration." msgstr "在組態設定中無效的備份類型。" #: daemon/edexecutor.cpp:125 #, kde-kuit-format msgctxt "notification" msgid "You don't have write permission to backup destination." msgstr "您並沒有備份目的地的寫入權限。" #: daemon/kupdaemon.cpp:171 #, kde-format msgid "Continue" msgstr "繼續" #: daemon/kupdaemon.cpp:173 #, kde-format msgid "Stop" msgstr "停止" #: daemon/kupdaemon.cpp:175 #, kde-format msgctxt "%1 is a text explaining the current activity" msgid "Currently busy: %1" msgstr "忙碌中:%1" #: daemon/kupdaemon.cpp:176 #, kde-format msgid "Do you really want to stop?" msgstr "您真的想要停止嗎?" #: daemon/kupdaemon.cpp:179 #, kde-format msgid "User Backups" msgstr "使用者備份" #: daemon/kupdaemon.cpp:249 #, kde-format msgctxt "status in tooltip" msgid "Backup destination not available" msgstr "備份目的地不可用" #: daemon/kupdaemon.cpp:253 daemon/kupdaemon.cpp:310 #, kde-format msgid "No backup plans configured" msgstr "未設定備份計畫" #: daemon/kupdaemon.cpp:259 #, kde-format msgctxt "status in tooltip" msgid "Backup destination available" msgstr "備份目的地可用" #: daemon/kupdaemon.cpp:269 daemon/planexecutor.cpp:84 #, kde-format msgctxt "status in tooltip" msgid "Backup status OK" msgstr "備份狀態 OK" #: daemon/kupdaemon.cpp:276 daemon/planexecutor.cpp:86 #, kde-format msgctxt "status in tooltip" msgid "New backup suggested" msgstr "已建議新備份" #: daemon/kupdaemon.cpp:283 daemon/planexecutor.cpp:88 #, kde-format msgctxt "status in tooltip" msgid "New backup neeeded" msgstr "需要新備份" #: daemon/main.cpp:41 #, kde-kuit-format msgctxt "@info:shell Error message at startup" msgid "" "Kup is not enabled, enable it from the system settings module. You can do " "that by running kcmshell5 kup" msgstr "" "Kup 未啟用,在系統設定模組中啟用它。您也可以利用執行「kcmshell5 kup」來做到這" "件事。" #: daemon/main.cpp:47 #, kde-kuit-format msgctxt "@title" msgid "Kup Daemon" msgstr "Kup 守護進程" #: daemon/main.cpp:48 #, kde-format msgid "" "Kup is a flexible backup solution using the backup storage system 'bup'. " "This allows it to quickly perform incremental backups, only saving the parts " "of files that has actually changed since last backup was taken." msgstr "" "Kup 是一個使用備份儲存系統「bup」的靈活的備份解決方案。讓您可以快速的進行增量" "備份,只儲存在您最後一次備份之後所變更的檔案部份。" #: daemon/main.cpp:51 kcm/kupkcm.cpp:52 #, kde-format msgid "Copyright (C) 2011-2015 Simon Persson" msgstr "Copyright (C) 2011-2015 Simon Persson" #: daemon/main.cpp:53 filedigger/main.cpp:51 kcm/kupkcm.cpp:54 #, kde-format msgid "Simon Persson" msgstr "Simon Persson" #: daemon/main.cpp:54 filedigger/main.cpp:52 kcm/kupkcm.cpp:55 #, kde-kuit-format msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "黃柏諺" #: daemon/main.cpp:54 filedigger/main.cpp:52 kcm/kupkcm.cpp:56 #, kde-kuit-format msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "s8321414@yahoo.com.tw " #: daemon/planexecutor.cpp:76 #, kde-format msgctxt "status in tooltip" msgid "Saving backup" msgstr "正在儲存備份" #: daemon/planexecutor.cpp:78 #, kde-format msgctxt "status in tooltip" msgid "Checking backup integrity" msgstr "正在檢查備份完整性" #: daemon/planexecutor.cpp:80 #, kde-format msgctxt "status in tooltip" msgid "Repairing backups" msgstr "正在修復備份" #: daemon/planexecutor.cpp:118 daemon/planexecutor.cpp:133 #, kde-kuit-format msgctxt "@info" msgid "Do you want to save a first backup now?" msgstr "您想要現在儲存第一個備份嗎?" #: daemon/planexecutor.cpp:121 #, kde-kuit-format msgctxt "@info" msgid "" "It has been %1 since last backup was saved.\n" "Save a new backup now?" msgstr "" "自上一個備份儲存後已經過了 %1。\n" "現在儲存新備份?" #: daemon/planexecutor.cpp:137 #, kde-kuit-format msgctxt "@info" msgid "" "You have been active for %1 since last backup was saved.\n" "Save a new backup now?" msgstr "" "自上一個備份儲存後您似乎相當活躍。\n" "現在儲存新備份?" #: daemon/planexecutor.cpp:170 daemon/planexecutor.cpp:200 #: daemon/planexecutor.cpp:278 #, kde-kuit-format msgctxt "@action:button" msgid "Yes" msgstr "是" #: daemon/planexecutor.cpp:170 daemon/planexecutor.cpp:201 #: daemon/planexecutor.cpp:279 #, kde-kuit-format msgctxt "@action:button" msgid "No" msgstr "否" #: daemon/planexecutor.cpp:192 #, kde-kuit-format msgctxt "@title:window" msgid "Saving of Backup Failed" msgstr "備份儲存失敗" #: daemon/planexecutor.cpp:197 daemon/planexecutor.cpp:275 #: daemon/planexecutor.cpp:309 #, kde-kuit-format msgctxt "@action:button" msgid "Show log file" msgstr "顯示記錄檔" #: daemon/planexecutor.cpp:221 #, kde-kuit-format msgctxt "@title:window" msgid "Backup Saved" msgstr "備份已儲存" #: daemon/planexecutor.cpp:222 #, kde-kuit-format msgctxt "@info notification" msgid "Saving backup completed successfully." msgstr "儲存備份成功完成。" #: daemon/planexecutor.cpp:271 #, kde-kuit-format msgctxt "@title:window" msgid "Integrity Check Completed" msgstr "完整性校驗完成" #: daemon/planexecutor.cpp:306 #, kde-kuit-format msgctxt "@title:window" msgid "Repair Completed" msgstr "修復完成" #: daemon/planexecutor.cpp:337 po/rc.cpp:47 rc.cpp:47 #, kde-format msgid "Kup Backup System" msgstr "Kup 備份系統" #: daemon/rsyncjob.cpp:48 #, kde-kuit-format msgctxt "@info notification" msgid "" "The rsync program is needed but could not be " "found, maybe it is not installed?" msgstr "" "必須的 rsync 程式是必須的但找不到,也許它尚未被安" "裝?" #: filedigger/main.cpp:47 #, kde-kuit-format msgctxt "@title" msgid "File Digger" msgstr "檔案挖掘者" #: filedigger/main.cpp:48 #, kde-format msgid "Browser for bup archives." msgstr "bup 檔案的瀏覽程式。" #: filedigger/main.cpp:49 #, kde-format msgid "Copyright (C) 2013-2015 Simon Persson" msgstr "Copyright (C) 2013-2015 Simon Persson" #: filedigger/main.cpp:59 #, kde-format msgid "Name of the branch to be opened." msgstr "所要開啟分支的名稱。" #: filedigger/main.cpp:61 #, kde-format msgid "Path to the bup repository to be opened." msgstr "所要開啟 bup 儲存庫的路徑。" #: filedigger/main.cpp:70 #, kde-format msgctxt "@info:shell Error message at startup" msgid "" "You must supply the path to a bup or git repository that you wish to open " "for viewing." msgstr "您必須提供 bup 或 git 儲存庫的路徑以供開啟檢視。" #: filedigger/main.cpp:85 #, kde-kuit-format msgctxt "@info messagebox, %1 is a folder path" msgid "" "The backup archive %1 could not be opened. Check if the " "backups really are located there." msgstr "" "備份壓縮檔 %1 無法開啟。請檢查備份是否真的位於那裡。" #: filedigger/main.cpp:92 #, kde-kuit-format msgctxt "@info messagebox" msgid "You do not have permission needed to read this backup archive." msgstr "您沒有讀取這個備份封存檔的必須權限。" #: filedigger/mergedvfs.cpp:108 #, kde-kuit-format msgctxt "@info messagebox" msgid "" "Could not read this backup archive. Perhaps some files have become " "corrupted. Do you want to run an integrity check to test this?" msgstr "" "無法讀取這個備份封存檔。也許某些檔案已損毀。您想要執行完整性檢查來測試這個" "嗎?" #: filedigger/mergedvfs.cpp:156 #, kde-kuit-format msgctxt "added after folder name in some cases" msgid " (folder)" msgstr " (資料夾)" #: filedigger/mergedvfs.cpp:158 #, kde-kuit-format msgctxt "added after file name in some cases" msgid " (symlink)" msgstr "(符號連結)" #: filedigger/mergedvfs.cpp:160 #, kde-kuit-format msgctxt "added after file name in some cases" msgid " (file)" msgstr "(檔案)" #: filedigger/restoredialog.cpp:115 kcm/backupplanwidget.cpp:451 #, kde-kuit-format msgctxt "@action:button" msgid "New Folder..." msgstr "新資料夾..." #: filedigger/restoredialog.cpp:141 filedigger/restoredialog.cpp:160 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "No destination was selected, please select one." msgstr "目的地尚未選擇,請選擇一個。" #: filedigger/restoredialog.cpp:251 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "There was a problem while getting a list of all files to restore: %1" msgstr "當要取得所有要恢復檔案的列表時發生了問題: %1" #: filedigger/restoredialog.cpp:264 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "The destination does not have enough space available. Please choose a " "different destination or free some space." msgstr "目的地沒有足夠的可用空間。請選擇其他目的地或是釋放一些空間。" #: filedigger/restoredialog.cpp:274 #, kde-kuit-format msgctxt "" "added to the suggested filename when restoring, %1 is the time when backup " "was taken" msgid " - saved at %1" msgstr " - 儲存在 %1" #: filedigger/restoredialog.cpp:275 #, kde-kuit-format msgctxt "@info" msgid "Folder already exists, please choose a solution" msgstr "資料夾已經存在,請選擇一個解決方案" #: filedigger/restoredialog.cpp:281 #, kde-kuit-format msgctxt "@info" msgid "File already exists" msgstr "檔案已存在" #: filedigger/restoredialog.cpp:294 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "The new name entered already exists, please enter a different one." msgstr "輸入的新名稱已存在,請輸入不同的。" #: filedigger/restoredialog.cpp:371 kcm/dirselector.cpp:50 #, kde-kuit-format msgctxt "default folder name when creating a new folder" msgid "New Folder" msgstr "新資料夾" #: filedigger/restoredialog.cpp:376 kcm/dirselector.cpp:55 #, kde-kuit-format msgctxt "@title:window" msgid "New Folder" msgstr "新資料夾" #: filedigger/restoredialog.cpp:377 kcm/dirselector.cpp:56 #, kde-kuit-format msgctxt "@label:textbox" msgid "" "Create new folder in:\n" "%1" msgstr "" "在此處新增資料夾:\n" "%1" #: filedigger/restoredialog.cpp:390 kcm/dirselector.cpp:68 #, kde-format msgid "A folder named %1 already exists." msgstr "名稱為 %1 的資料夾已存在。" #: filedigger/restoredialog.cpp:396 kcm/dirselector.cpp:74 #, kde-format msgid "You do not have permission to create %1." msgstr "您沒有權限新增 %1 。" #: filedigger/restorejob.cpp:99 #, kde-kuit-format msgctxt "progress report, current operation" msgid "Restoring" msgstr "正在還原" #: filedigger/restorejob.cpp:100 #, kde-kuit-format msgctxt "progress report, label" msgid "File:" msgstr "檔案:" #: filedigger/versionlistdelegate.cpp:135 #, kde-kuit-format msgctxt "@action:button" msgid "Open" msgstr "開啟" #: filedigger/versionlistdelegate.cpp:137 #, kde-kuit-format msgctxt "@action:button" msgid "Restore" msgstr "還原" #: kcm/backupplanwidget.cpp:282 #, kde-kuit-format msgctxt "@action:button" msgid "Exclude Folder" msgstr "排除資料夾" #: kcm/backupplanwidget.cpp:285 #, kde-kuit-format msgctxt "@action:button" msgid "Include Folder" msgstr "包含資料夾" #: kcm/backupplanwidget.cpp:382 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "You don't have permission to read this folder: %1It cannot be included in the source selection. If it does not contain " "anything important to you, one possible solution is to exclude the folder " "from the backup plan." msgstr "" "您沒有權限讀取此資料夾:%1其無法被包含於來源選擇" "中。若其並不包含任何對您來說重要的東西,其中一個可能的解決方法是從備份計畫中" "排除該資料夾。" #: kcm/backupplanwidget.cpp:393 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "You don't have permission to read this file: %1It " "cannot be included in the source selection. If the file is not important to " "you, one possible solution is to exclude the whole folder where the file is " "stored from the backup plan." msgstr "" "您沒有權限讀取此檔案:%1其無法被包含在來源選擇中。" "若該檔案對您來說並不重要,其中一個可能的解決方法是將包含該檔案的資料夾整個排" "除在備份計畫外。" #: kcm/backupplanwidget.cpp:409 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "The symbolic link %1 is currently included but it " "points to a folder which is not: %2.That is " "probably not what you want. One solution is to simply include the target " "folder in the backup plan." msgstr "" "符號連結 %1 目前被包含在內,但是其指向的資料夾並不包含:" "%2這可能不是您想要的。其中一個解法是將目標資料夾" "包含在備份計畫內。" #: kcm/backupplanwidget.cpp:417 #, kde-kuit-format msgctxt "@info message bar appearing on top" msgid "" "The symbolic link %1 is currently included but it " "points to a file which is not: %2.That is probably " "not what you want. One solution is to simply include the folder where the " "file is stored in the backup plan." msgstr "" "符號連結 %1 目前被包含在內,但是其指向的檔案並不包含:" "%2這可能不是您想要的。其中一個解法是將包含目標檔" "案的資料夾包含在備份計畫內。" #: kcm/backupplanwidget.cpp:440 #, kde-kuit-format msgctxt "@title:window" msgid "Select Folder" msgstr "選擇資料夾" #: kcm/backupplanwidget.cpp:478 #, kde-kuit-format msgctxt "@label" msgid "Description:" msgstr "描述:" #: kcm/backupplanwidget.cpp:481 #, kde-kuit-format msgctxt "@action:button" msgid "Back to overview" msgstr "回到概覽" #: kcm/backupplanwidget.cpp:510 #, kde-kuit-format msgctxt "@info" msgid "" "This type of backup is an archive. It contains both the " "latest version of your files and earlier backed up versions. Using this type " "of backup allows you to recover older versions of your files, or files which " "were deleted on your computer at a later time. The storage space needed is " "minimized by looking for common parts of your files between versions and " "only storing those parts once. Nevertheless, the backup archive will keep " "growing in size as time goes by.Also important to know is that the " "files in the archive can not be accessed directly with a general file " "manager, a special program is needed." msgstr "" "這種類型的備份是一個 封存檔。它同時包含了您檔案的最新版" "本及較早的備份版本。使用這個類型的備份讓您可以將您的檔案恢復到舊版本,或是救" "回在稍後從您的電腦中刪除的檔案。儲存空間是最小的,因為其只儲存您檔案每的版本" "間的差異。然而,備份檔會隨著時間的過去而逐漸增大。同時有一些重點必須知" "道,在封存檔裡的檔案是無法使用一般的檔案管理員直接存取的,必須使用特殊的程" "式。" #: kcm/backupplanwidget.cpp:525 #, kde-kuit-format msgctxt "@option:radio" msgid "" "Versioned Backup (not available because bup is " "not installed)" msgstr "版本備份(因為 bup未安裝,故不可用)" #: kcm/backupplanwidget.cpp:530 #, kde-kuit-format msgctxt "@option:radio" msgid "Versioned Backup (recommended)" msgstr "版本控制備份(建議)" #: kcm/backupplanwidget.cpp:535 #, kde-kuit-format msgctxt "@info" msgid "" "This type of backup is a folder which is synchronized with your selected " "source folders. Taking a backup simply means making the backup destination " "contain an exact copy of your source folders as they are now and nothing " "else. If a file has been deleted in a source folder it will get deleted from " "the backup folder.This type of backup can protect you against data loss " "due to a broken hard drive but it does not help you to recover from your own " "mistakes." msgstr "" "這個類型的備份是一個與您選定的來源資料夾同步的資料夾。在這裡的備份就只是將備" "份目標完整的複製到目的地。如果檔案被從來源資料夾刪除,它也會從備份資料夾中刪" "除。這種類型的備份可以防止因為壞掉的硬碟而損失資料,但對您復原自己造成的" "錯誤並沒有幫助。" #: kcm/backupplanwidget.cpp:548 #, kde-kuit-format msgctxt "@option:radio" msgid "" "Synchronized Backup (not available because rsync " "is not installed)" msgstr "同步備份(因為 rsync 未安裝,故不可用)" #: kcm/backupplanwidget.cpp:553 #, kde-kuit-format msgctxt "@option:radio" msgid "Synchronized Backup" msgstr "同步備份" #: kcm/backupplanwidget.cpp:581 #, kde-kuit-format msgctxt "@title" msgid "Backup Type" msgstr "備份類型" #: kcm/backupplanwidget.cpp:582 #, kde-kuit-format msgctxt "@label" msgid "Select what type of backup you want" msgstr "選擇您想要備份的類型" #: kcm/backupplanwidget.cpp:590 #, kde-kuit-format msgctxt "@title" msgid "Sources" msgstr "來源" #: kcm/backupplanwidget.cpp:591 #, kde-kuit-format msgctxt "@label" msgid "Select which folders to include in backup" msgstr "選擇您想要備份的資料夾" #: kcm/backupplanwidget.cpp:605 #, kde-kuit-format msgctxt "@option:radio" msgid "Filesystem Path" msgstr "檔案系統路徑" #: kcm/backupplanwidget.cpp:606 #, kde-kuit-format msgctxt "@option:radio" msgid "External Storage" msgstr "外部儲存空間" #: kcm/backupplanwidget.cpp:612 #, kde-kuit-format msgctxt "@info" msgid "" "You can use this option for backing up to a secondary internal harddrive, an " "external eSATA drive or networked storage. The requirement is just that you " "always mount it at the same path in the filesystem. The path specified here " "does not need to exist at all times, its existance will be monitored." msgstr "" "您可以使用此選項來使用第二個外部硬碟、外部 eSATA 磁碟或是網路儲存空間進行備" "份。這需要您將它一直都掛載在檔案系統中的同一個路徑。指定的路徑並不需要隨時存" "在,它將會被監控是否存在。" #: kcm/backupplanwidget.cpp:619 #, kde-kuit-format msgctxt "@label:textbox" msgid "Destination Path for Backup:" msgstr "備份的目的地:" #: kcm/backupplanwidget.cpp:638 #, kde-kuit-format msgctxt "@info" msgid "" "Use this option if you want to backup your files on an external storage that " "can be plugged in to this computer, such as a USB hard drive or memory stick." msgstr "" "如果您想要將您的檔案備份到插入到這臺電腦上的外部儲存裝置,像是 USB 硬碟或是隨" "身碟的話,使用這個選項。" #: kcm/backupplanwidget.cpp:648 kcm/backupplanwidget.cpp:652 #, kde-kuit-format msgctxt "@info:tooltip" msgid "The specified folder will be created if it does not exist." msgstr "指定的資料夾將會被新增,如果它不存在的話。" #: kcm/backupplanwidget.cpp:650 #, kde-kuit-format msgctxt "@label:textbox" msgid "Folder on Destination Drive:" msgstr "目的地硬碟上的資料夾:" #: kcm/backupplanwidget.cpp:658 #, kde-kuit-format msgctxt "@info:tooltip" msgid "Open dialog to select a folder" msgstr "開啟對話框以選擇資料夾" #: kcm/backupplanwidget.cpp:688 #, kde-kuit-format msgctxt "@title" msgid "Destination" msgstr "目的地" #: kcm/backupplanwidget.cpp:689 #, kde-kuit-format msgctxt "@label" msgid "Select the backup destination" msgstr "選擇備份目的地" #: kcm/backupplanwidget.cpp:706 #, kde-kuit-format msgctxt "@option:radio" msgid "Manual Activation" msgstr "手動啟動" #: kcm/backupplanwidget.cpp:707 #, kde-kuit-format msgctxt "@option:radio" msgid "Interval" msgstr "間隔" #: kcm/backupplanwidget.cpp:708 #, kde-kuit-format msgctxt "@option:radio" msgid "Active Usage Time" msgstr "活躍使用時間" #: kcm/backupplanwidget.cpp:710 #, kde-kuit-format msgctxt "@info" msgid "" "Backups are only taken when manually requested. This can be done by using " "the popup menu from the backup system tray icon." msgstr "備份將只會在您手動要求時進行。這可以使用備份系統匣圖示的彈出選單完成。" #: kcm/backupplanwidget.cpp:724 #, kde-kuit-format msgctxt "@info" msgid "" "New backup will be triggered when backup destination becomes available and " "more than the configured interval has passed since the last backup was taken." msgstr "" "現在備份將會在自最後一次備份後超過設定間隔,且備份目的地可用時自動啟動。" #: kcm/backupplanwidget.cpp:741 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Minutes" msgstr "分鐘" #: kcm/backupplanwidget.cpp:742 kcm/backupplanwidget.cpp:769 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Hours" msgstr "小時" #: kcm/backupplanwidget.cpp:743 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Days" msgstr "天" #: kcm/backupplanwidget.cpp:744 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "Weeks" msgstr "星期" #: kcm/backupplanwidget.cpp:754 #, kde-kuit-format msgctxt "@info" msgid "" "New backup will be triggered when backup destination becomes available and " "you have been using your computer actively for more than the configured time " "limit since the last backup was taken." msgstr "" "現在備份將會在您使用您的電腦超過自最後一次備份算起設定的時間限制,且備份目的" "地可用時自動啟動。" #: kcm/backupplanwidget.cpp:775 #, kde-kuit-format msgctxt "@option:check" msgid "Ask for confirmation before taking backup" msgstr "在進行備份前再一次確認" #: kcm/backupplanwidget.cpp:794 #, kde-kuit-format msgctxt "@title" msgid "Schedule" msgstr "排程" #: kcm/backupplanwidget.cpp:795 #, kde-kuit-format msgctxt "@label" msgid "Specify the backup schedule" msgstr "指定備份排程" #: kcm/backupplanwidget.cpp:808 #, kde-kuit-format msgctxt "@option:check" msgid "Show hidden folders in source selection" msgstr "在選擇的來源中顯示隱藏的資料夾" #: kcm/backupplanwidget.cpp:814 #, kde-kuit-format msgctxt "@info" msgid "" "This makes it possible to explicitly include or exclude hidden folders in " "the backup source selection. Hidden folders have a name that starts with a " "dot. They are typically located in your home folder and are used to store " "settings and temporary files for your applications." msgstr "" "這樣就可以明確的包含或排除在選擇的備份來源中的隱藏資料夾。隱藏資料夾的名稱會" "以一個點作為開頭。它們通常位於您的家目錄,且通常用於儲存您應用程式的設定及暫" "存檔案。" #: kcm/backupplanwidget.cpp:832 #, kde-kuit-format msgctxt "@info" msgid "" "This will make your backups use around 10% more storage space and saving " "backups will take slightly longer time. In return it will be possible to " "recover from a partially corrupted backup." msgstr "" "這會讓您的備份使用大約10%的額外儲存空間,且儲存備份的時候會需要稍微長一點的時" "間。作為回報,這樣將有可能可以從部份損毀的備份中恢復。" #: kcm/backupplanwidget.cpp:838 #, kde-kuit-format msgctxt "@option:check" msgid "Generate recovery information" msgstr "產生復原資訊" #: kcm/backupplanwidget.cpp:840 #, kde-kuit-format msgctxt "@option:check" msgid "" "Generate recovery information (not available because par2 is not installed)" msgstr "產生復原資訊(因為par2未安裝,故不可用)" #: kcm/backupplanwidget.cpp:856 #, kde-kuit-format msgctxt "@option:check" msgid "Verify integrity of backups" msgstr "驗證備份完整性" #: kcm/backupplanwidget.cpp:860 #, kde-kuit-format msgctxt "@info" msgid "" "Checks the whole backup archive for corruption every time you save new data. " "Saving backups will take a little bit longer time but it allows you to catch " "corruption problems sooner than at the time you need to use a backup, at " "that time it could be too late." msgstr "" "在您每次儲存新的資料時校驗整個備份壓縮檔是否損毀。儲存備份將會稍微花長一點的" "時間,但可以讓您很快找到損毀的問題,總比在您需要使用備份時,才發現一切都太遲" "了來的好。" #: kcm/backupplanwidget.cpp:882 #, kde-kuit-format msgctxt "@title" msgid "Advanced" msgstr "進階" #: kcm/backupplanwidget.cpp:883 #, kde-kuit-format msgctxt "@label" msgid "Extra options for advanced users" msgstr "進階使用者的額外選項" #: kcm/driveselection.cpp:275 #, kde-kuit-format msgctxt "@label Only shown if no drives are detected" msgid "" "Plug in the external storage you wish to use, then select it in this list." msgstr "插入您想要使用的外部儲存空間,然後在這個列表中選取它。" #: kcm/driveselectiondelegate.cpp:75 #, kde-kuit-format msgctxt "@item:inlistbox this text is added if selected drive is disconnected" msgid " (disconnected)" msgstr " (未連線)" #: kcm/driveselectiondelegate.cpp:78 #, kde-kuit-format msgctxt "@label %1 is amount of free storage space of hard drive" msgid "%1 free" msgstr "%1 可用" #: kcm/driveselectiondelegate.cpp:92 #, kde-kuit-format msgctxt "" "@item:inlistbox used for unnamed filesystems, more than one filesystem on " "device. %1 is partition number, %2 is device description, %3 is either empty " "or the \" (disconnected)\" text" msgid "Partition %1 on %2%3" msgstr "分割區 %1 在 %2%3 上" #: kcm/driveselectiondelegate.cpp:95 #, kde-kuit-format msgctxt "" "@item:inlistbox used when there is only one unnamed filesystem on device. %1 " "is device description, %2 is either empty or the \" (disconnected)\" text" msgid "%1%2" msgstr "%1%2" #: kcm/driveselectiondelegate.cpp:99 #, kde-kuit-format msgctxt "" "@item:inlistbox %1 is filesystem label, %2 is the device description, %3 is " "either empty or the \" (disconnected)\" text" msgid "%1 on %2%3" msgstr "%1 在 %2%3 上" #: kcm/driveselectiondelegate.cpp:106 #, kde-kuit-format msgctxt "@item:inlistbox %1 is drive(partition) label, %2 is storage capacity" msgid "%1: %2 total capacity" msgstr "%1: %2 總容量" #: kcm/driveselectiondelegate.cpp:153 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "" "Warning: Symbolic links and file permissions can not be saved to this file " "system. File permissions only matters if there is more than one user of this " "computer or if you are backing up executable program files." msgstr "" "警告:符號連結及檔案權限不會儲存到檔案系統中。檔案權限只在這臺電腦上有多於一" "個的使用者時需要煩惱,或是如果您備份的是可執行的程式檔。" #: kcm/driveselectiondelegate.cpp:157 #, kde-kuit-format msgctxt "@item:inlistbox" msgid "" "Warning: File permissions can not be saved to this file system. File " "permissions only matters if there is more than one user of this computer or " "if you are backing up executable program files." msgstr "" "警告:檔案權限不會儲存到檔案系統中。檔案權限只在這臺電腦上有多於一個的使用者" "時需要煩惱,或是如果您備份的是可執行的程式檔。" #: kcm/folderselectionmodel.cpp:107 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "" "%1will be included in the backup, except for " "unchecked subfolders" msgstr "%1將會被包括在備份中,除了未勾選的子資料夾" #: kcm/folderselectionmodel.cpp:111 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "%1will be included in the backup" msgstr "%1將會被包括在備份中" #: kcm/folderselectionmodel.cpp:115 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "" "%1 will not be included in " "the backup but contains folders that will" msgstr "" "%1不會 被包括在備份中,但包" "含它的資料夾會" #: kcm/folderselectionmodel.cpp:119 #, kde-kuit-format msgctxt "@info:tooltip %1 is the path of the folder in a listview" msgid "" "%1 will not be included in " "the backup" msgstr "" "%1不會 被包括在備份中" #: kcm/kupkcm.cpp:49 #, kde-format msgid "Kup Configuration Module" msgstr "Kup 設定模組" #: kcm/kupkcm.cpp:51 #, kde-format msgid "Configuration of backup plans for the Kup backup system" msgstr "Kup 備份系統的備份計畫設定" #: kcm/kupkcm.cpp:54 #, kde-format msgid "Maintainer" msgstr "維護者" #: kcm/kupkcm.cpp:87 #, kde-format msgid "" "

Backup programs are missing

Before you can activate any backup " "plan you need to install either of

  • bup, for versioned backups
  • rsync, for synchronized backups
" msgstr "" "

備份程式遺失

在您啟動任何備份計畫之前,您需要先安裝

  • bup,給版本備份使用
  • rsync,給同步備份使用
" #: kcm/kupkcm.cpp:168 #, kde-kuit-format msgctxt "@title:window" msgid "Warning" msgstr "警告" #: kcm/kupkcm.cpp:170 #, kde-kuit-format msgctxt "@info %1 is the name of the backup plan" msgid "" "%1 does not have a destination!No backups will be saved by this plan." msgstr "%1 沒有目的地!這個計畫中將不會有備份被儲存。" #: kcm/kupkcm.cpp:227 #, kde-kuit-format msgctxt "@action:button" msgid "Add New Plan" msgstr "加入新的計畫" #: kcm/kupkcm.cpp:238 #, kde-kuit-format msgctxt "@option:check" msgid "Backups Enabled" msgstr "備份已啟用" #: kcm/planstatuswidget.cpp:48 #, kde-kuit-format msgctxt "@action:button" msgid "Configure" msgstr "設定" #: kcm/planstatuswidget.cpp:51 #, kde-kuit-format msgctxt "@action:button" msgid "Remove" msgstr "移除" #: kcm/planstatuswidget.cpp:54 #, kde-kuit-format msgctxt "@action:button" msgid "Duplicate" msgstr "重製" #: kioslave/bupslave.cpp:92 kioslave/bupslave.cpp:149 kioslave/bupslave.cpp:186 #: kioslave/bupslave.cpp:249 kioslave/bupslave.cpp:271 #, kde-format msgid "" "No bup repository found.\n" "%1" msgstr "" "找不到 bup 的儲存庫。\n" "%1" #: plasmoid/contents/ui/FullRepresentation.qml:88 #, kde-format msgid "Save new backup" msgstr "儲存新備份" #: plasmoid/contents/ui/FullRepresentation.qml:94 #, kde-format msgid "Show files" msgstr "顯示檔案" #: plasmoid/contents/ui/FullRepresentation.qml:99 #, kde-format msgid "Show log file" msgstr "顯示紀錄檔" #. i18n: file: filedigger/restoredialog.ui:14 #. i18n: ectx: property (windowTitle), widget (QDialog, RestoreDialog) #: po/rc.cpp:3 rc.cpp:3 #, kde-format msgctxt "@title:window" msgid "Restore Guide" msgstr "還原指南" #. i18n: file: filedigger/restoredialog.ui:55 #. i18n: ectx: property (text), widget (QPushButton, mRestoreOriginalButton) #: po/rc.cpp:6 rc.cpp:6 #, kde-format msgctxt "@action:button" msgid "Restore to original location" msgstr "還原到原始位置" #. i18n: file: filedigger/restoredialog.ui:78 #. i18n: ectx: property (text), widget (QPushButton, mRestoreCustomButton) #: po/rc.cpp:9 rc.cpp:9 #, kde-format msgctxt "@action:button" msgid "Choose where to restore" msgstr "選擇您要還原的地方" #. i18n: file: filedigger/restoredialog.ui:132 #. i18n: ectx: property (text), widget (QPushButton, mDestBackButton) #: po/rc.cpp:12 rc.cpp:12 #, kde-format msgctxt "@action:button" msgid "Back" msgstr "上一步" #. i18n: file: filedigger/restoredialog.ui:144 #. i18n: ectx: property (text), widget (QPushButton, mDestNextButton) #: po/rc.cpp:15 rc.cpp:15 #, kde-format msgctxt "@action:button" msgid "Next" msgstr "下一步" #. i18n: file: filedigger/restoredialog.ui:175 #. i18n: ectx: property (text), widget (QRadioButton, mNewNameRadioButton) #: po/rc.cpp:18 rc.cpp:18 #, kde-format msgctxt "@option:radio " msgid "Restore the folder under a new name" msgstr "以新名稱還原資料夾" #. i18n: file: filedigger/restoredialog.ui:208 #. i18n: ectx: property (text), widget (QRadioButton, mOverwriteRadioButton) #: po/rc.cpp:21 rc.cpp:21 #, kde-format msgctxt "@option:radio" msgid "Merge folders" msgstr "合併資料夾" #. i18n: file: filedigger/restoredialog.ui:238 #. i18n: ectx: property (text), widget (QLabel, mConfirmOverwriteLabel) #: po/rc.cpp:24 rc.cpp:24 #, kde-format msgctxt "@info Question to user, in dialog" msgid "" "The following files would be overwritten, please confirm that you wish to " "continue." msgstr "下列檔案將會被覆寫,請確認您想要繼續。" #. i18n: file: filedigger/restoredialog.ui:274 #. i18n: ectx: property (text), widget (QPushButton, mOverwriteBackButton) #: po/rc.cpp:27 rc.cpp:27 #, kde-format msgctxt "@action:button go to previous page in dialog" msgid "Back" msgstr "上一步" #. i18n: file: filedigger/restoredialog.ui:286 #. i18n: ectx: property (text), widget (QPushButton, mConfirmButton) #: po/rc.cpp:30 rc.cpp:30 #, kde-format msgctxt "@action:button User answers \"yes I confirm: overwrite files\"" msgid "Confirm" msgstr "確認" #. i18n: file: filedigger/restoredialog.ui:341 #. i18n: ectx: property (text), widget (QLabel, mErrorLabel) #: po/rc.cpp:33 rc.cpp:33 #, fuzzy, kde-format msgctxt "@label above the detailed error message" msgid "An error occured while restoring:" msgstr "還原時遇到錯誤:" #. i18n: file: filedigger/restoredialog.ui:372 #. i18n: ectx: property (text), widget (QLabel, label) #: po/rc.cpp:36 rc.cpp:36 #, fuzzy, kde-format msgctxt "@label" msgid "Restoration completed successfully!" msgstr "還原成功地完成!" #. i18n: file: filedigger/restoredialog.ui:413 #. i18n: ectx: property (text), widget (QPushButton, mOpenDestinationButton) #: po/rc.cpp:39 rc.cpp:39 #, kde-format msgid "Open Destination" msgstr "開啟目的地" #. i18n: file: filedigger/restoredialog.ui:472 #. i18n: ectx: property (text), widget (QPushButton, mCloseButton) #: po/rc.cpp:42 rc.cpp:42 #, kde-format msgctxt "@action:button" msgid "Close" msgstr "關閉" #: po/rc.cpp:43 po/rc.cpp:58 settings/backupplan.cpp:69 rc.cpp:43 rc.cpp:58 #, kde-format msgid "Backups" msgstr "備份" #: po/rc.cpp:44 rc.cpp:44 msgid "Configure backup plans" msgstr "設定備份計畫" #: po/rc.cpp:45 rc.cpp:45 msgid "backup,recovery,safety" msgstr "備份、還原、安全" #: po/rc.cpp:46 rc.cpp:46 msgid "Kup" msgstr "Kup" #: po/rc.cpp:48 rc.cpp:48 msgid "Start taking backup" msgstr "開始進行備份" #: po/rc.cpp:49 rc.cpp:49 msgid "A question if user wants to start taking a backup" msgstr "如果使用者想要開始進行備份的話會被詢問一個問題" #: po/rc.cpp:50 rc.cpp:50 msgid "Backup succeeded" msgstr "備份成功" #: po/rc.cpp:51 rc.cpp:51 msgid "Saving of backup successfully completed" msgstr "儲存備份成功完成" #: po/rc.cpp:52 rc.cpp:52 msgid "Backup failed" msgstr "備份失敗" #: po/rc.cpp:53 rc.cpp:53 msgid "Saving of backup failed, offer user to see log file" msgstr "備份儲存失敗,建議使用者查看記錄檔。" #: po/rc.cpp:54 rc.cpp:54 msgid "Integrity check completed" msgstr "完整性校驗成功" #: po/rc.cpp:55 rc.cpp:55 msgid "Finished checking integrity of backup archive" msgstr "備份壓縮檔的完整性校驗完成" #: po/rc.cpp:56 rc.cpp:56 msgid "Repair completed" msgstr "修復完成" #: po/rc.cpp:57 rc.cpp:57 msgid "Finished repairing backup archive" msgstr "修復備份壓縮檔完成" #: po/rc.cpp:59 rc.cpp:59 msgid "Status of backup plans" msgstr "備份計畫的狀態" #: po/rc.cpp:60 rc.cpp:60 msgid "Backup Status" msgstr "備份狀態" #: po/rc.cpp:61 rc.cpp:61 msgid "Displays status of backup plans" msgstr "顯示備份計畫的狀態" #: settings/backupplan.cpp:38 #, kde-kuit-format msgctxt "" "@label Default name for a new backup plan, %1 is the number of the plan in " "order" msgid "Backup plan %1" msgstr "備份計畫 %1" #: settings/backupplan.cpp:101 #, kde-format msgctxt "default description of newly duplicated backup plan" msgid "%1 (copy)" msgstr "%1 (副本)" #: settings/backupplan.cpp:213 #, kde-format msgctxt "%1 is fancy formatted date" msgid "Last saved: %1" msgstr "最後儲存:%1" #: settings/backupplan.cpp:218 #, kde-format msgctxt "%1 is storage size of archive" msgid "Size: %1" msgstr "大小:%1" #: settings/backupplan.cpp:223 #, kde-format msgctxt "%1 is free storage space" msgid "Free space: %1" msgstr "剩餘空間:%1" #: settings/backupplan.cpp:227 #, kde-kuit-format msgctxt "@label" msgid "This backup plan has never been run." msgstr "這個備份計畫尚未執行過。" kup-backup-0.7.1+dfsg/settings/000077500000000000000000000000001322613417100163405ustar00rootroot00000000000000kup-backup-0.7.1+dfsg/settings/backupplan.cpp000066400000000000000000000217031322613417100211670ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include "backupplan.h" #include "kuputils.h" #include #include #include #include #include BackupPlan::BackupPlan(int pPlanNumber, KSharedConfigPtr pConfig, QObject *pParent) :KCoreConfigSkeleton(pConfig, pParent), mPlanNumber(pPlanNumber) { setCurrentGroup(QString(QStringLiteral("Plan/%1")).arg(mPlanNumber)); addItemString(QStringLiteral("Description"), mDescription, xi18nc("@label Default name for a new backup plan, %1 is the number of the plan in order", "Backup plan %1", pPlanNumber)); QStringList lDefaultIncludeList; lDefaultIncludeList << QDir::homePath(); addItemStringList(QStringLiteral("Paths included"), mPathsIncluded, lDefaultIncludeList); QStringList lDefaultExcludeList; lDefaultExcludeList << QStandardPaths::standardLocations(QStandardPaths::MusicLocation); lDefaultExcludeList << QStandardPaths::standardLocations(QStandardPaths::MoviesLocation); lDefaultExcludeList << QDir::homePath() + QStringLiteral("/.cache"); lDefaultExcludeList << QDir::homePath() + QStringLiteral("/.bup"); lDefaultExcludeList << QDir::homePath() + QStringLiteral("/.thumbnails"); lDefaultExcludeList << QDir::homePath() + QStringLiteral("/.local/share/Trash"); QMutableStringListIterator i(lDefaultExcludeList); while(i.hasNext()) { ensureNoTrailingSlash(i.next()); } addItemStringList(QStringLiteral("Paths excluded"), mPathsExcluded, lDefaultExcludeList); addItemInt(QStringLiteral("Backup type"), mBackupType); addItemInt(QStringLiteral("Schedule type"), mScheduleType, 2); addItemInt(QStringLiteral("Schedule interval"), mScheduleInterval, 1); addItemInt(QStringLiteral("Schedule interval unit"), mScheduleIntervalUnit, 3); addItemInt(QStringLiteral("Usage limit"), mUsageLimit, 25); addItemBool(QStringLiteral("Ask first"), mAskBeforeTakingBackup, true); addItemInt(QStringLiteral("Destination type"), mDestinationType, 1); addItem(new KCoreConfigSkeleton::ItemUrl(currentGroup(), QStringLiteral("Filesystem destination path"), mFilesystemDestinationPath, QUrl::fromLocalFile(QDir::homePath() + QStringLiteral("/.bup")))); addItemString(QStringLiteral("External drive UUID"), mExternalUUID); addItemPath(QStringLiteral("External drive destination path"), mExternalDestinationPath, i18n("Backups")); addItemString(QStringLiteral("External volume label"), mExternalVolumeLabel); addItemULongLong(QStringLiteral("External volume capacity"), mExternalVolumeCapacity); addItemString(QStringLiteral("External device description"), mExternalDeviceDescription); addItemInt(QStringLiteral("External partition number"), mExternalPartitionNumber); addItemInt(QStringLiteral("External partitions count"), mExternalPartitionsOnDrive); addItemBool(QStringLiteral("Show hidden folders"), mShowHiddenFolders); addItemBool(QStringLiteral("Generate recovery info"), mGenerateRecoveryInfo); addItemBool(QStringLiteral("Check backups"), mCheckBackups); addItemDateTime(QStringLiteral("Last complete backup"), mLastCompleteBackup); addItemDouble(QStringLiteral("Last backup size"), mLastBackupSize); addItemDouble(QStringLiteral("Last available space"), mLastAvailableSpace); addItemUInt(QStringLiteral("Accumulated usage time"), mAccumulatedUsageTime); load(); } void BackupPlan::setPlanNumber(int pPlanNumber) { mPlanNumber = pPlanNumber; QString lGroupName = QString(QStringLiteral("Plan/%1")).arg(mPlanNumber); foreach(KConfigSkeletonItem *lItem, items()) { lItem->setGroup(lGroupName); } } void BackupPlan::removePlanFromConfig() { config()->deleteGroup(QString(QStringLiteral("Plan/%1")).arg(mPlanNumber)); } void BackupPlan::copyFrom(const BackupPlan &pPlan) { mDescription = i18nc("default description of newly duplicated backup plan", "%1 (copy)", pPlan.mDescription); mPathsIncluded = pPlan.mPathsIncluded; mPathsExcluded = pPlan.mPathsExcluded; mBackupType = pPlan.mBackupType; mScheduleType = pPlan.mScheduleType; mScheduleInterval = pPlan.mScheduleInterval; mScheduleIntervalUnit = pPlan.mScheduleIntervalUnit; mUsageLimit = pPlan.mUsageLimit; mAskBeforeTakingBackup = pPlan.mAskBeforeTakingBackup; mDestinationType = pPlan.mDestinationType; mFilesystemDestinationPath = pPlan.mFilesystemDestinationPath; mExternalUUID = pPlan.mExternalUUID; mExternalDestinationPath = pPlan.mExternalDestinationPath; mExternalVolumeLabel = pPlan.mExternalVolumeLabel; mExternalDeviceDescription = pPlan.mExternalDeviceDescription; mExternalPartitionNumber = pPlan.mExternalPartitionNumber; mExternalPartitionsOnDrive = pPlan.mExternalPartitionsOnDrive; mExternalVolumeCapacity = pPlan.mExternalVolumeCapacity; mShowHiddenFolders = pPlan.mShowHiddenFolders; mGenerateRecoveryInfo = pPlan.mGenerateRecoveryInfo; mCheckBackups = pPlan.mCheckBackups; } QDateTime BackupPlan::nextScheduledTime() { Q_ASSERT(mScheduleType == 1); if(!mLastCompleteBackup.isValid()) return QDateTime(); //plan has never been run return mLastCompleteBackup.addSecs(scheduleIntervalInSeconds()); } int BackupPlan::scheduleIntervalInSeconds() { Q_ASSERT(mScheduleType == 1); switch(mScheduleIntervalUnit) { case 0: return mScheduleInterval * 60; case 1: return mScheduleInterval * 60 * 60; case 2: return mScheduleInterval * 60 * 60 * 24; case 3: return mScheduleInterval * 60 * 60 * 24 * 7; default: return 0; } } BackupPlan::Status BackupPlan::backupStatus() { if(!mLastCompleteBackup.isValid()) { return BAD; } if(mScheduleType == MANUAL) { return NO_STATUS; } int lStatus = 5; //trigger BAD status if schedule type is something strange int lInterval = 1; switch(mScheduleType) { case INTERVAL: lStatus = mLastCompleteBackup.secsTo(QDateTime::currentDateTime().toUTC()); lInterval = scheduleIntervalInSeconds(); break; case USAGE: lStatus = mAccumulatedUsageTime; lInterval = mUsageLimit * 3600; break; } if(lStatus < lInterval) return GOOD; else if(lStatus < lInterval * 3) return MEDIUM; else return BAD; } QString BackupPlan::iconName(Status pStatus) { switch(pStatus) { case GOOD: return QStringLiteral("security-high"); case MEDIUM: return QStringLiteral("security-medium"); case BAD: return QStringLiteral("security-low"); case NO_STATUS: return QStringLiteral(""); } return QStringLiteral(""); } void BackupPlan::usrRead() { //correct the time spec after default read routines. mLastCompleteBackup.setTimeSpec(Qt::UTC); QMutableStringListIterator lExcludes(mPathsExcluded); while(lExcludes.hasNext()) { ensureNoTrailingSlash(lExcludes.next()); } QMutableStringListIterator lIncludes(mPathsIncluded); while(lIncludes.hasNext()) { ensureNoTrailingSlash(lIncludes.next()); } } QString BackupPlan::statusText() { QLocale lLocale; KFormat lFormat(lLocale); QString lStatus; if(mLastCompleteBackup.isValid()) { QDateTime lLocalTime = mLastCompleteBackup.toLocalTime(); lStatus += i18nc("%1 is fancy formatted date", "Last saved: %1", lFormat.formatRelativeDate(lLocalTime.date(), QLocale::LongFormat)); if(mLastBackupSize > 0.0) { lStatus += '\n'; lStatus += i18nc("%1 is storage size of archive", "Size: %1", lFormat.formatByteSize(mLastBackupSize)); } if(mLastAvailableSpace > 0.0) { lStatus += '\n'; lStatus += i18nc("%1 is free storage space", "Free space: %1", lFormat.formatByteSize(mLastAvailableSpace)); } } else { lStatus = xi18nc("@label", "This backup plan has never been run."); } return lStatus; } kup-backup-0.7.1+dfsg/settings/backupplan.h000066400000000000000000000060571322613417100206410ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #ifndef BACKUPPLAN_H #define BACKUPPLAN_H #include class Schedule; class BackupPlan : public KCoreConfigSkeleton { public: BackupPlan(int pPlanNumber, KSharedConfigPtr pConfig, QObject *pParent = 0); int planNumber() const {return mPlanNumber;} virtual void setPlanNumber(int pPlanNumber); QString statusText(); void removePlanFromConfig(); void copyFrom(const BackupPlan &pPlan); QString mDescription; QStringList mPathsIncluded; QStringList mPathsExcluded; enum BackupType {BupType = 0, RsyncType}; qint32 mBackupType; enum ScheduleType {MANUAL=0, INTERVAL, USAGE}; qint32 mScheduleType; qint32 mScheduleInterval; qint32 mScheduleIntervalUnit; qint32 mUsageLimit; // in hours bool mAskBeforeTakingBackup; qint32 mDestinationType; QUrl mFilesystemDestinationPath; QString mExternalUUID; QString mExternalDestinationPath; QString mExternalVolumeLabel; QString mExternalDeviceDescription; int mExternalPartitionNumber; int mExternalPartitionsOnDrive; qulonglong mExternalVolumeCapacity; bool mShowHiddenFolders; bool mGenerateRecoveryInfo; bool mCheckBackups; QDateTime mLastCompleteBackup; // Size of the last backup in bytes. double mLastBackupSize; // Last known available space on destination double mLastAvailableSpace; // How long has Kup been running since last backup (s) quint32 mAccumulatedUsageTime; virtual QDateTime nextScheduledTime(); virtual int scheduleIntervalInSeconds(); enum Status {GOOD, MEDIUM, BAD, NO_STATUS}; Status backupStatus(); static QString iconName(Status pStatus); protected: virtual void usrRead(); int mPlanNumber; }; #endif // BACKUPPLAN_H kup-backup-0.7.1+dfsg/settings/kupsettings.cpp000066400000000000000000000034321322613417100214260ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include "kupsettings.h" #include "backupplan.h" KupSettings::KupSettings(KSharedConfigPtr pConfig, QObject *pParent) : KCoreConfigSkeleton(pConfig, pParent) { setCurrentGroup(QStringLiteral("Kup settings")); addItemBool(QStringLiteral("Backups enabled"), mBackupsEnabled); addItemInt(QStringLiteral("Number of backups"), mNumberOfPlans, 0); } kup-backup-0.7.1+dfsg/settings/kupsettings.h000066400000000000000000000034731322613417100211000ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #ifndef KUPSETTINGS_H #define KUPSETTINGS_H #include #include class KupSettings : public KCoreConfigSkeleton { Q_OBJECT public: explicit KupSettings(KSharedConfigPtr pConfig, QObject *pParent = 0); // Common enable of backup plans bool mBackupsEnabled; // Number of backup plans configured int mNumberOfPlans; }; #endif // KUPSETTINGS_H kup-backup-0.7.1+dfsg/settings/kuputils.cpp000066400000000000000000000035141322613417100207270ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include "kuputils.h" #include void ensureTrailingSlash(QString &pPath) { if(!pPath.endsWith(QDir::separator())) { pPath.append(QDir::separator()); } } void ensureNoTrailingSlash(QString &pPath) { while(pPath.endsWith(QDir::separator())) { pPath.chop(1); } } QString lastPartOfPath(const QString &pPath) { return pPath.section(QDir::separator(), -1, -1, QString::SectionSkipEmpty); } kup-backup-0.7.1+dfsg/settings/kuputils.h000066400000000000000000000032131322613417100203700ustar00rootroot00000000000000/*************************************************************************** * Copyright Simon Persson * * simonpersson1@gmail.com * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #ifndef KUPUTILS_H #define KUPUTILS_H class QString; void ensureTrailingSlash(QString &pPath); void ensureNoTrailingSlash(QString &pPath); QString lastPartOfPath(const QString &pPath); #endif // KUPUTILS_H