diff options
author | Daniel Wilhelm <daniel@wili.li> | 2014-04-18 17:24:09 +0200 |
---|---|---|
committer | Daniel Wilhelm <daniel@wili.li> | 2014-04-18 17:24:09 +0200 |
commit | 110fc5dee14fc7988f631a158e50d283446aba7a (patch) | |
tree | 7c19dfd3bdb8c4636409ec80a38c70499ac006db | |
parent | 5.14 (diff) | |
download | FreeFileSync-110fc5dee14fc7988f631a158e50d283446aba7a.tar.gz FreeFileSync-110fc5dee14fc7988f631a158e50d283446aba7a.tar.bz2 FreeFileSync-110fc5dee14fc7988f631a158e50d283446aba7a.zip |
5.15
124 files changed, 5658 insertions, 5595 deletions
diff --git a/Application.cpp b/Application.cpp index 336ad3f1..0ae5e9f1 100644 --- a/Application.cpp +++ b/Application.cpp @@ -6,7 +6,7 @@ #include "application.h" #include <memory> -#include "ui/main_dlg.h" +#include <zen/file_handling.h> #include <wx/msgdlg.h> #include <wx/tooltip.h> //wxWidgets v2.9 #include <wx/log.h> @@ -17,9 +17,9 @@ #include "synchronization.h" #include "ui/batch_status_handler.h" #include "ui/check_version.h" +#include "ui/main_dlg.h" #include "ui/switch_to_gui.h" #include "lib/resources.h" -#include "lib/lock_holder.h" #include "lib/process_xml.h" #include "lib/error_log.h" @@ -58,13 +58,13 @@ void crtInvalidParameterHandler(const wchar_t* expression, const wchar_t* functi #endif -std::vector<wxString> getCommandlineArgs(const wxApp& app) +std::vector<Zstring> getCommandlineArgs(const wxApp& app) { - std::vector<wxString> args; + std::vector<Zstring> args; #ifdef FFS_WIN //we do the job ourselves! both wxWidgets and ::CommandLineToArgvW() parse "C:\" "D:\" as single line C:\" D:\" //-> "solution": we just don't support protected quotation mark! - std::wstring cmdLine = ::GetCommandLine(); //only way to get a unicode commandline + Zstring cmdLine = ::GetCommandLine(); //only way to get a unicode commandline while (endsWith(cmdLine, L' ')) //may end with space cmdLine.resize(cmdLine.size() - 1); @@ -74,7 +74,7 @@ std::vector<wxString> getCommandlineArgs(const wxApp& app) { if (iterStart != cmdLine.end()) { - args.push_back(std::wstring(iterStart, it)); + args.push_back(Zstring(iterStart, it)); iterStart = cmdLine.end(); //expect consecutive blanks! } } @@ -92,21 +92,21 @@ std::vector<wxString> getCommandlineArgs(const wxApp& app) } } if (iterStart != cmdLine.end()) - args.push_back(std::wstring(iterStart, cmdLine.end())); + args.push_back(Zstring(iterStart, cmdLine.end())); if (!args.empty()) args.erase(args.begin()); //remove first argument which is exe path by convention: http://blogs.msdn.com/b/oldnewthing/archive/2006/05/15/597984.aspx std::for_each(args.begin(), args.end(), - [](wxString& str) + [](Zstring& str) { if (str.size() >= 2 && startsWith(str, L'\"') && endsWith(str, L'\"')) - str = wxString(str.c_str() + 1, str.size() - 2); + str = Zstring(str.c_str() + 1, str.size() - 2); }); #else for (int i = 1; i < app.argc; ++i) //wxWidgets screws up once again making "argv implicitly convertible to a wxChar**" in 2.9.3, - args.push_back(app.argv[i]); //so we are forced to use this pitiful excuse for a range construction!! + args.push_back(toZ(wxString(app.argv[i]))); //so we are forced to use this pitiful excuse for a range construction!! #endif return args; } @@ -165,7 +165,7 @@ void Application::onEnterEventLoop(wxEvent& event) Disconnect(EVENT_ENTER_EVENT_LOOP, wxEventHandler(Application::onEnterEventLoop), nullptr, this); //determine FFS mode of operation - std::vector<wxString> commandArgs = getCommandlineArgs(*this); + std::vector<Zstring> commandArgs = getCommandlineArgs(*this); launch(commandArgs); } @@ -257,11 +257,11 @@ void Application::onQueryEndSession(wxEvent& event) void runGuiMode(const xmlAccess::XmlGuiConfig& guiCfg); -void runGuiMode(const std::vector<wxString>& cfgFileName); +void runGuiMode(const std::vector<Zstring>& cfgFileName); void runBatchMode(const Zstring& filename, FfsReturnCode& returnCode); -void Application::launch(const std::vector<wxString>& commandArgs) +void Application::launch(const std::vector<Zstring>& commandArgs) { //wxWidgets app exit handling is weird... we want the app to exit only if the logical main window is closed wxTheApp->SetExitOnFrameDelete(false); //avoid popup-windows from becoming temporary top windows leading to program exit after closure @@ -279,7 +279,7 @@ void Application::launch(const std::vector<wxString>& commandArgs) runGuiMode(commandArgs); else { - const bool gotDirNames = std::any_of(commandArgs.begin(), commandArgs.end(), [](const wxString& dirname) { return dirExists(toZ(dirname)); }); + const bool gotDirNames = std::any_of(commandArgs.begin(), commandArgs.end(), [](const Zstring& dirname) { return dirExists(dirname); }); if (gotDirNames) //mode 1: create temp configuration based on directory names passed { XmlGuiConfig guiCfg; @@ -299,27 +299,27 @@ void Application::launch(const std::vector<wxString>& commandArgs) } if (index % 2 == 0) - fp->leftDirectory = toZ(*it); + fp->leftDirectory = *it; else - fp->rightDirectory = toZ(*it); + fp->rightDirectory = *it; } runGuiMode(guiCfg); } else //mode 2: try to set config/batch-filename set by %1 parameter { - std::vector<wxString> argsTmp = commandArgs; + std::vector<Zstring> argsTmp = commandArgs; for (auto it = argsTmp.begin(); it != argsTmp.end(); ++it) { - const Zstring& filename = toZ(*it); + const Zstring& filename = *it; if (!fileExists(filename)) //...be a little tolerant { if (fileExists(filename + Zstr(".ffs_batch"))) - *it += L".ffs_batch"; + *it += Zstr(".ffs_batch"); else if (fileExists(filename + Zstr(".ffs_gui"))) - *it += L".ffs_gui"; + *it += Zstr(".ffs_gui"); else { wxMessageBox(replaceCpy(_("Cannot find file %x."), L"%x", fmtFileName(filename)), _("Error"), wxOK | wxICON_ERROR); @@ -328,11 +328,11 @@ void Application::launch(const std::vector<wxString>& commandArgs) } } - switch (getMergeType(toZ(argsTmp))) //throw () + switch (getMergeType(argsTmp)) //throw () { case MERGE_BATCH: //pure batch config files if (argsTmp.size() == 1) - runBatchMode(utfCvrtTo<Zstring>(argsTmp[0]), returnCode); + runBatchMode(argsTmp[0], returnCode); else runGuiMode(argsTmp); break; @@ -345,13 +345,13 @@ void Application::launch(const std::vector<wxString>& commandArgs) case MERGE_OTHER: //= none or unknown; //argsTmp are not empty and contain at least one non-gui/non-batch config file: find it! std::find_if(argsTmp.begin(), argsTmp.end(), - [](const wxString& filename) -> bool + [](const Zstring& filename) -> bool { - switch (getXmlType(toZ(filename))) //throw() + switch (getXmlType(filename)) //throw() { case XML_TYPE_GLOBAL: case XML_TYPE_OTHER: - wxMessageBox(replaceCpy(_("File %x does not contain a valid configuration."), L"%x", fmtFileName(toZ(filename))), _("Error"), wxOK | wxICON_ERROR); + wxMessageBox(replaceCpy(_("File %x does not contain a valid configuration."), L"%x", fmtFileName(filename)), _("Error"), wxOK | wxICON_ERROR); return true; case XML_TYPE_GUI: @@ -373,7 +373,7 @@ void runGuiMode(const xmlAccess::XmlGuiConfig& guiCfg) } -void runGuiMode(const std::vector<wxString>& cfgFileNames) +void runGuiMode(const std::vector<Zstring>& cfgFileNames) { MainDialog::create(cfgFileNames); } @@ -407,12 +407,13 @@ void runBatchMode(const Zstring& filename, FfsReturnCode& returnCode) XmlGlobalSettings globalCfg; try { - if (fileExists(toZ(getGlobalConfigFile()))) + if (fileExists(getGlobalConfigFile())) readConfig(globalCfg); //throw FfsXmlError //else: globalCfg already has default values } catch (const xmlAccess::FfsXmlError& e) { + assert(false); if (e.getSeverity() != FfsXmlError::WARNING) //ignore parsing errors: should be migration problems only *cross-fingers* return notifyError(e.toString()); //abort sync! } @@ -438,7 +439,7 @@ void runBatchMode(const Zstring& filename, FfsReturnCode& returnCode) const TimeComp timeStamp = localTime(); - const SwitchToGui switchBatchToGui(utfCvrtTo<wxString>(filename), batchCfg, globalCfg); //prepare potential operational switch + const SwitchToGui switchBatchToGui(filename, batchCfg, globalCfg); //prepare potential operational switch //class handling status updates and error messages BatchStatusHandler statusHandler(batchCfg.showProgress, //throw BatchAbortProcess @@ -467,19 +468,7 @@ void runBatchMode(const Zstring& filename, FfsReturnCode& returnCode) } //batch mode: place directory locks on directories during both comparison AND synchronization - - std::unique_ptr<LockHolder> dummy; - if (globalCfg.createLockFile) - { - std::vector<Zstring> dirnames; - std::for_each(cmpConfig.begin(), cmpConfig.end(), - [&](const FolderPairCfg& fpCfg) - { - dirnames.push_back(fpCfg.leftDirectoryFmt); - dirnames.push_back(fpCfg.rightDirectoryFmt); - }); - dummy = make_unique<LockHolder>(dirnames, statusHandler, allowPwPrompt); - } + std::unique_ptr<LockHolder> dirLocks; //COMPARE DIRECTORIES FolderComparison folderCmp; @@ -487,6 +476,8 @@ void runBatchMode(const Zstring& filename, FfsReturnCode& returnCode) globalCfg.optDialogs, allowPwPrompt, globalCfg.runWithBackgroundPriority, + globalCfg.createLockFile, + dirLocks, cmpConfig, folderCmp, statusHandler); diff --git a/Application.h b/Application.h index 1c542903..b75ded34 100644 --- a/Application.h +++ b/Application.h @@ -11,6 +11,7 @@ #include <wx/app.h> //#include "lib/process_xml.h" #include "lib/return_codes.h" +#include <zen/zstring.h> class Application : public wxApp @@ -31,7 +32,7 @@ private: void onEnterEventLoop(wxEvent& event); void onQueryEndSession(wxEvent& event); - void launch(const std::vector<wxString>& commandArgs); + void launch(const std::vector<Zstring>& commandArgs); zen::FfsReturnCode returnCode; }; diff --git a/BUILD/Changelog.txt b/BUILD/Changelog.txt index f6592fbd..b43688af 100644 --- a/BUILD/Changelog.txt +++ b/BUILD/Changelog.txt @@ -1,9 +1,40 @@ --------------- -|FreeFileSync| --------------- +=========== +|Changelog| +=========== + +FreeFileSync 5.15 +----------------- +New menu option to activate/deactivate automatic update checking +Show status message while checking for program updates +Faster startup times through asynchronous config file checking +Automatically migrate configuration files to new format +New context menu options to copy and paste filter settings +Support file and folder names with trailing space or period characters +Do not show superfluous scrollbars for multiple folder pairs +Correctly show long file paths when moving to recycle bin failed (Windows Vista and later) +Status feedback before blocking while creating a Volume Shadow Copy +Do not show dummy texts while initializing progress dialog (OS X) +Allow to maximize filter dialog +New column for item count on overview panel +Allow CTRL + C to copy selection to clipboard on overview panel +Consider current view filter for file selection on overview panel +Workaround silent failure to set modification times on NTFS volumes (Linux) +Avoid main dialog flash when closing progress dialog (Linux) +Do not show middle grid tooltip when dragging outside visible area +Reduced file accesses when loading XML files +Simplified structure of GlobalSettings.xml +Allow to change default exclusion filter via GlobalSettings.xml: "DefaultExclusionFilter" +Split filter entries over multiple rows in ffs_gui/ffs_batch XML files +Resolved failed assert during startup (ReactOS) +Create directory locks after one-time existence check +Show warning when locking directory failed +Reset main dialog layout to fix top panel default height being too small +New help file topic "Expert Settings" +Updated translation files + -Changelog v5.14 ---------------- +FreeFileSync 5.14 +----------------- Do not process child elements when parent directory creation fails Start comparison after pressing Enter in directory input fields Lead grid is determined via keyboard input instead of input focus change @@ -23,13 +54,13 @@ Use 32x32 instead of 48x48 as medium icon size on Windows XP Properly size non-jumbo icons in thumbnail view (Windows Vista and later) Reduced GDI resources for file icon buffer (Windows) Automatically check for updates weekly without showing popup on first start -Restored program logo in systray progress indicatord +Restored program logo in systray progress indicator Fit grid row label to match wide font sizes Added macros %csidl_Downloads%, %csidl_PublicDownloads%, %csidl_QuickLaunch% (Windows Vista and later) -Changelog v5.13 ---------------- +FreeFileSync 5.13 +----------------- Prepared support for new build on Mac OS X Time out for not existing directories after 10 seconds Check directory existence in parallel @@ -43,8 +74,8 @@ More polished user interfaces Fixed time stamp not being set on NFS/Samba shares (Linux) -Changelog v5.12 ---------------- +FreeFileSync 5.12 +----------------- Dynamic statistics adjustment during synchronization Allow to save active view filter settings as default (context menu) Stay responsive while checking recycle bin existence on slow disks @@ -59,8 +90,8 @@ Use full time window of sync phase when calculating overall speed Added Arabic language -Changelog v5.11 ---------------- +FreeFileSync 5.11 +----------------- New file versioning scheme: move to folder replacing existing files Fixed high CPU consumption after longer syncs Improved .ffs_batch configuration file handling @@ -79,8 +110,8 @@ Updated help file Updated translation files -Changelog v5.10 ---------------- +FreeFileSync 5.10 +----------------- Show synchronization log as a grid in results dialog Improved grid scrolling performance (most noticeable on Linux) Allow grid selection starting from outside of the grid @@ -99,8 +130,8 @@ Copy file access permissions by default (Linux) Fixed unexpected "File or Directory not existing" error during file copy (Linux) -Changelog v5.9 --------------- +FreeFileSync 5.9 +---------------- Scroll grid under mouse cursor Move files directly to recycle bin without parent "FFS 2012-05-15 131513" temporary folders Offer $HOME directory alias in directory dropdown list (Linux) @@ -116,8 +147,8 @@ New sync completion sound Fixed sync completion sound not playing (Ubuntu) -Changelog v5.8 --------------- +FreeFileSync 5.8 +---------------- New icon theme Dynamic save button and dialog title show unsaved configuration Exclude all folders if file size or time span filters are active @@ -131,8 +162,8 @@ Disabled UAC virtualization for 32-bit user-mode process Descriptive error message when setting invalid dates on FAT volumes -Changelog v5.7 --------------- +FreeFileSync 5.7 +---------------- Modern directory selection dialog (Windows Vista and later) New file versioning scheme appending revision number to files New sync option to limit number of versions per file @@ -149,8 +180,8 @@ Harmonized external application macros: %item_path%, %item_folder%, %item2_path% Updated translation files -Changelog v5.6 --------------- +FreeFileSync 5.6 +---------------- Resize left and right grids equally Allow to move middle grid position via mouse Automatically resize file name columns @@ -166,8 +197,8 @@ More detailed tooltip describing items that differ in attributes only Added Scottish Gaelic translation -Changelog v5.5 --------------- +FreeFileSync 5.5 +---------------- New database format for <automatic> variant: old database files are converted automatically Tuned performance for <automatic> variant when saving database for millions of files: > 95% faster Support partial database updates for <automatic> variant respecting current filter @@ -188,8 +219,8 @@ Consider both global and local filter when estimating whether folder could conta Updated translation files -Changelog v5.4 --------------- +FreeFileSync 5.4 +---------------- Copy all NTFS extended attributes Improved statistics panel Improved main grid @@ -215,8 +246,8 @@ Support Arch Linux (Chakra) Updated translation files -Changelog v5.3 --------------- +FreeFileSync 5.3 +---------------- Show which processes lock a file during synchronization (Windows Vista and later) Use unbuffered copy to speed up copying large files (Windows Vista and later) Preserve NTFS sparse files @@ -240,13 +271,13 @@ Added Norwegian translation Updated translation files -Changelog v5.2 --------------- +FreeFileSync 5.2 +---------------- Fixed runtime error "Error comparing strings! (LCMapString)" (Windows 2000, XP only) -Changelog v5.1 --------------- +FreeFileSync 5.1 +---------------- New category for time span filter: last x days Fixed "Error loading library function: GetVolumeInformationByHandleW" if NTFS permissions are copied Fixed command line issues: allow config name without extension, allow multiple directories instead of a config file @@ -281,16 +312,16 @@ All executables digitally signed Updated translation files -Changelog v5.0 --------------- +FreeFileSync 5.0 +---------------- New grid control New tree control Revised Right to Left layout for Hebrew Updated translation files -Changelog v4.6 --------------- +FreeFileSync 4.6 +---------------- Execute user-defined command after synchronization Option to automatically close synchronization progress dialog Automatically adjust statistics during sync if changes happened after comparison @@ -308,21 +339,21 @@ Save settings before forced exit due to shutdown or logoff Updated translation files -Changelog v4.5 --------------- +FreeFileSync 4.5 +---------------- Fixed "Windows Error Code 50: The request is not supported" Fixed "Windows Error Code 124: The system call level is not correct" Fixed config load performance problem if network drive is not reachable Support traversing truly empty directories (no ., ..) (Windows) -Changelog v4.4 --------------- +FreeFileSync 4.4 +---------------- Fixed error copying files containing alternate data streams (Windows) -Changelog v4.3 --------------- +FreeFileSync 4.3 +---------------- Detection of moved and renamed files New database format for <Automatic> mode: a full sync is suggested before upgrading Fixed overwrite symlink with regular file @@ -333,8 +364,8 @@ Added Croatian language Updated translation files -Changelog v4.2 --------------- +FreeFileSync 4.2 +---------------- Implemented workaround for compiler bug leading to uncaught exceptions (Windows 32 bit) Shadow Copy Service: Native support for Windows7/Server 2008 Fixed reference by volume name parsing issue @@ -347,8 +378,8 @@ Honor DACL/SACL inheritance flags when copying NTFS permissions (Windows) New option in GlobalSettings.xml: "RunWithBackgroundPriority" (Windows Vista and later) -Changelog v4.1 --------------- +FreeFileSync 4.1 +---------------- Improved synchronization progress dialog Show all available aliases in directory history list Show password prompt when connecting to mapped network share @@ -361,8 +392,8 @@ Allow passing multiple configurations via command line Allow passing multiple directory names via command line -Changelog v4.0 --------------- +FreeFileSync 4.0 +---------------- Thumbnail list view Option to specify comparison settings at folder pair level Correctly update parent-child relationship when changing sync directions @@ -393,15 +424,15 @@ Updated help file Updated translation files -Changelog v3.21 ---------------- +FreeFileSync 3.21 +----------------- Fixed deleting to user-defined directory Fixed crash when using include filter New global option to disable transactional file copy -Changelog v3.20 ---------------- +FreeFileSync 3.20 +----------------- Scan multiple directories in parallel Automatically resolve disconnected network maps Fixed temporal hang when dropping large files on main dialog @@ -412,8 +443,8 @@ Support for Ubuntu Unity Launcher (Linux) RealtimeSync: Failure notification if command line is invalid (Linux) -Changelog v3.19 ---------------- +FreeFileSync 3.19 +----------------- Exclude subdirectories from synchronization which cannot be accessed during comparison Warning if Recycle Bin is not available instead of deleting silently (Windows) Adapted log message if missing recycler leads to permanent deletion (Windows) @@ -434,8 +465,8 @@ Restrict maximum number of visible folder pairs to 6 (configurable via GlobalSet New macros: %day%, %hour%, %min%, %sec% -Changelog v3.18 ---------------- +FreeFileSync 3.18 +----------------- Launcher running synchronously and returning application error code Fixed sort by file extension Fixed drag and drop of SAMBA network folder @@ -449,8 +480,8 @@ Addded Danish language Updated translation files -Changelog v3.17 ---------------- +FreeFileSync 3.17 +----------------- Filter files by size Filter latest files by time span Launcher automatically selecting 32/64 bit executable on startup @@ -475,14 +506,14 @@ Addded Ukrainian language Updated translation files -Changelog v3.16 ---------------- +FreeFileSync 3.16 +----------------- Fixed file copy issues on SAMBA shares Small GUI fixes -Changelog v3.15 ---------------- +FreeFileSync 3.15 +----------------- Overwriting a file as fully transactional operation Optimized synchronization speed (non-cached volumes, e.g. memory sticks in particular) Volumes can be specified by name: [<volume-name>]\<path> (usecase: variable drive letters, RealtimeSync) @@ -501,8 +532,8 @@ More tolerant file move: ignore existing files (user-defined deletion directory) Added macro %weekday% -Changelog v3.14 ---------------- +FreeFileSync 3.14 +----------------- New keyboard shortcuts: F5: compare F6: synchronize Skip to next folder pair if fatal error occured (instead of abort) Reload last selected configuration on startup @@ -521,8 +552,8 @@ Many small GUI/usability fixes Added Korean translation -Changelog v3.13 ---------------- +FreeFileSync 3.13 +----------------- Implemented Advanced User Interface to allow user specified layout customizations Process case sensitive file/directory/symlink names Synchronize name/attributes only avoiding full copy if appropriate @@ -546,8 +577,8 @@ Added privilege to access restricted symlink content Added Greek translation -Changelog v3.12 ---------------- +FreeFileSync 3.12 +----------------- Allow empty folder pairs without complaining Automatically exclude database and lock files from all (sub-)directories (not only from base) Resize grid columns on both sides in parallel @@ -569,14 +600,14 @@ Handle empty tooltips correctly (Linux) Updated translation files -Changelog v3.11 ---------------- +FreeFileSync 3.11 +----------------- Fixed migration issue: reasonable default value for number of folder pairs Better message box background color -Changelog v3.10 ---------------- +FreeFileSync 3.10 +----------------- Automatically solve daylight saving time and time zone shift issues on FAT/FAT32 (finally) Instantly resolve abandoned directory locks associated with local computer Show expanded directory name as tooltip and label text (resolves macros and relative paths) @@ -597,8 +628,8 @@ Further GUI enhancements/polishment/standard conformance Updated translation files -Changelog v3.9 --------------- +FreeFileSync 3.9 +---------------- Advanced locking strategy to allow multiple processes synchronize the same directories (e.g. via network share) Merge multiple *.ffs_batch, *.ffs_gui files or combinations of both via drag & drop Copy file and folder permissions (requires admin rights): @@ -616,8 +647,8 @@ Moved settings "file time tolerance" and "verify copied files" to GlobalSettings Updated translation files -Changelog v3.8 --------------- +FreeFileSync 3.8 +---------------- New options handling Symlinks: ignore/direct/follow => warning: new database format for <Automatic> mode Fixed crash when starting sync for Windows XP SP2 Prevent tooltip from stealing focus @@ -632,8 +663,8 @@ Adjusted auto-updater web-address Updated translation files -Changelog v3.7 --------------- +FreeFileSync 3.7 +---------------- RealtimeSync: Trigger commandline only if all directories are existing Allow for drag and drop of very large files Batch modus: New "Switch" button opens GUI modus when warnings occur @@ -651,13 +682,13 @@ A lot of small GUI fixes Updated translation files -Changelog v3.6 --------------- +FreeFileSync 3.6 +---------------- Fixed occasional crash when starting FreeFileSync -Changelog v3.5 --------------- +FreeFileSync 3.5 +---------------- Allow <Automatic> mode syncs between 32 bit, 64 bit, Windows and Linux builds Show progess indicator in window title Support for progess indicator in Windows 7 Superbar @@ -670,8 +701,8 @@ Allow aborting all operations via Escape key Added British English translation -Changelog v3.4 --------------- +FreeFileSync 3.4 +---------------- Performance: Reduced Recycle Bin access time by 90% Recycle Bin support for Linux Performance: Reduced binary comparison sequential read time (by up to 75% for CD/DVD access) @@ -692,15 +723,15 @@ Updated translation files New Linux .deb package: ppa:freefilesync/ffs -Changelog v3.3 --------------- +FreeFileSync 3.3 +---------------- New installer package for portable/local/32/64-bit versions Built-in support for very long filenames: apply \\?\-prefix automatically New button for synchonization preview: show equal files RealtimeSync: Respond to directory or volume arrival, e.g. USB stick insert Start comparison automatically when double-clicking on *.ffs_gui files Visual progress indicator for sys-tray icon -Fixed string comparison for 'ß' and 'ss' (all Windows versions) +Fixed string comparison for 'ß' and 'ss' (all Windows versions) Fixed general string comparison for Windows 2000 Significantly faster file icon loading Applied new IFileOperation interface for recycle bin (Windows >= Vista) @@ -712,8 +743,8 @@ Added Swedish translation Updated translation files -Changelog v3.2 --------------- +FreeFileSync 3.2 +---------------- Native Windows 64-Bit version (including Volume Shadow Copy Service) Harmonized filter handling: global and local file filters Unified handling of first folder pair: all pairs now semantically equal @@ -722,7 +753,7 @@ New keyboard shortcuts to set sync-direction: ALT + <arrow key> Allow copying to non-encrypted target directory Fixed sort by filename Fixed GDI resource leak when scrolling large grids -Fixed string comparison for 'ß' and 'ss' (Windows >= Vista) +Fixed string comparison for 'ß' and 'ss' (Windows >= Vista) Faster file icon loading Remove elements in folder dropdown list via DEL key New integrated help file @@ -733,8 +764,8 @@ Added Finnish translation Updated translation files -Changelog v3.1 --------------- +FreeFileSync 3.1 +---------------- Support for multiple datasources in Automatic mode Copy file and folder create/access/modification times when synchronizing Progress dialog can be minimized to systray (Batch and GUI mode) @@ -742,8 +773,8 @@ Allow switching between silent/non-silent batch mode interactively Some GUI improvements -Changelog v3.0 --------------- +FreeFileSync 3.0 +---------------- New synchronization mode: <Automatic> Consolidated batch mode error handling Fixed crash when comparing multiple pairs by content @@ -760,8 +791,8 @@ Added Turkish translation Updated translation files -Changelog v2.3 --------------- +FreeFileSync 2.3 +---------------- New filter and sync configuration at folder pair level Improved sorting: sort across multiple folder pairs stable sorting in middle grid @@ -785,8 +816,8 @@ Added Traditional Chinese translation Updated translation files -Changelog v2.2 --------------- +FreeFileSync 2.2 +---------------- New user-defined recycle bin directory Possibility to create synchronization directories automatically (if not existing) Support for relative directory names (e.g. \foo, ..\bar) respecting current working directory @@ -811,14 +842,14 @@ Added Czech translation Updated translation files -Changelog v2.1 --------------- +FreeFileSync 2.1 +---------------- Fixed bug that could cause FreeFileSync to crash after synchronization Compiled with MS Visual C++ 2008 using static runtime library -Changelog v2.0 --------------- +FreeFileSync 2.0 +---------------- Copy locked files using Windows Volume Shadow Copy Load file icons asynchronously for maximum display performance Handle include filter correctly when comparing @@ -841,8 +872,8 @@ Added Russian translation Updated translation files -Changelog v1.19 ---------------- +FreeFileSync 1.19 +----------------- New synchronization preview Sync-direction can be adapted manually New category type "conflict" @@ -861,8 +892,8 @@ File icon display configurable via grid column context menu Updated translation files -Changelog v1.18 ---------------- +FreeFileSync 1.18 +----------------- Linux build officially released: all major problems solved! New statistic: remaining time New statistic: bytes per second @@ -886,8 +917,8 @@ Added Brazilian Portuguese translation Updated translation files -Changelog v1.17 ---------------- +FreeFileSync 1.17 +----------------- Full support for Windows/Linux symbolic links: - traverse, copy, delete symbolic links - handle broken symbolic links @@ -917,8 +948,8 @@ Added Spanish translation Updated translation files -Changelog v1.16 ---------------- +FreeFileSync 1.16 +----------------- Support for \\?\ path prefix for unrestricted path length (directory names > 255 characters) (windows only) Copy files even if target folder does not exist Fixed occasional error when switching languages @@ -947,8 +978,8 @@ Usability improvements: Updated translation files -Changelog v1.15 ---------------- +FreeFileSync 1.15 +----------------- Fixed performance bottleneck in batch mode (non-silent) Improved performance of comparison by another 10% Configure column settings by right-click context menu @@ -958,7 +989,7 @@ Added "sort by comparison result" Sort file list by relative name after comparison (GUI mode only) Removed Windows registry usage for portable version Restored linebreaks in status texts for better readability -Revised German translation. Thanks to «Latino»! +Revised German translation. Thanks to «Latino»! Created custom button control to finally translate "compare" and "synchronize" Allow manual setup of file manager integration (Windows and Linux) Added Step-By-Step guide for manual compilation (Windows and Linux) @@ -970,8 +1001,8 @@ Added Italian translation Updated translation files -Changelog v1.14 ---------------- +FreeFileSync 1.14 +----------------- Massive performance improvements: - comprehensive analysis and optimization of comparison functionality - new, fast directory traversing algorithm @@ -987,8 +1018,8 @@ Added Chinese translation Updated translation files -Changelog v1.13 ---------------- +FreeFileSync 1.13 +----------------- Automatically detect daylight saving time (DST) change for FAT/FAT32 drives Added directory dependency check when synchronizing multiple folder pairs New synchronization option: "update" @@ -998,8 +1029,8 @@ Further GUI improvements Updated translation files -Changelog v1.12 ---------------- +FreeFileSync 1.12 +----------------- Significantly improved speed of all sorting algorithms Keep sorting sequence when adding or removing rows 'Sort by relative path' secondarily sorts by filename and respects folders @@ -1014,8 +1045,8 @@ Added Dutch translation Updated translation files -Changelog v1.11 ---------------- +FreeFileSync 1.11 +----------------- Support for multiple folder pairs Optimized performance of multiple pairs to scan each folder just once Enhanced batch file format @@ -1024,8 +1055,8 @@ Reworked file filter dialog Updated translation files -Changelog v1.10 ---------------- +FreeFileSync 1.10 +----------------- Transformed configuration file format to XML Exchanged batch files with shell links for full Unicode support (Windows-only) Improved filter usage: ignore leading/trailing whitespace, upper/lower-case (Windows-only) chars @@ -1037,8 +1068,8 @@ Added Japanese translation Updated translation files -Changelog v1.9 --------------- +FreeFileSync 1.9 +---------------- Fixed wxWidgets multithreading issue that could cause synchronization to hang occasionally Fixed issue with %1 parameter Fixed issue with recycle bin usage in unicode mode @@ -1048,8 +1079,8 @@ Transformed language files to Unicode (UTF-8) Delete elements in configuration history list via DELETE key -Changelog v1.8 --------------- +FreeFileSync 1.8 +---------------- Enhanced statusbar information Enhanced logfile information Enhanced progress information @@ -1059,8 +1090,8 @@ Added French translation Updated German translation -Changelog v1.7 --------------- +FreeFileSync 1.7 +---------------- Display only those view filter buttons that are actually needed Compare by size and date: last write time may differ by up to 2 seconds (NTFS vs FAT32) Fixed minor issue with trailing path separator when creating batch jobs @@ -1069,8 +1100,8 @@ Further improved Unicode compliance Updated German translation -Changelog v1.6 --------------- +FreeFileSync 1.6 +---------------- Significantly improved speed of filtering files and view (< 10 ms for > 200.000 rows(!)) Fixed minor grid mis-alignment under some special conditions Enhanced status bar with centered texts @@ -1085,8 +1116,8 @@ UI-option to create sync jobs (batch files) for automated synchronization Updated German translation -Changelog v1.5 --------------- +FreeFileSync 1.5 +---------------- Improved speed of comparison by file content Simplified and optimized calculation of accumulated filesizes Added right-click context menu to main dialog @@ -1096,8 +1127,8 @@ Solved possible issue with different file time precisions in multi-OS environmen Updated German translation -Changelog v1.4 --------------- +FreeFileSync 1.4 +---------------- Implemented generic multithreading class to keep "compare by content" and "file synchronisation" responsive Added status bar when comparing files (with additional status information for "compare by content") Some further speed optimizations @@ -1108,8 +1139,8 @@ Added "remaining files" as sync-progress information Updated German translation -Changelog v1.3 --------------- +FreeFileSync 1.3 +---------------- Maintain and load different configurations by drag&drop, load-button or commandline New function to delete files (or move them to recycle bin) manually on the UI (without having to re-compare): Deleting folders results in deletion of all dependent files, subfolders on UI grid (also no re-compare needed) @@ -1123,8 +1154,8 @@ Updated sources to become more Linux and Unicode friendly Updated German translation -Changelog v1.2 --------------- +FreeFileSync 1.2 +---------------- New progress indicator and status information when synchronizing: ->available for commandline mode and UI mode: Status update and final error report New progress information when comparing directories @@ -1143,8 +1174,8 @@ Added different return values when used in commandline mode to report success or Updated German translation -Changelog v1.1 --------------- +FreeFileSync 1.1 +---------------- Some further speed optimizations (sorting) Written custom wxGrid class to avoid mapping of data to UI: huge performance increase (especially with formatted grids > 100000 items) Filter files to include/exclude them from synchronization @@ -1157,6 +1188,6 @@ Prepared code to support unicode in some future version Updated German translation -Changelog v1.0 --------------- +FreeFileSync 1.0 +---------------- Initial release diff --git a/BUILD/FreeFileSync.chm b/BUILD/FreeFileSync.chm Binary files differindex 4d02da2a..98150320 100644 --- a/BUILD/FreeFileSync.chm +++ b/BUILD/FreeFileSync.chm diff --git a/BUILD/FreeFileSync.chw b/BUILD/FreeFileSync.chw Binary files differdeleted file mode 100644 index 1d52bd22..00000000 --- a/BUILD/FreeFileSync.chw +++ /dev/null diff --git a/BUILD/Help/FreeFileSync.hhc b/BUILD/Help/FreeFileSync.hhc index f54645e7..bfcd35f9 100644 --- a/BUILD/Help/FreeFileSync.hhc +++ b/BUILD/Help/FreeFileSync.hhc @@ -20,36 +20,36 @@ <param name="Local" value="html\FreeFileSync.html"> </OBJECT> <LI> <OBJECT type="text/sitemap"> - <param name="Name" value="Batch Scripting"> - <param name="Local" value="html\Batch Scripting.html"> + <param name="Name" value="Batch scripting"> + <param name="Local" value="html\Batch scripting.html"> </OBJECT> <LI> <OBJECT type="text/sitemap"> - <param name="Name" value="Compare by file size only"> - <param name="Local" value="html\Compare by File Size.html"> - </OBJECT> - <LI> <OBJECT type="text/sitemap"> - <param name="Name" value="Comparison Settings"> - <param name="Local" value="html\Comparison Settings.html"> + <param name="Name" value="Comparison settings"> + <param name="Local" value="html\Comparison settings.html"> </OBJECT> <LI> <OBJECT type="text/sitemap"> <param name="Name" value="Daylight saving time"> - <param name="Local" value="html\Daylight Saving Time.html"> + <param name="Local" value="html\Daylight saving time.html"> </OBJECT> <LI> <OBJECT type="text/sitemap"> <param name="Name" value="Exclude items"> - <param name="Local" value="html\Exclude Items.html"> + <param name="Local" value="html\Exclude items.html"> + </OBJECT> + <LI> <OBJECT type="text/sitemap"> + <param name="Name" value="Expert settings"> + <param name="Local" value="html\Expert settings.html"> </OBJECT> <LI> <OBJECT type="text/sitemap"> <param name="Name" value="External applications"> - <param name="Local" value="html\External Applications.html"> + <param name="Local" value="html\External applications.html"> </OBJECT> <LI> <OBJECT type="text/sitemap"> <param name="Name" value="Macros"> <param name="Local" value="html\Macros.html"> </OBJECT> <LI> <OBJECT type="text/sitemap"> - <param name="Name" value="Schedule a Batch Job"> - <param name="Local" value="html\Schedule a Batch Job.html"> + <param name="Name" value="Schedule a batch job"> + <param name="Local" value="html\Schedule a batch job.html"> </OBJECT> <LI> <OBJECT type="text/sitemap"> <param name="Name" value="Synchronize with FTP"> @@ -57,7 +57,7 @@ </OBJECT> <LI> <OBJECT type="text/sitemap"> <param name="Name" value="Variable drive letters"> - <param name="Local" value="html\Variable Drive Letters.html"> + <param name="Local" value="html\Variable drive letters.html"> </OBJECT> <LI> <OBJECT type="text/sitemap"> <param name="Name" value="Versioning"> @@ -79,8 +79,8 @@ <param name="Local" value="html\RealtimeSync.html"> </OBJECT> <LI> <OBJECT type="text/sitemap"> - <param name="Name" value="Run as Service"> - <param name="Local" value="html\Run as Service.html"> + <param name="Name" value="Run as service"> + <param name="Local" value="html\Run as service.html"> </OBJECT> </UL> <LI> <OBJECT type="text/sitemap"> diff --git a/BUILD/Help/FreeFileSync.hhp b/BUILD/Help/FreeFileSync.hhp index 32851646..38c789d9 100644 --- a/BUILD/Help/FreeFileSync.hhp +++ b/BUILD/Help/FreeFileSync.hhp @@ -12,19 +12,19 @@ Title=FreeFileSync - Help [FILES] html\FreeFileSync.html html\Versioning.html -html\Batch Scripting.html -html\Compare by File Size.html -html\Comparison Settings.html -html\Daylight Saving Time.html -html\Exclude Items.html -html\External Applications.html +html\Batch scripting.html +html\Expert settings.html +html\Comparison settings.html +html\Daylight Saving time.html +html\Exclude items.html +html\External applications.html html\Macros.html -html\Schedule a Batch Job.html +html\Schedule a batch job.html html\Synchronize with FTP.html -html\Variable Drive Letters.html +html\Variable drive letters.html html\Volume Shadow Copy.html html\RealtimeSync.html -html\Run as Service.html +html\Run as service.html html\Links.html [INFOTYPES] diff --git a/BUILD/Help/html/Batch Scripting.html b/BUILD/Help/html/Batch Scripting.html index 4e162b12..6a3ce4b8 100644 --- a/BUILD/Help/html/Batch Scripting.html +++ b/BUILD/Help/html/Batch Scripting.html @@ -16,38 +16,37 @@ P { margin-bottom: 0.21cm } H2.cjk { font-family: "SimSun" } H2.ctl { font-family: "Mangal" } - A:link { so-language: zxx } --> </STYLE> </HEAD> <BODY LANG="en-US" DIR="LTR"> <H2 CLASS="western"><FONT FACE="Tahoma, sans-serif"><FONT SIZE=4 STYLE="font-size: 15pt">Batch -Scripting</FONT></FONT></H2> +scripting</FONT></FONT></H2> <P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">FreeFileSync can be called from command line and supports integration into batch scripts. This section gives some general hints and examples for Windows <FONT FACE="Courier New, monospace">*.cmd</FONT> and <FONT FACE="Courier New, monospace">*.bat</FONT> scripts.</FONT></P> -<P STYLE="margin-bottom: 0cm"><BR> -</P> + <P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">When FreeFileSync is started in batch mode (a <FONT FACE="Courier New, monospace">*.ffs_batch</FONT> file is passed as argument) it returns one of the following status codes:</FONT></P> -<P STYLE="margin-left: 1.46cm; margin-bottom: 0cm"><SPAN ID="Rahmen1" DIR="LTR" STYLE="float: left; width: 80%; height: 0.14cm; border: 1px solid #000080; padding: 0.05cm; background: #ccccff"> - <UL> - <P ALIGN=LEFT STYLE="margin-right: 0.98cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-style: normal"><B>Return + +<P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen6" DIR="LTR" STYLE="float: left; width: 80%; border: none; padding: 0cm; background: #e6e6e6"> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"> +<FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-style: normal"><B>Return Codes</B></SPAN><SPAN STYLE="font-style: normal"><BR>0 - Synchronization completed successfully<BR>1 - Synchronization completed with warnings<BR>2 - Synchronization completed with - errors<BR>3 - Synchronization was aborted</SPAN></FONT></P> - </UL> + errors<BR>3 - Synchronization was aborted</SPAN></FONT> </P> </SPAN><BR CLEAR=LEFT><BR> </P> + <P STYLE="margin-bottom: 0cm; font-weight: normal"><FONT FACE="Tahoma, sans-serif">Now you can check if synchronization was successful from a script:</FONT></P> -<P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen6" DIR="LTR" STYLE="float: left; width: 80%; height: 0.14cm; border: none; padding: 0cm; background: #e6e6e6"> - <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-right: 0.98cm; margin-bottom: 0cm"> +<P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen6" DIR="LTR" STYLE="float: left; width: 80%; border: none; padding: 0cm; background: #e6e6e6"> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"> <FONT FACE="Tahoma, sans-serif"><FONT FACE="Courier New, monospace">"C:\Program Files\FreeFileSync\FreeFileSync.exe" "H:\some folder\SyncJob.ffs_batch"<BR>if errorlevel 1 (<BR> </FONT><FONT COLOR="#808080"><FONT FACE="Courier New, monospace"><I><B>::if @@ -62,24 +61,22 @@ email notification (using a third party tool).</FONT> </P> <P STYLE="margin-bottom: 0cm"><BR> </P> -<P STYLE="margin-left: 1.46cm; margin-bottom: 0cm"><SPAN ID="Rahmen3" DIR="LTR" STYLE="float: left; width: 80%; height: 0.14cm; border: 1px solid #000080; padding: 0.05cm; background: #ccccff"> - <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-right: 0.98cm; margin-bottom: 0cm"> +<P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen3" DIR="LTR" STYLE="float: left; width: 80%; border: 1px solid #000080; padding: 0.05cm; background: #ccccff"> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"> <FONT FACE="Tahoma, sans-serif"><B>Attention<BR></B>Make sure your script is not blocked by a popup dialog. Consider the following options when setting up a FreeFileSync batch job:</FONT></P> - <UL> - <LI><P ALIGN=LEFT STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Disable + <LI><P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Disable checkbox <SPAN STYLE="font-style: normal"><B>Show progress dialog</B></SPAN> or have <B>On completion</B> automatically close the results dialog after synchronization.</FONT></P> - <LI><P ALIGN=LEFT STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-weight: normal">Set + <LI><P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-weight: normal">Set e</SPAN></FONT><FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-style: normal"><SPAN STYLE="font-weight: normal">rror handling</SPAN></SPAN></FONT> <FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-weight: normal">to </SPAN></FONT><FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-style: normal"><B>Exit instantly</B></SPAN></FONT> <FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-weight: normal">or </SPAN></FONT><FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-style: normal"><B>Ignore errors</B></SPAN></FONT><FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-weight: normal">.</SPAN></FONT></P> - </UL> </SPAN><BR CLEAR=LEFT><BR> </P> <P STYLE="margin-bottom: 0cm"><BR> diff --git a/BUILD/Help/html/Compare by File Size.html b/BUILD/Help/html/Compare by File Size.html deleted file mode 100644 index 5f38aa5f..00000000 --- a/BUILD/Help/html/Compare by File Size.html +++ /dev/null @@ -1,42 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> -<HTML> -<HEAD> - <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=windows-1252"> - <TITLE></TITLE> - <META NAME="GENERATOR" CONTENT="OpenOffice.org 3.4.1 (Win32)"> - <META NAME="CREATED" CONTENT="20091206;16574000"> - <META NAME="CHANGED" CONTENT="20130206;18224747"> - <META NAME="Info 1" CONTENT=""> - <META NAME="Info 2" CONTENT=""> - <META NAME="Info 3" CONTENT=""> - <META NAME="Info 4" CONTENT=""> - <STYLE TYPE="text/css"> - <!-- - @page { margin: 2cm } - P { margin-bottom: 0.21cm } - H2.cjk { font-family: "SimSun" } - H2.ctl { font-family: "Mangal" } - A:link { so-language: zxx } - --> - </STYLE> -</HEAD> -<BODY LANG="en-US" DIR="LTR"> -<H2 CLASS="western"><FONT FACE="Tahoma, sans-serif"><FONT SIZE=4 STYLE="font-size: 15pt">Compare -by file size only</FONT></FONT></H2> -<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Sometimes -you might want to compare both sides by file size only, ignoring last -modification timestamps.</FONT></P> -<P STYLE="margin-bottom: 0cm"><BR> -</P> -<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Instructions:</B></FONT></P> -<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Open -file "</FONT><FONT FACE="Courier New, monospace">GlobalSettings.xml</FONT><FONT FACE="Tahoma, sans-serif">" -located either in "</FONT><FONT FACE="Courier New, monospace">%appdata%\FreeFileSync</FONT><FONT FACE="Tahoma, sans-serif">" -or the installation folder and change the value of XML node -</FONT><FONT FACE="Courier New, monospace"><FileTimeTolerance></FONT> -<FONT FACE="Tahoma, sans-serif">to some sufficiently large number of -seconds, for example 2.000.000.000. Changed files will now be -detected as a conflict (same date, different file size) and the -default synchronization direction for conflicts can be used.</FONT></P> -</BODY> -</HTML>
\ No newline at end of file diff --git a/BUILD/Help/html/Comparison Settings.html b/BUILD/Help/html/Comparison Settings.html index 0d02f3ec..af17c5c3 100644 --- a/BUILD/Help/html/Comparison Settings.html +++ b/BUILD/Help/html/Comparison Settings.html @@ -20,13 +20,12 @@ H3.ctl { font-family: "Mangal" } H2.cjk { font-family: "SimSun" } H2.ctl { font-family: "Mangal" } - A:link { so-language: zxx } --> </STYLE> </HEAD> <BODY LANG="en-US" DIR="LTR"> <H2 CLASS="western"><FONT FACE="Tahoma, sans-serif"><FONT SIZE=4 STYLE="font-size: 15pt">Comparison -Settings</FONT></FONT></H2> +settings</FONT></FONT></H2> <P STYLE="margin-bottom: 0cm"><IMG SRC="../img/CmpSettings.png" NAME="Grafik1" ALIGN=BOTTOM WIDTH=219 HEIGHT=267 BORDER=0></P> <H3 CLASS="western" STYLE="page-break-after: avoid"><FONT FACE="Tahoma, sans-serif">I. Compare by "File time and size"</FONT></H3> @@ -120,16 +119,14 @@ called symlinks or soft links):</FONT></P> </OL> <P STYLE="margin-bottom: 0cm"><BR> </P> -<P STYLE="margin-left: 1.46cm; margin-bottom: 0cm"><SPAN ID="Rahmen3" DIR="LTR" STYLE="float: left; width: 80%; height: 0.14cm; border: 1px solid #000080; padding: 0.05cm; background: #ccccff"> - <UL> - <P ALIGN=LEFT STYLE="margin-right: 0.98cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Note</B></FONT></P> - <LI><P ALIGN=LEFT STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Under +<P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen3" DIR="LTR" STYLE="float: left; width: 80%; border: 1px solid #000080; padding: 0.05cm; background: #ccccff"> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Note</B></FONT></P> + <LI><P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Under Windows the symbolic link options apply to symbolic lin<SPAN STYLE="font-style: normal">ks, volume mount points and NTFS junction points.</SPAN></FONT></P> - <LI><P ALIGN=LEFT STYLE="margin-right: 0.98cm; margin-bottom: 0cm; font-style: normal"> + <LI><P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm; font-style: normal"> <FONT FACE="Tahoma, sans-serif">Copying symbolic links requires FreeFileSync to be started with administrator rights.</FONT></P> - </UL> </SPAN><BR CLEAR=LEFT><BR> </P> <P STYLE="margin-bottom: 0cm"><BR> diff --git a/BUILD/Help/html/Daylight Saving Time.html b/BUILD/Help/html/Daylight Saving Time.html index 192eff98..126ab928 100644 --- a/BUILD/Help/html/Daylight Saving Time.html +++ b/BUILD/Help/html/Daylight Saving Time.html @@ -16,7 +16,6 @@ P { margin-bottom: 0.21cm } H2.cjk { font-family: "SimSun" } H2.ctl { font-family: "Mangal" } - A:link { so-language: zxx } --> </STYLE> </HEAD> @@ -58,18 +57,16 @@ only solves all DST issues but also time shifts that occur due to travel between different time zones.</FONT></P> <P STYLE="margin-bottom: 0cm"><BR> </P> -<P STYLE="margin-left: 1.46cm; margin-bottom: 0cm"><SPAN ID="Rahmen1" DIR="LTR" STYLE="float: left; width: 80%; height: 0.14cm; border: 1px solid #000080; padding: 0.05cm; background: #ccccff"> - <UL> - <P ALIGN=LEFT STYLE="margin-right: 0.98cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Note</B></FONT></P> - <LI><P ALIGN=LEFT STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">In +<P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen1" DIR="LTR" STYLE="float: left; width: 80%; border: 1px solid #000080; padding: 0.05cm; background: #ccccff"> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Note</B></FONT></P> + <LI><P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">In order for FreeFileSync to start handling DST and timezone differences, an initial full synchronization is required. Subsequent syncs will never show a time difference again.</FONT></P> - <LI><P ALIGN=LEFT STYLE="margin-right: 0.98cm; margin-bottom: 0cm; font-style: normal"> + <LI><P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm; font-style: normal"> <FONT FACE="Tahoma, sans-serif">If a FAT volume is scanned the first time by FreeFileSync this will take longer than usual since additional meta data is written for each file.</FONT></P> - </UL> </SPAN><BR CLEAR=LEFT><BR> </P> <P STYLE="margin-bottom: 0cm"><BR> diff --git a/BUILD/Help/html/Exclude Items.html b/BUILD/Help/html/Exclude Items.html index d0478dd6..4ac0afaf 100644 --- a/BUILD/Help/html/Exclude Items.html +++ b/BUILD/Help/html/Exclude Items.html @@ -3,9 +3,9 @@ <HEAD> <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=windows-1252"> <TITLE></TITLE> - <META NAME="GENERATOR" CONTENT="LibreOffice 4.0.0.3 (Windows)"> + <META NAME="GENERATOR" CONTENT="LibreOffice 4.0.2.2 (Windows)"> <META NAME="CREATED" CONTENT="20091206;16574000"> - <META NAME="CHANGED" CONTENT="20130211;23214007"> + <META NAME="CHANGED" CONTENT="20130418;20440768"> <META NAME="Info 1" CONTENT=""> <META NAME="Info 2" CONTENT=""> <META NAME="Info 3" CONTENT=""> @@ -14,6 +14,7 @@ <!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } + TD P { margin-bottom: 0.21cm } H2.cjk { font-family: "SimSun" } H2.ctl { font-family: "Mangal" } --> @@ -26,78 +27,125 @@ items</FONT></FONT></H2> and directories are only considered for synchronization if they pass the filter. They have to match <B>at least one</B> entry in the include list and <B>none</B> of the entries in the exclude list:</FONT></P> -<OL> - <LI><P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Each - list item must be a file or directory path </FONT><FONT FACE="Tahoma, sans-serif"><B>relative</B></FONT> - <FONT FACE="Tahoma, sans-serif">to synchronization base directories.</FONT></P> - <LI><P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Multiple - items must be separated by <B>;</B> or a new line.</FONT></P> - <LI><P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Wild - cards <B>*</B> and <B>?</B> may be used: <B>*</B> means zero or more - characters while <B>?</B> represents exactly one character.</FONT></P> -</OL> -<P STYLE="margin-bottom: 0cm"><BR> + +<P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen2" DIR="LTR" STYLE="float: left; width: 80%; border: none; padding: 0cm; background: #e6e6e6"> + <LI><P STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Each + list item must be a file or directory path </FONT><FONT FACE="Tahoma, sans-serif"><B>relative</B></FONT> + <FONT FACE="Tahoma, sans-serif">to synchronization base directories.</FONT></P> + <LI><P STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Multiple + items must be separated by <B>;</B> or a new line.</FONT></P> + <LI><P STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Wild + cards <B>*</B> and <B>?</B> may be used: <B>*</B> means zero or more + characters while <B>?</B> represents exactly one character.</FONT></P> +</SPAN><BR CLEAR=LEFT><BR> </P> -<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Example:</B> -Exclude items for m<SPAN STYLE="font-weight: normal">irror-sync from -</SPAN><FONT FACE="Courier New, monospace"><SPAN STYLE="font-weight: normal">C:\Source</SPAN></FONT> -<SPAN STYLE="font-weight: normal">to </SPAN><FONT FACE="Courier New, monospace"><SPAN STYLE="font-weight: normal">D:\Target</SPAN></FONT></FONT></P> -<P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen1" DIR="LTR" STYLE="float: left; width: 80%; height: 0.14cm; border: none; padding: 0cm; background: #e6e6e6"> - <P STYLE="margin-left: 0.82cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-weight: normal">Single - file </SPAN></FONT><FONT FACE="Courier New, monospace">C:\Source\file.txt:<BR></FONT> <FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-weight: normal">Exclude: - </SPAN></FONT><FONT FACE="Courier New, monospace">\file.txt</FONT></P> - <P STYLE="margin-left: 0.82cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-weight: normal">Single - folder </SPAN></FONT><FONT FACE="Courier New, monospace">C:\Source\subfolder:<BR></FONT> <FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-weight: normal">Exclude: - </SPAN></FONT><FONT FACE="Courier New, monospace">\subfolder\</FONT></P> - <P STYLE="margin-left: 0.82cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-weight: normal">All - files (and folders) named </SPAN></FONT><FONT FACE="Courier New, monospace"><SPAN STYLE="font-weight: normal">thumbs.db</SPAN></FONT><FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-weight: normal">:<BR></SPAN></FONT> <FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-weight: normal">Exclude: - </SPAN></FONT><FONT FACE="Courier New, monospace">*\thumbs.db</FONT></P> - <P STYLE="margin-left: 0.82cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-weight: normal">All - </SPAN></FONT><FONT FACE="Courier New, monospace"><SPAN STYLE="font-weight: normal">*.tmp</SPAN></FONT> - <FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-weight: normal">files - located in </SPAN></FONT><FONT FACE="Courier New, monospace"><SPAN STYLE="font-weight: normal">subfolder</SPAN></FONT> - <FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-weight: normal">only:<BR></SPAN></FONT> <FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-weight: normal">Exclude: - </SPAN></FONT><FONT FACE="Courier New, monospace">\subfolder\*.tmp</FONT></P> - <P STYLE="margin-left: 0.82cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-weight: normal">Files - and folders containing </SPAN></FONT><FONT FACE="Courier New, monospace"><SPAN STYLE="font-weight: normal">temp</SPAN></FONT> - <FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-weight: normal">somewhere - in their path:<BR></SPAN></FONT> <FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-weight: normal">Exclude: - </SPAN></FONT><FONT FACE="Courier New, monospace">*temp*</FONT></P> - <P ALIGN=LEFT STYLE="margin-left: 0.82cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-weight: normal">Multiple - entries separated by semicolon:<BR></SPAN> <SPAN STYLE="font-weight: normal">Exclude: - </SPAN><FONT FACE="Courier New, monospace"><SPAN STYLE="font-weight: normal">*.tmp; - *.doc; *.bak</SPAN></FONT></FONT></P> + +<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Example:</B></FONT> +<FONT FACE="Tahoma, sans-serif">Exclude items for mirror-sync from +</FONT><FONT FACE="Courier New, monospace">C:\Source</FONT> <FONT FACE="Tahoma, sans-serif">to +</FONT><FONT FACE="Courier New, monospace">D:\Target</FONT></P> + +<P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen1" DIR="LTR" STYLE="float: left; width: 80%; border: none; padding: 0cm; background: #e6e6e6"> + <TABLE DIR="LTR" WIDTH=100% CELLPADDING=0 CELLSPACING=0> + <TR> + <TD WIDTH=65% STYLE="border-top: none; border-bottom: 2px solid #000000; border-left: none; border-right: none; padding-top: 0cm; padding-bottom: 0.05cm; padding-left: 0cm; padding-right: 0cm"> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm"><FONT FACE="Tahoma, sans-serif"><B>Description</B></FONT></P> + </TD> + <TD WIDTH=35% STYLE="border-top: none; border-bottom: 2px solid #000000; border-left: 1.00pt solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.05cm; padding-left: 0.05cm; padding-right: 0cm"> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm"><FONT FACE="Tahoma, sans-serif"><B>Exclude</B></FONT></P> + </TD> + </TR> + <TR> + <TD WIDTH=65% STYLE="border-top: none; border-bottom: 1px solid #000000; border-left: none; border-right: none; padding-top: 0cm; padding-bottom: 0.05cm; padding-left: 0cm; padding-right: 0cm"> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm"><FONT FACE="Tahoma, sans-serif">Single file + <FONT FACE="Courier New, monospace">C:\Source\file.txt</FONT></FONT></P> + </TD> + <TD WIDTH=35% STYLE="border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.05cm; padding-left: 0.05cm; padding-right: 0cm"> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm"><FONT FACE="Courier New, monospace">\file.txt</FONT></P> + </TD> + </TR> + <TR> + <TD WIDTH=65% STYLE="border-top: none; border-bottom: 1px solid #000000; border-left: none; border-right: none; padding-top: 0cm; padding-bottom: 0.05cm; padding-left: 0cm; padding-right: 0cm"> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm"><FONT FACE="Tahoma, sans-serif">Single folder + <FONT FACE="Courier New, monospace">C:\Source\subfolder</FONT></FONT></P> + </TD> + <TD WIDTH=35% STYLE="border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.05cm; padding-left: 0.05cm; padding-right: 0cm"> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm"><FONT FACE="Courier New, monospace">\subfolder\</FONT></P> + </TD> + </TR> + <TR> + <TD WIDTH=65% STYLE="border-top: none; border-bottom: 1px solid #000000; border-left: none; border-right: none; padding-top: 0cm; padding-bottom: 0.05cm; padding-left: 0cm; padding-right: 0cm"> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm"><FONT FACE="Tahoma, sans-serif">All files (and + folders) named <FONT FACE="Courier New, monospace">thumbs.db</FONT> + </FONT> + </P> + </TD> + <TD WIDTH=35% STYLE="border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.05cm; padding-left: 0.05cm; padding-right: 0cm"> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm"><FONT FACE="Courier New, monospace">*\thumbs.db</FONT></P> + </TD> + </TR> + <TR> + <TD WIDTH=65% STYLE="border-top: none; border-bottom: 1px solid #000000; border-left: none; border-right: none; padding-top: 0cm; padding-bottom: 0.05cm; padding-left: 0cm; padding-right: 0cm"> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm"><FONT FACE="Tahoma, sans-serif">All <FONT FACE="Courier New, monospace">*.tmp</FONT> + files located in <FONT FACE="Courier New, monospace">subfolder</FONT> + only</FONT></P> + </TD> + <TD WIDTH=35% STYLE="border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.05cm; padding-left: 0.05cm; padding-right: 0cm"> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm"><FONT FACE="Courier New, monospace">\subfolder\*.tmp</FONT></P> + </TD> + </TR> + <TR> + <TD WIDTH=65% STYLE="border-top: none; border-bottom: 1px solid #000000; border-left: none; border-right: none; padding-top: 0cm; padding-bottom: 0.05cm; padding-left: 0cm; padding-right: 0cm"> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm"><FONT FACE="Tahoma, sans-serif">Files and folders + containing <FONT FACE="Courier New, monospace">temp</FONT> + somewhere in their path</FONT></P> + </TD> + <TD WIDTH=35% STYLE="border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.05cm; padding-left: 0.05cm; padding-right: 0cm"> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm"><FONT FACE="Courier New, monospace">*temp*</FONT></P> + </TD> + </TR> + <TR> + <TD WIDTH=65% STYLE="border: none; padding: 0cm"> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm"><FONT FACE="Tahoma, sans-serif">Multiple entries + separated by semicolon</FONT></P> + </TD> + <TD WIDTH=35% STYLE="border-top: none; border-bottom: none; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0cm; padding-left: 0.05cm; padding-right: 0cm"> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm"><FONT FACE="Courier New, monospace">*.tmp; *.doc; + *.bak</FONT></P> + </TD> + </TR> + </TABLE> </SPAN><BR CLEAR=LEFT><BR> </P> +<P STYLE="margin-bottom: 0cm"><BR> +</P> <P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Example:</B> Exclude all files and folders located in subdirectories of base directories</FONT></P> -<P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen5" DIR="LTR" STYLE="float: left; width: 80%; height: 0.14cm; border: none; padding: 0cm; background: #e6e6e6"> - <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-right: 0.98cm; margin-bottom: 0cm"> +<P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen5" DIR="LTR" STYLE="float: left; width: 80%; border: none; padding: 0cm; background: #e6e6e6"> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"> <FONT FACE="Tahoma, sans-serif">Exclude: <FONT FACE="Courier New, monospace">*\*</FONT></FONT></P> </SPAN><BR CLEAR=LEFT><BR> </P> <P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Example:</B> Include only <SPAN STYLE="font-weight: normal">files and folders located in subdirectories of base directories</SPAN></FONT></P> -<P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen2" DIR="LTR" STYLE="float: left; width: 80%; height: 0.14cm; border: none; padding: 0cm; background: #e6e6e6"> - <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-right: 0.98cm; margin-bottom: 0cm"> +<P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen2" DIR="LTR" STYLE="float: left; width: 80%; border: none; padding: 0cm; background: #e6e6e6"> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"> <FONT FACE="Tahoma, sans-serif">Include: <FONT FACE="Courier New, monospace">*\*</FONT></FONT></P> </SPAN><BR CLEAR=LEFT><BR> </P> <P STYLE="margin-bottom: 0cm"><BR> </P> -<P STYLE="margin-left: 1.46cm; margin-bottom: 0cm"><SPAN ID="Rahmen4" DIR="LTR" STYLE="float: left; width: 80%; height: 0.14cm; border: 1px solid #000080; padding: 0.05cm; background: #ccccff"> - <UL> - <P ALIGN=LEFT STYLE="margin-right: 0.98cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Note</B></FONT></P> - <LI><P ALIGN=LEFT STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">For - simple exclusions just right-click and exclude one or a list of - items directly on main grid via context menu.</FONT></P> - <LI><P ALIGN=LEFT STYLE="margin-right: 0.98cm; margin-bottom: 0cm; font-variant: normal; font-style: normal"> - <FONT FACE="Tahoma, sans-serif">A filter string is compared against +<P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen4" DIR="LTR" STYLE="float: left; width: 80%; border: 1px solid #000080; padding: 0.05cm; background: #ccccff"> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Note</B></FONT></P> + <LI><P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">For + simple exclusions just right-click and exclude one item or a list + of items directly on main grid via context menu.</FONT></P> + <LI><P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm; font-variant: normal; font-style: normal"> + <FONT FACE="Tahoma, sans-serif">A filter phrase is compared against both file and directory paths. If you want to consider directories only, you can give a hint by appending a path separator (<FONT FACE="Courier New, monospace"><B>\</B></FONT>).</FONT></P> - </UL> </SPAN><BR CLEAR=LEFT><BR> </P> <P STYLE="margin-bottom: 0cm"><BR> diff --git a/BUILD/Help/html/Expert settings.html b/BUILD/Help/html/Expert settings.html new file mode 100644 index 00000000..c288ec58 --- /dev/null +++ b/BUILD/Help/html/Expert settings.html @@ -0,0 +1,90 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<HTML> +<HEAD> + <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=windows-1252"> + <TITLE></TITLE> + <META NAME="GENERATOR" CONTENT="LibreOffice 4.0.2.2 (Windows)"> + <META NAME="CREATED" CONTENT="20091206;16574000"> + <META NAME="CHANGED" CONTENT="20130420;15194465"> + <META NAME="Info 1" CONTENT=""> + <META NAME="Info 2" CONTENT=""> + <META NAME="Info 3" CONTENT=""> + <META NAME="Info 4" CONTENT=""> + <STYLE TYPE="text/css"> + <!-- + @page { margin: 2cm } + P { margin-bottom: 0.21cm } + H2.cjk { font-family: "SimSun" } + H2.ctl { font-family: "Mangal" } + A:link { so-language: zxx } + --> + </STYLE> +</HEAD> +<BODY LANG="en-US" DIR="LTR"> +<H2 CLASS="western"><FONT FACE="Tahoma, sans-serif"><FONT SIZE=4 STYLE="font-size: 15pt">Expert +settings</FONT></FONT></H2> +<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">FreeFileSync +has a number of special purpose settings that can only be accessed +directly via the global configuration file "<FONT FACE="Courier New, monospace">GlobalSettings.xml</FONT>". +To locate this file enter "<FONT FACE="Courier New, monospace">%appdata%\FreeFileSync</FONT>" +in the Windows Explorer address bar or go to the FreeFileSync +installation folder if you are using the portable installation.</FONT></P> +<P STYLE="margin-bottom: 0cm"><BR> +</P> +<P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen6" DIR="LTR" STYLE="float: left; width: 80%; height: 0.04cm; border: none; padding: 0cm; background: #e6e6e6"> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Courier New, monospace"><?xml + version="1.0" encoding="UTF-8"?><BR><FreeFileSync + XmlType="GLOBAL"><BR> <Shared><BR> <<B>FileTimeTolerance</B> + Seconds="2"/><BR> <<B>RunWithBackgroundPriority</B> + Enabled="false"/><BR> <<B>LockDirectoriesDuringSync</B> + Enabled="true"/><BR> <<B>VerifyCopiedFiles</B> + Enabled="false"/><BR> <<B>LastSyncsLogSizeMax</B> + Bytes="100000"/></FONT></P> +</SPAN><BR CLEAR=LEFT><BR> +</P> +<P STYLE="margin-bottom: 0cm"><BR> +</P> +<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>FileTimeTolerance:</B></FONT><BR><FONT FACE="Tahoma, sans-serif">By +default file modification</FONT> <FONT FACE="Tahoma, sans-serif">times +are allowed to have a 2 second difference while still being +considered equal. This is required by FAT/FAT32 file systems which +store file times with a 2 second precision only.<BR>This setting +can also be used to simulate a "compare by file size", +ignoring last modification times: If tolerance is set to some high +value, e.g. 2.000.000.000, then changed files will be detected as a +conflict (same date, different file size) and the +synchronization direction for conflicts can be set accordingly.</FONT></P> +<P STYLE="margin-bottom: 0cm"><BR> +</P> +<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>RunWithBackgroundPriority:</B></FONT><BR><FONT FACE="Tahoma, sans-serif">While +synchronization is running, other applications which are accessing the same +data locations may experience a noticeable slowdown. Enable this +setting to lower FreeFileSync's resource consumption at the cost of a +significantly slower synchronization speed.</FONT></P> +<P STYLE="margin-bottom: 0cm"><BR> +</P> +<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>LockDirectoriesDuringSync:</B></FONT><BR><FONT FACE="Tahoma, sans-serif">In +order to avoid race conditions of multiple FreeFileSync instances +writing to the same folder at the same time, accesses are serialized +by lock files ("</FONT><FONT FACE="Courier New, monospace">sync.ffs_lock</FONT><FONT FACE="Tahoma, sans-serif">"). +This allows to operate FreeFileSync with an arbitrary number of users +in a network out of the box.</FONT></P> +<P STYLE="margin-bottom: 0cm"><BR> +</P> +<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>VerifyCopiedFiles:</B></FONT><BR><FONT FACE="Tahoma, sans-serif">If +active FreeFileSync will binary-compare source and target files after +copying and report verification errors. Note that this may double +file copy times and is no guarantee that data has not already been +corrupted prior to copying and corruption is not hidden by +deceptively reading valid data from various buffers in the +application and hardware stack.</FONT><BR><A HREF="http://blogs.msdn.com/b/oldnewthing/archive/2012/09/19/10350645.aspx"><FONT FACE="Tahoma, sans-serif">Does +the CopyFile function verify that the data reached its final +destination successfully?</FONT></A></P> +<P STYLE="margin-bottom: 0cm"><BR> +</P> +<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>LastSyncsLogSizeMax:<BR></B></FONT><FONT FACE="Tahoma, sans-serif">The +progress logs of the most recent synchronizations (for both GUI and +batch jobs) are collected automatically in the file "</FONT><FONT FACE="Courier New, monospace">LastSyncs.log</FONT><FONT FACE="Tahoma, sans-serif">". +The maximum size of this log file can be set here.</FONT></P> +</BODY> +</HTML>
\ No newline at end of file diff --git a/BUILD/Help/html/External Applications.html b/BUILD/Help/html/External Applications.html index 74bb73c3..74e5fd0a 100644 --- a/BUILD/Help/html/External Applications.html +++ b/BUILD/Help/html/External Applications.html @@ -16,7 +16,6 @@ P { margin-bottom: 0.21cm } H2.cjk { font-family: "SimSun" } H2.ctl { font-family: "Mangal" } - A:link { so-language: zxx } --> </STYLE> </HEAD> @@ -39,8 +38,8 @@ first entry is executed when double-clicking a row or pressing ENTER on main grid while all other entries can only be accessed via the context menu shown after a right-click. The following internal macros are available:</FONT></P> -<P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen3" DIR="LTR" STYLE="float: left; width: 80%; height: 0.14cm; border: none; padding: 0cm; background: #e6e6e6"> - <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-right: 0.98cm; margin-bottom: 0cm"> +<P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen3" DIR="LTR" STYLE="float: left; width: 80%; border: none; padding: 0cm; background: #e6e6e6"> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"> <FONT FACE="Courier New, monospace">%item_path% - <FONT FACE="Tahoma, sans-serif">full file or folder name</FONT><BR>%item_folder% - <FONT FACE="Tahoma, sans-serif">folder @@ -69,8 +68,8 @@ are available:</FONT></P> console dialog:<BR><FONT FACE="Courier New, monospace">cmd /k cd /D "%item_folder%"<BR> </FONT></FONT></P> </UL> -<P STYLE="margin-left: 1.46cm; margin-bottom: 0cm"><SPAN ID="Rahmen1" DIR="LTR" STYLE="float: left; width: 80%; height: 0.14cm; border: 1px solid #000080; padding: 0.05cm; background: #ccccff"> - <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-right: 0.98cm; margin-bottom: 0cm"> +<P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen1" DIR="LTR" STYLE="float: left; width: 80%; border: 1px solid #000080; padding: 0.05cm; background: #ccccff"> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"> <FONT FACE="Tahoma, sans-serif"><B>Note</B><BR>Don't forget to use quotation marks if file names contain spaces!</FONT></P> </SPAN><BR CLEAR=LEFT><BR> diff --git a/BUILD/Help/html/FreeFileSync.html b/BUILD/Help/html/FreeFileSync.html index 2582efa9..e22a47c0 100644 --- a/BUILD/Help/html/FreeFileSync.html +++ b/BUILD/Help/html/FreeFileSync.html @@ -18,7 +18,6 @@ H3.western { font-family: "Arial", sans-serif } H3.cjk { font-family: "MS Mincho" } H3.ctl { font-family: "Mangal" } - A:link { so-language: zxx } --> </STYLE> </HEAD> diff --git a/BUILD/Help/html/Links.html b/BUILD/Help/html/Links.html index aef94d23..125a8f2b 100644 --- a/BUILD/Help/html/Links.html +++ b/BUILD/Help/html/Links.html @@ -12,21 +12,20 @@ P { margin-bottom: 0.21cm } H2.cjk { font-family: "SimSun" } H2.ctl { font-family: "Mangal" } - A:link { so-language: zxx } --> </STYLE> </HEAD> <BODY LANG="de-DE" DIR="LTR"> <H2 CLASS="western"><FONT FACE="Tahoma, sans-serif"><FONT SIZE=4 STYLE="font-size: 15pt">FreeFileSync Links</FONT></FONT></H2> -<P STYLE="margin-bottom: 0cm"><SPAN ID="Rahmen3" DIR="LTR" STYLE="float: left; width: 80%; height: 0.14cm; border: 1px solid #000080; padding: 0.05cm; background: #ccccff"> - <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-right: 0.98cm; margin-bottom: 0cm"> +<P STYLE="margin-bottom: 0cm"><SPAN ID="Rahmen3" DIR="LTR" STYLE="float: left; width: 80%; border: 1px solid #000080; padding: 0.05cm; background: #ccccff"> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"> <FONT FACE="Tahoma, sans-serif"><B>Homepage:</B></FONT><FONT FACE="Tahoma, sans-serif"><BR></FONT><A HREF="http://freefilesync.sourceforge.net/"><FONT COLOR="#000080"><FONT FACE="Tahoma, sans-serif"><SPAN LANG="zxx"><U>http://freefilesync.sourceforge.net</U></SPAN></FONT></FONT></A></P> - <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-right: 0.98cm; margin-bottom: 0cm"> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"> <FONT FACE="Tahoma, sans-serif"><B>Project on SourceForge:</B></FONT><FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-weight: normal"> feedback, suggestions and bug-reports</SPAN></FONT><FONT FACE="Tahoma, sans-serif"><B><BR></B></FONT><A HREF="http://sourceforge.net/projects/freefilesync"><FONT FACE="Tahoma, sans-serif">http://sourceforge.net/projects/freefilesync</FONT></A></P> - <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-right: 0.98cm; margin-bottom: 0cm"> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"> <FONT FACE="Tahoma, sans-serif"><B>If you like FreeFileSync consider supporting the project by a donation:<BR></B></FONT><A HREF="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=zenju@gmx.de&no_shipping=1&lc=US&currency_code=EUR"><FONT FACE="Tahoma, sans-serif">Donate via PayPal</FONT></A></P> diff --git a/BUILD/Help/html/Macros.html b/BUILD/Help/html/Macros.html index 1716f43c..c93b2373 100644 --- a/BUILD/Help/html/Macros.html +++ b/BUILD/Help/html/Macros.html @@ -3,26 +3,25 @@ <HEAD> <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=windows-1252"> <TITLE></TITLE> - <META NAME="GENERATOR" CONTENT="LibreOffice 4.0.1.2 (Windows)"> + <META NAME="GENERATOR" CONTENT="LibreOffice 4.0.2.2 (Windows)"> <META NAME="CREATED" CONTENT="20091206;16574000"> - <META NAME="CHANGED" CONTENT="20130330;15403796"> + <META NAME="CHANGED" CONTENT="20130418;21351827"> <META NAME="Info 1" CONTENT=""> <META NAME="Info 2" CONTENT=""> <META NAME="Info 3" CONTENT=""> <META NAME="Info 4" CONTENT=""> <STYLE TYPE="text/css"> <!-- - @page { size: 21cm 29.7cm; margin: 2cm } + @page { margin: 2cm } P { margin-bottom: 0.21cm } - H2 { margin-bottom: 0.21cm; page-break-after: avoid } - H2.western { font-family: "Times New Roman", serif; font-size: 18pt; font-weight: bold } - H2.cjk { font-family: "SimSun"; font-size: 18pt; font-weight: bold } - H2.ctl { font-family: "Mangal"; font-size: 18pt; font-weight: bold } - A:link { color: #000080; so-language: zxx; text-decoration: underline } + H2 { margin-bottom: 0.21cm } + H2.western { font-family: "Times New Roman", serif } + H2.cjk { font-family: "SimSun" } + H2.ctl { font-family: "Mangal" } --> </STYLE> </HEAD> -<BODY LANG="de-DE" LINK="#000080" VLINK="#800000" DIR="LTR"> +<BODY LANG="de-DE" DIR="LTR"> <H2 CLASS="western"><FONT FACE="Tahoma, sans-serif"><FONT SIZE=4 STYLE="font-size: 15pt">Macros</FONT></FONT></H2> <P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">All directory names may contain macros that are expanded during @@ -36,27 +35,29 @@ also be used.</FONT></P> <P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Internal macros:</B></FONT></P> <P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen2" DIR="LTR" STYLE="float: left; width: 80%; height: 0.14cm; border: none; padding: 0cm; background: #e6e6e6"> - <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-right: 0.98cm; margin-bottom: 0cm"> - <FONT FACE="Tahoma, sans-serif"><FONT FACE="Courier New, monospace">%date% - - </FONT>format [YYYY-MM-DD], e. g. "<FONT FACE="Courier New, monospace">2012-12-22</FONT>"<BR><FONT FACE="Courier New, monospace">%time% - - </FONT>format [hhmmss], e. g. "<FONT FACE="Courier New, monospace">123044</FONT>"<BR><FONT FACE="Courier New, monospace">%timestamp% - - </FONT>format [YYYY-MM-DD hhmmss], e. g. "<FONT FACE="Courier New, monospace">2012-12-22 - 123044</FONT>"<BR><BR><FONT FACE="Courier New, monospace">%year% - - </FONT>e. g. "<FONT FACE="Courier New, monospace">2012</FONT>"<BR><FONT FACE="Courier New, monospace">%month% - - </FONT>e. g. "<FONT FACE="Courier New, monospace">12</FONT>"<BR><FONT FACE="Courier New, monospace">%day% - - </FONT>e. g. "<FONT FACE="Courier New, monospace">22</FONT>"<BR><BR><FONT FACE="Courier New, monospace">%hour% - - </FONT>e. g. "<FONT FACE="Courier New, monospace">12</FONT>"<BR><FONT FACE="Courier New, monospace">%min% - - </FONT>e. g. "<FONT FACE="Courier New, monospace">30</FONT>"<BR><FONT FACE="Courier New, monospace">%sec% - - </FONT>e. g. "<FONT FACE="Courier New, monospace">44</FONT>"<BR><BR><FONT FACE="Courier New, monospace">%weekday% - - </FONT>day of the week, e. g. "<FONT FACE="Courier New, monospace">Monday</FONT>"<BR><FONT FACE="Courier New, monospace">%week% - - </FONT>calendar week, e. g. "<FONT FACE="Courier New, monospace">28</FONT>"</FONT></P> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><FONT FACE="Courier New, monospace">%date% + </FONT>e. g. <FONT FACE="Courier New, monospace">2012-12-22 </FONT>format + [YYYY-MM-DD] <BR><FONT FACE="Courier New, monospace">%time% + </FONT>e. g. <FONT FACE="Courier New, monospace">123044 </FONT>format + [hhmmss] <BR><FONT FACE="Courier New, monospace">%timestamp% + </FONT>e. g. <FONT FACE="Courier New, monospace">2012-12-22 + 123044 </FONT>format [YYYY-MM-DD hhmmss] <BR><BR><FONT FACE="Courier New, monospace">%year% + </FONT>e. g. <FONT FACE="Courier New, monospace">2012</FONT><BR><FONT FACE="Courier New, monospace">%month% + </FONT>e. g. <FONT FACE="Courier New, monospace">12</FONT><BR><FONT FACE="Courier New, monospace">%day% + </FONT>e. g. <FONT FACE="Courier New, monospace">22</FONT><BR><BR><FONT FACE="Courier New, monospace">%hour% + </FONT>e. g. <FONT FACE="Courier New, monospace">12</FONT><BR><FONT FACE="Courier New, monospace">%min% + </FONT>e. g. <FONT FACE="Courier New, monospace">30</FONT><BR><FONT FACE="Courier New, monospace">%sec% + </FONT>e. g. <FONT FACE="Courier New, monospace">44</FONT><BR><BR><FONT FACE="Courier New, monospace">%weekday% + </FONT>e. g. <FONT FACE="Courier New, monospace">Monday </FONT>day + of the week <BR><FONT FACE="Courier New, monospace">%week% + </FONT>e. g. <FONT FACE="Courier New, monospace">28 </FONT>calendar + week</FONT></P> </SPAN><BR CLEAR=LEFT><BR> </P> <P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Environment variables: </B><SPAN STYLE="font-weight: normal">(Windows)</SPAN></FONT></P> <P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen4" DIR="LTR" STYLE="float: left; width: 80%; height: 0.14cm; border: none; padding: 0cm; background: #e6e6e6"> - <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-right: 0.98cm; margin-bottom: 0cm"> - <FONT FACE="Tahoma, sans-serif"><FONT FACE="Courier New, monospace">%AllUsersProfile% </FONT>e. + <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><FONT FACE="Courier New, monospace">%AllUsersProfile% </FONT>e. g. <FONT FACE="Courier New, monospace">C:\ProgramData<BR>%AppData% </FONT>e. g. <FONT FACE="Courier New, monospace">C:\Users\<username>\AppData\Roaming<BR>%ComputerName% </FONT>e. g. <FONT FACE="Courier New, monospace">Zenju-PC<BR>%LocalAppData% </FONT>e. @@ -77,10 +78,9 @@ variables: </B><SPAN STYLE="font-weight: normal">(Windows)</SPAN></FONT></P> <P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Special folder locations </B><SPAN STYLE="font-weight: normal">(Windows)</SPAN></FONT></P> <P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen6" DIR="LTR" STYLE="float: left; width: 80%; height: 0.14cm; border: none; padding: 0cm; background: #e6e6e6"> - <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-right: 0.98cm; margin-bottom: 0cm"> - <FONT FACE="Tahoma, sans-serif"><FONT FACE="Courier New, monospace">%csidl_Desktop% </FONT>e. - g. <FONT FACE="Courier New, monospace">C:\Users\<username>\Desktop<BR>%csidl_D</FONT><FONT FACE="Courier New, monospace">ownloads</FONT><FONT FACE="Courier New, monospace">% </FONT>e. - g. <FONT FACE="Courier New, monospace">C:\Users\<username>\D</FONT><FONT FACE="Courier New, monospace">ownloads</FONT><FONT FACE="Courier New, monospace"><BR>%csidl_Favorites% </FONT>e. + <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><FONT FACE="Courier New, monospace">%csidl_Desktop% </FONT>e. + g. <FONT FACE="Courier New, monospace">C:\Users\<username>\Desktop<BR>%csidl_Downloads% </FONT>e. + g. <FONT FACE="Courier New, monospace">C:\Users\<username>\Downloads<BR>%csidl_Favorites% </FONT>e. g. <FONT FACE="Courier New, monospace">C:\Users\<username>\Favorites<BR>%csidl_MyDocuments% </FONT>e. g. <FONT FACE="Courier New, monospace">C:\Users\<username>\Documents<BR>%csidl_MyMusic% </FONT>e. g. <FONT FACE="Courier New, monospace">C:\Users\<username>\Music<BR>%csidl_MyPictures% </FONT>e. @@ -89,9 +89,9 @@ folder locations </B><SPAN STYLE="font-weight: normal">(Windows)</SPAN></FONT></ g. <FONT FACE="Courier New, monospace">C:\Users\<username>\AppData\Roaming\Microsoft\Windows\Network Shortcuts<BR>%csidl_Programs% </FONT>e. g. <FONT FACE="Courier New, monospace">C:\Users\<username>\AppData\Roaming\Microsoft\Windows\Start - Menu\Programs<BR>%csidl_</FONT><FONT FACE="Courier New, monospace">Quicklaunch</FONT><FONT FACE="Courier New, monospace">% </FONT>e. - g. <FONT FACE="Courier New, monospace">C:\Users\<username>\AppData\Roaming\Microsoft\Internet - Explorer\Quick Launch</FONT><FONT FACE="Courier New, monospace"><BR>%csidl_Resources% </FONT>e. + Menu\Programs<BR>%csidl_Quicklaunch% </FONT>e. g. + <FONT FACE="Courier New, monospace">C:\Users\<username>\AppData\Roaming\Microsoft\Internet + Explorer\Quick Launch<BR>%csidl_Resources% </FONT>e. g. <FONT FACE="Courier New, monospace">C:\Windows\Resources<BR>%csidl_StartMenu% </FONT>e. g. <FONT FACE="Courier New, monospace">C:\Users\<username>\AppData\Roaming\Microsoft\Windows\Start Menu<BR>%csidl_Startup% </FONT>e. g. @@ -105,19 +105,7 @@ E.g. <FONT FACE="Courier New, monospace">csidl_MyMusic</FONT> → </P> <P STYLE="margin-bottom: 0cm"><BR> </P> -<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Example:</B></FONT></P> -<P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen1" DIR="LTR" STYLE="float: left; width: 80%; height: 0.14cm; border: none; padding: 0cm; background: #e6e6e6"> - <UL> - <LI><P ALIGN=LEFT STYLE="margin-right: 0.98cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><FONT FACE="Courier New, monospace">C:\Backup\%username%_Config </FONT>expands - to<FONT FACE="Courier New, monospace"><BR>C:\Backup\Zenju_Config</FONT></FONT></P> - <LI><P ALIGN=LEFT STYLE="margin-right: 0.98cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><FONT FACE="Courier New, monospace">%appdata%\FreeFileSync </FONT>expands - to<FONT FACE="Courier New, monospace"><BR>C:\Documents and - Settings\Zenju\Application Data\FreeFileSync</FONT></FONT></P> - </UL> -</SPAN><BR CLEAR=LEFT><BR> -</P> -<P STYLE="margin-bottom: 0cm"><BR> -</P> + <P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Hint:</B></FONT></P> <P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">You can add a great amount of flexibility to batch synchronization @@ -131,8 +119,7 @@ The FreeFileSync batch file <FONT FACE="Courier New, monospace">C:\SyncJob.ffs_b </FONT>instead of an absolute target folder and is invoked by a *.cmd file:</FONT></P> <P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen5" DIR="LTR" STYLE="float: left; width: 80%; height: 0.14cm; border: none; padding: 0cm; background: #e6e6e6"> - <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-right: 0.98cm; margin-bottom: 0cm"> - <FONT FACE="Tahoma, sans-serif"><FONT FACE="Courier New, monospace">set + <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><FONT FACE="Courier New, monospace">set MyVar=C:\Target<BR>"C:\Program files\FreeFileSync\FreeFileSync.exe" C:\SyncJob.ffs_batch<BR></FONT><FONT COLOR="#808080"><FONT FACE="Courier New, monospace"><I><B>::%MyVar% @@ -141,10 +128,8 @@ file:</FONT></P> </P> <P STYLE="margin-bottom: 0cm"><BR> </P> -<UL> <P><SPAN ID="Rahmen3" DIR="LTR" STYLE="float: left; width: 80%; height: 0.14cm; border: 1px solid #000080; padding: 0.05cm; background: #ccccff"> - <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-right: 0.98cm; margin-bottom: 0cm"> - <FONT FACE="Tahoma, sans-serif"><B>Note</B><BR>Temporary + <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Note</B><BR>Temporary environment variables created with the "<FONT FACE="Courier New, monospace">set</FONT>" command are only valid if the batch job is started by calling the executable directly! Using "<FONT FACE="Courier New, monospace">start @@ -152,6 +137,5 @@ file:</FONT></P> program context without these temporal variables.</FONT></P> </SPAN><BR CLEAR=LEFT> </P> -</UL> </BODY> </HTML>
\ No newline at end of file diff --git a/BUILD/Help/html/RealtimeSync.html b/BUILD/Help/html/RealtimeSync.html index ed28df7a..c147a60e 100644 --- a/BUILD/Help/html/RealtimeSync.html +++ b/BUILD/Help/html/RealtimeSync.html @@ -18,7 +18,6 @@ H3.western { font-family: "Arial", sans-serif } H3.cjk { font-family: "MS Mincho" } H3.ctl { font-family: "Mangal" } - A:link { so-language: zxx } --> </STYLE> </HEAD> @@ -52,16 +51,15 @@ Now press </FONT><FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-style: normal </UL> <P STYLE="margin-bottom: 0cm"><BR> </P> -<P STYLE="margin-left: 1.46cm; margin-bottom: 0cm"><SPAN ID="Rahmen1" DIR="LTR" STYLE="float: left; width: 80%; height: 0.14cm; border: 1px solid #000080; padding: 0.05cm; background: #ccccff"> - <UL> - <P ALIGN=LEFT STYLE="margin-right: 0.98cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Note</B></FONT></P> - <LI><P ALIGN=LEFT STYLE="margin-right: 0.98cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">The +<P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen1" DIR="LTR" STYLE="float: left; width: 80%; border: 1px solid #000080; padding: 0.05cm; background: #ccccff"> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Note</B></FONT></P> + <LI><P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">The command should </FONT><FONT FACE="Tahoma, sans-serif"><B>not</B></FONT> <FONT FACE="Tahoma, sans-serif"><B>block</B></FONT> <FONT FACE="Tahoma, sans-serif">progress. Make sure the FreeFileSync batch job does not show any popup dialogs. See notes in <A HREF="Batch%20Scripting.html">Batch Scripting</A>.</FONT><SPAN STYLE="text-decoration: none"><FONT FACE="Tahoma, sans-serif"><BR> </FONT></SPAN></P> - <LI><P ALIGN=LEFT STYLE="margin-right: 0.98cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">The + <LI><P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">The settings dialog can be skipped by passing a RealtimeSync configuration file (<FONT FACE="Courier New, monospace">*.ffs_real</FONT>) <B>or</B> a FreeFileSync batch file (<FONT FACE="Courier New, monospace">*.ffs_batch</FONT>) @@ -71,11 +69,10 @@ Now press </FONT><FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-style: normal Files\FreeFileSync\RealtimeSync.exe" "C:\SyncJob.ffs_real"<BR></FONT> <FONT FACE="Courier New, monospace">"C:\Program Files\FreeFileSync\RealtimeSync.exe" "C:\SyncJob.ffs_batch"</FONT><BR> </FONT></P> - <LI><P ALIGN=LEFT STYLE="margin-right: 0.98cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Using + <LI><P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Using RealtimeSync is not restricted to starting FreeFileSync. It can also be used in other scenarios, like sending an email whenever a certain directory is modified.</FONT></P> - </UL> </SPAN><BR CLEAR=LEFT><BR> </P> <P STYLE="margin-bottom: 0cm"><BR> @@ -101,47 +98,41 @@ files are modified in "</FONT><FONT FACE="Courier New, monospace">H:\Data</ </P> <P STYLE="margin-bottom: 0cm"><BR> </P> -<P STYLE="margin-left: 1.46cm; margin-bottom: 0cm"><SPAN ID="Rahmen2" DIR="LTR" STYLE="float: left; width: 80%; height: 0.14cm; border: 1px solid #000080; padding: 0.05cm; background: #ccccff"> - <UL> - <P ALIGN=LEFT STYLE="margin-right: 0.98cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Note<BR></B></FONT><FONT FACE="Tahoma, sans-serif">The +<P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen2" DIR="LTR" STYLE="float: left; width: 80%; border: 1px solid #000080; padding: 0.05cm; background: #ccccff"> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Note<BR></B></FONT><FONT FACE="Tahoma, sans-serif">The full path of the last changed file and the action that triggered the change notification (create, update or delete) are </FONT><SPAN STYLE="text-decoration: none"><FONT FACE="Tahoma, sans-serif">written to the environment variables </FONT></SPAN><SPAN STYLE="text-decoration: none"><FONT FACE="Courier New, monospace"><B>%change_path%</B></FONT></SPAN><SPAN STYLE="text-decoration: none"> </SPAN><SPAN STYLE="text-decoration: none"><FONT FACE="Tahoma, sans-serif">and </FONT></SPAN><SPAN STYLE="text-decoration: none"><FONT FACE="Courier New, monospace"><B>%change_action%</B></FONT></SPAN><SPAN STYLE="text-decoration: none"><FONT FACE="Courier New, monospace">.</FONT></SPAN></P> - </UL> </SPAN><BR CLEAR=LEFT><BR> </P> <P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Example:</B></FONT> <FONT FACE="Tahoma, sans-serif">Show names of changed files or directories. (Windows)</FONT></P> -<UL> - <P><SPAN ID="Rahmen4" DIR="LTR" STYLE="float: left; width: 80%; height: 0.14cm; border: none; padding: 0cm; background: #e6e6e6"> - <UL> - <P ALIGN=LEFT STYLE="margin-right: 0.98cm; margin-bottom: 0cm"><FONT FACE="Courier New, monospace"><FONT FACE="Tahoma, sans-serif">Show + + <P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen4" DIR="LTR" STYLE="float: left; width: 80%; border: none; padding: 0cm; background: #e6e6e6"> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Courier New, monospace"><FONT FACE="Tahoma, sans-serif">Show which file or directory has triggered a change. Enter command line:</FONT><BR> cmd /c echo %change_action% "%change_path%" & pause<BR><BR><FONT FACE="Tahoma, sans-serif">Write a list of all changes to a logfile:</FONT><BR> cmd /c echo %change_action% "%change_path%" >> c:\log.txt</FONT></P> - </UL> </SPAN><BR CLEAR=LEFT> </P> -</UL> + <P STYLE="margin-bottom: 0cm"><BR> </P> -<P STYLE="margin-left: 1.46cm; margin-bottom: 0cm"><SPAN ID="Rahmen5" DIR="LTR" STYLE="float: left; width: 80%; height: 0.14cm; border: 1px solid #000080; padding: 0.05cm; background: #ccccff"> - <UL> - <P ALIGN=LEFT STYLE="margin-right: 0.98cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Note<BR></B></FONT><FONT FACE="Tahoma, sans-serif">During +<P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen5" DIR="LTR" STYLE="float: left; width: 80%; border: 1px solid #000080; padding: 0.05cm; background: #ccccff"> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Note<BR></B></FONT><FONT FACE="Tahoma, sans-serif">During execution of a Windows Batch file (*.bat/*.cmd) a black console window is shown. You can hide it using the Visual Basic script "HideConsole.vbs" located in FreeFileSync's installation directory:</FONT></P> - <P ALIGN=LEFT STYLE="margin-right: 0.98cm; margin-bottom: 0cm"><FONT FACE="Courier New, monospace"><B>wscript + <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Courier New, monospace"><B>wscript "C:\Program files\FreeFileSync\HideConsole.vbs" C:\MyBatchFile.cmd</B></FONT></P> - </UL> </SPAN><BR CLEAR=LEFT><BR> </P> <P STYLE="margin-bottom: 0cm"><BR> diff --git a/BUILD/Help/html/Run as Service.html b/BUILD/Help/html/Run as Service.html index c00f2c71..2a853717 100644 --- a/BUILD/Help/html/Run as Service.html +++ b/BUILD/Help/html/Run as Service.html @@ -16,13 +16,12 @@ P { margin-bottom: 0.21cm } H2.cjk { font-family: "SimSun" } H2.ctl { font-family: "Mangal" } - A:link { so-language: zxx } --> </STYLE> </HEAD> <BODY LANG="en-US" DIR="LTR"> <H2 CLASS="western"><FONT FACE="Tahoma, sans-serif"><FONT SIZE=4 STYLE="font-size: 15pt">Run -as Service <SPAN STYLE="font-weight: normal">(Windows)</SPAN></FONT></FONT></H2> +as service <SPAN STYLE="font-weight: normal">(Windows)</SPAN></FONT></FONT></H2> <P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">RealtimeSync is designed as a background process which does not need further attention once it is running. Depending on your requirements there @@ -35,15 +34,15 @@ file></SPAN></SPAN></FONT></P> </P> <P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Example:</B></FONT></P> <UL> - <P STYLE="margin-right: 0.98cm"><SPAN ID="Rahmen2" DIR="LTR" STYLE="float: left; width: 80%; height: 0.14cm; border: none; padding: 0cm; background: #e6e6e6"> - <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-right: 0.98cm; margin-bottom: 0cm"> + <P ><SPAN ID="Rahmen2" DIR="LTR" STYLE="float: left; width: 80%; border: none; padding: 0cm; background: #e6e6e6"> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"> <FONT FACE="Courier New, monospace">"C:\Program Files\FreeFileSync\RealtimeSync.exe" "C:\some folder\SyncJob.ffs_real"</FONT></P> </SPAN><BR CLEAR=LEFT> </P> </UL> -<P STYLE="margin-right: 0.98cm"><BR><BR> +<P><BR><BR> </P> <OL> <LI><P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-style: normal"><SPAN STYLE="font-weight: normal">RealtimeSync diff --git a/BUILD/Help/html/Schedule a Batch Job.html b/BUILD/Help/html/Schedule a Batch Job.html index e0673c2d..c77dbaad 100644 --- a/BUILD/Help/html/Schedule a Batch Job.html +++ b/BUILD/Help/html/Schedule a Batch Job.html @@ -12,13 +12,11 @@ P { margin-bottom: 0.21cm } H2.cjk { font-family: "SimSun" } H2.ctl { font-family: "Mangal" } - A:link { so-language: zxx } --> </STYLE> </HEAD> <BODY LANG="de-DE" DIR="LTR"> -<H2 CLASS="western"><FONT FACE="Tahoma, sans-serif"><FONT SIZE=4 STYLE="font-size: 15pt">Schedule -a Batch Job</FONT></FONT></H2> +<H2 CLASS="western"><FONT FACE="Tahoma, sans-serif"><FONT SIZE=4 STYLE="font-size: 15pt">Schedule a batch job</FONT></FONT></H2> <OL> <LI><P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Create a new batch job via FreeFileSync's main dialog: </FONT><FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-style: normal"><B>Menu @@ -62,8 +60,8 @@ a Batch Job</FONT></FONT></H2> folder\SyncJob.ffs_batch"</FONT></FONT></FONT><FONT COLOR="#000000"><FONT SIZE=3><BR></FONT></FONT><IMG SRC="../img/win7scheduler.png" NAME="Grafik1" ALIGN=BOTTOM WIDTH=708 HEIGHT=284 BORDER=0></FONT></P> </UL> </OL> - <P STYLE="margin-bottom: 0cm"><SPAN ID="Rahmen2" DIR="LTR" STYLE="float: left; width: 80%; height: 0.14cm; border: 1px solid #000080; padding: 0.05cm; background: #ccccff"> - <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-right: 0.98cm; margin-bottom: 0cm"> + <P STYLE="margin-bottom: 0cm"><SPAN ID="Rahmen2" DIR="LTR" STYLE="float: left; width: 80%; border: 1px solid #000080; padding: 0.05cm; background: #ccccff"> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"> <FONT FACE="Tahoma, sans-serif"><B>Note</B></FONT><FONT FACE="Tahoma, sans-serif"><BR>Beginning with Windows Vista the "Program/script" always needs point to an executable file like "FreeFileSync.exe" even diff --git a/BUILD/Help/html/Synchronize with FTP.html b/BUILD/Help/html/Synchronize with FTP.html index cd623777..43cc5a1b 100644 --- a/BUILD/Help/html/Synchronize with FTP.html +++ b/BUILD/Help/html/Synchronize with FTP.html @@ -20,7 +20,6 @@ H3.ctl { font-family: "Mangal" } H2.cjk { font-family: "SimSun" } H2.ctl { font-family: "Mangal" } - A:link { so-language: zxx } --> </STYLE> </HEAD> @@ -43,8 +42,8 @@ drive letter:</FONT></P> <LI><P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Use the newly created drive as if it were a normal hard disk.</FONT></P> </UL> -<P STYLE="margin-left: 1.46cm; margin-bottom: 0cm"><SPAN ID="Rahmen1" DIR="LTR" STYLE="float: left; width: 80%; height: 0.14cm; border: 1px solid #000080; padding: 0.05cm; background: #ccccff"> - <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-right: 0.98cm; margin-bottom: 0cm"> +<P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen1" DIR="LTR" STYLE="float: left; width: 80%; border: 1px solid #000080; padding: 0.05cm; background: #ccccff"> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"> <FONT FACE="Tahoma, sans-serif"><B>Note</B><BR>Most FTP drives set a file's time stamp to the current time when synchronizing ignoring the source file's time and date. As a workaround you can do a @@ -62,16 +61,14 @@ SFTP <SPAN STYLE="font-weight: normal">(Linux)</SPAN></FONT></H3> <P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">An SFTP share can be easily mapped onto a local folder for use with FreeFileSync:</FONT></P> -<P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen5" DIR="LTR" STYLE="float: left; width: 80%; height: 0.14cm; border: none; padding: 0cm; background: #e6e6e6"> - <UL> - <LI><P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Install:</FONT><FONT FACE="Courier New, monospace"><BR>sudo +<P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen5" DIR="LTR" STYLE="float: left; width: 80%; border: none; padding: 0cm; background: #e6e6e6"> + <LI><P STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Install:</FONT><FONT FACE="Courier New, monospace"><BR>sudo apt-get install sshfs<BR> </FONT></P> - <LI><P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Mount + <LI><P STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Mount SFTP share:</FONT><FONT FACE="Courier New, monospace"><BR>sshfs ssh-account@ssh-server:<path> mountpoint<BR> </FONT></P> - <LI><P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Unmount:</FONT><FONT FACE="Courier New, monospace"><BR>fusermount + <LI><P STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Unmount:</FONT><FONT FACE="Courier New, monospace"><BR>fusermount -u mountpoint</FONT></P> - </UL> </SPAN><BR CLEAR=LEFT><BR> </P> </BODY> diff --git a/BUILD/Help/html/Variable Drive Letters.html b/BUILD/Help/html/Variable Drive Letters.html index 8bdc20b8..5d41c4ca 100644 --- a/BUILD/Help/html/Variable Drive Letters.html +++ b/BUILD/Help/html/Variable Drive Letters.html @@ -12,7 +12,6 @@ P { margin-bottom: 0.21cm } H2.cjk { font-family: "SimSun" } H2.ctl { font-family: "Mangal" } - A:link { so-language: zxx } --> </STYLE> </HEAD> @@ -20,30 +19,27 @@ <H2 CLASS="western"><FONT FACE="Tahoma, sans-serif"><FONT SIZE=4 STYLE="font-size: 15pt">Variable drive letters</FONT></FONT></H2> <P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">USB -sticks often get different volume names assigned when plugged into -different computers. FreeFileSync offers two solutions to handle this -issue:</FONT></P> +memory sticks or external hard disks are often assigned different drive letters when plugged into +distinct computers. FreeFileSync offers two solutions to handle this +problem:</FONT></P> <P STYLE="margin-bottom: 0cm"><BR> </P> <P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Option -1: </B>Specify a directory via volume name: Syntax: <FONT FACE="Courier New, monospace">[volume -name]\path</FONT></FONT></P> -<P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen5" DIR="LTR" STYLE="float: left; width: 80%; height: 0.14cm; border: none; padding: 0cm; background: #e6e6e6"> - <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-right: 0.98cm; margin-bottom: 0cm"> +1: </B>Specify a folder path by using the volume name:</FONT></P> +<P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen5" DIR="LTR" STYLE="float: left; width: 80%; border: none; padding: 0cm; background: #e6e6e6"> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"> <FONT FACE="Tahoma, sans-serif">Use "<FONT FACE="Courier New, monospace">[ZENJU-USB]\folder</FONT>" instead of "<FONT FACE="Courier New, monospace">G:\folder</FONT>" where "<FONT FACE="Courier New, monospace">ZENJU-USB</FONT>" - is the name of the USB stick that is currently mounted in volume + is the volume name of the USB stick which is currently mounted in drive G:\.</FONT></P> </SPAN><BR CLEAR=LEFT><BR> </P> -<P STYLE="margin-left: 1.46cm; margin-bottom: 0cm"><SPAN ID="Rahmen4" DIR="LTR" STYLE="float: left; width: 80%; height: 0.14cm; border: 1px solid #000080; padding: 0.05cm; background: #ccccff"> - <UL> - <P ALIGN=LEFT STYLE="margin-right: 0.98cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Note<BR></B>It +<P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen4" DIR="LTR" STYLE="float: left; width: 80%; border: 1px solid #000080; padding: 0.05cm; background: #ccccff"> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Note<BR></B>It is not required to look up and enter the volume name manually! Just select the corresponding entry in the drop down menu.</FONT></P> - <P ALIGN=LEFT STYLE="margin-right: 0.98cm; margin-bottom: 0cm"><IMG SRC="../img/VolumeName.png" NAME="Grafik1" ALIGN=BOTTOM WIDTH=424 HEIGHT=86 BORDER=0></P> - </UL> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><IMG SRC="../img/VolumeName.png" NAME="Grafik1" ALIGN=BOTTOM WIDTH=424 HEIGHT=86 BORDER=0></P> </SPAN><BR CLEAR=LEFT><BR> </P> <P STYLE="margin-bottom: 0cm"><BR> @@ -51,21 +47,19 @@ name]\path</FONT></FONT></P> <P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Option 2: </B></FONT><FONT FACE="Tahoma, sans-serif">Use a relative directory name:</FONT></P> -<P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen1" DIR="LTR" STYLE="float: left; width: 80%; height: 0.14cm; border: none; padding: 0cm; background: #e6e6e6"> - <UL> - <LI><P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Use +<P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen1" DIR="LTR" STYLE="float: left; width: 80%; border: none; padding: 0cm; background: #e6e6e6"> + <LI><P STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Use "</FONT><FONT FACE="Courier New, monospace">\folder</FONT><FONT FACE="Tahoma, sans-serif">" instead of "</FONT><FONT FACE="Courier New, monospace">G:\folder</FONT><FONT FACE="Tahoma, sans-serif">"<BR> </FONT></P> - <LI><P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Save + <LI><P STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Save and copy synchronization settings to the USB stick: "</FONT><FONT COLOR="#000000"><FONT FACE="Courier New, monospace"><FONT SIZE=3>G:\settings.ffs_gui"<BR> </FONT></FONT></FONT></P> - <LI><P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Start + <LI><P STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Start FreeFileSync by double-clicking on "</FONT><FONT FACE="Courier New, monospace">G:\settings.ffs_gui</FONT><FONT FACE="Tahoma, sans-serif">"<BR>→ Working directory is automatically set to "</FONT><FONT FACE="Courier New, monospace">G:\</FONT><FONT FACE="Tahoma, sans-serif">" by the operating system so that "</FONT><FONT FACE="Courier New, monospace">\folder</FONT><FONT FACE="Tahoma, sans-serif">" will be resolved as "</FONT><FONT FACE="Courier New, monospace">G:\folder</FONT><FONT FACE="Tahoma, sans-serif">" during synchronization.</FONT></P> - </UL> </SPAN><BR CLEAR=LEFT><BR> </P> </BODY> diff --git a/BUILD/Help/html/Versioning.html b/BUILD/Help/html/Versioning.html index 587c396b..e61ec43f 100644 --- a/BUILD/Help/html/Versioning.html +++ b/BUILD/Help/html/Versioning.html @@ -3,9 +3,9 @@ <HEAD> <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=windows-1252"> <TITLE></TITLE> - <META NAME="GENERATOR" CONTENT="OpenOffice.org 3.4.1 (Win32)"> + <META NAME="GENERATOR" CONTENT="LibreOffice 4.0.2.2 (Windows)"> <META NAME="CREATED" CONTENT="20091206;16574000"> - <META NAME="CHANGED" CONTENT="20130206;20140180"> + <META NAME="CHANGED" CONTENT="20130422;11473939"> <META NAME="Info 1" CONTENT=""> <META NAME="Info 2" CONTENT=""> <META NAME="Info 3" CONTENT=""> @@ -16,13 +16,12 @@ P { margin-bottom: 0.21cm } H2.cjk { font-family: "SimSun" } H2.ctl { font-family: "Mangal" } - A:link { so-language: zxx } --> </STYLE> </HEAD> <BODY LANG="en-US" DIR="LTR"> <H2 CLASS="western"><FONT FACE="Tahoma, sans-serif"><FONT SIZE=4 STYLE="font-size: 15pt">File -Versioning</FONT></FONT></H2> +versioning</FONT></FONT></H2> <P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">When you need to preserve files that have been deleted or overwritten it's often sufficient to select <B>Recycle Bin</B> in synchronization @@ -34,19 +33,19 @@ FreeFileSync therefore has an additional option, <B>Versioning</B>.</FONT></P> <P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>1. Keep all versions of old files</B></FONT></P> <P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">In -synchronization settings set both deletion handling and naming -convention to <B>Versioning</B>. FreeFileSync will move deleted files -into the provided folder and add a time stamp to each file name. The -structure of the synchronized folders is preserved so that old -versions of a file can be conveniently accessed via a file browser.</FONT></P> +synchronization settings set deletion handling to <B>Versioning</B> +and naming convention to <B>Time stamp</B>. FreeFileSync will move +deleted files into the provided folder and add a time stamp to each +file name. The structure of the synchronized folders is preserved so +that old versions of a file can be conveniently accessed via a file +browser.</FONT></P> <P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Example: </B></FONT><FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-weight: normal">A file "</SPAN></FONT><FONT FACE="Courier New, monospace"><SPAN STYLE="font-weight: normal">Folder\File.txt</SPAN></FONT><FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-weight: normal">" was updated three times and old versions were moved to folder "</SPAN></FONT><FONT FACE="Courier New, monospace"><SPAN STYLE="font-weight: normal">C:\Revisions</SPAN></FONT><FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-weight: normal">"</SPAN></FONT></P> -<P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen1" DIR="LTR" STYLE="float: left; width: 80%; height: 0.14cm; border: none; padding: 0cm; background: #e6e6e6"> - <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-right: 0.98cm; margin-bottom: 0cm"> - <FONT FACE="Tahoma, sans-serif"><FONT FACE="Courier New, monospace">C:\Revisions\Folder\File.txt +<P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen1" DIR="LTR" STYLE="float: left; width: 80%; height: 0.04cm; border: none; padding: 0cm; background: #e6e6e6"> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><FONT FACE="Courier New, monospace">C:\Revisions\Folder\File.txt </FONT><FONT FACE="Courier New, monospace"><B>2012-12-12 111111</B></FONT><FONT FACE="Courier New, monospace">.txt<BR>C:\Revisions\Folder\File.txt </FONT><FONT FACE="Courier New, monospace"><B>2012-12-12 @@ -77,9 +76,8 @@ on a per sync session basis by adding the </FONT><FONT FACE="Tahoma, sans-serif" <P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Example: </B></FONT><FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-weight: normal">Using the dynamically generated folder name "</SPAN></FONT><FONT FACE="Courier New, monospace"><SPAN STYLE="font-weight: normal">C:\Revisions\%timestamp%</SPAN></FONT><FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-weight: normal">"</SPAN></FONT></P> -<P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen2" DIR="LTR" STYLE="float: left; width: 80%; height: 0.14cm; border: none; padding: 0cm; background: #e6e6e6"> - <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-right: 0.98cm; margin-bottom: 0cm"> - <FONT FACE="Tahoma, sans-serif"><FONT FACE="Courier New, monospace">C:\Revisions\</FONT><FONT FACE="Courier New, monospace"><B>2012-12-12 +<P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen2" DIR="LTR" STYLE="float: left; width: 80%; height: 0.04cm; border: none; padding: 0cm; background: #e6e6e6"> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><FONT FACE="Courier New, monospace">C:\Revisions\</FONT><FONT FACE="Courier New, monospace"><B>2012-12-12 111111</B></FONT><FONT FACE="Courier New, monospace">\Folder\File.txt<BR>C:\Revisions\</FONT><FONT FACE="Courier New, monospace"><B>2012-12-12 122222</B></FONT><FONT FACE="Courier New, monospace">\Folder\File.txt<BR>C:\Revisions\</FONT><FONT FACE="Courier New, monospace"><B>2012-12-12 133333</B></FONT><FONT FACE="Courier New, monospace">\Folder\File.txt</FONT></FONT></P> diff --git a/BUILD/Help/html/Volume Shadow Copy.html b/BUILD/Help/html/Volume Shadow Copy.html index ee4eef4a..24a3bd92 100644 --- a/BUILD/Help/html/Volume Shadow Copy.html +++ b/BUILD/Help/html/Volume Shadow Copy.html @@ -16,7 +16,6 @@ P { margin-bottom: 0.21cm } H2.cjk { font-family: "SimSun" } H2.ctl { font-family: "Mangal" } - A:link { so-language: zxx } --> </STYLE> </HEAD> @@ -27,17 +26,15 @@ Shadow Copy Service <SPAN STYLE="font-weight: normal">(Windows only)</SPAN></FON supports copying locked or shared files by creating a Volume Shadow Copy of the source drive. This feature can be configured via </FONT><FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-style: normal"><B>Menu → Advanced → Global settings: Copy locked files</B></SPAN></FONT><FONT FACE="Tahoma, sans-serif">.</FONT></P> -<P STYLE="margin-left: 1.46cm; margin-bottom: 0cm"><SPAN ID="Rahmen3" DIR="LTR" STYLE="float: left; width: 80%; height: 0.14cm; border: 1px solid #000080; padding: 0.05cm; background: #ccccff"> - <UL> - <P ALIGN=LEFT STYLE="margin-right: 0.98cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Note</B></FONT></P> - <LI><P ALIGN=LEFT STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">The +<P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen3" DIR="LTR" STYLE="float: left; width: 80%; border: 1px solid #000080; padding: 0.05cm; background: #ccccff"> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Note</B></FONT></P> + <LI><P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">The volume snapshot created by the Volume Shadow Copy Service is used when copying locked files only.</FONT></P> - <LI><P ALIGN=LEFT STYLE="margin-right: 0.98cm; margin-bottom: 0cm; font-style: normal"> + <LI><P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm; font-style: normal"> <FONT FACE="Tahoma, sans-serif">Accessing the Volume Shadow Copy Service requires FreeFileSync to be started with administrator rights.</FONT></P> - </UL> </SPAN><BR CLEAR=LEFT><BR> </P> <P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Troubleshooting</B></FONT></P> @@ -45,8 +42,8 @@ Copy of the source drive. This feature can be configured via </FONT><FONT FACE=" experience problems using the Volume Shadow Copy Service a renewal of registration might help. Create and execute a *.cmd batch file with the follow content or enter directly via command line:</FONT></P> -<P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen1" DIR="LTR" STYLE="float: left; width: 80%; height: 0.14cm; border: none; padding: 0cm; background: #e6e6e6"> - <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-right: 0.98cm; margin-bottom: 0cm"> +<P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen1" DIR="LTR" STYLE="float: left; width: 80%; border: none; padding: 0cm; background: #e6e6e6"> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"> <FONT FACE="Courier New, monospace">cd /d %windir%\system32<BR>Net stop vss<BR>Net stop swprv<BR>regsvr32 ole32.dll<BR>regsvr32 oleaut32.dll<BR>regsvr32 vss_ps.dll<BR>Vssvc /register<BR>regsvr32 @@ -55,7 +52,7 @@ the follow content or enter directly via command line:</FONT></P> msxml3.dll<BR>regsvr32 msxml4.dll</FONT></P> </SPAN><BR CLEAR=LEFT><BR> </P> -<P ALIGN=LEFT STYLE="margin-right: 0.98cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Reference: +<P ALIGN=LEFT STYLE=" margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Reference: <A HREF="http://support.microsoft.com/kb/940032">http://support.microsoft.com/kb/940032</A></FONT></P> </BODY> </HTML>
\ No newline at end of file diff --git a/BUILD/Languages/arabic.lng b/BUILD/Languages/arabic.lng index 5be24fe3..668ee713 100644 --- a/BUILD/Languages/arabic.lng +++ b/BUILD/Languages/arabic.lng @@ -19,6 +19,9 @@ <source>Total time:</source> <target>مجموع الوقت:</target> +<source>Cannot set directory lock for %x.</source> +<target></target> + <source>Show in Explorer</source> <target>إظهار ÙÙŠ المستكشÙ</target> @@ -61,6 +64,12 @@ <source>Clear filter settings</source> <target>Ù…Ø³Ø Ø¥Ø¹Ø¯Ø§Ø¯Ø§Øª عامل التصÙية</target> +<source>Copy</source> +<target>نسخ</target> + +<source>Paste</source> +<target></target> + <source>Save as batch job</source> <target>ØÙظ كمهمة دÙعية</target> @@ -164,9 +173,6 @@ <source>Waiting while directory is locked (%x)...</source> <target>ÙÙŠ انتظار تأمين Ù‚ÙÙ„ للمسار (%x)...</target> -<source>Cannot set directory lock %x.</source> -<target>لا يمكن تعيين Ù‚ÙÙ„ للمسار %x.</target> - <source>Creating file %x</source> <target>إنشاء المل٠%x</target> @@ -208,9 +214,6 @@ <source>/sec</source> <target>\ثانية</target> -<source>Cannot find file %x.</source> -<target>لا يمكن العثور على المل٠%x.</target> - <source>File %x does not contain a valid configuration.</source> <target>لا ÙŠØتوي المل٠%x تكويناً صØÙŠØاً.</target> @@ -235,6 +238,9 @@ <source>Cannot read the following XML elements:</source> <target>لا يمكن قراءة عناصر XML التالية:</target> +<source>Cannot find file %x.</source> +<target>لا يمكن العثور على المل٠%x.</target> + <source>&Open...</source> <target>&ÙتØ...</target> @@ -468,8 +474,14 @@ The command is triggered if: <source>&Advanced</source> <target>&متقدم</target> -<source>&Check for new version</source> -<target>&التØقق من وجود إصدار جديد</target> +<source>&Check now</source> +<target></target> + +<source>Check &automatically once a week</source> +<target></target> + +<source>Check for new version</source> +<target></target> <source>Compare</source> <target>قارن</target> @@ -615,8 +627,8 @@ is the same <source><- Two way -></source> <target><- بالاتجاهين -></target> -<source>Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically.</source> -<target>تØديد التغييرات ÙÙŠ كلا الجانبين باستخدام قواعد بيانات. Øيث يتم الكش٠عن عمليات الØذ٠وإعادة التسمية والاختلاÙات بشكل تلقائي.</target> +<source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> +<target></target> <source>Mirror ->></source> <target>انعكاس ->></target> @@ -654,15 +666,12 @@ is the same <source>Versioning</source> <target>الوسم برقم الإصدار</target> -<source>Move time-stamped files into specified folder</source> -<target>نقل الملÙات المØددة بختم زمني إلى المجلد المØدد</target> +<source>Move files to user-defined folder</source> +<target></target> <source>Naming convention:</source> <target>Ø§ØµØ·Ù„Ø§Ø Ø§Ù„ØªØ³Ù…ÙŠØ©:</target> -<source>Configuration</source> -<target>التكوين</target> - <source>Item exists on left side only</source> <target>العنصر موجود على الجانب الأيسر Ùقط</target> @@ -741,8 +750,8 @@ Note: File names must be relative to base directories! <source>Maximum</source> <target>الØد الأقصى</target> -<source>&Default</source> -<target>&الاÙتراضي</target> +<source>&Clear</source> +<target></target> <source>Fail-safe file copy</source> <target>نسخ ملÙات آمن من الÙشل</target> @@ -771,6 +780,9 @@ Note: File names must be relative to base directories! <source>Description</source> <target>الوصÙ</target> +<source>&Default</source> +<target>&الاÙتراضي</target> + <source>Start synchronization</source> <target>بدء المزامنة</target> @@ -804,6 +816,9 @@ Note: File names must be relative to base directories! <source>Overview</source> <target>نظرة عامة</target> +<source>Configuration</source> +<target>التكوين</target> + <source>Filter files</source> <target>تصÙية الملÙات</target> @@ -888,87 +903,45 @@ Note: File names must be relative to base directories! <source>Configuration loaded!</source> <target>تم ÙØªØ Ø§Ù„ØªÙƒÙˆÙŠÙ†!</target> -<source>Hide files that exist on left side only</source> -<target>إخÙاء الملÙات الموجودة ÙÙŠ الجانب الأيسر Ùقط</target> - <source>Show files that exist on left side only</source> <target>إظهار الملÙات الموجودة ÙÙŠ الجانب الأيسر Ùقط</target> -<source>Hide files that exist on right side only</source> -<target>إخÙاء الملÙات الموجودة ÙÙŠ الجانب الأيمن Ùقط</target> - <source>Show files that exist on right side only</source> <target>إظهار الملÙات الموجودة ÙÙŠ الجانب الأيمن Ùقط</target> -<source>Hide files that are newer on left</source> -<target>إخÙاء الملÙات الأØدث ÙÙŠ اليسار</target> - <source>Show files that are newer on left</source> <target>إظهار الملÙات الأØدث ÙÙŠ اليسار</target> -<source>Hide files that are newer on right</source> -<target>إخÙاء الملÙات الأØدث ÙÙŠ اليمين</target> - <source>Show files that are newer on right</source> <target>إظهار الملÙات الأØدث ÙÙŠ اليمين</target> -<source>Hide files that are equal</source> -<target>إخÙاء الملÙات المتماثلة على الطرÙين</target> - <source>Show files that are equal</source> <target>إظهار الملÙات المتماثلة على الطرÙين</target> -<source>Hide files that are different</source> -<target>إخÙاء الملÙات المختلÙØ© على الطرÙين</target> - <source>Show files that are different</source> <target>إظهار الملÙات المختلÙØ© على الطرÙين</target> -<source>Hide conflicts</source> -<target>إخÙاء الاختلاÙات</target> - <source>Show conflicts</source> <target>إظهار الاختلاÙات</target> -<source>Hide files that will be created on the left side</source> -<target>إخÙاء الملÙات التي سيتم إنشاؤها ÙÙŠ الجانب الأيسر</target> - <source>Show files that will be created on the left side</source> <target>إظهار الملÙات التي سيتم إنشاؤها ÙÙŠ الجانب الأيسر</target> -<source>Hide files that will be created on the right side</source> -<target>إخÙاء الملÙات التي سيتم إنشاؤها ÙÙŠ الجانب الأيمن</target> - <source>Show files that will be created on the right side</source> <target>إظهار الملÙات التي سيتم إنشاؤها ÙÙŠ الجانب الأيمن</target> -<source>Hide files that will be deleted on the left side</source> -<target>إخÙاء الملÙات التي سيتم ØØ°Ùها من الجانب الأيسر</target> - <source>Show files that will be deleted on the left side</source> <target>إظهار الملÙات التي سيتم ØØ°Ùها من من الجانب الأيسر</target> -<source>Hide files that will be deleted on the right side</source> -<target>إخÙاء الملÙات التي سيتم ØØ°Ùها من الجانب الأيمن</target> - <source>Show files that will be deleted on the right side</source> <target>إظهار الملÙات التي سيتم ØØ°Ùها من الجانب الأيمن</target> -<source>Hide files that will be overwritten on left side</source> -<target>إخÙاء الملÙات التي سيتم الكتابة Ùوقها ÙÙŠ الجانب الأيسر</target> - <source>Show files that will be overwritten on left side</source> <target>إظهار الملÙات التي سيتم الكتابة Ùوقها ÙÙŠ الجانب الأيسر</target> -<source>Hide files that will be overwritten on right side</source> -<target>إخÙاء الملÙات التي سيتم الكتابة Ùوقها ÙÙŠ الجانب الأيمن</target> - <source>Show files that will be overwritten on right side</source> <target>إظهار الملÙات التي سيتم الكتابة Ùوقها ÙÙŠ الجانب الأيمن</target> -<source>Hide files that won't be copied</source> -<target>إخÙاء الملÙات التي لن يتم نسخها</target> - <source>Show files that won't be copied</source> <target>إظهار الملÙات التي لن يتم نسخها</target> @@ -987,6 +960,9 @@ Note: File names must be relative to base directories! <source>File list exported!</source> <target>تم تصدير قائمة الملÙات!</target> +<source>Searching for program updates...</source> +<target></target> + <source> <pluralform>1 directory</pluralform> <pluralform>%x directories</pluralform> @@ -1032,6 +1008,9 @@ Note: File names must be relative to base directories! <source>&Ignore</source> <target>&تجاهل</target> +<source>Don't show this warning again</source> +<target></target> + <source>&Switch</source> <target>&تبديل</target> @@ -1050,9 +1029,6 @@ Note: File names must be relative to base directories! <source>Comparing content...</source> <target>مقارنة المØتوى...</target> -<source>Copy</source> -<target>نسخ</target> - <source>Paused</source> <target>تم الإيقا٠مؤقتاً</target> @@ -1135,34 +1111,23 @@ Note: File names must be relative to base directories! <target>جعل التØذيرات Ùˆ نواÙØ° الØوارات المخÙية مرئية من جديد؟</target> <source> -<pluralform>Do you really want to move the following object to the Recycle Bin?</pluralform> -<pluralform>Do you really want to move the following %x objects to the Recycle Bin?</pluralform> +<pluralform>Do you really want to move the following item to the Recycle Bin?</pluralform> +<pluralform>Do you really want to move the following %x items to the Recycle Bin?</pluralform> </source> -<target> -<pluralform>هل تريد Øقاً نقل ولا ملÙ</pluralform> -<pluralform>هل تريد Øقاً نقل هذا المل٠؟</pluralform> -<pluralform>هل تريد Øقاً نقل هذين الملÙين ØŸ</pluralform> -<pluralform>هل تريد Øقاً نقل هذه الـ %x ملÙاً ØŸ</pluralform> -<pluralform>هل تريد Øقاً نقل هذه الـ %x ملÙاً ØŸ</pluralform> -<pluralform>هل تريد Øقاً نقل هذه الـ %x ملÙاً ØŸ</pluralform> -</target> +<target></target> <source> -<pluralform>Do you really want to delete the following object?</pluralform> -<pluralform>Do you really want to delete the following %x objects?</pluralform> +<pluralform>Do you really want to delete the following item?</pluralform> +<pluralform>Do you really want to delete the following %x items?</pluralform> </source> -<target> -<pluralform>هل تريد Øقاً Øذ٠ولا ملÙ</pluralform> -<pluralform>هل تريد Øقاً Øذ٠هذا المل٠؟</pluralform> -<pluralform>هل تريد Øقاً Øذ٠هذين الملÙين ØŸ</pluralform> -<pluralform>هل تريد Øقاً Øذ٠هذه الـ %x ملÙاً ØŸ</pluralform> -<pluralform>هل تريد Øقاً Øذ٠هذه الـ %x ملÙاً ØŸ</pluralform> -<pluralform>هل تريد Øقاً Øذ٠هذه الـ %x ملÙاً ØŸ</pluralform> -</target> +<target></target> <source>Leave as unresolved conflict</source> <target>ترك كاختلاÙات من دون ØÙ„</target> +<source>Time stamp</source> +<target></target> + <source>Append a timestamp to each file name</source> <target>إلØاق طابع زمني اسم كل ملÙ</target> @@ -1346,20 +1311,23 @@ Note: File names must be relative to base directories! <source>Recycle Bin is not available for the following paths! Files will be deleted permanently instead:</source> <target>سلة المهملات غير متوÙر للمسارات التالية! سيتم Øذ٠الملÙات بشكل دائم بدلاً من ذلك:</target> -<source>You can ignore this error to consider each folder as empty.</source> -<target>بإمكانك تجاهل هذا الخطأ باعتبالا كل مجلد Ùˆ كأنه Ùارغ</target> +<source>The corresponding folder will be considered as empty.</source> +<target></target> <source>Cannot find the following folders:</source> <target>تعذر العثور على المجلدات التالية:</target> +<source>You can ignore this error to consider each folder as empty.</source> +<target>بإمكانك تجاهل هذا الخطأ باعتبالا كل مجلد Ùˆ كأنه Ùارغ</target> + <source>Directories are dependent! Be careful when setting up synchronization rules:</source> <target>المسارات تلعية! كن Øذراً عند إعداد قواعد المزامنة:</target> <source>Start comparison</source> <target>ابدأ المقارنة</target> -<source>Preparing synchronization...</source> -<target>تهيئة المزامنة...</target> +<source>Calculating sync directions...</source> +<target></target> <source>Conflict detected:</source> <target>تم الكش٠عن تعارض:</target> @@ -1502,6 +1470,9 @@ Note: File names must be relative to base directories! <source>Generating database...</source> <target>إنشاء قاعدة بيانات...</target> +<source>Creating Volume Shadow Copy for %x...</source> +<target></target> + <source>Data verification error: Source and target file have different content!</source> <target>خطأ تØقق بيانات: للمل٠المصدر والمل٠الهد٠مØتويات مختلÙØ©!</target> diff --git a/BUILD/Languages/chinese_simple.lng b/BUILD/Languages/chinese_simple.lng index 5c431691..3d0f0d25 100644 --- a/BUILD/Languages/chinese_simple.lng +++ b/BUILD/Languages/chinese_simple.lng @@ -19,6 +19,9 @@ <source>Total time:</source> <target>总共时间:</target> +<source>Cannot set directory lock for %x.</source> +<target></target> + <source>Show in Explorer</source> <target>在Explorerä¸æ˜¾ç¤º</target> @@ -40,6 +43,9 @@ <source>Error</source> <target>错误</target> +<source>Selected variant:</source> +<target></target> + <source>Select alternate comparison settings</source> <target>选择替æ¢çš„比较设置</target> @@ -58,6 +64,12 @@ <source>Clear filter settings</source> <target>清除过滤器设置</target> +<source>Copy</source> +<target>å¤åˆ¶</target> + +<source>Paste</source> +<target></target> + <source>Save as batch job</source> <target>å¦å˜ä¸ºæ‰¹å¤„ç†ä½œä¸š</target> @@ -97,11 +109,8 @@ <source>Fatal Error</source> <target>致命错误</target> -<source>Windows Error Code %x:</source> -<target>Windows错误代ç %x:</target> - -<source>Linux Error Code %x:</source> -<target>Linux错误代ç %x:</target> +<source>Error Code %x:</source> +<target></target> <source>Cannot resolve symbolic link %x.</source> <target>æ— æ³•è§£å†³ç¬¦å·è¿žæŽ¥ %x.</target> @@ -159,8 +168,8 @@ <source>Waiting while directory is locked (%x)...</source> <target>由于目录已é”定而æ£åœ¨ç‰å¾…(%x)...</target> -<source>Cannot set directory lock %x.</source> -<target>æ— æ³•è®¾ç½®ç›®å½•é”定 %x .</target> +<source>Creating file %x</source> +<target>æ£åœ¨åˆ›å»ºæ–‡ä»¶ %x</target> <source> <pluralform>1 sec</pluralform> @@ -190,9 +199,6 @@ <source>/sec</source> <target>/秒</target> -<source>Cannot find file %x.</source> -<target>æ— æ³•æ‰¾åˆ°æ–‡ä»¶ %x .</target> - <source>File %x does not contain a valid configuration.</source> <target>文件 %x 并未包å«åˆæ³•çš„é…ç½®.</target> @@ -217,6 +223,9 @@ <source>Cannot read the following XML elements:</source> <target>æ— æ³•è¯»å–如下XMLå…ƒç´ :</target> +<source>Cannot find file %x.</source> +<target>æ— æ³•æ‰¾åˆ°æ–‡ä»¶ %x .</target> + <source>&Open...</source> <target>打开(&O)...</target> @@ -450,24 +459,21 @@ The command is triggered if: <source>&Advanced</source> <target>高级(&A)</target> -<source>&Check for new version</source> -<target>检查更新(&C)</target> +<source>&Check now</source> +<target></target> -<source>Compare</source> -<target>比较</target> +<source>Check &automatically once a week</source> +<target></target> -<source>Compare both sides</source> -<target>比较两侧</target> +<source>Check for new version</source> +<target></target> -<source>&Abort</source> -<target>å–消(&A)</target> +<source>Compare</source> +<target>比较</target> <source>Synchronize</source> <target>åŒæ¥</target> -<source>Start synchronization</source> -<target>开始åŒæ¥</target> - <source>Add folder pair</source> <target>æ·»åŠ æˆå¯¹æ–‡ä»¶å¤¹</target> @@ -477,15 +483,6 @@ The command is triggered if: <source>Swap sides</source> <target>两侧互æ¢</target> -<source>Open</source> -<target>打开</target> - -<source>Save</source> -<target>ä¿å˜</target> - -<source>Last used configurations (press DEL to remove from list)</source> -<target>最åŽä½¿ç”¨çš„é…ç½®(按DEL键将其从列表ä¸ç§»é™¤)</target> - <source>Hide excluded items</source> <target>éšè—排除项目</target> @@ -516,6 +513,18 @@ The command is triggered if: <source>Time elapsed:</source> <target>已用时间:</target> +<source>Synchronizing...</source> +<target>åŒæ¥ä¸...</target> + +<source>On completion</source> +<target>在完æˆæ—¶</target> + +<source>Close</source> +<target></target> + +<source>&Pause</source> +<target>æš‚åœ(&P)</target> + <source>Batch job</source> <target>批处ç†ä½œä¸š</target> @@ -546,9 +555,6 @@ The command is triggered if: <source>Abort synchronization on first error</source> <target>在第一个错误时ä¸æ¢åŒæ¥</target> -<source>On completion</source> -<target>在完æˆæ—¶</target> - <source>Show progress dialog</source> <target>显示进度对è¯æ¡†</target> @@ -606,8 +612,8 @@ is the same <source><- Two way -></source> <target><-åŒå‘-></target> -<source>Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically.</source> -<target>使用一个数æ®åº“æ¥è¯†åˆ«å’Œä¼ æ’两边的改å˜. åˆ é™¤ï¼Œé‡å‘½å和冲çªä¼šè‡ªåŠ¨æ£€æµ‹.</target> +<source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> +<target></target> <source>Mirror ->></source> <target>é•œåƒ ->></target> @@ -645,15 +651,12 @@ is the same <source>Versioning</source> <target>ä¿ç•™åŽ†å²ç‰ˆæœ¬</target> -<source>Move time-stamped files into specified folder</source> -<target>ç§»åŠ¨æ—¶é—´æ ‡è®°æ–‡ä»¶åˆ°æŒ‡å®šçš„æ–‡ä»¶å¤¹</target> +<source>Move files to user-defined folder</source> +<target></target> <source>Naming convention:</source> <target>命å规则:</target> -<source>Configuration</source> -<target>é…ç½®</target> - <source>Item exists on left side only</source> <target>项目仅å˜åœ¨äºŽå·¦ä¾§</target> @@ -672,12 +675,6 @@ is the same <source>Conflict/item cannot be categorized</source> <target>冲çª/项目未能被分类</target> -<source>Synchronizing...</source> -<target>åŒæ¥ä¸...</target> - -<source>&Pause</source> -<target>æš‚åœ(&P)</target> - <source>Source code written in C++ using:</source> <target>æºä»£ç 用如下C++工具写æˆ:</target> @@ -738,8 +735,8 @@ Note: File names must be relative to base directories! <source>Maximum</source> <target>最大</target> -<source>&Default</source> -<target>默认(&D)</target> +<source>&Clear</source> +<target></target> <source>Fail-safe file copy</source> <target>æ— é£Žé™©çš„æ–‡ä»¶å¤åˆ¶</target> @@ -768,6 +765,12 @@ Note: File names must be relative to base directories! <source>Description</source> <target>æè¿°</target> +<source>&Default</source> +<target>默认(&D)</target> + +<source>Start synchronization</source> +<target>开始åŒæ¥</target> + <source>Variant</source> <target>å˜åŒ–</target> @@ -798,12 +801,24 @@ Note: File names must be relative to base directories! <source>Overview</source> <target>摘è¦</target> +<source>Configuration</source> +<target>é…ç½®</target> + <source>Filter files</source> <target>过滤器文件</target> <source>Select view</source> <target>选择视图</target> +<source>Open...</source> +<target></target> + +<source>Save</source> +<target>ä¿å˜</target> + +<source>Compare both sides</source> +<target>比较两侧</target> + <source>Set direction:</source> <target>设置方å‘:</target> @@ -861,102 +876,63 @@ Note: File names must be relative to base directories! <source>FreeFileSync batch</source> <target>FreeFileSync批处ç†æ–‡ä»¶</target> -<source>Never save changes</source> -<target>æ°¸ä¸ä¿å˜æ›´æ”¹</target> - <source>Do you want to save changes to %x?</source> <target>是å¦è¦ä¿å˜ä¿®æ”¹åˆ° %x ?</target> <source>Do&n't save</source> <target>ä¸ä¿å˜(&N)</target> +<source>Never save changes</source> +<target>æ°¸ä¸ä¿å˜æ›´æ”¹</target> + <source>Configuration loaded!</source> <target>é…ç½®å·²åŠ è½½!</target> -<source>Hide files that exist on left side only</source> -<target>éšè—仅在左侧的文件</target> - <source>Show files that exist on left side only</source> <target>显示仅å˜åœ¨å·¦ä¾§çš„文件</target> -<source>Hide files that exist on right side only</source> -<target>éšè—仅在å³ä¾§çš„文件</target> - <source>Show files that exist on right side only</source> <target>显示仅å˜åœ¨å³ä¾§çš„文件</target> -<source>Hide files that are newer on left</source> -<target>éšè—左侧较新的文件</target> - <source>Show files that are newer on left</source> <target>显示左侧较新的文件</target> -<source>Hide files that are newer on right</source> -<target>éšè—å³ä¾§è¾ƒæ–°çš„文件</target> - <source>Show files that are newer on right</source> <target>显示å³ä¾§è¾ƒæ–°çš„文件</target> -<source>Hide files that are equal</source> -<target>éšè—相åŒçš„文件</target> - <source>Show files that are equal</source> <target>显示相åŒçš„文件</target> -<source>Hide files that are different</source> -<target>éšè—ä¸åŒçš„文件</target> - <source>Show files that are different</source> <target>显示ä¸åŒçš„文件</target> -<source>Hide conflicts</source> -<target>éšè—冲çª</target> - <source>Show conflicts</source> <target>显示冲çª</target> -<source>Hide files that will be created on the left side</source> -<target>éšè—将在左侧被建立的文件</target> - <source>Show files that will be created on the left side</source> <target>显示将在左侧被建立的文件</target> -<source>Hide files that will be created on the right side</source> -<target>éšè—将在å³ä¾§è¢«å»ºç«‹çš„文件</target> - <source>Show files that will be created on the right side</source> <target>显示将在å³ä¾§è¢«å»ºç«‹çš„文件</target> -<source>Hide files that will be deleted on the left side</source> -<target>éšè—å°†åœ¨å·¦ä¾§è¢«åˆ é™¤çš„æ–‡ä»¶</target> - <source>Show files that will be deleted on the left side</source> <target>æ˜¾ç¤ºå°†åœ¨å·¦ä¾§è¢«åˆ é™¤çš„æ–‡ä»¶</target> -<source>Hide files that will be deleted on the right side</source> -<target>éšè—将在å³ä¾§è¢«åˆ 除的文件</target> - <source>Show files that will be deleted on the right side</source> <target>显示将在å³ä¾§è¢«åˆ 除的文件</target> -<source>Hide files that will be overwritten on left side</source> -<target>éšè—将在左侧被覆盖的文件</target> - <source>Show files that will be overwritten on left side</source> <target>显示将在左侧被覆盖的文件</target> -<source>Hide files that will be overwritten on right side</source> -<target>éšè—将在å³ä¾§è¢«è¦†ç›–的文件</target> - <source>Show files that will be overwritten on right side</source> <target>显示将在å³ä¾§è¢«è¦†ç›–的文件</target> -<source>Hide files that won't be copied</source> -<target>éšè—å°†ä¸ä¼šè¢«å¤åˆ¶çš„文件</target> - <source>Show files that won't be copied</source> <target>显示将ä¸è¢«å¤åˆ¶çš„文件</target> +<source>Set as default</source> +<target></target> + <source>All folders are in sync!</source> <target>所有文件夹都是åŒæ¥çš„!</target> @@ -969,13 +945,8 @@ Note: File names must be relative to base directories! <source>File list exported!</source> <target>文件清å•å·²ç»å¯¼å‡º!</target> -<source> -<pluralform>Object deleted successfully!</pluralform> -<pluralform>%x objects deleted successfully!</pluralform> -</source> -<target> -<pluralform>%x 个对象被æˆåŠŸåˆ 除!</pluralform> -</target> +<source>Searching for program updates...</source> +<target></target> <source> <pluralform>1 directory</pluralform> @@ -1007,6 +978,9 @@ Note: File names must be relative to base directories! <source>&Ignore</source> <target>忽略(&I)</target> +<source>Don't show this warning again</source> +<target></target> + <source>&Switch</source> <target>切æ¢(&S)</target> @@ -1025,9 +999,6 @@ Note: File names must be relative to base directories! <source>Comparing content...</source> <target>æ£åœ¨æ¯”较文件内容...</target> -<source>Copy</source> -<target>å¤åˆ¶</target> - <source>Paused</source> <target>已暂åœ</target> @@ -1110,33 +1081,32 @@ Note: File names must be relative to base directories! <target>é‡æ–°è®©å·²ç»éšè—çš„è¦å‘Šå’Œå¯¹è¯æ¡†å˜ä¸ºå¯è§?</target> <source> -<pluralform>Do you really want to move the following object to the Recycle Bin?</pluralform> -<pluralform>Do you really want to move the following %x objects to the Recycle Bin?</pluralform> +<pluralform>Do you really want to move the following item to the Recycle Bin?</pluralform> +<pluralform>Do you really want to move the following %x items to the Recycle Bin?</pluralform> </source> -<target> -<pluralform>ä½ æ˜¯å¦çœŸçš„è¦ç§»åŠ¨å¦‚下 %x 个对象到回收站?</pluralform> -</target> +<target></target> <source> -<pluralform>Do you really want to delete the following object?</pluralform> -<pluralform>Do you really want to delete the following %x objects?</pluralform> +<pluralform>Do you really want to delete the following item?</pluralform> +<pluralform>Do you really want to delete the following %x items?</pluralform> </source> -<target> -<pluralform>ä½ æ˜¯å¦çœŸçš„è¦åˆ 除如下 %x 个对象?</pluralform> -</target> +<target></target> <source>Leave as unresolved conflict</source> <target>é—留为未解决的冲çª</target> +<source>Time stamp</source> +<target></target> + +<source>Append a timestamp to each file name</source> +<target>é™„åŠ æ—¶é—´æˆ³åˆ°æ¯ä¸€ä¸ªæ–‡ä»¶å</target> + <source>Replace</source> <target>替æ¢</target> <source>Move files and replace if existing</source> <target>移动文件, 若文件已å˜åœ¨åˆ™æ›¿æ¢</target> -<source>Append a timestamp to each file name</source> -<target>é™„åŠ æ—¶é—´æˆ³åˆ°æ¯ä¸€ä¸ªæ–‡ä»¶å</target> - <source>Folder</source> <target>文件夹</target> @@ -1248,6 +1218,12 @@ Note: File names must be relative to base directories! <source>Cannot set privilege %x.</source> <target>æ— æ³•è®¾ç½® %x 的特æƒ.</target> +<source>Failed to suspend system sleep mode.</source> +<target></target> + +<source>Cannot change process I/O priorities.</source> +<target></target> + <source>Unable to move %x to the Recycle Bin!</source> <target>æ— æ³•ç§»åŠ¨ %x 到回收站!</target> @@ -1266,14 +1242,38 @@ Note: File names must be relative to base directories! <source>Setting default synchronization directions: Old files will be overwritten with newer files.</source> <target>设置默认的åŒæ¥æ–¹å‘:旧文件会被新文件覆盖.</target> +<source>Checking recycle bin availability for folder %x...</source> +<target></target> + +<source>Moving file %x to recycle bin</source> +<target>æ£åœ¨ç§»åŠ¨æ–‡ä»¶ %x 到回收站</target> + +<source>Moving folder %x to recycle bin</source> +<target>æ£åœ¨ç§»åŠ¨æ–‡ä»¶å¤¹ %x 到回收站</target> + +<source>Moving symbolic link %x to recycle bin</source> +<target>æ£åœ¨ç§»åŠ¨ç¬¦å·è¿žæŽ¥ %x 到回收站</target> + +<source>Deleting file %x</source> +<target>æ£åˆ 除文件 %x</target> + +<source>Deleting folder %x</source> +<target>æ£åˆ 除文件夹 %x</target> + +<source>Deleting symbolic link %x</source> +<target>æ£åœ¨åˆ 除符å·è¿žæŽ¥ %x</target> + <source>Recycle Bin is not available for the following paths! Files will be deleted permanently instead:</source> <target>如下路径的回收站ä¸å¯ç”¨! æ–‡ä»¶ä¼šè¢«æ°¸ä¹…åˆ é™¤:</target> -<source>You can ignore this error to consider the folder as empty.</source> -<target>ä½ å¯ä»¥å¿½ç•¥è¿™ä¸ªé”™è¯¯è€Œè®¤ä¸ºæ–‡ä»¶å¤¹æ˜¯ç©ºçš„.</target> +<source>The corresponding folder will be considered as empty.</source> +<target></target> + +<source>Cannot find the following folders:</source> +<target></target> -<source>Cannot find folder %x.</source> -<target>æ— æ³•æ‰¾åˆ°æ–‡ä»¶å¤¹ %x</target> +<source>You can ignore this error to consider each folder as empty.</source> +<target></target> <source>Directories are dependent! Be careful when setting up synchronization rules:</source> <target>目录有ä¾èµ–性ï¼åœ¨è®¾ç«‹åŒæ¥è§„则时请å°å¿ƒ:</target> @@ -1281,8 +1281,8 @@ Note: File names must be relative to base directories! <source>Start comparison</source> <target>开始比较</target> -<source>Preparing synchronization...</source> -<target>æ£åœ¨å‡†å¤‡åŒæ¥...</target> +<source>Calculating sync directions...</source> +<target></target> <source>Conflict detected:</source> <target>检测到的冲çª:</target> @@ -1347,24 +1347,6 @@ Note: File names must be relative to base directories! <source>Multiple...</source> <target>并è”...</target> -<source>Deleting file %x</source> -<target>æ£åˆ 除文件 %x</target> - -<source>Deleting folder %x</source> -<target>æ£åˆ 除文件夹 %x</target> - -<source>Deleting symbolic link %x</source> -<target>æ£åœ¨åˆ 除符å·è¿žæŽ¥ %x</target> - -<source>Moving file %x to recycle bin</source> -<target>æ£åœ¨ç§»åŠ¨æ–‡ä»¶ %x 到回收站</target> - -<source>Moving folder %x to recycle bin</source> -<target>æ£åœ¨ç§»åŠ¨æ–‡ä»¶å¤¹ %x 到回收站</target> - -<source>Moving symbolic link %x to recycle bin</source> -<target>æ£åœ¨ç§»åŠ¨ç¬¦å·è¿žæŽ¥ %x 到回收站</target> - <source>Moving file %x to %y</source> <target>æ£åœ¨ç§»åŠ¨æ–‡ä»¶ %x 到 %y</target> @@ -1377,9 +1359,6 @@ Note: File names must be relative to base directories! <source>Removing old versions...</source> <target>移除旧版本</target> -<source>Creating file %x</source> -<target>æ£åœ¨åˆ›å»ºæ–‡ä»¶ %x</target> - <source>Creating symbolic link %x</source> <target>æ£åœ¨åˆ›å»ºç¬¦å·è¿žæŽ¥ %x</target> @@ -1398,6 +1377,9 @@ Note: File names must be relative to base directories! <source>Updating attributes of %x</source> <target>æ›´æ–° %x 的属性</target> +<source>Cannot find %x.</source> +<target></target> + <source>Target folder %x already existing.</source> <target>ç›®æ ‡æ–‡ä»¶å¤¹ %x å·²ç»å˜åœ¨.</target> @@ -1443,6 +1425,9 @@ Note: File names must be relative to base directories! <source>Generating database...</source> <target>æ£åœ¨ç”Ÿæˆæ•°æ®åº“...</target> +<source>Creating Volume Shadow Copy for %x...</source> +<target></target> + <source>Data verification error: Source and target file have different content!</source> <target>æ•°æ®æ ¡éªŒé”™è¯¯:æºæ–‡ä»¶å’Œç›®æ ‡æ–‡ä»¶å†…容ä¸åŒ!</target> diff --git a/BUILD/Languages/chinese_traditional.lng b/BUILD/Languages/chinese_traditional.lng index 56f832e7..2a63530b 100644 --- a/BUILD/Languages/chinese_traditional.lng +++ b/BUILD/Languages/chinese_traditional.lng @@ -19,6 +19,9 @@ <source>Total time:</source> <target>全部時間:</target> +<source>Cannot set directory lock for %x.</source> +<target>ç„¡æ³•å° %x è¨å®šç›®éŒ„鎖。</target> + <source>Show in Explorer</source> <target>在資æºç®¡ç†å™¨ä¸é¡¯ç¤º</target> @@ -40,6 +43,9 @@ <source>Error</source> <target>錯誤</target> +<source>Selected variant:</source> +<target>é¸å–的變數:</target> + <source>Select alternate comparison settings</source> <target>é¸æ“‡æ›¿ä»£çš„比å°è¨å®š</target> @@ -58,6 +64,12 @@ <source>Clear filter settings</source> <target>清除篩é¸å™¨è¨å®š</target> +<source>Copy</source> +<target>複製</target> + +<source>Paste</source> +<target>貼上</target> + <source>Save as batch job</source> <target>å¦å˜ç‚ºæ‰¹æ¬¡è™•ç†ä½œæ¥</target> @@ -97,11 +109,8 @@ <source>Fatal Error</source> <target>åš´é‡éŒ¯èª¤</target> -<source>Windows Error Code %x:</source> -<target>Windows錯誤代碼 %x:</target> - -<source>Linux Error Code %x:</source> -<target>Linux錯誤代碼 %x:</target> +<source>Error Code %x:</source> +<target>錯誤代碼 %x:</target> <source>Cannot resolve symbolic link %x.</source> <target>無法解æžç¬¦è™Ÿé€£çµ %X。</target> @@ -159,8 +168,8 @@ <source>Waiting while directory is locked (%x)...</source> <target>ç‰å¾…åŒæ™‚目錄被鎖定(%x)...</target> -<source>Cannot set directory lock %x.</source> -<target>無法è¨å®šç›®éŒ„鎖 %x。</target> +<source>Creating file %x</source> +<target>æ£åœ¨æ–°å»ºæª”案 %x</target> <source> <pluralform>1 sec</pluralform> @@ -190,9 +199,6 @@ <source>/sec</source> <target>/秒</target> -<source>Cannot find file %x.</source> -<target>找ä¸åˆ°æª”案 %x。</target> - <source>File %x does not contain a valid configuration.</source> <target>檔案 %x ä¸åŒ…å«ä¸€å€‹æœ‰æ•ˆçš„é…置。</target> @@ -217,6 +223,9 @@ <source>Cannot read the following XML elements:</source> <target>無法讀å–下列XMLå…ƒç´ ï¼š</target> +<source>Cannot find file %x.</source> +<target>找ä¸åˆ°æª”案 %x。</target> + <source>&Open...</source> <target>é–‹å•Ÿ(&O)...</target> @@ -358,7 +367,7 @@ The command is triggered if: <target>無法連接到sourceforge.netï¼</target> <source>Current FreeFileSync version number was not found online! Do you want to check manually?</source> -<target>ç›®å‰FreeFileSync版本號碼連線未找到ï¼æ˜¯å¦è¦æ‰‹å‹•æª¢æŸ¥ï¼Ÿ</target> +<target>ç›®å‰é€£ç·šæœªæ‰¾åˆ°FreeFileSync版號ï¼æ˜¯å¦è¦æ‰‹å‹•æª¢æŸ¥ï¼Ÿ</target> <source>Do you want FreeFileSync to automatically check for updates every week?</source> <target>è¦æ¯é€±è‡ªå‹•æª¢æŸ¥æ›´æ–°FreeFileSync嗎?</target> @@ -450,24 +459,21 @@ The command is triggered if: <source>&Advanced</source> <target>進階(&A)</target> -<source>&Check for new version</source> -<target>檢查是å¦æœ‰æ–°ç‰ˆæœ¬(&C)</target> +<source>&Check now</source> +<target>ç¾åœ¨æª¢æŸ¥(&C)</target> -<source>Compare</source> -<target>比å°</target> +<source>Check &automatically once a week</source> +<target>一週自動檢查一次(&a)</target> -<source>Compare both sides</source> -<target>比å°å…©é‚Š</target> +<source>Check for new version</source> +<target>檢查新版本</target> -<source>&Abort</source> -<target>å–消(&A)</target> +<source>Compare</source> +<target>比å°</target> <source>Synchronize</source> <target>åŒæ¥</target> -<source>Start synchronization</source> -<target>開始åŒæ¥</target> - <source>Add folder pair</source> <target>新增é…å°è³‡æ–™å¤¾</target> @@ -477,15 +483,6 @@ The command is triggered if: <source>Swap sides</source> <target>兩邊交æ›</target> -<source>Open</source> -<target>é–‹å•Ÿ</target> - -<source>Save</source> -<target>儲å˜</target> - -<source>Last used configurations (press DEL to remove from list)</source> -<target>上次使用的é…ç½®(按DELéµï¼Œå¾žæ¸…å–®ä¸ç§»é™¤)</target> - <source>Hide excluded items</source> <target>éš±è—æŽ’é™¤é …ç›®</target> @@ -516,11 +513,23 @@ The command is triggered if: <source>Time elapsed:</source> <target>經éŽæ™‚間:</target> +<source>Synchronizing...</source> +<target>æ£åœ¨åŒæ¥...</target> + +<source>On completion</source> +<target>完æˆå¾Œ</target> + +<source>Close</source> +<target>關閉</target> + +<source>&Pause</source> +<target>æš«åœ(&P)</target> + <source>Batch job</source> <target>批次處ç†ä½œæ¥</target> <source>Create a batch file to automate synchronization. Double-click this file or schedule in your system's task planner: FreeFileSync.exe <job name>.ffs_batch</source> -<target>新建一個批次檔來自動執行åŒæ¥ã€‚ 按兩下æ¤æª”案或安排在您的系統任務計畫表: FreeFileSync.exe <工作å稱>.ffs_batch</target> +<target>新建一個批次檔來自動執行åŒæ¥ã€‚按兩下æ¤æª”案或安排在您的系統任務計畫表:FreeFileSync.exe <工作å稱>.ffs_batch</target> <source>Help</source> <target>說明</target> @@ -546,9 +555,6 @@ The command is triggered if: <source>Abort synchronization on first error</source> <target>在第一個錯誤出ç¾å³ä¸æ¢åŒæ¥</target> -<source>On completion</source> -<target>完æˆå¾Œ</target> - <source>Show progress dialog</source> <target>顯示進度å°è©±æ¡†</target> @@ -597,14 +603,14 @@ is the same <source><- Two way -></source> <target><- é›™å‘ -></target> -<source>Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically.</source> -<target>å°å…©é‚Šä½¿ç”¨åŒä¸€å€‹è³‡æ–™åº«ä¾†è˜åˆ¥å’Œå‚³é€è®Šæ›´ã€‚ 自動檢測刪除ã€é‡æ–°å‘½åå’Œè¡çªéƒ¨ä»½ã€‚</target> +<source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> +<target>è˜åˆ¥å’Œå‚³æ’兩邊的變更。自動檢測刪除ã€ç§»å‹•å’Œè¡çªä½¿ç”¨çš„資料庫。</target> <source>Mirror ->></source> <target>é¡åƒ ->></target> <source>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization.</source> -<target>é¡åƒå‚™ä»½çš„左邊的資料夾。 åŒæ¥å¾Œï¼Œå³é‚Šçš„資料夾進行修改以完全相é…左邊的資料夾。</target> +<target>é¡åƒå‚™ä»½çš„左邊的資料夾。åŒæ¥å¾Œï¼Œå³é‚Šçš„資料夾進行修改以完全相é…左邊的資料夾。</target> <source>Update -></source> <target>æ›´æ–° -></target> @@ -636,15 +642,12 @@ is the same <source>Versioning</source> <target>版本控制</target> -<source>Move time-stamped files into specified folder</source> -<target>將時間戳記檔案移動到指定的資料夾</target> +<source>Move files to user-defined folder</source> +<target>將檔案移動到使用者自訂的資料夾</target> <source>Naming convention:</source> <target>命å慣例:</target> -<source>Configuration</source> -<target>é…ç½®</target> - <source>Item exists on left side only</source> <target>åªå˜åœ¨æ–¼å·¦é‚Šçš„é …ç›®</target> @@ -663,12 +666,6 @@ is the same <source>Conflict/item cannot be categorized</source> <target>è¡çª/é …ç›®ä¸èƒ½è¢«åˆ†é¡ž</target> -<source>Synchronizing...</source> -<target>æ£åœ¨åŒæ¥...</target> - -<source>&Pause</source> -<target>æš«åœ(&P)</target> - <source>Source code written in C++ using:</source> <target>使用C++編寫的原始碼</target> @@ -729,14 +726,14 @@ Note: File names must be relative to base directories! <source>Maximum</source> <target>最大</target> -<source>&Default</source> -<target>é è¨(&D)</target> +<source>&Clear</source> +<target>清除(&C)</target> <source>Fail-safe file copy</source> <target>æ•…éšœä¿è·æª”案複製</target> <source>Write to a temporary file (*.ffs_tmp) first then rename it. This guarantees a consistent state even in case of fatal error.</source> -<target>第一次將檔寫入到一個暫å˜(*.ffs_tmp)ï¼Œé †ä¾¿å°‡å®ƒå€‘é‡æ–°å‘½å。 å³ä½¿åœ¨åš´é‡éŒ¯èª¤çš„情æ³ä¸‹ï¼Œé‚„å¯ç¢ºä¿ä¸€è‡´çš„狀態。</target> +<target>第一次將檔寫入到一個暫å˜(*.ffs_tmp)ï¼Œé †ä¾¿å°‡å®ƒå€‘é‡æ–°å‘½å。å³ä½¿åœ¨åš´é‡éŒ¯èª¤çš„情æ³ä¸‹ï¼Œé‚„å¯ç¢ºä¿ä¸€è‡´çš„狀態。</target> <source>Copy locked files</source> <target>複製被鎖定的檔案</target> @@ -759,6 +756,12 @@ Note: File names must be relative to base directories! <source>Description</source> <target>æè¿°</target> +<source>&Default</source> +<target>é è¨(&D)</target> + +<source>Start synchronization</source> +<target>開始åŒæ¥</target> + <source>Variant</source> <target>變數</target> @@ -766,7 +769,7 @@ Note: File names must be relative to base directories! <target>統計</target> <source>Don't show this dialog again</source> -<target>ä¸è¦å†é¡¯ç¤ºæ¤å°è©±æ¡†</target> +<target>ä¸å†é¡¯ç¤ºæ¤å°è©±æ¡†</target> <source>Find what:</source> <target>尋找內容:</target> @@ -789,12 +792,24 @@ Note: File names must be relative to base directories! <source>Overview</source> <target>摘è¦</target> +<source>Configuration</source> +<target>é…ç½®</target> + <source>Filter files</source> <target>篩é¸æª”案</target> <source>Select view</source> <target>é¸æ“‡æª¢è¦–</target> +<source>Open...</source> +<target>é–‹å•Ÿ...</target> + +<source>Save</source> +<target>儲å˜</target> + +<source>Compare both sides</source> +<target>比å°å…©é‚Š</target> + <source>Set direction:</source> <target>è¨å®šæ–¹å‘:</target> @@ -852,102 +867,63 @@ Note: File names must be relative to base directories! <source>FreeFileSync batch</source> <target>FreeFileSync批次處ç†</target> -<source>Never save changes</source> -<target>ä¸è¦å„²å˜è®Šæ›´</target> - <source>Do you want to save changes to %x?</source> <target>是å¦è¦å„²å˜è®Šæ›´åˆ° %x?</target> <source>Do&n't save</source> <target>ä¸å„²å˜(&N)</target> +<source>Never save changes</source> +<target>ä¸è¦å„²å˜è®Šæ›´</target> + <source>Configuration loaded!</source> <target>é…置已載入ï¼</target> -<source>Hide files that exist on left side only</source> -<target>éš±è—åªå˜åœ¨æ–¼å·¦é‚Šçš„檔案</target> - <source>Show files that exist on left side only</source> <target>顯示åªå˜åœ¨æ–¼å·¦é‚Šçš„檔案</target> -<source>Hide files that exist on right side only</source> -<target>éš±è—åªå˜åœ¨æ–¼å³é‚Šçš„檔案</target> - <source>Show files that exist on right side only</source> <target>顯示åªå˜åœ¨æ–¼å³é‚Šçš„檔案</target> -<source>Hide files that are newer on left</source> -<target>éš±è—左邊較新的檔案</target> - <source>Show files that are newer on left</source> <target>顯示左邊較新的檔案</target> -<source>Hide files that are newer on right</source> -<target>éš±è—å³é‚Šè¼ƒæ–°çš„檔案</target> - <source>Show files that are newer on right</source> <target>顯示å³é‚Šè¼ƒæ–°çš„檔案</target> -<source>Hide files that are equal</source> -<target>éš±è—相åŒçš„檔案</target> - <source>Show files that are equal</source> <target>顯示相åŒçš„檔案</target> -<source>Hide files that are different</source> -<target>éš±è—ä¸åŒçš„檔案</target> - <source>Show files that are different</source> <target>顯示ä¸åŒçš„檔案</target> -<source>Hide conflicts</source> -<target>éš±è—è¡çª</target> - <source>Show conflicts</source> <target>顯示è¡çª</target> -<source>Hide files that will be created on the left side</source> -<target>éš±è—左邊將被新建的檔案</target> - <source>Show files that will be created on the left side</source> <target>顯示左邊將被新建的檔案</target> -<source>Hide files that will be created on the right side</source> -<target>éš±è—å³é‚Šå°‡è¢«æ–°å»ºçš„檔案</target> - <source>Show files that will be created on the right side</source> <target>顯示å³é‚Šå°‡è¢«æ–°å»ºçš„檔案</target> -<source>Hide files that will be deleted on the left side</source> -<target>éš±è—左邊將被刪除的檔案</target> - <source>Show files that will be deleted on the left side</source> <target>顯示左邊將被刪除的檔案</target> -<source>Hide files that will be deleted on the right side</source> -<target>éš±è—å³é‚Šå°‡è¢«åˆªé™¤çš„檔案</target> - <source>Show files that will be deleted on the right side</source> <target>顯示å³é‚Šå°‡è¢«åˆªé™¤çš„檔案</target> -<source>Hide files that will be overwritten on left side</source> -<target>éš±è—左邊將被覆蓋的檔案</target> - <source>Show files that will be overwritten on left side</source> <target>顯示左邊將被覆蓋的檔案</target> -<source>Hide files that will be overwritten on right side</source> -<target>éš±è—å³é‚Šå°‡è¢«è¦†è“‹çš„檔案</target> - <source>Show files that will be overwritten on right side</source> <target>顯示å³é‚Šå°‡è¢«è¦†è“‹çš„檔案</target> -<source>Hide files that won't be copied</source> -<target>éš±è—å°‡ä¸æœƒè¢«è¤‡è£½çš„檔案</target> - <source>Show files that won't be copied</source> <target>顯示將ä¸æœƒè¢«è¤‡è£½çš„檔案</target> +<source>Set as default</source> +<target>è¨ç‚ºé è¨å€¼</target> + <source>All folders are in sync!</source> <target>所有資料夾都是åŒæ¥çš„ï¼</target> @@ -960,13 +936,8 @@ Note: File names must be relative to base directories! <source>File list exported!</source> <target>檔案清單已匯出ï¼</target> -<source> -<pluralform>Object deleted successfully!</pluralform> -<pluralform>%x objects deleted successfully!</pluralform> -</source> -<target> -<pluralform>%x 物件已æˆåŠŸåˆªé™¤ï¼</pluralform> -</target> +<source>Searching for program updates...</source> +<target>æ£åœ¨æœå°‹ç¨‹å¼æ›´æ–°...</target> <source> <pluralform>1 directory</pluralform> @@ -998,6 +969,9 @@ Note: File names must be relative to base directories! <source>&Ignore</source> <target>忽略(&I)</target> +<source>Don't show this warning again</source> +<target>ä¸å†é¡¯ç¤ºæ¤è¦å‘Š</target> + <source>&Switch</source> <target>切æ›(&S)</target> @@ -1016,9 +990,6 @@ Note: File names must be relative to base directories! <source>Comparing content...</source> <target>æ£åœ¨æ¯”å°å†…容...</target> -<source>Copy</source> -<target>複製</target> - <source>Paused</source> <target>已暫åœ</target> @@ -1083,7 +1054,7 @@ Note: File names must be relative to base directories! <target>複製NTFS權é™</target> <source>Integrate external applications into context menu. The following macros are available:</source> -<target>æ•´åˆä¸Šä¸‹æ–‡åŠŸèƒ½è¡¨ä¸çš„外部應用程å¼ã€‚ å¯ä»¥ä½¿ç”¨ä¸‹é¢çš„巨集:</target> +<target>æ•´åˆä¸Šä¸‹æ–‡åŠŸèƒ½è¡¨ä¸çš„外部應用程å¼ã€‚å¯ä»¥ä½¿ç”¨ä¸‹é¢çš„巨集:</target> <source>- full file or folder name</source> <target>- 完整檔案或資料夾å稱</target> @@ -1101,33 +1072,36 @@ Note: File names must be relative to base directories! <target>使隱è—çš„è¦å‘Šå’Œå°è©±æ¡†å†æ¬¡å¯è¦‹ï¼Ÿ</target> <source> -<pluralform>Do you really want to move the following object to the Recycle Bin?</pluralform> -<pluralform>Do you really want to move the following %x objects to the Recycle Bin?</pluralform> +<pluralform>Do you really want to move the following item to the Recycle Bin?</pluralform> +<pluralform>Do you really want to move the following %x items to the Recycle Bin?</pluralform> </source> <target> -<pluralform>確定è¦å°‡ä¸‹åˆ— %x 物件移動到資æºå›žæ”¶ç’嗎?</pluralform> +<pluralform>您確定è¦å°‡ä¸‹åˆ— %x é …ç›®ç§»å‹•åˆ°è³‡æºå›žæ”¶ç’嗎?</pluralform> </target> <source> -<pluralform>Do you really want to delete the following object?</pluralform> -<pluralform>Do you really want to delete the following %x objects?</pluralform> +<pluralform>Do you really want to delete the following item?</pluralform> +<pluralform>Do you really want to delete the following %x items?</pluralform> </source> <target> -<pluralform>您確定è¦åˆªé™¤ä¸‹åˆ—çš„ %x 物件嗎?</pluralform> +<pluralform>您確定è¦å°‡ä¸‹åˆ— %x é …ç›®åˆªé™¤å—Žï¼Ÿ</pluralform> </target> <source>Leave as unresolved conflict</source> <target>ä¿ç•™çµ¦æœªè§£æ±ºçš„è¡çª</target> +<source>Time stamp</source> +<target>時間戳記</target> + +<source>Append a timestamp to each file name</source> +<target>å°‡æ™‚é–“æˆ³è¨˜é™„åŠ åˆ°æ¯å€‹æª”案å稱上</target> + <source>Replace</source> <target>å–代</target> <source>Move files and replace if existing</source> <target>如果å˜åœ¨ï¼Œç§»å‹•æª”案並å–代</target> -<source>Append a timestamp to each file name</source> -<target>å°‡æ™‚é–“æˆ³è¨˜é™„åŠ åˆ°æ¯å€‹æª”案å稱上</target> - <source>Folder</source> <target>資料夾</target> @@ -1239,6 +1213,12 @@ Note: File names must be relative to base directories! <source>Cannot set privilege %x.</source> <target>無法è¨å®šæ¬Šé™ %x。</target> +<source>Failed to suspend system sleep mode.</source> +<target>ä¸æ¢ç³»çµ±ç¡çœ 模å¼å¤±æ•—。</target> + +<source>Cannot change process I/O priorities.</source> +<target>無法更改 I/O 處ç†å„ªå…ˆé †åºã€‚</target> + <source>Unable to move %x to the Recycle Bin!</source> <target>無法將 %x 移動到資æºå›žæ”¶ç’ï¼</target> @@ -1257,14 +1237,38 @@ Note: File names must be relative to base directories! <source>Setting default synchronization directions: Old files will be overwritten with newer files.</source> <target>è¨å®šé è¨åŒæ¥æ–¹å‘:舊檔案會被較新的檔案覆蓋。</target> +<source>Checking recycle bin availability for folder %x...</source> +<target>æ£åœ¨æª¢æŸ¥è³‡æºå›žæ”¶ç’çš„å¯ç”¨æ€§è³‡æ–™å¤¾ %x...</target> + +<source>Moving file %x to recycle bin</source> +<target>æ£åœ¨ç§»å‹•æª”案 %x 到資æºå›žæ”¶ç’</target> + +<source>Moving folder %x to recycle bin</source> +<target>æ£åœ¨ç§»å‹•è³‡æ–™å¤¾ %x 到資æºå›žæ”¶ç’</target> + +<source>Moving symbolic link %x to recycle bin</source> +<target>æ£åœ¨ç§»å‹•ç¬¦è™Ÿé€£çµ %x 到資æºå›žæ”¶ç’</target> + +<source>Deleting file %x</source> +<target>æ£åœ¨åˆªé™¤æª”案 %x</target> + +<source>Deleting folder %x</source> +<target>æ£åœ¨åˆªé™¤è³‡æ–™å¤¾ %x</target> + +<source>Deleting symbolic link %x</source> +<target>æ£åœ¨åˆªé™¤ç¬¦è™Ÿé€£çµ %x</target> + <source>Recycle Bin is not available for the following paths! Files will be deleted permanently instead:</source> <target>資æºå›žæ”¶ç’ä¸å¯ç”¨æ–¼ä»¥ä¸‹è·¯å¾‘ï¼ç›¸å的,檔案將永é 被刪除:</target> -<source>You can ignore this error to consider the folder as empty.</source> -<target>您å¯ä»¥å¿½ç•¥æ¤éŒ¯èª¤ï¼Œè€ƒæ…®åˆ°ç©ºçš„資料夾。</target> +<source>The corresponding folder will be considered as empty.</source> +<target>å°æ‡‰çš„資料夾將視為空的。</target> -<source>Cannot find folder %x.</source> -<target>找ä¸åˆ°è³‡æ–™å¤¾ %x。</target> +<source>Cannot find the following folders:</source> +<target>找ä¸åˆ°ä¸‹åˆ—資料夾:</target> + +<source>You can ignore this error to consider each folder as empty.</source> +<target>您å¯ä»¥å¿½ç•¥å°‡æ¯å€‹è³‡æ–™å¤¾è¦–為空的錯誤。</target> <source>Directories are dependent! Be careful when setting up synchronization rules:</source> <target>目錄有ä¾é 性ï¼è«‹å°å¿ƒè¨å®šåŒæ¥è¦å‰‡ï¼š</target> @@ -1272,8 +1276,8 @@ Note: File names must be relative to base directories! <source>Start comparison</source> <target>開始比å°</target> -<source>Preparing synchronization...</source> -<target>æ£åœ¨æº–å‚™åŒæ¥...</target> +<source>Calculating sync directions...</source> +<target>æ£åœ¨è¨ˆç®—åŒæ¥æ–¹å‘...</target> <source>Conflict detected:</source> <target>檢測到è¡çªï¼š</target> @@ -1338,24 +1342,6 @@ Note: File names must be relative to base directories! <source>Multiple...</source> <target>多個...</target> -<source>Deleting file %x</source> -<target>æ£åœ¨åˆªé™¤æª”案 %x</target> - -<source>Deleting folder %x</source> -<target>æ£åœ¨åˆªé™¤è³‡æ–™å¤¾ %x</target> - -<source>Deleting symbolic link %x</source> -<target>æ£åœ¨åˆªé™¤ç¬¦è™Ÿé€£çµ %x</target> - -<source>Moving file %x to recycle bin</source> -<target>æ£åœ¨ç§»å‹•æª”案 %x 到資æºå›žæ”¶ç’</target> - -<source>Moving folder %x to recycle bin</source> -<target>æ£åœ¨ç§»å‹•è³‡æ–™å¤¾ %x 到資æºå›žæ”¶ç’</target> - -<source>Moving symbolic link %x to recycle bin</source> -<target>æ£åœ¨ç§»å‹•ç¬¦è™Ÿé€£çµ %x 到資æºå›žæ”¶ç’</target> - <source>Moving file %x to %y</source> <target>æ£åœ¨ç§»å‹•æª”案 %x 到 %y</target> @@ -1368,9 +1354,6 @@ Note: File names must be relative to base directories! <source>Removing old versions...</source> <target>æ£åœ¨åˆªé™¤èˆŠç‰ˆæœ¬...</target> -<source>Creating file %x</source> -<target>æ£åœ¨æ–°å»ºæª”案 %x</target> - <source>Creating symbolic link %x</source> <target>æ£åœ¨æ–°å»ºç¬¦è™Ÿé€£çµ %x</target> @@ -1389,6 +1372,9 @@ Note: File names must be relative to base directories! <source>Updating attributes of %x</source> <target>æ£åœ¨æ›´æ–° %x 個屬性</target> +<source>Cannot find %x.</source> +<target>找ä¸åˆ° %x。</target> + <source>Target folder %x already existing.</source> <target>目標資料夾 %x å·²å˜åœ¨ã€‚</target> @@ -1420,7 +1406,7 @@ Note: File names must be relative to base directories! <target>å¯ç”¨ï¼š</target> <source>A folder will be modified which is part of multiple folder pairs. Please review synchronization settings.</source> -<target>一個將被修改的資料夾,是多個é…å°è³‡æ–™å¤¾çš„一部分。 請檢查åŒæ¥è¨å®šã€‚</target> +<target>一個將被修改的資料夾,是多個é…å°è³‡æ–™å¤¾çš„一部分。請檢查åŒæ¥è¨å®šã€‚</target> <source>Left</source> <target>左邊</target> @@ -1434,6 +1420,9 @@ Note: File names must be relative to base directories! <source>Generating database...</source> <target>æ£åœ¨ç”¢ç”Ÿè³‡æ–™åº«...</target> +<source>Creating Volume Shadow Copy for %x...</source> +<target>æ£åœ¨æ–°å»ºå·å½±è¤‡è£½ç‚º %x...</target> + <source>Data verification error: Source and target file have different content!</source> <target>資料驗è‰éŒ¯èª¤ï¼šä¾†æºå’Œç›®æ¨™æª”案內容ä¸åŒï¼</target> diff --git a/BUILD/Languages/croatian.lng b/BUILD/Languages/croatian.lng index fc01bb29..766107d6 100644 --- a/BUILD/Languages/croatian.lng +++ b/BUILD/Languages/croatian.lng @@ -19,6 +19,9 @@ <source>Total time:</source> <target>Ukupno vrijeme:</target> +<source>Cannot set directory lock for %x.</source> +<target>Ne mogu zakljuÄiti mapu %x.</target> + <source>Show in Explorer</source> <target>Prikaži u Exploreru</target> @@ -40,6 +43,9 @@ <source>Error</source> <target>GreÅ¡ka</target> +<source>Selected variant:</source> +<target>Odaberite naÄin</target> + <source>Select alternate comparison settings</source> <target>Izaberite alternativne postavke usporedbe</target> @@ -58,6 +64,12 @@ <source>Clear filter settings</source> <target>PoÄisti postavke filtera</target> +<source>Copy</source> +<target>Kopiraj</target> + +<source>Paste</source> +<target>Zalijepi</target> + <source>Save as batch job</source> <target>Spremi kao slijedni zadatak</target> @@ -97,11 +109,8 @@ <source>Fatal Error</source> <target>KritiÄna greÅ¡ka</target> -<source>Windows Error Code %x:</source> -<target>Windows greÅ¡ka %x:</target> - -<source>Linux Error Code %x:</source> -<target>Linux greÅ¡ka %x:</target> +<source>Error Code %x:</source> +<target>PogreÅ¡ka broj %x:</target> <source>Cannot resolve symbolic link %x.</source> <target>Ne mogu rijeÅ¡iti simboliÄnu poveznicu</target> @@ -161,8 +170,8 @@ <source>Waiting while directory is locked (%x)...</source> <target>ÄŒekam dok se direktorij zakljuÄava (%x)...</target> -<source>Cannot set directory lock %x.</source> -<target>Ne mogu zakljuÄati direktorij %x.</target> +<source>Creating file %x</source> +<target>IzraÄ‘ujem datoteku %x</target> <source> <pluralform>1 sec</pluralform> @@ -196,9 +205,6 @@ <source>/sec</source> <target>/sek</target> -<source>Cannot find file %x.</source> -<target>Ne mogu pronaći datoteku %x.</target> - <source>File %x does not contain a valid configuration.</source> <target>Datoteka %x ne sadrži valjanu konfiguraciju</target> @@ -223,6 +229,9 @@ <source>Cannot read the following XML elements:</source> <target>Ne mogu Äitati slijedeće XML elemente</target> +<source>Cannot find file %x.</source> +<target>Ne mogu pronaći datoteku %x.</target> + <source>&Open...</source> <target>&Otvori...</target> @@ -456,24 +465,21 @@ Naredba će biti pokrenuta ako se: <source>&Advanced</source> <target>&Napredno</target> -<source>&Check for new version</source> -<target>&Provjeri za novu verziju</target> +<source>&Check now</source> +<target>&Provjeri sada</target> -<source>Compare</source> -<target>Usporedi</target> +<source>Check &automatically once a week</source> +<target>Provjeri &automatski jednom tjedno</target> -<source>Compare both sides</source> -<target>Usporedi obje strane</target> +<source>Check for new version</source> +<target>Potraži noviju verziju</target> -<source>&Abort</source> -<target>&Odustani</target> +<source>Compare</source> +<target>Usporedi</target> <source>Synchronize</source> <target>Sinkroniziraj</target> -<source>Start synchronization</source> -<target>ZapoÄni sinkronizaciju</target> - <source>Add folder pair</source> <target>Dodaj mapu</target> @@ -483,15 +489,6 @@ Naredba će biti pokrenuta ako se: <source>Swap sides</source> <target>Zamjeni strane</target> -<source>Open</source> -<target>Otvori</target> - -<source>Save</source> -<target>Spremi</target> - -<source>Last used configurations (press DEL to remove from list)</source> -<target>Zadnje koriÅ¡tene postavke (pretisite DEL za ukloniti s liste)</target> - <source>Hide excluded items</source> <target>Sakrij iskljuÄene stavke</target> @@ -522,6 +519,18 @@ Naredba će biti pokrenuta ako se: <source>Time elapsed:</source> <target>Proteklo vremena:</target> +<source>Synchronizing...</source> +<target>Sinkroniziram...</target> + +<source>On completion</source> +<target>Pri zavrÅ¡etku</target> + +<source>Close</source> +<target>Zatvori</target> + +<source>&Pause</source> +<target>&Pauziraj</target> + <source>Batch job</source> <target>Slijedni zadatak</target> @@ -552,9 +561,6 @@ Naredba će biti pokrenuta ako se: <source>Abort synchronization on first error</source> <target>Prekini sinkronizaciju pri prvoj pogreÅ¡ci</target> -<source>On completion</source> -<target>Pri zavrÅ¡etku</target> - <source>Show progress dialog</source> <target>Prikaži napredak</target> @@ -612,8 +618,8 @@ jednak <source><- Two way -></source> <target>Dvosmjerno</target> -<source>Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically.</source> -<target>Identificiraj i izvedi promjene na obje strane koristeći bazu podataka. Brisanja, preimenovanja i sukobi se automatski detektiraju</target> +<source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> +<target>PronaÄ‘i i izvrÅ¡i izmjene na obje strane. Izbrisano, premjeÅ¡teno te sukobe se otkrije automatski pomoću baze.</target> <source>Mirror ->></source> <target>Zrcalno ->></target> @@ -651,15 +657,12 @@ jednak <source>Versioning</source> <target>OznaÄi</target> -<source>Move time-stamped files into specified folder</source> -<target>Premjesti vremenski-oznaÄene datoteke u odreÄ‘enu mapu</target> +<source>Move files to user-defined folder</source> +<target>Premjesti datoteke u odreÄ‘enu mapu</target> <source>Naming convention:</source> <target>Pravilo imena:</target> -<source>Configuration</source> -<target>Postavke</target> - <source>Item exists on left side only</source> <target>Stavka postoji samo na lijevoj strani</target> @@ -678,12 +681,6 @@ jednak <source>Conflict/item cannot be categorized</source> <target>Sukob/stavka ne može biti razvrstana</target> -<source>Synchronizing...</source> -<target>Sinkroniziram...</target> - -<source>&Pause</source> -<target>&Pauziraj</target> - <source>Source code written in C++ using:</source> <target>Izvorni kod napisan u C++ uz koriÅ¡tenje:</target> @@ -744,8 +741,8 @@ Napomena: Imena datoteka moraju biti srodni s glavnim mapama! <source>Maximum</source> <target>Maksimum</target> -<source>&Default</source> -<target>&Zadano</target> +<source>&Clear</source> +<target>&Brisati</target> <source>Fail-safe file copy</source> <target>Kopiranje zaÅ¡tićeno od greÅ¡aka</target> @@ -774,6 +771,12 @@ Napomena: Imena datoteka moraju biti srodni s glavnim mapama! <source>Description</source> <target>Opis</target> +<source>&Default</source> +<target>&Zadano</target> + +<source>Start synchronization</source> +<target>ZapoÄni sinkronizaciju</target> + <source>Variant</source> <target>NaÄin</target> @@ -804,12 +807,24 @@ Napomena: Imena datoteka moraju biti srodni s glavnim mapama! <source>Overview</source> <target>Pregled</target> +<source>Configuration</source> +<target>Postavke</target> + <source>Filter files</source> <target>Filtriraj datoteke</target> <source>Select view</source> <target>Izaberite pogled</target> +<source>Open...</source> +<target>Otvori...</target> + +<source>Save</source> +<target>Spremi</target> + +<source>Compare both sides</source> +<target>Usporedi obje strane</target> + <source>Set direction:</source> <target>Odaberi smijer:</target> @@ -867,102 +882,63 @@ Napomena: Imena datoteka moraju biti srodni s glavnim mapama! <source>FreeFileSync batch</source> <target>FreeFileSync slijedni zadatak</target> -<source>Never save changes</source> -<target>Nikad ne spremaj promjene</target> - <source>Do you want to save changes to %x?</source> <target>Da li želite spremiti izmjene za %x?</target> <source>Do&n't save</source> <target>Ne spremaj</target> +<source>Never save changes</source> +<target>Nikad ne spremaj promjene</target> + <source>Configuration loaded!</source> <target>Postavke uÄitane!</target> -<source>Hide files that exist on left side only</source> -<target>Sakrij datoteke koje postoje samo na lijevoj strani</target> - <source>Show files that exist on left side only</source> <target>Prikaži datoteke koje postoje samo na lijevoj strani</target> -<source>Hide files that exist on right side only</source> -<target>Sakrij datoteke koje koje postoje samo na desnoj strani</target> - <source>Show files that exist on right side only</source> <target>Prikaži datoteke koje postoje samo na desnoj strani</target> -<source>Hide files that are newer on left</source> -<target>Sakrij datoteke koje su novije lijevo</target> - <source>Show files that are newer on left</source> <target>Prikaži datoteke koje su novije lijevo</target> -<source>Hide files that are newer on right</source> -<target>Skrij datoteke koje su novije desno</target> - <source>Show files that are newer on right</source> <target>Prikaži datoteke koje su novije desno</target> -<source>Hide files that are equal</source> -<target>Skrij jednake datoteke</target> - <source>Show files that are equal</source> <target>Prikaži jednake datoteke</target> -<source>Hide files that are different</source> -<target>Sakrij datoteke koje su razliÄite</target> - <source>Show files that are different</source> <target>Prikaži datoteke koje su razliÄite</target> -<source>Hide conflicts</source> -<target>Sakrij sukobe</target> - <source>Show conflicts</source> <target>Prikaži spore</target> -<source>Hide files that will be created on the left side</source> -<target>Sakrij datoteke koje će biti napravljene na lijevoj strani</target> - <source>Show files that will be created on the left side</source> <target>Prikaži datoteke koje će biti napravljene na lijevoj strani</target> -<source>Hide files that will be created on the right side</source> -<target>Sakrij datoteke koje će biti napravljene na desnoj strani</target> - <source>Show files that will be created on the right side</source> <target>Prikaži datoteke koje će biti napravljene na desnoj strani</target> -<source>Hide files that will be deleted on the left side</source> -<target>Sakrij datoteke koje će biti izbrisane na lijevoj strani</target> - <source>Show files that will be deleted on the left side</source> <target>Prikaži datoteke koje će biti izbrisane na lijevoj strani</target> -<source>Hide files that will be deleted on the right side</source> -<target>Skrij datoteke koje će biti izbrisane na desnoj strani</target> - <source>Show files that will be deleted on the right side</source> <target>Prikaži datoteke koje će biti izbrisane na desnoj strani</target> -<source>Hide files that will be overwritten on left side</source> -<target>Skrij datoteke koje će biti prepisane na lijevoj strani</target> - <source>Show files that will be overwritten on left side</source> <target>Prikaži datoteke koje će biti prepisane na lijevoj strani</target> -<source>Hide files that will be overwritten on right side</source> -<target>Skrij datoteke koje će biti prepisane na desnoj strani</target> - <source>Show files that will be overwritten on right side</source> <target>Prikaži datoteke koje će biti prepisane na desnoj strani</target> -<source>Hide files that won't be copied</source> -<target>Sakrij datoteke koje neće biti kopirane</target> - <source>Show files that won't be copied</source> <target>Prikaži datoteke koje neće biti kopirane</target> +<source>Set as default</source> +<target>Postavi kao zadano</target> + <source>All folders are in sync!</source> <target>Sve mape su u sinkronizaciji!</target> @@ -975,15 +951,8 @@ Napomena: Imena datoteka moraju biti srodni s glavnim mapama! <source>File list exported!</source> <target>DatoteÄna lista izvezena!</target> -<source> -<pluralform>Object deleted successfully!</pluralform> -<pluralform>%x objects deleted successfully!</pluralform> -</source> -<target> -<pluralform>%x Objekt uspjeÅ¡no izbrisan!</pluralform> -<pluralform>%x objekta uspjeÅ¡no izbrisana!</pluralform> -<pluralform>%x objekata uspjeÅ¡no izbrisano!</pluralform> -</target> +<source>Searching for program updates...</source> +<target>Pretražujem ažuriranja programa...</target> <source> <pluralform>1 directory</pluralform> @@ -1021,6 +990,9 @@ Napomena: Imena datoteka moraju biti srodni s glavnim mapama! <source>&Ignore</source> <target>&Ignoriraj</target> +<source>Don't show this warning again</source> +<target>Ne prikazuj ovo upozorenje ponovno</target> + <source>&Switch</source> <target>&Zamjeni</target> @@ -1039,9 +1011,6 @@ Napomena: Imena datoteka moraju biti srodni s glavnim mapama! <source>Comparing content...</source> <target>UsporeÄ‘ujem sadržaj...</target> -<source>Copy</source> -<target>Kopiraj</target> - <source>Paused</source> <target>Pauzirano</target> @@ -1124,37 +1093,32 @@ Napomena: Imena datoteka moraju biti srodni s glavnim mapama! <target>Vrati skrivena upozorenja i dijaloÅ¡ki okvir ponovno vidljivim?</target> <source> -<pluralform>Do you really want to move the following object to the Recycle Bin?</pluralform> -<pluralform>Do you really want to move the following %x objects to the Recycle Bin?</pluralform> +<pluralform>Do you really want to move the following item to the Recycle Bin?</pluralform> +<pluralform>Do you really want to move the following %x items to the Recycle Bin?</pluralform> </source> -<target> -<pluralform>Dali zaista želite prebaciti navedeni %x objekt u KoÅ¡ za smeće?</pluralform> -<pluralform>Dali zaista želite prebaciti navedena %x objekta u KoÅ¡ za smeće?</pluralform> -<pluralform>Dali zaista želite prebaciti navedenih %x objekata u KoÅ¡ za smeće?</pluralform> -</target> +<target></target> <source> -<pluralform>Do you really want to delete the following object?</pluralform> -<pluralform>Do you really want to delete the following %x objects?</pluralform> +<pluralform>Do you really want to delete the following item?</pluralform> +<pluralform>Do you really want to delete the following %x items?</pluralform> </source> -<target> -<pluralform>Dali zaista želite izbrisati navedeni %x objekt?</pluralform> -<pluralform>Dali zaista želite izbrisati navedena %x objekta?</pluralform> -<pluralform>Dali zaista želite izbrisati navedenih %x objekata?</pluralform> -</target> +<target></target> <source>Leave as unresolved conflict</source> <target>Ostavi kao nerijeÅ¡eni sukob</target> +<source>Time stamp</source> +<target>Vremenska oznaka</target> + +<source>Append a timestamp to each file name</source> +<target>Dodaj vremensku oznaku svakom imenu datoteke</target> + <source>Replace</source> <target>Zamjeni</target> <source>Move files and replace if existing</source> <target>Premjesti datoteke i zamjeni ako već postoji</target> -<source>Append a timestamp to each file name</source> -<target>Dodaj vremensku oznaku svakom imenu datoteke</target> - <source>Folder</source> <target>Mapa</target> @@ -1167,6 +1131,9 @@ Napomena: Imena datoteka moraju biti srodni s glavnim mapama! <source>Files</source> <target>Datoteke</target> +<source>Items</source> +<target></target> + <source>Percentage</source> <target>Postotak</target> @@ -1272,6 +1239,12 @@ Napomena: Imena datoteka moraju biti srodni s glavnim mapama! <source>Cannot set privilege %x.</source> <target>Ne mogu postaviti prava za %x.</target> +<source>Failed to suspend system sleep mode.</source> +<target>Nije moguće odgoditi mod spavanja raÄunala</target> + +<source>Cannot change process I/O priorities.</source> +<target>Ne može se promjeniti proces I/O prioriteta</target> + <source>Unable to move %x to the Recycle Bin!</source> <target>Nije moguće prebaciti u KoÅ¡ za smeće</target> @@ -1290,14 +1263,38 @@ Napomena: Imena datoteka moraju biti srodni s glavnim mapama! <source>Setting default synchronization directions: Old files will be overwritten with newer files.</source> <target>Postavljam zadani sinkronizacijski smijer: Stare datoteke će biti prepisane novim datotekama.</target> +<source>Checking recycle bin availability for folder %x...</source> +<target>Provjeravam dosupnost koÅ¡a za smeće za mapu %x...</target> + +<source>Moving file %x to recycle bin</source> +<target>PremjeÅ¡tam datoteku %x u KoÅ¡ za smeće</target> + +<source>Moving folder %x to recycle bin</source> +<target>PremjeÅ¡tam mapu %x u KoÅ¡ za smeće</target> + +<source>Moving symbolic link %x to recycle bin</source> +<target>PremjeÅ¡tam simboliÄnu poveznicu %x u KoÅ¡ za smeće</target> + +<source>Deleting file %x</source> +<target>Brisanje datoteke %x</target> + +<source>Deleting folder %x</source> +<target>Brisanje mape %x</target> + +<source>Deleting symbolic link %x</source> +<target>Brisanje simboliÄnih poveznica %x</target> + <source>Recycle Bin is not available for the following paths! Files will be deleted permanently instead:</source> <target>KoÅ¡ za smeće nije dostupan za navedene putanje! Umjesto toga datoteke će biti trajno izbrisane:</target> -<source>You can ignore this error to consider the folder as empty.</source> -<target>Možete ignorirati ovu pogreÅ¡ku i smatrati mapu praznom</target> +<source>The corresponding folder will be considered as empty.</source> +<target>Odgovarajuća mapa će se smatrati prazna.</target> + +<source>Cannot find the following folders:</source> +<target>Ne mogu pronaći slijedeće mape:</target> -<source>Cannot find folder %x.</source> -<target>Ne mogu pronaći mapu %x.</target> +<source>You can ignore this error to consider each folder as empty. The folders then will be created automatically during synchronization.</source> +<target></target> <source>Directories are dependent! Be careful when setting up synchronization rules:</source> <target>Direktoriji su u ovisnosti! Budite oprezni pri postavljanju sinkronizacijskih pravila:</target> @@ -1305,8 +1302,8 @@ Napomena: Imena datoteka moraju biti srodni s glavnim mapama! <source>Start comparison</source> <target>ZapoÄni usporedbu</target> -<source>Preparing synchronization...</source> -<target>Pripremam sinkronizaciju</target> +<source>Calculating sync directions...</source> +<target>IzraÄunavam smjerove sinkronizacije...</target> <source>Conflict detected:</source> <target>Sukob pronaÄ‘en:</target> @@ -1371,24 +1368,6 @@ Napomena: Imena datoteka moraju biti srodni s glavnim mapama! <source>Multiple...</source> <target>Mnogostruko...</target> -<source>Deleting file %x</source> -<target>Brisanje datoteke %x</target> - -<source>Deleting folder %x</source> -<target>Brisanje mape %x</target> - -<source>Deleting symbolic link %x</source> -<target>Brisanje simboliÄnih poveznica %x</target> - -<source>Moving file %x to recycle bin</source> -<target>PremjeÅ¡tam datoteku %x u KoÅ¡ za smeće</target> - -<source>Moving folder %x to recycle bin</source> -<target>PremjeÅ¡tam mapu %x u KoÅ¡ za smeće</target> - -<source>Moving symbolic link %x to recycle bin</source> -<target>PremjeÅ¡tam simboliÄnu poveznicu %x u KoÅ¡ za smeće</target> - <source>Moving file %x to %y</source> <target>PremjeÅ¡tam datoteku %x u %y</target> @@ -1401,9 +1380,6 @@ Napomena: Imena datoteka moraju biti srodni s glavnim mapama! <source>Removing old versions...</source> <target>Uklanjam starije verzije...</target> -<source>Creating file %x</source> -<target>IzraÄ‘ujem datoteku %x</target> - <source>Creating symbolic link %x</source> <target>IzraÄ‘ujem simboliÄnu poveznicu %x</target> @@ -1422,6 +1398,9 @@ Napomena: Imena datoteka moraju biti srodni s glavnim mapama! <source>Updating attributes of %x</source> <target>Obnavljam atribute od %x</target> +<source>Cannot find %x.</source> +<target>Ne mogu pronaći %x.</target> + <source>Target folder %x already existing.</source> <target>OdrediÅ¡na mapa %x već postoji.</target> @@ -1467,6 +1446,9 @@ Napomena: Imena datoteka moraju biti srodni s glavnim mapama! <source>Generating database...</source> <target>IzraÄ‘ujem bazu podataka...</target> +<source>Creating Volume Shadow Copy for %x...</source> +<target>IzraÄ‘ujem Volume Shadow Kopiju za %x...</target> + <source>Data verification error: Source and target file have different content!</source> <target>GreÅ¡ka pri provjeravanju podataka: Izvorna i ciljna datoteka imaju razliÄit sadržaj!</target> diff --git a/BUILD/Languages/czech.lng b/BUILD/Languages/czech.lng index dc0ee886..092ed55d 100644 --- a/BUILD/Languages/czech.lng +++ b/BUILD/Languages/czech.lng @@ -19,6 +19,9 @@ <source>Total time:</source> <target>Celkový Äas:</target> +<source>Cannot set directory lock for %x.</source> +<target>Nelze nastavit zámek adresáře %x.</target> + <source>Show in Explorer</source> <target>Zobrazit v PrůzkumnÃkovi</target> @@ -40,6 +43,9 @@ <source>Error</source> <target>Chyba</target> +<source>Selected variant:</source> +<target>Vybraná varianta:</target> + <source>Select alternate comparison settings</source> <target>ZmÄ›nit nastavenà porovnánÃ</target> @@ -58,6 +64,12 @@ <source>Clear filter settings</source> <target>ZruÅ¡it nastavenà filtru</target> +<source>Copy</source> +<target>KopÃrovat</target> + +<source>Paste</source> +<target>Vložit</target> + <source>Save as batch job</source> <target>Uložit jako dávku</target> @@ -97,11 +109,8 @@ <source>Fatal Error</source> <target>Závažná chyba</target> -<source>Windows Error Code %x:</source> -<target>Chybový kód Windows %x:</target> - -<source>Linux Error Code %x:</source> -<target>Chybový kód Linux %x:</target> +<source>Error Code %x:</source> +<target>Chybový kód %x</target> <source>Cannot resolve symbolic link %x.</source> <target>Nelze najÃt odkaz zástupce %x.</target> @@ -161,8 +170,8 @@ <source>Waiting while directory is locked (%x)...</source> <target>ÄŒekánà na uzamÄenà adresáře (%x)</target> -<source>Cannot set directory lock %x.</source> -<target>Nelze nastavit zámek adresáře %x.</target> +<source>Creating file %x</source> +<target>Vytvářenà souboru %x</target> <source> <pluralform>1 sec</pluralform> @@ -196,9 +205,6 @@ <source>/sec</source> <target>/s</target> -<source>Cannot find file %x.</source> -<target>Nelze najÃt soubor %x.</target> - <source>File %x does not contain a valid configuration.</source> <target>Soubor %x neobsahuje platnou konfiguraci.</target> @@ -206,10 +212,10 @@ <target>Konfigurace ze souboru %x byla naÄtena jen ÄásteÄnÄ›.</target> <source>Cannot access Volume Shadow Copy Service.</source> -<target>NepodaÅ™il se pÅ™Ãstup ke službÄ› Volume Shadow Copy Service.</target> +<target>NepodaÅ™il se pÅ™Ãstup ke službÄ› StÃnové kopie.</target> <source>Please use FreeFileSync 64-bit version to create shadow copies on this system.</source> -<target>ProsÃm použijte FreeFileSync 64-bitovou verzi pro použità služby Volume Shadow Copy.</target> +<target>ProsÃm použijte FreeFileSync 64-bitovou verzi pro použità služby StÃnové kopie.</target> <source>Cannot load file %x.</source> <target>Nelze naÄÃst soubor %x.</target> @@ -223,6 +229,9 @@ <source>Cannot read the following XML elements:</source> <target>Nelze naÄÃst následujÃcà XML elementy:</target> +<source>Cannot find file %x.</source> +<target>Nelze najÃt soubor %x.</target> + <source>&Open...</source> <target>&OtevÅ™Ãt...</target> @@ -456,24 +465,21 @@ PÅ™Ãkaz je spuÅ¡tÄ›n když: <source>&Advanced</source> <target>&UpÅ™esnit</target> -<source>&Check for new version</source> -<target>Zkontrolovat &aktualizace</target> +<source>&Check now</source> +<target>Zkontrolovat &nynÃ</target> -<source>Compare</source> -<target>PorovnánÃ</target> +<source>Check &automatically once a week</source> +<target>Kontrolovat &automaticky jendou týdnÄ›</target> -<source>Compare both sides</source> -<target>Porovnat obÄ› strany</target> +<source>Check for new version</source> +<target>&Zkontrolovat aktualizace</target> -<source>&Abort</source> -<target>&UkonÄit</target> +<source>Compare</source> +<target>PorovnánÃ</target> <source>Synchronize</source> <target>Synchronizace</target> -<source>Start synchronization</source> -<target>Start synchronizace</target> - <source>Add folder pair</source> <target>PÅ™idat adresář pro porovnánÃ</target> @@ -483,15 +489,6 @@ PÅ™Ãkaz je spuÅ¡tÄ›n když: <source>Swap sides</source> <target>ZmÄ›na stran</target> -<source>Open</source> -<target>NaÄÃst</target> - -<source>Save</source> -<target>Uložit</target> - -<source>Last used configurations (press DEL to remove from list)</source> -<target>PoslednÄ› použité konfigurace (pomocà DEL můžete položku smazat)</target> - <source>Hide excluded items</source> <target>Skrýt vynechané položky</target> @@ -522,6 +519,18 @@ PÅ™Ãkaz je spuÅ¡tÄ›n když: <source>Time elapsed:</source> <target>Uplynulý Äas:</target> +<source>Synchronizing...</source> +<target>Synchronizuji...</target> + +<source>On completion</source> +<target>Po dokonÄenÃ</target> + +<source>Close</source> +<target>ZavÅ™Ãt</target> + +<source>&Pause</source> +<target>&Pauza</target> + <source>Batch job</source> <target>Dávkový soubor</target> @@ -552,9 +561,6 @@ PÅ™Ãkaz je spuÅ¡tÄ›n když: <source>Abort synchronization on first error</source> <target>UkonÄit synchronizaci pÅ™i prvnà chybÄ›</target> -<source>On completion</source> -<target>Po dokonÄenÃ</target> - <source>Show progress dialog</source> <target>Zobrazit průbÄ›h zpracovánÃ</target> @@ -612,8 +618,8 @@ je stejný <source><- Two way -></source> <target><- Databáze -></target> -<source>Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically.</source> -<target>Rozpoznat a provést zmÄ›ny na obou stranách pomocà databáze. OdstranÄ›né nebo pÅ™ejmenované soubory a konflikty budou detekovány automaticky.</target> +<source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> +<target>Rozpoznat a provést zmÄ›ny na obou stranách. OdstranÄ›né, pÅ™esunuté nebo pÅ™ejmenované soubory a konflikty budou detekovány automaticky pomocà databáze.</target> <source>Mirror ->></source> <target>Zrcadlenà ->></target> @@ -651,15 +657,12 @@ je stejný <source>Versioning</source> <target>VerzovánÃ</target> -<source>Move time-stamped files into specified folder</source> -<target>PÅ™esunout ÄasovÄ› oznaÄenà soubory do zvláštnÃho adresáře</target> +<source>Move files to user-defined folder</source> +<target>PÅ™esunout soubory do uživatelského adresáře</target> <source>Naming convention:</source> <target>PojmenovánÃ:</target> -<source>Configuration</source> -<target>Konfigurace</target> - <source>Item exists on left side only</source> <target>Položky existujÃcà pouze vlevo</target> @@ -678,12 +681,6 @@ je stejný <source>Conflict/item cannot be categorized</source> <target>Konflikty/položky které nelze zaÅ™adit</target> -<source>Synchronizing...</source> -<target>Synchronizuji...</target> - -<source>&Pause</source> -<target>&Pauza</target> - <source>Source code written in C++ using:</source> <target>Zdrojový kód byl napsán kompletnÄ› v C++ pomocÃ:</target> @@ -744,8 +741,8 @@ Poznámka: Filtr je aplikován relativnÄ› k základnÃm adresářům. <source>Maximum</source> <target>Do</target> -<source>&Default</source> -<target>&PÅ™eddefinované</target> +<source>&Clear</source> +<target>&Smazat</target> <source>Fail-safe file copy</source> <target>BezpeÄné kopÃrovánà souborů</target> @@ -757,7 +754,7 @@ Poznámka: Filtr je aplikován relativnÄ› k základnÃm adresářům. <target>KopÃrovat zamÄené soubory</target> <source>Copy shared or locked files using Volume Shadow Copy Service (Requires Administrator rights)</source> -<target>KopÃrovat sdÃlené nebo zamÄené soubory pomocà Volume Shadow Copy Service (Vyžaduje administrátorské oprávnÄ›nÃ)</target> +<target>KopÃrovat sdÃlené nebo zamÄené soubory pomocà služby StÃnové kopie (Vyžaduje administrátorské oprávnÄ›nÃ)</target> <source>Copy file access permissions</source> <target>KopÃrovat pÅ™Ãstupová oprávnÄ›nà k souborům</target> @@ -774,6 +771,12 @@ Poznámka: Filtr je aplikován relativnÄ› k základnÃm adresářům. <source>Description</source> <target>Popis</target> +<source>&Default</source> +<target>&PÅ™eddefinované</target> + +<source>Start synchronization</source> +<target>Start synchronizace</target> + <source>Variant</source> <target>Varianta</target> @@ -804,12 +807,24 @@ Poznámka: Filtr je aplikován relativnÄ› k základnÃm adresářům. <source>Overview</source> <target>PÅ™ehled</target> +<source>Configuration</source> +<target>Konfigurace</target> + <source>Filter files</source> <target>Filtr souborů</target> <source>Select view</source> <target>Vyberte zobrazenÃ</target> +<source>Open...</source> +<target>OtevÅ™Ãt...</target> + +<source>Save</source> +<target>Uložit</target> + +<source>Compare both sides</source> +<target>Porovnat obÄ› strany</target> + <source>Set direction:</source> <target>Nastavit adresář:</target> @@ -867,102 +882,63 @@ Poznámka: Filtr je aplikován relativnÄ› k základnÃm adresářům. <source>FreeFileSync batch</source> <target>FreeFileSync dávka</target> -<source>Never save changes</source> -<target>Nikdy neukládat zmÄ›ny</target> - <source>Do you want to save changes to %x?</source> <target>Uložit zmÄ›ny do %x?</target> <source>Do&n't save</source> <target>Neukládat</target> +<source>Never save changes</source> +<target>Nikdy neukládat zmÄ›ny</target> + <source>Configuration loaded!</source> <target>Konfigurace naÄtena.</target> -<source>Hide files that exist on left side only</source> -<target>Skrýt soubory existujÃcà pouze vlevo</target> - <source>Show files that exist on left side only</source> <target>Zobrazit soubory existujÃcà pouze vlevo</target> -<source>Hide files that exist on right side only</source> -<target>Skrýt soubory existujÃcà pouze vpravo</target> - <source>Show files that exist on right side only</source> <target>Zobrazit soubory existujÃcà pouze vpravo</target> -<source>Hide files that are newer on left</source> -<target>Skrýt novÄ›jÅ¡Ã zleva</target> - <source>Show files that are newer on left</source> <target>Zobrazit soubory novÄ›jÅ¡Ã vlevo</target> -<source>Hide files that are newer on right</source> -<target>Skrýt novÄ›jÅ¡Ã zprava</target> - <source>Show files that are newer on right</source> <target>Zobrazit soubory novÄ›jÅ¡Ã vpravo</target> -<source>Hide files that are equal</source> -<target>Skrýt shodné soubory</target> - <source>Show files that are equal</source> <target>Zobrazit shodné soubory</target> -<source>Hide files that are different</source> -<target>Skrýt rozdÃlné soubory</target> - <source>Show files that are different</source> <target>Zobrazit rozdÃlené soubory</target> -<source>Hide conflicts</source> -<target>Skrýt konflikty</target> - <source>Show conflicts</source> <target>Zobrazit konflikty</target> -<source>Hide files that will be created on the left side</source> -<target>Skrýt soubory, které budou vlevo vytvoÅ™eny</target> - <source>Show files that will be created on the left side</source> <target>Zobrazit soubory, které budou vlevo vytvoÅ™eny</target> -<source>Hide files that will be created on the right side</source> -<target>Skrýt soubory, které budou vpravo vytvoÅ™eny</target> - <source>Show files that will be created on the right side</source> <target>Zobrazit soubory, které budou vpravo vytvoÅ™eny</target> -<source>Hide files that will be deleted on the left side</source> -<target>Skrýt soubory, které budou vlevo smazány</target> - <source>Show files that will be deleted on the left side</source> <target>Zobrazit soubory, které budou vlevo smazány</target> -<source>Hide files that will be deleted on the right side</source> -<target>Skrýt soubory, které budou vpravo smazány</target> - <source>Show files that will be deleted on the right side</source> <target>Zobrazit soubory, které budou vpravo smazány</target> -<source>Hide files that will be overwritten on left side</source> -<target>Skrýt soubory, které budou vlevo pÅ™epsány</target> - <source>Show files that will be overwritten on left side</source> <target>Zobrazit soubory, které budou vlevo pÅ™epsány</target> -<source>Hide files that will be overwritten on right side</source> -<target>Skrýt soubory, které budou vpravo pÅ™epsány</target> - <source>Show files that will be overwritten on right side</source> <target>Zobrazit soubory, které budou vpravo pÅ™epsány</target> -<source>Hide files that won't be copied</source> -<target>Skrýt soubory, které nebudou kopÃrovány</target> - <source>Show files that won't be copied</source> <target>Zobrazit soubory, které nebudou kopÃrovány</target> +<source>Set as default</source> +<target>Nastavit jako výchozÃ</target> + <source>All folders are in sync!</source> <target>VÅ¡echny složky jsou synchronizovány!</target> @@ -975,15 +951,8 @@ Poznámka: Filtr je aplikován relativnÄ› k základnÃm adresářům. <source>File list exported!</source> <target>Seznam souborů exportován!</target> -<source> -<pluralform>Object deleted successfully!</pluralform> -<pluralform>%x objects deleted successfully!</pluralform> -</source> -<target> -<pluralform>Objekt úspěšnÄ› smazán!</pluralform> -<pluralform>%x objekty úspěšnÄ› smazány!</pluralform> -<pluralform>%x objektů úspěšnÄ› smazáno!</pluralform> -</target> +<source>Searching for program updates...</source> +<target>Hledánà aktualizacà programu ...</target> <source> <pluralform>1 directory</pluralform> @@ -1021,6 +990,9 @@ Poznámka: Filtr je aplikován relativnÄ› k základnÃm adresářům. <source>&Ignore</source> <target>&PokraÄovat</target> +<source>Don't show this warning again</source> +<target>Nezobrazovat již pÅ™ÃÅ¡tÄ› toto varovánÃ</target> + <source>&Switch</source> <target>&PÅ™epnout</target> @@ -1039,9 +1011,6 @@ Poznámka: Filtr je aplikován relativnÄ› k základnÃm adresářům. <source>Comparing content...</source> <target>Porovnávánà obsahu...</target> -<source>Copy</source> -<target>KopÃrovat</target> - <source>Paused</source> <target>Pauza</target> @@ -1124,37 +1093,40 @@ Poznámka: Filtr je aplikován relativnÄ› k základnÃm adresářům. <target>Povolit opÄ›t zobrazovánà skrytých dialogů a hlášenÃ?</target> <source> -<pluralform>Do you really want to move the following object to the Recycle Bin?</pluralform> -<pluralform>Do you really want to move the following %x objects to the Recycle Bin?</pluralform> +<pluralform>Do you really want to move the following item to the Recycle Bin?</pluralform> +<pluralform>Do you really want to move the following %x items to the Recycle Bin?</pluralform> </source> <target> -<pluralform>Opravdu chcete pÅ™esunout následujÃcà objekt?</pluralform> -<pluralform>Opravdu chcete pÅ™esunout následujÃcà %x objekty?</pluralform> -<pluralform>Opravdu chcete pÅ™esunout následujÃcÃch %x objektů?</pluralform> +<pluralform>Opravdu chcete pÅ™esunout následujÃcà položku do KoÅ¡e?</pluralform> +<pluralform>Opravdu chcete pÅ™esunout následujÃcà %x položky do KoÅ¡e?</pluralform> +<pluralform>Opravdu chcete pÅ™esunout následujÃcÃch %x položek do KoÅ¡e?</pluralform> </target> <source> -<pluralform>Do you really want to delete the following object?</pluralform> -<pluralform>Do you really want to delete the following %x objects?</pluralform> +<pluralform>Do you really want to delete the following item?</pluralform> +<pluralform>Do you really want to delete the following %x items?</pluralform> </source> <target> -<pluralform>Opravdu chcete smazat následujÃcà objekt?</pluralform> -<pluralform>Opravdu chcete smazat následujÃcà %x objekty?</pluralform> -<pluralform>Opravdu chcete smazat následujÃcÃch %x objektů?</pluralform> +<pluralform>Opravdu chcete smazat následujÃcà položku?</pluralform> +<pluralform>Opravdu chcete smazat následujÃcà %x položky?</pluralform> +<pluralform>Opravdu chcete smazat následujÃcÃch %x položek?</pluralform> </target> <source>Leave as unresolved conflict</source> <target>Ponechat jako nevyÅ™eÅ¡ený konflikt</target> +<source>Time stamp</source> +<target>ÄŒasová znaÄka</target> + +<source>Append a timestamp to each file name</source> +<target>PÅ™idat Äasovou znaÄku ke jménu souboru</target> + <source>Replace</source> <target>Nahradit</target> <source>Move files and replace if existing</source> <target>PÅ™esunout a nahradit pokud soubory existujÃ</target> -<source>Append a timestamp to each file name</source> -<target>PÅ™idat Äasovou znaÄku ke jménu souboru</target> - <source>Folder</source> <target>Složka</target> @@ -1167,6 +1139,9 @@ Poznámka: Filtr je aplikován relativnÄ› k základnÃm adresářům. <source>Files</source> <target>Soubory</target> +<source>Items</source> +<target></target> + <source>Percentage</source> <target>Procentnà podÃl</target> @@ -1272,6 +1247,12 @@ Poznámka: Filtr je aplikován relativnÄ› k základnÃm adresářům. <source>Cannot set privilege %x.</source> <target>Nelze nastavit práva pro %x.</target> +<source>Failed to suspend system sleep mode.</source> +<target>NepodaÅ™ilo se uspat systém</target> + +<source>Cannot change process I/O priorities.</source> +<target>Nelze nastavit priority procesu.</target> + <source>Unable to move %x to the Recycle Bin!</source> <target>Nenà možné pÅ™esunout %x do KoÅ¡e!</target> @@ -1290,14 +1271,38 @@ Poznámka: Filtr je aplikován relativnÄ› k základnÃm adresářům. <source>Setting default synchronization directions: Old files will be overwritten with newer files.</source> <target>Nastaven výchozà způsob synchronizace: Staré soubory budou nahrazeny novými.</target> +<source>Checking recycle bin availability for folder %x...</source> +<target>Kontrola KoÅ¡e na složku %x ...</target> + +<source>Moving file %x to recycle bin</source> +<target>PÅ™esouvánà souboru %x do KoÅ¡e</target> + +<source>Moving folder %x to recycle bin</source> +<target>PÅ™esouvánà afresáře %x do KoÅ¡e</target> + +<source>Moving symbolic link %x to recycle bin</source> +<target>PÅ™esouvánà symbolického odkazu %x do KoÅ¡e</target> + +<source>Deleting file %x</source> +<target>Mazánà souboru %x</target> + +<source>Deleting folder %x</source> +<target>Mazánà adresáře %x</target> + +<source>Deleting symbolic link %x</source> +<target>Mazánà symbolického odkazu %x</target> + <source>Recycle Bin is not available for the following paths! Files will be deleted permanently instead:</source> <target>Nelze použÃt KoÅ¡ pro následujÃcà umÃstÄ›nÃ! Soubory budou odstranÄ›ny trvale:</target> -<source>You can ignore this error to consider the folder as empty.</source> -<target>Tuto chybu můžete pÅ™eskoÄit a považovat neexistujÃcà složku jako prázdnou.</target> +<source>The corresponding folder will be considered as empty.</source> +<target>OdpovÃdajÃcà složku bude považován za prázdný.</target> -<source>Cannot find folder %x.</source> -<target>>Nelze najÃt složku %x.</target> +<source>Cannot find the following folders:</source> +<target>Nelze najÃt následujÃcà složky:</target> + +<source>You can ignore this error to consider each folder as empty.</source> +<target>Tuto chybu můžete pÅ™eskoÄit a považovat neexistujÃcà složku jako prázdnou.</target> <source>Directories are dependent! Be careful when setting up synchronization rules:</source> <target>Adresáře jsou závislé! BuÄte opatrnà s definicà synchronizaÄnÃch pravidel:</target> @@ -1305,8 +1310,8 @@ Poznámka: Filtr je aplikován relativnÄ› k základnÃm adresářům. <source>Start comparison</source> <target>Spustit porovnánÃ</target> -<source>Preparing synchronization...</source> -<target>PÅ™Ãprava synchronizace...</target> +<source>Calculating sync directions...</source> +<target>PÅ™Ãprava adresářů synchronizace...</target> <source>Conflict detected:</source> <target>Zaznamenán konflikt:</target> @@ -1371,24 +1376,6 @@ Poznámka: Filtr je aplikován relativnÄ› k základnÃm adresářům. <source>Multiple...</source> <target>Různé...</target> -<source>Deleting file %x</source> -<target>Mazánà souboru %x</target> - -<source>Deleting folder %x</source> -<target>Mazánà adresáře %x</target> - -<source>Deleting symbolic link %x</source> -<target>Mazánà symbolického odkazu %x</target> - -<source>Moving file %x to recycle bin</source> -<target>PÅ™esouvánà souboru %x do KoÅ¡e</target> - -<source>Moving folder %x to recycle bin</source> -<target>PÅ™esouvánà afresáře %x do KoÅ¡e</target> - -<source>Moving symbolic link %x to recycle bin</source> -<target>PÅ™esouvánà symbolického odkazu %x do KoÅ¡e</target> - <source>Moving file %x to %y</source> <target>PÅ™esouvánà souboru %x do %y</target> @@ -1401,9 +1388,6 @@ Poznámka: Filtr je aplikován relativnÄ› k základnÃm adresářům. <source>Removing old versions...</source> <target>Odstraňovánà starých verzÃ...</target> -<source>Creating file %x</source> -<target>Vytvářenà souboru %x</target> - <source>Creating symbolic link %x</source> <target>Vytvářenà symbolického odkazu %x</target> @@ -1422,6 +1406,9 @@ Poznámka: Filtr je aplikován relativnÄ› k základnÃm adresářům. <source>Updating attributes of %x</source> <target>Aktualizace atributů souboru %x</target> +<source>Cannot find %x.</source> +<target>Nelze najÃt %x.</target> + <source>Target folder %x already existing.</source> <target>CÃlova složka %x již existuje.</target> @@ -1467,6 +1454,9 @@ Poznámka: Filtr je aplikován relativnÄ› k základnÃm adresářům. <source>Generating database...</source> <target>Vytvářenà databáze...</target> +<source>Creating Volume Shadow Copy for %x...</source> +<target>Vytvářenà StÃnové kopie pro %x...</target> + <source>Data verification error: Source and target file have different content!</source> <target>NezdaÅ™ila se verifikace dat: Zdrojový a cÃlový soubor majà rozdÃlný obsah!</target> diff --git a/BUILD/Languages/danish.lng b/BUILD/Languages/danish.lng index 5fcf5ec0..43e5de24 100644 --- a/BUILD/Languages/danish.lng +++ b/BUILD/Languages/danish.lng @@ -19,6 +19,9 @@ <source>Total time:</source> <target>Samlet tid:</target> +<source>Cannot set directory lock for %x.</source> +<target>Kan ikke lÃ¥se mappen %x.</target> + <source>Show in Explorer</source> <target>Ã…ben filplacering</target> @@ -40,6 +43,9 @@ <source>Error</source> <target>Fejl</target> +<source>Selected variant:</source> +<target>Valgt variant:</target> + <source>Select alternate comparison settings</source> <target>Tilpas analyse</target> @@ -58,6 +64,12 @@ <source>Clear filter settings</source> <target>Nulstil filter</target> +<source>Copy</source> +<target>Kopiér</target> + +<source>Paste</source> +<target>Indsæt</target> + <source>Save as batch job</source> <target>Gem som batchfil</target> @@ -97,11 +109,8 @@ <source>Fatal Error</source> <target>Fatal fejl</target> -<source>Windows Error Code %x:</source> -<target>Windows fejlkode %x:</target> - -<source>Linux Error Code %x:</source> -<target>Linux fejlkode %x:</target> +<source>Error Code %x:</source> +<target>Fejlkode %x:</target> <source>Cannot resolve symbolic link %x.</source> <target>Kan ikke følge symlinket %x.</target> @@ -121,7 +130,7 @@ </source> <target> <pluralform>1 byte</pluralform> -<pluralform>%x bytes</pluralform> +<pluralform>%x byte</pluralform> </target> <source>Database file %x is incompatible.</source> @@ -160,8 +169,8 @@ <source>Waiting while directory is locked (%x)...</source> <target>Venter mens mappe lÃ¥ses (%x)...</target> -<source>Cannot set directory lock %x.</source> -<target>Kan ikke lÃ¥se mappen %x.</target> +<source>Creating file %x</source> +<target>Opretter filen %x</target> <source> <pluralform>1 sec</pluralform> @@ -193,9 +202,6 @@ <source>/sec</source> <target>/sek</target> -<source>Cannot find file %x.</source> -<target>Kan ikke finde filen %x.</target> - <source>File %x does not contain a valid configuration.</source> <target>%x indeholder ikke gyldige indstillinger.</target> @@ -220,6 +226,9 @@ <source>Cannot read the following XML elements:</source> <target>Kan ikke læse følgende XML emner:</target> +<source>Cannot find file %x.</source> +<target>Kan ikke finde filen %x.</target> + <source>&Open...</source> <target>Ã…ben...</target> @@ -453,24 +462,21 @@ Kommandoen udføres hvis: <source>&Advanced</source> <target>Indstillinger</target> -<source>&Check for new version</source> +<source>&Check now</source> +<target>Søg nu</target> + +<source>Check &automatically once a week</source> +<target>Søg automatisk en gang om ugen</target> + +<source>Check for new version</source> <target>Søg efter opdatering</target> <source>Compare</source> <target>Analyser</target> -<source>Compare both sides</source> -<target>Analyser begge sider</target> - -<source>&Abort</source> -<target>Afbryd</target> - <source>Synchronize</source> <target>Synkroniser</target> -<source>Start synchronization</source> -<target>Start synkronisering</target> - <source>Add folder pair</source> <target>Tilføj mappepar</target> @@ -480,15 +486,6 @@ Kommandoen udføres hvis: <source>Swap sides</source> <target>Byt side</target> -<source>Open</source> -<target>Ã…ben</target> - -<source>Save</source> -<target>Gem job</target> - -<source>Last used configurations (press DEL to remove from list)</source> -<target>Senest brugte konfigurationer (tast DEL for at slette)</target> - <source>Hide excluded items</source> <target>Skjul ekskluderede emner</target> @@ -519,6 +516,18 @@ Kommandoen udføres hvis: <source>Time elapsed:</source> <target>Brugt tid:</target> +<source>Synchronizing...</source> +<target>Synkroniserer...</target> + +<source>On completion</source> +<target>Ved gennemført</target> + +<source>Close</source> +<target>Luk</target> + +<source>&Pause</source> +<target>Pause</target> + <source>Batch job</source> <target>Batchfil</target> @@ -549,9 +558,6 @@ Kommandoen udføres hvis: <source>Abort synchronization on first error</source> <target>Stop synkronisering ved første fejl</target> -<source>On completion</source> -<target>Ved gennemført</target> - <source>Show progress dialog</source> <target>Vis fremskridt</target> @@ -609,8 +615,8 @@ er identisk <source><- Two way -></source> <target>< Tovejs ></target> -<source>Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically.</source> -<target>Find og udbred ændringer pÃ¥ begge sider via en database. Sletninger, omdøbninger og konflikter opdages automatisk.</target> +<source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> +<target>Find og udbred ændringer pÃ¥ begge sider. Sletninger, omdøbninger og konflikter findes automatisk i en database.</target> <source>Mirror ->></source> <target>Spejling >></target> @@ -648,15 +654,12 @@ er identisk <source>Versioning</source> <target>Versionering</target> -<source>Move time-stamped files into specified folder</source> -<target>Flyt tidsstemplede filer til valgte mappe</target> +<source>Move files to user-defined folder</source> +<target>Flyt filer til valgt mappe</target> <source>Naming convention:</source> <target>Navneregler:</target> -<source>Configuration</source> -<target>Indstilling</target> - <source>Item exists on left side only</source> <target>Emnet findes kun pÃ¥ venstre side</target> @@ -675,12 +678,6 @@ er identisk <source>Conflict/item cannot be categorized</source> <target>Konflikt/ukendt emne</target> -<source>Synchronizing...</source> -<target>Synkroniserer...</target> - -<source>&Pause</source> -<target>Pause</target> - <source>Source code written in C++ using:</source> <target>Kildekoden er skrevet i C++ med hjælp fra:</target> @@ -741,8 +738,8 @@ Bemærk: Filnavne skal relatere til grundmapperne! <source>Maximum</source> <target>Maksimum</target> -<source>&Default</source> -<target>Standard</target> +<source>&Clear</source> +<target>Ryd</target> <source>Fail-safe file copy</source> <target>Sikker filkopiering</target> @@ -771,6 +768,12 @@ Bemærk: Filnavne skal relatere til grundmapperne! <source>Description</source> <target>Beskrivelse</target> +<source>&Default</source> +<target>Standard</target> + +<source>Start synchronization</source> +<target>Start synkronisering</target> + <source>Variant</source> <target>Jobtype</target> @@ -801,12 +804,24 @@ Bemærk: Filnavne skal relatere til grundmapperne! <source>Overview</source> <target>Oversigt</target> +<source>Configuration</source> +<target>Indstilling</target> + <source>Filter files</source> -<target>Filtre</target> +<target>Filtrer filer</target> <source>Select view</source> <target>Tilpas visning</target> +<source>Open...</source> +<target>Ã…ben...</target> + +<source>Save</source> +<target>Gem</target> + +<source>Compare both sides</source> +<target>Analyser begge sider</target> + <source>Set direction:</source> <target>Retning:</target> @@ -864,102 +879,63 @@ Bemærk: Filnavne skal relatere til grundmapperne! <source>FreeFileSync batch</source> <target>FreeFileSync batchfil</target> -<source>Never save changes</source> -<target>Gem aldrig</target> - <source>Do you want to save changes to %x?</source> <target>Vil du gemme ændringer i %x?</target> <source>Do&n't save</source> <target>Gem ikke</target> +<source>Never save changes</source> +<target>Gem aldrig</target> + <source>Configuration loaded!</source> <target>Indstillinger indlæst!</target> -<source>Hide files that exist on left side only</source> -<target>Skjul filer der kun findes pÃ¥ venstre side</target> - <source>Show files that exist on left side only</source> <target>Vis filer der kun findes pÃ¥ venstre side</target> -<source>Hide files that exist on right side only</source> -<target>Skjul filer der kun findes pÃ¥ højre side</target> - <source>Show files that exist on right side only</source> <target>Vis filer der kun findes pÃ¥ højre side</target> -<source>Hide files that are newer on left</source> -<target>Skjul nyere filer pÃ¥ venstre side</target> - <source>Show files that are newer on left</source> <target>Vis nyere filer pÃ¥ venstre side</target> -<source>Hide files that are newer on right</source> -<target>Skjul nyere filer pÃ¥ højre side</target> - <source>Show files that are newer on right</source> <target>Vis nyere filer pÃ¥ højre side</target> -<source>Hide files that are equal</source> -<target>Skjul ens filer</target> - <source>Show files that are equal</source> <target>Vis ens filer</target> -<source>Hide files that are different</source> -<target>Skjul uens filer</target> - <source>Show files that are different</source> <target>Vis uens filer</target> -<source>Hide conflicts</source> -<target>Skjul konflikter</target> - <source>Show conflicts</source> <target>Vis konflikter</target> -<source>Hide files that will be created on the left side</source> -<target>Skjul filer der oprettes pÃ¥ venstre side</target> - <source>Show files that will be created on the left side</source> <target>Vis filer der oprettes pÃ¥ venstre side</target> -<source>Hide files that will be created on the right side</source> -<target>Skjul filer der oprettes pÃ¥ højre side</target> - <source>Show files that will be created on the right side</source> <target>Vis filer der oprettes pÃ¥ højre side</target> -<source>Hide files that will be deleted on the left side</source> -<target>Skjul filer der slettes pÃ¥ venstre side</target> - <source>Show files that will be deleted on the left side</source> <target>Vis filer der slettes pÃ¥ venstre side</target> -<source>Hide files that will be deleted on the right side</source> -<target>Skjul filer der slettes pÃ¥ højre side</target> - <source>Show files that will be deleted on the right side</source> <target>Vis filer der slettes pÃ¥ højre side</target> -<source>Hide files that will be overwritten on left side</source> -<target>Skjul filer der overskrives pÃ¥ venstre side</target> - <source>Show files that will be overwritten on left side</source> <target>Vis filer der overskrives pÃ¥ venstre side</target> -<source>Hide files that will be overwritten on right side</source> -<target>Skjul filer der overskrives pÃ¥ højre side</target> - <source>Show files that will be overwritten on right side</source> <target>Vis filer der overskrives pÃ¥ højre side</target> -<source>Hide files that won't be copied</source> -<target>Skjul filer der ikke kopieres</target> - <source>Show files that won't be copied</source> <target>Vis filer der ikke kopieres</target> +<source>Set as default</source> +<target>Sæt som standard</target> + <source>All folders are in sync!</source> <target>Alle mapper er synkrone</target> @@ -972,14 +948,8 @@ Bemærk: Filnavne skal relatere til grundmapperne! <source>File list exported!</source> <target>Fillisten blev eksporteret!</target> -<source> -<pluralform>Object deleted successfully!</pluralform> -<pluralform>%x objects deleted successfully!</pluralform> -</source> -<target> -<pluralform>Emnet blev slettet!</pluralform> -<pluralform>%x emner blev slettet!</pluralform> -</target> +<source>Searching for program updates...</source> +<target>Søger efter opdatering...</target> <source> <pluralform>1 directory</pluralform> @@ -1014,6 +984,9 @@ Bemærk: Filnavne skal relatere til grundmapperne! <source>&Ignore</source> <target>Ignorer</target> +<source>Don't show this warning again</source> +<target>Vis ikke igen</target> + <source>&Switch</source> <target>Skift</target> @@ -1032,9 +1005,6 @@ Bemærk: Filnavne skal relatere til grundmapperne! <source>Comparing content...</source> <target>Analyserer indhold...</target> -<source>Copy</source> -<target>Kopier</target> - <source>Paused</source> <target>Pauset</target> @@ -1117,8 +1087,8 @@ Bemærk: Filnavne skal relatere til grundmapperne! <target>Vis skjulte advarsler og dialoger igen?</target> <source> -<pluralform>Do you really want to move the following object to the Recycle Bin?</pluralform> -<pluralform>Do you really want to move the following %x objects to the Recycle Bin?</pluralform> +<pluralform>Do you really want to move the following item to the Recycle Bin?</pluralform> +<pluralform>Do you really want to move the following %x items to the Recycle Bin?</pluralform> </source> <target> <pluralform>Vil du flytte emnet til papirkurven?</pluralform> @@ -1126,8 +1096,8 @@ Bemærk: Filnavne skal relatere til grundmapperne! </target> <source> -<pluralform>Do you really want to delete the following object?</pluralform> -<pluralform>Do you really want to delete the following %x objects?</pluralform> +<pluralform>Do you really want to delete the following item?</pluralform> +<pluralform>Do you really want to delete the following %x items?</pluralform> </source> <target> <pluralform>Vil du slette følgende emne?</pluralform> @@ -1137,15 +1107,18 @@ Bemærk: Filnavne skal relatere til grundmapperne! <source>Leave as unresolved conflict</source> <target>Efterlad som uløst konflikt</target> +<source>Time stamp</source> +<target>Tidsstempel</target> + +<source>Append a timestamp to each file name</source> +<target>Føj tidsstempel til hvert filnavn</target> + <source>Replace</source> <target>Erstat</target> <source>Move files and replace if existing</source> <target>Flyt fil og erstat eventuelt eksisterende</target> -<source>Append a timestamp to each file name</source> -<target>Føj tidsstempel til hvert filnavn</target> - <source>Folder</source> <target>Mappe</target> @@ -1260,6 +1233,12 @@ Bemærk: Filnavne skal relatere til grundmapperne! <source>Cannot set privilege %x.</source> <target>Kan ikke sætte %x privilegier.</target> +<source>Failed to suspend system sleep mode.</source> +<target>Kunne ikke suspendere systemets standby funktion.</target> + +<source>Cannot change process I/O priorities.</source> +<target>Kan ikke ændre I/O prioriteter.</target> + <source>Unable to move %x to the Recycle Bin!</source> <target>Kan ikke flytte %x til papirkurv!</target> @@ -1278,14 +1257,38 @@ Bemærk: Filnavne skal relatere til grundmapperne! <source>Setting default synchronization directions: Old files will be overwritten with newer files.</source> <target>Sætter standardretning: Gamle filer overskrives med nyere.</target> +<source>Checking recycle bin availability for folder %x...</source> +<target>Tjekker papirkurvs tilgængelighed for mappen %x...</target> + +<source>Moving file %x to recycle bin</source> +<target>Flytter filen %x til papirkurv</target> + +<source>Moving folder %x to recycle bin</source> +<target>Flytter mappen %x til papirkurv</target> + +<source>Moving symbolic link %x to recycle bin</source> +<target>Flytter symlink %x til papirkurv</target> + +<source>Deleting file %x</source> +<target>Sletter filen %x</target> + +<source>Deleting folder %x</source> +<target>Sletter mappen %x</target> + +<source>Deleting symbolic link %x</source> +<target>Sletter symlink %x</target> + <source>Recycle Bin is not available for the following paths! Files will be deleted permanently instead:</source> <target>Papirkurven kan ikke bruges pÃ¥ følgende stier! Filer slettes permanent:</target> -<source>You can ignore this error to consider the folder as empty.</source> -<target>Du kan ignorere denne fejl og betragte mappen som tom.</target> +<source>The corresponding folder will be considered as empty.</source> +<target>Den tilsvarende mappe betragtes som tom.</target> -<source>Cannot find folder %x.</source> -<target>Kan ikke finde mappen %x.</target> +<source>Cannot find the following folders:</source> +<target>Kan ikke finde følgende mapper:</target> + +<source>You can ignore this error to consider each folder as empty.</source> +<target>Ignorer denne fejl for at betragte hver mappe som tom.</target> <source>Directories are dependent! Be careful when setting up synchronization rules:</source> <target>Afhængige mapper! Vær forsigtig nÃ¥r du laver synkroniseringsregler:</target> @@ -1293,7 +1296,7 @@ Bemærk: Filnavne skal relatere til grundmapperne! <source>Start comparison</source> <target>Start analyse</target> -<source>Preparing synchronization...</source> +<source>Calculating sync directions...</source> <target>Forbereder synkronisering...</target> <source>Conflict detected:</source> @@ -1359,24 +1362,6 @@ Bemærk: Filnavne skal relatere til grundmapperne! <source>Multiple...</source> <target>Flere...</target> -<source>Deleting file %x</source> -<target>Sletter filen %x</target> - -<source>Deleting folder %x</source> -<target>Sletter mappen %x</target> - -<source>Deleting symbolic link %x</source> -<target>Sletter symlinket %x</target> - -<source>Moving file %x to recycle bin</source> -<target>Flytter filen %x til papirkurven</target> - -<source>Moving folder %x to recycle bin</source> -<target>Flytter mappe %x til papirkurven</target> - -<source>Moving symbolic link %x to recycle bin</source> -<target>Flytter symlinket %x til papirkurven</target> - <source>Moving file %x to %y</source> <target>Flytter filen %x til %y</target> @@ -1389,9 +1374,6 @@ Bemærk: Filnavne skal relatere til grundmapperne! <source>Removing old versions...</source> <target>Fjerner gamle udgaver...</target> -<source>Creating file %x</source> -<target>Opretter filen %x</target> - <source>Creating symbolic link %x</source> <target>Opretter symlinket %x</target> @@ -1410,6 +1392,9 @@ Bemærk: Filnavne skal relatere til grundmapperne! <source>Updating attributes of %x</source> <target>Opdaterer attributter for %x</target> +<source>Cannot find %x.</source> +<target>Kan ikke finde %x.</target> + <source>Target folder %x already existing.</source> <target>Destinationsmappen %x findes allerede.</target> @@ -1455,6 +1440,9 @@ Bemærk: Filnavne skal relatere til grundmapperne! <source>Generating database...</source> <target>Opretter database...</target> +<source>Creating Volume Shadow Copy for %x...</source> +<target>Opretter VVS kopi for %x...</target> + <source>Data verification error: Source and target file have different content!</source> -<target>Godkendelsesfejl: Kilde- og destinationsfil har forskelligt indhold!</target> +<target>Godkendelsesfejl: Kilde og destinationsfil har forskelligt indhold!</target> diff --git a/BUILD/Languages/dutch.lng b/BUILD/Languages/dutch.lng index 0aff2993..4bb61171 100644 --- a/BUILD/Languages/dutch.lng +++ b/BUILD/Languages/dutch.lng @@ -19,6 +19,9 @@ <source>Total time:</source> <target>Totale tijd:</target> +<source>Cannot set directory lock for %x.</source> +<target>Kan locatie %x niet op slot zetten.</target> + <source>Show in Explorer</source> <target>Toon in Verkenner</target> @@ -40,6 +43,9 @@ <source>Error</source> <target>Fout</target> +<source>Selected variant:</source> +<target>Selecter variant:</target> + <source>Select alternate comparison settings</source> <target>Selecteer alternatieve vergelijkingsinstellingen</target> @@ -58,6 +64,12 @@ <source>Clear filter settings</source> <target>Verwijder filterinstellingen</target> +<source>Copy</source> +<target>Kopiëren</target> + +<source>Paste</source> +<target>Plakken</target> + <source>Save as batch job</source> <target>Opslaan als batch opdracht</target> @@ -97,11 +109,8 @@ <source>Fatal Error</source> <target>Kritieke fout</target> -<source>Windows Error Code %x:</source> -<target>Windows Foutcode %x:</target> - -<source>Linux Error Code %x:</source> -<target>Linux Foutcode %x:</target> +<source>Error Code %x:</source> +<target>Foutcode %x:</target> <source>Cannot resolve symbolic link %x.</source> <target>Kan snelkoppeling %x niet vinden.</target> @@ -160,8 +169,8 @@ <source>Waiting while directory is locked (%x)...</source> <target>Wachten totdat map is vergrendeld (%x)...</target> -<source>Cannot set directory lock %x.</source> -<target>Kan directory %x niet sluiten.</target> +<source>Creating file %x</source> +<target>Bestand %x wordt aangemaakt</target> <source> <pluralform>1 sec</pluralform> @@ -193,9 +202,6 @@ <source>/sec</source> <target>/sec</target> -<source>Cannot find file %x.</source> -<target>Kan bestand %x niet vinden.</target> - <source>File %x does not contain a valid configuration.</source> <target>Bestand %x bevat geen valide configuratie.</target> @@ -220,6 +226,9 @@ <source>Cannot read the following XML elements:</source> <target>Kan de volgende XML elementen niet lezen:</target> +<source>Cannot find file %x.</source> +<target>Kan bestand %x niet vinden.</target> + <source>&Open...</source> <target>&Open...</target> @@ -453,24 +462,21 @@ De opdracht word geactiveerd als: <source>&Advanced</source> <target>&Geavanceerd</target> -<source>&Check for new version</source> -<target>&Controleer op nieuwe versie</target> +<source>&Check now</source> +<target>&Controleer nu</target> -<source>Compare</source> -<target>Vergelijk</target> +<source>Check &automatically once a week</source> +<target>Controleer &automatisch eens per week</target> -<source>Compare both sides</source> -<target>Vergelijk beide zijdes</target> +<source>Check for new version</source> +<target>Controleer voor nieuwe versie</target> -<source>&Abort</source> -<target>&Afbreken</target> +<source>Compare</source> +<target>Vergelijk</target> <source>Synchronize</source> <target>Synchroniseer</target> -<source>Start synchronization</source> -<target>Start synchronisatie</target> - <source>Add folder pair</source> <target>Voeg gekoppelde mappen toe</target> @@ -480,15 +486,6 @@ De opdracht word geactiveerd als: <source>Swap sides</source> <target>Wissel zijdes</target> -<source>Open</source> -<target>Open</target> - -<source>Save</source> -<target>Opslaan</target> - -<source>Last used configurations (press DEL to remove from list)</source> -<target>Laatst gebruikte instellingen (druk op DEL om iets te verwijderen)</target> - <source>Hide excluded items</source> <target>Verberg uitgesloten bestanden</target> @@ -519,6 +516,18 @@ De opdracht word geactiveerd als: <source>Time elapsed:</source> <target>Verstreken tijd:</target> +<source>Synchronizing...</source> +<target>Synchroniseert...</target> + +<source>On completion</source> +<target>Na voltooiing</target> + +<source>Close</source> +<target>Sluiten</target> + +<source>&Pause</source> +<target>&Pauze</target> + <source>Batch job</source> <target>Taaklijst</target> @@ -549,9 +558,6 @@ De opdracht word geactiveerd als: <source>Abort synchronization on first error</source> <target>Synchronisatie stoppen bij eerste foutmelding</target> -<source>On completion</source> -<target>Na voltooiing</target> - <source>Show progress dialog</source> <target>Toon voortgangsdialoogvenster</target> @@ -609,8 +615,8 @@ overeenkomt <source><- Two way -></source> <target><- Twee kanten op -></target> -<source>Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically.</source> -<target>Identificeer en verspreid veranderingen aan beide kanten met behulp van een database. Verwijderingen, hernoemingen en conflicten worden automatisch gedetecteerd.</target> +<source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> +<target>Identificeer en pas veranderingen toe aan beide kanten. Verwijderingen, verplaatsingen en conflicten worden automatisch gevonden met behulp van een database.</target> <source>Mirror ->></source> <target>Spiegelen ->></target> @@ -648,15 +654,12 @@ overeenkomt <source>Versioning</source> <target>Versiebeheer</target> -<source>Move time-stamped files into specified folder</source> -<target>Verplaats bestanden met tijdstempel naar specifieke map</target> +<source>Move files to user-defined folder</source> +<target>Verplaats bestanden naar een gebruikers gedefineerde map</target> <source>Naming convention:</source> <target>Naamgevingsconventie</target> -<source>Configuration</source> -<target>Configuratie</target> - <source>Item exists on left side only</source> <target>Item bestaat alleen aan de linkerkant</target> @@ -675,12 +678,6 @@ overeenkomt <source>Conflict/item cannot be categorized</source> <target>Conflict/item kan niet worden gecategoriseerd</target> -<source>Synchronizing...</source> -<target>Synchroniseert...</target> - -<source>&Pause</source> -<target>&Pauze</target> - <source>Source code written in C++ using:</source> <target>Broncode geschreven in C++ met behulp van:</target> @@ -741,8 +738,8 @@ Opmerking: Bestandsnamen moeten relatief zijn aan de basis mappen! <source>Maximum</source> <target>Maximum</target> -<source>&Default</source> -<target>&Standaard</target> +<source>&Clear</source> +<target>&Leegmaken</target> <source>Fail-safe file copy</source> <target>Fail-safe bestandskopie</target> @@ -771,6 +768,12 @@ Opmerking: Bestandsnamen moeten relatief zijn aan de basis mappen! <source>Description</source> <target>Omschrijving</target> +<source>&Default</source> +<target>&Standaard</target> + +<source>Start synchronization</source> +<target>Start synchronisatie</target> + <source>Variant</source> <target>Variant</target> @@ -801,12 +804,24 @@ Opmerking: Bestandsnamen moeten relatief zijn aan de basis mappen! <source>Overview</source> <target>Overzicht</target> +<source>Configuration</source> +<target>Configuratie</target> + <source>Filter files</source> <target>Filter bestanden</target> <source>Select view</source> <target>Selecteer weergave</target> +<source>Open...</source> +<target>Open...</target> + +<source>Save</source> +<target>Opslaan</target> + +<source>Compare both sides</source> +<target>Vergelijk beide zijdes</target> + <source>Set direction:</source> <target>Stel richting in:</target> @@ -864,104 +879,62 @@ Opmerking: Bestandsnamen moeten relatief zijn aan de basis mappen! <source>FreeFileSync batch</source> <target>FreeFileSync taak</target> -<source>Never save changes</source> -<target>Wijzigingen nooit opslaan</target> - <source>Do you want to save changes to %x?</source> <target>Wilt u de wijzigingen in %x opslaan?</target> <source>Do&n't save</source> <target>&Niet opslaan</target> +<source>Never save changes</source> +<target>Wijzigingen nooit opslaan</target> + <source>Configuration loaded!</source> <target>Configuratie geladen!</target> -<source>Hide files that exist on left side only</source> -<target>Verberg bestanden die alleen aan de linkerzijde bestaan</target> - <source>Show files that exist on left side only</source> <target>Toon bestanden die alleen aan de linkerzijde bestaan</target> -<source>Hide files that exist on right side only</source> -<target>Verberg bestanden die alleen aan de rechterzijde bestaan</target> - <source>Show files that exist on right side only</source> <target>Toon bestanden die alleen aan de rechterzijde bestaan</target> -<source>Hide files that are newer on left</source> -<target>Verberg bestanden die aan de linkerzijde nieuwer zijn</target> - <source>Show files that are newer on left</source> <target>Toon bestanden die aan de linkerzijde nieuwer zijn</target> -<source>Hide files that are newer on right</source> -<target>Verberg bestanden die aan de rechterzijde nieuwer zijn</target> - <source>Show files that are newer on right</source> <target>Toon bestanden die aan de rechterzijde nieuwer zijn</target> -<source>Hide files that are equal</source> -<target>Verberg bestanden die gelijk zijn</target> - <source>Show files that are equal</source> <target>Toon bestanden die gelijk zijn</target> -<source>Hide files that are different</source> -<target>Verberg bestanden die verschillend zijn</target> - <source>Show files that are different</source> <target>Toon bestanden die verschillend zijn</target> -<source>Hide conflicts</source> -<target>Verberg conflicten</target> - <source>Show conflicts</source> <target>Toon conflicten</target> -<source>Hide files that will be created on the left side</source> -<target>Verberg bestanden die aan de linkerzijde aangemaakt zullen worden</target> - <source>Show files that will be created on the left side</source> <target>Toon bestanden die aan de linkerzijde aangemaakt zullen worden</target> -<source>Hide files that will be created on the right side</source> -<target>Verberg bestanden die aan de rechterzijde aangemaakt zullen worden</target> - <source>Show files that will be created on the right side</source> <target>Toon bestanden die aan de rechterzijde aangemaakt zullen worden</target> -<source>Hide files that will be deleted on the left side</source> -<target>Verberg bestanden die aan de linkerzijde aangemaakt zullen worden</target> - <source>Show files that will be deleted on the left side</source> <target>Toon bestanden die van de linkerzijde verwijderd zullen worden</target> -<source>Hide files that will be deleted on the right side</source> -<target>Verberg bestanden die aan de rechterzijde verwijderd zullen worden</target> - <source>Show files that will be deleted on the right side</source> <target>Toon bestanden die van de rechterzijde verwijderd zullen worden</target> -<source>Hide files that will be overwritten on left side</source> -<target>Verberg bestanden die aan de linkerzijde overschreven zullen worden</target> - <source>Show files that will be overwritten on left side</source> <target>Toon bestanden die aan de linkerzijde overschreven zullen worden</target> -<source>Hide files that will be overwritten on right side</source> -<target>Verberg bestanden die aan de rechterzijde overschreven zullen worden</target> - <source>Show files that will be overwritten on right side</source> <target>Toon bestanden die aan de rechterzijde overschreven zullen worden</target> -<source>Hide files that won't be copied</source> -<target>Verberg bestanden die niet gekopiëerd zullen worden</target> - <source>Show files that won't be copied</source> <target>Toon bestanden die niet gekopiëerd zullen worden</target> <source>Set as default</source> -<target></target> +<target>Instellen als standaard</target> <source>All folders are in sync!</source> <target>Alle mappen zijn gesynchroniseerd!</target> @@ -975,14 +948,8 @@ Opmerking: Bestandsnamen moeten relatief zijn aan de basis mappen! <source>File list exported!</source> <target>Bestandslijst geëxporteerd!</target> -<source> -<pluralform>Object deleted successfully!</pluralform> -<pluralform>%x objects deleted successfully!</pluralform> -</source> -<target> -<pluralform>Object succesvol verwijderd!</pluralform> -<pluralform>%x objecten succesvol verwijderd!</pluralform> -</target> +<source>Searching for program updates...</source> +<target>Bezig met zoeken naar programma updates...</target> <source> <pluralform>1 directory</pluralform> @@ -1017,6 +984,9 @@ Opmerking: Bestandsnamen moeten relatief zijn aan de basis mappen! <source>&Ignore</source> <target>&Negeren</target> +<source>Don't show this warning again</source> +<target>Laat deze waarschuwing niet opnieuw zien</target> + <source>&Switch</source> <target>&Omschakelen</target> @@ -1035,9 +1005,6 @@ Opmerking: Bestandsnamen moeten relatief zijn aan de basis mappen! <source>Comparing content...</source> <target>Inhoud vergelijken...</target> -<source>Copy</source> -<target>Kopiëren</target> - <source>Paused</source> <target>Gepauzeerd</target> @@ -1120,35 +1087,38 @@ Opmerking: Bestandsnamen moeten relatief zijn aan de basis mappen! <target>Verborgen waarschuwingen en dialogen zichtbaar maken?</target> <source> -<pluralform>Do you really want to move the following object to the Recycle Bin?</pluralform> -<pluralform>Do you really want to move the following %x objects to the Recycle Bin?</pluralform> +<pluralform>Do you really want to move the following item to the Recycle Bin?</pluralform> +<pluralform>Do you really want to move the following %x items to the Recycle Bin?</pluralform> </source> <target> -<pluralform>Weet u zeker dat u dit object naar de Prullenbak wil verplaatsen?</pluralform> -<pluralform>Weet u zeker dat u deze %x objecten naar de Prullenbak wil verplaatsen?</pluralform> +<pluralform>Weet u zeker dat u het volgende item naar de Prullebak wilt verplaatsen?</pluralform> +<pluralform>Weet u zeker dat u de volgende %x items naar de Prullebak wilt verplaatsen?</pluralform> </target> <source> -<pluralform>Do you really want to delete the following object?</pluralform> -<pluralform>Do you really want to delete the following %x objects?</pluralform> +<pluralform>Do you really want to delete the following item?</pluralform> +<pluralform>Do you really want to delete the following %x items?</pluralform> </source> <target> -<pluralform>Weet u zeker dat u dit object wilt verwijderen?</pluralform> -<pluralform>Weet u zeker dat u deze %x objecten wilt verwijderen?</pluralform> +<pluralform>Wilt u het volgende item echt verwijderen?</pluralform> +<pluralform>Wilt u echt de volgende %x items verwijderen?</pluralform> </target> <source>Leave as unresolved conflict</source> <target>Beschouw als onopgelost conflict</target> +<source>Time stamp</source> +<target>Tijdstempel</target> + +<source>Append a timestamp to each file name</source> +<target>Voeg een timestamp aan elke bestandsnaam toe</target> + <source>Replace</source> <target>Vervangen</target> <source>Move files and replace if existing</source> <target>Verplaats bestanden en overschrijf bestaande bestanden</target> -<source>Append a timestamp to each file name</source> -<target>Voeg een timestamp aan elke bestandsnaam toe</target> - <source>Folder</source> <target>Map</target> @@ -1263,6 +1233,12 @@ Opmerking: Bestandsnamen moeten relatief zijn aan de basis mappen! <source>Cannot set privilege %x.</source> <target>Kan privilege %x niet instellen.</target> +<source>Failed to suspend system sleep mode.</source> +<target>Het opschorten van slaapstand is mislukt.</target> + +<source>Cannot change process I/O priorities.</source> +<target>Kan de I/O prioriteiten niet aanpassen.</target> + <source>Unable to move %x to the Recycle Bin!</source> <target>Niet mogelijk om %x naar de Prullenbak te verplaatsen!</target> @@ -1281,14 +1257,38 @@ Opmerking: Bestandsnamen moeten relatief zijn aan de basis mappen! <source>Setting default synchronization directions: Old files will be overwritten with newer files.</source> <target>Stel standaard synchronisatie richtingen in: Oude bestanden worden door nieuwere bestanden overschreven.</target> +<source>Checking recycle bin availability for folder %x...</source> +<target>Prullebak beschikbaarheid voor map %x te controleren...</target> + +<source>Moving file %x to recycle bin</source> +<target>Bezig met verplaatsen van bestand %x naar de prullenbak</target> + +<source>Moving folder %x to recycle bin</source> +<target>Bezig met verplaatsen van map %x naar de prullenbak</target> + +<source>Moving symbolic link %x to recycle bin</source> +<target>Bezig met verplaatsen van snelkoppeling %x naar de prullenbak</target> + +<source>Deleting file %x</source> +<target>Verwijderen van bestand %x</target> + +<source>Deleting folder %x</source> +<target>Verwijderen van map %x</target> + +<source>Deleting symbolic link %x</source> +<target>Verwijderen van snelkoppeling %x</target> + <source>Recycle Bin is not available for the following paths! Files will be deleted permanently instead:</source> <target>Prullenbak is niet beschikbaar voor de volgende locaties! De bestanden worden permanent verwijderd:</target> -<source>You can ignore this error to consider the folder as empty.</source> -<target>U kunt deze waarschuwing negeren om de map als leeg te laten gelden.</target> +<source>The corresponding folder will be considered as empty.</source> +<target>De overeenkomstige map zal als leeg worden beschouwd.</target> -<source>Cannot find folder %x.</source> -<target>Kan map %x niet vinden.</target> +<source>Cannot find the following folders:</source> +<target>Kan de volgende mappen niet vinden:</target> + +<source>You can ignore this error to consider each folder as empty.</source> +<target>U kunt deze foutmelding negeren om elke map als leeg te beschouwen.</target> <source>Directories are dependent! Be careful when setting up synchronization rules:</source> <target>Mappen zijn afhankelijk van elkaar! Wees voorzichtig met het maken van synchronisatieregels:</target> @@ -1296,8 +1296,8 @@ Opmerking: Bestandsnamen moeten relatief zijn aan de basis mappen! <source>Start comparison</source> <target>Start vergelijking</target> -<source>Preparing synchronization...</source> -<target>Synchronisatie voorbereiden</target> +<source>Calculating sync directions...</source> +<target>Synchronisatie richtingen calculeren...</target> <source>Conflict detected:</source> <target>Conflict gedetecteerd:</target> @@ -1362,24 +1362,6 @@ Opmerking: Bestandsnamen moeten relatief zijn aan de basis mappen! <source>Multiple...</source> <target>Meerdere...</target> -<source>Deleting file %x</source> -<target>Verwijderen van bestand %x</target> - -<source>Deleting folder %x</source> -<target>Verwijderen van map %x</target> - -<source>Deleting symbolic link %x</source> -<target>Verwijderen van snelkoppeling %x</target> - -<source>Moving file %x to recycle bin</source> -<target>Bezig met verplaatsen van bestand %x naar de prullenbak</target> - -<source>Moving folder %x to recycle bin</source> -<target>Bezig met verplaatsen van map %x naar de prullenbak</target> - -<source>Moving symbolic link %x to recycle bin</source> -<target>Bezig met verplaatsen van snelkoppeling %x naar de prullenbak</target> - <source>Moving file %x to %y</source> <target>Bezig met verplaatsen van bestand %x naar %y</target> @@ -1392,9 +1374,6 @@ Opmerking: Bestandsnamen moeten relatief zijn aan de basis mappen! <source>Removing old versions...</source> <target>Bezig met verwijderen van oude versies...</target> -<source>Creating file %x</source> -<target>Bestand %x wordt aangemaakt</target> - <source>Creating symbolic link %x</source> <target>Snelkoppeling %x wordt aangemaakt</target> @@ -1413,6 +1392,9 @@ Opmerking: Bestandsnamen moeten relatief zijn aan de basis mappen! <source>Updating attributes of %x</source> <target>Attributen bijwerken van %x</target> +<source>Cannot find %x.</source> +<target>Kan %x niet vinden.</target> + <source>Target folder %x already existing.</source> <target>Doelmap %x bestaat al.</target> @@ -1458,6 +1440,9 @@ Opmerking: Bestandsnamen moeten relatief zijn aan de basis mappen! <source>Generating database...</source> <target>Genereren van database...</target> +<source>Creating Volume Shadow Copy for %x...</source> +<target>Bezig met Volume Schaduwkopie te maken voor %x...</target> + <source>Data verification error: Source and target file have different content!</source> <target>Dataverificatie-fout: Bron en doelbestand hebben verschillende inhoud!</target> diff --git a/BUILD/Languages/english_uk.lng b/BUILD/Languages/english_uk.lng index 4c77a16a..93340c36 100644 --- a/BUILD/Languages/english_uk.lng +++ b/BUILD/Languages/english_uk.lng @@ -19,6 +19,9 @@ <source>Total time:</source> <target>Total time:</target> +<source>Cannot set directory lock for %x.</source> +<target>Cannot set directory lock for %x.</target> + <source>Show in Explorer</source> <target>Show in Explorer</target> @@ -61,6 +64,12 @@ <source>Clear filter settings</source> <target>Clear filter settings</target> +<source>Copy</source> +<target>Copy</target> + +<source>Paste</source> +<target>Paste</target> + <source>Save as batch job</source> <target>Save as batch job</target> @@ -160,9 +169,6 @@ <source>Waiting while directory is locked (%x)...</source> <target>Waiting while directory is locked (%x)...</target> -<source>Cannot set directory lock %x.</source> -<target>Cannot set directory lock %x.</target> - <source>Creating file %x</source> <target>Creating file %x</target> @@ -196,9 +202,6 @@ <source>/sec</source> <target>/sec</target> -<source>Cannot find file %x.</source> -<target>Cannot find file %x.</target> - <source>File %x does not contain a valid configuration.</source> <target>File %x does not contain a valid configuration.</target> @@ -223,6 +226,9 @@ <source>Cannot read the following XML elements:</source> <target>Cannot read the following XML elements:</target> +<source>Cannot find file %x.</source> +<target>Cannot find file %x.</target> + <source>&Open...</source> <target>&Open...</target> @@ -456,15 +462,18 @@ The command is triggered if: <source>&Advanced</source> <target>&Advanced</target> -<source>&Check for new version</source> -<target>&Check for new version</target> +<source>&Check now</source> +<target>&Check now</target> + +<source>Check &automatically once a week</source> +<target>Check &automatically once a week</target> + +<source>Check for new version</source> +<target>Check for new version</target> <source>Compare</source> <target>Compare</target> -<source>&Abort</source> -<target>&Abort</target> - <source>Synchronize</source> <target>Synchronise</target> @@ -513,8 +522,8 @@ The command is triggered if: <source>On completion</source> <target>On completion</target> -<source>OK</source> -<target>OK</target> +<source>Close</source> +<target>Close</target> <source>&Pause</source> <target>&Pause</target> @@ -600,11 +609,14 @@ is the same <source>Symbolic Link handling</source> <target>Symbolic Link handling</target> +<source>OK</source> +<target>OK</target> + <source><- Two way -></source> <target><- Two way -></target> -<source>Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically.</source> -<target>Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically.</target> +<source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> +<target>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</target> <source>Mirror ->></source> <target>Mirror ->></target> @@ -642,15 +654,12 @@ is the same <source>Versioning</source> <target>Versioning</target> -<source>Move time-stamped files into specified folder</source> -<target>Move time-stamped files into specified folder</target> +<source>Move files to user-defined folder</source> +<target>Move files to user-defined folder</target> <source>Naming convention:</source> <target>Naming convention:</target> -<source>Configuration</source> -<target>Configuration</target> - <source>Item exists on left side only</source> <target>Item exists on left side only</target> @@ -729,8 +738,8 @@ Note: File names must be relative to base directories! <source>Maximum</source> <target>Maximum</target> -<source>&Default</source> -<target>&Default</target> +<source>&Clear</source> +<target>&Clear</target> <source>Fail-safe file copy</source> <target>Fail-safe file copy</target> @@ -759,6 +768,9 @@ Note: File names must be relative to base directories! <source>Description</source> <target>Description</target> +<source>&Default</source> +<target>&Default</target> + <source>Start synchronization</source> <target>Start synchronisation</target> @@ -792,6 +804,9 @@ Note: File names must be relative to base directories! <source>Overview</source> <target>Overview</target> +<source>Configuration</source> +<target>Configuration</target> + <source>Filter files</source> <target>Filter files</target> @@ -864,99 +879,57 @@ Note: File names must be relative to base directories! <source>FreeFileSync batch</source> <target>FreeFileSync batch</target> -<source>Never save changes</source> -<target>Never save changes</target> - <source>Do you want to save changes to %x?</source> <target>Do you want to save changes to %x?</target> <source>Do&n't save</source> <target>Do&n't save</target> +<source>Never save changes</source> +<target>Never save changes</target> + <source>Configuration loaded!</source> <target>Configuration loaded!</target> -<source>Hide files that exist on left side only</source> -<target>Hide files that exist on left side only</target> - <source>Show files that exist on left side only</source> <target>Show files that exist on left side only</target> -<source>Hide files that exist on right side only</source> -<target>Hide files that exist on right side only</target> - <source>Show files that exist on right side only</source> <target>Show files that exist on right side only</target> -<source>Hide files that are newer on left</source> -<target>Hide files that are newer on left</target> - <source>Show files that are newer on left</source> <target>Show files that are newer on left</target> -<source>Hide files that are newer on right</source> -<target>Hide files that are newer on right</target> - <source>Show files that are newer on right</source> <target>Show files that are newer on right</target> -<source>Hide files that are equal</source> -<target>Hide files that are equal</target> - <source>Show files that are equal</source> <target>Show files that are equal</target> -<source>Hide files that are different</source> -<target>Hide files that are different</target> - <source>Show files that are different</source> <target>Show files that are different</target> -<source>Hide conflicts</source> -<target>Hide conflicts</target> - <source>Show conflicts</source> <target>Show conflicts</target> -<source>Hide files that will be created on the left side</source> -<target>Hide files that will be created on the left side</target> - <source>Show files that will be created on the left side</source> <target>Show files that will be created on the left side</target> -<source>Hide files that will be created on the right side</source> -<target>Hide files that will be created on the right side</target> - <source>Show files that will be created on the right side</source> <target>Show files that will be created on the right side</target> -<source>Hide files that will be deleted on the left side</source> -<target>Hide files that will be deleted on the left side</target> - <source>Show files that will be deleted on the left side</source> <target>Show files that will be deleted on the left side</target> -<source>Hide files that will be deleted on the right side</source> -<target>Hide files that will be deleted on the right side</target> - <source>Show files that will be deleted on the right side</source> <target>Show files that will be deleted on the right side</target> -<source>Hide files that will be overwritten on left side</source> -<target>Hide files that will be overwritten on left side</target> - <source>Show files that will be overwritten on left side</source> <target>Show files that will be overwritten on left side</target> -<source>Hide files that will be overwritten on right side</source> -<target>Hide files that will be overwritten on right side</target> - <source>Show files that will be overwritten on right side</source> <target>Show files that will be overwritten on right side</target> -<source>Hide files that won't be copied</source> -<target>Hide files that won't be copied</target> - <source>Show files that won't be copied</source> <target>Show files that won't be copied</target> @@ -975,6 +948,9 @@ Note: File names must be relative to base directories! <source>File list exported!</source> <target>File list exported!</target> +<source>Searching for program updates...</source> +<target>Searching for program updates...</target> + <source> <pluralform>1 directory</pluralform> <pluralform>%x directories</pluralform> @@ -1008,6 +984,9 @@ Note: File names must be relative to base directories! <source>&Ignore</source> <target>&Ignore</target> +<source>Don't show this warning again</source> +<target>Don't show this warning again</target> + <source>&Switch</source> <target>&Switch</target> @@ -1026,9 +1005,6 @@ Note: File names must be relative to base directories! <source>Comparing content...</source> <target>Comparing content...</target> -<source>Copy</source> -<target>Copy</target> - <source>Paused</source> <target>Paused</target> @@ -1111,26 +1087,29 @@ Note: File names must be relative to base directories! <target>Make hidden warnings and dialogues visible again?</target> <source> -<pluralform>Do you really want to move the following object to the Recycle Bin?</pluralform> -<pluralform>Do you really want to move the following %x objects to the Recycle Bin?</pluralform> +<pluralform>Do you really want to move the following item to the Recycle Bin?</pluralform> +<pluralform>Do you really want to move the following %x items to the Recycle Bin?</pluralform> </source> <target> -<pluralform>Do you really want to move the following object to the Recycle Bin?</pluralform> -<pluralform>Do you really want to move the following %x objects to the Recycle Bin?</pluralform> +<pluralform>Do you really want to move the following item to the Recycle Bin?</pluralform> +<pluralform>Do you really want to move the following %x items to the Recycle Bin?</pluralform> </target> <source> -<pluralform>Do you really want to delete the following object?</pluralform> -<pluralform>Do you really want to delete the following %x objects?</pluralform> +<pluralform>Do you really want to delete the following item?</pluralform> +<pluralform>Do you really want to delete the following %x items?</pluralform> </source> <target> -<pluralform>Do you really want to delete the following object?</pluralform> -<pluralform>Do you really want to delete the following %x objects?</pluralform> +<pluralform>Do you really want to delete the following item?</pluralform> +<pluralform>Do you really want to delete the following %x items?</pluralform> </target> <source>Leave as unresolved conflict</source> <target>Leave as unresolved conflict</target> +<source>Time stamp</source> +<target>Time stamp</target> + <source>Append a timestamp to each file name</source> <target>Append a timestamp to each file name</target> @@ -1302,20 +1281,23 @@ Note: File names must be relative to base directories! <source>Recycle Bin is not available for the following paths! Files will be deleted permanently instead:</source> <target>Recycle Bin is not available for the following paths! Files will be deleted permanently instead:</target> -<source>You can ignore this error to consider each folder as empty.</source> -<target>You can ignore this error to consider each folder as empty.</target> +<source>The corresponding folder will be considered as empty.</source> +<target>The corresponding folder will be considered as empty.</target> <source>Cannot find the following folders:</source> <target>Cannot find the following folders:</target> +<source>You can ignore this error to consider each folder as empty.</source> +<target>You can ignore this error to consider each folder as empty.</target> + <source>Directories are dependent! Be careful when setting up synchronization rules:</source> <target>Directories are dependent! Be careful when setting up synchronisation rules:</target> <source>Start comparison</source> <target>Start comparison</target> -<source>Preparing synchronization...</source> -<target>Preparing synchronisation...</target> +<source>Calculating sync directions...</source> +<target>Calculating sync directions...</target> <source>Conflict detected:</source> <target>Conflict detected:</target> @@ -1458,6 +1440,9 @@ Note: File names must be relative to base directories! <source>Generating database...</source> <target>Generating database...</target> +<source>Creating Volume Shadow Copy for %x...</source> +<target>Creating Volume Shadow Copy for %x...</target> + <source>Data verification error: Source and target file have different content!</source> <target>Data verification error: Source and target file have different content!</target> diff --git a/BUILD/Languages/finnish.lng b/BUILD/Languages/finnish.lng index f5db927c..5d82fab5 100644 --- a/BUILD/Languages/finnish.lng +++ b/BUILD/Languages/finnish.lng @@ -19,6 +19,9 @@ <source>Total time:</source> <target>Kokonaisaika:</target> +<source>Cannot set directory lock for %x.</source> +<target>Hakemiston %x lukitus ei onnistu.</target> + <source>Show in Explorer</source> <target>Näytä Explorerissa</target> @@ -40,11 +43,14 @@ <source>Error</source> <target>Virhe</target> +<source>Selected variant:</source> +<target>Valitse tyyppi:</target> + <source>Select alternate comparison settings</source> -<target>Valitse toinen asetus vertailulle</target> +<target>Muuta vertailun asetusta</target> <source>Select alternate synchronization settings</source> -<target>Valitse täsmäykselle toinen asetus</target> +<target>Muuta täsmäytyksen asetus</target> <source>Filter is active</source> <target>Suodin aktivoitu</target> @@ -53,11 +59,17 @@ <target>Suodin valitsematta</target> <source>Remove alternate settings</source> -<target>Poista toinen asetus</target> +<target>Poista muut asetukset</target> <source>Clear filter settings</source> <target>Nollaa suodin</target> +<source>Copy</source> +<target>Monista</target> + +<source>Paste</source> +<target>Liitä</target> + <source>Save as batch job</source> <target>Tallenna eräajona</target> @@ -97,11 +109,8 @@ <source>Fatal Error</source> <target>Kohtalokas virhe</target> -<source>Windows Error Code %x:</source> -<target>Windows virhekoodi %x:</target> - -<source>Linux Error Code %x:</source> -<target>Linux virhekoodi %x:</target> +<source>Error Code %x:</source> +<target>Virhe %x:</target> <source>Cannot resolve symbolic link %x.</source> <target>Tämä linkki on virheellinen %x.</target> @@ -160,8 +169,8 @@ <source>Waiting while directory is locked (%x)...</source> <target>Odotan hakemiston lukitusta (%x)...</target> -<source>Cannot set directory lock %x.</source> -<target>Hakemistoa %x ei saada lukittua.</target> +<source>Creating file %x</source> +<target>Luodaan tiedosto %x</target> <source> <pluralform>1 sec</pluralform> @@ -187,15 +196,12 @@ </source> <target> <pluralform>[1 säije]</pluralform> -<pluralform>[%x säikeitä]</pluralform> +<pluralform>[%x säijettä]</pluralform> </target> <source>/sec</source> <target>/s</target> -<source>Cannot find file %x.</source> -<target>Tiedosto %x ei löydy.</target> - <source>File %x does not contain a valid configuration.</source> <target>Tiedosto %x ei sisällä kelvollista kokoonpanoa.</target> @@ -220,6 +226,9 @@ <source>Cannot read the following XML elements:</source> <target>XML elementit lukukelvottimia:</target> +<source>Cannot find file %x.</source> +<target>Tiedosto %x ei löydy.</target> + <source>&Open...</source> <target>&Avaa...</target> @@ -453,24 +462,21 @@ Käsky suoritetaan jos: <source>&Advanced</source> <target>&Laajennettu</target> -<source>&Check for new version</source> -<target>Etsi &uusi versio</target> +<source>&Check now</source> +<target>&Tarkista nyt</target> -<source>Compare</source> -<target>Vertaile</target> +<source>Check &automatically once a week</source> +<target>Tarkista &viikoittain</target> -<source>Compare both sides</source> -<target>Vertaile molemmat puolet</target> +<source>Check for new version</source> +<target>Tarkita onko uudempaa</target> -<source>&Abort</source> -<target>&Lopeta</target> +<source>Compare</source> +<target>Vertaile</target> <source>Synchronize</source> <target>Täsmäytä</target> -<source>Start synchronization</source> -<target>Käynnistä täsmäytys</target> - <source>Add folder pair</source> <target>Lisää hakemistopari</target> @@ -480,17 +486,8 @@ Käsky suoritetaan jos: <source>Swap sides</source> <target>Puolten vaihto</target> -<source>Open</source> -<target>Avaa</target> - -<source>Save</source> -<target>Tallenna</target> - -<source>Last used configurations (press DEL to remove from list)</source> -<target>Viimeksi käytetty asetus (poista listalta paina DEL)</target> - <source>Hide excluded items</source> -<target>Piilota poissuljetus</target> +<target>Piilota ohitettavat</target> <source>Show filtered or temporarily excluded files</source> <target>Näytä suodatetut/nyt pois suljetut tiedostot</target> @@ -519,6 +516,18 @@ Käsky suoritetaan jos: <source>Time elapsed:</source> <target>Aikaa kulunut:</target> +<source>Synchronizing...</source> +<target>Täsmäytetään...</target> + +<source>On completion</source> +<target>Valmistuttua</target> + +<source>Close</source> +<target>Sulje</target> + +<source>&Pause</source> +<target>&Keskeytä</target> + <source>Batch job</source> <target>Eräajo</target> @@ -549,9 +558,6 @@ Käsky suoritetaan jos: <source>Abort synchronization on first error</source> <target>Keskeytä täsmäytys ensimmäisestä virheestä</target> -<source>On completion</source> -<target>Valmistuttua</target> - <source>Show progress dialog</source> <target>Näytä etenemä ikkuna</target> @@ -609,8 +615,8 @@ on sama <source><- Two way -></source> <target><- Molemmat -></target> -<source>Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically.</source> -<target>Tunnista ja monista muutokset tietokannalla molemmille puolille. Poistot, uudelleennimeäminen ja ristiriidat havaitaan automaattisesti.</target> +<source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> +<target>Löydä ja suorita muutokset molemmilla puolilla. Poistot, siirrot ja eroavuudet tunnistetaan tietokannan avulla.</target> <source>Mirror ->></source> <target>Peilaava ->></target> @@ -628,7 +634,7 @@ on sama <target>Oma määritelmä</target> <source>Configure your own synchronization rules.</source> -<target>Määritä omat täsmäyssäännöt.</target> +<target>Määritä omat täsmäytyssäännöt.</target> <source>Deletion handling</source> <target>Poistotapa</target> @@ -648,15 +654,12 @@ on sama <source>Versioning</source> <target>Versiointi</target> -<source>Move time-stamped files into specified folder</source> -<target>Siirrä aikaleimatut tiedostot hakemistoon</target> +<source>Move files to user-defined folder</source> +<target>Siirrä tiedostot määrättyyn hakemistoon</target> <source>Naming convention:</source> <target>Nimeämis käytäntö:</target> -<source>Configuration</source> -<target>Asetukset</target> - <source>Item exists on left side only</source> <target>Kohde löytyy vain vasemmalta</target> @@ -675,12 +678,6 @@ on sama <source>Conflict/item cannot be categorized</source> <target>Ristiriita, ei määriteltävissä</target> -<source>Synchronizing...</source> -<target>Täsmäytetään...</target> - -<source>&Pause</source> -<target>&Keskeytä</target> - <source>Source code written in C++ using:</source> <target>Koodikieli on C++ käyttäen:</target> @@ -741,8 +738,8 @@ Huom: Tiedostojen nimet täytyy olla suhteessa pää hakemistoihin! <source>Maximum</source> <target>Enintäin</target> -<source>&Default</source> -<target>&Vakio</target> +<source>&Clear</source> +<target>&Pyyhi</target> <source>Fail-safe file copy</source> <target>Varmennettu tiedostokopiointi</target> @@ -760,7 +757,7 @@ Huom: Tiedostojen nimet täytyy olla suhteessa pää hakemistoihin! <target>Kopioi tiedoston käyttöoikeuksia</target> <source>Transfer file and folder permissions (Requires Administrator rights)</source> -<target>Kopioi tiedosto ja hakemisto käyttöoikeuksia (Pääkäyttäjän oikeudet tarvitaan)</target> +<target>Kopioi tiedosto ja hakemisto käyttöoikeuksia (Vaatii Järjestelmävalvojan oikeuksia)</target> <source>Restore hidden dialogs</source> <target>Palauta piiloitetut ikkunat</target> @@ -771,6 +768,12 @@ Huom: Tiedostojen nimet täytyy olla suhteessa pää hakemistoihin! <source>Description</source> <target>Seloste</target> +<source>&Default</source> +<target>&Vakio</target> + +<source>Start synchronization</source> +<target>Käynnistä täsmäytys</target> + <source>Variant</source> <target>Vaihtoehto</target> @@ -801,12 +804,24 @@ Huom: Tiedostojen nimet täytyy olla suhteessa pää hakemistoihin! <source>Overview</source> <target>Yleiskatsaus</target> +<source>Configuration</source> +<target>Asetukset</target> + <source>Filter files</source> <target>Suodata tiedostot</target> <source>Select view</source> <target>Valitse näkymä</target> +<source>Open...</source> +<target>Avaa...</target> + +<source>Save</source> +<target>Tallenna</target> + +<source>Compare both sides</source> +<target>Vertaile molemmat puolet</target> + <source>Set direction:</source> <target>Aseta suunta:</target> @@ -864,102 +879,63 @@ Huom: Tiedostojen nimet täytyy olla suhteessa pää hakemistoihin! <source>FreeFileSync batch</source> <target>FreeFileSync eräajo</target> -<source>Never save changes</source> -<target>Älä tallenna muutoksia</target> - <source>Do you want to save changes to %x?</source> <target>Haluatko tallentaa muutokset: %x?</target> <source>Do&n't save</source> <target>Älä tallenna</target> +<source>Never save changes</source> +<target>Älä tallenna muutoksia</target> + <source>Configuration loaded!</source> <target>Asetukset ladattu!</target> -<source>Hide files that exist on left side only</source> -<target>Piilota vain vasemmalla esiintyvät tiedostot</target> - <source>Show files that exist on left side only</source> <target>Näytä vain vasemmalla esiintyvät tiedostot</target> -<source>Hide files that exist on right side only</source> -<target>Piilota vain oikealla esiintyvät tiedostot</target> - <source>Show files that exist on right side only</source> <target>Näytä vain oikealla esiintyvät tiedostot</target> -<source>Hide files that are newer on left</source> -<target>Piilota vasemmalla olevat uudemmat tiedostot</target> - <source>Show files that are newer on left</source> <target>Näytä vasemmalla olevat uudemmat tiedostot</target> -<source>Hide files that are newer on right</source> -<target>Piilota oikealla olevat uudemmat tiedostot</target> - <source>Show files that are newer on right</source> <target>Näytä uudemmat tiedostot oikealla</target> -<source>Hide files that are equal</source> -<target>Piilota yhteneväiset tiedostot</target> - <source>Show files that are equal</source> <target>Näytä yhteneväiset tiedostot</target> -<source>Hide files that are different</source> -<target>Piilota erilaiset tiedostot</target> - <source>Show files that are different</source> <target>Näytä erilaiset tiedostot</target> -<source>Hide conflicts</source> -<target>Piilota ristiriidat</target> - <source>Show conflicts</source> <target>Näytä ristiriidat</target> -<source>Hide files that will be created on the left side</source> -<target>Piilota tiedostot jotka luodaan vasemmalle</target> - <source>Show files that will be created on the left side</source> <target>Näytä vasemmalle luotavat tiedostot</target> -<source>Hide files that will be created on the right side</source> -<target>Piilota tiedostot jotka luodaan oikealla</target> - <source>Show files that will be created on the right side</source> <target>Näytä oikealle luotavat tiedostot</target> -<source>Hide files that will be deleted on the left side</source> -<target>Piilota tiedostot jotka poistetaan vasemmalta</target> - <source>Show files that will be deleted on the left side</source> <target>Näytä vasemmalta poistettavat tiedostot</target> -<source>Hide files that will be deleted on the right side</source> -<target>Piilota tiedostot jotka poistetaan oikealta</target> - <source>Show files that will be deleted on the right side</source> <target>Näytä oikealta poistettavat tiedostot</target> -<source>Hide files that will be overwritten on left side</source> -<target>Piilota tiedostot jotka korvataan vasemmalla</target> - <source>Show files that will be overwritten on left side</source> <target>Näytä vasemmalla korvattavat tiedostot</target> -<source>Hide files that will be overwritten on right side</source> -<target>Piilota tiedostot jotka korvataan oikealla</target> - <source>Show files that will be overwritten on right side</source> <target>Näytä oikealla korvattavat tiedostot</target> -<source>Hide files that won't be copied</source> -<target>Piilota tiedostot jotka eivät kopioida</target> - <source>Show files that won't be copied</source> <target>Näytä kopioimatta jäävät tiedostot</target> +<source>Set as default</source> +<target>Aseta oletukseksi</target> + <source>All folders are in sync!</source> <target>Kaikki hakemistot täsmäytetty!</target> @@ -972,14 +948,8 @@ Huom: Tiedostojen nimet täytyy olla suhteessa pää hakemistoihin! <source>File list exported!</source> <target>Tiedostolista viety!</target> -<source> -<pluralform>Object deleted successfully!</pluralform> -<pluralform>%x objects deleted successfully!</pluralform> -</source> -<target> -<pluralform>Kohde poistettu onnistuneesti!</pluralform> -<pluralform>%x kohdetta poistettu onnistuneesti!</pluralform> -</target> +<source>Searching for program updates...</source> +<target>Ohjelmapäivytys haetaa...</target> <source> <pluralform>1 directory</pluralform> @@ -1014,6 +984,9 @@ Huom: Tiedostojen nimet täytyy olla suhteessa pää hakemistoihin! <source>&Ignore</source> <target>&Unohda</target> +<source>Don't show this warning again</source> +<target>Älä enää näytä varoitusta</target> + <source>&Switch</source> <target>&Vaihda</target> @@ -1032,9 +1005,6 @@ Huom: Tiedostojen nimet täytyy olla suhteessa pää hakemistoihin! <source>Comparing content...</source> <target>Sisällön vertailu...</target> -<source>Copy</source> -<target>Monista</target> - <source>Paused</source> <target>Pysäytetty</target> @@ -1117,34 +1087,37 @@ Huom: Tiedostojen nimet täytyy olla suhteessa pää hakemistoihin! <target>Näytä piiloitetut varoitukset/ikkunnat uudestaan?</target> <source> -<pluralform>Do you really want to move the following object to the Recycle Bin?</pluralform> -<pluralform>Do you really want to move the following %x objects to the Recycle Bin?</pluralform> +<pluralform>Do you really want to move the following item to the Recycle Bin?</pluralform> +<pluralform>Do you really want to move the following %x items to the Recycle Bin?</pluralform> </source> <target> -<pluralform>Haluatko varmasti siirtää seuraava kohde Roskakoriin?</pluralform> -<pluralform>Haluatko varmasti siirtää seuraavat %x kohteet Roskakoriin?</pluralform> +<pluralform>Haluatko todella siirtää tätä Roskakoriin?</pluralform> +<pluralform>Haluatko todella siirtää nämä %x kohdetta Roskakoriin?</pluralform> </target> <source> -<pluralform>Do you really want to delete the following object?</pluralform> -<pluralform>Do you really want to delete the following %x objects?</pluralform> +<pluralform>Do you really want to delete the following item?</pluralform> +<pluralform>Do you really want to delete the following %x items?</pluralform> </source> <target> -<pluralform>Haluatko varmasti poistaa seuraava kohde?</pluralform> -<pluralform>Haluatko varmasti poistaa seuraavat %x kohteet?</pluralform> +<pluralform>Haluatko todella poistta tämä?</pluralform> +<pluralform>Haluatko todella poistaa nämä %x kohdetta?</pluralform> </target> <source>Leave as unresolved conflict</source> <target>Jätä ratkaisemattomana virheenä</target> +<source>Time stamp</source> +<target>Aikaleima</target> + +<source>Append a timestamp to each file name</source> +<target>Lisää aikaleima tiedostoihin</target> + <source>Replace</source> <target>Korvaa</target> <source>Move files and replace if existing</source> -<target>Siirrä tiedostot ja korvaa tarvittaessa</target> - -<source>Append a timestamp to each file name</source> -<target>Lisää aikaleima tiedostoihin</target> +<target>Siirrä tiedostot ja korvaa olemassaolevat</target> <source>Folder</source> <target>Hakemisto</target> @@ -1158,6 +1131,9 @@ Huom: Tiedostojen nimet täytyy olla suhteessa pää hakemistoihin! <source>Files</source> <target>Tiedostot</target> +<source>Items</source> +<target></target> + <source>Percentage</source> <target>Prosenttia</target> @@ -1260,6 +1236,12 @@ Huom: Tiedostojen nimet täytyy olla suhteessa pää hakemistoihin! <source>Cannot set privilege %x.</source> <target>Oikeuksia %x ei voitu asettaa.</target> +<source>Failed to suspend system sleep mode.</source> +<target>Lepotilan keskeytys epäonnistui.</target> + +<source>Cannot change process I/O priorities.</source> +<target>Prosessin I/O -pririteetin muutos ei onnistu.</target> + <source>Unable to move %x to the Recycle Bin!</source> <target>Ei voitu siirtää %x Roskakoriin!</target> @@ -1278,14 +1260,38 @@ Huom: Tiedostojen nimet täytyy olla suhteessa pää hakemistoihin! <source>Setting default synchronization directions: Old files will be overwritten with newer files.</source> <target>Aseta oletussuunta täsmäykselle: Vanhat tiedostot korvataan uudemilla tiedostoilla.</target> +<source>Checking recycle bin availability for folder %x...</source> +<target>Tarkistetaan Roskakorin käyttö hakemistolle %x...</target> + +<source>Moving file %x to recycle bin</source> +<target>Siirrä tiedosto %x roskakoriin</target> + +<source>Moving folder %x to recycle bin</source> +<target>Siirrä hakemisto %x roskakoriin</target> + +<source>Moving symbolic link %x to recycle bin</source> +<target>Siirrä pikakuvake %x roskakoriin</target> + +<source>Deleting file %x</source> +<target>Poista tiedosto %x</target> + +<source>Deleting folder %x</source> +<target>Poista hakemisto %x</target> + +<source>Deleting symbolic link %x</source> +<target>Pistetaan pikakuvake %x</target> + <source>Recycle Bin is not available for the following paths! Files will be deleted permanently instead:</source> <target>Roskakori puuttuu näistä polusta! Tiedostot poistetaan pysyvästi:</target> -<source>You can ignore this error to consider the folder as empty.</source> -<target>Ohita tämä virhe ja oleta hakemisto tyhjäksi.</target> +<source>The corresponding folder will be considered as empty.</source> +<target>Hakemisto tulkitaan tyhjäksi.</target> + +<source>Cannot find the following folders:</source> +<target>Hakemistot ei löydy:</target> -<source>Cannot find folder %x.</source> -<target>Hakemisto %x ei löydy.</target> +<source>You can ignore this error to consider each folder as empty.</source> +<target>Ohita tämä virhe olettamalla hakemistot tyhjäksi.</target> <source>Directories are dependent! Be careful when setting up synchronization rules:</source> <target>Hakemistot riippuvuussuhteessa! Aseta täsmäyssääntöjä varovasti:</target> @@ -1293,8 +1299,8 @@ Huom: Tiedostojen nimet täytyy olla suhteessa pää hakemistoihin! <source>Start comparison</source> <target>Käynnistä vertailu</target> -<source>Preparing synchronization...</source> -<target>Täsmäytys alustetaan...</target> +<source>Calculating sync directions...</source> +<target>Lasketaa täsmäytyksen suuntaa...</target> <source>Conflict detected:</source> <target>Ristiriita todettu:</target> @@ -1359,24 +1365,6 @@ Huom: Tiedostojen nimet täytyy olla suhteessa pää hakemistoihin! <source>Multiple...</source> <target>Moninkertainen...</target> -<source>Deleting file %x</source> -<target>Poista tiedosto %x</target> - -<source>Deleting folder %x</source> -<target>Poista hakemisto %x</target> - -<source>Deleting symbolic link %x</source> -<target>Pistetaan pikakuvake %x</target> - -<source>Moving file %x to recycle bin</source> -<target>Siirrä tiedosto %x roskakoriin</target> - -<source>Moving folder %x to recycle bin</source> -<target>Siirrä hakemisto %x roskakoriin</target> - -<source>Moving symbolic link %x to recycle bin</source> -<target>Siirrä pikakuvake %x roskakoriin</target> - <source>Moving file %x to %y</source> <target>Siirrä tiedosto %x -> %y</target> @@ -1389,9 +1377,6 @@ Huom: Tiedostojen nimet täytyy olla suhteessa pää hakemistoihin! <source>Removing old versions...</source> <target>Vanhat poistetaa...</target> -<source>Creating file %x</source> -<target>Luodaan tiedosto %x</target> - <source>Creating symbolic link %x</source> <target>Luodaan pikakuvake %x</target> @@ -1410,6 +1395,9 @@ Huom: Tiedostojen nimet täytyy olla suhteessa pää hakemistoihin! <source>Updating attributes of %x</source> <target>Päivitän %x:n ominaisuudet</target> +<source>Cannot find %x.</source> +<target>%x ei löydy.</target> + <source>Target folder %x already existing.</source> <target>Kohdehakemisto %x on olemassa.</target> @@ -1458,6 +1446,9 @@ Tietokanta luodaan. .. </target> +<source>Creating Volume Shadow Copy for %x...</source> +<target>Luodaan Volume Shadow Copy %x:lle...</target> + <source>Data verification error: Source and target file have different content!</source> <target>Tiedon varmennusvirhe: Lähteellä ja kohteella on eri sisältö!</target> diff --git a/BUILD/Languages/french.lng b/BUILD/Languages/french.lng index 7d8e8a4f..2bbb75d9 100644 --- a/BUILD/Languages/french.lng +++ b/BUILD/Languages/french.lng @@ -19,6 +19,9 @@ <source>Total time:</source> <target>Durée totale :</target> +<source>Cannot set directory lock for %x.</source> +<target>Impossible de verrouiller le dossier %x</target> + <source>Show in Explorer</source> <target>Montrer dans l'explorateur</target> @@ -40,6 +43,9 @@ <source>Error</source> <target>Erreur</target> +<source>Selected variant:</source> +<target>Variante choisie :</target> + <source>Select alternate comparison settings</source> <target>Choisir d'autres paramètres de comparaison</target> @@ -58,6 +64,12 @@ <source>Clear filter settings</source> <target>Effacer la configuration du filtrage</target> +<source>Copy</source> +<target>Copier</target> + +<source>Paste</source> +<target>Coller</target> + <source>Save as batch job</source> <target>Enrgistrer en temps que fichier batch</target> @@ -97,11 +109,8 @@ <source>Fatal Error</source> <target>Erreur Fatale</target> -<source>Windows Error Code %x:</source> -<target>Code erreur Windows %x :</target> - -<source>Linux Error Code %x:</source> -<target>Code erreur Linux %x :</target> +<source>Error Code %x:</source> +<target>Code erreur %x :</target> <source>Cannot resolve symbolic link %x.</source> <target>Impossible de résoudre le lien symbolique %x.</target> @@ -160,8 +169,8 @@ <source>Waiting while directory is locked (%x)...</source> <target>En attente tant que le répertoire est verrouillé (%x)...</target> -<source>Cannot set directory lock %x.</source> -<target>Impossible de verrouiller le répertoire %x.</target> +<source>Creating file %x</source> +<target>Création du fichier %x</target> <source> <pluralform>1 sec</pluralform> @@ -193,9 +202,6 @@ <source>/sec</source> <target>/sec</target> -<source>Cannot find file %x.</source> -<target>Impossible de trouver le fichier %x.</target> - <source>File %x does not contain a valid configuration.</source> <target>Le fichier %x ne contient pas une configuration valide.</target> @@ -220,6 +226,9 @@ <source>Cannot read the following XML elements:</source> <target>Impossible de lire les données XML suivantes :</target> +<source>Cannot find file %x.</source> +<target>Impossible de trouver le fichier %x.</target> + <source>&Open...</source> <target>&Ouvrir...</target> @@ -230,7 +239,7 @@ <target>&Quitter</target> <source>&Program</source> -<target>&Tâche</target> +<target>&Programme</target> <source>&Content</source> <target>&Contenu</target> @@ -453,24 +462,21 @@ La commande est déclenchée si : <source>&Advanced</source> <target>&Avancé</target> -<source>&Check for new version</source> -<target>&Rechercher une nouvelle version</target> +<source>&Check now</source> +<target>&Contrôler maintenant</target> -<source>Compare</source> -<target>Comparer</target> +<source>Check &automatically once a week</source> +<target>Contrôler &automatiquement une fois par semaine</target> -<source>Compare both sides</source> -<target>Comparer les deux listes</target> +<source>Check for new version</source> +<target>Rechercher une nouvelle version</target> -<source>&Abort</source> -<target>&Abandonner</target> +<source>Compare</source> +<target>Comparer</target> <source>Synchronize</source> <target>Synchroniser</target> -<source>Start synchronization</source> -<target>Démarrer la synchronisation</target> - <source>Add folder pair</source> <target>Ajout d'un couple de dossiers</target> @@ -480,15 +486,6 @@ La commande est déclenchée si : <source>Swap sides</source> <target>Permuter les côtés</target> -<source>Open</source> -<target>Ouvrir</target> - -<source>Save</source> -<target>Sauvegarder</target> - -<source>Last used configurations (press DEL to remove from list)</source> -<target>Dernière configuration utilisée (Appuyez sur SUPPR pour l'enlever de la liste)</target> - <source>Hide excluded items</source> <target>Cacher les éléments exclus</target> @@ -519,6 +516,18 @@ La commande est déclenchée si : <source>Time elapsed:</source> <target>Temps écoulé :</target> +<source>Synchronizing...</source> +<target>Synchronisation en cours...</target> + +<source>On completion</source> +<target>À la fin</target> + +<source>Close</source> +<target>Fermer</target> + +<source>&Pause</source> +<target>&Pause</target> + <source>Batch job</source> <target>Traitement batch</target> @@ -549,9 +558,6 @@ La commande est déclenchée si : <source>Abort synchronization on first error</source> <target>Abandonner la synchronisation dès la première erreur</target> -<source>On completion</source> -<target>À la fin</target> - <source>Show progress dialog</source> <target>Montrer la fenêtre de progression</target> @@ -584,7 +590,7 @@ sont les mêmes </target> <source>File time and size</source> -<target>Heure et taille du fichier</target> +<target>Date et taille du fichier</target> <source> Files are found equal if @@ -609,8 +615,8 @@ est identique <source><- Two way -></source> <target><- Deux sens -></target> -<source>Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically.</source> -<target>Identifie et propage les modifications des deux côtés à l'aide d'une base de données. Les suppressions, renommages et conflits sont détectés automatiquement.</target> +<source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> +<target>Identifier et propager les modifications des deux côtés. Suppressions, déplacements et conflits sont détectés automatiquement en utilisant une base de données.</target> <source>Mirror ->></source> <target>Miroir ->></target> @@ -648,15 +654,12 @@ est identique <source>Versioning</source> <target>Gestion des versions</target> -<source>Move time-stamped files into specified folder</source> -<target>Déplacer les fichiers horodatés dans le dossier spécifié</target> +<source>Move files to user-defined folder</source> +<target>Déplacer les fichiers vers un dossier choisi par l'utilisateur</target> <source>Naming convention:</source> <target>Convention de nommage :</target> -<source>Configuration</source> -<target>Configuration</target> - <source>Item exists on left side only</source> <target>Cet élément existe seulement à gauche</target> @@ -675,12 +678,6 @@ est identique <source>Conflict/item cannot be categorized</source> <target>Conflit/élément impossible à classer</target> -<source>Synchronizing...</source> -<target>Synchronisation en cours...</target> - -<source>&Pause</source> -<target>&Pause</target> - <source>Source code written in C++ using:</source> <target>Code source écrit en C++ utilisant :</target> @@ -741,8 +738,8 @@ Attention : les noms de fichiers doivent être relatifs aux répertoires de base <source>Maximum</source> <target>Maximum</target> -<source>&Default</source> -<target>&Défaut</target> +<source>&Clear</source> +<target>&Effacer</target> <source>Fail-safe file copy</source> <target>Copie de fichiers sécurisé</target> @@ -771,6 +768,12 @@ Attention : les noms de fichiers doivent être relatifs aux répertoires de base <source>Description</source> <target>Description</target> +<source>&Default</source> +<target>&Défaut</target> + +<source>Start synchronization</source> +<target>Démarrer la synchronisation</target> + <source>Variant</source> <target>Variante</target> @@ -801,12 +804,24 @@ Attention : les noms de fichiers doivent être relatifs aux répertoires de base <source>Overview</source> <target>Présentation</target> +<source>Configuration</source> +<target>Configuration</target> + <source>Filter files</source> <target>Filtrage des fichiers</target> <source>Select view</source> <target>Choisissez une vue</target> +<source>Open...</source> +<target>Ouvrir ...</target> + +<source>Save</source> +<target>Sauvegarder</target> + +<source>Compare both sides</source> +<target>Comparer les deux listes</target> + <source>Set direction:</source> <target>Choix de la direction :</target> @@ -864,102 +879,63 @@ Attention : les noms de fichiers doivent être relatifs aux répertoires de base <source>FreeFileSync batch</source> <target>FreeFileSync batch</target> -<source>Never save changes</source> -<target>Ne jamais enregistrer les modifications</target> - <source>Do you want to save changes to %x?</source> <target>Voulez-vous enregistrer les modifications dans %x ?</target> <source>Do&n't save</source> <target>&Ne pas Sauvegarder</target> +<source>Never save changes</source> +<target>Ne jamais enregistrer les modifications</target> + <source>Configuration loaded!</source> <target>Configuration chargée !</target> -<source>Hide files that exist on left side only</source> -<target>Masquer les fichiers n'existant qu'à gauche</target> - <source>Show files that exist on left side only</source> <target>Afficher les fichiers existant seulement à gauche</target> -<source>Hide files that exist on right side only</source> -<target>Masquer les fichiers n'existant qu'à droite</target> - <source>Show files that exist on right side only</source> <target>Afficher les fichiers existant seulement à droite</target> -<source>Hide files that are newer on left</source> -<target>Masquer les fichiers plus récents à gauche</target> - <source>Show files that are newer on left</source> <target>Afficher les fichiers de gauche plus récents que ceux de droite</target> -<source>Hide files that are newer on right</source> -<target>Masquer les fichiers plus récents à droite</target> - <source>Show files that are newer on right</source> <target>Afficher les fichiers de droite plus récents que ceux de gauche</target> -<source>Hide files that are equal</source> -<target>Masquer les fichiers identiques</target> - <source>Show files that are equal</source> <target>Afficher les fichiers identiques</target> -<source>Hide files that are different</source> -<target>Masquer les fichiers différents</target> - <source>Show files that are different</source> <target>Afficher les fichiers différents</target> -<source>Hide conflicts</source> -<target>Masquer les conflits</target> - <source>Show conflicts</source> <target>Afficher les conflits</target> -<source>Hide files that will be created on the left side</source> -<target>Masquer les fichiers qui seront créés à gauche</target> - <source>Show files that will be created on the left side</source> <target>Afficher les fichiers qui seront créés à gauche</target> -<source>Hide files that will be created on the right side</source> -<target>Masquer les fichiers qui seront créés à droite</target> - <source>Show files that will be created on the right side</source> <target>Afficher les fichiers qui seront créés à droite</target> -<source>Hide files that will be deleted on the left side</source> -<target>Masquer les fichiers qui seront supprimés à gauche</target> - <source>Show files that will be deleted on the left side</source> <target>Afficher les fichiers qui seront supprimés à gauche</target> -<source>Hide files that will be deleted on the right side</source> -<target>Masquer les fichiers qui seront supprimés à droite</target> - <source>Show files that will be deleted on the right side</source> <target>Afficher les fichiers qui seront supprimés à droite</target> -<source>Hide files that will be overwritten on left side</source> -<target>Fichiers masqués qui ont été écrasés à gauche</target> - <source>Show files that will be overwritten on left side</source> <target>Afficher les fichiers qui seront écrasés à gauche</target> -<source>Hide files that will be overwritten on right side</source> -<target>Fichiers masqués qui ont été écrasés à droite</target> - <source>Show files that will be overwritten on right side</source> <target>Afficher les fichiers qui seront écrasés à droite</target> -<source>Hide files that won't be copied</source> -<target>Masquer les fichiers qui ne seront pas copiés</target> - <source>Show files that won't be copied</source> <target>Afficher les fichiers qui ne seront pas copiés</target> +<source>Set as default</source> +<target>Définir par défaut</target> + <source>All folders are in sync!</source> <target>Tous les dossiers sont synchronisés !</target> @@ -972,14 +948,8 @@ Attention : les noms de fichiers doivent être relatifs aux répertoires de base <source>File list exported!</source> <target>Liste des fichiers exportée !</target> -<source> -<pluralform>Object deleted successfully!</pluralform> -<pluralform>%x objects deleted successfully!</pluralform> -</source> -<target> -<pluralform>Objet supprimé avec succès !</pluralform> -<pluralform>%x objets supprimés avec succès!</pluralform> -</target> +<source>Searching for program updates...</source> +<target>Recherche de mises à jour ...</target> <source> <pluralform>1 directory</pluralform> @@ -1014,6 +984,9 @@ Attention : les noms de fichiers doivent être relatifs aux répertoires de base <source>&Ignore</source> <target>&Ignorer</target> +<source>Don't show this warning again</source> +<target>Ne plus afficher cet avertissement</target> + <source>&Switch</source> <target>&Changer</target> @@ -1032,9 +1005,6 @@ Attention : les noms de fichiers doivent être relatifs aux répertoires de base <source>Comparing content...</source> <target>Comparaison du contenu...</target> -<source>Copy</source> -<target>Copier</target> - <source>Paused</source> <target>En pause</target> @@ -1117,35 +1087,38 @@ Attention : les noms de fichiers doivent être relatifs aux répertoires de base <target>Voulez-vous réafficher les avertissements et les boîtes de dialogue ?</target> <source> -<pluralform>Do you really want to move the following object to the Recycle Bin?</pluralform> -<pluralform>Do you really want to move the following %x objects to the Recycle Bin?</pluralform> +<pluralform>Do you really want to move the following item to the Recycle Bin?</pluralform> +<pluralform>Do you really want to move the following %x items to the Recycle Bin?</pluralform> </source> <target> -<pluralform>Voulez-vous vraiment mettre cet objet dans la corbeille ?</pluralform> -<pluralform>Voulez-vous vraiment mettre ces %x objets dans la corbeille ?</pluralform> +<pluralform>Voulez-vous vraiment mettre à la Corbeille l'élément suivant ?</pluralform> +<pluralform>Voulez-vous vraiment mettre à la Corbeille les %x éléments suivants ?</pluralform> </target> <source> -<pluralform>Do you really want to delete the following object?</pluralform> -<pluralform>Do you really want to delete the following %x objects?</pluralform> +<pluralform>Do you really want to delete the following item?</pluralform> +<pluralform>Do you really want to delete the following %x items?</pluralform> </source> <target> -<pluralform>Voulez-vous vraiment supprimer cet objet ?</pluralform> -<pluralform>Voulez-vous vraiment supprimer ces %x objets ?</pluralform> +<pluralform>Voulez-vous vraiment supprimer l'élément suivant ?</pluralform> +<pluralform>Voulez-vous vraiment supprimer les %x éléments suivants ?</pluralform> </target> <source>Leave as unresolved conflict</source> <target>Abandonner en tant que conflit non résolu</target> +<source>Time stamp</source> +<target>Horodatage</target> + +<source>Append a timestamp to each file name</source> +<target>Ajouter un horodatage à chaque fichier</target> + <source>Replace</source> <target>Remplacer</target> <source>Move files and replace if existing</source> <target>Déplacer les fichiers et remplacer ceux existant</target> -<source>Append a timestamp to each file name</source> -<target>Ajouter un horodatage à chaque fichier</target> - <source>Folder</source> <target>Dossier</target> @@ -1260,6 +1233,12 @@ Attention : les noms de fichiers doivent être relatifs aux répertoires de base <source>Cannot set privilege %x.</source> <target>Impossible de fixer le privilège %x.</target> +<source>Failed to suspend system sleep mode.</source> +<target>Impossible de suspendre le mode veille du système.</target> + +<source>Cannot change process I/O priorities.</source> +<target>Impossible de modifier les priorités E/S des tâches</target> + <source>Unable to move %x to the Recycle Bin!</source> <target>Impossible de déplacer %x dans la Corbeille !</target> @@ -1278,14 +1257,38 @@ Attention : les noms de fichiers doivent être relatifs aux répertoires de base <source>Setting default synchronization directions: Old files will be overwritten with newer files.</source> <target>Directions de la synchronisation par défaut : les anciens fichiers seront remplacés par les nouveaux.</target> +<source>Checking recycle bin availability for folder %x...</source> +<target>Contrôle de la disponibilité de la Corbeille pour le dossier %x ...</target> + +<source>Moving file %x to recycle bin</source> +<target>Envoi du fichier %x dans la corbeille</target> + +<source>Moving folder %x to recycle bin</source> +<target>Envoi du dossier %x dans la corbeille</target> + +<source>Moving symbolic link %x to recycle bin</source> +<target>Envoi du lien symbolique %x dans la corbeille</target> + +<source>Deleting file %x</source> +<target>Suppression du fichier %x</target> + +<source>Deleting folder %x</source> +<target>Suppression du dossier %x</target> + +<source>Deleting symbolic link %x</source> +<target>Suppression du lien symbolique %x</target> + <source>Recycle Bin is not available for the following paths! Files will be deleted permanently instead:</source> <target>La corbeille n'est pas valable pour les chemins suivants ! Les fichiers seront détruits définitivement :</target> -<source>You can ignore this error to consider the folder as empty.</source> -<target>Vous pouvez ignorer cette erreur en considérant le dossier comme vide.</target> +<source>The corresponding folder will be considered as empty.</source> +<target>Le dossier correspondant sera considéré comme vide.</target> + +<source>Cannot find the following folders:</source> +<target>Impossible de trouver les dossiers suivants :</target> -<source>Cannot find folder %x.</source> -<target>Impossible de trouver le dossier %x.</target> +<source>You can ignore this error to consider each folder as empty.</source> +<target>Vous pouvez ignorer cette erreur et considérer chaque dossier comme vide.</target> <source>Directories are dependent! Be careful when setting up synchronization rules:</source> <target>Les répertoires sont imbriqués ! Attention à la mise à jour des règles de synchronisation :</target> @@ -1293,8 +1296,8 @@ Attention : les noms de fichiers doivent être relatifs aux répertoires de base <source>Start comparison</source> <target>Démarrer la comparaison</target> -<source>Preparing synchronization...</source> -<target>Synchronisation en cours de préparation ...</target> +<source>Calculating sync directions...</source> +<target>Evaluation du sens des synchronisations ...</target> <source>Conflict detected:</source> <target>Conflit détecté :</target> @@ -1359,24 +1362,6 @@ Attention : les noms de fichiers doivent être relatifs aux répertoires de base <source>Multiple...</source> <target>Multiple...</target> -<source>Deleting file %x</source> -<target>Suppression du fichier %x</target> - -<source>Deleting folder %x</source> -<target>Suppression du dossier %x</target> - -<source>Deleting symbolic link %x</source> -<target>Suppression du lien symbolique %x</target> - -<source>Moving file %x to recycle bin</source> -<target>Envoi du fichier %x dans la corbeille</target> - -<source>Moving folder %x to recycle bin</source> -<target>Envoi du dossier %x dans la corbeille</target> - -<source>Moving symbolic link %x to recycle bin</source> -<target>Envoi du lien symbolique %x dans la corbeille</target> - <source>Moving file %x to %y</source> <target>Déplacement du fichier %x vers %y</target> @@ -1389,9 +1374,6 @@ Attention : les noms de fichiers doivent être relatifs aux répertoires de base <source>Removing old versions...</source> <target>Suppression des anciennes versions...</target> -<source>Creating file %x</source> -<target>Création du fichier %x</target> - <source>Creating symbolic link %x</source> <target>Création du lien symbolique %x</target> @@ -1410,6 +1392,9 @@ Attention : les noms de fichiers doivent être relatifs aux répertoires de base <source>Updating attributes of %x</source> <target>Mise à jour des attributs de %x</target> +<source>Cannot find %x.</source> +<target>Impossible de trouver %x</target> + <source>Target folder %x already existing.</source> <target>Le dossier destination %x existe déjà .</target> @@ -1455,6 +1440,9 @@ Attention : les noms de fichiers doivent être relatifs aux répertoires de base <source>Generating database...</source> <target>Génération de la base de données...</target> +<source>Creating Volume Shadow Copy for %x...</source> +<target>Création d'un Volume Shadow Copy pour %x ...</target> + <source>Data verification error: Source and target file have different content!</source> <target>Erreur lors du contrôle des données : Les fichiers source et destination ont des contenus différents !</target> diff --git a/BUILD/Languages/german.lng b/BUILD/Languages/german.lng index b904ff18..706736c4 100644 --- a/BUILD/Languages/german.lng +++ b/BUILD/Languages/german.lng @@ -19,6 +19,9 @@ <source>Total time:</source> <target>Gesamtzeit:</target> +<source>Cannot set directory lock for %x.</source> +<target>Die Verzeichnissperre für %x kann nicht gesetzt werden.</target> + <source>Show in Explorer</source> <target>Im Explorer anzeigen</target> @@ -61,6 +64,12 @@ <source>Clear filter settings</source> <target>Filtereinstellungen löschen</target> +<source>Copy</source> +<target>Kopieren</target> + +<source>Paste</source> +<target>Einfügen</target> + <source>Save as batch job</source> <target>Als Batch-Job speichern</target> @@ -160,9 +169,6 @@ <source>Waiting while directory is locked (%x)...</source> <target>Warte während Verzeichnis gesperrt ist (%x)...</target> -<source>Cannot set directory lock %x.</source> -<target>Die Verzeichnissperre %x kann nicht gesetzt werden.</target> - <source>Creating file %x</source> <target>Erstelle Datei %x</target> @@ -196,9 +202,6 @@ <source>/sec</source> <target>/s</target> -<source>Cannot find file %x.</source> -<target>Die Datei %x wurde nicht gefunden.</target> - <source>File %x does not contain a valid configuration.</source> <target>Die Datei %x enthält keine gültige Konfiguration.</target> @@ -223,6 +226,9 @@ <source>Cannot read the following XML elements:</source> <target>Die folgenden XML-Elemente können nicht gelesen werden:</target> +<source>Cannot find file %x.</source> +<target>Die Datei %x wurde nicht gefunden.</target> + <source>&Open...</source> <target>Ö&ffnen...</target> @@ -456,8 +462,14 @@ Die Befehlszeile wird ausgelöst wenn: <source>&Advanced</source> <target>&Erweitert</target> -<source>&Check for new version</source> -<target>&Auf neuere Version prüfen</target> +<source>&Check now</source> +<target>&Jetzt prüfen</target> + +<source>Check &automatically once a week</source> +<target>&Automatisch wöchentlich prüfen</target> + +<source>Check for new version</source> +<target>Auf neuere Version prüfen</target> <source>Compare</source> <target>Vergleichen</target> @@ -603,8 +615,8 @@ gleich ist <source><- Two way -></source> <target><- Zwei Wege -></target> -<source>Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically.</source> -<target>Identifiziere und propagiere Änderungen auf beiden Seiten mit Hilfe einer Datenbank. Löschungen, Umbenennungen und Konflikte werden automatisch erkannt.</target> +<source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> +<target>Identifiziere und propagiere Änderungen auf beiden Seiten. Löschungen, Verschiebungen und Konflikte werden automatisch mit Hilfe einer Datenbank erkannt.</target> <source>Mirror ->></source> <target>Spiegeln ->></target> @@ -642,15 +654,12 @@ gleich ist <source>Versioning</source> <target>Versionierung</target> -<source>Move time-stamped files into specified folder</source> -<target>Dateien mit Zeitstempel in den angegebenen Ordner verschieben</target> +<source>Move files to user-defined folder</source> +<target>Dateien in den benutzerdefinierten Ordner verschieben</target> <source>Naming convention:</source> <target>Namenskonvention:</target> -<source>Configuration</source> -<target>Konfiguration</target> - <source>Item exists on left side only</source> <target>Element existiert nur links</target> @@ -729,8 +738,8 @@ Achtung: Dateinamen müssen relativ zu den Basisverzeichnissen sein! <source>Maximum</source> <target>Maximum</target> -<source>&Default</source> -<target>&Standard</target> +<source>&Clear</source> +<target>&Löschen</target> <source>Fail-safe file copy</source> <target>Dateien ausfallsicher kopieren</target> @@ -759,6 +768,9 @@ Achtung: Dateinamen müssen relativ zu den Basisverzeichnissen sein! <source>Description</source> <target>Beschreibung</target> +<source>&Default</source> +<target>&Standard</target> + <source>Start synchronization</source> <target>Synchronisation starten</target> @@ -792,6 +804,9 @@ Achtung: Dateinamen müssen relativ zu den Basisverzeichnissen sein! <source>Overview</source> <target>Ãœbersicht</target> +<source>Configuration</source> +<target>Konfiguration</target> + <source>Filter files</source> <target>Dateien filtern</target> @@ -876,87 +891,45 @@ Achtung: Dateinamen müssen relativ zu den Basisverzeichnissen sein! <source>Configuration loaded!</source> <target>Konfiguration geladen!</target> -<source>Hide files that exist on left side only</source> -<target>Nur links existierende Dateien ausblenden</target> - <source>Show files that exist on left side only</source> <target>Nur links existierende Dateien anzeigen</target> -<source>Hide files that exist on right side only</source> -<target>Nur rechts existierende Dateien ausblenden</target> - <source>Show files that exist on right side only</source> <target>Nur rechts existierende Dateien anzeigen</target> -<source>Hide files that are newer on left</source> -<target>Auf beiden Seiten existierende Dateien ausblenden; linke Datei ist neuer</target> - <source>Show files that are newer on left</source> <target>Auf beiden Seiten existierende Dateien anzeigen; linke Datei ist neuer</target> -<source>Hide files that are newer on right</source> -<target>Auf beiden Seiten existierende Dateien ausblenden; rechte Datei ist neuer</target> - <source>Show files that are newer on right</source> <target>Auf beiden Seiten existierende Dateien anzeigen; rechte Datei ist neuer</target> -<source>Hide files that are equal</source> -<target>Gleiche Dateien ausblenden</target> - <source>Show files that are equal</source> <target>Gleiche Dateien anzeigen</target> -<source>Hide files that are different</source> -<target>Ungleiche Dateien ausblenden</target> - <source>Show files that are different</source> <target>Ungleiche Dateien anzeigen</target> -<source>Hide conflicts</source> -<target>Konflikte ausblenden</target> - <source>Show conflicts</source> <target>Konflikte zeigen</target> -<source>Hide files that will be created on the left side</source> -<target>Dateien die links erstellt werden ausblenden</target> - <source>Show files that will be created on the left side</source> <target>Dateien die links erstellt werden anzeigen</target> -<source>Hide files that will be created on the right side</source> -<target>Dateien die rechts erstellt werden ausblenden</target> - <source>Show files that will be created on the right side</source> <target>Dateien die rechts erstellt werden anzeigen</target> -<source>Hide files that will be deleted on the left side</source> -<target>Dateien die links gelöscht werden ausblenden</target> - <source>Show files that will be deleted on the left side</source> <target>Dateien die links gelöscht werden anzeigen</target> -<source>Hide files that will be deleted on the right side</source> -<target>Dateien die rechts gelöscht werden ausblenden</target> - <source>Show files that will be deleted on the right side</source> <target>Dateien die rechts gelöscht werden anzeigen</target> -<source>Hide files that will be overwritten on left side</source> -<target>Dateien die links überschrieben werden ausblenden</target> - <source>Show files that will be overwritten on left side</source> <target>Dateien die links überschrieben werden anzeigen</target> -<source>Hide files that will be overwritten on right side</source> -<target>Dateien die rechts überschrieben werden ausblenden</target> - <source>Show files that will be overwritten on right side</source> <target>Dateien die rechts überschrieben werden anzeigen</target> -<source>Hide files that won't be copied</source> -<target>Dateien die nicht kopiert werden ausblenden</target> - <source>Show files that won't be copied</source> <target>Dateien die nicht kopiert werden anzeigen</target> @@ -975,6 +948,9 @@ Achtung: Dateinamen müssen relativ zu den Basisverzeichnissen sein! <source>File list exported!</source> <target>Dateiliste exportiert!</target> +<source>Searching for program updates...</source> +<target>Suche nach aktualisierten Programmversionen...</target> + <source> <pluralform>1 directory</pluralform> <pluralform>%x directories</pluralform> @@ -1008,6 +984,9 @@ Achtung: Dateinamen müssen relativ zu den Basisverzeichnissen sein! <source>&Ignore</source> <target>&Ignorieren</target> +<source>Don't show this warning again</source> +<target>Diese Warnung nicht mehr anzeigen</target> + <source>&Switch</source> <target>&Wechseln</target> @@ -1026,9 +1005,6 @@ Achtung: Dateinamen müssen relativ zu den Basisverzeichnissen sein! <source>Comparing content...</source> <target>Vergleiche Dateiinhalt...</target> -<source>Copy</source> -<target>Kopieren</target> - <source>Paused</source> <target>Angehalten</target> @@ -1111,8 +1087,8 @@ Achtung: Dateinamen müssen relativ zu den Basisverzeichnissen sein! <target>Versteckte Warnungen und Dialoge wieder sichtbar machen?</target> <source> -<pluralform>Do you really want to move the following object to the Recycle Bin?</pluralform> -<pluralform>Do you really want to move the following %x objects to the Recycle Bin?</pluralform> +<pluralform>Do you really want to move the following item to the Recycle Bin?</pluralform> +<pluralform>Do you really want to move the following %x items to the Recycle Bin?</pluralform> </source> <target> <pluralform>Soll das folgende Element wirklich in den Papierkorb verschoben werden?</pluralform> @@ -1120,8 +1096,8 @@ Achtung: Dateinamen müssen relativ zu den Basisverzeichnissen sein! </target> <source> -<pluralform>Do you really want to delete the following object?</pluralform> -<pluralform>Do you really want to delete the following %x objects?</pluralform> +<pluralform>Do you really want to delete the following item?</pluralform> +<pluralform>Do you really want to delete the following %x items?</pluralform> </source> <target> <pluralform>Soll das folgende Element wirklich gelöscht werden?</pluralform> @@ -1131,14 +1107,17 @@ Achtung: Dateinamen müssen relativ zu den Basisverzeichnissen sein! <source>Leave as unresolved conflict</source> <target>Als unbehandelten Konflikt belassen</target> +<source>Time stamp</source> +<target>Zeitstempel</target> + <source>Append a timestamp to each file name</source> -<target>Einen Zeitstempel an jeden Dateinamen hinzufügen</target> +<target>Einen Zeitstempel an jeden Dateinamen anhängen</target> <source>Replace</source> <target>Ersetzen</target> <source>Move files and replace if existing</source> -<target>Dateien verschieben und bereits vorhandene ersetzen</target> +<target>Dateien verschieben und vorhandene ersetzen</target> <source>Folder</source> <target>Ordner</target> @@ -1152,6 +1131,9 @@ Achtung: Dateinamen müssen relativ zu den Basisverzeichnissen sein! <source>Files</source> <target>Dateien</target> +<source>Items</source> +<target>Elemente</target> + <source>Percentage</source> <target>Prozent</target> @@ -1302,20 +1284,23 @@ Achtung: Dateinamen müssen relativ zu den Basisverzeichnissen sein! <source>Recycle Bin is not available for the following paths! Files will be deleted permanently instead:</source> <target>Der Papierkorb ist für die folgenden Pfade nicht verfügbar! Die Dateien werden stattdessen permanent gelöscht:</target> -<source>You can ignore this error to consider each folder as empty.</source> -<target>Dieser Fehler kann ignoriert werden, um die Ordner als leer anzusehen.</target> +<source>The corresponding folder will be considered as empty.</source> +<target>Der entsprechende Ordner wird als leer angesehen.</target> <source>Cannot find the following folders:</source> <target>Die folgenden Ordner wurden nicht gefunden:</target> +<source>You can ignore this error to consider each folder as empty. The folders then will be created automatically during synchronization.</source> +<target>Dieser Fehler kann ignoriert werden, um die Ordner als leer anzusehen. Die Ordner werden dann beim Synchronisieren automatisch erstellt.</target> + <source>Directories are dependent! Be careful when setting up synchronization rules:</source> <target>Die Verzeichnisse sind voneinander abhängig! Achtung beim Festlegen der Synchronisationsregeln:</target> <source>Start comparison</source> <target>Starte Vergleich</target> -<source>Preparing synchronization...</source> -<target>Bereite Synchronisation vor...</target> +<source>Calculating sync directions...</source> +<target>Berechne Synchronisationsrichtungen...</target> <source>Conflict detected:</source> <target>Ein Konflikt wurde erkannt:</target> @@ -1458,6 +1443,9 @@ Achtung: Dateinamen müssen relativ zu den Basisverzeichnissen sein! <source>Generating database...</source> <target>Erzeuge Synchronisationsdatenbank...</target> +<source>Creating Volume Shadow Copy for %x...</source> +<target>Erstelle Volumenschattenkopie für %x...</target> + <source>Data verification error: Source and target file have different content!</source> <target>Verifizierungsfehler: Quell- und Zieldatei haben unterschiedlichen Inhalt!</target> diff --git a/BUILD/Languages/greek.lng b/BUILD/Languages/greek.lng index d48de099..51650524 100644 --- a/BUILD/Languages/greek.lng +++ b/BUILD/Languages/greek.lng @@ -19,6 +19,9 @@ <source>Total time:</source> <target>Συνολική διάÏκεια:</target> +<source>Cannot set directory lock for %x.</source> +<target>Ο υποκατάλογος για το %x δεν μποÏεί να κλειδωθεί.</target> + <source>Show in Explorer</source> <target>Εμφάνιση στην ΕξεÏεÏνηση</target> @@ -32,7 +35,7 @@ <target>Ζητήθηκε ματαίωση: Αναμονή για την λήξη της Ï„ÏÎχουσας εÏγασίας...</target> <source>Failure to create timestamp for versioning:</source> -<target></target> +<target>Αποτυχία να δημιουÏγηθεί χÏονική σήμανση για τη διατήÏηση παλιών εκδόσεων:</target> <source>RealtimeSync - Automated Synchronization</source> <target>RealtimeSync - ΑυτοματοποιημÎνος ΣυγχÏονισμός</target> @@ -40,6 +43,9 @@ <source>Error</source> <target>Σφάλματα</target> +<source>Selected variant:</source> +<target>ÎœÎθοδος που επιλÎχθηκε:</target> + <source>Select alternate comparison settings</source> <target>Επιλογή διαφοÏοποιημÎνων Ïυθμίσεων σÏγκÏισης</target> @@ -58,6 +64,12 @@ <source>Clear filter settings</source> <target>ΔιαγÏαφή όλων των Ïυθμίσεων φίλτÏου</target> +<source>Copy</source> +<target>ΑντιγÏαφή</target> + +<source>Paste</source> +<target>Επικόλληση</target> + <source>Save as batch job</source> <target>Αποθήκευση ως δÎσμη ενεÏγειών</target> @@ -97,11 +109,8 @@ <source>Fatal Error</source> <target>Σημαντικό Σφάλμα</target> -<source>Windows Error Code %x:</source> -<target>Κωδικός Σφάλματος των Windows %x:</target> - -<source>Linux Error Code %x:</source> -<target>Κωδικός Σφάλματος του Linux %x:</target> +<source>Error Code %x:</source> +<target>Κωδικός Σφάλματος %x</target> <source>Cannot resolve symbolic link %x.</source> <target>Ο συμβολικός δεσμός %x δεν μποÏεί να επιλυθεί</target> @@ -160,8 +169,8 @@ <source>Waiting while directory is locked (%x)...</source> <target>Αναμονή μÎχÏι να κλειδωθεί ο υποκατάλογος (%x)...</target> -<source>Cannot set directory lock %x.</source> -<target>Δεν μποÏεί να κλειδωθεί ο υπολατάλογος %x.</target> +<source>Creating file %x</source> +<target>ΔημιουÏγία του αÏχείου %x</target> <source> <pluralform>1 sec</pluralform> @@ -193,9 +202,6 @@ <source>/sec</source> <target>/δευτεÏόλεπτο</target> -<source>Cannot find file %x.</source> -<target>Το αÏχείο %x δε βÏÎθηκε.</target> - <source>File %x does not contain a valid configuration.</source> <target>Το αÏχείο %x δεν πεÏιÎχει μια ÎγκυÏη διάταξη.</target> @@ -220,6 +226,9 @@ <source>Cannot read the following XML elements:</source> <target>Δεν ήταν δυνατό να αναγνωσθοÏν τα ακόλουθα στοιχεία XML:</target> +<source>Cannot find file %x.</source> +<target>Το αÏχείο %x δε βÏÎθηκε.</target> + <source>&Open...</source> <target>Ά&νοιγμα...</target> @@ -453,15 +462,18 @@ The command is triggered if: <source>&Advanced</source> <target>&Για Ï€ÏοχωÏημÎνους</target> -<source>&Check for new version</source> -<target>Έ&λεγχος για νÎα Îκδοση</target> +<source>&Check now</source> +<target>Έλεγχος &Ï„ÏŽÏα</target> + +<source>Check &automatically once a week</source> +<target>&Aυτόματος Îλεγχος μια φοÏά την εβδομάδα</target> + +<source>Check for new version</source> +<target>Έλεγχος για νÎα Îκδοση</target> <source>Compare</source> <target>ΣÏγκÏιση</target> -<source>&Abort</source> -<target>&ΆκυÏο</target> - <source>Synchronize</source> <target>ΣυγχÏονισμός</target> @@ -504,6 +516,18 @@ The command is triggered if: <source>Time elapsed:</source> <target>Î ÎÏασε χÏόνος:</target> +<source>Synchronizing...</source> +<target>Γίνεται συγχÏονισμός...</target> + +<source>On completion</source> +<target>Μετά την ολοκλήÏωση</target> + +<source>Close</source> +<target>Κλείσιμο</target> + +<source>&Pause</source> +<target>&ΠαÏση</target> + <source>Batch job</source> <target>ΔÎσμη ενεÏγειών</target> @@ -534,9 +558,6 @@ The command is triggered if: <source>Abort synchronization on first error</source> <target>Ματαίωση του συγχÏÎ¿Î½Î¹ÏƒÎ¼Î¿Ï Î¼Îµ το Ï€Ïώτο σφάλμα</target> -<source>On completion</source> -<target>Μετά την ολοκλήÏωση</target> - <source>Show progress dialog</source> <target>Εμφάνιση της αναφοÏάς Ï€Ïοόδου</target> @@ -594,8 +615,8 @@ is the same <source><- Two way -></source> <target><- Διπλής κατεÏθυνσης -></target> -<source>Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically.</source> -<target>ΑναγνώÏιση και αναπαÏαγωγή των αλλαγών και στις δÏο πλευÏÎÏ‚ με τη χÏήση μιας βάσης δεδομÎνων. ΔιαγÏαφÎÏ‚, μετονομασίες και διενÎξεις ανιχνεÏονται αυτόματα.</target> +<source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> +<target>ΑναγνώÏιση και εφαÏμογή αλλαγών και στις δυο πλευÏÎÏ‚. Οι διαγÏαφÎÏ‚, οι μεταφοÏÎÏ‚ και οι διενÎξεις αναγνωÏίζονται αυτόματα με τη βοήθεια μιας βάσης δεδομÎνων.</target> <source>Mirror ->></source> <target>ΚατοπτÏισμός ->></target> @@ -633,15 +654,12 @@ is the same <source>Versioning</source> <target>ΔιατήÏηση παλιών εκδόσεων</target> -<source>Move time-stamped files into specified folder</source> -<target>ΜεταφοÏά χÏονοσημασμÎνων αÏχείων σε συγκεκÏιμÎνο υποκατάλογο</target> +<source>Move files to user-defined folder</source> +<target>ΜεταφοÏά των αÏχείων σε Îναν υποκατάλογο που οÏίζεται από το χÏήστη</target> <source>Naming convention:</source> <target>ΤÏόπος ονομασίας:</target> -<source>Configuration</source> -<target>Διάταξη</target> - <source>Item exists on left side only</source> <target>Το αντικείμενο υπάÏχει μόνο στην αÏιστεÏή πλευÏά</target> @@ -660,12 +678,6 @@ is the same <source>Conflict/item cannot be categorized</source> <target>ΔιÎνεξη/το αντικείμενο δεν μποÏεί να κατηγοÏιοποιηθεί</target> -<source>Synchronizing...</source> -<target>Γίνεται συγχÏονισμός...</target> - -<source>&Pause</source> -<target>&ΠαÏση</target> - <source>Source code written in C++ using:</source> <target>Ο πηγαίος κώδικας γÏάφτηκε σε C++ χÏησιμοποιώντας τα:</target> @@ -726,8 +738,8 @@ Note: File names must be relative to base directories! <source>Maximum</source> <target>ÎœÎγιστο</target> -<source>&Default</source> -<target>&Î Ïοεπιλογή</target> +<source>&Clear</source> +<target>&ΚαθαÏισμός</target> <source>Fail-safe file copy</source> <target>Ασφαλής αντιγÏαφή αÏχείων</target> @@ -756,6 +768,9 @@ Note: File names must be relative to base directories! <source>Description</source> <target>ΠεÏιγÏαφή</target> +<source>&Default</source> +<target>&Î Ïοεπιλογή</target> + <source>Start synchronization</source> <target>ΈναÏξη του συγχÏονισμοÏ</target> @@ -789,6 +804,9 @@ Note: File names must be relative to base directories! <source>Overview</source> <target>ΣÏνοψη</target> +<source>Configuration</source> +<target>Διάταξη</target> + <source>Filter files</source> <target>ΦιλτÏάÏισμα</target> @@ -796,7 +814,7 @@ Note: File names must be relative to base directories! <target>Επιλογή εμφάνισης</target> <source>Open...</source> -<target></target> +<target>Άνοιγμα...</target> <source>Save</source> <target>Αποθήκευση</target> @@ -861,104 +879,62 @@ Note: File names must be relative to base directories! <source>FreeFileSync batch</source> <target>ΔÎσμη ενεÏγειών του FreeFileSync</target> -<source>Never save changes</source> -<target>Îα μην αποθηκεÏονται οι αλλαγÎÏ‚</target> - <source>Do you want to save changes to %x?</source> <target>ΘÎλετε να αποθηκεÏσετε τις αλλαγÎÏ‚ στο %x;</target> <source>Do&n't save</source> <target>Îα &μην αποθηκευθοÏν</target> +<source>Never save changes</source> +<target>Îα μην αποθηκεÏονται οι αλλαγÎÏ‚</target> + <source>Configuration loaded!</source> <target>Η διάταξη Îχει ανοιχθεί!</target> -<source>Hide files that exist on left side only</source> -<target>ΑπόκÏυψη των αÏχείων που υπάÏχουν μόνο στα αÏιστεÏά</target> - <source>Show files that exist on left side only</source> <target>Εμφάνιση των αÏχείων που υπάÏχουν μόνο στα αÏιστεÏά</target> -<source>Hide files that exist on right side only</source> -<target>ΑπόκÏυψη των αÏχείων που υπάÏχουν μόνο στα δεξιά</target> - <source>Show files that exist on right side only</source> <target>Εμφάνιση των αÏχείων που υπάÏχουν μόνο στα δεξιά</target> -<source>Hide files that are newer on left</source> -<target>ΑπόκÏυψη των αÏχείων που είναι πιο Ï€Ïόσφατα στα αÏιστεÏά</target> - <source>Show files that are newer on left</source> <target>Εμφάνιση των αÏχείων που είναι πιο Ï€Ïόσφατα στα αÏιστεÏά</target> -<source>Hide files that are newer on right</source> -<target>ΑπόκÏυψη των αÏχείων που είναι πιο Ï€Ïόσφατα στα δεξιά</target> - <source>Show files that are newer on right</source> <target>Εμφάνιση των αÏχείων που είναι πιο Ï€Ïόσφατα στα δεξιά</target> -<source>Hide files that are equal</source> -<target>ΑπόκÏυψη των αÏχείων που είναι ίδια</target> - <source>Show files that are equal</source> <target>Εμφάνιση των αÏχείων που είναι ίδια</target> -<source>Hide files that are different</source> -<target>ΑπόκÏυψη των αÏχείων που είναι διαφοÏετικά</target> - <source>Show files that are different</source> <target>Εμφάνιση των αÏχείων που είναι διαφοÏετικά</target> -<source>Hide conflicts</source> -<target>ΑπόκÏυψη διενÎξεων</target> - <source>Show conflicts</source> <target>Εμφάνιση διενÎξεων</target> -<source>Hide files that will be created on the left side</source> -<target>ΑπόκÏυψη των αÏχείων που θα δημιουÏγηθοÏν στα αÏιστεÏά</target> - <source>Show files that will be created on the left side</source> <target>Εμφάνιση των αÏχείων που θα δημιουÏγηθοÏν στα αÏιστεÏά</target> -<source>Hide files that will be created on the right side</source> -<target>ΑπόκÏυψη των αÏχείων που θα δημιουÏγηθοÏν στα δεξιά</target> - <source>Show files that will be created on the right side</source> <target>Εμφάνιση των αÏχείων που θα δημιουÏγηθοÏν στα δεξιά</target> -<source>Hide files that will be deleted on the left side</source> -<target>ΑπόκÏυψη των αÏχείων που θα διαγÏαφοÏν στα αÏιστεÏά</target> - <source>Show files that will be deleted on the left side</source> <target>Εμφάνιση των αÏχείων που θα διαγÏαφοÏν στα αÏιστεÏά</target> -<source>Hide files that will be deleted on the right side</source> -<target>ΑπόκÏυψη των αÏχείων που θα διαγÏαφοÏν στα δεξιά</target> - <source>Show files that will be deleted on the right side</source> <target>Εμφάνιση των αÏχείων που θα διαγÏαφοÏν στα δεξιά</target> -<source>Hide files that will be overwritten on left side</source> -<target>ΑπόκÏυψη των αÏχείων που θα αντικατασταθοÏν στα αÏιστεÏά</target> - <source>Show files that will be overwritten on left side</source> <target>Εμφάνιση των αÏχείων που θα αντικατασταθοÏν στα αÏιστεÏά</target> -<source>Hide files that will be overwritten on right side</source> -<target>ΑπόκÏυψη των αÏχείων που θα αντικατασταθοÏν στα δεξιά</target> - <source>Show files that will be overwritten on right side</source> <target>Εμφάνιση των αÏχείων που θα αντικατασταθοÏν στα αÏιστεÏά</target> -<source>Hide files that won't be copied</source> -<target>ΑπόκÏυψη των αÏχείων που δε θα αντιγÏαφοÏν</target> - <source>Show files that won't be copied</source> <target>Εμφάνιση των αÏχείων που δε θα αντιγÏαφοÏν</target> <source>Set as default</source> -<target></target> +<target>ΟÏισμός ως Ï€Ïοεπιλογής</target> <source>All folders are in sync!</source> <target>Όλοι οι υποκατάλογοι είναι συγχÏονισμÎνοι!</target> @@ -972,6 +948,9 @@ Note: File names must be relative to base directories! <source>File list exported!</source> <target>Ο κατάλογος των αÏχείων Îχει εξαχθεί!</target> +<source>Searching for program updates...</source> +<target>Αναζήτηση καινοÏÏιας Îκδοσης...</target> + <source> <pluralform>1 directory</pluralform> <pluralform>%x directories</pluralform> @@ -1005,6 +984,9 @@ Note: File names must be relative to base directories! <source>&Ignore</source> <target>&ΠαÏάβλεψη</target> +<source>Don't show this warning again</source> +<target>Îα μην εμφανιστεί ξανά αυτή η Ï€Ïοειδοποίηση</target> + <source>&Switch</source> <target>&Εναλλαγή</target> @@ -1023,9 +1005,6 @@ Note: File names must be relative to base directories! <source>Comparing content...</source> <target>ΣÏγκÏιση του πεÏιεχομÎνου...</target> -<source>Copy</source> -<target>ΑντιγÏαφή</target> - <source>Paused</source> <target>Σε παÏση</target> @@ -1081,10 +1060,10 @@ Note: File names must be relative to base directories! <target>ΦίλτÏο</target> <source>Direct</source> -<target>Ως δεσμό</target> +<target>Ως δεσμοÏ</target> <source>Follow</source> -<target>Ως πεÏιεχόμενο</target> +<target>Ως πεÏιεχομÎνου</target> <source>Copy NTFS permissions</source> <target>ΑντιγÏαφή αδειών Ï€ÏοσπÎλασης NTFS</target> @@ -1108,26 +1087,29 @@ Note: File names must be relative to base directories! <target>Îα επανεμφανιστοÏν τα κÏυμμÎνα μηνÏματα και Ï€Ïοειδοποιήσεις;</target> <source> -<pluralform>Do you really want to move the following object to the Recycle Bin?</pluralform> -<pluralform>Do you really want to move the following %x objects to the Recycle Bin?</pluralform> +<pluralform>Do you really want to move the following item to the Recycle Bin?</pluralform> +<pluralform>Do you really want to move the following %x items to the Recycle Bin?</pluralform> </source> <target> -<pluralform>Είστε σίγουÏοι ότι θÎλετε να μετακινήσετε το ακόλουθο αντικείμενο στον Κάδο ΑνακÏκλωσης;</pluralform> -<pluralform>Είστε σίγουÏοι ότι θÎλετε να μετακινήσετε τα ακόλουθα %x αντικείμενα στον Κάδο ΑνακÏκλωσης;</pluralform> +<pluralform>Είσαι σίγουÏος ότι θÎλεις να μεταφεÏθεί το ακόλουθο αντικείμενο στον Κάδο ΑνακÏκλωσης;</pluralform> +<pluralform>Είσαι σίγουÏος ότι θÎλεις να μεταφεÏθοÏν τα ακόλουθα %x αντικείμενα στον Κάδο ΑνακÏκλωσης;</pluralform> </target> <source> -<pluralform>Do you really want to delete the following object?</pluralform> -<pluralform>Do you really want to delete the following %x objects?</pluralform> +<pluralform>Do you really want to delete the following item?</pluralform> +<pluralform>Do you really want to delete the following %x items?</pluralform> </source> <target> -<pluralform>Είστε σίγουÏοι ότι θÎλετε να διαγÏάψετε το ακόλουθο αντικείμενο;</pluralform> -<pluralform>Είστε σίγουÏοι ότι θÎλετε να διαγÏάψετε τα ακόλουθα %x αντικείμενα;</pluralform> +<pluralform>Είσαι σίγουÏος ότι θÎλεις να διαγÏαφεί το ακόλουθο αντικείμενο;</pluralform> +<pluralform>Είσαι σίγουÏος ότι θÎλεις να διαγÏαφοÏν τα ακόλουθα %x αντικείμενα;</pluralform> </target> <source>Leave as unresolved conflict</source> <target>ΠαÏάβλεψη ως ανεπίλυτη διÎνεξη</target> +<source>Time stamp</source> +<target>ΧÏονική σήμανση</target> + <source>Append a timestamp to each file name</source> <target>Î ÏοσάÏτηση χÏονικής σήμανσης σε κάθε όνομα αÏχείου</target> @@ -1251,6 +1233,12 @@ Note: File names must be relative to base directories! <source>Cannot set privilege %x.</source> <target>Τα δικαιώματα %x δεν μποÏοÏν να οÏιστοÏν.</target> +<source>Failed to suspend system sleep mode.</source> +<target>ΑπÎτυχε η αναβολή της αναστολής λειτουÏγίας του υπολογιστή.</target> + +<source>Cannot change process I/O priorities.</source> +<target>Δεν μποÏοÏν να αλλάξουν οι Ï€ÏοτεÏαιότητες I/O της διεÏγασίας.</target> + <source>Unable to move %x to the Recycle Bin!</source> <target>Το αÏχείο %x δεν ήταν δυνατό να μεταφεÏθεί στον Κάδο ΑνακÏκλωσης!</target> @@ -1270,7 +1258,7 @@ Note: File names must be relative to base directories! <target>ΡÏθμιση Ï€ÏοεπιλεγμÎνης κατεÏθυνσης συγχÏονισμοÏ: Τα νεότεÏα αÏχεία θα αντικαταστήσουν τα παλιότεÏα.</target> <source>Checking recycle bin availability for folder %x...</source> -<target></target> +<target>Έλεγχος της διαθεσιμότητας του κάδου ανακÏκλωσης για τον υποκατάλογο %x...</target> <source>Moving file %x to recycle bin</source> <target>ΜεταφοÏά του αÏχείου %x στον κάδο ανακÏκλωσης</target> @@ -1293,11 +1281,14 @@ Note: File names must be relative to base directories! <source>Recycle Bin is not available for the following paths! Files will be deleted permanently instead:</source> <target>Ο Κάδος ΑνακÏκλωσης δεν είναι διαθÎσιμος για τις ακόλουθες διαδÏομÎÏ‚! Τα αÏχεία θα διαγÏαφοÏν μόνιμα:</target> -<source>You can ignore this error to consider the folder as empty.</source> -<target>ΜποÏείτε να αγνοήσετε αυτό το λάθος, για να θεωÏήσετε ότι ο υποκατάλογος είναι κενός.</target> +<source>The corresponding folder will be considered as empty.</source> +<target>Ο αντίστοιχος υποκατάλογος θα θεωÏηθεί κενός.</target> + +<source>Cannot find the following folders:</source> +<target>Οι ακόλουθοι υποκατάλογοι δεν ήταν δυνατό να βÏεθοÏν:</target> -<source>Cannot find folder %x.</source> -<target>Ο υποκατάλογος %x δεν μποÏεί να βÏεθεί.</target> +<source>You can ignore this error to consider each folder as empty.</source> +<target>ΜποÏείτε να αγνοήσετε αυτό το σφάλμα, για να αντιμετωπίσετε κάθε υποκατάλογο ως κενό.</target> <source>Directories are dependent! Be careful when setting up synchronization rules:</source> <target>Οι υποκατάλογοι είναι εξαÏτώμενοι. Î Ïοσοχή κατά την εισαγωγή των κανόνων συγχÏονισμοÏ:</target> @@ -1305,8 +1296,8 @@ Note: File names must be relative to base directories! <source>Start comparison</source> <target>ΈναÏξη σÏγκÏισης</target> -<source>Preparing synchronization...</source> -<target>Î Ïοετοιμασία του συγχÏονισμοÏ...</target> +<source>Calculating sync directions...</source> +<target>Υπολογισμός των κατευθÏνσεων συγχÏονισμοÏ...</target> <source>Conflict detected:</source> <target>ΑνιχνεÏθηκε διÎνεξη:</target> @@ -1383,9 +1374,6 @@ Note: File names must be relative to base directories! <source>Removing old versions...</source> <target>ΔιαγÏαφή παλιών εκδόσεων...</target> -<source>Creating file %x</source> -<target>ΔημιουÏγία του αÏχείου %x</target> - <source>Creating symbolic link %x</source> <target>ΔημιουÏγία του ÏƒÏ…Î¼Î²Î¿Î»Î¹ÎºÎ¿Ï Î´ÎµÏƒÎ¼Î¿Ï %x</target> @@ -1404,6 +1392,9 @@ Note: File names must be relative to base directories! <source>Updating attributes of %x</source> <target>ΕνημÎÏωση των χαÏακτηÏιστικών αÏχείου του %x</target> +<source>Cannot find %x.</source> +<target>Το %x δεν μποÏεί να βÏεθεί.</target> + <source>Target folder %x already existing.</source> <target>Ο υποκατάλογος-στόχος %x υπάÏχει ήδη.</target> @@ -1449,6 +1440,9 @@ Note: File names must be relative to base directories! <source>Generating database...</source> <target>ΔημιουÏγία βάσης δεδομÎνων...</target> +<source>Creating Volume Shadow Copy for %x...</source> +<target>ΔημιουÏγία Σκιώδους ΑντίγÏαφου Τόμου για το %x...</target> + <source>Data verification error: Source and target file have different content!</source> <target>Σφάλμα επικÏÏωσης δεδομÎνων: Τα αÏχεία Ï€ÏοÎλευσης και Ï€ÏοοÏÎ¹ÏƒÎ¼Î¿Ï Îχουν διαφοÏετικό πεÏιεχόμενο!</target> diff --git a/BUILD/Languages/hebrew.lng b/BUILD/Languages/hebrew.lng index a7182126..89c5ab1c 100644 --- a/BUILD/Languages/hebrew.lng +++ b/BUILD/Languages/hebrew.lng @@ -19,6 +19,9 @@ <source>Total time:</source> <target>זמן כולל:</target> +<source>Cannot set directory lock for %x.</source> +<target>×œ× × ×™×ª×Ÿ ×œ× ×¢×•×œ מחיצה עבור %x.</target> + <source>Show in Explorer</source> <target>הר××” בסייר הקבצי×</target> @@ -40,6 +43,9 @@ <source>Error</source> <target>שגי××”</target> +<source>Selected variant:</source> +<target>גירסה ×©× ×‘×—×¨×”:</target> + <source>Select alternate comparison settings</source> <target>בחר הגדרות השוו××” חליפיות</target> @@ -58,6 +64,12 @@ <source>Clear filter settings</source> <target>× ×§×” בחירת ×ž×¡× ×Ÿ</target> +<source>Copy</source> +<target>העתק</target> + +<source>Paste</source> +<target>הדבק</target> + <source>Save as batch job</source> <target>שמור כעבודת ×צווה</target> @@ -97,11 +109,8 @@ <source>Fatal Error</source> <target>שגי××” פטלית</target> -<source>Windows Error Code %x:</source> -<target>קוד שגי×ת ×—×œ×•× ×•×ª %x:</target> - -<source>Linux Error Code %x:</source> -<target>קוד שגי×ת ×œ×™× ×•×§×¡ %x:</target> +<source>Error Code %x:</source> +<target>קוד שגי××” %x:</target> <source>Cannot resolve symbolic link %x.</source> <target>×œ× ×™×›×•×œ ×œ×¤×¢× ×— ×ת הקישור הסימבולי %x.</target> @@ -160,8 +169,8 @@ <source>Waiting while directory is locked (%x)...</source> <target>ממתין ×›×שר מחיצה × ×¢×•×œ×” (%x)...</target> -<source>Cannot set directory lock %x.</source> -<target>×œ× ×™×›×•×œ להגדיר ×ת × ×¢×™×œ×ª מחיצה %x.</target> +<source>Creating file %x</source> +<target>יוצר קובץ %x</target> <source> <pluralform>1 sec</pluralform> @@ -193,9 +202,6 @@ <source>/sec</source> <target>/×©× </target> -<source>Cannot find file %x.</source> -<target>×œ× ×™×›×•×œ ×œ×ž×¦×•× ×§×•×‘×¥ %x.</target> - <source>File %x does not contain a valid configuration.</source> <target>קובץ %x ××™× ×• כולל תצורה ×ª×§×™× ×”.</target> @@ -220,6 +226,9 @@ <source>Cannot read the following XML elements:</source> <target>×œ× ×™×›×•×œ ×œ×§×¨×•× ×ת שמות צמתי XML:</target> +<source>Cannot find file %x.</source> +<target>×œ× ×™×›×•×œ ×œ×ž×¦×•× ×§×•×‘×¥ %x.</target> + <source>&Open...</source> <target>&פתח...</target> @@ -453,24 +462,21 @@ The command is triggered if: <source>&Advanced</source> <target>&מתקד×</target> -<source>&Check for new version</source> -<target>&בדוק ×œ×’×™×¨×¡× ×—×“×©×”</target> +<source>&Check now</source> +<target>&בדוק עכשיו</target> -<source>Compare</source> -<target>השוו××”</target> +<source>Check &automatically once a week</source> +<target>בדוק &×וטומטית ×חת לשבוע</target> -<source>Compare both sides</source> -<target>השווה בין ×©× ×™ הצדדי×</target> +<source>Check for new version</source> +<target>בדוק ×”×× ×§×™×™×ž×ª גירסה חדשה</target> -<source>&Abort</source> -<target>&× ×˜×•×©</target> +<source>Compare</source> +<target>השוו××”</target> <source>Synchronize</source> <target>×¡× ×›×¨×Ÿ</target> -<source>Start synchronization</source> -<target>התחל ×¡× ×›×¨×•×Ÿ</target> - <source>Add folder pair</source> <target>הוסף זוג מחיצות</target> @@ -480,15 +486,6 @@ The command is triggered if: <source>Swap sides</source> <target>החלף צדדי×</target> -<source>Open</source> -<target>פתח</target> - -<source>Save</source> -<target>שמור</target> - -<source>Last used configurations (press DEL to remove from list)</source> -<target>תצורות ××—×¨×•× ×•×ª שהיו בשמוש (לחץ DEL להסרה מהרשימה)</target> - <source>Hide excluded items</source> <target>הסתר ×¤×¨×™×˜×™× ×©×œ×˜ × ×›×œ×œ×•</target> @@ -519,6 +516,18 @@ The command is triggered if: <source>Time elapsed:</source> <target>זמן שעבר:</target> +<source>Synchronizing...</source> +<target>×ž×¡× ×›×¨×Ÿ...</target> + +<source>On completion</source> +<target>ל×חר סיו×:</target> + +<source>Close</source> +<target>סגור</target> + +<source>&Pause</source> +<target>&עצור</target> + <source>Batch job</source> <target>עבודת ×צווה</target> @@ -549,9 +558,6 @@ The command is triggered if: <source>Abort synchronization on first error</source> <target>הפסק פעולת ×¡×™× ×›×¨×•×Ÿ בשגי××” ר××©×•× ×”</target> -<source>On completion</source> -<target>ל×חר סיו×:</target> - <source>Show progress dialog</source> <target>הר××” שיח התקדמות</target> @@ -609,8 +615,8 @@ is the same <source><- Two way -></source> <target>- דו ×›×•×•× ×™ -</target> -<source>Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically.</source> -<target>×–×”×” והפץ ×©×™× ×•×™×™× ×‘×©× ×™ ×”×¦×“×“×™× ×‘×מצעות שימוש במסד × ×ª×•× ×™×. מחיקות, ×©×™× ×•×™×™ שמות וסתירות ×ž×ª×’×œ×™× ×‘×ופן ×וטומטי.</target> +<source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> +<target>×–×”×” והפץ ×©×™× ×•×™×™× ×‘×©× ×™ הצדדי×. מחיקות העברות וסתירות ×ž×ª×’×œ×™× ×‘×ופן ×וטומטי ב×מצעות מסד × ×ª×•× ×™×.</target> <source>Mirror ->></source> <target>מר××” ->></target> @@ -648,15 +654,12 @@ is the same <source>Versioning</source> <target>עדכון גרס×ות</target> -<source>Move time-stamped files into specified folder</source> -<target>העבר ×§×‘×¦×™× ×¢× ×—×ª×™×ž×ª זמן לתיקיה מיוחדת</target> +<source>Move files to user-defined folder</source> +<target>העבר ×§×‘×¦×™× ×œ×ž×—×™×¦×” שהוגדרה ×¢"×™ המשתמש</target> <source>Naming convention:</source> <target>מוסכמות לקביעת שמות:</target> -<source>Configuration</source> -<target>תצורה</target> - <source>Item exists on left side only</source> <target>הפריט ×§×™×™× ×‘×¦×“ ימין בלבד</target> @@ -675,12 +678,6 @@ is the same <source>Conflict/item cannot be categorized</source> <target>סתירה/פריט ××™× ×• × ×™×ª×Ÿ לסיווג</target> -<source>Synchronizing...</source> -<target>×ž×¡× ×›×¨×Ÿ...</target> - -<source>&Pause</source> -<target>&עצור</target> - <source>Source code written in C++ using:</source> <target>קוד מקור × ×›×ª×‘ ב- C++ ב×מצעות:</target> @@ -741,8 +738,8 @@ Note: File names must be relative to base directories! <source>Maximum</source> <target>מקסימו×</target> -<source>&Default</source> -<target>&ברירת מחדל</target> +<source>&Clear</source> +<target>&× ×§×”</target> <source>Fail-safe file copy</source> <target>כשלון ב×בטחת העתקת קובץ</target> @@ -771,6 +768,12 @@ Note: File names must be relative to base directories! <source>Description</source> <target>ת×ור</target> +<source>&Default</source> +<target>&ברירת מחדל</target> + +<source>Start synchronization</source> +<target>התחל ×¡× ×›×¨×•×Ÿ</target> + <source>Variant</source> <target>×ž×©×ª× ×”</target> @@ -801,12 +804,24 @@ Note: File names must be relative to base directories! <source>Overview</source> <target>מבט כללי</target> +<source>Configuration</source> +<target>תצורה</target> + <source>Filter files</source> <target>קבצי ×”×ž×¡× ×Ÿ</target> <source>Select view</source> <target>בחר תצוגה</target> +<source>Open...</source> +<target>פתח...</target> + +<source>Save</source> +<target>שמור</target> + +<source>Compare both sides</source> +<target>השווה בין ×©× ×™ הצדדי×</target> + <source>Set direction:</source> <target>בחר כוון:</target> @@ -864,102 +879,63 @@ Note: File names must be relative to base directories! <source>FreeFileSync batch</source> <target>×צוות FreeFileSync</target> -<source>Never save changes</source> -<target>×ל תשמור ×©×™× ×•×™×™× ×œ×¢×•×œ×</target> - <source>Do you want to save changes to %x?</source> <target>×”×× ×œ×©×ž×•×¨ ×©×™× ×•×™×™× ×ל %x?</target> <source>Do&n't save</source> <target>×ל &תשמור</target> +<source>Never save changes</source> +<target>×ל תשמור ×©×™× ×•×™×™× ×œ×¢×•×œ×</target> + <source>Configuration loaded!</source> <target>תצורה ×”×•×˜×¢× ×”!</target> -<source>Hide files that exist on left side only</source> -<target>הסתר ×§×‘×¦×™× ×”×§×™×ž×™× ×ך ורק בצד ימין</target> - <source>Show files that exist on left side only</source> <target>הר××” ×§×‘×¦×™× ×”× ×ž×¦××™× ×ך ורק בצד ימין</target> -<source>Hide files that exist on right side only</source> -<target>הסתר ×§×‘×¦×™× ×”×§×™×ž×™× ×ך ורק בצד שמ×ל</target> - <source>Show files that exist on right side only</source> <target>הר××” ×§×‘×¦×™× ×”× ×ž×¦××™× ×ך ורק בצד שמ×ל</target> -<source>Hide files that are newer on left</source> -<target>הסתר ×§×‘×¦×™× ×—×“×©×™× ×™×•×ª×¨ בצד ימין</target> - <source>Show files that are newer on left</source> <target>הר××” ×§×‘×¦×™× ×—×“×©×™× ×™×•×ª×¨ בצד ימין</target> -<source>Hide files that are newer on right</source> -<target>הסתר ×§×‘×¦×™× ×—×“×©×™× ×™×•×ª×¨ בצד שמ×ל</target> - <source>Show files that are newer on right</source> <target>הר××” ×§×‘×¦×™× ×—×“×©×™× ×™×•×ª×¨ בצד שמ×ל</target> -<source>Hide files that are equal</source> -<target>הסתר ×§×‘×¦×™× ×©××™× × ×©×•×•×™×</target> - <source>Show files that are equal</source> <target>הר××” ×§×‘×¦×™× ×©×•×•×™×</target> -<source>Hide files that are different</source> -<target>הסתר ×§×‘×¦×™× ×©×•× ×™×</target> - <source>Show files that are different</source> <target>הר××” ×§×‘×¦×™× ×©×•× ×™×</target> -<source>Hide conflicts</source> -<target>הסתר ×§×•× ×¤×œ×™×§×˜×™×</target> - <source>Show conflicts</source> <target>הר××” ×§×•× ×¤×œ×™×§×˜×™×</target> -<source>Hide files that will be created on the left side</source> -<target>הסתר ×§×‘×¦×™× ×©×™×™×•×¦×¨×• בצד ימין</target> - <source>Show files that will be created on the left side</source> <target>הר××” ×§×‘×¦×™× ×©×™×•×•×¦×¨×• בצד ימין</target> -<source>Hide files that will be created on the right side</source> -<target>הסתר ×§×‘×¦×™× ×©×™×™×•×¦×¨×• בצד שמ×ל</target> - <source>Show files that will be created on the right side</source> <target>הר××” ×§×‘×¦×™× ×©×™×•×•×¦×¨×• בצד שמ×ל</target> -<source>Hide files that will be deleted on the left side</source> -<target>הסתר ×§×‘×¦×™× ×©×™×ž×—×§×• בצד ימין</target> - <source>Show files that will be deleted on the left side</source> <target>הר××” ×§×‘×¦×™× ×©×™×ž×—×§×• בצד ימין</target> -<source>Hide files that will be deleted on the right side</source> -<target>הסתר ×§×‘×¦×™× ×©×™×ž×—×§×• בצד שמ×ל</target> - <source>Show files that will be deleted on the right side</source> <target>הר××” ×§×‘×¦×™× ×©×™×ž×—×§×• בצד שמ×ל</target> -<source>Hide files that will be overwritten on left side</source> -<target>הסתר ×§×‘×¦×™× ×©×™×“×¨×¡×• בצד ימין</target> - <source>Show files that will be overwritten on left side</source> <target>הר××” ×§×‘×¦×™× ×©×™×“×¨×¡×• בצד ימין</target> -<source>Hide files that will be overwritten on right side</source> -<target>הסתר ×§×‘×¦×™× ×©×™×“×¨×¡×• בצד שמ×ל</target> - <source>Show files that will be overwritten on right side</source> <target>הר××” ×§×‘×¦×™× ×©×™×“×¨×¡×• בצד שמ×ל</target> -<source>Hide files that won't be copied</source> -<target>הסתר ×§×‘×¦×™× ×שר ×œ× ×™×•×¢×ª×§×•</target> - <source>Show files that won't be copied</source> <target>הר××” ×§×‘×¦×™× ×©×œ× ×™×•×¢×ª×§×•</target> +<source>Set as default</source> +<target>הגדר כברירת מחדל</target> + <source>All folders are in sync!</source> <target>כל התיקיות ×ž×¡×•× ×›×¨× ×•×ª</target> @@ -972,14 +948,8 @@ Note: File names must be relative to base directories! <source>File list exported!</source> <target>רשימת ×§×‘×¦×™× ×™×•×¦××”!</target> -<source> -<pluralform>Object deleted successfully!</pluralform> -<pluralform>%x objects deleted successfully!</pluralform> -</source> -<target> -<pluralform>×”×¢×¦× × ×ž×—×§ בהצלחה!</pluralform> -<pluralform>%x ×¢×¦×ž×™× × ×ž×—×§×• בהצלחה!</pluralform> -</target> +<source>Searching for program updates...</source> +<target>מחפש ×¢×™×“×›×•× ×™ ×ª×•×›× ×”...</target> <source> <pluralform>1 directory</pluralform> @@ -1014,6 +984,9 @@ Note: File names must be relative to base directories! <source>&Ignore</source> <target>&התעל×</target> +<source>Don't show this warning again</source> +<target>×ל תר××” ×זהרה זו שוב</target> + <source>&Switch</source> <target>&החלפה</target> @@ -1032,9 +1005,6 @@ Note: File names must be relative to base directories! <source>Comparing content...</source> <target>משווה תכולה...</target> -<source>Copy</source> -<target>העתק</target> - <source>Paused</source> <target>עצור</target> @@ -1111,41 +1081,44 @@ Note: File names must be relative to base directories! <target>- הצד ×”×©× ×™ מקביל ל %item_path%</target> <source>- Other side's counterpart to %item_folder%</source> -<target>הצד ×”×©× ×™ מקביל ל %item_folder%</target> +<target>הצד ×”×©× ×™ המקביל ל %item_folder%</target> <source>Make hidden warnings and dialogs visible again?</source> <target>להפוך די××œ×•×’×™× ×ž×•×¡×ª×¨×™× ×•×זהרות ×œ×’×œ×•×™×™× ×©×•×‘?</target> <source> -<pluralform>Do you really want to move the following object to the Recycle Bin?</pluralform> -<pluralform>Do you really want to move the following %x objects to the Recycle Bin?</pluralform> +<pluralform>Do you really want to move the following item to the Recycle Bin?</pluralform> +<pluralform>Do you really want to move the following %x items to the Recycle Bin?</pluralform> </source> <target> -<pluralform>×”×× ×œ×”×¢×‘×™×¨ ×ת ×”×¢×¦× ×”×‘× ×œ×¡×œ המיחזור?</pluralform> -<pluralform>×”×× ×œ×”×¢×‘×™×¨ ×ת %x ×”×¢×¦×ž×™× ×”×‘××™× ×œ×¡×œ המיחזור?</pluralform> +<pluralform>×”×× ×‘×¨×¦×•× ×š להעביר ×ת הפריט ×”×‘× ×œ×¡×œ המיחזור?</pluralform> +<pluralform>×”×× ×‘×¨×¦×•× ×š להעביר ×ת ×”×¤×¨×™×˜×™× %x הב××™× ×œ×¡×œ המיחזור?</pluralform> </target> <source> -<pluralform>Do you really want to delete the following object?</pluralform> -<pluralform>Do you really want to delete the following %x objects?</pluralform> +<pluralform>Do you really want to delete the following item?</pluralform> +<pluralform>Do you really want to delete the following %x items?</pluralform> </source> <target> -<pluralform>×”×× ×œ×ž×—×•×§ ×ת ×”×¢×¦× ×”×‘×?</pluralform> -<pluralform>×”×× ×œ×ž×—×•×§ ×ת %x ×”×¢×¦×ž×™× ×”×‘××™×?</pluralform> +<pluralform>×”×× ×‘×¨×¦×•× ×š למחוק ×ת הפריט הב×?</pluralform> +<pluralform>×”×× ×‘×¨×¦×•× ×š למחוק ×ת ×”×¤×¨×™×˜×™× %x הב××™×?</pluralform> </target> <source>Leave as unresolved conflict</source> <target>הש×ר ×›×§×•× ×¤×œ×™×§×˜ ×œ× ×ž×˜×•×¤×œ</target> +<source>Time stamp</source> +<target>תג זמן</target> + +<source>Append a timestamp to each file name</source> +<target>הצמד תג זמן לכל ×©× ×§×•×‘×¥</target> + <source>Replace</source> <target>החלף</target> <source>Move files and replace if existing</source> <target>העבר ×§×‘×¦×™× ×•×”×—×œ×£ במדה וקיימי×</target> -<source>Append a timestamp to each file name</source> -<target>הצמד תג זמן לכל ×©× ×§×•×‘×¥</target> - <source>Folder</source> <target>תיקייה</target> @@ -1260,6 +1233,12 @@ Note: File names must be relative to base directories! <source>Cannot set privilege %x.</source> <target>×œ× ×™×›×•×œ להגדיר זבות %x.</target> +<source>Failed to suspend system sleep mode.</source> +<target>× ×›×©×œ × ×¡×™×•×Ÿ להשעות מצב ×©×™× ×” של המערכת.</target> + +<source>Cannot change process I/O priorities.</source> +<target>×œ× ×™×›×•×œ ×œ×©× ×•×ª קדימויות של תהליך קלט פלט.</target> + <source>Unable to move %x to the Recycle Bin!</source> <target>×œ× ×™×›×•×œ להעביר ×ת %x לסל המיחזור!</target> @@ -1278,14 +1257,38 @@ Note: File names must be relative to base directories! <source>Setting default synchronization directions: Old files will be overwritten with newer files.</source> <target>בחר ברירת מחדל של ×¡× ×›×¨×•×Ÿ: ×§×‘×¦×™× ×™×©× ×™× ×™×“×¨×¡×• ×¢"×™ ×§×‘×¦×™× ×—×“×©×™× ×™×•×ª×¨.</target> +<source>Checking recycle bin availability for folder %x...</source> +<target>בודק ×–×ž×™× ×•×ª סל מחזור עבור מחיצה %x...</target> + +<source>Moving file %x to recycle bin</source> +<target>מעביר קובץ %x לסל מחזור</target> + +<source>Moving folder %x to recycle bin</source> +<target>מעביר מחיצה %x לסל מחזור</target> + +<source>Moving symbolic link %x to recycle bin</source> +<target>מעביר קישור סימבולי %x לסל מחזור</target> + +<source>Deleting file %x</source> +<target>מוחק קובץ %x</target> + +<source>Deleting folder %x</source> +<target>מוחק מחיצה %x</target> + +<source>Deleting symbolic link %x</source> +<target>מוחק קישור סימבולי %x</target> + <source>Recycle Bin is not available for the following paths! Files will be deleted permanently instead:</source> <target>סל מחזור ××™× ×• זמין עבור ×”× ×ª×™×‘×™× ×”×‘××™×! ×§×‘×¦×™× ×™×ž×—×§×• לצמיתות:</target> -<source>You can ignore this error to consider the folder as empty.</source> -<target>× ×™×ª×Ÿ ×œ×”×ª×¢×œ× ×ž×©×’×™××” זו ולהחשיב התיקייה כריקה.</target> +<source>The corresponding folder will be considered as empty.</source> +<target>המחיצה המת×ימה תחשב כריקה.</target> + +<source>Cannot find the following folders:</source> +<target>×œ× ×™×›×•×œ ×œ×ž×¦×•× ×ת המחיצות הב×ות:</target> -<source>Cannot find folder %x.</source> -<target>×œ× ×ž×•×¦× ×ª×™×§×™×™×” %x.</target> +<source>You can ignore this error to consider each folder as empty.</source> +<target>×פשר ×œ×”×ª×¢×œ× ×ž×©×’×™××” זו ולהחשיב כל מחיצה כריקה.</target> <source>Directories are dependent! Be careful when setting up synchronization rules:</source> <target>מחיצות תלויות! זהירות בהגדרת כללי ×¡× ×›×¨×•×Ÿ:</target> @@ -1293,8 +1296,8 @@ Note: File names must be relative to base directories! <source>Start comparison</source> <target>התחל השוו××”</target> -<source>Preparing synchronization...</source> -<target>מכין ×¡×™× ×›×¨×•×Ÿ...</target> +<source>Calculating sync directions...</source> +<target>מחשב ×›×™×•×•× ×™ ×¡× ×›×¨×•×Ÿ...</target> <source>Conflict detected:</source> <target>התגלה ×§×•× ×¤×œ×™×§×˜:</target> @@ -1359,24 +1362,6 @@ Note: File names must be relative to base directories! <source>Multiple...</source> <target>הכפל...</target> -<source>Deleting file %x</source> -<target>מוחק קובץ %x</target> - -<source>Deleting folder %x</source> -<target>מוחק מחיצה %x</target> - -<source>Deleting symbolic link %x</source> -<target>מוחק קישור סימבולי %x</target> - -<source>Moving file %x to recycle bin</source> -<target>מעביר קטבץ %x לסל מחזור</target> - -<source>Moving folder %x to recycle bin</source> -<target>מעביר מחיצה %x לסל מחזור</target> - -<source>Moving symbolic link %x to recycle bin</source> -<target>מעביר קישור סימבולי %x לסל מחזור</target> - <source>Moving file %x to %y</source> <target>מעביר קובץ %x ×ל %y</target> @@ -1389,9 +1374,6 @@ Note: File names must be relative to base directories! <source>Removing old versions...</source> <target>מסיר גרס×ות ×™×©× ×•×ª...</target> -<source>Creating file %x</source> -<target>יוצר קובץ %x</target> - <source>Creating symbolic link %x</source> <target>יוצר קישור סימבולי %x</target> @@ -1410,6 +1392,9 @@ Note: File names must be relative to base directories! <source>Updating attributes of %x</source> <target>מעדכן ×ª×›×•× ×•×ª של %x</target> +<source>Cannot find %x.</source> +<target>×œ× ×ž×•×¦× %x.</target> + <source>Target folder %x already existing.</source> <target>תיקיית מטרה %x כבר קיימת.</target> @@ -1455,6 +1440,9 @@ Note: File names must be relative to base directories! <source>Generating database...</source> <target>מייצר מסד × ×ª×•× ×™×...</target> +<source>Creating Volume Shadow Copy for %x...</source> +<target>יוצר העתק volume shadow עבור %x...</target> + <source>Data verification error: Source and target file have different content!</source> <target>שגי××” של ×ימות × ×ª×•× ×™× ×§×•×‘×¥ מקור ומטרה בעלי תכולת × ×ª×•× ×™× ×©×•× ×”!</target> diff --git a/BUILD/Languages/hungarian.lng b/BUILD/Languages/hungarian.lng index 385eaec3..58600506 100644 --- a/BUILD/Languages/hungarian.lng +++ b/BUILD/Languages/hungarian.lng @@ -19,6 +19,9 @@ <source>Total time:</source> <target>Becsült idÅ‘:</target> +<source>Cannot set directory lock for %x.</source> +<target>A következÅ‘ mappa zárolása sikertelen: %x.</target> + <source>Show in Explorer</source> <target>Mutatás az IntézÅ‘ben</target> @@ -40,6 +43,9 @@ <source>Error</source> <target>Hiba</target> +<source>Selected variant:</source> +<target>Változat kiválasztása:</target> + <source>Select alternate comparison settings</source> <target>AlternatÃv összehasonlÃtás beállÃtásai</target> @@ -58,6 +64,12 @@ <source>Clear filter settings</source> <target>SzűrÅ‘beállÃtások törlése</target> +<source>Copy</source> +<target>Másolás</target> + +<source>Paste</source> +<target>Beillesztés</target> + <source>Save as batch job</source> <target>Mentés kötegelt feladatként</target> @@ -97,11 +109,8 @@ <source>Fatal Error</source> <target>Kritikus hiba</target> -<source>Windows Error Code %x:</source> -<target>Windows hibakód %x:</target> - -<source>Linux Error Code %x:</source> -<target>Linux hibakód %x:</target> +<source>Error Code %x:</source> +<target>Hibakód %x:</target> <source>Cannot resolve symbolic link %x.</source> <target>Sikertelen a következÅ‘ symlink feloldása: %x.</target> @@ -160,8 +169,8 @@ <source>Waiting while directory is locked (%x)...</source> <target>Várakozás a mappa zárolásának a feloldására (%x)...</target> -<source>Cannot set directory lock %x.</source> -<target>A következÅ‘ mappa zárolása sikertelen: %x.</target> +<source>Creating file %x</source> +<target>%x fájl létrehozása</target> <source> <pluralform>1 sec</pluralform> @@ -193,9 +202,6 @@ <source>/sec</source> <target>/másodperc</target> -<source>Cannot find file %x.</source> -<target>Nem található a következÅ‘ fájl: %x.</target> - <source>File %x does not contain a valid configuration.</source> <target>A következÅ‘ fájl nem tartalmaz érvényes beállÃtásokat: %x.</target> @@ -220,6 +226,9 @@ <source>Cannot read the following XML elements:</source> <target>A következÅ‘ XML elemek olvasása sikertelen:</target> +<source>Cannot find file %x.</source> +<target>Nem található a következÅ‘ fájl: %x.</target> + <source>&Open...</source> <target>&Megnyitás...</target> @@ -453,24 +462,21 @@ A parancs végrehajtódik, ha: <source>&Advanced</source> <target>&Haladó</target> -<source>&Check for new version</source> -<target>&Új verzió keresése</target> +<source>&Check now</source> +<target>&EllenÅ‘rzés most</target> -<source>Compare</source> -<target>ÖsszehasonlÃtás</target> +<source>Check &automatically once a week</source> +<target>&Automatikus ellenÅ‘rzés hetente</target> -<source>Compare both sides</source> -<target>Mindkét oldal összehasonlÃtása</target> +<source>Check for new version</source> +<target>Új verzió keresése</target> -<source>&Abort</source> -<target>&MegszakÃt</target> +<source>Compare</source> +<target>ÖsszehasonlÃtás</target> <source>Synchronize</source> <target>Szinkronizálás</target> -<source>Start synchronization</source> -<target>Szinkronizáció indÃtása</target> - <source>Add folder pair</source> <target>Mappa pár megadása</target> @@ -480,15 +486,6 @@ A parancs végrehajtódik, ha: <source>Swap sides</source> <target>Oldalak felcserélése</target> -<source>Open</source> -<target>Megnyitás</target> - -<source>Save</source> -<target>Mentés</target> - -<source>Last used configurations (press DEL to remove from list)</source> -<target>Utoljára használt beállÃtások (DEL billentyűvel törölhetÅ‘ a listából)</target> - <source>Hide excluded items</source> <target>Kizárt elemek elrejtése</target> @@ -519,6 +516,18 @@ A parancs végrehajtódik, ha: <source>Time elapsed:</source> <target>Eltelt idÅ‘:</target> +<source>Synchronizing...</source> +<target>Szinkronizálás folyamatban...</target> + +<source>On completion</source> +<target>Befejezés esetén</target> + +<source>Close</source> +<target>Bezárás</target> + +<source>&Pause</source> +<target>&Szünet</target> + <source>Batch job</source> <target>Kötegelt feladat</target> @@ -549,9 +558,6 @@ A parancs végrehajtódik, ha: <source>Abort synchronization on first error</source> <target>Szinkronizáció leállÃtása az elsÅ‘ hibánál</target> -<source>On completion</source> -<target>Befejezés esetén</target> - <source>Show progress dialog</source> <target>FolyamatjelzÅ‘ párbeszédablak mutatása</target> @@ -607,8 +613,8 @@ A fájlok megegyeznek, ha megegyezik <source><- Two way -></source> <target><- Kétirányú -></target> -<source>Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically.</source> -<target>Változások azonosÃtása és végrehajtása mindkét oldalon adatbázis segÃtségével. Automatikusan felismerÅ‘dnek a törlések, átnevezések és ütközések.</target> +<source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> +<target>Változások keresése mindkét oldalon. A törlések, mozgatások és ütközések automatikus felismerése adatbázis segÃtségével.</target> <source>Mirror ->></source> <target>Tükrözés ->></target> @@ -646,15 +652,12 @@ A fájlok megegyeznek, ha megegyezik <source>Versioning</source> <target>Verziókövetés</target> -<source>Move time-stamped files into specified folder</source> -<target>IdÅ‘bélyeges fájlok mozgatása a megadott mappába</target> +<source>Move files to user-defined folder</source> +<target>Fájlok mozgatása elÅ‘re megadott mappába</target> <source>Naming convention:</source> <target>Elnevezési konvenció:</target> -<source>Configuration</source> -<target>BeállÃtás</target> - <source>Item exists on left side only</source> <target>Az elem csak a bal oldalon létezik</target> @@ -673,12 +676,6 @@ A fájlok megegyeznek, ha megegyezik <source>Conflict/item cannot be categorized</source> <target>Az ütközés vagy elem nem kategorizálható</target> -<source>Synchronizing...</source> -<target>Szinkronizálás folyamatban...</target> - -<source>&Pause</source> -<target>&Szünet</target> - <source>Source code written in C++ using:</source> <target>A programot C++-ban fejlesztették a következÅ‘k felhasználásával:</target> @@ -739,8 +736,8 @@ Megjegyzés: A fájlneveknek relatÃvnak kell lenniük az alap mappához viszony <source>Maximum</source> <target>Maximum</target> -<source>&Default</source> -<target>&Alapértelmezett</target> +<source>&Clear</source> +<target>&Törlés</target> <source>Fail-safe file copy</source> <target>Hibamentes fájlmásolás</target> @@ -769,6 +766,12 @@ Megjegyzés: A fájlneveknek relatÃvnak kell lenniük az alap mappához viszony <source>Description</source> <target>Megjegyzés</target> +<source>&Default</source> +<target>&Alapértelmezett</target> + +<source>Start synchronization</source> +<target>Szinkronizáció indÃtása</target> + <source>Variant</source> <target>Variáns</target> @@ -799,12 +802,24 @@ Megjegyzés: A fájlneveknek relatÃvnak kell lenniük az alap mappához viszony <source>Overview</source> <target>Összefoglaló</target> +<source>Configuration</source> +<target>BeállÃtás</target> + <source>Filter files</source> <target>Fájlok szűrése</target> <source>Select view</source> <target>Nézet kiválasztása</target> +<source>Open...</source> +<target>Megnyitás...</target> + +<source>Save</source> +<target>Mentés</target> + +<source>Compare both sides</source> +<target>Mindkét oldal összehasonlÃtása</target> + <source>Set direction:</source> <target>Irány</target> @@ -862,104 +877,62 @@ Megjegyzés: A fájlneveknek relatÃvnak kell lenniük az alap mappához viszony <source>FreeFileSync batch</source> <target>FreeFileSync kötegelt fájl</target> -<source>Never save changes</source> -<target>Változtatások figyelmen kÃvül hagyása</target> - <source>Do you want to save changes to %x?</source> <target>Akarod menteni a %x változtatásait?</target> <source>Do&n't save</source> <target>Ne mentsd</target> +<source>Never save changes</source> +<target>Változtatások figyelmen kÃvül hagyása</target> + <source>Configuration loaded!</source> <target>BeállÃtások betöltve!</target> -<source>Hide files that exist on left side only</source> -<target>Csak a bal oldalon létezÅ‘ fájlok elrejtése</target> - <source>Show files that exist on left side only</source> <target>Csak a bal oldalon létezÅ‘ fájlok mutatása</target> -<source>Hide files that exist on right side only</source> -<target>Csak a jobb oldalon létezÅ‘ fájlok elrejtése</target> - <source>Show files that exist on right side only</source> <target>Csak a jobb oldalon létezÅ‘ fájlok mutatása</target> -<source>Hide files that are newer on left</source> -<target>A bal oldalon lévÅ‘ újabb fájlok elrejtése</target> - <source>Show files that are newer on left</source> <target>A bal oldali újabb fájlok mutatása</target> -<source>Hide files that are newer on right</source> -<target>A jobb oldalon lévÅ‘ újabb fájlok elrejtése</target> - <source>Show files that are newer on right</source> <target>A jobb oldali újabb fájlok mutatása</target> -<source>Hide files that are equal</source> -<target>Az egyezÅ‘ fájlok elrejtése</target> - <source>Show files that are equal</source> <target>EgyezÅ‘ fájlok mutatása</target> -<source>Hide files that are different</source> -<target>A nem egyezÅ‘ fájlok elrejtése</target> - <source>Show files that are different</source> <target>EltérÅ‘ fájlok mutatása</target> -<source>Hide conflicts</source> -<target>Ãœtközések elrejtése</target> - <source>Show conflicts</source> <target>Ãœtközések mutatása</target> -<source>Hide files that will be created on the left side</source> -<target>A bal oldalon létrehozandó fájlok elrejtése.</target> - <source>Show files that will be created on the left side</source> <target>A bal oldalon létrehozandó fájlok mutatása</target> -<source>Hide files that will be created on the right side</source> -<target>A jobb oldalon létrehozandó fájlok elrejtése.</target> - <source>Show files that will be created on the right side</source> <target>A jobb oldalon létrehozandó fájlok mutatása</target> -<source>Hide files that will be deleted on the left side</source> -<target>A bal oldalon törlendÅ‘ fájlok elrejtése.</target> - <source>Show files that will be deleted on the left side</source> <target>A bal oldalon törlendÅ‘ fájlok mutatása</target> -<source>Hide files that will be deleted on the right side</source> -<target>A jobb oldalon törlendÅ‘ fájlok elrejtése.</target> - <source>Show files that will be deleted on the right side</source> <target>A jobb oldalon törlendÅ‘ fájlok mutatása</target> -<source>Hide files that will be overwritten on left side</source> -<target>A bal oldalon felülÃrandó fájlok elrejtése</target> - <source>Show files that will be overwritten on left side</source> <target>A bal oldalon felülÃrandó fájlok mutatása</target> -<source>Hide files that will be overwritten on right side</source> -<target>A jobb oldalon felülÃrandó fájlok elrejtése</target> - <source>Show files that will be overwritten on right side</source> <target>A jobb oldalon felülÃrandó fájlok mutatása</target> -<source>Hide files that won't be copied</source> -<target>A nem másolandó fájlok elrejtése</target> - <source>Show files that won't be copied</source> <target>A nem másolandó fájlok mutatása</target> <source>Set as default</source> -<target></target> +<target>BeállÃtás alapértelmezettként</target> <source>All folders are in sync!</source> <target>Minden mappa szinkronban!</target> @@ -973,6 +946,9 @@ Megjegyzés: A fájlneveknek relatÃvnak kell lenniük az alap mappához viszony <source>File list exported!</source> <target>A fájllista exportálása befejezÅ‘dött!</target> +<source>Searching for program updates...</source> +<target>SzoftverfrissÃtés keresése...</target> + <source> <pluralform>1 directory</pluralform> <pluralform>%x directories</pluralform> @@ -1006,6 +982,9 @@ Megjegyzés: A fájlneveknek relatÃvnak kell lenniük az alap mappához viszony <source>&Ignore</source> <target>&Kihagy</target> +<source>Don't show this warning again</source> +<target>Figyelmeztetés elrejtése legközelebb</target> + <source>&Switch</source> <target>&Váltás</target> @@ -1024,9 +1003,6 @@ Megjegyzés: A fájlneveknek relatÃvnak kell lenniük az alap mappához viszony <source>Comparing content...</source> <target>Tartalom összehasonlÃtása...</target> -<source>Copy</source> -<target>Másolás</target> - <source>Paused</source> <target>Szüneteltetve</target> @@ -1109,26 +1085,29 @@ Megjegyzés: A fájlneveknek relatÃvnak kell lenniük az alap mappához viszony <target>Tegyük újra láthatóvá a rejtett figyelmeztetéseket és párbeszédablakokat?</target> <source> -<pluralform>Do you really want to move the following object to the Recycle Bin?</pluralform> -<pluralform>Do you really want to move the following %x objects to the Recycle Bin?</pluralform> +<pluralform>Do you really want to move the following item to the Recycle Bin?</pluralform> +<pluralform>Do you really want to move the following %x items to the Recycle Bin?</pluralform> </source> <target> -<pluralform>Valóban a Lomtárba (Recycle Bin) akarod mozgatni a következÅ‘ objektumot?</pluralform> -<pluralform>Valóban a Lomtárba (Recycle Bin) akarod mozgatni a következÅ‘ %x objektumot?</pluralform> +<pluralform>Valóban a Lomtárba akarod mozgatni a következÅ‘ elemet?</pluralform> +<pluralform>Valóban a Lomtárba akarod mozgatni a következÅ‘ %x elemet?</pluralform> </target> <source> -<pluralform>Do you really want to delete the following object?</pluralform> -<pluralform>Do you really want to delete the following %x objects?</pluralform> +<pluralform>Do you really want to delete the following item?</pluralform> +<pluralform>Do you really want to delete the following %x items?</pluralform> </source> <target> -<pluralform>Valóban törölni akarod a következÅ‘ objektumot?</pluralform> -<pluralform>Valóban törölni akarod a következÅ‘ %x objektumot?</pluralform> +<pluralform>Valóban törölni akarod a következÅ‘ elemet?</pluralform> +<pluralform>Valóban törölni akarod a következÅ‘ %x elemet?</pluralform> </target> <source>Leave as unresolved conflict</source> <target>Feloldatlan ütközésként hagyni</target> +<source>Time stamp</source> +<target>IdÅ‘bélyeg</target> + <source>Append a timestamp to each file name</source> <target>IdÅ‘bélyeg hozzáadása a minden fájlnévhez</target> @@ -1150,6 +1129,9 @@ Megjegyzés: A fájlneveknek relatÃvnak kell lenniük az alap mappához viszony <source>Files</source> <target>Fájlok</target> +<source>Items</source> +<target></target> + <source>Percentage</source> <target>Százalék</target> @@ -1252,6 +1234,12 @@ Megjegyzés: A fájlneveknek relatÃvnak kell lenniük az alap mappához viszony <source>Cannot set privilege %x.</source> <target>A következÅ‘ privilégium beállÃtása sikertelen: %x.</target> +<source>Failed to suspend system sleep mode.</source> +<target>A rendszer alvó üzemmódjának felfüggesztése sikertelen.</target> + +<source>Cannot change process I/O priorities.</source> +<target>A feladat I/O priorÃtásainak megváltoztatása sikertelen!</target> + <source>Unable to move %x to the Recycle Bin!</source> <target>%x Lomtárba helyezése sikertelen!</target> @@ -1271,7 +1259,7 @@ Megjegyzés: A fájlneveknek relatÃvnak kell lenniük az alap mappához viszony <target>Alapértelmezett szinkronizációs irányok beállÃtása: a régebbi fájlok felülÃródnak az újabbakkal.</target> <source>Checking recycle bin availability for folder %x...</source> -<target></target> +<target>A következÅ‘ mappa meglétének ellenÅ‘rzése a Lomtárban: %x.</target> <source>Moving file %x to recycle bin</source> <target>%x fájl mozgatása a Lomtárba (Recycle Bin)</target> @@ -1294,11 +1282,14 @@ Megjegyzés: A fájlneveknek relatÃvnak kell lenniük az alap mappához viszony <source>Recycle Bin is not available for the following paths! Files will be deleted permanently instead:</source> <target>A Lomtár (Recycle Bin) nem elérhetÅ‘ a következÅ‘ útvonalakhoz! A fájlok azonnali törlésre kerülnek helyette:</target> -<source>You can ignore this error to consider the folder as empty.</source> -<target>Figyelmen kÃvül hagyhatod ezt a hibát ezzel üresnek tekintve a mappát.</target> +<source>The corresponding folder will be considered as empty.</source> +<target>A megfelelÅ‘ mappa üresként lesz kezelve.</target> -<source>Cannot find folder %x.</source> -<target>Nem található a következÅ‘ mappa: %x.</target> +<source>Cannot find the following folders:</source> +<target>A következÅ‘ mappák nem találhatóak:</target> + +<source>You can ignore this error to consider each folder as empty. The folders then will be created automatically during synchronization.</source> +<target></target> <source>Directories are dependent! Be careful when setting up synchronization rules:</source> <target>A mappák függenek egymástól! Legyen óvatos, amikor megadja a szinkronizálási szabályokat:</target> @@ -1306,8 +1297,8 @@ Megjegyzés: A fájlneveknek relatÃvnak kell lenniük az alap mappához viszony <source>Start comparison</source> <target>ÖsszehasonlÃtás megkezdése</target> -<source>Preparing synchronization...</source> -<target>Szinkronizálás elÅ‘készÃtése...</target> +<source>Calculating sync directions...</source> +<target>Szinkronizációs irányok számÃtása...</target> <source>Conflict detected:</source> <target>Ãœtközés történt:</target> @@ -1384,9 +1375,6 @@ Megjegyzés: A fájlneveknek relatÃvnak kell lenniük az alap mappához viszony <source>Removing old versions...</source> <target>Régi verziók eltávolÃtása...</target> -<source>Creating file %x</source> -<target>%x fájl létrehozása</target> - <source>Creating symbolic link %x</source> <target>%x symlink létrehozása</target> @@ -1405,6 +1393,9 @@ Megjegyzés: A fájlneveknek relatÃvnak kell lenniük az alap mappához viszony <source>Updating attributes of %x</source> <target>A(z) %x attribútumainak frissÃtése</target> +<source>Cannot find %x.</source> +<target>A(z) %x nem található.</target> + <source>Target folder %x already existing.</source> <target>A következÅ‘ célmappa már létezik: %x.</target> @@ -1450,6 +1441,9 @@ Megjegyzés: A fájlneveknek relatÃvnak kell lenniük az alap mappához viszony <source>Generating database...</source> <target>Adatbázis generálása...</target> +<source>Creating Volume Shadow Copy for %x...</source> +<target>Volume Shadow Copy létrehozása %x számára...</target> + <source>Data verification error: Source and target file have different content!</source> <target>AdatellenÅ‘rzési hiba: A forrás és cél fájl tartalma különbözik!</target> diff --git a/BUILD/Languages/italian.lng b/BUILD/Languages/italian.lng index 14eeaf79..0bd4d263 100644 --- a/BUILD/Languages/italian.lng +++ b/BUILD/Languages/italian.lng @@ -19,6 +19,9 @@ <source>Total time:</source> <target>Tempo totale:</target> +<source>Cannot set directory lock for %x.</source> +<target>Impossibile impostare blocco cartella per %x.</target> + <source>Show in Explorer</source> <target>Mostra in Esplora Risorse</target> @@ -40,6 +43,9 @@ <source>Error</source> <target>Errore</target> +<source>Selected variant:</source> +<target>Variante selezionata:</target> + <source>Select alternate comparison settings</source> <target>Seleziona impostazioni di comparazione alternative</target> @@ -58,6 +64,12 @@ <source>Clear filter settings</source> <target>Azzera impostazioni filtro</target> +<source>Copy</source> +<target>Copia</target> + +<source>Paste</source> +<target>Incolla</target> + <source>Save as batch job</source> <target>Salva come processo batch</target> @@ -97,11 +109,8 @@ <source>Fatal Error</source> <target>Errore fatale</target> -<source>Windows Error Code %x:</source> -<target>Windows - Errore codice %x:</target> - -<source>Linux Error Code %x:</source> -<target>Linux - Errore codice %x:</target> +<source>Error Code %x:</source> +<target>Errore Codice %x:</target> <source>Cannot resolve symbolic link %x.</source> <target>Impossibile risolvere collegamento %x.</target> @@ -160,8 +169,8 @@ <source>Waiting while directory is locked (%x)...</source> <target>Attendi mentre la cartella è bloccata (%x)...</target> -<source>Cannot set directory lock %x.</source> -<target>Impossibile impostare il blocco cartella %x.</target> +<source>Creating file %x</source> +<target>Creazione file %x</target> <source> <pluralform>1 sec</pluralform> @@ -193,9 +202,6 @@ <source>/sec</source> <target>/sec</target> -<source>Cannot find file %x.</source> -<target>Impossibile trovare il file %x.</target> - <source>File %x does not contain a valid configuration.</source> <target>Il file %x non contiene una configurazione valida.</target> @@ -220,6 +226,9 @@ <source>Cannot read the following XML elements:</source> <target>Impossibile leggere i seguenti elementi XML:</target> +<source>Cannot find file %x.</source> +<target>Impossibile trovare il file %x.</target> + <source>&Open...</source> <target>&Apri...</target> @@ -453,24 +462,21 @@ Il comando è attivato se: <source>&Advanced</source> <target>&Avanzate</target> -<source>&Check for new version</source> -<target>&Controlla la presenza di nuove versioni</target> +<source>&Check now</source> +<target>&Controlla ora</target> -<source>Compare</source> -<target>Compara</target> +<source>Check &automatically once a week</source> +<target>Controlla &automaticamente una volta a settimana</target> -<source>Compare both sides</source> -<target>Compara le due liste</target> +<source>Check for new version</source> +<target>Controlla presenza di nuove versioni</target> -<source>&Abort</source> -<target>&Abbandona</target> +<source>Compare</source> +<target>Compara</target> <source>Synchronize</source> <target>Sincronizza</target> -<source>Start synchronization</source> -<target>Avvia sincronizzazione</target> - <source>Add folder pair</source> <target>Aggiungi una coppia di cartelle</target> @@ -480,15 +486,6 @@ Il comando è attivato se: <source>Swap sides</source> <target>Inverti i lati</target> -<source>Open</source> -<target>Apri</target> - -<source>Save</source> -<target>Salva</target> - -<source>Last used configurations (press DEL to remove from list)</source> -<target>Ultima configurazione utilizzata (premi CANC per rimuovere dall'elenco)</target> - <source>Hide excluded items</source> <target>Nascondi oggetti esclusi</target> @@ -519,6 +516,18 @@ Il comando è attivato se: <source>Time elapsed:</source> <target>Tempo trascorso:</target> +<source>Synchronizing...</source> +<target>Sincronizzazione...</target> + +<source>On completion</source> +<target>In completamento</target> + +<source>Close</source> +<target>Chiudi</target> + +<source>&Pause</source> +<target>&Pausa</target> + <source>Batch job</source> <target>Attività batch</target> @@ -547,10 +556,7 @@ Il comando è attivato se: <target>Esci</target> <source>Abort synchronization on first error</source> -<target>Abortisci sincronizzazione al primo errore</target> - -<source>On completion</source> -<target>In completamento</target> +<target>Interrompi sincronizzazione al primo errore</target> <source>Show progress dialog</source> <target>Mostra stato di avanzamento</target> @@ -609,8 +615,8 @@ I file sono considerati identici se <source><- Two way -></source> <target><- Due vie -></target> -<source>Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically.</source> -<target>Identifica e propaga modifiche su entrambi i lati usando un database. Cancellazioni, ridenominazioni e conflitti sono rilevati automaticamente.</target> +<source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> +<target>Identifica e propaga cambiamenti su entrambi i lati. Cancellazioni, spostamenti e conflitti sono identificati automaticamente usando un database.</target> <source>Mirror ->></source> <target>Mirror ->></target> @@ -648,15 +654,12 @@ I file sono considerati identici se <source>Versioning</source> <target>Versione</target> -<source>Move time-stamped files into specified folder</source> -<target>Sposta file con indicazione datata nella cartella specifica</target> +<source>Move files to user-defined folder</source> +<target>Sposta file in cartella personalizzata</target> <source>Naming convention:</source> <target>Modalità di rinomina:</target> -<source>Configuration</source> -<target>Configurazione</target> - <source>Item exists on left side only</source> <target>L'elemento esiste solo sul lato sinistro</target> @@ -675,12 +678,6 @@ I file sono considerati identici se <source>Conflict/item cannot be categorized</source> <target>Conflitto/elemento non categorizzabile</target> -<source>Synchronizing...</source> -<target>Sincronizzazione...</target> - -<source>&Pause</source> -<target>&Pausa</target> - <source>Source code written in C++ using:</source> <target>Codice sorgente scritto in C++ utilizzando:</target> @@ -741,8 +738,8 @@ Nota: I nomi dei file devono essere relativi alle cartelle di appartenenza! <source>Maximum</source> <target>Massimo</target> -<source>&Default</source> -<target>&Predefinito</target> +<source>&Clear</source> +<target>&Pulisci</target> <source>Fail-safe file copy</source> <target>Copia file sicura</target> @@ -771,6 +768,12 @@ Nota: I nomi dei file devono essere relativi alle cartelle di appartenenza! <source>Description</source> <target>Descrizione</target> +<source>&Default</source> +<target>&Predefinito</target> + +<source>Start synchronization</source> +<target>Avvia sincronizzazione</target> + <source>Variant</source> <target>Variante</target> @@ -801,12 +804,24 @@ Nota: I nomi dei file devono essere relativi alle cartelle di appartenenza! <source>Overview</source> <target>Anteprima</target> +<source>Configuration</source> +<target>Configurazione</target> + <source>Filter files</source> <target>Filtro dei file</target> <source>Select view</source> <target>Seleziona vista</target> +<source>Open...</source> +<target>Apri...</target> + +<source>Save</source> +<target>Salva</target> + +<source>Compare both sides</source> +<target>Compara le due liste</target> + <source>Set direction:</source> <target>Imposta direzione:</target> @@ -864,102 +879,63 @@ Nota: I nomi dei file devono essere relativi alle cartelle di appartenenza! <source>FreeFileSync batch</source> <target>FreeFileSync batch</target> -<source>Never save changes</source> -<target>Non salvare mai le modifiche</target> - <source>Do you want to save changes to %x?</source> <target>Vuoi salvare le modifiche a %x?</target> <source>Do&n't save</source> <target>No&n salvare</target> +<source>Never save changes</source> +<target>Non salvare mai le modifiche</target> + <source>Configuration loaded!</source> <target>Configurazione caricata!</target> -<source>Hide files that exist on left side only</source> -<target>Nascondi i file esistenti solo a sinistra</target> - <source>Show files that exist on left side only</source> <target>Mostra file esistenti solo a sinistra</target> -<source>Hide files that exist on right side only</source> -<target>Nascondi i file esistenti solo a destra</target> - <source>Show files that exist on right side only</source> <target>Mostra file esistenti solo a destra</target> -<source>Hide files that are newer on left</source> -<target>Nascondi i file più recenti a sinistra</target> - <source>Show files that are newer on left</source> <target>Mostra file di sinistra più recenti che a destra</target> -<source>Hide files that are newer on right</source> -<target>Nascondi i file più recenti a destra</target> - <source>Show files that are newer on right</source> <target>Mostra file di destra più recenti che a sinistra</target> -<source>Hide files that are equal</source> -<target>Nascondi i file identici</target> - <source>Show files that are equal</source> <target>Mostra file identici</target> -<source>Hide files that are different</source> -<target>Nascondi i file differenti</target> - <source>Show files that are different</source> <target>Mostra file differenti</target> -<source>Hide conflicts</source> -<target>Nascondi i conflitti</target> - <source>Show conflicts</source> <target>Mostra conflitti</target> -<source>Hide files that will be created on the left side</source> -<target>Nascondi i file che verranno creati sul lato sinistro</target> - <source>Show files that will be created on the left side</source> <target>Mostra file che verranno creati sul lato sinistro</target> -<source>Hide files that will be created on the right side</source> -<target>Nascondi i file che verranno creati sul lato destro</target> - <source>Show files that will be created on the right side</source> <target>Mostra file che verranno creati sul lato destro</target> -<source>Hide files that will be deleted on the left side</source> -<target>Nascondi i file che verranno cancellati sul lato sinistro</target> - <source>Show files that will be deleted on the left side</source> <target>Mostra file che verranno cancellati sul lato sinistro</target> -<source>Hide files that will be deleted on the right side</source> -<target>Nascondi i file che verranno cancellati sul lato destro</target> - <source>Show files that will be deleted on the right side</source> <target>Mostra file che verranno cancellati sul lato destro</target> -<source>Hide files that will be overwritten on left side</source> -<target>Nascondi i file che verranno sovrascritti sul lato sinistro</target> - <source>Show files that will be overwritten on left side</source> <target>Mostra file che verranno sovrascritti sul lato sinistro</target> -<source>Hide files that will be overwritten on right side</source> -<target>Nascondi i file che verranno sovrascritti sul lato destro</target> - <source>Show files that will be overwritten on right side</source> <target>Mostra file che verranno sovrascritti sul lato destro</target> -<source>Hide files that won't be copied</source> -<target>Nascondi i file che non saranno copiati</target> - <source>Show files that won't be copied</source> <target>Mostra file che non saranno copiati</target> +<source>Set as default</source> +<target>Imposta come predefinito</target> + <source>All folders are in sync!</source> <target>Tutte le cartelle sono sincronizzate!</target> @@ -972,14 +948,8 @@ Nota: I nomi dei file devono essere relativi alle cartelle di appartenenza! <source>File list exported!</source> <target>Elenco file esportato!</target> -<source> -<pluralform>Object deleted successfully!</pluralform> -<pluralform>%x objects deleted successfully!</pluralform> -</source> -<target> -<pluralform>Eliminazione oggetto riuscita!</pluralform> -<pluralform>%x oggetti eliminati con successo!</pluralform> -</target> +<source>Searching for program updates...</source> +<target>Ricerca di aggiornamenti al programma...</target> <source> <pluralform>1 directory</pluralform> @@ -1014,6 +984,9 @@ Nota: I nomi dei file devono essere relativi alle cartelle di appartenenza! <source>&Ignore</source> <target>&Ignora</target> +<source>Don't show this warning again</source> +<target>Non mostrare più questo avviso</target> + <source>&Switch</source> <target>&Passa</target> @@ -1032,9 +1005,6 @@ Nota: I nomi dei file devono essere relativi alle cartelle di appartenenza! <source>Comparing content...</source> <target>Comparazione contenuto...</target> -<source>Copy</source> -<target>Copia</target> - <source>Paused</source> <target>In pausa</target> @@ -1117,35 +1087,38 @@ Nota: I nomi dei file devono essere relativi alle cartelle di appartenenza! <target>Vuoi visualizzare nuovamente i dialoghi e avvisi nascosti?</target> <source> -<pluralform>Do you really want to move the following object to the Recycle Bin?</pluralform> -<pluralform>Do you really want to move the following %x objects to the Recycle Bin?</pluralform> +<pluralform>Do you really want to move the following item to the Recycle Bin?</pluralform> +<pluralform>Do you really want to move the following %x items to the Recycle Bin?</pluralform> </source> <target> -<pluralform>Vuoi spostare il seguente oggetto nel Cestino?</pluralform> -<pluralform>Vuoi spostare i seguenti %x oggetti nel Cestino?</pluralform> +<pluralform>Vuoi veramente spostare il seguente oggetto nel Cestino?</pluralform> +<pluralform>Vuoi veramente spostare i seguenti %x oggetti nel Cestino?</pluralform> </target> <source> -<pluralform>Do you really want to delete the following object?</pluralform> -<pluralform>Do you really want to delete the following %x objects?</pluralform> +<pluralform>Do you really want to delete the following item?</pluralform> +<pluralform>Do you really want to delete the following %x items?</pluralform> </source> <target> -<pluralform>Eliminare il seguente elemento?</pluralform> -<pluralform>Eliminare i seguenti %x elementi?</pluralform> +<pluralform>Vuoi veramente eliminare il seguente oggetto?</pluralform> +<pluralform>Vuoi veramente eliminare i seguenti %x oggetti?</pluralform> </target> <source>Leave as unresolved conflict</source> <target>Lascia come conflitti irrisolti</target> +<source>Time stamp</source> +<target>Data e ora</target> + +<source>Append a timestamp to each file name</source> +<target>Accoda data e ora ad ogni nome di file</target> + <source>Replace</source> <target>Sostituisci</target> <source>Move files and replace if existing</source> <target>Sposta file e sostituisci se esistenti</target> -<source>Append a timestamp to each file name</source> -<target>Accoda data e ora ad ogni nome di file</target> - <source>Folder</source> <target>Cartella</target> @@ -1158,6 +1131,9 @@ Nota: I nomi dei file devono essere relativi alle cartelle di appartenenza! <source>Files</source> <target>File</target> +<source>Items</source> +<target></target> + <source>Percentage</source> <target>Percentuale</target> @@ -1260,6 +1236,12 @@ Nota: I nomi dei file devono essere relativi alle cartelle di appartenenza! <source>Cannot set privilege %x.</source> <target>Impossibile impostare privilegi %x.</target> +<source>Failed to suspend system sleep mode.</source> +<target>Sospensione sistema fallita.</target> + +<source>Cannot change process I/O priorities.</source> +<target>Impossibile modificare le priorità I/O del processo.</target> + <source>Unable to move %x to the Recycle Bin!</source> <target>Impossibile spostare %x nel Cestino!</target> @@ -1278,14 +1260,38 @@ Nota: I nomi dei file devono essere relativi alle cartelle di appartenenza! <source>Setting default synchronization directions: Old files will be overwritten with newer files.</source> <target>Imposta direzioni di sincronizzazione dpredefinite: i vecchi file saranno sovrascritti dai nuovi.</target> +<source>Checking recycle bin availability for folder %x...</source> +<target>Controllo di disponibilità Cestino per la cartella %x...</target> + +<source>Moving file %x to recycle bin</source> +<target>Spostamento file %x nel Cestino</target> + +<source>Moving folder %x to recycle bin</source> +<target>Spostamento cartella %x nel Cestino</target> + +<source>Moving symbolic link %x to recycle bin</source> +<target>Spostamento collegamento %x nel Cestino</target> + +<source>Deleting file %x</source> +<target>Eliminazione file %x</target> + +<source>Deleting folder %x</source> +<target>Eliminazione cartella %x</target> + +<source>Deleting symbolic link %x</source> +<target>Eliminazione collegamento %x</target> + <source>Recycle Bin is not available for the following paths! Files will be deleted permanently instead:</source> <target>Cestino non disponibile per i seguenti percorsi! I file verranno cancellati in modo permanente:</target> -<source>You can ignore this error to consider the folder as empty.</source> -<target>Puoi ignorare questo errore per considerare la cartella come vuota.</target> +<source>The corresponding folder will be considered as empty.</source> +<target>La cartella corrispondente sarà considerata come vuota.</target> -<source>Cannot find folder %x.</source> -<target>Impossibile trovare cartella %x.</target> +<source>Cannot find the following folders:</source> +<target>Impossibile trovare le seguenti cartelle:</target> + +<source>You can ignore this error to consider each folder as empty. The folders then will be created automatically during synchronization.</source> +<target></target> <source>Directories are dependent! Be careful when setting up synchronization rules:</source> <target>Le cartelle sono dipendenti! Fai attenzione quando configuri le regole di sincronizzazione:</target> @@ -1293,8 +1299,8 @@ Nota: I nomi dei file devono essere relativi alle cartelle di appartenenza! <source>Start comparison</source> <target>Inizia comparazione</target> -<source>Preparing synchronization...</source> -<target>Preparazione sincronizzazione...</target> +<source>Calculating sync directions...</source> +<target>Calcolo della direzione di sincronizzazione...</target> <source>Conflict detected:</source> <target>Rilevato conflitto:</target> @@ -1359,24 +1365,6 @@ Nota: I nomi dei file devono essere relativi alle cartelle di appartenenza! <source>Multiple...</source> <target>Multiplo...</target> -<source>Deleting file %x</source> -<target>Eliminazione file %x</target> - -<source>Deleting folder %x</source> -<target>Eliminazione cartella %x</target> - -<source>Deleting symbolic link %x</source> -<target>Eliminazione collegamento %x</target> - -<source>Moving file %x to recycle bin</source> -<target>Spostamento file %x nel Cestino</target> - -<source>Moving folder %x to recycle bin</source> -<target>Spostamento cartella %x nel Cestino</target> - -<source>Moving symbolic link %x to recycle bin</source> -<target>Spostamento collegamento %x nel Cestino</target> - <source>Moving file %x to %y</source> <target>Spostamento file %x in %y</target> @@ -1389,9 +1377,6 @@ Nota: I nomi dei file devono essere relativi alle cartelle di appartenenza! <source>Removing old versions...</source> <target>Rimozione di vecchie versioni...</target> -<source>Creating file %x</source> -<target>Creazione file %x</target> - <source>Creating symbolic link %x</source> <target>Creazione collegamento %x</target> @@ -1410,6 +1395,9 @@ Nota: I nomi dei file devono essere relativi alle cartelle di appartenenza! <source>Updating attributes of %x</source> <target>Aggiornamento attributi di %x</target> +<source>Cannot find %x.</source> +<target>Impossibile trovare %x.</target> + <source>Target folder %x already existing.</source> <target>La cartella di destinazione %x è già esistente.</target> @@ -1455,6 +1443,9 @@ Nota: I nomi dei file devono essere relativi alle cartelle di appartenenza! <source>Generating database...</source> <target>Generazione database...</target> +<source>Creating Volume Shadow Copy for %x...</source> +<target>Creazione di Volume Shadow Copy per %x...</target> + <source>Data verification error: Source and target file have different content!</source> <target>Errore nella verifica data: i file sorgente e destinazione hanno differente contenuto!</target> diff --git a/BUILD/Languages/japanese.lng b/BUILD/Languages/japanese.lng index 25935c29..01b596e0 100644 --- a/BUILD/Languages/japanese.lng +++ b/BUILD/Languages/japanese.lng @@ -19,6 +19,9 @@ <source>Total time:</source> <target>åˆè¨ˆæ™‚é–“:</target> +<source>Cannot set directory lock for %x.</source> +<target>%x ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒãƒƒã‚¯ãŒã§ãã¾ã›ã‚“.</target> + <source>Show in Explorer</source> <target>エクスプãƒãƒ¼ãƒ©ã§è¡¨ç¤º</target> @@ -40,6 +43,9 @@ <source>Error</source> <target>エラー</target> +<source>Selected variant:</source> +<target>é¸æŠžã•ã‚ŒãŸãƒãƒªã‚¢ãƒ³ãƒˆ:</target> + <source>Select alternate comparison settings</source> <target>代替比較è¨å®šã‚’é¸æŠž</target> @@ -58,6 +64,12 @@ <source>Clear filter settings</source> <target>フィルターè¨å®šã‚’クリア</target> +<source>Copy</source> +<target>コピー</target> + +<source>Paste</source> +<target>貼り付ã‘</target> + <source>Save as batch job</source> <target>一括ジョブã§ä¿å˜</target> @@ -97,11 +109,8 @@ <source>Fatal Error</source> <target>致命的ãªã‚¨ãƒ©ãƒ¼</target> -<source>Windows Error Code %x:</source> -<target>Windows エラーコード %x:</target> - -<source>Linux Error Code %x:</source> -<target>Linux エラーコード %x:</target> +<source>Error Code %x:</source> +<target>エラーコード %x:</target> <source>Cannot resolve symbolic link %x.</source> <target>シンボリックリンク %x を解決ã§ãã¾ã›ã‚“.</target> @@ -159,8 +168,8 @@ <source>Waiting while directory is locked (%x)...</source> <target>待機時間ä¸ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã¯ãƒãƒƒã‚¯ã•ã‚Œã¾ã™(%x)...</target> -<source>Cannot set directory lock %x.</source> -<target>%x ã®ãƒãƒƒã‚¯ã‚’セットã§ãã¾ã›ã‚“.</target> +<source>Creating file %x</source> +<target>ファイル %x を作æˆä¸</target> <source> <pluralform>1 sec</pluralform> @@ -190,9 +199,6 @@ <source>/sec</source> <target>/秒</target> -<source>Cannot find file %x.</source> -<target>ファイル %x ãŒã¿ã¤ã‹ã‚Šã¾ã›ã‚“.</target> - <source>File %x does not contain a valid configuration.</source> <target>ファイル %x ã«ã¯æœ‰åŠ¹ãªæ§‹æˆãŒå«ã¾ã‚Œã¦ã„ã¾ã›ã‚“.</target> @@ -217,6 +223,9 @@ <source>Cannot read the following XML elements:</source> <target>次㮠XMLè¦ç´ ã‚’èªã¿è¾¼ã‚ã¾ã›ã‚“:</target> +<source>Cannot find file %x.</source> +<target>ファイル %x ãŒã¿ã¤ã‹ã‚Šã¾ã›ã‚“.</target> + <source>&Open...</source> <target>é–‹ã(&O)...</target> @@ -450,24 +459,21 @@ The command is triggered if: <source>&Advanced</source> <target>æ‹¡å¼µ(&A)</target> -<source>&Check for new version</source> -<target>ãƒãƒ¼ã‚¸ãƒ§ãƒ³æ›´æ–°ã®ç¢ºèª(&C)</target> +<source>&Check now</source> +<target>今ã™ã確èª(&C)</target> -<source>Compare</source> -<target>比較</target> +<source>Check &automatically once a week</source> +<target>週ã«ä¸€å›žã€è‡ªå‹•çš„ã«ç¢ºèªã™ã‚‹(&A)</target> -<source>Compare both sides</source> -<target>両方を比較</target> +<source>Check for new version</source> +<target>æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ç¢ºèª</target> -<source>&Abort</source> -<target>æƒ…å ±(&A)</target> +<source>Compare</source> +<target>比較</target> <source>Synchronize</source> <target>åŒæœŸå‡¦ç†</target> -<source>Start synchronization</source> -<target>åŒæœŸã®é–‹å§‹</target> - <source>Add folder pair</source> <target>フォルダã®ãƒšã‚¢ã‚’è¿½åŠ </target> @@ -477,15 +483,6 @@ The command is triggered if: <source>Swap sides</source> <target>パãƒãƒ«ã‚’入れ替ãˆ</target> -<source>Open</source> -<target>é–‹ã</target> - -<source>Save</source> -<target>ä¿å˜</target> - -<source>Last used configurations (press DEL to remove from list)</source> -<target>å‰å›žä½¿ç”¨ã—ãŸæ§‹æˆè¨å®š(DEL ã‚ーã§ãƒªã‚¹ãƒˆã‹ã‚‰é™¤åŽ»ã—ã¾ã™)</target> - <source>Hide excluded items</source> <target>é™¤å¤–å¯¾è±¡é …ç›®ã‚’éš ã™</target> @@ -516,6 +513,18 @@ The command is triggered if: <source>Time elapsed:</source> <target>経éŽæ™‚é–“</target> +<source>Synchronizing...</source> +<target>åŒæœŸå‡¦ç†ä¸...</target> + +<source>On completion</source> +<target>完了時ã®å‹•ä½œ</target> + +<source>Close</source> +<target>é–‰ã˜ã‚‹</target> + +<source>&Pause</source> +<target>一時åœæ¢(&P)</target> + <source>Batch job</source> <target>一括処ç†</target> @@ -546,9 +555,6 @@ The command is triggered if: <source>Abort synchronization on first error</source> <target>最åˆã®ã‚¨ãƒ©ãƒ¼ç™ºç”Ÿæ™‚ã«åŒæœŸã‚’ä¸æ–ã™ã‚‹</target> -<source>On completion</source> -<target>完了時ã®å‹•ä½œ</target> - <source>Show progress dialog</source> <target>進æ—ダイアãƒã‚°ã‚’表示</target> @@ -606,8 +612,8 @@ is the same <source><- Two way -></source> <target><- ä¸¡æ–¹å‘ -></target> -<source>Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically.</source> -<target>両å´ã®è˜åˆ¥ã€ãƒ—ãƒãƒ‘ティã®å¤‰æ›´ç‰¹å®šã«ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’使用ã—ã¾ã™ã€‚削除ã€ãƒªãƒãƒ¼ãƒ åŠã³ç«¶åˆãªã©ã¯è‡ªå‹•çš„ã«æ¤œå‡ºã•ã‚Œã¾ã™</target> +<source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> +<target>変更箇所をè˜åˆ¥ã—ã¦ä¸¡å´ã«å¤‰æ›´ã‚’åæ˜ ã—ã¾ã™ã€‚データベースを使用ã™ã‚‹ã“ã¨ã§ã€å‰Šé™¤ã€ç§»å‹•ãŠã‚ˆã³ç«¶åˆãªã©ãŒè‡ªå‹•çš„ã«æ¤œå‡ºã•ã‚Œã¾ã™ã€‚</target> <source>Mirror ->></source> <target>ミラー >></target> @@ -645,15 +651,12 @@ is the same <source>Versioning</source> <target>ãƒãƒ¼ã‚¸ãƒ§ãƒ³ä»˜ã‘</target> -<source>Move time-stamped files into specified folder</source> -<target>ファイルã®ã‚¿ã‚¤ãƒ スタンプã§æŒ‡å®šãƒ•ã‚©ãƒ«ãƒ€ã«ç§»å‹•</target> +<source>Move files to user-defined folder</source> +<target>ユーザ定義フォルダã«ãƒ•ã‚¡ã‚¤ãƒ«ã‚’移動</target> <source>Naming convention:</source> <target>命åè¦å‰‡:</target> -<source>Configuration</source> -<target>構æˆè¨å®š</target> - <source>Item exists on left side only</source> <target>å·¦å´ã®ã¿ã«å˜åœ¨ã™ã‚‹é …ç›®</target> @@ -670,13 +673,7 @@ is the same <target>内容ãŒç•°ãªã‚‹é …ç›®</target> <source>Conflict/item cannot be categorized</source> -<target>競åˆ/é …ç›®ã‚’åˆ†é¡žåŒ–ã§ãã¾ã›ã‚“</target> - -<source>Synchronizing...</source> -<target>åŒæœŸå‡¦ç†ä¸...</target> - -<source>&Pause</source> -<target>一時åœæ¢(&P)</target> +<target>競åˆ/分類化ã§ããªã„é …ç›®</target> <source>Source code written in C++ using:</source> <target>ソースコード㯠C++ ã§æ›¸ã‹ã‚Œã¦ã„ã¾ã™</target> @@ -738,26 +735,26 @@ Note: File names must be relative to base directories! <source>Maximum</source> <target>最大</target> -<source>&Default</source> -<target>デフォルト(&D)</target> +<source>&Clear</source> +<target>クリア(&C)</target> <source>Fail-safe file copy</source> -<target>ファイルコピーã®å¤±æ•—</target> +<target>安全ãªãƒ•ã‚¡ã‚¤ãƒ«ã‚³ãƒ”ーを実施</target> <source>Write to a temporary file (*.ffs_tmp) first then rename it. This guarantees a consistent state even in case of fatal error.</source> -<target>最åˆã«ä¸€æ™‚ファイル(*.ffs_tmp)ã«æ›¸ãè¾¼ã¿ã€ãれをリãƒãƒ¼ãƒ ã—ã¾ã™ã€‚ã“ã‚Œã«ã‚ˆã‚Šã€è‡´å‘½çš„ãªã‚¨ãƒ©ãƒ¼ãŒèµ·ã“ã£ã¦ã‚‚状態ã¯ä¿è¨¼ã•ã‚Œã¾ã™</target> +<target>最åˆã«ä¸€æ™‚ファイル(*.ffs_tmp)ã«æ›¸ãè¾¼ã¿ã€ãれをリãƒãƒ¼ãƒ ã™ã‚‹ã“ã¨ã§ã€è‡´å‘½çš„ãªã‚¨ãƒ©ãƒ¼ãŒèµ·ã“ã£ãŸå ´åˆã§ã‚‚一貫性ã¯ä¿è¨¼ã•ã‚Œã¾ã™</target> <source>Copy locked files</source> <target>ãƒãƒƒã‚¯ã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«ã‚’コピーã™ã‚‹</target> <source>Copy shared or locked files using Volume Shadow Copy Service (Requires Administrator rights)</source> -<target>ボリュームシャドーコピーを使用ã—ã¦å…±æœ‰/ãƒãƒƒã‚¯ã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«ã‚’コピー(管ç†è€…権é™ãŒå¿…è¦)</target> +<target>ボリュームシャドウコピーを使用ã—ã¦å…±æœ‰/ãƒãƒƒã‚¯ã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«ã‚’コピーã—ã¾ã™(管ç†è€…権é™ãŒå¿…è¦)</target> <source>Copy file access permissions</source> <target>ファイルã®ã‚¢ã‚¯ã‚»ã‚¹ãƒ‘ーミッションをコピーã™ã‚‹</target> <source>Transfer file and folder permissions (Requires Administrator rights)</source> -<target>転é€ãƒ•ã‚¡ã‚¤ãƒ«ã¨ãƒ•ã‚©ãƒ«ãƒ€ã®ãƒ‘ーミッション(管ç†è€…権é™ãŒå¿…è¦)</target> +<target>ファイルã¨ãƒ•ã‚©ãƒ«ãƒ€ã®ãƒ‘ーミッションを転é€ã—ã¾ã™(管ç†è€…権é™ãŒå¿…è¦)</target> <source>Restore hidden dialogs</source> <target>éš ã—ãŸãƒ€ã‚¤ã‚¢ãƒã‚°ã‚’復帰</target> @@ -768,6 +765,12 @@ Note: File names must be relative to base directories! <source>Description</source> <target>説明</target> +<source>&Default</source> +<target>デフォルト(&D)</target> + +<source>Start synchronization</source> +<target>åŒæœŸã®é–‹å§‹</target> + <source>Variant</source> <target>変化</target> @@ -798,12 +801,24 @@ Note: File names must be relative to base directories! <source>Overview</source> <target>概è¦</target> +<source>Configuration</source> +<target>構æˆè¨å®š</target> + <source>Filter files</source> <target>ファイルフィルター</target> <source>Select view</source> <target>表示é¸æŠž</target> +<source>Open...</source> +<target>é–‹ã...</target> + +<source>Save</source> +<target>ä¿å˜</target> + +<source>Compare both sides</source> +<target>両方を比較</target> + <source>Set direction:</source> <target>æ–¹å‘ã®è¨å®š:</target> @@ -861,102 +876,63 @@ Note: File names must be relative to base directories! <source>FreeFileSync batch</source> <target>FreeFileSync 一括</target> -<source>Never save changes</source> -<target>変更をä¿å˜ã—ãªã„</target> - <source>Do you want to save changes to %x?</source> <target>本当㫠%x ã®å¤‰æ›´ã‚’ä¿å˜ã—ã¾ã™ã‹?</target> <source>Do&n't save</source> <target>ä¿å˜ã—ãªã„(&N)</target> +<source>Never save changes</source> +<target>変更をä¿å˜ã—ãªã„</target> + <source>Configuration loaded!</source> <target>構æˆè¨å®šã‚’èªã¿è¾¼ã¿ä¸!</target> -<source>Hide files that exist on left side only</source> -<target>å·¦å´ã®ã¿ã«å˜åœ¨ã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«ã‚’éžè¡¨ç¤º</target> - <source>Show files that exist on left side only</source> <target>å·¦å´ã®ã¿ã«å˜åœ¨ã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«ã‚’表示</target> -<source>Hide files that exist on right side only</source> -<target>å³å´ã®ã¿ã«å˜åœ¨ã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«ã‚’éžè¡¨ç¤º</target> - <source>Show files that exist on right side only</source> <target>å³å´ã®ã¿ã«å˜åœ¨ã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«ã‚’表示</target> -<source>Hide files that are newer on left</source> -<target>å·¦å´ã®æ–°ã—ã„ファイルをéžè¡¨ç¤º</target> - <source>Show files that are newer on left</source> <target>å·¦å´ã®æ–°ã—ã„ファイルを表示</target> -<source>Hide files that are newer on right</source> -<target>å³å´ã®æ–°ã—ã„ファイルをéžè¡¨ç¤º</target> - <source>Show files that are newer on right</source> <target>å³å´ã®æ–°ã—ã„ファイルを表示</target> -<source>Hide files that are equal</source> -<target>åŒæ§˜ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’éžè¡¨ç¤º</target> - <source>Show files that are equal</source> <target>åŒã˜å†…容ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’表示</target> -<source>Hide files that are different</source> -<target>ç•°ãªã‚‹ãƒ•ã‚¡ã‚¤ãƒ«ã‚’éžè¡¨ç¤º</target> - <source>Show files that are different</source> <target>差異ã®ã‚るファイルを表示</target> -<source>Hide conflicts</source> -<target>ä¸ä¸€è‡´ã‚’éš ã™</target> - <source>Show conflicts</source> <target>ä¸ä¸€è‡´ã‚’表示</target> -<source>Hide files that will be created on the left side</source> -<target>å·¦å´ã§ä½œæˆã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«ã‚’éžè¡¨ç¤ºã«ã™ã‚‹</target> - <source>Show files that will be created on the left side</source> <target>å·¦å´ã§ä½œæˆã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«ã‚’表示</target> -<source>Hide files that will be created on the right side</source> -<target>å³å´ã§ä½œæˆã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«ã‚’éžè¡¨ç¤ºã«ã™ã‚‹</target> - <source>Show files that will be created on the right side</source> <target>å³å´ã§ä½œæˆã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«ã‚’表示</target> -<source>Hide files that will be deleted on the left side</source> -<target>å·¦å´ã§å‰Šé™¤ã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«ã‚’éžè¡¨ç¤ºã«ã™ã‚‹</target> - <source>Show files that will be deleted on the left side</source> <target>å·¦å´ã§å‰Šé™¤ã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«ã‚’表示</target> -<source>Hide files that will be deleted on the right side</source> -<target>å³å´ã§å‰Šé™¤ã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«ã‚’éžè¡¨ç¤ºã«ã™ã‚‹</target> - <source>Show files that will be deleted on the right side</source> <target>å³å´ã§å‰Šé™¤ã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«ã‚’表示</target> -<source>Hide files that will be overwritten on left side</source> -<target>å·¦å´ã§ä¸Šæ›¸ãã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«ã‚’éžè¡¨ç¤ºã«ã™ã‚‹</target> - <source>Show files that will be overwritten on left side</source> <target>å·¦å´ã§ä¸Šæ›¸ãã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«ã‚’表示</target> -<source>Hide files that will be overwritten on right side</source> -<target>å³å´ã§ä¸Šæ›¸ãã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«ã‚’éžè¡¨ç¤ºã«ã™ã‚‹</target> - <source>Show files that will be overwritten on right side</source> <target>å³å´ã§ä¸Šæ›¸ãã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«ã‚’表示</target> -<source>Hide files that won't be copied</source> -<target>コピーã—ãªã‹ã£ãŸãƒ•ã‚¡ã‚¤ãƒ«ã‚’éš ã™</target> - <source>Show files that won't be copied</source> <target>コピーã•ã‚Œãªã‹ã£ãŸãƒ•ã‚¡ã‚¤ãƒ«ã‚’表示</target> +<source>Set as default</source> +<target>デフォルトã«ã‚»ãƒƒãƒˆ</target> + <source>All folders are in sync!</source> <target>ã™ã¹ã¦ã®ãƒ•ã‚©ãƒ«ãƒ€ã‚’åŒæœŸ!</target> @@ -969,13 +945,8 @@ Note: File names must be relative to base directories! <source>File list exported!</source> <target>ファイル一覧ã®ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆãŒå®Œäº†!</target> -<source> -<pluralform>Object deleted successfully!</pluralform> -<pluralform>%x objects deleted successfully!</pluralform> -</source> -<target> -<pluralform>%x ã®ã‚ªãƒ–ジェクトãŒå‰Šé™¤ã•ã‚Œã¾ã—ãŸ!</pluralform> -</target> +<source>Searching for program updates...</source> +<target>アップデートを検索ã—ã¦ã„ã¾ã™...</target> <source> <pluralform>1 directory</pluralform> @@ -1007,6 +978,9 @@ Note: File names must be relative to base directories! <source>&Ignore</source> <target>無視(&I)</target> +<source>Don't show this warning again</source> +<target>次回ã‹ã‚‰ã“ã®è¦å‘Šã¯è¡¨ç¤ºã—ãªã„</target> + <source>&Switch</source> <target>切り替ãˆ(&S)</target> @@ -1025,9 +999,6 @@ Note: File names must be relative to base directories! <source>Comparing content...</source> <target>内容を比較ä¸...</target> -<source>Copy</source> -<target>コピー</target> - <source>Paused</source> <target>一時åœæ¢ä¸</target> @@ -1089,7 +1060,7 @@ Note: File names must be relative to base directories! <target>考慮ã™ã‚‹</target> <source>Copy NTFS permissions</source> -<target>NTFS パーミッションをコピー</target> +<target>NTFS パーミッションをコピーã™ã‚‹</target> <source>Integrate external applications into context menu. The following macros are available:</source> <target>外部ã®ã‚¢ãƒ—リケーションをコンテã‚ストメニューã«çµ±åˆã€ä»¥ä¸‹ã®ãƒžã‚¯ãƒãŒåˆ©ç”¨ã§ãã¾ã™:</target> @@ -1110,33 +1081,36 @@ Note: File names must be relative to base directories! <target>éžè¡¨ç¤ºã«ã—ãŸè¦å‘Šãƒ€ã‚¤ã‚¢ãƒã‚°ã‚’å†ã³è¡¨ç¤ºã—ã¾ã™ã‹?</target> <source> -<pluralform>Do you really want to move the following object to the Recycle Bin?</pluralform> -<pluralform>Do you really want to move the following %x objects to the Recycle Bin?</pluralform> +<pluralform>Do you really want to move the following item to the Recycle Bin?</pluralform> +<pluralform>Do you really want to move the following %x items to the Recycle Bin?</pluralform> </source> <target> -<pluralform>本当㫠%x ã®ã‚ªãƒ–ジェクトをゴミ箱ã«ç§»å‹•ã—ã¾ã™ã‹?</pluralform> +<pluralform>本当ã«ä»¥ä¸‹ã® %x 個ã®é …目をゴミ箱ã«ç§»å‹•ã—ã¾ã™ã‹</pluralform> </target> <source> -<pluralform>Do you really want to delete the following object?</pluralform> -<pluralform>Do you really want to delete the following %x objects?</pluralform> +<pluralform>Do you really want to delete the following item?</pluralform> +<pluralform>Do you really want to delete the following %x items?</pluralform> </source> <target> -<pluralform>本当ã«ä»¥ä¸‹ %x ã®ã‚ªãƒ–ジェクトを削除ã—ã¾ã™ã‹?</pluralform> +<pluralform>本当ã«ä»¥ä¸‹ã® %x 個ã®é …目を削除ã—ã¾ã™ã‹</pluralform> </target> <source>Leave as unresolved conflict</source> <target>未解決ã®ç«¶åˆã¯ãã®ã¾ã¾æ®‹ã™</target> +<source>Time stamp</source> +<target>タイムスタンプ</target> + +<source>Append a timestamp to each file name</source> +<target>å„ファイルåã«ã‚¿ã‚¤ãƒ ã‚¹ã‚¿ãƒ³ãƒ—ã‚’è¿½åŠ </target> + <source>Replace</source> <target>ç½®æ›</target> <source>Move files and replace if existing</source> <target>ファイルを移動ã€å˜åœ¨ã™ã‚‹å ´åˆã¯ä¸Šæ›¸ã</target> -<source>Append a timestamp to each file name</source> -<target>å„ファイルåã«ã‚¿ã‚¤ãƒ ã‚¹ã‚¿ãƒ³ãƒ—ã‚’è¿½åŠ </target> - <source>Folder</source> <target>フォルダ</target> @@ -1248,6 +1222,12 @@ Note: File names must be relative to base directories! <source>Cannot set privilege %x.</source> <target>%x ã®ç‰¹æ¨©ã‚’セットã§ãã¾ã›ã‚“.</target> +<source>Failed to suspend system sleep mode.</source> +<target>システムスリープモードã®ä¸æ–ã«å¤±æ•—</target> + +<source>Cannot change process I/O priorities.</source> +<target>プãƒã‚»ã‚¹ã® I/O 優先度を変更ã§ãã¾ã›ã‚“</target> + <source>Unable to move %x to the Recycle Bin!</source> <target>%x をゴミ箱ã«ç§»å‹•ã§ãã¾ã›ã‚“!</target> @@ -1266,14 +1246,38 @@ Note: File names must be relative to base directories! <source>Setting default synchronization directions: Old files will be overwritten with newer files.</source> <target>åŒæœŸæ–¹å‘ã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆè¨å®š: å¤ã„ファイルã«æ–°ã—ã„ファイルを上書ã</target> +<source>Checking recycle bin availability for folder %x...</source> +<target>フォルダ %x をゴミ箱ã¨ã—ã¦ä½¿ç”¨ã§ãã‚‹ã‹ã‚’確èªä¸...</target> + +<source>Moving file %x to recycle bin</source> +<target>ファイル %x をゴミ箱ã«ç§»å‹•ä¸</target> + +<source>Moving folder %x to recycle bin</source> +<target>フォルダ %x をゴミ箱ã«ç§»å‹•ä¸</target> + +<source>Moving symbolic link %x to recycle bin</source> +<target>シンボリックリンク %x をゴミ箱ã«ç§»å‹•ä¸</target> + +<source>Deleting file %x</source> +<target>ファイル %x を削除ä¸</target> + +<source>Deleting folder %x</source> +<target>フォルダ %x を削除ä¸</target> + +<source>Deleting symbolic link %x</source> +<target>シンボリックリンク %x を削除ä¸</target> + <source>Recycle Bin is not available for the following paths! Files will be deleted permanently instead:</source> <target>以下ã®ãƒ‘スã«ã‚るゴミ箱ãŒåˆ©ç”¨ã§ãã¾ã›ã‚“! 代ã‚ã‚Šã«ãƒ•ã‚¡ã‚¤ãƒ«ã¯å®Œå…¨å‰Šé™¤ã•ã‚Œã¾ã™:</target> -<source>You can ignore this error to consider the folder as empty.</source> -<target>フォルダを空ã¨æƒ³å®šã™ã‚‹å ´åˆã¯ã€ã“ã®ã‚¨ãƒ©ãƒ¼ã¯ç„¡è¦–ã§ãã¾ã™.</target> +<source>The corresponding folder will be considered as empty.</source> +<target>対応ã™ã‚‹ãƒ•ã‚©ãƒ«ãƒ€ã¯ç©ºã§ã‚ã‚‹ã¨ã¿ãªã•ã‚Œã¾ã™</target> -<source>Cannot find folder %x.</source> -<target>フォルダ %x ãŒã¿ã¤ã‹ã‚Šã¾ã›ã‚“.</target> +<source>Cannot find the following folders:</source> +<target>以下ã®ãƒ•ã‚©ãƒ«ãƒ€ãŒã¿ã¤ã‹ã‚Šã¾ã›ã‚“:</target> + +<source>You can ignore this error to consider each folder as empty.</source> +<target>å„フォルダを空ã¨ã¿ãªã™å ´åˆã¯ã€ã“ã®ã‚¨ãƒ©ãƒ¼ã¯ç„¡è¦–ã§ãã¾ã™</target> <source>Directories are dependent! Be careful when setting up synchronization rules:</source> <target>ディレクトリãŒä¾å˜é–¢ä¿‚ã«ã‚ã‚Šã¾ã™! åŒæœŸè¦å‰‡ã®è¨å®šæ™‚ã«ã¯æ³¨æ„ã—ã¦ãã ã•ã„:</target> @@ -1281,8 +1285,8 @@ Note: File names must be relative to base directories! <source>Start comparison</source> <target>比較を開始</target> -<source>Preparing synchronization...</source> -<target>åŒæœŸå‡¦ç†ã®æº–å‚™ä¸...</target> +<source>Calculating sync directions...</source> +<target>åŒæœŸæ–¹å‘を計算ã—ã¦ã„ã¾ã™...</target> <source>Conflict detected:</source> <target>検出ã•ã‚ŒãŸç«¶åˆ:</target> @@ -1347,24 +1351,6 @@ Note: File names must be relative to base directories! <source>Multiple...</source> <target>複数処ç†...</target> -<source>Deleting file %x</source> -<target>ファイル %x を削除ä¸</target> - -<source>Deleting folder %x</source> -<target>フォルダ %x を削除ä¸</target> - -<source>Deleting symbolic link %x</source> -<target>シンボリックリンク %x を削除ä¸</target> - -<source>Moving file %x to recycle bin</source> -<target>ファイル %x をゴミ箱ã«ç§»å‹•ä¸</target> - -<source>Moving folder %x to recycle bin</source> -<target>フォルダ %x をゴミ箱ã«ç§»å‹•ä¸</target> - -<source>Moving symbolic link %x to recycle bin</source> -<target>シンボリックリンク %x をゴミ箱ã«ç§»å‹•ä¸</target> - <source>Moving file %x to %y</source> <target>ファイル %x ã‚’ %y ã«ç§»å‹•ä¸</target> @@ -1377,9 +1363,6 @@ Note: File names must be relative to base directories! <source>Removing old versions...</source> <target>æ—§ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’除去ä¸...</target> -<source>Creating file %x</source> -<target>ファイル %x を作æˆä¸</target> - <source>Creating symbolic link %x</source> <target>シンボリックリンク %x を作æˆä¸</target> @@ -1398,6 +1381,9 @@ Note: File names must be relative to base directories! <source>Updating attributes of %x</source> <target>%x ã®å±žæ€§ã‚’æ›´æ–°</target> +<source>Cannot find %x.</source> +<target>%x ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“</target> + <source>Target folder %x already existing.</source> <target>対象フォルダ %x ã¯æ—¢ã«å˜åœ¨ã—ã¾ã™.</target> @@ -1443,6 +1429,9 @@ Note: File names must be relative to base directories! <source>Generating database...</source> <target>データベースを作æˆä¸...</target> +<source>Creating Volume Shadow Copy for %x...</source> +<target>%x ã®ãƒœãƒªãƒ¥ãƒ¼ãƒ シャドウコピーを作æˆä¸...</target> + <source>Data verification error: Source and target file have different content!</source> <target>データ検証エラー: ソースã¨å¯¾è±¡ãƒ•ã‚¡ã‚¤ãƒ«ã«ç•°ãªã‚‹å†…容ãŒå«ã¾ã‚Œã¦ã„ã¾ã™!</target> diff --git a/BUILD/Languages/korean.lng b/BUILD/Languages/korean.lng index b4b28480..07cc454e 100644 --- a/BUILD/Languages/korean.lng +++ b/BUILD/Languages/korean.lng @@ -19,6 +19,9 @@ <source>Total time:</source> <target>ì „ì²´ 시간 :</target> +<source>Cannot set directory lock for %x.</source> +<target>%x ì— ëŒ€í•œ ë””ë ‰í† ë¦¬ ìž ê¸ˆì„ ì„¤ì •í• ìˆ˜ 없습니다.</target> + <source>Show in Explorer</source> <target>íƒìƒ‰ê¸°ì— 표시</target> @@ -40,6 +43,9 @@ <source>Error</source> <target>오류</target> +<source>Selected variant:</source> +<target>ì„ íƒí•œ ë² ì–´ë¦¬ì–¸íŠ¸</target> + <source>Select alternate comparison settings</source> <target>대체 ë¹„êµ ì„¤ì • ì„ íƒ</target> @@ -58,6 +64,12 @@ <source>Clear filter settings</source> <target>í•„í„° ì„¤ì • 지우기</target> +<source>Copy</source> +<target>복사</target> + +<source>Paste</source> +<target>붙여넣기</target> + <source>Save as batch job</source> <target>ì¼ê´„ 작업으로 ì €ìž¥</target> @@ -97,11 +109,8 @@ <source>Fatal Error</source> <target>치명ì 오류</target> -<source>Windows Error Code %x:</source> -<target>윈ë„ìš° ì—러 코드 %x:</target> - -<source>Linux Error Code %x:</source> -<target>리눅스 ì—러 코드 %x:</target> +<source>Error Code %x:</source> +<target>오류 코드 %x</target> <source>Cannot resolve symbolic link %x.</source> <target>ì‹¬ë³¼ë¦ ë§í¬ %x ì„(를) í•´ê²°í• ìˆ˜ 없습니다.</target> @@ -159,8 +168,8 @@ <source>Waiting while directory is locked (%x)...</source> <target>ë””ë ‰í† ë¦¬ ìž ê¸ˆ 대기 중 (%x)...</target> -<source>Cannot set directory lock %x.</source> -<target>ë””ë ‰í† ë¦¬ ìž ê¸ˆ %x ì„(를) ì„¤ì •í• ìˆ˜ 없습니다.</target> +<source>Creating file %x</source> +<target>íŒŒì¼ %x ìƒì„± 중</target> <source> <pluralform>1 sec</pluralform> @@ -190,9 +199,6 @@ <source>/sec</source> <target>/ì´ˆ</target> -<source>Cannot find file %x.</source> -<target>íŒŒì¼ %x ì„(를) ì°¾ì„ ìˆ˜ 없습니다.</target> - <source>File %x does not contain a valid configuration.</source> <target>íŒŒì¼ %x ì˜ êµ¬ì„±ì´ ìœ íš¨í•˜ì§€ 않습니다.</target> @@ -217,6 +223,9 @@ <source>Cannot read the following XML elements:</source> <target>ë‹¤ìŒ XML 요소를 ì½ì„ 수 없습니다 :</target> +<source>Cannot find file %x.</source> +<target>íŒŒì¼ %x ì„(를) ì°¾ì„ ìˆ˜ 없습니다.</target> + <source>&Open...</source> <target>열기(&O)</target> @@ -331,7 +340,7 @@ The command is triggered if: <target>ë™ê¸°í™” í• í•ëª©ì´ 없습니다!</target> <source>Synchronization completed successfully.</source> -<target>ë™ê¸°í™” 완료 성공!</target> +<target>ë™ê¸°í™”ê°€ 성공ì 으로 완료 ë습니다.</target> <source>Saving log file %x...</source> <target>로그 íŒŒì¼ %x ì €ìž¥ 중...</target> @@ -450,24 +459,21 @@ The command is triggered if: <source>&Advanced</source> <target>ê³ ê¸‰ê¸°ëŠ¥(&A)</target> -<source>&Check for new version</source> -<target>ë²„ì „ ì—…ë°ì´íŠ¸ 확ì¸(&C)</target> +<source>&Check now</source> +<target>지금 확ì¸(&C)</target> -<source>Compare</source> -<target>비 êµ</target> +<source>Check &automatically once a week</source> +<target>ìžë™ìœ¼ë¡œ 주당 1회 확ì¸(&a)</target> -<source>Compare both sides</source> -<target>양측 비êµ</target> +<source>Check for new version</source> +<target>ì‹ ê·œ ë²„ì „ 확ì¸</target> -<source>&Abort</source> -<target>ìž‘ì—… 중지(&A)</target> +<source>Compare</source> +<target>비 êµ</target> <source>Synchronize</source> <target>ë™ ê¸° í™”</target> -<source>Start synchronization</source> -<target>ë™ê¸°í™” 시작</target> - <source>Add folder pair</source> <target>í´ë” 페어(ì§) 추가</target> @@ -477,15 +483,6 @@ The command is triggered if: <source>Swap sides</source> <target>양측 위치 바꾸기</target> -<source>Open</source> -<target>열기</target> - -<source>Save</source> -<target>ì €ìž¥</target> - -<source>Last used configurations (press DEL to remove from list)</source> -<target>마지막으로 사용한 ì„¤ì • (DEL 키를 누르면 리스트ì—ì„œ ì‚ì œ)</target> - <source>Hide excluded items</source> <target>ì œì™¸ í•ëª© 숨기기</target> @@ -516,6 +513,18 @@ The command is triggered if: <source>Time elapsed:</source> <target>경과 시간 :</target> +<source>Synchronizing...</source> +<target>ë™ê¸°í™” ìž‘ì—… 중...</target> + +<source>On completion</source> +<target>완료 ì‹œ</target> + +<source>Close</source> +<target>닫기</target> + +<source>&Pause</source> +<target>ì¼ì‹œì •ì§€(&P)</target> + <source>Batch job</source> <target>ì¼ê´„ ìž‘ì—…</target> @@ -546,9 +555,6 @@ The command is triggered if: <source>Abort synchronization on first error</source> <target>첫 번째 오류 ì‹œ ë™ê¸°í™” 중지</target> -<source>On completion</source> -<target>완료 ì‹œ</target> - <source>Show progress dialog</source> <target>í”„ë¡œê·¸ë ˆìŠ¤ 다ì´ì–¼ë¡œê·¸ (진행 표시 ì°½) 보기</target> @@ -565,7 +571,7 @@ The command is triggered if: <target>로그 파ì¼ì˜ 최대 개수 ì œí•œ</target> <source>Select variant</source> -<target>변형(ë² ì–´ë¦¬ì–¸íŠ¸) ì„ íƒ</target> +<target>ë² ì–´ë¦¬ì–¸íŠ¸ ì„ íƒ</target> <source> Files are found equal if @@ -606,8 +612,8 @@ is the same <source><- Two way -></source> <target><- ì–‘ë°©/ì–‘ë©´ (Two Way) -></target> -<source>Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically.</source> -<target>ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 활용하여 ì–‘ì¸¡ì˜ ë³€ê²½ì‚¬í•ì„ 확ì¸í•˜ê³ ë°˜ì˜í•©ë‹ˆë‹¤. íŒŒì¼ ì‚ì œ/ëª…ì¹ ë³€ê²½/충ëŒì€ ìžë™ìœ¼ë¡œ ê°ì§€ë©ë‹ˆë‹¤.</target> +<source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> +<target>양측 변경사í•ì„ 확ì¸í•˜ê³ ì „ë‹¬. ì‚ì œ, ì´ë™ ë° ì¶©ëŒì€ ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 통해 ìžë™ìœ¼ë¡œ ê°ì§€ë©ë‹ˆë‹¤.</target> <source>Mirror ->></source> <target>미러 ->></target> @@ -645,15 +651,12 @@ is the same <source>Versioning</source> <target>ë²„ì €ë‹</target> -<source>Move time-stamped files into specified folder</source> -<target>타임스탬핑(ìƒì„±ì‹œê°„ ë‚ ì¸)ëœ íŒŒì¼ì„ ì§€ì •ëœ í´ë”ë¡œ ì´ë™</target> +<source>Move files to user-defined folder</source> +<target>ì‚¬ìš©ìž ì •ì˜ í´ë”ë¡œ íŒŒì¼ ì´ë™</target> <source>Naming convention:</source> <target>ì´ë¦„ ì§€ì • :</target> -<source>Configuration</source> -<target>구성 ì„¤ì •</target> - <source>Item exists on left side only</source> <target>í•ëª©ì´ 좌측ì—만 존재합니다.</target> @@ -661,10 +664,10 @@ is the same <target>í•ëª©ì´ 우측ì—만 존재합니다.</target> <source>Left side is newer</source> -<target>ì¢Œì¸¡ì´ ë” ì‹ ê·œìž…ë‹ˆë‹¤.</target> +<target>ì¢Œì¸¡ì´ ìµœì‹ ìž…ë‹ˆë‹¤.</target> <source>Right side is newer</source> -<target>ìš°ì¸¡ì´ ë” ì‹ ê·œìž…ë‹ˆë‹¤.</target> +<target>ìš°ì¸¡ì´ ìµœì‹ ìž…ë‹ˆë‹¤.</target> <source>Items have different content</source> <target>í•ëª© ë‚´ìš©ì´ ì„œë¡œ 다릅니다.</target> @@ -672,12 +675,6 @@ is the same <source>Conflict/item cannot be categorized</source> <target>ì¶©ëŒ / í•ëª©ì„ ë¶„ë¥˜í• ìˆ˜ ì—†ìŒ</target> -<source>Synchronizing...</source> -<target>ë™ê¸°í™” ìž‘ì—… 중...</target> - -<source>&Pause</source> -<target>ì¼ì‹œì •ì§€(&P)</target> - <source>Source code written in C++ using:</source> <target>소스코드는 C++ 언어로 아래 íˆ´ì„ ì‚¬ìš©í•˜ì—¬ 작성ë˜ì—ˆìŠµë‹ˆë‹¤ :</target> @@ -738,8 +735,8 @@ Note: File names must be relative to base directories! <source>Maximum</source> <target>최대</target> -<source>&Default</source> -<target>기본 ì„¤ì •/ê°’(&D)</target> +<source>&Clear</source> +<target>지우기(&C)</target> <source>Fail-safe file copy</source> <target>실패 - ì•ˆì „ íŒŒì¼ ë³µì‚¬</target> @@ -768,8 +765,14 @@ Note: File names must be relative to base directories! <source>Description</source> <target>설명</target> +<source>&Default</source> +<target>기본 ì„¤ì •/ê°’(&D)</target> + +<source>Start synchronization</source> +<target>ë™ê¸°í™” 시작</target> + <source>Variant</source> -<target>변형(ë² ì–´ë¦¬ì–¸íŠ¸)</target> +<target>ë² ì–´ë¦¬ì–¸íŠ¸</target> <source>Statistics</source> <target>통계</target> @@ -798,12 +801,24 @@ Note: File names must be relative to base directories! <source>Overview</source> <target>개요</target> +<source>Configuration</source> +<target>구성 ì„¤ì •</target> + <source>Filter files</source> <target>íŒŒì¼ í•„í„°</target> <source>Select view</source> <target>보기 ì„ íƒ</target> +<source>Open...</source> +<target>열기</target> + +<source>Save</source> +<target>ì €ìž¥</target> + +<source>Compare both sides</source> +<target>양측 비êµ</target> + <source>Set direction:</source> <target>ë°©í–¥ ì„¤ì • :</target> @@ -861,102 +876,63 @@ Note: File names must be relative to base directories! <source>FreeFileSync batch</source> <target>FreeFileSync ì¼ê´„처리(배치)</target> -<source>Never save changes</source> -<target>ë³€ê²½ì‚¬í• ì ˆëŒ€ ì €ìž¥ 안 함.</target> - <source>Do you want to save changes to %x?</source> <target>%xì˜ ë³€ê²½ì‚¬í•ì„ ì €ìž¥í•˜ì‹œê² ìŠµë‹ˆê¹Œ?</target> <source>Do&n't save</source> <target>ì €ìž¥í•˜ê¸° 않기(&n)</target> +<source>Never save changes</source> +<target>ë³€ê²½ì‚¬í• ì ˆëŒ€ ì €ìž¥ 안 함.</target> + <source>Configuration loaded!</source> <target>ì„¤ì • 로드 완료!</target> -<source>Hide files that exist on left side only</source> -<target>좌측ì—만 존재하는 íŒŒì¼ ìˆ¨ê¸°ê¸°</target> - <source>Show files that exist on left side only</source> <target>좌측ì—만 존재하는 íŒŒì¼ í‘œì‹œ</target> -<source>Hide files that exist on right side only</source> -<target>우측ì—만 존재하는 íŒŒì¼ ìˆ¨ê¸°ê¸°</target> - <source>Show files that exist on right side only</source> <target>우측ì—만 존재하는 íŒŒì¼ í‘œì‹œ</target> -<source>Hide files that are newer on left</source> -<target>ì¢Œì¸¡ì´ ë” ì‹ ê·œì¸ íŒŒì¼ ìˆ¨ê¸°ê¸°</target> - <source>Show files that are newer on left</source> -<target>ì¢Œì¸¡ì´ ë” ì‹ ê·œì¸ íŒŒì¼ í‘œì‹œ</target> - -<source>Hide files that are newer on right</source> -<target>ìš°ì¸¡ì´ ë” ì‹ ê·œì¸ íŒŒì¼ ìˆ¨ê¸°ê¸°</target> +<target>ì¢Œì¸¡ì´ ë³´ë‹¤ ìµœì‹ ì¸ íŒŒì¼ í‘œì‹œ</target> <source>Show files that are newer on right</source> -<target>ìš°ì¸¡ì´ ë” ì‹ ê·œì¸ íŒŒì¼ í‘œì‹œ</target> - -<source>Hide files that are equal</source> -<target>ë‚´ìš©ì´ ê°™ì€ íŒŒì¼ ìˆ¨ê¸°ê¸°</target> +<target>ìš°ì¸¡ì´ ë³´ë‹¤ ìµœì‹ ì¸ íŒŒì¼ í‘œì‹œ</target> <source>Show files that are equal</source> <target>ë‚´ìš©ì´ ê°™ì€ íŒŒì¼ í‘œì‹œ</target> -<source>Hide files that are different</source> -<target>ë‚´ìš©ì´ ë‹¤ë¥¸ íŒŒì¼ ìˆ¨ê¸°ê¸°</target> - <source>Show files that are different</source> <target>ë‚´ìš©ì´ ë‹¤ë¥¸ íŒŒì¼ í‘œì‹œ</target> -<source>Hide conflicts</source> -<target>ì¶©ëŒ ë‚´ìš© 숨기기</target> - <source>Show conflicts</source> <target>ì¶©ëŒ í‘œì‹œ</target> -<source>Hide files that will be created on the left side</source> -<target>ì¢Œì¸¡ì— ìƒì„±ë íŒŒì¼ ìˆ¨ê¸°ê¸°</target> - <source>Show files that will be created on the left side</source> <target>ì¢Œì¸¡ì— ìƒì„±ë íŒŒì¼ í‘œì‹œ</target> -<source>Hide files that will be created on the right side</source> -<target>ìš°ì¸¡ì— ìƒì„±ë íŒŒì¼ ìˆ¨ê¸°ê¸°</target> - <source>Show files that will be created on the right side</source> <target>ìš°ì¸¡ì— ìƒì„±ë íŒŒì¼ í‘œì‹œ</target> -<source>Hide files that will be deleted on the left side</source> -<target>좌측ì—ì„œ ì‚ì œë íŒŒì¼ ìˆ¨ê¸°ê¸°</target> - <source>Show files that will be deleted on the left side</source> <target>좌측ì—ì„œ ì‚ì œë íŒŒì¼ í‘œì‹œ</target> -<source>Hide files that will be deleted on the right side</source> -<target>우측ì—ì„œ ì‚ì œë íŒŒì¼ ìˆ¨ê¸°ê¸°</target> - <source>Show files that will be deleted on the right side</source> <target>우측ì—ì„œ ì‚ì œë íŒŒì¼ í‘œì‹œ</target> -<source>Hide files that will be overwritten on left side</source> -<target>ì¢Œì¸¡ì— ë®ì–´ì“°ì—¬ì§ˆ íŒŒì¼ ìˆ¨ê¸°ê¸°</target> - <source>Show files that will be overwritten on left side</source> <target>ì¢Œì¸¡ì— ë®ì–´ì“°ì—¬ì§ˆ íŒŒì¼ í‘œì‹œ</target> -<source>Hide files that will be overwritten on right side</source> -<target>ìš°ì¸¡ì— ë®ì–´ì“°ì—¬ì§ˆ íŒŒì¼ ìˆ¨ê¸°ê¸°</target> - <source>Show files that will be overwritten on right side</source> <target>ìš°ì¸¡ì— ë®ì–´ì“°ì—¬ì§ˆ íŒŒì¼ í‘œì‹œ</target> -<source>Hide files that won't be copied</source> -<target>복사ë˜ì§€ ì•Šì„ íŒŒì¼ ìˆ¨ê¸°ê¸°</target> - <source>Show files that won't be copied</source> <target>복사ë˜ì§€ ì•Šì„ íŒŒì¼ í‘œì‹œ</target> +<source>Set as default</source> +<target>기본 값으로 ì„¤ì •</target> + <source>All folders are in sync!</source> <target>ëª¨ë“ í´ë”ê°€ ë™ê¸°í™” ë˜ì—ˆìŒ!</target> @@ -969,13 +945,8 @@ Note: File names must be relative to base directories! <source>File list exported!</source> <target>íŒŒì¼ ë¦¬ìŠ¤íŠ¸ 내보내기 완료!</target> -<source> -<pluralform>Object deleted successfully!</pluralform> -<pluralform>%x objects deleted successfully!</pluralform> -</source> -<target> -<pluralform>%xê°œ 대ìƒì´ 성공ì 으로 ì‚ì œ ë습니다!</pluralform> -</target> +<source>Searching for program updates...</source> +<target>프로그램 ì—…ë°ì´íŠ¸ 검색 중...</target> <source> <pluralform>1 directory</pluralform> @@ -1007,6 +978,9 @@ Note: File names must be relative to base directories! <source>&Ignore</source> <target>무시(&I)</target> +<source>Don't show this warning again</source> +<target>ì´ ê²½ê³ ë¥¼ 다시 표시하지 ì•ŠìŒ</target> + <source>&Switch</source> <target>스위치[ì „í™˜](&S)</target> @@ -1025,9 +999,6 @@ Note: File names must be relative to base directories! <source>Comparing content...</source> <target>ë‚´ìš© ë¹„êµ ì¤‘...</target> -<source>Copy</source> -<target>복사</target> - <source>Paused</source> <target>ì¼ì‹œì •ì§€ 중</target> @@ -1110,23 +1081,29 @@ Note: File names must be relative to base directories! <target>숨겨진 ê²½ê³ ì°½ ë˜ëŠ” 대화 ì°½ì„ ë‹¤ì‹œ ë³´ì´ê²Œ í•˜ì‹œê² ìŠµë‹ˆê¹Œ?</target> <source> -<pluralform>Do you really want to move the following object to the Recycle Bin?</pluralform> -<pluralform>Do you really want to move the following %x objects to the Recycle Bin?</pluralform> +<pluralform>Do you really want to move the following item to the Recycle Bin?</pluralform> +<pluralform>Do you really want to move the following %x items to the Recycle Bin?</pluralform> </source> <target> -<pluralform>ë‹¤ìŒ %xê°œ 대ìƒì„ ì •ë§ë¡œ 휴지통으로 ì´ë™í•˜ì‹œê¸¸ ì›í•˜ì‹ë‹ˆê¹Œ?</pluralform> +<pluralform>ì •ë§ë¡œ ë‹¤ìŒ %x í•ëª©(들)ì„ íœ´ì§€í†µìœ¼ë¡œ ì´ë™í•˜ì‹œê² 습니까?</pluralform> </target> <source> -<pluralform>Do you really want to delete the following object?</pluralform> -<pluralform>Do you really want to delete the following %x objects?</pluralform> +<pluralform>Do you really want to delete the following item?</pluralform> +<pluralform>Do you really want to delete the following %x items?</pluralform> </source> <target> -<pluralform>ë‹¤ìŒ %xê°œ 대ìƒì„ ì •ë§ë¡œ ì‚ì œí•˜ì‹œê¸¸ ì›í•˜ì‹ë‹ˆê¹Œ?</pluralform> +<pluralform>ì •ë§ë¡œ ë‹¤ìŒ %x í•ëª©(들)ì„ ì‚ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ?</pluralform> </target> <source>Leave as unresolved conflict</source> -<target>í•´ê²°ë˜ì§€ ì•Šì€ ì¶©ëŒë¡œ 놔ë‘기</target> +<target>미해결 충ëŒë¡œ 놔ë‘기</target> + +<source>Time stamp</source> +<target>타임 스탬프</target> + +<source>Append a timestamp to each file name</source> +<target>ê° íŒŒì¼ ì´ë¦„마다 타임스탬프 추가</target> <source>Replace</source> <target>대체</target> @@ -1134,9 +1111,6 @@ Note: File names must be relative to base directories! <source>Move files and replace if existing</source> <target>íŒŒì¼ ì´ë™ ë° ê¸°ì¡´ íŒŒì¼ ì¡´ìž¬ ì‹œì—는 대체</target> -<source>Append a timestamp to each file name</source> -<target>ê° íŒŒì¼ ì´ë¦„마다 타임스탬프 추가</target> - <source>Folder</source> <target>í´ë”</target> @@ -1248,6 +1222,12 @@ Note: File names must be relative to base directories! <source>Cannot set privilege %x.</source> <target>권한 %x ì„(를) ì„¤ì •í• ìˆ˜ 없습니다.</target> +<source>Failed to suspend system sleep mode.</source> +<target>시스템 ì ˆì „ëª¨ë“œ 중지 실패</target> + +<source>Cannot change process I/O priorities.</source> +<target>I/O ìš°ì„ ìˆœìœ„ 프로세스 변경 불가</target> + <source>Unable to move %x to the Recycle Bin!</source> <target>%x ì„(를) 휴지통으로 ì´ë™í• 수 없습니다!</target> @@ -1264,16 +1244,40 @@ Note: File names must be relative to base directories! <target>해당 ë°ì´í„°ë² ì´ìŠ¤ í•ëª©ì€ 현재 ì„¤ì • ìƒíƒœì—ì„œ ë™ê¸°í™” ë˜ì§€ 않습니다.</target> <source>Setting default synchronization directions: Old files will be overwritten with newer files.</source> -<target>기본값 ë™ê¸°í™” ë°©í–¥ ì„¤ì • : ì´ì „ 파ì¼ë“¤ì€ ì‹ ê·œ 파ì¼ë“¤ë¡œ ë®ì–´ 쓰여집니다.</target> +<target>기본값 ë™ê¸°í™” ë°©í–¥ ì„¤ì • : ì´ì „ 파ì¼ë“¤ì€ 보다 ìµœì‹ íŒŒì¼ë“¤ë¡œ ë®ì–´ 쓰여집니다.</target> + +<source>Checking recycle bin availability for folder %x...</source> +<target>í´ë” %x ì„(를) 위한 휴지통 가용성 여부 í™•ì¸ ì¤‘...</target> + +<source>Moving file %x to recycle bin</source> +<target>íŒŒì¼ %xì„(를) 휴지통으로 ì´ë™ 중</target> + +<source>Moving folder %x to recycle bin</source> +<target>í´ë” %xì„(를) 휴지통으로 ì´ë™ 중</target> + +<source>Moving symbolic link %x to recycle bin</source> +<target>ì‹¬ë³¼ë¦ ë§í¬ %xì„(를) 휴지통으로 ì´ë™ 중</target> + +<source>Deleting file %x</source> +<target>íŒŒì¼ %x ì‚ì œ 중</target> + +<source>Deleting folder %x</source> +<target>í´ë” %x ì‚ì œ 중</target> + +<source>Deleting symbolic link %x</source> +<target>ì‹¬ë³¼ë¦ ë§í¬ %x ì‚ì œ 중</target> <source>Recycle Bin is not available for the following paths! Files will be deleted permanently instead:</source> <target>ë‹¤ìŒ ê²½ë¡œë¡œëŠ” íœ´ì§€í†µì„ ì‚¬ìš©í• ìˆ˜ 없습니다! ëŒ€ì‹ íŒŒì¼ì„ ì˜êµ¬ì 으로 ì‚ì œí•©ë‹ˆë‹¤ :</target> -<source>You can ignore this error to consider the folder as empty.</source> -<target>í´ë”를 빈 ìƒíƒœë¡œ ê°€ì •í• ê²½ìš°, ì´ ì˜¤ë¥˜ëŠ” 무시ë 수 있습니다.</target> +<source>The corresponding folder will be considered as empty.</source> +<target>해당 í´ë”를 비어 있는 ìƒíƒœë¡œ 간주합니다.</target> + +<source>Cannot find the following folders:</source> +<target>ë‹¤ìŒ í´ë”를 ì°¾ì„ ìˆ˜ 없습니다 :</target> -<source>Cannot find folder %x.</source> -<target>í´ë” %x ì„(를) ì°¾ì„ ìˆ˜ 없습니다.</target> +<source>You can ignore this error to consider each folder as empty.</source> +<target>ì´ ì˜¤ë¥˜ë¥¼ ë¬´ì‹œí•˜ê³ ê° í´ë”를 비어 있는 ìƒíƒœë¡œ ê°„ì£¼í•´ë„ ë¬´ë°©í•©ë‹ˆë‹¤.</target> <source>Directories are dependent! Be careful when setting up synchronization rules:</source> <target>ë””ë ‰í† ë¦¬ê°€ ì˜ì¡´ ê´€ê³„ì— ìžˆìŠµë‹ˆë‹¤. ë™ê¸°í™” 규칙 ì„¤ì •ì‹œ 주ì˜í•˜ì‹ì‹œì˜¤.</target> @@ -1281,8 +1285,8 @@ Note: File names must be relative to base directories! <source>Start comparison</source> <target>ë¹„êµ ì‹œìž‘</target> -<source>Preparing synchronization...</source> -<target>ë™ê¸°í™” 준비 중...</target> +<source>Calculating sync directions...</source> +<target>ë™ê¸°í™” ë°©í–¥ì„ ê³„ì‚° 중...</target> <source>Conflict detected:</source> <target>íƒì§€ëœ 충ëŒ/불ì¼ì¹˜ :</target> @@ -1347,24 +1351,6 @@ Note: File names must be relative to base directories! <source>Multiple...</source> <target>다중처리 (멀티플) ìž‘ì—…...</target> -<source>Deleting file %x</source> -<target>íŒŒì¼ %x ì‚ì œ 중</target> - -<source>Deleting folder %x</source> -<target>í´ë” %x ì‚ì œ 중</target> - -<source>Deleting symbolic link %x</source> -<target>ì‹¬ë³¼ë¦ ë§í¬ %x ì‚ì œ 중</target> - -<source>Moving file %x to recycle bin</source> -<target>íŒŒì¼ %xì„(를) 휴지통으로 ì´ë™ 중</target> - -<source>Moving folder %x to recycle bin</source> -<target>í´ë” %xì„(를) 휴지통으로 ì´ë™ 중</target> - -<source>Moving symbolic link %x to recycle bin</source> -<target>ì‹¬ë³¼ë¦ ë§í¬ %xì„(를) 휴지통으로 ì´ë™ 중</target> - <source>Moving file %x to %y</source> <target>íŒŒì¼ %xì„(를) %y(으)ë¡œ ì´ë™ 중</target> @@ -1377,9 +1363,6 @@ Note: File names must be relative to base directories! <source>Removing old versions...</source> <target>구 ë²„ì „ ì‚ì œ 중...</target> -<source>Creating file %x</source> -<target>íŒŒì¼ %x ìƒì„± 중</target> - <source>Creating symbolic link %x</source> <target>ì‹¬ë³¼ë¦ ë§í¬ %x ìƒì„± 중</target> @@ -1398,6 +1381,9 @@ Note: File names must be relative to base directories! <source>Updating attributes of %x</source> <target>%x ì†ì„± ì—…ë°ì´íŠ¸ 중</target> +<source>Cannot find %x.</source> +<target>%xì„(를) ì°¾ì„ ìˆ˜ 없습니다.</target> + <source>Target folder %x already existing.</source> <target>ëŒ€ìƒ í´ë” %xì´(ê°€) ì´ë¯¸ 존재함.</target> @@ -1443,6 +1429,9 @@ Note: File names must be relative to base directories! <source>Generating database...</source> <target>ë°ì´í„°ë² ì´ìŠ¤ ìƒì„± 중...</target> +<source>Creating Volume Shadow Copy for %x...</source> +<target>%xì„(를) 위한 Volume Shadow Copy ìƒì„± 중...</target> + <source>Data verification error: Source and target file have different content!</source> <target>ë°ì´í„° í™•ì¸ ì˜¤ë¥˜ : 소스 ë° íƒ€ê²Ÿ 파ì¼ì˜ ë‚´ìš©ì´ ë‹¤ë¦…ë‹ˆë‹¤!</target> diff --git a/BUILD/Languages/lithuanian.lng b/BUILD/Languages/lithuanian.lng index 4c0b74ec..c652bf6f 100644 --- a/BUILD/Languages/lithuanian.lng +++ b/BUILD/Languages/lithuanian.lng @@ -19,6 +19,9 @@ <source>Total time:</source> <target>Visas laikas:</target> +<source>Cannot set directory lock for %x.</source> +<target>Nepavyksta nustatyti katalogo užrakto %x.</target> + <source>Show in Explorer</source> <target>Rodyti narÅ¡yklÄ—je</target> @@ -40,6 +43,9 @@ <source>Error</source> <target>Klaida</target> +<source>Selected variant:</source> +<target>Pasirinktas variantas:</target> + <source>Select alternate comparison settings</source> <target>Pasirinkite alternatyvius sulyginimo nustatymus</target> @@ -58,6 +64,12 @@ <source>Clear filter settings</source> <target>IÅ¡valyti filtro nustatymus</target> +<source>Copy</source> +<target>Kopijuoti</target> + +<source>Paste</source> +<target>Ä®klijuoti</target> + <source>Save as batch job</source> <target>IÅ¡saugoti kaip paketinį darbÄ…</target> @@ -97,11 +109,8 @@ <source>Fatal Error</source> <target>KritinÄ— klaida</target> -<source>Windows Error Code %x:</source> -<target>Windows klaidos kodas %x:</target> - -<source>Linux Error Code %x:</source> -<target>Linux klaidos kodas %x:</target> +<source>Error Code %x:</source> +<target>Klaidos kodas %x:</target> <source>Cannot resolve symbolic link %x.</source> <target>Nepavyksta iÅ¡sprÄ™sti simbolinÄ—s nuorodos.</target> @@ -162,8 +171,8 @@ <source>Waiting while directory is locked (%x)...</source> <target>Laikiama kol katalogas bus užrakintas (%x)...</target> -<source>Cannot set directory lock %x.</source> -<target>Nepavyksta nustatyti katalogo užrakto %x.</target> +<source>Creating file %x</source> +<target>Kuriamas failas %x</target> <source> <pluralform>1 sec</pluralform> @@ -199,9 +208,6 @@ <source>/sec</source> <target>/sek.</target> -<source>Cannot find file %x.</source> -<target>Nepavyksta rasti failo %x.</target> - <source>File %x does not contain a valid configuration.</source> <target>Failas %x neturi tinkamų nustatymų.</target> @@ -226,6 +232,9 @@ <source>Cannot read the following XML elements:</source> <target>Nepavyksta perskaityti sekanÄių XML elementų:</target> +<source>Cannot find file %x.</source> +<target>Nepavyksta rasti failo %x.</target> + <source>&Open...</source> <target>&Atverti...</target> @@ -379,7 +388,7 @@ Komanda inicijuojama jei: <target><SimbolinÄ— nuoroda></target> <source><Folder></source> -<target><Aplankai></target> +<target><Aplankas></target> <source>Full path</source> <target>Pilnas kelias</target> @@ -459,24 +468,21 @@ Komanda inicijuojama jei: <source>&Advanced</source> <target>&IÅ¡samiau</target> -<source>&Check for new version</source> -<target>&Tikrinti dÄ—l atnaujinimų</target> +<source>&Check now</source> +<target>&Tikrinti dabar</target> -<source>Compare</source> -<target>Sulyginti</target> +<source>Check &automatically once a week</source> +<target>Tikrinti &automatiÅ¡kai kartÄ… per savaitÄ™</target> -<source>Compare both sides</source> -<target>Sulyginti abi puses</target> +<source>Check for new version</source> +<target>Tikrinti ar yra nauja versija</target> -<source>&Abort</source> -<target>&Nutraukti</target> +<source>Compare</source> +<target>Sulyginti</target> <source>Synchronize</source> <target>Sinchronizuoti</target> -<source>Start synchronization</source> -<target>PradÄ—ti sinchronizavimÄ…</target> - <source>Add folder pair</source> <target>PridÄ—ti aplankų porÄ…</target> @@ -486,15 +492,6 @@ Komanda inicijuojama jei: <source>Swap sides</source> <target>Sukeisti puses</target> -<source>Open</source> -<target>Atverti</target> - -<source>Save</source> -<target>IÅ¡saugoti</target> - -<source>Last used configurations (press DEL to remove from list)</source> -<target>Paskiausiai naudoti nustatymai (spauskite DEL, kad paÅ¡alinti iÅ¡ sÄ…raÅ¡o)</target> - <source>Hide excluded items</source> <target>SlÄ—pti iÅ¡skirtus elementus</target> @@ -525,6 +522,18 @@ Komanda inicijuojama jei: <source>Time elapsed:</source> <target>PraÄ—jÄ™s laikas:</target> +<source>Synchronizing...</source> +<target>Sinchronizuojama...</target> + +<source>On completion</source> +<target>Baigus</target> + +<source>Close</source> +<target>Uždaryti</target> + +<source>&Pause</source> +<target>&PauzÄ—</target> + <source>Batch job</source> <target>PaketinÄ— užduotis</target> @@ -555,9 +564,6 @@ Komanda inicijuojama jei: <source>Abort synchronization on first error</source> <target>Nutraukti sinchronizavimÄ… su pirma klaida</target> -<source>On completion</source> -<target>Baigus</target> - <source>Show progress dialog</source> <target>Rodyti eigos langÄ…</target> @@ -615,8 +621,8 @@ yra toks pats <source><- Two way -></source> <target><- Dvipusis -></target> -<source>Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically.</source> -<target>Nustatyti ir siÅ«lyti pokeitimus abiejose pusÄ—se naudojant duomenų bazÄ™. Trinimai, pervardinimas ir konfliktai yra nustatomi automatiÅ¡kai.</target> +<source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> +<target>Nustatyti ir skatinti pokyÄius apbiejose pusÄ—se. Trinimai, perkÄ—limai ir konfliktai yra aptinkami automatiÅ¡kai naudojant duomenų bazÄ™.</target> <source>Mirror ->></source> <target>Veidrodis ->></target> @@ -654,15 +660,12 @@ yra toks pats <source>Versioning</source> <target>Versijavimas</target> -<source>Move time-stamped files into specified folder</source> -<target>Perkelti su laiko žyme failus į nurodytÄ… aplankÄ…</target> +<source>Move files to user-defined folder</source> +<target>Perkelti failus į naudotojo nurodytÄ… aplankÄ…</target> <source>Naming convention:</source> <target>Pavadinimų taisyklÄ—s:</target> -<source>Configuration</source> -<target>Nustatymai</target> - <source>Item exists on left side only</source> <target>Elementas egzistuoja tik kairÄ—je pusÄ—je</target> @@ -681,12 +684,6 @@ yra toks pats <source>Conflict/item cannot be categorized</source> <target>Konfliktas/elementas negali bÅ«ti kategorizuojamas</target> -<source>Synchronizing...</source> -<target>Sinchronizuojama...</target> - -<source>&Pause</source> -<target>&PauzÄ—</target> - <source>Source code written in C++ using:</source> <target>Å altinio kodas paraÅ¡ytas su C++ naudojant:</target> @@ -747,8 +744,8 @@ Pastaba: Failų pavadinimai privalo atitikti bazinius katalogus! <source>Maximum</source> <target>Daugiausiai</target> -<source>&Default</source> -<target>&Numatyta</target> +<source>&Clear</source> +<target>&IÅ¡valyti</target> <source>Fail-safe file copy</source> <target>ApsauginÄ— failo kopija</target> @@ -777,6 +774,12 @@ Pastaba: Failų pavadinimai privalo atitikti bazinius katalogus! <source>Description</source> <target>ApibÅ«dinimas</target> +<source>&Default</source> +<target>&Numatyta</target> + +<source>Start synchronization</source> +<target>PradÄ—ti sinchronizavimÄ…</target> + <source>Variant</source> <target>Variantas</target> @@ -807,12 +810,24 @@ Pastaba: Failų pavadinimai privalo atitikti bazinius katalogus! <source>Overview</source> <target>Apžvalga</target> +<source>Configuration</source> +<target>Nustatymai</target> + <source>Filter files</source> <target>Filtruoti failus</target> <source>Select view</source> <target>Pasirinkti rodomus</target> +<source>Open...</source> +<target>Atverti...</target> + +<source>Save</source> +<target>IÅ¡saugoti</target> + +<source>Compare both sides</source> +<target>Sulyginti abi puses</target> + <source>Set direction:</source> <target>Nustatyti kryptį:</target> @@ -870,102 +885,63 @@ Pastaba: Failų pavadinimai privalo atitikti bazinius katalogus! <source>FreeFileSync batch</source> <target>FreeFileSync paketinÄ— užduotis</target> -<source>Never save changes</source> -<target>Niekada nesaugoti pakeitimų</target> - <source>Do you want to save changes to %x?</source> <target>Ar norite iÅ¡saugoti %x pakeitimus?</target> <source>Do&n't save</source> <target>&Nesaugoti</target> +<source>Never save changes</source> +<target>Niekada nesaugoti pakeitimų</target> + <source>Configuration loaded!</source> <target>Nustatymai įkelti!</target> -<source>Hide files that exist on left side only</source> -<target>SlÄ—pti failus, kurie egzistuoja tik kairÄ—je pusÄ—je</target> - <source>Show files that exist on left side only</source> <target>Rodyti failus, kurie egzistuoja tik kairÄ—je pusÄ—je</target> -<source>Hide files that exist on right side only</source> -<target>SlÄ—pti failus, kurie egzistuoja tik deÅ¡inÄ—je pusÄ—je</target> - <source>Show files that exist on right side only</source> <target>Rodyti failus, kurie egzistuoja tik deÅ¡inÄ—je pusÄ—je</target> -<source>Hide files that are newer on left</source> -<target>SlÄ—pti failus, kurie yra naujesni kairÄ—je</target> - <source>Show files that are newer on left</source> <target>Rodyti failus, kurie yra naujesni kairÄ—je</target> -<source>Hide files that are newer on right</source> -<target>SlÄ—pti failus, kurie yra naujesni deÅ¡inÄ—je</target> - <source>Show files that are newer on right</source> <target>Rodyti failus, kurie yra naujesni deÅ¡inÄ—je</target> -<source>Hide files that are equal</source> -<target>SlÄ—pti failus, kurie yra lygÅ«s</target> - <source>Show files that are equal</source> <target>Rodyti failus, kurie yra lygÅ«s</target> -<source>Hide files that are different</source> -<target>SlÄ—pti failus, kurie yra skirtingi</target> - <source>Show files that are different</source> <target>Rodyti failus, kurie yra skirtingi</target> -<source>Hide conflicts</source> -<target>SlÄ—pti konfliktus</target> - <source>Show conflicts</source> <target>Rodyti konfliktus</target> -<source>Hide files that will be created on the left side</source> -<target>SlÄ—pti failus, kurie bus sukurti kairÄ—je pusÄ—je</target> - <source>Show files that will be created on the left side</source> <target>Rodyti failus, kurie bus sukurti kairÄ—je pusÄ—je</target> -<source>Hide files that will be created on the right side</source> -<target>SlÄ—pti failus, kurie bus sukurti deÅ¡inÄ—je pusÄ—je</target> - <source>Show files that will be created on the right side</source> <target>Rodyti failus, kurie bus sukurti deÅ¡inÄ—je pusÄ—je</target> -<source>Hide files that will be deleted on the left side</source> -<target>SlÄ—pti failus, kurie bus iÅ¡trinti kairÄ—je pusÄ—je</target> - <source>Show files that will be deleted on the left side</source> <target>Rodyti failus, kurie bus iÅ¡trinti kairÄ—je pusÄ—je</target> -<source>Hide files that will be deleted on the right side</source> -<target>SlÄ—pti failus, kurie bus iÅ¡trinti deÅ¡inÄ—je pusÄ—je</target> - <source>Show files that will be deleted on the right side</source> <target>Rodyti failus, kurie bus iÅ¡trinti deÅ¡inÄ—je pusÄ—je</target> -<source>Hide files that will be overwritten on left side</source> -<target>SlÄ—pti failus, kurie bus perraÅ¡yti kairÄ—je pusÄ—je</target> - <source>Show files that will be overwritten on left side</source> <target>Rodyti failus, kurie bus perraÅ¡yti kairÄ—je pusÄ—je</target> -<source>Hide files that will be overwritten on right side</source> -<target>SlÄ—pti failus, kurie bus perraÅ¡yti deÅ¡inÄ—je pusÄ—je</target> - <source>Show files that will be overwritten on right side</source> <target>Rodyti failus, kurie bus perraÅ¡yti deÅ¡inÄ—je pusÄ—je</target> -<source>Hide files that won't be copied</source> -<target>SlÄ—pti failus, kurie ne bus kopijuojami</target> - <source>Show files that won't be copied</source> <target>Rodyti failus, kurie ne bus kopijuojami</target> +<source>Set as default</source> +<target>Nustatyti kaip numatytÄ…</target> + <source>All folders are in sync!</source> <target>Visi aplankai susinchronizuoti!</target> @@ -978,16 +954,8 @@ Pastaba: Failų pavadinimai privalo atitikti bazinius katalogus! <source>File list exported!</source> <target>Failų sÄ…raÅ¡as eksportuotas!</target> -<source> -<pluralform>Object deleted successfully!</pluralform> -<pluralform>%x objects deleted successfully!</pluralform> -</source> -<target> -<pluralform>Objektas sÄ—kmingai iÅ¡trintas!</pluralform> -<pluralform>%x objektai sÄ—kmingai iÅ¡trinti!</pluralform> -<pluralform>%x objektų sÄ—kmingai iÅ¡trinti!</pluralform> -<pluralform>%x objektas sÄ—kmingai iÅ¡trintas!</pluralform> -</target> +<source>Searching for program updates...</source> +<target>IeÅ¡koma programos atnaujinimų...</target> <source> <pluralform>1 directory</pluralform> @@ -1028,6 +996,9 @@ Pastaba: Failų pavadinimai privalo atitikti bazinius katalogus! <source>&Ignore</source> <target>&Ignoruoti</target> +<source>Don't show this warning again</source> +<target>Neberodyti daugiau Å¡io perspÄ—jimo</target> + <source>&Switch</source> <target>&Perjungti</target> @@ -1046,9 +1017,6 @@ Pastaba: Failų pavadinimai privalo atitikti bazinius katalogus! <source>Comparing content...</source> <target>Sulyginamas turinys...</target> -<source>Copy</source> -<target>Kopijuoti</target> - <source>Paused</source> <target>Pristabdyta</target> @@ -1131,39 +1099,42 @@ Pastaba: Failų pavadinimai privalo atitikti bazinius katalogus! <target>Ar vÄ—l rodyti paslÄ—ptus perspÄ—jimus ir langus?</target> <source> -<pluralform>Do you really want to move the following object to the Recycle Bin?</pluralform> -<pluralform>Do you really want to move the following %x objects to the Recycle Bin?</pluralform> +<pluralform>Do you really want to move the following item to the Recycle Bin?</pluralform> +<pluralform>Do you really want to move the following %x items to the Recycle Bin?</pluralform> </source> <target> -<pluralform>Ar tikrai norite perkelti sekantį objektÄ… į Å¡iukÅ¡liadėžę?</pluralform> -<pluralform>Ar tikrai norite perkelti sekanÄius %x objektus į Å¡iukÅ¡liadėžę?</pluralform> -<pluralform>Ar tikrai norite perkelti sekanÄius %x objektų į Å¡iukÅ¡liadėžę?</pluralform> -<pluralform>Ar tikrai norite perkelti sekanÄius %x objektÄ… į Å¡iukÅ¡liadėžę?</pluralform> +<pluralform>Ar tikrai norite perkelti šį elementÄ… į Å¡iukÅ¡liadėžę?</pluralform> +<pluralform>Ar tikrai norite perkelti Å¡iuos %x elementus į Å¡iukÅ¡liadėžę?</pluralform> +<pluralform>Ar tikrai norite perkelti Å¡iuos %x elementų į Å¡iukÅ¡liadėžę?</pluralform> +<pluralform>Ar tikrai norite perkelti šį %x elementÄ… į Å¡iukÅ¡liadėžę?</pluralform> </target> <source> -<pluralform>Do you really want to delete the following object?</pluralform> -<pluralform>Do you really want to delete the following %x objects?</pluralform> +<pluralform>Do you really want to delete the following item?</pluralform> +<pluralform>Do you really want to delete the following %x items?</pluralform> </source> <target> -<pluralform>Ar tikrai norite iÅ¡trinti sekantį objektÄ…?</pluralform> -<pluralform>Ar tikrai norite iÅ¡trinti sekantÄius %x objektus?</pluralform> -<pluralform>Ar tikrai norite iÅ¡trinti sekantÄius %x objektų?</pluralform> -<pluralform>Ar tikrai norite iÅ¡trinti sekantÄius %x objektÄ…?</pluralform> +<pluralform>Ar tikrai norite iÅ¡trinti šį elementÄ…?</pluralform> +<pluralform>Ar tikrai norite iÅ¡trinti Å¡iuos %x elementus?</pluralform> +<pluralform>Ar tikrai norite iÅ¡trinti Å¡iuos %x elementų?</pluralform> +<pluralform>Ar tikrai norite iÅ¡trinti šį %x elementÄ…?</pluralform> </target> <source>Leave as unresolved conflict</source> <target>Palikti kaip neiÅ¡prÄ™stÄ… konfliktÄ…</target> +<source>Time stamp</source> +<target>Laiko žymÄ—</target> + +<source>Append a timestamp to each file name</source> +<target>PridÄ—ti laiko žymÄ™ kiekvieno failo pavadinime</target> + <source>Replace</source> <target>Pakeisti</target> <source>Move files and replace if existing</source> <target>Perkelti failus ir pakeisti jei egzistuoja</target> -<source>Append a timestamp to each file name</source> -<target>PridÄ—ti laiko žymÄ™ kiekvieno failo pavadinime</target> - <source>Folder</source> <target>Aplankas</target> @@ -1284,6 +1255,12 @@ Pastaba: Failų pavadinimai privalo atitikti bazinius katalogus! <source>Cannot set privilege %x.</source> <target>Nepavyksta nustatyti privilegijos %x.</target> +<source>Failed to suspend system sleep mode.</source> +<target>Nepavyko sustabdyti sistemos į miegojimo veiksenÄ….</target> + +<source>Cannot change process I/O priorities.</source> +<target>Nepavyksta pakeisti proceso I/O prioritetų.</target> + <source>Unable to move %x to the Recycle Bin!</source> <target>Nepavyksta perkelti %x į Å¡iukÅ¡liadėžę!</target> @@ -1302,14 +1279,38 @@ Pastaba: Failų pavadinimai privalo atitikti bazinius katalogus! <source>Setting default synchronization directions: Old files will be overwritten with newer files.</source> <target>Nustatomos numatytos sinchronizavimo kryptys: Seni failai bus perraÅ¡yti naujesniais failais.</target> +<source>Checking recycle bin availability for folder %x...</source> +<target>Tikrinamas Å¡iukÅ¡liadėžės prieinamumas aplankui %x...</target> + +<source>Moving file %x to recycle bin</source> +<target>Perkeliamas failas %x į Å¡iukÅ¡liadėžę</target> + +<source>Moving folder %x to recycle bin</source> +<target>Perkeliamas aplankas %x į Å¡iukÅ¡liadėžę</target> + +<source>Moving symbolic link %x to recycle bin</source> +<target>Perkeliama simbolinÄ— nuoroda %x į Å¡iukÅ¡liadėžę</target> + +<source>Deleting file %x</source> +<target>Trinamas failas %x</target> + +<source>Deleting folder %x</source> +<target>Trinamas aplankas %x</target> + +<source>Deleting symbolic link %x</source> +<target>Tinama simbolinÄ— nuoroda %x</target> + <source>Recycle Bin is not available for the following paths! Files will be deleted permanently instead:</source> <target>Å iukÅ¡liadėžė nepasiekiama sekantiems keliams! Failai bus iÅ¡trinti visam laikui iÅ¡skyrus:</target> -<source>You can ignore this error to consider the folder as empty.</source> -<target>Galite ignoruoti Å¡iÄ… klaidÄ…, kad laikyti aplankÄ… tuÅ¡Äiu.</target> +<source>The corresponding folder will be considered as empty.</source> +<target>Atitinkamas aplankas bus laikomas tuÅ¡Äiu.</target> + +<source>Cannot find the following folders:</source> +<target>Nepavyksta rasti Å¡ių aplankų:</target> -<source>Cannot find folder %x.</source> -<target>Nepavyksta rasti aplanko %x.</target> +<source>You can ignore this error to consider each folder as empty.</source> +<target>Galite ignoruoti Å¡iÄ… klaidÄ…, kad kiekvienas aplankas bÅ«tų laikomas tuÅ¡Äiu.</target> <source>Directories are dependent! Be careful when setting up synchronization rules:</source> <target>Katalogai yra priklausomi! BÅ«kite atsargÅ«s nustatydami sinchronizavimo taisykles:</target> @@ -1317,8 +1318,8 @@ Pastaba: Failų pavadinimai privalo atitikti bazinius katalogus! <source>Start comparison</source> <target>PradÄ—ti palyginimÄ…</target> -<source>Preparing synchronization...</source> -<target>RuoÅ¡iamas sinchronizavimas...</target> +<source>Calculating sync directions...</source> +<target>ApskaiÄiuojamos sinchrinizacijos kryptys...</target> <source>Conflict detected:</source> <target>Aptiktas konfliktas:</target> @@ -1383,24 +1384,6 @@ Pastaba: Failų pavadinimai privalo atitikti bazinius katalogus! <source>Multiple...</source> <target>Keletas...</target> -<source>Deleting file %x</source> -<target>Trinamas failas %x</target> - -<source>Deleting folder %x</source> -<target>Trinamas aplankas %x</target> - -<source>Deleting symbolic link %x</source> -<target>Tinama simbolinÄ— nuoroda %x</target> - -<source>Moving file %x to recycle bin</source> -<target>Perkeliamas failas %x į Å¡iukÅ¡liadėžę</target> - -<source>Moving folder %x to recycle bin</source> -<target>Perkeliamas aplankas %x į Å¡iukÅ¡liadėžę</target> - -<source>Moving symbolic link %x to recycle bin</source> -<target>Perkeliama simbolinÄ— nuoroda %x į Å¡iukÅ¡liadėžę</target> - <source>Moving file %x to %y</source> <target>Perkeliamas failas %x į %y</target> @@ -1413,9 +1396,6 @@ Pastaba: Failų pavadinimai privalo atitikti bazinius katalogus! <source>Removing old versions...</source> <target>Å alinamos senos versijos...</target> -<source>Creating file %x</source> -<target>Kuriamas failas %x</target> - <source>Creating symbolic link %x</source> <target>Kuriama simbolinÄ— nuoroda %x</target> @@ -1434,6 +1414,9 @@ Pastaba: Failų pavadinimai privalo atitikti bazinius katalogus! <source>Updating attributes of %x</source> <target>Atnaujinami atributai %x</target> +<source>Cannot find %x.</source> +<target>Nepavyksta rasti %x.</target> + <source>Target folder %x already existing.</source> <target>Tikslo aplankas %x jau yra.</target> @@ -1479,6 +1462,9 @@ Pastaba: Failų pavadinimai privalo atitikti bazinius katalogus! <source>Generating database...</source> <target>Generuojama duomenų bazÄ—...</target> +<source>Creating Volume Shadow Copy for %x...</source> +<target>Kuriama vietos Å¡Ä—Å¡Ä—linÄ— kopija dÄ—l %x...</target> + <source>Data verification error: Source and target file have different content!</source> <target>Duomenų patikrinimo klaida: Å altinio ir tikslo failas turi skirtingus turinius!</target> diff --git a/BUILD/Languages/norwegian.lng b/BUILD/Languages/norwegian.lng index 2b581ad7..c85b7f9f 100644 --- a/BUILD/Languages/norwegian.lng +++ b/BUILD/Languages/norwegian.lng @@ -19,6 +19,9 @@ <source>Total time:</source> <target>Total tid:</target> +<source>Cannot set directory lock for %x.</source> +<target></target> + <source>Show in Explorer</source> <target>Vis i utforsker</target> @@ -61,6 +64,12 @@ <source>Clear filter settings</source> <target>Fjern filterinnstillinger</target> +<source>Copy</source> +<target>Kopier</target> + +<source>Paste</source> +<target></target> + <source>Save as batch job</source> <target>Lagre som sammensatt oppgave</target> @@ -160,9 +169,6 @@ <source>Waiting while directory is locked (%x)...</source> <target>Venter mens mappe er lÃ¥st (%x)...</target> -<source>Cannot set directory lock %x.</source> -<target>Kan ikke sette mappelÃ¥s %x.</target> - <source>Creating file %x</source> <target>Oppretter fil %x</target> @@ -196,9 +202,6 @@ <source>/sec</source> <target>/sekund</target> -<source>Cannot find file %x.</source> -<target>Kan ikke finne filen %x.</target> - <source>File %x does not contain a valid configuration.</source> <target>Filen %x inneholder en ugyldig innstilling.</target> @@ -223,6 +226,9 @@ <source>Cannot read the following XML elements:</source> <target>Kan ikke lese følgende XML-elementer:</target> +<source>Cannot find file %x.</source> +<target>Kan ikke finne filen %x.</target> + <source>&Open...</source> <target>&Ã…pne...</target> @@ -456,8 +462,14 @@ Kommandoen utløses hvis: <source>&Advanced</source> <target>&Avansert</target> -<source>&Check for new version</source> -<target>&Se etter ny versjon</target> +<source>&Check now</source> +<target></target> + +<source>Check &automatically once a week</source> +<target></target> + +<source>Check for new version</source> +<target></target> <source>Compare</source> <target>Sammenlign</target> @@ -603,8 +615,8 @@ er det samme <source><- Two way -></source> <target><- Toveis -></target> -<source>Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically.</source> -<target>Identifiser og spre endringer pÃ¥ begge sider ved Ã¥ bruke en database. Slettinger, navneendringer og konflikter blir automatisk oppdaget.</target> +<source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> +<target></target> <source>Mirror ->></source> <target>Speile ->></target> @@ -642,15 +654,12 @@ er det samme <source>Versioning</source> <target>VersjonshÃ¥ndtering</target> -<source>Move time-stamped files into specified folder</source> -<target>Flytt tidsstemplede filer den valgte mappen</target> +<source>Move files to user-defined folder</source> +<target></target> <source>Naming convention:</source> <target>Navnekonvensjon:</target> -<source>Configuration</source> -<target>Innstilling</target> - <source>Item exists on left side only</source> <target>Element eksisterer kun pÃ¥ venstre side</target> @@ -729,8 +738,8 @@ Merk: Filnavn mÃ¥ være relative til basismapper! <source>Maximum</source> <target>Maksimum</target> -<source>&Default</source> -<target>&Standard</target> +<source>&Clear</source> +<target></target> <source>Fail-safe file copy</source> <target>Trygg filkopi</target> @@ -759,6 +768,9 @@ Merk: Filnavn mÃ¥ være relative til basismapper! <source>Description</source> <target>Beskrivelse</target> +<source>&Default</source> +<target>&Standard</target> + <source>Start synchronization</source> <target>Start synkronisering</target> @@ -792,6 +804,9 @@ Merk: Filnavn mÃ¥ være relative til basismapper! <source>Overview</source> <target>Oversikt</target> +<source>Configuration</source> +<target>Innstilling</target> + <source>Filter files</source> <target>Filtrer filer</target> @@ -876,87 +891,45 @@ Merk: Filnavn mÃ¥ være relative til basismapper! <source>Configuration loaded!</source> <target>Innstilling lastet!</target> -<source>Hide files that exist on left side only</source> -<target>Skjul filer som bare finnes pÃ¥ venstre side</target> - <source>Show files that exist on left side only</source> <target>Vis filer som bare finnes pÃ¥ venstre side</target> -<source>Hide files that exist on right side only</source> -<target>Skjul filer som bare finnes pÃ¥ høyre side</target> - <source>Show files that exist on right side only</source> <target>Vis filer som bare finnes pÃ¥ høyre side</target> -<source>Hide files that are newer on left</source> -<target>Skjul filer som er nyere til venstre</target> - <source>Show files that are newer on left</source> <target>Vis filer som er nyere til venstre</target> -<source>Hide files that are newer on right</source> -<target>Skjul filer som er nyere til høyre</target> - <source>Show files that are newer on right</source> <target>Vis filer som er nyere til høyre</target> -<source>Hide files that are equal</source> -<target>Skjul filer som er like</target> - <source>Show files that are equal</source> <target>Vis filer som er like</target> -<source>Hide files that are different</source> -<target>Skjul filer som er forskjellige</target> - <source>Show files that are different</source> <target>Vis filer som er forskjellige</target> -<source>Hide conflicts</source> -<target>Skjul konflikter</target> - <source>Show conflicts</source> <target>Vis konflikter</target> -<source>Hide files that will be created on the left side</source> -<target>Skjul filer som blir opprettet pÃ¥ venstre side</target> - <source>Show files that will be created on the left side</source> <target>Vis filer som blir opprettet pÃ¥ venstre side</target> -<source>Hide files that will be created on the right side</source> -<target>Skjul filer som blir opprettet pÃ¥ høyre side</target> - <source>Show files that will be created on the right side</source> <target>Vis filer som blir opprettet pÃ¥ høyre side</target> -<source>Hide files that will be deleted on the left side</source> -<target>Skjul filer som blir slettet pÃ¥ venstre side</target> - <source>Show files that will be deleted on the left side</source> <target>Vis filer som blir slettet pÃ¥ venstre side</target> -<source>Hide files that will be deleted on the right side</source> -<target>Skjul filer som blir slettet pÃ¥ høyre side</target> - <source>Show files that will be deleted on the right side</source> <target>Vis filer som blir slettet pÃ¥ høyre side</target> -<source>Hide files that will be overwritten on left side</source> -<target>Skjul filer som blir overskrevet pÃ¥ venstre side</target> - <source>Show files that will be overwritten on left side</source> <target>Vis filer som blir overskrevet pÃ¥ venstre side</target> -<source>Hide files that will be overwritten on right side</source> -<target>Skjul filer som blir overskrevet pÃ¥ høyre side</target> - <source>Show files that will be overwritten on right side</source> <target>Vis filer som blir overskrevet pÃ¥ høyre side</target> -<source>Hide files that won't be copied</source> -<target>Skjul filer som ikke blir kopiert</target> - <source>Show files that won't be copied</source> <target>Vis filer som ikke blir kopiert</target> @@ -975,6 +948,9 @@ Merk: Filnavn mÃ¥ være relative til basismapper! <source>File list exported!</source> <target>Filliste eksportert!</target> +<source>Searching for program updates...</source> +<target></target> + <source> <pluralform>1 directory</pluralform> <pluralform>%x directories</pluralform> @@ -1008,6 +984,9 @@ Merk: Filnavn mÃ¥ være relative til basismapper! <source>&Ignore</source> <target>&Ignorer</target> +<source>Don't show this warning again</source> +<target></target> + <source>&Switch</source> <target>&Skift</target> @@ -1026,9 +1005,6 @@ Merk: Filnavn mÃ¥ være relative til basismapper! <source>Comparing content...</source> <target>Sammenligner innhold...</target> -<source>Copy</source> -<target>Kopier</target> - <source>Paused</source> <target>Pauset</target> @@ -1111,26 +1087,23 @@ Merk: Filnavn mÃ¥ være relative til basismapper! <target>Gjør skjylte advarsler og dialoger synlige igjen?</target> <source> -<pluralform>Do you really want to move the following object to the Recycle Bin?</pluralform> -<pluralform>Do you really want to move the following %x objects to the Recycle Bin?</pluralform> +<pluralform>Do you really want to move the following item to the Recycle Bin?</pluralform> +<pluralform>Do you really want to move the following %x items to the Recycle Bin?</pluralform> </source> -<target> -<pluralform>Vil du flytte det følgende objektet til papirkurven?</pluralform> -<pluralform>Vil du flytte de følgende %x objekter til papirkurven?</pluralform> -</target> +<target></target> <source> -<pluralform>Do you really want to delete the following object?</pluralform> -<pluralform>Do you really want to delete the following %x objects?</pluralform> +<pluralform>Do you really want to delete the following item?</pluralform> +<pluralform>Do you really want to delete the following %x items?</pluralform> </source> -<target> -<pluralform>Vil du slette det følgende objektet?</pluralform> -<pluralform>Vil du slette de følgende %x objekter?</pluralform> -</target> +<target></target> <source>Leave as unresolved conflict</source> <target>Etterlat som uløste konflikter</target> +<source>Time stamp</source> +<target></target> + <source>Append a timestamp to each file name</source> <target>Legg til et tidsstempel til hvert filnavn</target> @@ -1302,20 +1275,23 @@ Merk: Filnavn mÃ¥ være relative til basismapper! <source>Recycle Bin is not available for the following paths! Files will be deleted permanently instead:</source> <target>Papirkurv er ikke tilgjengelig for de følgende baner! Filer blir isteden slettet permanent:</target> -<source>You can ignore this error to consider each folder as empty.</source> -<target>Denne feilen kan ignoreres dersom mappen er tom.</target> +<source>The corresponding folder will be considered as empty.</source> +<target></target> <source>Cannot find the following folders:</source> <target>Kan ikke finne følgende mapper:</target> +<source>You can ignore this error to consider each folder as empty.</source> +<target>Denne feilen kan ignoreres dersom mappen er tom.</target> + <source>Directories are dependent! Be careful when setting up synchronization rules:</source> <target>Mapper er avhengige av hverandre! Vær forsiktig nÃ¥r du setter opp synkroniseringsregler:</target> <source>Start comparison</source> <target>Start sammenligning</target> -<source>Preparing synchronization...</source> -<target>Forbereder synkronisering...</target> +<source>Calculating sync directions...</source> +<target></target> <source>Conflict detected:</source> <target>Konflikt oppdaget:</target> @@ -1458,6 +1434,9 @@ Merk: Filnavn mÃ¥ være relative til basismapper! <source>Generating database...</source> <target>Oppretter database...</target> +<source>Creating Volume Shadow Copy for %x...</source> +<target></target> + <source>Data verification error: Source and target file have different content!</source> <target>Dataverifiseringsfeil: Kilde- og mÃ¥lfil har forskjellig innhold!</target> diff --git a/BUILD/Languages/polish.lng b/BUILD/Languages/polish.lng index 564db6dc..d39124b3 100644 --- a/BUILD/Languages/polish.lng +++ b/BUILD/Languages/polish.lng @@ -11,7 +11,7 @@ <target>Wyszukiwanie katalogu %x...</target> <source>Items processed:</source> -<target>Przetworzeone elementy:</target> +<target>Przetworzone elementy:</target> <source>Items remaining:</source> <target>PozostaÅ‚e elementy:</target> @@ -19,6 +19,9 @@ <source>Total time:</source> <target>CaÅ‚kowity czas:</target> +<source>Cannot set directory lock for %x.</source> +<target>Nie można utworzyć blokady dla katalogu %x.</target> + <source>Show in Explorer</source> <target>WyÅ›wietl w Eksploratorze</target> @@ -40,6 +43,9 @@ <source>Error</source> <target>BÅ‚Ä…d</target> +<source>Selected variant:</source> +<target>OkreÅ›l wariant:</target> + <source>Select alternate comparison settings</source> <target>OkreÅ›l alternatywne ustawienia porównywania</target> @@ -58,6 +64,12 @@ <source>Clear filter settings</source> <target>Wyczyść ustawienia filtra</target> +<source>Copy</source> +<target>Kopiuj</target> + +<source>Paste</source> +<target>Wklej</target> + <source>Save as batch job</source> <target>Zapisz w trybie wsadowym</target> @@ -97,11 +109,8 @@ <source>Fatal Error</source> <target>BÅ‚Ä…d krytyczny</target> -<source>Windows Error Code %x:</source> -<target>BÅ‚Ä…d systemu Windows %x:</target> - -<source>Linux Error Code %x:</source> -<target>BÅ‚Ä…d systemu Linux %x:</target> +<source>Error Code %x:</source> +<target>Kod bÅ‚Ä™du %x:</target> <source>Cannot resolve symbolic link %x.</source> <target>Nie można okreÅ›lić poÅ‚ożenia dowiÄ…zania symbolicznego %x.</target> @@ -126,7 +135,7 @@ </target> <source>Database file %x is incompatible.</source> -<target>Plika bazy danych %x nie jest kompatybilny.</target> +<target>Plik bazy danych %x nie jest kompatybilny.</target> <source>Initial synchronization:</source> <target>WstÄ™pna synchronizacja:</target> @@ -161,8 +170,8 @@ <source>Waiting while directory is locked (%x)...</source> <target>Blokada katalogu (%x), oczekiwanie...</target> -<source>Cannot set directory lock %x.</source> -<target>Nie można utworzyć blokady katalogu %x.</target> +<source>Creating file %x</source> +<target>Tworzenie pliku %x</target> <source> <pluralform>1 sec</pluralform> @@ -196,9 +205,6 @@ <source>/sec</source> <target>/sekundÄ™</target> -<source>Cannot find file %x.</source> -<target>Nie można znaleźć pliku %x.</target> - <source>File %x does not contain a valid configuration.</source> <target>Plik %x nie zawiera prawidÅ‚owej konfiguracji</target> @@ -223,6 +229,9 @@ <source>Cannot read the following XML elements:</source> <target>Nie można odczytać elementu XML:</target> +<source>Cannot find file %x.</source> +<target>Nie można znaleźć pliku %x.</target> + <source>&Open...</source> <target>&Otwórz...</target> @@ -456,24 +465,21 @@ Komenda jest wykonywana gdy: <source>&Advanced</source> <target>&Zaawansowane</target> -<source>&Check for new version</source> -<target>&Aktualizuj</target> +<source>&Check now</source> +<target>Spra&wdź teraz</target> -<source>Compare</source> -<target>Porównaj</target> +<source>Check &automatically once a week</source> +<target>Sprawdzaj &automatycznie raz w tygodniu</target> -<source>Compare both sides</source> -<target>Porównaj foldery</target> +<source>Check for new version</source> +<target>Sprawdź dostÄ™pność aktualizacji</target> -<source>&Abort</source> -<target>&Przerwij</target> +<source>Compare</source> +<target>Porównaj</target> <source>Synchronize</source> <target>Synchronizuj</target> -<source>Start synchronization</source> -<target>Rozpocznij synchronizacjÄ™</target> - <source>Add folder pair</source> <target>Dodaj katalogi do porównania</target> @@ -483,15 +489,6 @@ Komenda jest wykonywana gdy: <source>Swap sides</source> <target>ZamieÅ„ stronami</target> -<source>Open</source> -<target>Otwórz</target> - -<source>Save</source> -<target>Zapisz</target> - -<source>Last used configurations (press DEL to remove from list)</source> -<target>Ostatnio użyta konfiguracja (naciÅ›nij DEL żeby usunąć z listy)</target> - <source>Hide excluded items</source> <target>Ukryj wykluczone elementy</target> @@ -522,6 +519,18 @@ Komenda jest wykonywana gdy: <source>Time elapsed:</source> <target>Szacowany czas:</target> +<source>Synchronizing...</source> +<target>SynchronizujÄ™...</target> + +<source>On completion</source> +<target>Po zakoÅ„czeniu</target> + +<source>Close</source> +<target>Zamknij</target> + +<source>&Pause</source> +<target>&Pauza</target> + <source>Batch job</source> <target>Plik wsadowy</target> @@ -552,9 +561,6 @@ Komenda jest wykonywana gdy: <source>Abort synchronization on first error</source> <target>ZakoÅ„cz synchronizacjÄ™ przy pierwszym bÅ‚Ä™dzie</target> -<source>On completion</source> -<target>Po zakoÅ„czeniu</target> - <source>Show progress dialog</source> <target>Pokaż okno postÄ™pu</target> @@ -612,8 +618,8 @@ jest identyczna <source><- Two way -></source> <target><- Obustronna -></target> -<source>Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically.</source> -<target>Znajdź i zastosuj zmiany po obu stronach przy pomocy bazy danych. UsuniÄ™nia, zmiany nazwy plików oraz konflikty sÄ… usuwane automatycznie.</target> +<source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> +<target>Wyszukaj oraz zastosuj zmiany po obu stronach. Wszystkie operacje na plikach takie jak usuniÄ™cia, zmiany oraz konflikty wykrywane sÄ… automatycznie przy użyciu bazy danych.</target> <source>Mirror ->></source> <target>Lustrzana ->></target> @@ -651,15 +657,12 @@ jest identyczna <source>Versioning</source> <target>Wersjonowanie</target> -<source>Move time-stamped files into specified folder</source> -<target>Pliki wersji oznaczone datÄ… przenieÅ› do okreÅ›lonego katalogu</target> +<source>Move files to user-defined folder</source> +<target>PrzenieÅ› pliki do katalogu wskazanego przez użytkownika</target> <source>Naming convention:</source> <target>Konwencja nazewnictwa:</target> -<source>Configuration</source> -<target>Konfiguracja</target> - <source>Item exists on left side only</source> <target>Element istnieje tylko po lewej stronie</target> @@ -678,12 +681,6 @@ jest identyczna <source>Conflict/item cannot be categorized</source> <target>Konflikt/element nie może zostać skategoryzowany</target> -<source>Synchronizing...</source> -<target>SynchronizujÄ™...</target> - -<source>&Pause</source> -<target>&Pauza</target> - <source>Source code written in C++ using:</source> <target>Kod stworzony w C++ z wykorzystaniem:</target> @@ -744,8 +741,8 @@ Uwaga: Nazwy plików muszÄ… być podane jako relatywne wzglÄ™dem katalogu bazowe <source>Maximum</source> <target>Maksimum</target> -<source>&Default</source> -<target>&DomyÅ›lne</target> +<source>&Clear</source> +<target>W&yczyść</target> <source>Fail-safe file copy</source> <target>Bezpieczne kopiowanie</target> @@ -774,6 +771,12 @@ Uwaga: Nazwy plików muszÄ… być podane jako relatywne wzglÄ™dem katalogu bazowe <source>Description</source> <target>Opis</target> +<source>&Default</source> +<target>&DomyÅ›lne</target> + +<source>Start synchronization</source> +<target>Rozpocznij synchronizacjÄ™</target> + <source>Variant</source> <target>Wariant</target> @@ -804,12 +807,24 @@ Uwaga: Nazwy plików muszÄ… być podane jako relatywne wzglÄ™dem katalogu bazowe <source>Overview</source> <target>PrzeglÄ…d</target> +<source>Configuration</source> +<target>Konfiguracja</target> + <source>Filter files</source> <target>Filtruj pliki</target> <source>Select view</source> <target>OkreÅ›l widok</target> +<source>Open...</source> +<target>Otwórz...</target> + +<source>Save</source> +<target>Zapisz</target> + +<source>Compare both sides</source> +<target>Porównaj foldery</target> + <source>Set direction:</source> <target>Kierunek synchronizacji:</target> @@ -867,102 +882,63 @@ Uwaga: Nazwy plików muszÄ… być podane jako relatywne wzglÄ™dem katalogu bazowe <source>FreeFileSync batch</source> <target>Plik wsadowy FreeFileSync</target> -<source>Never save changes</source> -<target>Nigdy nie zapisuj zmian</target> - <source>Do you want to save changes to %x?</source> <target>Czy chcesz zapisać zmiany w %x?</target> <source>Do&n't save</source> <target>&Nie zapisuj</target> +<source>Never save changes</source> +<target>Nigdy nie zapisuj zmian</target> + <source>Configuration loaded!</source> <target>Konfiguracja wczytana!</target> -<source>Hide files that exist on left side only</source> -<target>Ukryj pliki, które istniejÄ… tylko po lewej stronie</target> - <source>Show files that exist on left side only</source> <target>Pokaż pliki istniejÄ…ce tylko po lewej stronie</target> -<source>Hide files that exist on right side only</source> -<target>Ukryj pliki, które istniejÄ… tylko po prawej stronie</target> - <source>Show files that exist on right side only</source> <target>Pokaż pliki istniejÄ…ce tylko po prawej stronie</target> -<source>Hide files that are newer on left</source> -<target>Ukryj pliki, które sÄ… nowsze po lewej stronie</target> - <source>Show files that are newer on left</source> <target>Pokaż pliki nowsze po lewej stronie</target> -<source>Hide files that are newer on right</source> -<target>Ukryj pliki, które sÄ… nowsze po prawej stronie</target> - <source>Show files that are newer on right</source> <target>Pokaż pliki nowsze po prawej stronie</target> -<source>Hide files that are equal</source> -<target>Ukryj pliki, które sÄ… równe</target> - <source>Show files that are equal</source> <target>Pokaż pliki, które sÄ… równe</target> -<source>Hide files that are different</source> -<target>Ukryj pliki, które sÄ… różne</target> - <source>Show files that are different</source> <target>Pokaż pliki, które siÄ™ różniÄ…</target> -<source>Hide conflicts</source> -<target>Ukryj konflikty</target> - <source>Show conflicts</source> <target>Pokaż konflikty</target> -<source>Hide files that will be created on the left side</source> -<target>Ukryj pliki, które bÄ™dÄ… utworzone po lewej stronie</target> - <source>Show files that will be created on the left side</source> <target>Pokaż pliki, które bÄ™dÄ… utworzone po lewej stronie</target> -<source>Hide files that will be created on the right side</source> -<target>Ukryj pliki, które bÄ™dÄ… utworzone po prawej stronie</target> - <source>Show files that will be created on the right side</source> <target>Pokaż pliki, które bÄ™dÄ… utworzone po prawej stronie</target> -<source>Hide files that will be deleted on the left side</source> -<target>Ukryj pliki, które bÄ™dÄ… usuniÄ™te po lewej stronie</target> - <source>Show files that will be deleted on the left side</source> <target>Pokaż pliki, które bÄ™dÄ… usuniÄ™te po lewej stronie</target> -<source>Hide files that will be deleted on the right side</source> -<target>Ukryj pliki, które bÄ™dÄ… usuniÄ™te po lewej stronie</target> - <source>Show files that will be deleted on the right side</source> <target>Pokaż pliki, które bÄ™dÄ… usuniÄ™te po prawej stronie</target> -<source>Hide files that will be overwritten on left side</source> -<target>Ukryj pliki, które zostanÄ… nadpisane po lewej stronie</target> - <source>Show files that will be overwritten on left side</source> <target>Pokaż pliki, które zostanÄ… nadpisane po lewej stronie</target> -<source>Hide files that will be overwritten on right side</source> -<target>Ukryj pliki, które zostanÄ… nadpisane po prawej stronie</target> - <source>Show files that will be overwritten on right side</source> <target>Pokaż pliki, które zostanÄ… nadpisane po prawej stronie</target> -<source>Hide files that won't be copied</source> -<target>Ukryj pliki, które nie bÄ™dÄ… kopiowane</target> - <source>Show files that won't be copied</source> <target>Pokaż pliki, które nie bÄ™dÄ… kopiowane</target> +<source>Set as default</source> +<target>Zapisz jako domyÅ›lne</target> + <source>All folders are in sync!</source> <target>Wszystkie katalogi sÄ… zsynchronizowane!</target> @@ -975,15 +951,8 @@ Uwaga: Nazwy plików muszÄ… być podane jako relatywne wzglÄ™dem katalogu bazowe <source>File list exported!</source> <target>Lista plików wyeksportowana!</target> -<source> -<pluralform>Object deleted successfully!</pluralform> -<pluralform>%x objects deleted successfully!</pluralform> -</source> -<target> -<pluralform>Obiekt pomyÅ›lnie usuniÄ™ty!</pluralform> -<pluralform>%x obiekty pomyÅ›lnie usuniÄ™te!</pluralform> -<pluralform>%x pomyÅ›lnie usuniÄ™tych!</pluralform> -</target> +<source>Searching for program updates...</source> +<target>Wyszukiwanie aktualizacji...</target> <source> <pluralform>1 directory</pluralform> @@ -1021,6 +990,9 @@ Uwaga: Nazwy plików muszÄ… być podane jako relatywne wzglÄ™dem katalogu bazowe <source>&Ignore</source> <target>&Ignoruj</target> +<source>Don't show this warning again</source> +<target>Nie pokazuj wiÄ™cej tego ostrzeżenia</target> + <source>&Switch</source> <target>&ZamieÅ„</target> @@ -1039,9 +1011,6 @@ Uwaga: Nazwy plików muszÄ… być podane jako relatywne wzglÄ™dem katalogu bazowe <source>Comparing content...</source> <target>Porównywanie zawartoÅ›ci...</target> -<source>Copy</source> -<target>Kopiuj</target> - <source>Paused</source> <target>Pauza</target> @@ -1106,7 +1075,7 @@ Uwaga: Nazwy plików muszÄ… być podane jako relatywne wzglÄ™dem katalogu bazowe <target>Kopiuj uprawnienia NTFS</target> <source>Integrate external applications into context menu. The following macros are available:</source> -<target>DoÅ‚Ä…cz zewnÄ™trznÄ… aplikacjÄ™ do menu kontekstowego. DostÄ™pne macra:</target> +<target>DoÅ‚Ä…cz zewnÄ™trznÄ… aplikacjÄ™ do menu kontekstowego. DostÄ™pne makra:</target> <source>- full file or folder name</source> <target>- peÅ‚na nazwa pliku lub katalogu</target> @@ -1124,37 +1093,40 @@ Uwaga: Nazwy plików muszÄ… być podane jako relatywne wzglÄ™dem katalogu bazowe <target>Przywrócić ukryte powiadomienia i dialogi?</target> <source> -<pluralform>Do you really want to move the following object to the Recycle Bin?</pluralform> -<pluralform>Do you really want to move the following %x objects to the Recycle Bin?</pluralform> +<pluralform>Do you really want to move the following item to the Recycle Bin?</pluralform> +<pluralform>Do you really want to move the following %x items to the Recycle Bin?</pluralform> </source> <target> -<pluralform>Czy na pewno chcesz przenieÅ› ten obiekt do kosza?</pluralform> -<pluralform>Czy na pewno chcesz przenieÅ› %x obiekty do kosza?</pluralform> -<pluralform>Czy na pewno chcesz przenieÅ› %x obiektów do kosza?</pluralform> +<pluralform>Czy na pewno chcesz przenieść do kosza nastÄ™pujÄ…cy element?</pluralform> +<pluralform>Czy na pewno chcesz przenieść do kosza %x nastÄ™pujÄ…ce elementy?</pluralform> +<pluralform>Czy na pewno chcesz przenieść do kosza %x nastÄ™pujÄ…cych elementów?</pluralform> </target> <source> -<pluralform>Do you really want to delete the following object?</pluralform> -<pluralform>Do you really want to delete the following %x objects?</pluralform> +<pluralform>Do you really want to delete the following item?</pluralform> +<pluralform>Do you really want to delete the following %x items?</pluralform> </source> <target> -<pluralform>Czy na pewno chcesz usunuÄ…c ten obiekt do kosza?</pluralform> -<pluralform>Czy na pewno chcesz usunÄ…c %x obiekty do kosza?</pluralform> -<pluralform>Czy na pewno chcesz usunąć %x obiektów do kosza?</pluralform> +<pluralform>Czy na pewno chcesz usunąć nastÄ™pujÄ…cy element?</pluralform> +<pluralform>Czy na pewno chcesz usunąć %x nastÄ™pujÄ…ce elementy?</pluralform> +<pluralform>Czy na pewno chcesz usunąć %x nastÄ™pujÄ…cych elementów?</pluralform> </target> <source>Leave as unresolved conflict</source> <target>Zostaw jako nierozwiÄ…zany konflikt</target> +<source>Time stamp</source> +<target>Znacznik czasu</target> + +<source>Append a timestamp to each file name</source> +<target>DoÅ‚Ä…cz znacznik czasu do nazwy każdego pliku</target> + <source>Replace</source> <target>ZamieÅ„</target> <source>Move files and replace if existing</source> <target>PrzenieÅ› pliki i nadpisz jeżeli już istniejÄ…</target> -<source>Append a timestamp to each file name</source> -<target>DoÅ‚Ä…cz znacznik czasu do nazwy każdego pliku</target> - <source>Folder</source> <target>Katalog</target> @@ -1167,6 +1139,9 @@ Uwaga: Nazwy plików muszÄ… być podane jako relatywne wzglÄ™dem katalogu bazowe <source>Files</source> <target>Pliki</target> +<source>Items</source> +<target></target> + <source>Percentage</source> <target>Procentowo</target> @@ -1272,6 +1247,12 @@ Uwaga: Nazwy plików muszÄ… być podane jako relatywne wzglÄ™dem katalogu bazowe <source>Cannot set privilege %x.</source> <target>Nie można ustawić uprawnieÅ„ %x.</target> +<source>Failed to suspend system sleep mode.</source> +<target>Program nie mógÅ‚ wyÅ‚Ä…czyć trybu uÅ›pienia systemu.</target> + +<source>Cannot change process I/O priorities.</source> +<target>Nie można zmienić priorytetu I/O procesu.</target> + <source>Unable to move %x to the Recycle Bin!</source> <target>Nie można przenieść %x do kosza!</target> @@ -1290,14 +1271,38 @@ Uwaga: Nazwy plików muszÄ… być podane jako relatywne wzglÄ™dem katalogu bazowe <source>Setting default synchronization directions: Old files will be overwritten with newer files.</source> <target>Ustawianie domyÅ›lnego kierunku synchronizacji: Stare pliki zostanÄ… nadpisane nowszymi.</target> +<source>Checking recycle bin availability for folder %x...</source> +<target>Sprawdzanie dostÄ™pnoÅ›ci kosza dla katalogu %x...</target> + +<source>Moving file %x to recycle bin</source> +<target>Przenoszenie pliku %x do kosza</target> + +<source>Moving folder %x to recycle bin</source> +<target>Przenoszenie katalogu %x do kosza</target> + +<source>Moving symbolic link %x to recycle bin</source> +<target>Przenoszenie dowiÄ…zania symbolicznego %x do kosza</target> + +<source>Deleting file %x</source> +<target>Usuwanie pliku %x</target> + +<source>Deleting folder %x</source> +<target>Usuwanie folderu %x</target> + +<source>Deleting symbolic link %x</source> +<target>Usuwanie dowiÄ…zania symbolicznego %x</target> + <source>Recycle Bin is not available for the following paths! Files will be deleted permanently instead:</source> <target>Kosz nie jest dostÄ™pny dla okreÅ›lonych Å›cieżek! Pliki zostanÄ… nieodwracalnie usuniÄ™tÄ™:</target> -<source>You can ignore this error to consider the folder as empty.</source> -<target>Możesz zignorować ten bÅ‚Ä…d traktujÄ…c katalog jako pusty.</target> +<source>The corresponding folder will be considered as empty.</source> +<target>Katalog bÄ™dzie oznaczony jako pusty.</target> -<source>Cannot find folder %x.</source> -<target>Nie można znaleźć katalogu %x.</target> +<source>Cannot find the following folders:</source> +<target>Nie można znaleźć nastÄ™pujÄ…cych katalogów:</target> + +<source>You can ignore this error to consider each folder as empty.</source> +<target>Możesz zignorować ten bÅ‚Ä…d aby uznajÄ…c katalogi jako puste.</target> <source>Directories are dependent! Be careful when setting up synchronization rules:</source> <target>Katalogi sÄ… zależne! PamiÄ™taj o tym podczas ustawiania zasad synchronizacji:</target> @@ -1305,8 +1310,8 @@ Uwaga: Nazwy plików muszÄ… być podane jako relatywne wzglÄ™dem katalogu bazowe <source>Start comparison</source> <target>Rozpocznij porównywanie</target> -<source>Preparing synchronization...</source> -<target>Przygotowywanie synchronizacji...</target> +<source>Calculating sync directions...</source> +<target>Obliczanie kierunków synchronizacji...</target> <source>Conflict detected:</source> <target>Wykryto konflikt:</target> @@ -1371,24 +1376,6 @@ Uwaga: Nazwy plików muszÄ… być podane jako relatywne wzglÄ™dem katalogu bazowe <source>Multiple...</source> <target>Wiele...</target> -<source>Deleting file %x</source> -<target>Usuwanie pliku %x</target> - -<source>Deleting folder %x</source> -<target>Usuwanie folderu %x</target> - -<source>Deleting symbolic link %x</source> -<target>Usuwanie dowiÄ…zania symbolicznego %x</target> - -<source>Moving file %x to recycle bin</source> -<target>Przenoszenie pliku %x do kosza</target> - -<source>Moving folder %x to recycle bin</source> -<target>Przenoszenie katalogu %x do kosza</target> - -<source>Moving symbolic link %x to recycle bin</source> -<target>Przenoszenie dowiÄ…zania symbolicznego %x do kosza</target> - <source>Moving file %x to %y</source> <target>Przenoszenie pliku %x do %y</target> @@ -1401,9 +1388,6 @@ Uwaga: Nazwy plików muszÄ… być podane jako relatywne wzglÄ™dem katalogu bazowe <source>Removing old versions...</source> <target>Usuwanie starszych wersji...</target> -<source>Creating file %x</source> -<target>Tworzenie pliku %x</target> - <source>Creating symbolic link %x</source> <target>Tworzenie dowiÄ…zania symbolicznego %x</target> @@ -1422,6 +1406,9 @@ Uwaga: Nazwy plików muszÄ… być podane jako relatywne wzglÄ™dem katalogu bazowe <source>Updating attributes of %x</source> <target>Aktualizowanie atrybutów %x</target> +<source>Cannot find %x.</source> +<target>Nie można znaleźć %x.</target> + <source>Target folder %x already existing.</source> <target>Katalog docelowy %x już istnieje.</target> @@ -1467,6 +1454,9 @@ Uwaga: Nazwy plików muszÄ… być podane jako relatywne wzglÄ™dem katalogu bazowe <source>Generating database...</source> <target>Generowanie bazy danych...</target> +<source>Creating Volume Shadow Copy for %x...</source> +<target>Tworzenie Volume Shadow Copy dla %x...</target> + <source>Data verification error: Source and target file have different content!</source> <target>BÅ‚Ä…d weryfikacji danych: Plik źródÅ‚owy i docelowy różniÄ… siÄ™ zawartoÅ›ciÄ…!</target> diff --git a/BUILD/Languages/portuguese.lng b/BUILD/Languages/portuguese.lng index a187ff07..8fd451a1 100644 --- a/BUILD/Languages/portuguese.lng +++ b/BUILD/Languages/portuguese.lng @@ -19,6 +19,9 @@ <source>Total time:</source> <target>Tempo total:</target> +<source>Cannot set directory lock for %x.</source> +<target>Não é possÃvel colocar o bloqueio de directório para %x.</target> + <source>Show in Explorer</source> <target>Mostrar no Explorer</target> @@ -40,6 +43,9 @@ <source>Error</source> <target>Erro</target> +<source>Selected variant:</source> +<target>Variante selecionada:</target> + <source>Select alternate comparison settings</source> <target>Selecionar opções alternativas de comparação</target> @@ -58,6 +64,12 @@ <source>Clear filter settings</source> <target>Limpar opções do filtro</target> +<source>Copy</source> +<target>Copiar</target> + +<source>Paste</source> +<target>Colar</target> + <source>Save as batch job</source> <target>Guardar como batch</target> @@ -97,11 +109,8 @@ <source>Fatal Error</source> <target>Erro crÃtico</target> -<source>Windows Error Code %x:</source> -<target>Código de erro do Windows %x:</target> - -<source>Linux Error Code %x:</source> -<target>Código de erro do Linux %x:</target> +<source>Error Code %x:</source> +<target>Código de erro %x:</target> <source>Cannot resolve symbolic link %x.</source> <target>Não é possÃvel resolver o link simbólico %x.</target> @@ -160,8 +169,8 @@ <source>Waiting while directory is locked (%x)...</source> <target>Aguardar enquanto o directório é bloqueado (%x)...</target> -<source>Cannot set directory lock %x.</source> -<target>Não é possÃvel bloquear o directório %x.</target> +<source>Creating file %x</source> +<target>Criar ficheiro %x</target> <source> <pluralform>1 sec</pluralform> @@ -193,9 +202,6 @@ <source>/sec</source> <target>/seg</target> -<source>Cannot find file %x.</source> -<target>Não é possÃvel encontrar o ficheiro %x.</target> - <source>File %x does not contain a valid configuration.</source> <target>Ficheiro %x não tem uma configuração válida.</target> @@ -220,6 +226,9 @@ <source>Cannot read the following XML elements:</source> <target>Não é possÃvel ler os elementos XML:</target> +<source>Cannot find file %x.</source> +<target>Não é possÃvel encontrar o ficheiro %x.</target> + <source>&Open...</source> <target>&Abrir...</target> @@ -453,24 +462,21 @@ O comando é executado se: <source>&Advanced</source> <target>&Avançado</target> -<source>&Check for new version</source> -<target>&Procurar actualizações</target> +<source>&Check now</source> +<target>&Verificar agora</target> -<source>Compare</source> -<target>Comparar</target> +<source>Check &automatically once a week</source> +<target>Verificar &automaticamente uma vez por semana</target> -<source>Compare both sides</source> -<target>Comparar listas</target> +<source>Check for new version</source> +<target>Verificar se há nova versão</target> -<source>&Abort</source> -<target>&Abortar</target> +<source>Compare</source> +<target>Comparar</target> <source>Synchronize</source> <target>Sincronizar</target> -<source>Start synchronization</source> -<target>Iniciar a sincronização</target> - <source>Add folder pair</source> <target>Adicionar um par de pastas</target> @@ -480,15 +486,6 @@ O comando é executado se: <source>Swap sides</source> <target>Trocar lados</target> -<source>Open</source> -<target>Abrir</target> - -<source>Save</source> -<target>Guardar</target> - -<source>Last used configurations (press DEL to remove from list)</source> -<target>Última configuração utilizada (pressione DEL para remover da lista)</target> - <source>Hide excluded items</source> <target>Esconder itens excluÃdos</target> @@ -519,6 +516,18 @@ O comando é executado se: <source>Time elapsed:</source> <target>Tempo decorrido</target> +<source>Synchronizing...</source> +<target>A sincronizar...</target> + +<source>On completion</source> +<target>Ao terminar</target> + +<source>Close</source> +<target>Fechar</target> + +<source>&Pause</source> +<target>&Pausa</target> + <source>Batch job</source> <target>Ficheiro Batch</target> @@ -549,9 +558,6 @@ O comando é executado se: <source>Abort synchronization on first error</source> <target>Abortar sincronização ao primeiro erro</target> -<source>On completion</source> -<target>Ao terminar</target> - <source>Show progress dialog</source> <target>Mostrar diálogo de progresso</target> @@ -608,8 +614,8 @@ Os ficheiros são considerados iguais se <source><- Two way -></source> <target><- Duas vias -></target> -<source>Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically.</source> -<target>Identificar e propagar mudanças em ambos os lados utilizando base de dados. Itens eliminados, renomeados e conflitos são detetados automaticamente.</target> +<source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> +<target>Identificar e propagar mudanças nos dois lados. Eliminações, cópias e conflitos são detectados automaticamente usando base de dados.</target> <source>Mirror ->></source> <target>Espelhar ->></target> @@ -647,15 +653,12 @@ Os ficheiros são considerados iguais se <source>Versioning</source> <target>Manter versões anteriores</target> -<source>Move time-stamped files into specified folder</source> -<target>Mover ficheiros datados para a pasta especificada</target> +<source>Move files to user-defined folder</source> +<target>Mover ficheiros para directório definido pelo utilizador</target> <source>Naming convention:</source> <target>Convenção de nomes:</target> -<source>Configuration</source> -<target>Configuração</target> - <source>Item exists on left side only</source> <target>Item existe apenas à esquerda</target> @@ -674,12 +677,6 @@ Os ficheiros são considerados iguais se <source>Conflict/item cannot be categorized</source> <target>Conflito/item não pode ser categorizado</target> -<source>Synchronizing...</source> -<target>A sincronizar...</target> - -<source>&Pause</source> -<target>&Pausa</target> - <source>Source code written in C++ using:</source> <target>Código fonte escrito em C++ utilizando:</target> @@ -740,8 +737,8 @@ Nota: Nome dos ficheiros tem que ser relativo aos diretórios base! <source>Maximum</source> <target>Máximo</target> -<source>&Default</source> -<target>&Config. Iniciais</target> +<source>&Clear</source> +<target>&Limpar</target> <source>Fail-safe file copy</source> <target>Cópia à prova de falhas</target> @@ -770,6 +767,12 @@ Nota: Nome dos ficheiros tem que ser relativo aos diretórios base! <source>Description</source> <target>Descrição</target> +<source>&Default</source> +<target>&Config. Iniciais</target> + +<source>Start synchronization</source> +<target>Iniciar a sincronização</target> + <source>Variant</source> <target>Variável</target> @@ -800,12 +803,24 @@ Nota: Nome dos ficheiros tem que ser relativo aos diretórios base! <source>Overview</source> <target>Vista</target> +<source>Configuration</source> +<target>Configuração</target> + <source>Filter files</source> <target>Filtrar ficheiros</target> <source>Select view</source> <target>Selecionar vista</target> +<source>Open...</source> +<target>Abrir...</target> + +<source>Save</source> +<target>Guardar</target> + +<source>Compare both sides</source> +<target>Comparar listas</target> + <source>Set direction:</source> <target>Escolher direcção:</target> @@ -863,102 +878,63 @@ Nota: Nome dos ficheiros tem que ser relativo aos diretórios base! <source>FreeFileSync batch</source> <target>FreeFileSync batch</target> -<source>Never save changes</source> -<target>Nunca guardar alterações</target> - <source>Do you want to save changes to %x?</source> <target>Deseja guardar as alterações a %x?</target> <source>Do&n't save</source> <target>Não g&uardar</target> +<source>Never save changes</source> +<target>Nunca guardar alterações</target> + <source>Configuration loaded!</source> <target>Configuração carregada!</target> -<source>Hide files that exist on left side only</source> -<target>Ocultar ficheiros existentes somente à esquerda</target> - <source>Show files that exist on left side only</source> <target>Mostrar ficheiros existentes somente à esquerda</target> -<source>Hide files that exist on right side only</source> -<target>Ocultar ficheiros existentes somente à direita</target> - <source>Show files that exist on right side only</source> <target>Mostrar ficheiros existentes somente à direita</target> -<source>Hide files that are newer on left</source> -<target>Ocultar ficheiros mais recentes à esquerda</target> - <source>Show files that are newer on left</source> <target>Mostrar ficheiros mais recentes à esquerda</target> -<source>Hide files that are newer on right</source> -<target>Ocultar ficheiros mais recentes à direita</target> - <source>Show files that are newer on right</source> <target>Mostrar ficheiros mais recentes à direita</target> -<source>Hide files that are equal</source> -<target>Ocultar ficheiros iguais</target> - <source>Show files that are equal</source> <target>Mostrar ficheiros iguais</target> -<source>Hide files that are different</source> -<target>Ocultar ficheiros diferentes</target> - <source>Show files that are different</source> <target>Mostrar ficheiros diferentes</target> -<source>Hide conflicts</source> -<target>Ocultar conflitos</target> - <source>Show conflicts</source> <target>Mostrar conflitos</target> -<source>Hide files that will be created on the left side</source> -<target>Ocultar ficheiros a ser criados à esquerda</target> - <source>Show files that will be created on the left side</source> <target>Mostrar ficheiros a ser criados à esquerda</target> -<source>Hide files that will be created on the right side</source> -<target>Ocultar ficheiros a ser criados à direita</target> - <source>Show files that will be created on the right side</source> <target>Mostrar ficheiros a ser criados à direita</target> -<source>Hide files that will be deleted on the left side</source> -<target>Ocultar ficheiros a ser apagados à esquerda</target> - <source>Show files that will be deleted on the left side</source> <target>Mostrar ficheiros a ser apagados à esquerda</target> -<source>Hide files that will be deleted on the right side</source> -<target>Ocultar ficheiros a ser apagados à direita</target> - <source>Show files that will be deleted on the right side</source> <target>Mostrar ficheiros a ser apagados à direita</target> -<source>Hide files that will be overwritten on left side</source> -<target>Ocultar ficheiros a ser substituidos do lado esquerdo</target> - <source>Show files that will be overwritten on left side</source> <target>Mostrar ficheiros a ser substituidos do lado esquerdo</target> -<source>Hide files that will be overwritten on right side</source> -<target>Ocultar ficheiros a ser substituidos do lado direito</target> - <source>Show files that will be overwritten on right side</source> <target>Mostrar ficheiros a ser substituidos do lado direito</target> -<source>Hide files that won't be copied</source> -<target>Ocultar ficheiros que não serão copiados</target> - <source>Show files that won't be copied</source> <target>Mostrar ficheiros que não serão copiados</target> +<source>Set as default</source> +<target>Definir como padrão</target> + <source>All folders are in sync!</source> <target>Todas as pastas estão sincronizadas!</target> @@ -971,14 +947,8 @@ Nota: Nome dos ficheiros tem que ser relativo aos diretórios base! <source>File list exported!</source> <target>Lista dos ficheiros exportada!</target> -<source> -<pluralform>Object deleted successfully!</pluralform> -<pluralform>%x objects deleted successfully!</pluralform> -</source> -<target> -<pluralform>Objecto eliminado com sucesso!</pluralform> -<pluralform>%x objectos eliminados com sucesso!</pluralform> -</target> +<source>Searching for program updates...</source> +<target>A procurar actualizações do programa...</target> <source> <pluralform>1 directory</pluralform> @@ -1013,6 +983,9 @@ Nota: Nome dos ficheiros tem que ser relativo aos diretórios base! <source>&Ignore</source> <target>&Ignorar</target> +<source>Don't show this warning again</source> +<target>Não mostrar este aviso novamente</target> + <source>&Switch</source> <target>&Trocar</target> @@ -1031,9 +1004,6 @@ Nota: Nome dos ficheiros tem que ser relativo aos diretórios base! <source>Comparing content...</source> <target>A comparar...</target> -<source>Copy</source> -<target>Copiar</target> - <source>Paused</source> <target>Em pausa</target> @@ -1116,35 +1086,38 @@ Nota: Nome dos ficheiros tem que ser relativo aos diretórios base! <target>Tornar visiveis os diálogos e avisos escondidos novamente?</target> <source> -<pluralform>Do you really want to move the following object to the Recycle Bin?</pluralform> -<pluralform>Do you really want to move the following %x objects to the Recycle Bin?</pluralform> +<pluralform>Do you really want to move the following item to the Recycle Bin?</pluralform> +<pluralform>Do you really want to move the following %x items to the Recycle Bin?</pluralform> </source> <target> -<pluralform>Deseja mesmo mover o objecto para a Reciclagem?</pluralform> -<pluralform>Deseja mesmo mover os %x objectos para a Reciclagem?</pluralform> +<pluralform>Deseja mesmo mover o seguinte item para a Reciclagem?</pluralform> +<pluralform>Deseja mesmo mover os seguintes %x itens para a Reciclagem?</pluralform> </target> <source> -<pluralform>Do you really want to delete the following object?</pluralform> -<pluralform>Do you really want to delete the following %x objects?</pluralform> +<pluralform>Do you really want to delete the following item?</pluralform> +<pluralform>Do you really want to delete the following %x items?</pluralform> </source> <target> -<pluralform>Deseja mesmo eliminar o seguinte objecto?</pluralform> -<pluralform>Deseja mesmo eliminar os seguintes %x objectos?</pluralform> +<pluralform>Deseja mesmo eliminar o seguinte item?</pluralform> +<pluralform>Deseja mesmo eliminar os seguintes %x itens?</pluralform> </target> <source>Leave as unresolved conflict</source> <target>Deixar como conflito</target> +<source>Time stamp</source> +<target>Selo temporal</target> + +<source>Append a timestamp to each file name</source> +<target>Juntar selo temporal a cada nome de ficheiro</target> + <source>Replace</source> <target>Substituir</target> <source>Move files and replace if existing</source> <target>Mover ficheiros e substituir se existirem</target> -<source>Append a timestamp to each file name</source> -<target>Juntar selo temporal a cada nome de ficheiro</target> - <source>Folder</source> <target>Pasta</target> @@ -1259,6 +1232,12 @@ Nota: Nome dos ficheiros tem que ser relativo aos diretórios base! <source>Cannot set privilege %x.</source> <target>Não é possÃvel definir o privilégio %x.</target> +<source>Failed to suspend system sleep mode.</source> +<target>Falha ao suspender o modo de hibernação do sistema.</target> + +<source>Cannot change process I/O priorities.</source> +<target>Não é possÃvel alterar as prioridades de E / S do processo.</target> + <source>Unable to move %x to the Recycle Bin!</source> <target>Não é possÃvel mover %x para a Reciclagem!</target> @@ -1277,14 +1256,38 @@ Nota: Nome dos ficheiros tem que ser relativo aos diretórios base! <source>Setting default synchronization directions: Old files will be overwritten with newer files.</source> <target>Escolher direcção de sincronização por defeito: Os ficheiros antigos serão substituÃdos pelos novos.</target> +<source>Checking recycle bin availability for folder %x...</source> +<target>A verificar a disponibilidade da reciclagem para a pasta %x...</target> + +<source>Moving file %x to recycle bin</source> +<target>Mover ficheiro %x para a Reciclagem</target> + +<source>Moving folder %x to recycle bin</source> +<target>Mover pasta %x para a Reciclagem</target> + +<source>Moving symbolic link %x to recycle bin</source> +<target>Mover link simbólico %x para a Reciclagem</target> + +<source>Deleting file %x</source> +<target>Apagar ficheiro %x</target> + +<source>Deleting folder %x</source> +<target>Apagar pasta %x</target> + +<source>Deleting symbolic link %x</source> +<target>Eliminar link simbólico %x</target> + <source>Recycle Bin is not available for the following paths! Files will be deleted permanently instead:</source> <target>Reciclagem não disponÃvel para os seguintes caminhos! Os ficheiros serão apagados permanentemente:</target> -<source>You can ignore this error to consider the folder as empty.</source> -<target>Pode ignorar este erro para considerar a pasta como vazia.</target> +<source>The corresponding folder will be considered as empty.</source> +<target>A pasta correspondente será considerada como vazia.</target> -<source>Cannot find folder %x.</source> -<target>Não consigo encontrar a pasta %x.</target> +<source>Cannot find the following folders:</source> +<target>Não é possÃvel encontrar as seguintes pastas:</target> + +<source>You can ignore this error to consider each folder as empty.</source> +<target>Pode ignorar este erro para considerar cada pasta como vazia.</target> <source>Directories are dependent! Be careful when setting up synchronization rules:</source> <target>Directórios são dependentes! Cuidado ao definir as regras de sincronização:</target> @@ -1292,8 +1295,8 @@ Nota: Nome dos ficheiros tem que ser relativo aos diretórios base! <source>Start comparison</source> <target>Iniciar comparação</target> -<source>Preparing synchronization...</source> -<target>A preparar sincronização...</target> +<source>Calculating sync directions...</source> +<target>A calcular a direcção de sincronização...</target> <source>Conflict detected:</source> <target>Conflito detectado:</target> @@ -1358,24 +1361,6 @@ Nota: Nome dos ficheiros tem que ser relativo aos diretórios base! <source>Multiple...</source> <target>Multiplo...</target> -<source>Deleting file %x</source> -<target>Apagar ficheiro %x</target> - -<source>Deleting folder %x</source> -<target>Apagar pasta %x</target> - -<source>Deleting symbolic link %x</source> -<target>Eliminar link simbólico %x</target> - -<source>Moving file %x to recycle bin</source> -<target>Mover ficheiro %x para a Reciclagem</target> - -<source>Moving folder %x to recycle bin</source> -<target>Mover pasta %x para a Reciclagem</target> - -<source>Moving symbolic link %x to recycle bin</source> -<target>Mover link simbólico %x para a Reciclagem</target> - <source>Moving file %x to %y</source> <target>Mover ficheiro %x para %y</target> @@ -1388,9 +1373,6 @@ Nota: Nome dos ficheiros tem que ser relativo aos diretórios base! <source>Removing old versions...</source> <target>A remover versões antigas...</target> -<source>Creating file %x</source> -<target>Criar ficheiro %x</target> - <source>Creating symbolic link %x</source> <target>Criar link simbólico %x</target> @@ -1409,6 +1391,9 @@ Nota: Nome dos ficheiros tem que ser relativo aos diretórios base! <source>Updating attributes of %x</source> <target>Actualizar atributos de %x</target> +<source>Cannot find %x.</source> +<target>Não é possÃvel encontrar %x.</target> + <source>Target folder %x already existing.</source> <target>Directório de destino %x já existe.</target> @@ -1454,6 +1439,9 @@ Nota: Nome dos ficheiros tem que ser relativo aos diretórios base! <source>Generating database...</source> <target>A gerar base de dados...</target> +<source>Creating Volume Shadow Copy for %x...</source> +<target>A criar Volume Shadow Copy para %x...</target> + <source>Data verification error: Source and target file have different content!</source> <target>Erro na verificação de dados: ficheiro fonte e de destino têm conteúdo diferente!</target> diff --git a/BUILD/Languages/portuguese_br.lng b/BUILD/Languages/portuguese_br.lng index 0d4c2246..8615e134 100644 --- a/BUILD/Languages/portuguese_br.lng +++ b/BUILD/Languages/portuguese_br.lng @@ -19,6 +19,9 @@ <source>Total time:</source> <target>Tempo total:</target> +<source>Cannot set directory lock for %x.</source> +<target>Não foi possÃvel travar o diretório %x.</target> + <source>Show in Explorer</source> <target>Mostrar no Explorer</target> @@ -40,6 +43,9 @@ <source>Error</source> <target>Erro</target> +<source>Selected variant:</source> +<target>Modo selecionado:</target> + <source>Select alternate comparison settings</source> <target>Selecionar configurações alternativas de comparação</target> @@ -58,6 +64,12 @@ <source>Clear filter settings</source> <target>Limpar configurações do filtro</target> +<source>Copy</source> +<target>Copiar</target> + +<source>Paste</source> +<target>Colar</target> + <source>Save as batch job</source> <target>Salvar como tarefa em lote</target> @@ -97,11 +109,8 @@ <source>Fatal Error</source> <target>Erro fatal</target> -<source>Windows Error Code %x:</source> -<target>Código de Erro do Windows %x:</target> - -<source>Linux Error Code %x:</source> -<target>Código de Erro do Linux %x:</target> +<source>Error Code %x:</source> +<target>Código do Erro %x:</target> <source>Cannot resolve symbolic link %x.</source> <target>Não foi possÃvel resolver o link simbólico %x.</target> @@ -160,8 +169,8 @@ <source>Waiting while directory is locked (%x)...</source> <target>Esperando enquanto o diretório é bloqueado (%x)...</target> -<source>Cannot set directory lock %x.</source> -<target>Não foi possÃvel bloquear o diretório %x.</target> +<source>Creating file %x</source> +<target>Criando arquivo %x</target> <source> <pluralform>1 sec</pluralform> @@ -193,9 +202,6 @@ <source>/sec</source> <target>/seg</target> -<source>Cannot find file %x.</source> -<target>Não foi possÃvel encontrar o aquivo %x.</target> - <source>File %x does not contain a valid configuration.</source> <target>O arquivo %x não contém uma configuração válida.</target> @@ -220,6 +226,9 @@ <source>Cannot read the following XML elements:</source> <target>Não foi possÃvel ler os seguintes elementos XML:</target> +<source>Cannot find file %x.</source> +<target>Não foi possÃvel localizar o aquivo %x.</target> + <source>&Open...</source> <target>&Abrir...</target> @@ -453,24 +462,21 @@ O comando é disparado se: <source>&Advanced</source> <target>&Avançado</target> -<source>&Check for new version</source> -<target>&Procurar novas versões</target> +<source>&Check now</source> +<target>&Verificar agora</target> -<source>Compare</source> -<target>Comparar</target> +<source>Check &automatically once a week</source> +<target>Verificar &automaticamente uma vez por semana</target> -<source>Compare both sides</source> -<target>Comparar os dois lados</target> +<source>Check for new version</source> +<target>&Verificar novas versões</target> -<source>&Abort</source> -<target>&Cancelar</target> +<source>Compare</source> +<target>Comparar</target> <source>Synchronize</source> <target>Sincronizar</target> -<source>Start synchronization</source> -<target>Iniciar a sincronização</target> - <source>Add folder pair</source> <target>Adicionar um par de pastas</target> @@ -480,15 +486,6 @@ O comando é disparado se: <source>Swap sides</source> <target>Inverter lados</target> -<source>Open</source> -<target>Abrir</target> - -<source>Save</source> -<target>Salvar</target> - -<source>Last used configurations (press DEL to remove from list)</source> -<target>Últimas configurações usadas (pressione DEL para remover da lista)</target> - <source>Hide excluded items</source> <target>Ocultar itens excluÃdos</target> @@ -519,6 +516,18 @@ O comando é disparado se: <source>Time elapsed:</source> <target>Tempo decorrido:</target> +<source>Synchronizing...</source> +<target>Sincronizando...</target> + +<source>On completion</source> +<target>Ao finalizar</target> + +<source>Close</source> +<target>Fechar</target> + +<source>&Pause</source> +<target>&Pausar</target> + <source>Batch job</source> <target>Tarefa em lote</target> @@ -549,9 +558,6 @@ O comando é disparado se: <source>Abort synchronization on first error</source> <target>Cancela sincronização no primeiro erro</target> -<source>On completion</source> -<target>Ao finalizar</target> - <source>Show progress dialog</source> <target>Mostrar indicador de progresso</target> @@ -609,8 +615,8 @@ Os arquivos são considerados iguais se <source><- Two way -></source> <target><- Dois sentidos -></target> -<source>Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically.</source> -<target>Identifica e propaga as mudanças em ambos os lados usando um banco de dados. Arquivos apagados, renomeados e conflitantes são detectados automaticamente.</target> +<source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> +<target>Identifica e propaga as mudanças em ambos os lados. Arquivos e pastas apagados e/ou movidos e conflitos são detectados automaticamente usando um banco de dados.</target> <source>Mirror ->></source> <target>Espelhar ->></target> @@ -643,20 +649,17 @@ Os arquivos são considerados iguais se <target>Lixeira</target> <source>Use Recycle Bin for deleted and overwritten files</source> -<target>Utilizar Lixeira para arquivos apagados ou sobrescritos</target> +<target>Utiliza a Lixeira para arquivos apagados ou sobrescritos</target> <source>Versioning</source> <target>Controle de versões</target> -<source>Move time-stamped files into specified folder</source> -<target>Move os arquivos com estampa de tempo para uma pasta especificada</target> +<source>Move files to user-defined folder</source> +<target>Move os arquivos para uma pasta definida pelo usuário</target> <source>Naming convention:</source> <target>Convenção de nomenclatura:</target> -<source>Configuration</source> -<target>Configuração</target> - <source>Item exists on left side only</source> <target>Item existe apenas no lado esquerdo</target> @@ -675,12 +678,6 @@ Os arquivos são considerados iguais se <source>Conflict/item cannot be categorized</source> <target>Conflito/item não pode ser categorizado</target> -<source>Synchronizing...</source> -<target>Sincronizando...</target> - -<source>&Pause</source> -<target>&Pausar</target> - <source>Source code written in C++ using:</source> <target>Código-fonte escrito em C++ utilizando:</target> @@ -741,8 +738,8 @@ Nota: Os nomes dos arquivos devem ser relativos aos diretórios base! <source>Maximum</source> <target>Máximo</target> -<source>&Default</source> -<target>&Config. Padrão</target> +<source>&Clear</source> +<target>&Limpar</target> <source>Fail-safe file copy</source> <target>Cópia de arquivos a prova de falhas</target> @@ -771,6 +768,12 @@ Nota: Os nomes dos arquivos devem ser relativos aos diretórios base! <source>Description</source> <target>Descrição</target> +<source>&Default</source> +<target>&Config. Padrão</target> + +<source>Start synchronization</source> +<target>Iniciar a sincronização</target> + <source>Variant</source> <target>Modo</target> @@ -801,12 +804,24 @@ Nota: Os nomes dos arquivos devem ser relativos aos diretórios base! <source>Overview</source> <target>Parâmetros</target> +<source>Configuration</source> +<target>Configuração</target> + <source>Filter files</source> <target>Filtrar arquivos</target> <source>Select view</source> <target>Selecionar visualização</target> +<source>Open...</source> +<target>Abrir...</target> + +<source>Save</source> +<target>Salvar</target> + +<source>Compare both sides</source> +<target>Comparar os dois lados</target> + <source>Set direction:</source> <target>Configurar direção</target> @@ -864,102 +879,63 @@ Nota: Os nomes dos arquivos devem ser relativos aos diretórios base! <source>FreeFileSync batch</source> <target>Tarefa em lote do FreeFileSync</target> -<source>Never save changes</source> -<target>Nunca salvar alterações</target> - <source>Do you want to save changes to %x?</source> <target>Gostaria de salvar as alterações para %x?</target> <source>Do&n't save</source> <target>&Não salvar</target> +<source>Never save changes</source> +<target>Nunca salvar alterações</target> + <source>Configuration loaded!</source> <target>Configuração carregada!</target> -<source>Hide files that exist on left side only</source> -<target>Ocultar arquivos que existem somente à esquerda</target> - <source>Show files that exist on left side only</source> <target>Mostrar arquivos que existem somente à esquerda</target> -<source>Hide files that exist on right side only</source> -<target>Ocultar arquivos que existem somente à direita</target> - <source>Show files that exist on right side only</source> <target>Mostrar arquivos que existem somente à direita</target> -<source>Hide files that are newer on left</source> -<target>Ocultar arquivos que são mais recentes à esquerda</target> - <source>Show files that are newer on left</source> <target>Mostrar arquivos que são mais recentes à esquerda</target> -<source>Hide files that are newer on right</source> -<target>Ocultar arquivos que são mais recentes à direita</target> - <source>Show files that are newer on right</source> <target>Mostrar arquivos que são mais recentes à direita</target> -<source>Hide files that are equal</source> -<target>Ocultar arquivos que são iguais</target> - <source>Show files that are equal</source> <target>Mostrar arquivos que são iguais</target> -<source>Hide files that are different</source> -<target>Ocultar arquivos que são diferentes</target> - <source>Show files that are different</source> <target>Mostrar arquivos que são diferentes</target> -<source>Hide conflicts</source> -<target>Ocultar conflitos</target> - <source>Show conflicts</source> <target>Mostrar conflitos</target> -<source>Hide files that will be created on the left side</source> -<target>Ocultar arquivos que serão criados no lado esquerdo</target> - <source>Show files that will be created on the left side</source> <target>Mostrar arquivos que serão criados no lado esquerdo</target> -<source>Hide files that will be created on the right side</source> -<target>Ocultar arquivos que serão criados no lado direito</target> - <source>Show files that will be created on the right side</source> <target>Mostrar arquivos que serão criados no lado direito</target> -<source>Hide files that will be deleted on the left side</source> -<target>Ocultar arquivos que serão apagados no lado esquerdo</target> - <source>Show files that will be deleted on the left side</source> <target>Mostrar arquivos que serão apagados no lado esquerdo</target> -<source>Hide files that will be deleted on the right side</source> -<target>Ocultar arquivos que serão apagados no lado direito</target> - <source>Show files that will be deleted on the right side</source> <target>Mostrar arquivos que serão apagados no lado direito</target> -<source>Hide files that will be overwritten on left side</source> -<target>Ocultar arquivos que serão substituÃdos no lado esquerdo</target> - <source>Show files that will be overwritten on left side</source> <target>Mostrar arquivos que serão substituÃdos no lado esquerdo</target> -<source>Hide files that will be overwritten on right side</source> -<target>Ocultar arquivos que serão substituÃdos no lado direito</target> - <source>Show files that will be overwritten on right side</source> <target>Mostrar arquivos que serão substituÃdos no lado direito</target> -<source>Hide files that won't be copied</source> -<target>Ocultar arquivos que não serão copiados</target> - <source>Show files that won't be copied</source> <target>Mostrar arquivos que não serão copiados</target> +<source>Set as default</source> +<target>Definir como padrão</target> + <source>All folders are in sync!</source> <target>Todas as pastas estão sincronizadas!</target> @@ -972,14 +948,8 @@ Nota: Os nomes dos arquivos devem ser relativos aos diretórios base! <source>File list exported!</source> <target>Lista de arquivos exportada!</target> -<source> -<pluralform>Object deleted successfully!</pluralform> -<pluralform>%x objects deleted successfully!</pluralform> -</source> -<target> -<pluralform>Objeto apagado com sucesso!</pluralform> -<pluralform>%x objetos apagados com sucesso!</pluralform> -</target> +<source>Searching for program updates...</source> +<target>Procurando atualizações do programa...</target> <source> <pluralform>1 directory</pluralform> @@ -1014,6 +984,9 @@ Nota: Os nomes dos arquivos devem ser relativos aos diretórios base! <source>&Ignore</source> <target>&Ignorar</target> +<source>Don't show this warning again</source> +<target>Não mostrar este aviso novamente</target> + <source>&Switch</source> <target>&Alterar</target> @@ -1032,9 +1005,6 @@ Nota: Os nomes dos arquivos devem ser relativos aos diretórios base! <source>Comparing content...</source> <target>Comparando conteúdo...</target> -<source>Copy</source> -<target>Copiar</target> - <source>Paused</source> <target>Pausado</target> @@ -1057,7 +1027,7 @@ Nota: Os nomes dos arquivos devem ser relativos aos diretórios base! <target>Ver Log</target> <source>Cannot find %x</source> -<target>Não foi possÃvel encontrar %x</target> +<target>Não foi possÃvel localizar %x</target> <source>Inactive</source> <target>Inativo</target> @@ -1117,35 +1087,38 @@ Nota: Os nomes dos arquivos devem ser relativos aos diretórios base! <target>Tornar avisar e diálogos ocultados visÃveis outra vez?</target> <source> -<pluralform>Do you really want to move the following object to the Recycle Bin?</pluralform> -<pluralform>Do you really want to move the following %x objects to the Recycle Bin?</pluralform> +<pluralform>Do you really want to move the following item to the Recycle Bin?</pluralform> +<pluralform>Do you really want to move the following %x items to the Recycle Bin?</pluralform> </source> <target> -<pluralform>Você tem certeza que deseja mover o seguinte objeto para a Lixeira?</pluralform> -<pluralform>Você tem certeza que deseja mover os seguintes %x objetos para a Lixeira?</pluralform> +<pluralform>Você realmente quer mover o seguinte item para a Lixeira?</pluralform> +<pluralform>Você realmente quer mover os seguintes %x itens para a Lixeira?</pluralform> </target> <source> -<pluralform>Do you really want to delete the following object?</pluralform> -<pluralform>Do you really want to delete the following %x objects?</pluralform> +<pluralform>Do you really want to delete the following item?</pluralform> +<pluralform>Do you really want to delete the following %x items?</pluralform> </source> <target> -<pluralform>Você tem certeza que deseja apagar o seguinte objeto?</pluralform> -<pluralform>Você tem certeza que deseja apagar os seguintes %x objetos?</pluralform> +<pluralform>Você realmente quer apagar o seguinte item?</pluralform> +<pluralform>Você realmente quer apagar os seguintes %x itens?</pluralform> </target> <source>Leave as unresolved conflict</source> <target>Deixar como conflito não resolvido</target> +<source>Time stamp</source> +<target>Estampa de tempo</target> + +<source>Append a timestamp to each file name</source> +<target>Atribuir uma estampa de tempo para cada nome de arquivo</target> + <source>Replace</source> <target>Substituir</target> <source>Move files and replace if existing</source> <target>Move arquivos e substitui se existente</target> -<source>Append a timestamp to each file name</source> -<target>Atribuir uma estampa de tempo para cada nome de arquivo</target> - <source>Folder</source> <target>Pasta</target> @@ -1158,6 +1131,9 @@ Nota: Os nomes dos arquivos devem ser relativos aos diretórios base! <source>Files</source> <target>Arquivos</target> +<source>Items</source> +<target></target> + <source>Percentage</source> <target>Percentual</target> @@ -1186,7 +1162,7 @@ Nota: Os nomes dos arquivos devem ser relativos aos diretórios base! <target>Não foi possÃvel escrever a data de modificação de %x.</target> <source>Cannot find system function %x.</source> -<target>Não foi possÃvel encontrar a função de sistema %x.</target> +<target>Não foi possÃvel localizar a função de sistema %x.</target> <source>Cannot read security context of %x.</source> <target>Não foi possÃvel ler o contexto de segurança de %x.</target> @@ -1219,7 +1195,7 @@ Nota: Os nomes dos arquivos devem ser relativos aos diretórios base! <target>Não foi possÃvel enumerar o diretório %x.</target> <source>Detected endless directory recursion.</source> -<target>Detectada recursão de diretório infinita.</target> +<target>Recursão de diretório infinita detectada.</target> <source>%x TB</source> <target>%x TB</target> @@ -1260,6 +1236,12 @@ Nota: Os nomes dos arquivos devem ser relativos aos diretórios base! <source>Cannot set privilege %x.</source> <target>Não foi possÃvel estabelecer o privilégio %x.</target> +<source>Failed to suspend system sleep mode.</source> +<target>Falha ao suspender o modo de espera do sistema.</target> + +<source>Cannot change process I/O priorities.</source> +<target>Não foi possÃvel mudar a prioridade de E/S do processo.</target> + <source>Unable to move %x to the Recycle Bin!</source> <target>Não foi possÃvel mover %x para a Lixeira!</target> @@ -1278,14 +1260,38 @@ Nota: Os nomes dos arquivos devem ser relativos aos diretórios base! <source>Setting default synchronization directions: Old files will be overwritten with newer files.</source> <target>Configurando direções padrões de sincronização: Arquivos antigos serão substituÃdos por arquivos mais novos.</target> +<source>Checking recycle bin availability for folder %x...</source> +<target>Verificando a disponibilidade da lixeira para a pasta %x...</target> + +<source>Moving file %x to recycle bin</source> +<target>Movendo arquivo %x para a lixeira</target> + +<source>Moving folder %x to recycle bin</source> +<target>Movendo pasta %x para a lixeira</target> + +<source>Moving symbolic link %x to recycle bin</source> +<target>Movendo link simbólico %x para a lixeira</target> + +<source>Deleting file %x</source> +<target>Apagando arquivo %x</target> + +<source>Deleting folder %x</source> +<target>Apagando pasta %x</target> + +<source>Deleting symbolic link %x</source> +<target>Apagando link simbólico %x</target> + <source>Recycle Bin is not available for the following paths! Files will be deleted permanently instead:</source> <target>A Lixeira não está disponÃvel para os seguintes caminhos! Os arquivos serão apagados permanentemente:</target> -<source>You can ignore this error to consider the folder as empty.</source> -<target>Você pode ignorar este erro para considerar a pasta como vazia.</target> +<source>The corresponding folder will be considered as empty.</source> +<target>A pasta correspondente será considerar como vazia.</target> -<source>Cannot find folder %x.</source> -<target>Não foi possÃvel encontrar a pasta %x.</target> +<source>Cannot find the following folders:</source> +<target>Não foi possÃvel localizar as seguintes pastas:</target> + +<source>You can ignore this error to consider each folder as empty.</source> +<target>Você pode ignorar este erro para considerar cada pasta como vazia.</target> <source>Directories are dependent! Be careful when setting up synchronization rules:</source> <target>Os diretórios são dependentes! Cuidado ao definir as regras de sincronização:</target> @@ -1293,8 +1299,8 @@ Nota: Os nomes dos arquivos devem ser relativos aos diretórios base! <source>Start comparison</source> <target>Iniciar a comparação</target> -<source>Preparing synchronization...</source> -<target>Preparando sincronização...</target> +<source>Calculating sync directions...</source> +<target>Calculando as direções de sincronização...</target> <source>Conflict detected:</source> <target>Conflito detectado:</target> @@ -1359,24 +1365,6 @@ Nota: Os nomes dos arquivos devem ser relativos aos diretórios base! <source>Multiple...</source> <target>Múltiplo...</target> -<source>Deleting file %x</source> -<target>Apagando arquivo %x</target> - -<source>Deleting folder %x</source> -<target>Apagando pasta %x</target> - -<source>Deleting symbolic link %x</source> -<target>Apagando link simbólico %x</target> - -<source>Moving file %x to recycle bin</source> -<target>Movendo arquivo %x para a lixeira</target> - -<source>Moving folder %x to recycle bin</source> -<target>Movendo pasta %x para a lixeira</target> - -<source>Moving symbolic link %x to recycle bin</source> -<target>Movendo link simbólico %x para a lixeira</target> - <source>Moving file %x to %y</source> <target>Movendo arquivo %x para %y</target> @@ -1389,9 +1377,6 @@ Nota: Os nomes dos arquivos devem ser relativos aos diretórios base! <source>Removing old versions...</source> <target>Removendo versões antigas...</target> -<source>Creating file %x</source> -<target>Criando arquivo %x</target> - <source>Creating symbolic link %x</source> <target>Criando link simbólico %x</target> @@ -1410,6 +1395,9 @@ Nota: Os nomes dos arquivos devem ser relativos aos diretórios base! <source>Updating attributes of %x</source> <target>Atualizando atributos de %x</target> +<source>Cannot find %x.</source> +<target>Não foi possÃvel localizar %x.</target> + <source>Target folder %x already existing.</source> <target>Pasta de destino %x já existe.</target> @@ -1455,6 +1443,9 @@ Nota: Os nomes dos arquivos devem ser relativos aos diretórios base! <source>Generating database...</source> <target>Gerando banco de dados...</target> +<source>Creating Volume Shadow Copy for %x...</source> +<target>Criando Cópia de Sombra de Volume para %x...</target> + <source>Data verification error: Source and target file have different content!</source> <target>Erro de verificação de dados: Arquivo de origem e destino têm o mesmo conteúdo!</target> diff --git a/BUILD/Languages/romanian.lng b/BUILD/Languages/romanian.lng index a0370f4d..e34b40d0 100644 --- a/BUILD/Languages/romanian.lng +++ b/BUILD/Languages/romanian.lng @@ -19,6 +19,9 @@ <source>Total time:</source> <target>Timp Total:</target> +<source>Cannot set directory lock for %x.</source> +<target>Nu pot face zăvorîrea dosarului %x.</target> + <source>Show in Explorer</source> <target>Arată în Exploratorul de File</target> @@ -40,6 +43,9 @@ <source>Error</source> <target>Eroare</target> +<source>Selected variant:</source> +<target>Varianta selectată:</target> + <source>Select alternate comparison settings</source> <target>Selectează setările alternative de comparare</target> @@ -58,6 +64,12 @@ <source>Clear filter settings</source> <target>Curăță Setările Filtrului</target> +<source>Copy</source> +<target>Copiază</target> + +<source>Paste</source> +<target>LipeÈ™te</target> + <source>Save as batch job</source> <target>Salvează ca Sarcină Set</target> @@ -97,11 +109,8 @@ <source>Fatal Error</source> <target>Eroare Fatală</target> -<source>Windows Error Code %x:</source> -<target>Codul Erorii Windows %x:</target> - -<source>Linux Error Code %x:</source> -<target>Codul Erorii Linux %x:</target> +<source>Error Code %x:</source> +<target>Cod de Eroare %x:</target> <source>Cannot resolve symbolic link %x.</source> <target>Nu pot rezolva legătura simbolică %x.</target> @@ -161,8 +170,8 @@ <source>Waiting while directory is locked (%x)...</source> <target>AÈ™tept ca dosarul să fie zăvorît (%x)...</target> -<source>Cannot set directory lock %x.</source> -<target>Nu pot seta zăvorîrea dosarului %x.</target> +<source>Creating file %x</source> +<target>Creez fila %x</target> <source> <pluralform>1 sec</pluralform> @@ -196,9 +205,6 @@ <source>/sec</source> <target>/sec</target> -<source>Cannot find file %x.</source> -<target>Nu pot găsi fila %x.</target> - <source>File %x does not contain a valid configuration.</source> <target>Fila %x nu conÈ›ine o configuraÈ›ie validă.</target> @@ -223,6 +229,9 @@ <source>Cannot read the following XML elements:</source> <target>Nu pot citi următoarele elemente XML:</target> +<source>Cannot find file %x.</source> +<target>Nu pot găsi fila %x.</target> + <source>&Open...</source> <target>&Deschide...</target> @@ -456,24 +465,21 @@ Comanda este declanÈ™ată dacă: <source>&Advanced</source> <target>&Avansate</target> -<source>&Check for new version</source> -<target>&Caută Versiune Nouă a Softului</target> +<source>&Check now</source> +<target>&Caută Acum</target> -<source>Compare</source> -<target>Compară</target> +<source>Check &automatically once a week</source> +<target>Caută &Automat în Fiecare Săptămînă</target> -<source>Compare both sides</source> -<target>Compară PărÈ›ile Stîngă È™i Dreaptă</target> +<source>Check for new version</source> +<target>Caută Versiune Nouă</target> -<source>&Abort</source> -<target>&Anulează</target> +<source>Compare</source> +<target>Compară</target> <source>Synchronize</source> <target>Sincronizează</target> -<source>Start synchronization</source> -<target>PorneÈ™te Sincronizarea</target> - <source>Add folder pair</source> <target>Adaugă Pereche Nouă de Dosare</target> @@ -483,15 +489,6 @@ Comanda este declanÈ™ată dacă: <source>Swap sides</source> <target>Schimbă compartimentele stîng È™i drept între ele</target> -<source>Open</source> -<target>Deschide</target> - -<source>Save</source> -<target>Salvează</target> - -<source>Last used configurations (press DEL to remove from list)</source> -<target>Ultimele configuraÈ›ii utilizate (apasă tasta DEL pentru a înlătura din listă)</target> - <source>Hide excluded items</source> <target>Ascunde elementele excluse</target> @@ -522,6 +519,18 @@ Comanda este declanÈ™ată dacă: <source>Time elapsed:</source> <target>Timp Scurs:</target> +<source>Synchronizing...</source> +<target>Sincronizare Aflată în Curs...</target> + +<source>On completion</source> +<target>La Terminare</target> + +<source>Close</source> +<target>ÃŽnchide</target> + +<source>&Pause</source> +<target>&Pauzează</target> + <source>Batch job</source> <target>Sarcină Set</target> @@ -552,9 +561,6 @@ Comanda este declanÈ™ată dacă: <source>Abort synchronization on first error</source> <target>Sincronizarea e abandonată la prima eroare</target> -<source>On completion</source> -<target>La Terminare</target> - <source>Show progress dialog</source> <target>Arată progresul sincronizării</target> @@ -612,8 +618,8 @@ este acelaÈ™i <source><- Two way -></source> <target><= BidirecÈ›ională =></target> -<source>Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically.</source> -<target>Identificare È™i propagare a modificărilor din ambele părÈ›i folosind o bază de date. Ștergerile, renumirile È™i conflictele sînt detectate automat.</target> +<source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> +<target>Identificare È™i propagare a modificărilor din ambele părÈ›i. Ștergerile, renumirile È™i conflictele sînt detectate automat, folosind o bază de date.</target> <source>Mirror ->></source> <target>Clonare =>></target> @@ -651,15 +657,12 @@ este acelaÈ™i <source>Versioning</source> <target>Versionare</target> -<source>Move time-stamped files into specified folder</source> -<target>Filelor le este adăugat un marcaj de timp È™i apoi sînt mutate în dosarul specificat</target> +<source>Move files to user-defined folder</source> +<target>Mută filele în dosarul stabilit de utilizator</target> <source>Naming convention:</source> <target>ConvenÈ›ie de numire:</target> -<source>Configuration</source> -<target>ConfiguraÈ›ie</target> - <source>Item exists on left side only</source> <target>Elementul există doar în partea stîngă</target> @@ -678,12 +681,6 @@ este acelaÈ™i <source>Conflict/item cannot be categorized</source> <target>Conflictul/elementul nu poate fi inclus într-o anumită categorie</target> -<source>Synchronizing...</source> -<target>Sincronizare Aflată în Curs...</target> - -<source>&Pause</source> -<target>&Pauzează</target> - <source>Source code written in C++ using:</source> <target>Cod sursă scris în C++ folosind:</target> @@ -744,8 +741,8 @@ Notă: Numele filelor trebuie să fie relative la dosarele bază (rădăcină)! <source>Maximum</source> <target>Maxim</target> -<source>&Default</source> -<target>Coloanele &Implicite</target> +<source>&Clear</source> +<target>&Curăță</target> <source>Fail-safe file copy</source> <target>Copiază filele în modul protejat la eÈ™ec [fail-safe]</target> @@ -774,6 +771,12 @@ Notă: Numele filelor trebuie să fie relative la dosarele bază (rădăcină)! <source>Description</source> <target>Descriere</target> +<source>&Default</source> +<target>Coloanele &Implicite</target> + +<source>Start synchronization</source> +<target>PorneÈ™te Sincronizarea</target> + <source>Variant</source> <target>Varianta Sincronizării</target> @@ -804,12 +807,24 @@ Notă: Numele filelor trebuie să fie relative la dosarele bază (rădăcină)! <source>Overview</source> <target>Panoramă</target> +<source>Configuration</source> +<target>ConfiguraÈ›ie</target> + <source>Filter files</source> <target>Filtru</target> <source>Select view</source> <target>Selectează Vederea</target> +<source>Open...</source> +<target>Deschide...</target> + +<source>Save</source> +<target>Salvează</target> + +<source>Compare both sides</source> +<target>Compară PărÈ›ile Stîngă È™i Dreaptă</target> + <source>Set direction:</source> <target>Setează AcÈ›iunea ca în Icoana Alăturată:</target> @@ -867,102 +882,63 @@ Notă: Numele filelor trebuie să fie relative la dosarele bază (rădăcină)! <source>FreeFileSync batch</source> <target>Set FreeFileSync</target> -<source>Never save changes</source> -<target>Nu salva niciodată modificările</target> - <source>Do you want to save changes to %x?</source> <target>Vrei să salvezi modificările făcute la %x?</target> <source>Do&n't save</source> <target>&Nu salva</target> +<source>Never save changes</source> +<target>Nu salva niciodată modificările</target> + <source>Configuration loaded!</source> <target>ConfiguraÈ›ie deschisă !</target> -<source>Hide files that exist on left side only</source> -<target>Ascunde filele care există doar în stînga</target> - <source>Show files that exist on left side only</source> <target>Arată filele care există doar în stînga</target> -<source>Hide files that exist on right side only</source> -<target>Ascunde filele care există doar în dreapta</target> - <source>Show files that exist on right side only</source> <target>Arată filele care există doar în dreapta</target> -<source>Hide files that are newer on left</source> -<target>Ascunde filele care sînt mai noi în stînga</target> - <source>Show files that are newer on left</source> <target>Arată filele din stînga mai noi decît cele din dreapta</target> -<source>Hide files that are newer on right</source> -<target>Ascunde filele care sînt mai noi în dreapta</target> - <source>Show files that are newer on right</source> <target>Arată filele din dreapta mai noi decît cele din stînga</target> -<source>Hide files that are equal</source> -<target>Ascunde elementele (file/dosare) identice</target> - <source>Show files that are equal</source> <target>Arată elementele (file/dosare) identice</target> -<source>Hide files that are different</source> -<target>Ascunde elementele (file/dosare) care sînt diferite</target> - <source>Show files that are different</source> <target>Arată elementele (file/dosare) diferite</target> -<source>Hide conflicts</source> -<target>Ascunde conflictele</target> - <source>Show conflicts</source> <target>Arată conflictele</target> -<source>Hide files that will be created on the left side</source> -<target>Ascunde elementele (file/dosare) care vor fi create în stînga</target> - <source>Show files that will be created on the left side</source> <target>Arată elementele (file/dosare) care vor fi create în stînga</target> -<source>Hide files that will be created on the right side</source> -<target>Ascunde elementele (file/dosare) care vor fi create în dreapta</target> - <source>Show files that will be created on the right side</source> <target>Arată elementele (file/dosare) care vor fi create în dreapta</target> -<source>Hide files that will be deleted on the left side</source> -<target>Ascunde elementele (file/dosare) care vor fi È™terse în stînga</target> - <source>Show files that will be deleted on the left side</source> <target>Arată elementele (file/dosare) care vor fi È™terse în stînga</target> -<source>Hide files that will be deleted on the right side</source> -<target>Ascunde elementele (file/dosare) care vor fi È™terse în dreapta</target> - <source>Show files that will be deleted on the right side</source> <target>Arată elementele (file/dosare) care vor fi È™terse în dreapta</target> -<source>Hide files that will be overwritten on left side</source> -<target>Ascunde elementele (file/dosare) care vor fi suprascrise în stînga</target> - <source>Show files that will be overwritten on left side</source> <target>Arată elementele (file/dosare) care vor fi suprascrise în stînga</target> -<source>Hide files that will be overwritten on right side</source> -<target>Ascunde elementele (file/dosare) care vor fi suprascrise în dreapta</target> - <source>Show files that will be overwritten on right side</source> <target>Arată elementele (file/dosare) care vor fi suprascrise în dreapta</target> -<source>Hide files that won't be copied</source> -<target>Ascunde elementele (file/dosare) care nu vor fi copiate</target> - <source>Show files that won't be copied</source> <target>Arată elementele (file/dosare) care nu vor fi copiate</target> +<source>Set as default</source> +<target>Setează ca implicit</target> + <source>All folders are in sync!</source> <target>Toate dosarele sînt sincronizate!</target> @@ -975,15 +951,8 @@ Notă: Numele filelor trebuie să fie relative la dosarele bază (rădăcină)! <source>File list exported!</source> <target>Lista de file a fost exportată!</target> -<source> -<pluralform>Object deleted successfully!</pluralform> -<pluralform>%x objects deleted successfully!</pluralform> -</source> -<target> -<pluralform>Element È™ters cu succes!</pluralform> -<pluralform>%x elemente È™terse cu succes!</pluralform> -<pluralform>%x de elemente È™terse cu succes!</pluralform> -</target> +<source>Searching for program updates...</source> +<target>Caut actualizări ale programului...</target> <source> <pluralform>1 directory</pluralform> @@ -1021,6 +990,9 @@ Notă: Numele filelor trebuie să fie relative la dosarele bază (rădăcină)! <source>&Ignore</source> <target>&OK</target> +<source>Don't show this warning again</source> +<target>Nu arăta această atenÈ›ionare din nou</target> + <source>&Switch</source> <target>&Comută</target> @@ -1039,9 +1011,6 @@ Notă: Numele filelor trebuie să fie relative la dosarele bază (rădăcină)! <source>Comparing content...</source> <target>Compar conÈ›inutul...</target> -<source>Copy</source> -<target>Copiază</target> - <source>Paused</source> <target>Sincronizare Pauzată</target> @@ -1124,8 +1093,8 @@ Notă: Numele filelor trebuie să fie relative la dosarele bază (rădăcină)! <target>Vrei ca dialogurile ascunse È™i mesajele de avertizare să fie vizibile din nou?</target> <source> -<pluralform>Do you really want to move the following object to the Recycle Bin?</pluralform> -<pluralform>Do you really want to move the following %x objects to the Recycle Bin?</pluralform> +<pluralform>Do you really want to move the following item to the Recycle Bin?</pluralform> +<pluralform>Do you really want to move the following %x items to the Recycle Bin?</pluralform> </source> <target> <pluralform>Sigur vrei să muÈ›i în Reciclator elementul următor?</pluralform> @@ -1134,8 +1103,8 @@ Notă: Numele filelor trebuie să fie relative la dosarele bază (rădăcină)! </target> <source> -<pluralform>Do you really want to delete the following object?</pluralform> -<pluralform>Do you really want to delete the following %x objects?</pluralform> +<pluralform>Do you really want to delete the following item?</pluralform> +<pluralform>Do you really want to delete the following %x items?</pluralform> </source> <target> <pluralform>Sigur vrei să È™tergi definitiv elementul următor?</pluralform> @@ -1146,15 +1115,18 @@ Notă: Numele filelor trebuie să fie relative la dosarele bază (rădăcină)! <source>Leave as unresolved conflict</source> <target>Lasă ca Conflict Nerezolvat</target> +<source>Time stamp</source> +<target>Marcaj Temporal</target> + +<source>Append a timestamp to each file name</source> +<target>Adaugă un marcaj temporal la numele fiecărei file</target> + <source>Replace</source> <target>ÃŽnlocuieÈ™te</target> <source>Move files and replace if existing</source> <target>Mută filele È™i înlocuieÈ™te-le pe cele existente</target> -<source>Append a timestamp to each file name</source> -<target>Adaugă un marcaj temporal la numele fiecărei file</target> - <source>Folder</source> <target>Dosar</target> @@ -1272,6 +1244,12 @@ Notă: Numele filelor trebuie să fie relative la dosarele bază (rădăcină)! <source>Cannot set privilege %x.</source> <target>Nu pot seta privilegiul %x.</target> +<source>Failed to suspend system sleep mode.</source> +<target>Nu pot suspenda intrarea sistemului în adormire (repaus).</target> + +<source>Cannot change process I/O priorities.</source> +<target>Nu pot schimba prioritățile I/O ale procesului.</target> + <source>Unable to move %x to the Recycle Bin!</source> <target>Nu pot muta %x în Reciclator!</target> @@ -1279,7 +1257,7 @@ Notă: Numele filelor trebuie să fie relative la dosarele bază (rădăcină)! <target>Ambele părÈ›i s-au modificat de la ultima sincronizare!</target> <source>Cannot determine sync-direction:</source> -<target>Nu se poate determina sensul de sincronizare:</target> +<target>Nu pot determina sensul de sincronizare:</target> <source>No change since last synchronization!</source> <target>Nu sînt schimbări de la ultima sincronizare!</target> @@ -1290,14 +1268,38 @@ Notă: Numele filelor trebuie să fie relative la dosarele bază (rădăcină)! <source>Setting default synchronization directions: Old files will be overwritten with newer files.</source> <target>Baza de date existentă va fi făcută compatibilă cu versiunea softului È™i apoi va fi setat sensul implicit de sincronizare: Filele vechi vor fi suprascrise de cele noi.</target> +<source>Checking recycle bin availability for folder %x...</source> +<target>Verific dacă Reciclatorul e disponibil pentru dosarul %x...</target> + +<source>Moving file %x to recycle bin</source> +<target>Mut fila %x în Reciclator</target> + +<source>Moving folder %x to recycle bin</source> +<target>Mut dosarul %x în Reciclator</target> + +<source>Moving symbolic link %x to recycle bin</source> +<target>Mut legătura simbolică %x în Reciclator</target> + +<source>Deleting file %x</source> +<target>Șterg fila %x</target> + +<source>Deleting folder %x</source> +<target>Șterg dosarul %x</target> + +<source>Deleting symbolic link %x</source> +<target>Șterg legătura simbolică %x</target> + <source>Recycle Bin is not available for the following paths! Files will be deleted permanently instead:</source> -<target>Reciclatorul nu este disponibil pentru căile următoare! Filele vor fi deci È™terse definitiv:</target> +<target>Reciclatorul nu este disponibil pentru căile următoare! Filele de acolo vor fi deci È™terse definitiv:</target> -<source>You can ignore this error to consider the folder as empty.</source> -<target>PoÈ›i ignora această eroare dacă vrei ca dosarul să fie considerat gol.</target> +<source>The corresponding folder will be considered as empty.</source> +<target>Dosarul corespondent va fi considerat ca fiind gol.</target> -<source>Cannot find folder %x.</source> -<target>Nu pot găsi dosarul %x.</target> +<source>Cannot find the following folders:</source> +<target>Nu pot găsi dosarele următoare:</target> + +<source>You can ignore this error to consider each folder as empty.</source> +<target>PoÈ›i ignora această eroare dacă vrei ca dosarele din ambele părÈ›i să fie considerate goale.</target> <source>Directories are dependent! Be careful when setting up synchronization rules:</source> <target>Dosarele sînt interdependente! AtenÈ›ie la setarea regulilor de sincronizare:</target> @@ -1305,8 +1307,8 @@ Notă: Numele filelor trebuie să fie relative la dosarele bază (rădăcină)! <source>Start comparison</source> <target>PorneÈ™te compararea</target> -<source>Preparing synchronization...</source> -<target>Pregătesc sincronizarea...</target> +<source>Calculating sync directions...</source> +<target>Calculez acÈ›iunile de sincronizare...</target> <source>Conflict detected:</source> <target>Conflict detectat:</target> @@ -1371,24 +1373,6 @@ Notă: Numele filelor trebuie să fie relative la dosarele bază (rădăcină)! <source>Multiple...</source> <target>Multiplu...</target> -<source>Deleting file %x</source> -<target>Șterg fila %x</target> - -<source>Deleting folder %x</source> -<target>Șterg dosarul %x</target> - -<source>Deleting symbolic link %x</source> -<target>Șterg legătura simbolică %x</target> - -<source>Moving file %x to recycle bin</source> -<target>Mut fila %x în Reciclator</target> - -<source>Moving folder %x to recycle bin</source> -<target>Mut dosarul %x în Reciclator</target> - -<source>Moving symbolic link %x to recycle bin</source> -<target>Mut legătura simbolică %x în Reciclator</target> - <source>Moving file %x to %y</source> <target>Mut fila %x în %y</target> @@ -1401,9 +1385,6 @@ Notă: Numele filelor trebuie să fie relative la dosarele bază (rădăcină)! <source>Removing old versions...</source> <target>ÃŽnlătur versiunile vechi...</target> -<source>Creating file %x</source> -<target>Creez fila %x</target> - <source>Creating symbolic link %x</source> <target>Creez legătura simbolică %x</target> @@ -1422,6 +1403,9 @@ Notă: Numele filelor trebuie să fie relative la dosarele bază (rădăcină)! <source>Updating attributes of %x</source> <target>Actualizez atributele lui %x</target> +<source>Cannot find %x.</source> +<target>Nu pot găsi %x.</target> + <source>Target folder %x already existing.</source> <target>Dosarul È›intă %x există deja.</target> @@ -1435,7 +1419,7 @@ Notă: Numele filelor trebuie să fie relative la dosarele bază (rădăcină)! <target>Dosarul sursă %x nu a fost găsit.</target> <source>The following items have unresolved conflicts and will not be synchronized:</source> -<target>Elementele următoare au conflicte nerezolvate È™i nu vor fi sincronizate:</target> +<target>Există conflicte nerezolvate la elementele listate mai jos, deci ele nu vor fi sincronizate:</target> <source>Significant difference detected:</source> <target>Diferență semnificativă detectată:</target> @@ -1467,6 +1451,9 @@ Notă: Numele filelor trebuie să fie relative la dosarele bază (rădăcină)! <source>Generating database...</source> <target>Generez baza de date...</target> +<source>Creating Volume Shadow Copy for %x...</source> +<target>Creez Conservare a Volumului [Volume Shadow Copy] pentru %x...</target> + <source>Data verification error: Source and target file have different content!</source> <target>Eroare la verificarea datelor: Filele sursă È™i È›intă au conÈ›inut diferit!</target> diff --git a/BUILD/Languages/russian.lng b/BUILD/Languages/russian.lng index 7a3b93cf..2837a169 100644 --- a/BUILD/Languages/russian.lng +++ b/BUILD/Languages/russian.lng @@ -19,6 +19,9 @@ <source>Total time:</source> <target>Общее времÑ:</target> +<source>Cannot set directory lock for %x.</source> +<target></target> + <source>Show in Explorer</source> <target>Показать в Проводнике</target> @@ -40,6 +43,9 @@ <source>Error</source> <target>Ошибка</target> +<source>Selected variant:</source> +<target></target> + <source>Select alternate comparison settings</source> <target>Выбрать альтернативные наÑтройки ÑравнениÑ</target> @@ -58,6 +64,12 @@ <source>Clear filter settings</source> <target>ОчиÑтить наÑтройки фильтра</target> +<source>Copy</source> +<target>Копировать</target> + +<source>Paste</source> +<target></target> + <source>Save as batch job</source> <target>Сохранить как пакетное задание</target> @@ -97,11 +109,8 @@ <source>Fatal Error</source> <target>КритичеÑÐºÐ°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°</target> -<source>Windows Error Code %x:</source> -<target>Код ошибки Windows %x:</target> - -<source>Linux Error Code %x:</source> -<target>Код ошибки Linux %x:</target> +<source>Error Code %x:</source> +<target></target> <source>Cannot resolve symbolic link %x.</source> <target>Ðе удаетÑÑ Ñ€Ð°Ð·Ñ€ÐµÑˆÐ¸Ñ‚ÑŒ ÑимволичеÑкую ÑÑылку %x.</target> @@ -161,8 +170,8 @@ <source>Waiting while directory is locked (%x)...</source> <target>Ожидание ÑнÑÑ‚Ð¸Ñ Ð±Ð»Ð¾ÐºÐ¸Ñ€Ð¾Ð²ÐºÐ¸ Ñ Ð¿Ð°Ð¿ÐºÐ¸ %x...</target> -<source>Cannot set directory lock %x.</source> -<target>Ðе удаетÑÑ ÑƒÑтановить блокировку папка %x.</target> +<source>Creating file %x</source> +<target>Создание файла %x</target> <source> <pluralform>1 sec</pluralform> @@ -196,9 +205,6 @@ <source>/sec</source> <target>/Ñ</target> -<source>Cannot find file %x.</source> -<target>Ðе удаетÑÑ Ð½Ð°Ð¹Ñ‚Ð¸ файл %x.</target> - <source>File %x does not contain a valid configuration.</source> <target>Файл %x не Ñодержит дейÑтвительной конфигурации.</target> @@ -223,6 +229,9 @@ <source>Cannot read the following XML elements:</source> <target>Ðевозможно прочитать Ñледующие XML Ñлементы:</target> +<source>Cannot find file %x.</source> +<target>Ðе удаетÑÑ Ð½Ð°Ð¹Ñ‚Ð¸ файл %x.</target> + <source>&Open...</source> <target>&Открыть...</target> @@ -456,24 +465,21 @@ The command is triggered if: <source>&Advanced</source> <target>&Дополнительно</target> -<source>&Check for new version</source> -<target>&Проверить наличие новой верÑии</target> +<source>&Check now</source> +<target></target> -<source>Compare</source> -<target>Сравнить</target> +<source>Check &automatically once a week</source> +<target></target> -<source>Compare both sides</source> -<target>Сравнить обе Ñтороны</target> +<source>Check for new version</source> +<target></target> -<source>&Abort</source> -<target>&Отмена</target> +<source>Compare</source> +<target>Сравнить</target> <source>Synchronize</source> <target>Синхронизировать</target> -<source>Start synchronization</source> -<target>Ðачать Ñинхронизацию</target> - <source>Add folder pair</source> <target>Добавить пару папок</target> @@ -483,18 +489,6 @@ The command is triggered if: <source>Swap sides</source> <target>ПоменÑÑ‚ÑŒ направление</target> -<source>Open</source> -<target>Открыть</target> - -<source>Save</source> -<target>Сохранить</target> - -<source>Last used configurations (press DEL to remove from list)</source> -<target> -ПоÑледние иÑпользованные наÑтройки Ñинхронизации -(нажмите DEL Ð´Ð»Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð¸Ð· ÑпиÑка) -</target> - <source>Hide excluded items</source> <target>Скрыть иÑключенные Ñлементы</target> @@ -525,6 +519,18 @@ The command is triggered if: <source>Time elapsed:</source> <target>Времени прошло:</target> +<source>Synchronizing...</source> +<target>СинхронизациÑ...</target> + +<source>On completion</source> +<target>По завершению</target> + +<source>Close</source> +<target></target> + +<source>&Pause</source> +<target>&Пауза</target> + <source>Batch job</source> <target>Пакетное задание</target> @@ -555,9 +561,6 @@ The command is triggered if: <source>Abort synchronization on first error</source> <target>Отменить Ñинхронизацию при первой ошибке</target> -<source>On completion</source> -<target>По завершению</target> - <source>Show progress dialog</source> <target>Показать окно прогреÑÑа</target> @@ -610,8 +613,8 @@ is the same <source><- Two way -></source> <target><= Ð’ обе Ñтороны =></target> -<source>Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically.</source> -<target>Ð’Ñ‹Ñвление и раÑпроÑтранение изменений на обе Ñтороны, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð±Ð°Ð·Ñƒ данных. Удаленные, переименованные и конфликтные файлы определÑÑŽÑ‚ÑÑ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡ÐµÑки.</target> +<source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> +<target></target> <source>Mirror ->></source> <target>Зеркало =>></target> @@ -649,15 +652,12 @@ is the same <source>Versioning</source> <target>Ðрхивировать</target> -<source>Move time-stamped files into specified folder</source> -<target>ПеремеÑтить файлы Ñ Ð¾Ñ‚Ð¼ÐµÑ‚ÐºÐ°Ð¼Ð¸ времени в указанную папку</target> +<source>Move files to user-defined folder</source> +<target></target> <source>Naming convention:</source> <target>УÑловие:</target> -<source>Configuration</source> -<target>ÐаÑтройки</target> - <source>Item exists on left side only</source> <target>Ðлемент ÑущеÑтвует только на левой Ñтороне</target> @@ -676,12 +676,6 @@ is the same <source>Conflict/item cannot be categorized</source> <target>Конфликт/Ñлемент не могут быть отнеÑены к какой-либо категории</target> -<source>Synchronizing...</source> -<target>СинхронизациÑ...</target> - -<source>&Pause</source> -<target>&Пауза</target> - <source>Source code written in C++ using:</source> <target>ИÑходный код напиÑан на C++ Ñ Ð¸Ñпользованием:</target> @@ -742,8 +736,8 @@ Note: File names must be relative to base directories! <source>Maximum</source> <target>макÑимум</target> -<source>&Default</source> -<target>&По-умолчанию</target> +<source>&Clear</source> +<target></target> <source>Fail-safe file copy</source> <target>ОтказоуÑтойчивое копирование файла</target> @@ -772,6 +766,12 @@ Note: File names must be relative to base directories! <source>Description</source> <target>ОпиÑание</target> +<source>&Default</source> +<target>&По-умолчанию</target> + +<source>Start synchronization</source> +<target>Ðачать Ñинхронизацию</target> + <source>Variant</source> <target>Вариант</target> @@ -802,12 +802,24 @@ Note: File names must be relative to base directories! <source>Overview</source> <target>ГлавнаÑ</target> +<source>Configuration</source> +<target>ÐаÑтройки</target> + <source>Filter files</source> <target>Фильтр</target> <source>Select view</source> <target>Вид ÑпиÑка файлов</target> +<source>Open...</source> +<target></target> + +<source>Save</source> +<target>Сохранить</target> + +<source>Compare both sides</source> +<target>Сравнить обе Ñтороны</target> + <source>Set direction:</source> <target>Выберите направление:</target> @@ -865,102 +877,63 @@ Note: File names must be relative to base directories! <source>FreeFileSync batch</source> <target>Пакетное задание FreeFileSync</target> -<source>Never save changes</source> -<target>Ðикогда не ÑохранÑÑ‚ÑŒ изменениÑ</target> - <source>Do you want to save changes to %x?</source> <target>Ð’Ñ‹ хотите Ñохранить Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² %x?</target> <source>Do&n't save</source> <target>&Ðе ÑохранÑÑ‚ÑŒ</target> +<source>Never save changes</source> +<target>Ðикогда не ÑохранÑÑ‚ÑŒ изменениÑ</target> + <source>Configuration loaded!</source> <target>ÐаÑтройки Ñинхронизации загружены!</target> -<source>Hide files that exist on left side only</source> -<target>Скрыть файлы, ÑущеÑтвующие только Ñлева</target> - <source>Show files that exist on left side only</source> <target>Показать файлы, ÑущеÑтвующие только Ñлева</target> -<source>Hide files that exist on right side only</source> -<target>Скрыть файлы, ÑущеÑтвующие только Ñправа</target> - <source>Show files that exist on right side only</source> <target>Показать файлы, ÑущеÑтвующие только Ñправа</target> -<source>Hide files that are newer on left</source> -<target>Скрыть файлы, которые новее Ñлева</target> - <source>Show files that are newer on left</source> <target>Показать файлы, которые новее Ñлева</target> -<source>Hide files that are newer on right</source> -<target>Скрыть файлы, которые новее Ñправа</target> - <source>Show files that are newer on right</source> <target>Показать файлы, которые новее Ñправа</target> -<source>Hide files that are equal</source> -<target>Скрыть одинаковые файлы</target> - <source>Show files that are equal</source> <target>Показать одинаковые файлы</target> -<source>Hide files that are different</source> -<target>Скрыть различающиеÑÑ Ñ„Ð°Ð¹Ð»Ñ‹</target> - <source>Show files that are different</source> <target>Показать различающиеÑÑ Ñ„Ð°Ð¹Ð»Ñ‹</target> -<source>Hide conflicts</source> -<target>Скрыть конфликтующие файлы</target> - <source>Show conflicts</source> <target>Показать конфликтующие файлы</target> -<source>Hide files that will be created on the left side</source> -<target>Скрыть файлы, которые будут Ñозданы на левой Ñтороне</target> - <source>Show files that will be created on the left side</source> <target>Показать файлы, которые будут Ñозданы на левой Ñтороне</target> -<source>Hide files that will be created on the right side</source> -<target>Скрыть файлы, которые будут Ñозданы на правой Ñтороне</target> - <source>Show files that will be created on the right side</source> <target>Показать файлы, которые будут Ñозданы на правой Ñтороне</target> -<source>Hide files that will be deleted on the left side</source> -<target>Скрыть файлы, которые будут удалены на левой Ñтороне</target> - <source>Show files that will be deleted on the left side</source> <target>Показать файлы, которые будут удалены на левой Ñтороне</target> -<source>Hide files that will be deleted on the right side</source> -<target>Скрыть файлы, которые будут удалены на правой Ñтороне</target> - <source>Show files that will be deleted on the right side</source> <target>Показать файлы, которые будут удалены на правой Ñтороне</target> -<source>Hide files that will be overwritten on left side</source> -<target>Скрыть файлы, которые будут перезапиÑаны на левой Ñтороне</target> - <source>Show files that will be overwritten on left side</source> <target>Показать файлы, которые будут перезапиÑаны на левой Ñтороне</target> -<source>Hide files that will be overwritten on right side</source> -<target>Скрыть файлы, которые будут перезапиÑаны на правой Ñтороне</target> - <source>Show files that will be overwritten on right side</source> <target>Показать файлы, которые будут перезапиÑаны на правой Ñтороне</target> -<source>Hide files that won't be copied</source> -<target>Скрыть файлы, которые не будут Ñкопированы</target> - <source>Show files that won't be copied</source> <target>Показать файлы, которые не будут Ñкопированы</target> +<source>Set as default</source> +<target></target> + <source>All folders are in sync!</source> <target>Ð’Ñе папки Ñинхронизированы!</target> @@ -973,15 +946,8 @@ Note: File names must be relative to base directories! <source>File list exported!</source> <target>СпиÑок файлов ÑкÑпортирован!</target> -<source> -<pluralform>Object deleted successfully!</pluralform> -<pluralform>%x objects deleted successfully!</pluralform> -</source> -<target> -<pluralform>%x объект удален уÑпешно!</pluralform> -<pluralform>%x объекта удалены уÑпешно!</pluralform> -<pluralform>%x объектов удалены уÑпешно!</pluralform> -</target> +<source>Searching for program updates...</source> +<target></target> <source> <pluralform>1 directory</pluralform> @@ -1019,6 +985,9 @@ Note: File names must be relative to base directories! <source>&Ignore</source> <target>&Игнорировать</target> +<source>Don't show this warning again</source> +<target></target> + <source>&Switch</source> <target>&Переключить</target> @@ -1037,9 +1006,6 @@ Note: File names must be relative to base directories! <source>Comparing content...</source> <target>Сравнение ÑодержаниÑ...</target> -<source>Copy</source> -<target>Копировать</target> - <source>Paused</source> <target>Пауза</target> @@ -1125,37 +1091,32 @@ Note: File names must be relative to base directories! <target>Сделать Ñкрытые Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ñ Ð¸ диалоги видимыми Ñнова?</target> <source> -<pluralform>Do you really want to move the following object to the Recycle Bin?</pluralform> -<pluralform>Do you really want to move the following %x objects to the Recycle Bin?</pluralform> +<pluralform>Do you really want to move the following item to the Recycle Bin?</pluralform> +<pluralform>Do you really want to move the following %x items to the Recycle Bin?</pluralform> </source> -<target> -<pluralform>Ð’Ñ‹ точно хотите перемеÑтить Ñледующий %x объект в "Корзину"?</pluralform> -<pluralform>Ð’Ñ‹ точно хотите перемеÑтить Ñледующие %x объекта в "Корзину"?</pluralform> -<pluralform>Ð’Ñ‹ точно хотите перемеÑтить Ñледующие %x объектов в "Корзину"?</pluralform> -</target> +<target></target> <source> -<pluralform>Do you really want to delete the following object?</pluralform> -<pluralform>Do you really want to delete the following %x objects?</pluralform> +<pluralform>Do you really want to delete the following item?</pluralform> +<pluralform>Do you really want to delete the following %x items?</pluralform> </source> -<target> -<pluralform>Ð’Ñ‹ точно хотите удалить Ñледующий %x объект?</pluralform> -<pluralform>Ð’Ñ‹ точно хотите удалить Ñледующие %x объекта?</pluralform> -<pluralform>Ð’Ñ‹ точно хотите удалить Ñледующие %x объектов?</pluralform> -</target> +<target></target> <source>Leave as unresolved conflict</source> <target>ОÑтавить как нерешенный конфликт</target> +<source>Time stamp</source> +<target></target> + +<source>Append a timestamp to each file name</source> +<target>Добавить отметку времени Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ имени файла</target> + <source>Replace</source> <target>ПеремеÑтить</target> <source>Move files and replace if existing</source> <target>ПеремеÑтить файлы и заменить, еÑли ÑущеÑтвуют</target> -<source>Append a timestamp to each file name</source> -<target>Добавить отметку времени Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ имени файла</target> - <source>Folder</source> <target>Папка</target> @@ -1273,6 +1234,12 @@ Note: File names must be relative to base directories! <source>Cannot set privilege %x.</source> <target>Ðе удаетÑÑ ÑƒÑтановить привелегии %x.</target> +<source>Failed to suspend system sleep mode.</source> +<target></target> + +<source>Cannot change process I/O priorities.</source> +<target></target> + <source>Unable to move %x to the Recycle Bin!</source> <target>Ðевозможно перемеÑтить %x в "Корзину"!</target> @@ -1294,14 +1261,38 @@ Note: File names must be relative to base directories! Старые файлы будут заменены более новыми файлами. </target> +<source>Checking recycle bin availability for folder %x...</source> +<target></target> + +<source>Moving file %x to recycle bin</source> +<target>Перемещение файла %x в "Корзину"</target> + +<source>Moving folder %x to recycle bin</source> +<target>Перемещение папки %x в "Корзину"</target> + +<source>Moving symbolic link %x to recycle bin</source> +<target>Перемещение Ñимвольной ÑÑылки %x в "Корзину"</target> + +<source>Deleting file %x</source> +<target>Удаление файла %x</target> + +<source>Deleting folder %x</source> +<target>Удаление папки %x</target> + +<source>Deleting symbolic link %x</source> +<target>Удаление Ñимвольной ÑÑылки %x</target> + <source>Recycle Bin is not available for the following paths! Files will be deleted permanently instead:</source> <target>Ð”Ð»Ñ Ñтого пути "Корзина" не доÑтупна! Файлы будут удалены безвозвратно:</target> -<source>You can ignore this error to consider the folder as empty.</source> -<target>Ð’Ñ‹ можете проигнорировать ошибку, принÑв папку за пуÑтую.</target> +<source>The corresponding folder will be considered as empty.</source> +<target></target> -<source>Cannot find folder %x.</source> -<target>Ðе удаетÑÑ Ð½Ð°Ð¹Ñ‚Ð¸ папку %x.</target> +<source>Cannot find the following folders:</source> +<target></target> + +<source>You can ignore this error to consider each folder as empty.</source> +<target></target> <source>Directories are dependent! Be careful when setting up synchronization rules:</source> <target>ЗавиÑимые папки! Будьте внимательны при наÑтройке правил Ñинхронизации:</target> @@ -1309,8 +1300,8 @@ Note: File names must be relative to base directories! <source>Start comparison</source> <target>Ðачать Ñравнение</target> -<source>Preparing synchronization...</source> -<target>Подготовка к Ñинхронизации...</target> +<source>Calculating sync directions...</source> +<target></target> <source>Conflict detected:</source> <target>Обнаружен конфликт:</target> @@ -1375,24 +1366,6 @@ Note: File names must be relative to base directories! <source>Multiple...</source> <target>Различные варианты Ñинхронизации</target> -<source>Deleting file %x</source> -<target>Удаление файла %x</target> - -<source>Deleting folder %x</source> -<target>Удаление папки %x</target> - -<source>Deleting symbolic link %x</source> -<target>Удаление Ñимвольной ÑÑылки %x</target> - -<source>Moving file %x to recycle bin</source> -<target>Перемещение файла %x в "Корзину"</target> - -<source>Moving folder %x to recycle bin</source> -<target>Перемещение папки %x в "Корзину"</target> - -<source>Moving symbolic link %x to recycle bin</source> -<target>Перемещение Ñимвольной ÑÑылки %x в "Корзину"</target> - <source>Moving file %x to %y</source> <target>Перемещение файла %x в %y</target> @@ -1405,9 +1378,6 @@ Note: File names must be relative to base directories! <source>Removing old versions...</source> <target>Удаление Ñтарых верÑий...</target> -<source>Creating file %x</source> -<target>Создание файла %x</target> - <source>Creating symbolic link %x</source> <target>Создание Ñимвольной ÑÑылки %x</target> @@ -1426,6 +1396,9 @@ Note: File names must be relative to base directories! <source>Updating attributes of %x</source> <target>Обновление атрибутов %x</target> +<source>Cannot find %x.</source> +<target></target> + <source>Target folder %x already existing.</source> <target>Ð¦ÐµÐ»ÐµÐ²Ð°Ñ Ð¿Ð°Ð¿ÐºÐ° %x уже ÑущеÑтвует.</target> @@ -1471,6 +1444,9 @@ Note: File names must be relative to base directories! <source>Generating database...</source> <target>Создание базы данных...</target> +<source>Creating Volume Shadow Copy for %x...</source> +<target></target> + <source>Data verification error: Source and target file have different content!</source> <target>Ошибка проверки данных: иÑходный и конечный файлы имеют разное Ñодержание!</target> diff --git a/BUILD/Languages/scottish_gaelic.lng b/BUILD/Languages/scottish_gaelic.lng index b3d635a6..0bfe3b64 100644 --- a/BUILD/Languages/scottish_gaelic.lng +++ b/BUILD/Languages/scottish_gaelic.lng @@ -19,6 +19,9 @@ <source>Total time:</source> <target>An ùine gu lèir:</target> +<source>Cannot set directory lock for %x.</source> +<target>Cha ghabh glas a' phasgain airson %x a shuidheachadh.</target> + <source>Show in Explorer</source> <target>Seall san taisgealaiche</target> @@ -40,6 +43,9 @@ <source>Error</source> <target>Mearachd</target> +<source>Selected variant:</source> +<target>An t-eug-samhail a thagh thu:</target> + <source>Select alternate comparison settings</source> <target>Tagh roghainnean coimeasaidh eile</target> @@ -58,6 +64,12 @@ <source>Clear filter settings</source> <target>Falamhaich roghainnean na criathraige</target> +<source>Copy</source> +<target>Dèan lethbhreac</target> + +<source>Paste</source> +<target>Cuir ann</target> + <source>Save as batch job</source> <target>Sà bhail mar obair baidse</target> @@ -97,11 +109,8 @@ <source>Fatal Error</source> <target>Mearachd mharbhtach</target> -<source>Windows Error Code %x:</source> -<target>Còd mearachd Windows %x:</target> - -<source>Linux Error Code %x:</source> -<target>Còd mearachd Linux %x:</target> +<source>Error Code %x:</source> +<target>Còd na mearachd %x:</target> <source>Cannot resolve symbolic link %x.</source> <target>Cha ghabh an symbolic link %x fhuasgladh.</target> @@ -162,8 +171,8 @@ <source>Waiting while directory is locked (%x)...</source> <target>A' feitheamh fhad 's a tha am pasgan glaiste (%x)...</target> -<source>Cannot set directory lock %x.</source> -<target>Cha ghabh glas a' phasgain %x a shuidheachadh.</target> +<source>Creating file %x</source> +<target>A' cruthachadh an fhaidhle %x</target> <source> <pluralform>1 sec</pluralform> @@ -199,9 +208,6 @@ <source>/sec</source> <target>/diog</target> -<source>Cannot find file %x.</source> -<target>Cha deach am faidhle %x a lorg.</target> - <source>File %x does not contain a valid configuration.</source> <target>Chan eil rèiteachadh dligheach san fhaidhle %x.</target> @@ -226,6 +232,9 @@ <source>Cannot read the following XML elements:</source> <target>Chan urrainn dhuinn na h-eileamaidean XML a leanas a leughadh:</target> +<source>Cannot find file %x.</source> +<target>Cha deach am faidhle %x a lorg.</target> + <source>&Open...</source> <target>F&osgail...</target> @@ -459,24 +468,21 @@ Thèid an loidhne-à ithne a chur gu dol: <source>&Advanced</source> <target>&Adhartach</target> -<source>&Check for new version</source> -<target>&Thoir sùil ach a bheil tionndadh nas ùire ann</target> +<source>&Check now</source> +<target>&Thoir sùil an-drà sta</target> -<source>Compare</source> -<target>Dèan coimeas</target> +<source>Check &automatically once a week</source> +<target>Thoir sùil gu &fèin-obrachail turas san t-seachdain</target> -<source>Compare both sides</source> -<target>Dèan coimeas air an dà thaobh</target> +<source>Check for new version</source> +<target>Thoir sùil ach a bheil tionndadh ùr ann</target> -<source>&Abort</source> -<target>&Sguir dheth</target> +<source>Compare</source> +<target>Dèan coimeas</target> <source>Synchronize</source> <target>Dèan sioncronachadh</target> -<source>Start synchronization</source> -<target>Tòisich air an t-sioncronachadh</target> - <source>Add folder pair</source> <target>Cuir paidhir de phasgain ris</target> @@ -486,15 +492,6 @@ Thèid an loidhne-à ithne a chur gu dol: <source>Swap sides</source> <target>Cuir an dà thaobh an à ite a chèile</target> -<source>Open</source> -<target>Fosgail</target> - -<source>Save</source> -<target>Sà bhail</target> - -<source>Last used configurations (press DEL to remove from list)</source> -<target>An rèiteachadh mu dheireadh a chaidh a chleachdadh (brùth DEL gus rudan a thoirt air falbh on liosta)</target> - <source>Hide excluded items</source> <target>Falaich nithean a chaidh a dhùnadh à s</target> @@ -525,6 +522,18 @@ Thèid an loidhne-à ithne a chur gu dol: <source>Time elapsed:</source> <target>An ùine a dh'fhalbh:</target> +<source>Synchronizing...</source> +<target>A' sioncronachadh...</target> + +<source>On completion</source> +<target>Nuair a bhios e deiseil</target> + +<source>Close</source> +<target>Dùin</target> + +<source>&Pause</source> +<target>&Cuir 'na stad</target> + <source>Batch job</source> <target>Obair baidse</target> @@ -555,9 +564,6 @@ Thèid an loidhne-à ithne a chur gu dol: <source>Abort synchronization on first error</source> <target>Sguir dhen t-sioncronachadh nuair a thachras a' chiad mhearachd</target> -<source>On completion</source> -<target>Nuair a bhios e deiseil</target> - <source>Show progress dialog</source> <target>Seall còmhradh an adhartais</target> @@ -614,8 +620,8 @@ Bidh dà fhaidhle co-ionnann 'nar beachd-sa <source><- Two way -></source> <target><- An dà chomhair -></target> -<source>Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically.</source> -<target>Lorg is cuir an sà s atharraichean air an dà thaobh le stòr-dà ta. Mothaichear do rudan a chaidh sguabadh à s, a chaidh ainmean ùra a thoirt orra no còmhstrithean gu fèin-obrachail.</target> +<source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> +<target>Lorg is sìolaich na h-atharraichean air an dà thaobh. Mothaichidh sinn do rudan a chaidh a sguabadh à s, a ghluasad no còmhstrithean gu fèin-obrachail le stòr-dà ta.</target> <source>Mirror ->></source> <target>Sgà thanaich ->></target> @@ -653,15 +659,12 @@ Bidh dà fhaidhle co-ionnann 'nar beachd-sa <source>Versioning</source> <target>Versioning</target> -<source>Move time-stamped files into specified folder</source> -<target>Gluais faidhlichean air a bheil stampa ama do phasgain shònraichte</target> +<source>Move files to user-defined folder</source> +<target>Gluais na faidhlichean dhan phasgan a shònraich an cleachdaiche</target> <source>Naming convention:</source> <target>Gnà thas nan ainmean:</target> -<source>Configuration</source> -<target>Rèiteachadh</target> - <source>Item exists on left side only</source> <target>Chan eil an nì seo ann ach air an taobh chlì</target> @@ -680,12 +683,6 @@ Bidh dà fhaidhle co-ionnann 'nar beachd-sa <source>Conflict/item cannot be categorized</source> <target>Tha còmhstri/nì ann nach urrainn dhuinn aithneachadh</target> -<source>Synchronizing...</source> -<target>A' sioncronachadh...</target> - -<source>&Pause</source> -<target>&Cuir 'na stad</target> - <source>Source code written in C++ using:</source> <target>Chaidh an còd tùsail a sgrìobhadh ann an C++ le taic:</target> @@ -746,8 +743,8 @@ An aire: Feumaidh ainmean nam faidhlichean a bhi dà imheach ris na bun-phasgain <source>Maximum</source> <target>Air a' char as motha</target> -<source>&Default</source> -<target>&Bun-roghainn</target> +<source>&Clear</source> +<target>Fala&mhaich</target> <source>Fail-safe file copy</source> <target>Dèan lethbhreac nach gabh fà illigeadh</target> @@ -776,6 +773,12 @@ An aire: Feumaidh ainmean nam faidhlichean a bhi dà imheach ris na bun-phasgain <source>Description</source> <target>Tuairisgeul</target> +<source>&Default</source> +<target>&Bun-roghainn</target> + +<source>Start synchronization</source> +<target>Tòisich air an t-sioncronachadh</target> + <source>Variant</source> <target>Eugsamhail</target> @@ -806,12 +809,24 @@ An aire: Feumaidh ainmean nam faidhlichean a bhi dà imheach ris na bun-phasgain <source>Overview</source> <target>Foir-shealladh</target> +<source>Configuration</source> +<target>Rèiteachadh</target> + <source>Filter files</source> <target>Criathraich na faidhlichean</target> <source>Select view</source> <target>Tagh sealladh</target> +<source>Open...</source> +<target>Fosgail...</target> + +<source>Save</source> +<target>Sà bhail</target> + +<source>Compare both sides</source> +<target>Dèan coimeas air an dà thaobh</target> + <source>Set direction:</source> <target>Suidhich a' chomhair:</target> @@ -869,102 +884,63 @@ An aire: Feumaidh ainmean nam faidhlichean a bhi dà imheach ris na bun-phasgain <source>FreeFileSync batch</source> <target>FreeFileSync batch</target> -<source>Never save changes</source> -<target>Na sà bhail atharraichean idir</target> - <source>Do you want to save changes to %x?</source> <target>An sà bhail sinn dhut na h-atharraichean air %x?</target> <source>Do&n't save</source> <target>&Na sà bhail</target> +<source>Never save changes</source> +<target>Na sà bhail atharraichean idir</target> + <source>Configuration loaded!</source> <target>Chaidh an rèiteachadh a luchdadh!</target> -<source>Hide files that exist on left side only</source> -<target>Na falaich ach faidhlichean a tha air an taobh chlì a-mhà in</target> - <source>Show files that exist on left side only</source> <target>Na seall ach faidhlichean a tha air an taobh chlì a-mhà in</target> -<source>Hide files that exist on right side only</source> -<target>Na falaich ach faidhlichean a tha air an taobh deas a-mhà in</target> - <source>Show files that exist on right side only</source> <target>Na seall ach faidhlichean a tha air an taobh deas a-mhà in</target> -<source>Hide files that are newer on left</source> -<target>Falaich faidhlichean a tha nas ùire air an taobh chlì</target> - <source>Show files that are newer on left</source> <target>Seall faidhlichean a tha nas ùire air an taobh chlì</target> -<source>Hide files that are newer on right</source> -<target>Falaich faidhlichean a tha nas ùire air an taobh deas</target> - <source>Show files that are newer on right</source> <target>Seall faidhlichean a tha nas ùire air an taobh deas</target> -<source>Hide files that are equal</source> -<target>Falaich faidhlichean a tha co-ionnann</target> - <source>Show files that are equal</source> <target>Seall faidhlichean a tha co-ionnann</target> -<source>Hide files that are different</source> -<target>Falaich faidhlichean a tha eadar-dhealaichte</target> - <source>Show files that are different</source> <target>Seall faidhlichean a tha eadar-dhealaichte</target> -<source>Hide conflicts</source> -<target>Falaich còmhstrithean</target> - <source>Show conflicts</source> <target>Seall còmhstrithean</target> -<source>Hide files that will be created on the left side</source> -<target>Falaich faidhlichean a thèid a chruthachadh air an taobh chlì</target> - <source>Show files that will be created on the left side</source> <target>Seall faidhlichean a thèid a chruthachadh air an taobh chlì</target> -<source>Hide files that will be created on the right side</source> -<target>Falaich faidhlichean a thèid a chruthachadh air an taobh deas</target> - <source>Show files that will be created on the right side</source> <target>Seall faidhlichean a thèid a chruthachadh air an taobh deas</target> -<source>Hide files that will be deleted on the left side</source> -<target>Falaich faidhlichean a thèid a sguabadh à s air an taobh chlì</target> - <source>Show files that will be deleted on the left side</source> <target>Seall faidhlichean a thèid a sguabadh à s air an taobh chlì</target> -<source>Hide files that will be deleted on the right side</source> -<target>Falaich faidhlichean a thèid a sguabadh à s air an taobh deas</target> - <source>Show files that will be deleted on the right side</source> <target>Seall faidhlichean a thèid a sguabadh à s air an taobh deas</target> -<source>Hide files that will be overwritten on left side</source> -<target>Falaich faidhlichean a thèid a thar-sgrìobhadh air an taobh chlì</target> - <source>Show files that will be overwritten on left side</source> <target>Seall faidhlichean a thèid a thar-sgrìobhadh air an taobh chlì</target> -<source>Hide files that will be overwritten on right side</source> -<target>Falaich faidhlichean a thèid a thar-sgrìobhadh air an taobh deas</target> - <source>Show files that will be overwritten on right side</source> <target>Seall faidhlichean a thèid a thar-sgrìobhadh air an taobh deas</target> -<source>Hide files that won't be copied</source> -<target>Falaich faidhlichean nach dèid lethbhreac a dhèanamh dhiubh</target> - <source>Show files that won't be copied</source> <target>Seall faidhlichean nach dèid lethbhreac a dhèanamh dhiubh</target> +<source>Set as default</source> +<target>Suidhich mar a' bhun-roghainn</target> + <source>All folders are in sync!</source> <target>Tha gach pasgan air a shioncronachadh!</target> @@ -977,16 +953,8 @@ An aire: Feumaidh ainmean nam faidhlichean a bhi dà imheach ris na bun-phasgain <source>File list exported!</source> <target>Chaidh liosta nam faidhle à s-phortadh!</target> -<source> -<pluralform>Object deleted successfully!</pluralform> -<pluralform>%x objects deleted successfully!</pluralform> -</source> -<target> -<pluralform>Chaidh %x oibseact a sguabadh à s!</pluralform> -<pluralform>Chaidh %x oibseact a sguabadh à s!</pluralform> -<pluralform>Chaidh %x oibseactan a sguabadh à s!</pluralform> -<pluralform>Chaidh %x oibseact a sguabadh à s!</pluralform> -</target> +<source>Searching for program updates...</source> +<target>A' lorg ùrachaidhean a' phrògraim...</target> <source> <pluralform>1 directory</pluralform> @@ -1027,6 +995,9 @@ An aire: Feumaidh ainmean nam faidhlichean a bhi dà imheach ris na bun-phasgain <source>&Ignore</source> <target>&Leig seachad</target> +<source>Don't show this warning again</source> +<target>Na seall an rabhadh seo a-rithist</target> + <source>&Switch</source> <target>&Dèan suids</target> @@ -1045,9 +1016,6 @@ An aire: Feumaidh ainmean nam faidhlichean a bhi dà imheach ris na bun-phasgain <source>Comparing content...</source> <target>A' dèanamh coimeas eadar an cuid susbaint...</target> -<source>Copy</source> -<target>Dèan lethbhreac</target> - <source>Paused</source> <target>'Na stad</target> @@ -1130,39 +1098,42 @@ An aire: Feumaidh ainmean nam faidhlichean a bhi dà imheach ris na bun-phasgain <target>A bheil thus airson na rabhaidhean 's còmraidhean falaichte fhaicinn a-rithist?</target> <source> -<pluralform>Do you really want to move the following object to the Recycle Bin?</pluralform> -<pluralform>Do you really want to move the following %x objects to the Recycle Bin?</pluralform> +<pluralform>Do you really want to move the following item to the Recycle Bin?</pluralform> +<pluralform>Do you really want to move the following %x items to the Recycle Bin?</pluralform> </source> <target> -<pluralform>A bheil thu cinnteach gu bheil thu airson an %x oibseact seo a chur dhan bhiona ath-chuairteachaidh?</pluralform> -<pluralform>A bheil thu cinnteach gu bheil thu airson an %x oibseact seo a chur dhan bhiona ath-chuairteachaidh?</pluralform> -<pluralform>A bheil thu cinnteach gu bheil thu airson na %x oibseactan seo a chur dhan bhiona ath-chuairteachaidh?</pluralform> -<pluralform>A bheil thu cinnteach gu bheil thu airson na %x oibseact seo a chur dhan bhiona ath-chuairteachaidh?</pluralform> +<pluralform>A bheil thu cinnteach gu bheil thu airson an nì a leanas a chur dhan bhiona?</pluralform> +<pluralform>A bheil thu cinnteach gu bheil thu airson an %x nì a leanas a chur dhan bhiona?</pluralform> +<pluralform>A bheil thu cinnteach gu bheil thu airson na %x nithean a leanas a chur dhan bhiona?</pluralform> +<pluralform>A bheil thu cinnteach gu bheil thu airson na %x nì a leanas a chur dhan bhiona?</pluralform> </target> <source> -<pluralform>Do you really want to delete the following object?</pluralform> -<pluralform>Do you really want to delete the following %x objects?</pluralform> +<pluralform>Do you really want to delete the following item?</pluralform> +<pluralform>Do you really want to delete the following %x items?</pluralform> </source> <target> -<pluralform>A bheil thu cinnteach gu bheil thu airson an %x oibseact seo a sguabadh à s?</pluralform> -<pluralform>A bheil thu cinnteach gu bheil thu airson an %x oibseact seo a sguabadh à s?</pluralform> -<pluralform>A bheil thu cinnteach gu bheil thu airson na %x oibseactan seo a sguabadh à s?</pluralform> -<pluralform>A bheil thu cinnteach gu bheil thu airson na %x oibseact seo a sguabadh à s?</pluralform> +<pluralform>A bheil thu cinnteach gu bheil thu airso an nì a leanas a sguabadh à s?</pluralform> +<pluralform>A bheil thu cinnteach gu bheil thu airso an %x nì a leanas a sguabadh à s?</pluralform> +<pluralform>A bheil thu cinnteach gu bheil thu airso na %x nithean a leanas a sguabadh à s?</pluralform> +<pluralform>A bheil thu cinnteach gu bheil thu airso na %x nì a leanas a sguabadh à s?</pluralform> </target> <source>Leave as unresolved conflict</source> <target>Fà g mar còmhstri gun rèiteachadh</target> +<source>Time stamp</source> +<target>Stampa ama</target> + +<source>Append a timestamp to each file name</source> +<target>Cuir stampa-ama ris ainm gach faidhle</target> + <source>Replace</source> <target>Cuir 'na à ite</target> <source>Move files and replace if existing</source> <target>Gluais na faidhlichean 's cuir iad an à ite na feadhainn là ithreach ma tha gin ann</target> -<source>Append a timestamp to each file name</source> -<target>Cuir stampa-ama ris ainm gach faidhle</target> - <source>Folder</source> <target>Pasgan</target> @@ -1283,6 +1254,12 @@ An aire: Feumaidh ainmean nam faidhlichean a bhi dà imheach ris na bun-phasgain <source>Cannot set privilege %x.</source> <target>Cha ghabh a' phribhleid %x a shuidheachadh.</target> +<source>Failed to suspend system sleep mode.</source> +<target>Cha b' urrainn dhuinn modh cadal an t-siostaim a chur dheth.</target> + +<source>Cannot change process I/O priorities.</source> +<target>Chan urrainn dhuinn na prìomhachasan I/O atharrachadh.</target> + <source>Unable to move %x to the Recycle Bin!</source> <target>Chan urrainn dhuinn %x a ghluasad dhan bhiona ath-chuairteachaidh!</target> @@ -1301,14 +1278,38 @@ An aire: Feumaidh ainmean nam faidhlichean a bhi dà imheach ris na bun-phasgain <source>Setting default synchronization directions: Old files will be overwritten with newer files.</source> <target>A' suidheachadh comhair bhunaiteach an t-sioncronachaidh: Thèid faidhlichean nas ùire a sgrìobhadh thairis air seann-fhaidhlichean.</target> +<source>Checking recycle bin availability for folder %x...</source> +<target>A' toirt sùil a bheil am biona ri fhaighin airson a' phasgain %x...</target> + +<source>Moving file %x to recycle bin</source> +<target>A' gluasad an fhaidhle %x dhan bhiona ath-chuairteachaidh</target> + +<source>Moving folder %x to recycle bin</source> +<target>A' gluasad a' phasgain %x dhan bhiona ath-chuairteachaidh</target> + +<source>Moving symbolic link %x to recycle bin</source> +<target>A' gluasad an symbolic link %x dhan bhiona ath-chuairteachaidh</target> + +<source>Deleting file %x</source> +<target>A' sguabadh à s an fhaidhle %x</target> + +<source>Deleting folder %x</source> +<target>A' sguabadh à s a' phasgain %x</target> + +<source>Deleting symbolic link %x</source> +<target>A' sguabadh à s an symbolic link %x</target> + <source>Recycle Bin is not available for the following paths! Files will be deleted permanently instead:</source> <target>Chan eil am biona ath-chuairteachaidh ri là imh nan slighean a leanas! Thèid na faidhlichean a sguabhadh à s gu buan an à ite sin:</target> -<source>You can ignore this error to consider the folder as empty.</source> -<target>'S urrainn dhut a' mhearachd seo a leigeil seachad gus am pasgan a là imhseachadh mar gum biodh e falamh.</target> +<source>The corresponding folder will be considered as empty.</source> +<target>Thèid am pasgan a leanas a là imhseachadh mar phasgan falamh.</target> -<source>Cannot find folder %x.</source> -<target>Chan urrainn dhuinn am pasgan %x a lorg.</target> +<source>Cannot find the following folders:</source> +<target>Chan urrainn dhuinn na pasgain a leanas a lorg:</target> + +<source>You can ignore this error to consider each folder as empty.</source> +<target>'S urrainn dhut a' mhearachd seo a leigeil seachad airson 's gun dèid gach pasgan a là imhseachadh mar phasgan falamh.</target> <source>Directories are dependent! Be careful when setting up synchronization rules:</source> <target>Tha na pasgain an eisimeil a chèile! Bi faiceallach nuair a shuidhicheas tu na riaghailtean sioncronachaidh:</target> @@ -1316,8 +1317,8 @@ An aire: Feumaidh ainmean nam faidhlichean a bhi dà imheach ris na bun-phasgain <source>Start comparison</source> <target>Dèan coimeas</target> -<source>Preparing synchronization...</source> -<target>Ag ullachadh an t-sioncronachaidh...</target> +<source>Calculating sync directions...</source> +<target>Ag à ireamhachadh comhairean an t-sioncronachaidh...</target> <source>Conflict detected:</source> <target>Mhothaich sinn do chòmhstri:</target> @@ -1382,24 +1383,6 @@ An aire: Feumaidh ainmean nam faidhlichean a bhi dà imheach ris na bun-phasgain <source>Multiple...</source> <target>Iomadh fear...</target> -<source>Deleting file %x</source> -<target>A' sguabadh à s an fhaidhle %x</target> - -<source>Deleting folder %x</source> -<target>A' sguabadh à s a' phasgain %x</target> - -<source>Deleting symbolic link %x</source> -<target>A' sguabadh à s an symbolic link %x</target> - -<source>Moving file %x to recycle bin</source> -<target>A' gluasad an fhaidhle %x dhan bhiona ath-chuairteachaidh</target> - -<source>Moving folder %x to recycle bin</source> -<target>A' gluasad a' phasgain %x dhan bhiona ath-chuairteachaidh</target> - -<source>Moving symbolic link %x to recycle bin</source> -<target>A' gluasad an symbolic link %x dhan bhiona ath-chuairteachaidh</target> - <source>Moving file %x to %y</source> <target>A' gluasad an fhaidhle %x gu %y</target> @@ -1412,9 +1395,6 @@ An aire: Feumaidh ainmean nam faidhlichean a bhi dà imheach ris na bun-phasgain <source>Removing old versions...</source> <target>A' toirt air falbh nan seann tionndaidhean...</target> -<source>Creating file %x</source> -<target>A' cruthachadh an fhaidhle %x</target> - <source>Creating symbolic link %x</source> <target>A' cruthachadh an symbolic link %x</target> @@ -1433,6 +1413,9 @@ An aire: Feumaidh ainmean nam faidhlichean a bhi dà imheach ris na bun-phasgain <source>Updating attributes of %x</source> <target>Ag ùrachadh buadhan %x</target> +<source>Cannot find %x.</source> +<target>Cha ghabh %x a lorg.</target> + <source>Target folder %x already existing.</source> <target>Tha am pasgan-uidhe %x ann mu thrà th.</target> @@ -1478,6 +1461,9 @@ An aire: Feumaidh ainmean nam faidhlichean a bhi dà imheach ris na bun-phasgain <source>Generating database...</source> <target>A' gintinn an stòir-dhà ta...</target> +<source>Creating Volume Shadow Copy for %x...</source> +<target>A' cruthachadh Volume Shadow Copy de %x...</target> + <source>Data verification error: Source and target file have different content!</source> <target>Mearachd dearbhadh an dà ta: Tha susbaint eadar-dhealaichte san fhaidhle tùsail is san targaid!</target> diff --git a/BUILD/Languages/slovenian.lng b/BUILD/Languages/slovenian.lng index 4a916632..9a6ce1cf 100644 --- a/BUILD/Languages/slovenian.lng +++ b/BUILD/Languages/slovenian.lng @@ -19,6 +19,9 @@ <source>Total time:</source> <target>Celoten Äas:</target> +<source>Cannot set directory lock for %x.</source> +<target></target> + <source>Show in Explorer</source> <target>Prikaži v Raziskovalcu</target> @@ -40,6 +43,9 @@ <source>Error</source> <target>Napaka</target> +<source>Selected variant:</source> +<target></target> + <source>Select alternate comparison settings</source> <target>Izberite alternativne nastavitve primerjanja</target> @@ -58,6 +64,12 @@ <source>Clear filter settings</source> <target>PoÄisti nastavitve filtra</target> +<source>Copy</source> +<target>Kopiraj</target> + +<source>Paste</source> +<target></target> + <source>Save as batch job</source> <target>Shrani kot paketno opravilo</target> @@ -97,11 +109,8 @@ <source>Fatal Error</source> <target>Usodna napaka</target> -<source>Windows Error Code %x:</source> -<target>Windows koda napake %x:</target> - -<source>Linux Error Code %x:</source> -<target>Linux koda napake %x:</target> +<source>Error Code %x:</source> +<target></target> <source>Cannot resolve symbolic link %x.</source> <target>Ne morem razreÅ¡iti simboliÄne povezave %x.</target> @@ -162,8 +171,8 @@ <source>Waiting while directory is locked (%x)...</source> <target>ÄŒakam, medtem ko se zaklepa imenik (%x)...</target> -<source>Cannot set directory lock %x.</source> -<target>Ne morem nastaviti zaklepanja imenika %x.</target> +<source>Creating file %x</source> +<target>Ustvarjam datoteko %x</target> <source> <pluralform>1 sec</pluralform> @@ -199,9 +208,6 @@ <source>/sec</source> <target>/sek</target> -<source>Cannot find file %x.</source> -<target>Ne morem najti datoteke %x.</target> - <source>File %x does not contain a valid configuration.</source> <target>Datoteka %x ne vsebuje veljavnih nastavitev</target> @@ -226,6 +232,9 @@ <source>Cannot read the following XML elements:</source> <target>Ne morem brati naslednje XML elemente:</target> +<source>Cannot find file %x.</source> +<target>Ne morem najti datoteke %x.</target> + <source>&Open...</source> <target>&Odpri...</target> @@ -459,24 +468,21 @@ Ukaz se sproži Äe: <source>&Advanced</source> <target>&Napredno</target> -<source>&Check for new version</source> -<target>&Preveri za novo razliÄico</target> +<source>&Check now</source> +<target></target> -<source>Compare</source> -<target>Primerjaj</target> +<source>Check &automatically once a week</source> +<target></target> -<source>Compare both sides</source> -<target>Primerjaj obe strani</target> +<source>Check for new version</source> +<target></target> -<source>&Abort</source> -<target>&Prekini</target> +<source>Compare</source> +<target>Primerjaj</target> <source>Synchronize</source> <target>Sinhroniziraj</target> -<source>Start synchronization</source> -<target>ZaÄni sinhronizacijo</target> - <source>Add folder pair</source> <target>Dodaj par imenikov</target> @@ -486,15 +492,6 @@ Ukaz se sproži Äe: <source>Swap sides</source> <target>Zamenjaj strani</target> -<source>Open</source> -<target>Odpri</target> - -<source>Save</source> -<target>Shrani</target> - -<source>Last used configurations (press DEL to remove from list)</source> -<target>Zadnje uporabljene konfiguracije (pritisite DEL za odstranitev s seznama)</target> - <source>Hide excluded items</source> <target>Skrij izkljuÄene predmete</target> @@ -525,6 +522,18 @@ Ukaz se sproži Äe: <source>Time elapsed:</source> <target>PreteÄeni Äas:</target> +<source>Synchronizing...</source> +<target>Sinhroniziram...</target> + +<source>On completion</source> +<target>Ob zakljuÄku</target> + +<source>Close</source> +<target></target> + +<source>&Pause</source> +<target>&Premor</target> + <source>Batch job</source> <target>Paketno opravilo</target> @@ -555,9 +564,6 @@ Ukaz se sproži Äe: <source>Abort synchronization on first error</source> <target>Prekini sinhronizacijo ob prvi napaki</target> -<source>On completion</source> -<target>Ob zakljuÄku</target> - <source>Show progress dialog</source> <target>Prikazuj pogovorno okno z napredkom</target> @@ -615,8 +621,8 @@ enaka <source><- Two way -></source> <target><- Obojesmerno -></target> -<source>Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically.</source> -<target>Identificiraj in promoviraj spremembe na obeh straneh z uporabo podatkovne baze. Izbrisi, preimenovanja in spori so samodejno zaznani.</target> +<source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> +<target></target> <source>Mirror ->></source> <target>Zrcalno ->></target> @@ -654,15 +660,12 @@ enaka <source>Versioning</source> <target>Ustvarjanje razliÄiÄ</target> -<source>Move time-stamped files into specified folder</source> -<target>Premakni Äasovno-oznaÄene datoteke v doloÄeno mapo</target> +<source>Move files to user-defined folder</source> +<target></target> <source>Naming convention:</source> <target>Konvencija poimenovanja:</target> -<source>Configuration</source> -<target>Konfiguracija</target> - <source>Item exists on left side only</source> <target>Element obstaja samo na levi strani</target> @@ -681,12 +684,6 @@ enaka <source>Conflict/item cannot be categorized</source> <target>Spor/element ne more biti kategoriziran</target> -<source>Synchronizing...</source> -<target>Sinhroniziram...</target> - -<source>&Pause</source> -<target>&Premor</target> - <source>Source code written in C++ using:</source> <target>Izvorna koda napisana v C++ z uporabo:</target> @@ -747,8 +744,8 @@ Opomba: Imena datoteka morajo biti relativna osnovnim imenikom! <source>Maximum</source> <target>Maksimum</target> -<source>&Default</source> -<target>&Privzeto</target> +<source>&Clear</source> +<target></target> <source>Fail-safe file copy</source> <target>Kopiranje datotek varno pred odpovedjo</target> @@ -777,6 +774,12 @@ Opomba: Imena datoteka morajo biti relativna osnovnim imenikom! <source>Description</source> <target>Opis</target> +<source>&Default</source> +<target>&Privzeto</target> + +<source>Start synchronization</source> +<target>ZaÄni sinhronizacijo</target> + <source>Variant</source> <target>RazliÄica</target> @@ -807,12 +810,24 @@ Opomba: Imena datoteka morajo biti relativna osnovnim imenikom! <source>Overview</source> <target>Pregled</target> +<source>Configuration</source> +<target>Konfiguracija</target> + <source>Filter files</source> <target>Filtriraj datoteke</target> <source>Select view</source> <target>Izberite pogled</target> +<source>Open...</source> +<target></target> + +<source>Save</source> +<target>Shrani</target> + +<source>Compare both sides</source> +<target>Primerjaj obe strani</target> + <source>Set direction:</source> <target>Nastavi smer:</target> @@ -870,102 +885,63 @@ Opomba: Imena datoteka morajo biti relativna osnovnim imenikom! <source>FreeFileSync batch</source> <target>FreeFileSync paket</target> -<source>Never save changes</source> -<target>Nikoli ne shrani sprememb</target> - <source>Do you want to save changes to %x?</source> <target>Ali želite shraniti spremembe v %x?</target> <source>Do&n't save</source> <target>Ne shra&ni</target> +<source>Never save changes</source> +<target>Nikoli ne shrani sprememb</target> + <source>Configuration loaded!</source> <target>Konfiguracija naložena!</target> -<source>Hide files that exist on left side only</source> -<target>Skrij datoteke, ki obstajajo samo na levi strani</target> - <source>Show files that exist on left side only</source> <target>Prikaži datoteke, ki obstajajo samo na levi</target> -<source>Hide files that exist on right side only</source> -<target>Skrij datoteke, ki obstajajo samo na desni strani</target> - <source>Show files that exist on right side only</source> <target>Prikaži datoteke, ki obstajajo samo na desni</target> -<source>Hide files that are newer on left</source> -<target>Skrij najnovejÅ¡e datoteke na levi</target> - <source>Show files that are newer on left</source> <target>Prikaži datoteke, ki so novejÅ¡e na levi</target> -<source>Hide files that are newer on right</source> -<target>Skrij najnovejÅ¡e datoteke na desni</target> - <source>Show files that are newer on right</source> <target>Prikaži datoteke, ki so novejÅ¡e na desni</target> -<source>Hide files that are equal</source> -<target>Skrij enake datoteke</target> - <source>Show files that are equal</source> <target>Prikaži datoteke, ki so enake</target> -<source>Hide files that are different</source> -<target>Skrij datoteke ki so razliÄne</target> - <source>Show files that are different</source> <target>Prikaži datoteke, ki so razliÄne</target> -<source>Hide conflicts</source> -<target>Skrij spore</target> - <source>Show conflicts</source> <target>Prikaži spore</target> -<source>Hide files that will be created on the left side</source> -<target>Skrij datoteke, ki bodo ustvarjene na levi strani</target> - <source>Show files that will be created on the left side</source> <target>Prikaži datoteke, ki bodo ustvarjene na levi strani</target> -<source>Hide files that will be created on the right side</source> -<target>Skrij datoteke, ki bodo ustvarjene na desni strani</target> - <source>Show files that will be created on the right side</source> <target>Prikaži datoteke, ki bodo ustvarjene na desni strani</target> -<source>Hide files that will be deleted on the left side</source> -<target>Skrij datoteke, ki bodo izbrisane na levi strani</target> - <source>Show files that will be deleted on the left side</source> <target>Prikaži datoteke, ki bodo izbrisane na levi strani</target> -<source>Hide files that will be deleted on the right side</source> -<target>Skrij datoteke, ki bodo izbrisane na desni strani</target> - <source>Show files that will be deleted on the right side</source> <target>Prikaži datoteke, ki bodo izbrisane na desni strani</target> -<source>Hide files that will be overwritten on left side</source> -<target>Skrij datoteke, ki bodo prepisane na levi strani</target> - <source>Show files that will be overwritten on left side</source> <target>Prikaži datoteke, ki bodo prepisane na levi strani</target> -<source>Hide files that will be overwritten on right side</source> -<target>Skrij datoteke, ki bodo prepisane na desni strani</target> - <source>Show files that will be overwritten on right side</source> <target>Prikaži datoteke, ki bodo prepisane na desni strani</target> -<source>Hide files that won't be copied</source> -<target>Skrij datoteke, ki ne bodo kopirane</target> - <source>Show files that won't be copied</source> <target>Prikaži datoteke, ki ne bodo kopirane</target> +<source>Set as default</source> +<target></target> + <source>All folders are in sync!</source> <target>Vse mape so sinhronizirane!</target> @@ -978,16 +954,8 @@ Opomba: Imena datoteka morajo biti relativna osnovnim imenikom! <source>File list exported!</source> <target>Seznam datotek je bil izvožen!</target> -<source> -<pluralform>Object deleted successfully!</pluralform> -<pluralform>%x objects deleted successfully!</pluralform> -</source> -<target> -<pluralform>Objekt uspeÅ¡no izbrisan!</pluralform> -<pluralform>%x objekta uspeÅ¡no izbrisana!</pluralform> -<pluralform>%x objekti uspeÅ¡no izbrisani!</pluralform> -<pluralform>%x objektov uspeÅ¡no izbrisanih!</pluralform> -</target> +<source>Searching for program updates...</source> +<target></target> <source> <pluralform>1 directory</pluralform> @@ -1028,6 +996,9 @@ Opomba: Imena datoteka morajo biti relativna osnovnim imenikom! <source>&Ignore</source> <target>&Ignoriraj</target> +<source>Don't show this warning again</source> +<target></target> + <source>&Switch</source> <target>&Preklopi</target> @@ -1046,9 +1017,6 @@ Opomba: Imena datoteka morajo biti relativna osnovnim imenikom! <source>Comparing content...</source> <target>Primerjam vsebino...</target> -<source>Copy</source> -<target>Kopiraj</target> - <source>Paused</source> <target>Na premoru</target> @@ -1131,39 +1099,32 @@ Opomba: Imena datoteka morajo biti relativna osnovnim imenikom! <target>Ponovno prikažem vsa skrita obvestila in pogovore?</target> <source> -<pluralform>Do you really want to move the following object to the Recycle Bin?</pluralform> -<pluralform>Do you really want to move the following %x objects to the Recycle Bin?</pluralform> +<pluralform>Do you really want to move the following item to the Recycle Bin?</pluralform> +<pluralform>Do you really want to move the following %x items to the Recycle Bin?</pluralform> </source> -<target> -<pluralform>Ali resniÄno želite premakniti naslednji objekt v KoÅ¡?</pluralform> -<pluralform>Ali resniÄno želite premakniti naslednja %x objekta v KoÅ¡?</pluralform> -<pluralform>Ali resniÄno želite premakniti naslednje %x objekte v KoÅ¡?</pluralform> -<pluralform>Ali resniÄno želite premakniti naslednjih %x objektov v KoÅ¡?</pluralform> -</target> +<target></target> <source> -<pluralform>Do you really want to delete the following object?</pluralform> -<pluralform>Do you really want to delete the following %x objects?</pluralform> +<pluralform>Do you really want to delete the following item?</pluralform> +<pluralform>Do you really want to delete the following %x items?</pluralform> </source> -<target> -<pluralform>Ali resniÄno želite izbrisati naslednji objekt?</pluralform> -<pluralform>Ali resniÄno želite izbrisati naslednja %x objekta?</pluralform> -<pluralform>Ali resniÄno želite izbrisati naslednje %x objekte?</pluralform> -<pluralform>Ali resniÄno želite izbrisati naslednjih %x objektov?</pluralform> -</target> +<target></target> <source>Leave as unresolved conflict</source> <target>Pusti kot nereÅ¡eni spor</target> +<source>Time stamp</source> +<target></target> + +<source>Append a timestamp to each file name</source> +<target>Dodaj Äasovno oznako k vsakemu imenu datoteke</target> + <source>Replace</source> <target>Zamenjaj</target> <source>Move files and replace if existing</source> <target>Premakne datoteke in jih zamenja, Äe obstajajo</target> -<source>Append a timestamp to each file name</source> -<target>Dodaj Äasovno oznako k vsakemu imenu datoteke</target> - <source>Folder</source> <target>Mapa</target> @@ -1284,6 +1245,12 @@ Opomba: Imena datoteka morajo biti relativna osnovnim imenikom! <source>Cannot set privilege %x.</source> <target>Ne morem nastaviti privilegija %x.</target> +<source>Failed to suspend system sleep mode.</source> +<target></target> + +<source>Cannot change process I/O priorities.</source> +<target></target> + <source>Unable to move %x to the Recycle Bin!</source> <target>Ne morem premakniti %x v KoÅ¡</target> @@ -1302,14 +1269,38 @@ Opomba: Imena datoteka morajo biti relativna osnovnim imenikom! <source>Setting default synchronization directions: Old files will be overwritten with newer files.</source> <target>Nastavljanje privzetih smeri sinhronizacije: Stare datoteke bodo prepisane z novimi datotekami.</target> +<source>Checking recycle bin availability for folder %x...</source> +<target></target> + +<source>Moving file %x to recycle bin</source> +<target>Premikam datoteko %x v koÅ¡</target> + +<source>Moving folder %x to recycle bin</source> +<target>Premikam mapo %x v koÅ¡</target> + +<source>Moving symbolic link %x to recycle bin</source> +<target>Premikam simboliÄno povezavo %x v koÅ¡</target> + +<source>Deleting file %x</source> +<target>Brisanje datoteke %x</target> + +<source>Deleting folder %x</source> +<target>Brisanje mape %x</target> + +<source>Deleting symbolic link %x</source> +<target>Brisanje simboliÄnih povezav %x</target> + <source>Recycle Bin is not available for the following paths! Files will be deleted permanently instead:</source> <target>KoÅ¡ ni na voljo za naslednje poti! Namesto tega bodo datoteke trajno izbrisane:</target> -<source>You can ignore this error to consider the folder as empty.</source> -<target>To napako, da upoÅ¡tevate mapo kot prazno, lahko ignorirate</target> +<source>The corresponding folder will be considered as empty.</source> +<target></target> + +<source>Cannot find the following folders:</source> +<target></target> -<source>Cannot find folder %x.</source> -<target>Ne morem najti mape %x.</target> +<source>You can ignore this error to consider each folder as empty.</source> +<target></target> <source>Directories are dependent! Be careful when setting up synchronization rules:</source> <target>Imeniki so v odvisnosti! Bodite pozorni, ko nastavljate sinhronizacijska pravila:</target> @@ -1317,8 +1308,8 @@ Opomba: Imena datoteka morajo biti relativna osnovnim imenikom! <source>Start comparison</source> <target>ZaÄni primerjavo</target> -<source>Preparing synchronization...</source> -<target>Pripravljam sinhronizacijo...</target> +<source>Calculating sync directions...</source> +<target></target> <source>Conflict detected:</source> <target>Zaznan spor:</target> @@ -1383,24 +1374,6 @@ Opomba: Imena datoteka morajo biti relativna osnovnim imenikom! <source>Multiple...</source> <target>VeÄkratno...</target> -<source>Deleting file %x</source> -<target>Brisanje datoteke %x</target> - -<source>Deleting folder %x</source> -<target>Brisanje mape %x</target> - -<source>Deleting symbolic link %x</source> -<target>Brisanje simboliÄnih povezav %x</target> - -<source>Moving file %x to recycle bin</source> -<target>Premikam datoteko %x v koÅ¡</target> - -<source>Moving folder %x to recycle bin</source> -<target>Premikam mapo %x v koÅ¡</target> - -<source>Moving symbolic link %x to recycle bin</source> -<target>Premikam simboliÄno povezavo %x v koÅ¡</target> - <source>Moving file %x to %y</source> <target>Premikam datoteko %x v %y</target> @@ -1413,9 +1386,6 @@ Opomba: Imena datoteka morajo biti relativna osnovnim imenikom! <source>Removing old versions...</source> <target>Odstranjujem stare razliÄice...</target> -<source>Creating file %x</source> -<target>Ustvarjam datoteko %x</target> - <source>Creating symbolic link %x</source> <target>Ustvarjam simboliÄno povezavo %x</target> @@ -1434,6 +1404,9 @@ Opomba: Imena datoteka morajo biti relativna osnovnim imenikom! <source>Updating attributes of %x</source> <target>Posodabljam atribute od %x</target> +<source>Cannot find %x.</source> +<target></target> + <source>Target folder %x already existing.</source> <target>Ciljna mapa %x že obstaja.</target> @@ -1479,6 +1452,9 @@ Opomba: Imena datoteka morajo biti relativna osnovnim imenikom! <source>Generating database...</source> <target>Ustvarjam podatkovno bazo...</target> +<source>Creating Volume Shadow Copy for %x...</source> +<target></target> + <source>Data verification error: Source and target file have different content!</source> <target>Napaka pri preverjanju podatkov: izvorna in ciljna datoteka imata razliÄno vsebino!</target> diff --git a/BUILD/Languages/spanish.lng b/BUILD/Languages/spanish.lng index 69caeef0..084477df 100644 --- a/BUILD/Languages/spanish.lng +++ b/BUILD/Languages/spanish.lng @@ -19,6 +19,9 @@ <source>Total time:</source> <target>Tiempo total:</target> +<source>Cannot set directory lock for %x.</source> +<target>No se pudo bloquear el directorio %x.</target> + <source>Show in Explorer</source> <target>Mostrar en Explorer</target> @@ -40,6 +43,9 @@ <source>Error</source> <target>Error</target> +<source>Selected variant:</source> +<target>Seleccionar variante:</target> + <source>Select alternate comparison settings</source> <target>Seleccionar opciones alternativas de comparación</target> @@ -58,6 +64,12 @@ <source>Clear filter settings</source> <target>Limpiar opciones del filtrado</target> +<source>Copy</source> +<target>Copiar</target> + +<source>Paste</source> +<target>Pegar</target> + <source>Save as batch job</source> <target>Salvar como tarea batch</target> @@ -97,11 +109,8 @@ <source>Fatal Error</source> <target>Error fatal</target> -<source>Windows Error Code %x:</source> -<target>Código de error de Windows %x:</target> - -<source>Linux Error Code %x:</source> -<target>Código de error de Linux %x:</target> +<source>Error Code %x:</source> +<target>Error: %x:</target> <source>Cannot resolve symbolic link %x.</source> <target>No se puede resolver el enlace simbólico %x.</target> @@ -160,8 +169,8 @@ <source>Waiting while directory is locked (%x)...</source> <target>Esperando mientras el directorio se encuentre bloqueado (%x)...</target> -<source>Cannot set directory lock %x.</source> -<target>No se puede establecer el directorio de bloqueo %x</target> +<source>Creating file %x</source> +<target>Creando archivo %x</target> <source> <pluralform>1 sec</pluralform> @@ -193,9 +202,6 @@ <source>/sec</source> <target>/seg</target> -<source>Cannot find file %x.</source> -<target>No se puede encontrar el archivo %x.</target> - <source>File %x does not contain a valid configuration.</source> <target>El archivo %x no contiene una configuración válida.</target> @@ -220,6 +226,9 @@ <source>Cannot read the following XML elements:</source> <target>Incapaz de leer los siguientes elementos XML:</target> +<source>Cannot find file %x.</source> +<target>No se puede encontrar el archivo %x.</target> + <source>&Open...</source> <target>&Abrir...</target> @@ -453,24 +462,21 @@ El comando es disparado si:: <source>&Advanced</source> <target>&Avanzado</target> -<source>&Check for new version</source> -<target>&Comprobar si existe una nueva versión</target> +<source>&Check now</source> +<target>&Comprobar ahora</target> -<source>Compare</source> -<target>Comparar</target> +<source>Check &automatically once a week</source> +<target>Comprobar automáticamente una vez a la semana</target> -<source>Compare both sides</source> -<target>Comparar ambos lados</target> +<source>Check for new version</source> +<target>Comprobar nueva versión</target> -<source>&Abort</source> -<target>&Abortar</target> +<source>Compare</source> +<target>Comparar</target> <source>Synchronize</source> <target>Sincronizar</target> -<source>Start synchronization</source> -<target>Iniciar sincronización</target> - <source>Add folder pair</source> <target>Añadir un par de carpetas</target> @@ -480,15 +486,6 @@ El comando es disparado si:: <source>Swap sides</source> <target>Intercambiar lados</target> -<source>Open</source> -<target>Abrir</target> - -<source>Save</source> -<target>Guardar</target> - -<source>Last used configurations (press DEL to remove from list)</source> -<target>Últimas configuraciones usadas (Pulsar DEL para quitar de la lista)</target> - <source>Hide excluded items</source> <target>Ocultar elementos excluidos</target> @@ -519,6 +516,18 @@ El comando es disparado si:: <source>Time elapsed:</source> <target>Tiempo transcurrido:</target> +<source>Synchronizing...</source> +<target>Sincronizando...</target> + +<source>On completion</source> +<target>Al completar</target> + +<source>Close</source> +<target>Cerrar</target> + +<source>&Pause</source> +<target>&Pausa</target> + <source>Batch job</source> <target>Tarea por lotes</target> @@ -549,9 +558,6 @@ El comando es disparado si:: <source>Abort synchronization on first error</source> <target>Abortar sincronización al primer error</target> -<source>On completion</source> -<target>Al completar</target> - <source>Show progress dialog</source> <target>Mostrar diálogo de progreso</target> @@ -609,8 +615,8 @@ es el mismo <source><- Two way -></source> <target><- Dos formas -></target> -<source>Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically.</source> -<target>Identificar y propagar cambios en ambos lados usando una base de datos. Borrados, renombraciones y conflictos son detectados automáticamente.</target> +<source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> +<target>Identificar y propagar cambios en ambos lados. Eliminaciones, movimientos y conflictos seran detectados automaticamente usando una base de datos.</target> <source>Mirror ->></source> <target>Espejo ->></target> @@ -648,15 +654,12 @@ es el mismo <source>Versioning</source> <target>Control de versiones</target> -<source>Move time-stamped files into specified folder</source> -<target>Mover archivos marcados a la carpeta especificada</target> +<source>Move files to user-defined folder</source> +<target>Mover archivos a una carpeta definida por el usuario</target> <source>Naming convention:</source> <target>Convención de nomenclatura:</target> -<source>Configuration</source> -<target>Configuración</target> - <source>Item exists on left side only</source> <target>El elemento existe sólo en el lado izquierdo</target> @@ -675,12 +678,6 @@ es el mismo <source>Conflict/item cannot be categorized</source> <target>Conflicto</target> -<source>Synchronizing...</source> -<target>Sincronizando...</target> - -<source>&Pause</source> -<target>&Pausa</target> - <source>Source code written in C++ using:</source> <target>Código fuente escrito en C++ utilizando:</target> @@ -741,8 +738,8 @@ Aviso: ¡Los nombres de archivos deben ser relativos a los directorios base! <source>Maximum</source> <target>Máximo</target> -<source>&Default</source> -<target>&Configuración por defecto</target> +<source>&Clear</source> +<target>&Borrar</target> <source>Fail-safe file copy</source> <target>Copia de archivo a prueba de fallos</target> @@ -771,6 +768,12 @@ Aviso: ¡Los nombres de archivos deben ser relativos a los directorios base! <source>Description</source> <target>Descripción</target> +<source>&Default</source> +<target>&Configuración por defecto</target> + +<source>Start synchronization</source> +<target>Iniciar sincronización</target> + <source>Variant</source> <target>Tipo</target> @@ -801,12 +804,24 @@ Aviso: ¡Los nombres de archivos deben ser relativos a los directorios base! <source>Overview</source> <target>Visión global</target> +<source>Configuration</source> +<target>Configuración</target> + <source>Filter files</source> <target>Filtrar archivos</target> <source>Select view</source> <target>Seleccione vista</target> +<source>Open...</source> +<target>Abrir...</target> + +<source>Save</source> +<target>Guardar</target> + +<source>Compare both sides</source> +<target>Comparar ambos lados</target> + <source>Set direction:</source> <target>Indicar dirección:</target> @@ -864,102 +879,63 @@ Aviso: ¡Los nombres de archivos deben ser relativos a los directorios base! <source>FreeFileSync batch</source> <target>Batch de FreeFileSync</target> -<source>Never save changes</source> -<target>Nunca guardar cambios</target> - <source>Do you want to save changes to %x?</source> <target>¿Quiere guardar los cambios de %x?</target> <source>Do&n't save</source> <target>No salvar</target> +<source>Never save changes</source> +<target>Nunca guardar cambios</target> + <source>Configuration loaded!</source> <target>¡Configuración cargada!</target> -<source>Hide files that exist on left side only</source> -<target>Ocultar archivos que existen sólo en el lado izquierdo</target> - <source>Show files that exist on left side only</source> <target>Mostrar sólo archivos existentes en la izquierda</target> -<source>Hide files that exist on right side only</source> -<target>Ocultar archivos que existen sólo en el lado derecho</target> - <source>Show files that exist on right side only</source> <target>Mostrar sólo archivos existentes en la derecha</target> -<source>Hide files that are newer on left</source> -<target>Ocultar archivos más recientes en la izquierda</target> - <source>Show files that are newer on left</source> <target>Mostrar archivos más recientes a la izquierda</target> -<source>Hide files that are newer on right</source> -<target>Ocultar archivos más recientes en la derecha</target> - <source>Show files that are newer on right</source> <target>Mostrar archivos más recientes a la derecha</target> -<source>Hide files that are equal</source> -<target>Ocultar archivos iguales</target> - <source>Show files that are equal</source> <target>Mostrar archivos iguales</target> -<source>Hide files that are different</source> -<target>Ocultar archivos diferentes</target> - <source>Show files that are different</source> <target>Mostrar archivos diferentes</target> -<source>Hide conflicts</source> -<target>Ocultar conflictos</target> - <source>Show conflicts</source> <target>Mostrar conflictos</target> -<source>Hide files that will be created on the left side</source> -<target>Ocultar archivos que serán creados en el lado izquierdo</target> - <source>Show files that will be created on the left side</source> <target>Mostrar archivos que serán creados en el lado izquierdo</target> -<source>Hide files that will be created on the right side</source> -<target>Ocultar archivos que serán creados en el lado derecho</target> - <source>Show files that will be created on the right side</source> <target>Mostrar archivos que serán creados en el lado derecho</target> -<source>Hide files that will be deleted on the left side</source> -<target>Ocultar archivos que serán eliminados en el lado izquierdo</target> - <source>Show files that will be deleted on the left side</source> <target>Mostrar archivos que serán eliminados en el lado izquierdo</target> -<source>Hide files that will be deleted on the right side</source> -<target>Ocultar archivos que serán eliminados en el lado derecho</target> - <source>Show files that will be deleted on the right side</source> <target>Mostrar archivos que serán eliminados en el lado derecho</target> -<source>Hide files that will be overwritten on left side</source> -<target>Ocultar archivos que serán sobreescritos en el lado izquierdo</target> - <source>Show files that will be overwritten on left side</source> <target>Mostrar archivos que serán sobreescritos en el lado izquierdo</target> -<source>Hide files that will be overwritten on right side</source> -<target>Ocultar archivos que serán sobreescritos en el lado derecho</target> - <source>Show files that will be overwritten on right side</source> <target>Mostrar archivos que serán sobreescritos en el lado derecho</target> -<source>Hide files that won't be copied</source> -<target>Ocultar archivos que no serán copiados</target> - <source>Show files that won't be copied</source> <target>Mostrar archivos que no serán copiados</target> +<source>Set as default</source> +<target>Establecer por defecto</target> + <source>All folders are in sync!</source> <target>¡Todas las carpetas están sincronizadas!</target> @@ -972,14 +948,8 @@ Aviso: ¡Los nombres de archivos deben ser relativos a los directorios base! <source>File list exported!</source> <target>¡Lista de archivos exportada!</target> -<source> -<pluralform>Object deleted successfully!</pluralform> -<pluralform>%x objects deleted successfully!</pluralform> -</source> -<target> -<pluralform>¡Objeto eliminado satisfactoriamente!</pluralform> -<pluralform>¡%x objetos eliminados satisfactoriamente!</pluralform> -</target> +<source>Searching for program updates...</source> +<target>Buscando actualizaciones del programa...</target> <source> <pluralform>1 directory</pluralform> @@ -1014,6 +984,9 @@ Aviso: ¡Los nombres de archivos deben ser relativos a los directorios base! <source>&Ignore</source> <target>&Ignorar</target> +<source>Don't show this warning again</source> +<target>No mostar más este aviso</target> + <source>&Switch</source> <target>&Cambiar</target> @@ -1032,9 +1005,6 @@ Aviso: ¡Los nombres de archivos deben ser relativos a los directorios base! <source>Comparing content...</source> <target>Comparando contenido...</target> -<source>Copy</source> -<target>Copiar</target> - <source>Paused</source> <target>Pausado</target> @@ -1117,35 +1087,38 @@ Aviso: ¡Los nombres de archivos deben ser relativos a los directorios base! <target>¿Hacer visibles de nuevo los mensajes de alerta y diálogo?</target> <source> -<pluralform>Do you really want to move the following object to the Recycle Bin?</pluralform> -<pluralform>Do you really want to move the following %x objects to the Recycle Bin?</pluralform> +<pluralform>Do you really want to move the following item to the Recycle Bin?</pluralform> +<pluralform>Do you really want to move the following %x items to the Recycle Bin?</pluralform> </source> <target> -<pluralform>¿De verdad quiere mover el siguiente objeto a la papelera de reciclaje?</pluralform> -<pluralform>¿De verdad quiere mover los siguientes %x objetos a la papelera de reciclaje?</pluralform> +<pluralform>¿De verdad quiere mover el siguiente objecto a la papelera de reciclaje?</pluralform> +<pluralform>¿De verdad quiere mover los siguientes objectos %x a la papelera de reciclaje?</pluralform> </target> <source> -<pluralform>Do you really want to delete the following object?</pluralform> -<pluralform>Do you really want to delete the following %x objects?</pluralform> +<pluralform>Do you really want to delete the following item?</pluralform> +<pluralform>Do you really want to delete the following %x items?</pluralform> </source> <target> <pluralform>¿De verdad quiere eliminar el siguiente objeto?</pluralform> -<pluralform>¿De verdad quiere eliminar los siguientes %x objetos?</pluralform> +<pluralform>¿De verdad quiere eliminar los siguientes objetos?</pluralform> </target> <source>Leave as unresolved conflict</source> <target>Dejar como conflicto sin resolver</target> +<source>Time stamp</source> +<target>Intervalo de tiempo</target> + +<source>Append a timestamp to each file name</source> +<target>Incluir fecha y hora a cada nombre de archivo</target> + <source>Replace</source> <target>Reemplazar</target> <source>Move files and replace if existing</source> <target>Mover archivos y reemplazar si ya existen</target> -<source>Append a timestamp to each file name</source> -<target>Incluir fecha y hora a cada nombre de archivo</target> - <source>Folder</source> <target>Carpeta</target> @@ -1158,6 +1131,9 @@ Aviso: ¡Los nombres de archivos deben ser relativos a los directorios base! <source>Files</source> <target>Archivos</target> +<source>Items</source> +<target></target> + <source>Percentage</source> <target>Porcentaje</target> @@ -1260,6 +1236,12 @@ Aviso: ¡Los nombres de archivos deben ser relativos a los directorios base! <source>Cannot set privilege %x.</source> <target>No se puede asignar el privilegio %x.</target> +<source>Failed to suspend system sleep mode.</source> +<target>Se ha fallado al intentar suspender el sistema.</target> + +<source>Cannot change process I/O priorities.</source> +<target>No se pudieron cambiar las priridades de E/S del proceso.</target> + <source>Unable to move %x to the Recycle Bin!</source> <target>¡Incapaz de mover %x a la Papelera de reciclaje!</target> @@ -1278,14 +1260,38 @@ Aviso: ¡Los nombres de archivos deben ser relativos a los directorios base! <source>Setting default synchronization directions: Old files will be overwritten with newer files.</source> <target>Fijando direcciones de sincronización por defecto: Los archivos viejos serán sobreescritos por los archivos nuevos.</target> +<source>Checking recycle bin availability for folder %x...</source> +<target>Comprobando disponibilidad de la papelera de reciclaje para la carpeta %x...</target> + +<source>Moving file %x to recycle bin</source> +<target>Mover archivo %x a la papelera de reciclaje</target> + +<source>Moving folder %x to recycle bin</source> +<target>Mover carpeta %x a la papelera de reciclaje</target> + +<source>Moving symbolic link %x to recycle bin</source> +<target>Mover enlace simbólico %x a la papelera de reciclaje</target> + +<source>Deleting file %x</source> +<target>Borrar archivo %x</target> + +<source>Deleting folder %x</source> +<target>Borrar carpeta %x</target> + +<source>Deleting symbolic link %x</source> +<target>Borrar enlace simbólico %x</target> + <source>Recycle Bin is not available for the following paths! Files will be deleted permanently instead:</source> <target>¡La papelera de reciclaje no está disponible para las siguientes rutas! Los archivos serán eliminados permanentemente:</target> -<source>You can ignore this error to consider the folder as empty.</source> -<target>Puede ignorar este error al considerar vacÃa la carpeta.</target> +<source>The corresponding folder will be considered as empty.</source> +<target>La siguiente carpeta será considerada como vacia.</target> -<source>Cannot find folder %x.</source> -<target>No se puede encontrar la carpeta %x.</target> +<source>Cannot find the following folders:</source> +<target>No se pudieron encontrar las siguiente carpetas:</target> + +<source>You can ignore this error to consider each folder as empty.</source> +<target>Puede ignorar este error si considera la carpeta como vacia.</target> <source>Directories are dependent! Be careful when setting up synchronization rules:</source> <target>¡Los directorios son dependientes! Tenga cuidado al establecer las reglas de sincronización:</target> @@ -1293,8 +1299,8 @@ Aviso: ¡Los nombres de archivos deben ser relativos a los directorios base! <source>Start comparison</source> <target>Empezar comparación</target> -<source>Preparing synchronization...</source> -<target>Preparando sincronización...</target> +<source>Calculating sync directions...</source> +<target>Calculando direcciones de sincronización...</target> <source>Conflict detected:</source> <target>Conflicto detectado:</target> @@ -1359,24 +1365,6 @@ Aviso: ¡Los nombres de archivos deben ser relativos a los directorios base! <source>Multiple...</source> <target>Múltiple...</target> -<source>Deleting file %x</source> -<target>Borrar archivo %x</target> - -<source>Deleting folder %x</source> -<target>Borrar carpeta %x</target> - -<source>Deleting symbolic link %x</source> -<target>Borrar enlace simbólico %x</target> - -<source>Moving file %x to recycle bin</source> -<target>Mover archivo %x a la papelera de reciclaje</target> - -<source>Moving folder %x to recycle bin</source> -<target>Mover carpeta %x a la papelera de reciclaje</target> - -<source>Moving symbolic link %x to recycle bin</source> -<target>Mover enlace simbólico %x a la papelera de reciclaje</target> - <source>Moving file %x to %y</source> <target>Mover archivo de %x a %y</target> @@ -1389,9 +1377,6 @@ Aviso: ¡Los nombres de archivos deben ser relativos a los directorios base! <source>Removing old versions...</source> <target>Eliminando versiones antiguas...</target> -<source>Creating file %x</source> -<target>Creando archivo %x</target> - <source>Creating symbolic link %x</source> <target>Creando enlace simbólico %x</target> @@ -1410,6 +1395,9 @@ Aviso: ¡Los nombres de archivos deben ser relativos a los directorios base! <source>Updating attributes of %x</source> <target>Actualizar atributos de %x</target> +<source>Cannot find %x.</source> +<target>No se pudo encontrar %x.</target> + <source>Target folder %x already existing.</source> <target>La carpeta de destino %x ya existe.</target> @@ -1455,6 +1443,9 @@ Aviso: ¡Los nombres de archivos deben ser relativos a los directorios base! <source>Generating database...</source> <target>Generando base de datos...</target> +<source>Creating Volume Shadow Copy for %x...</source> +<target>Creando copia instantanea para %x...</target> + <source>Data verification error: Source and target file have different content!</source> <target>Error de verificación de datos: ¡Los archivos de origen y destino tienen un contenido diferente!</target> diff --git a/BUILD/Languages/swedish.lng b/BUILD/Languages/swedish.lng index 9a727bfd..8e3a32a7 100644 --- a/BUILD/Languages/swedish.lng +++ b/BUILD/Languages/swedish.lng @@ -19,6 +19,9 @@ <source>Total time:</source> <target>Total tid:</target> +<source>Cannot set directory lock for %x.</source> +<target>Kan inte lÃ¥sa %x.</target> + <source>Show in Explorer</source> <target>Visa i Utforskaren</target> @@ -40,6 +43,9 @@ <source>Error</source> <target>Fel</target> +<source>Selected variant:</source> +<target>Vald variant:</target> + <source>Select alternate comparison settings</source> <target>Välj alternativa jämförelseinställningar</target> @@ -58,6 +64,12 @@ <source>Clear filter settings</source> <target>Rensa filterinställningar</target> +<source>Copy</source> +<target>Kopiera</target> + +<source>Paste</source> +<target>Klistra in</target> + <source>Save as batch job</source> <target>Spara som batch-fil</target> @@ -97,11 +109,8 @@ <source>Fatal Error</source> <target>Allvarligt fel</target> -<source>Windows Error Code %x:</source> -<target>Windows Felkod %x:</target> - -<source>Linux Error Code %x:</source> -<target>Linux Felkod %x:</target> +<source>Error Code %x:</source> +<target>Felkod %x:</target> <source>Cannot resolve symbolic link %x.</source> <target>Den symboliska länken %x kan inte matchas.</target> @@ -160,8 +169,8 @@ <source>Waiting while directory is locked (%x)...</source> <target>Väntar medan mappen lÃ¥ses (%x)...</target> -<source>Cannot set directory lock %x.</source> -<target>Kan inte lÃ¥sa mappen %x.</target> +<source>Creating file %x</source> +<target>Skapar fil %x</target> <source> <pluralform>1 sec</pluralform> @@ -193,9 +202,6 @@ <source>/sec</source> <target>/s</target> -<source>Cannot find file %x.</source> -<target>Filen %x kan inte hittas</target> - <source>File %x does not contain a valid configuration.</source> <target>Filen %x innehÃ¥ller ingen giltig konfiguration.</target> @@ -220,6 +226,9 @@ <source>Cannot read the following XML elements:</source> <target>Kan inte läsa följande XML-element:</target> +<source>Cannot find file %x.</source> +<target>Filen %x kan inte hittas</target> + <source>&Open...</source> <target>&Öppna...</target> @@ -453,24 +462,21 @@ Kommandot triggas om: <source>&Advanced</source> <target>&Avancerat</target> -<source>&Check for new version</source> -<target>&Sök efter uppdatering</target> +<source>&Check now</source> +<target>&Sök nu</target> -<source>Compare</source> -<target>Jämför</target> +<source>Check &automatically once a week</source> +<target>Sök automatiskt en gÃ¥ng per vecka</target> -<source>Compare both sides</source> -<target>Jämför bÃ¥da sidor</target> +<source>Check for new version</source> +<target>Sök efter ny version</target> -<source>&Abort</source> -<target>&Avbryt</target> +<source>Compare</source> +<target>Jämför</target> <source>Synchronize</source> <target>Synkronisera</target> -<source>Start synchronization</source> -<target>Starta synkronisering</target> - <source>Add folder pair</source> <target>Lägg till mapp-par</target> @@ -480,15 +486,6 @@ Kommandot triggas om: <source>Swap sides</source> <target>Byt sida</target> -<source>Open</source> -<target>Öppna</target> - -<source>Save</source> -<target>Spara</target> - -<source>Last used configurations (press DEL to remove from list)</source> -<target>Senast använda konfigurationer (Tryck DEL för att ta bort)</target> - <source>Hide excluded items</source> <target>Dölj undantagna objekt</target> @@ -519,6 +516,18 @@ Kommandot triggas om: <source>Time elapsed:</source> <target>Förfluten tid:</target> +<source>Synchronizing...</source> +<target>Synkroniserar...</target> + +<source>On completion</source> +<target>Vid slutfört</target> + +<source>Close</source> +<target>Stäng</target> + +<source>&Pause</source> +<target>&Paus</target> + <source>Batch job</source> <target>Batch-jobb</target> @@ -549,9 +558,6 @@ Kommandot triggas om: <source>Abort synchronization on first error</source> <target>Avbryt synkronisering vid första felet</target> -<source>On completion</source> -<target>Vid slutfört</target> - <source>Show progress dialog</source> <target>Visa förloppsindikator</target> @@ -609,8 +615,8 @@ Filerna betecknas som lika om, <source><- Two way -></source> <target><- TvÃ¥vägs -></target> -<source>Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically.</source> -<target>Använd en databas för att identifiera och sprida ändringar pÃ¥ bÃ¥da sidor. Borttagning, namnbyte och konflikter upptäcks automatiskt</target> +<source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> +<target>Identifierar och sprider förändringar pÃ¥ bÃ¥da sidor. Borttagningar, förflyttningar och konflikter detekteras automatiskt med hjälp av en databas.</target> <source>Mirror ->></source> <target>Spegla ->></target> @@ -648,15 +654,12 @@ Filerna betecknas som lika om, <source>Versioning</source> <target>Versionshantering</target> -<source>Move time-stamped files into specified folder</source> -<target>Flytta tidsstämplade filer till specificerad mapp</target> +<source>Move files to user-defined folder</source> +<target>Flytta filer till användardefinierad mapp</target> <source>Naming convention:</source> <target>Regler för namngivning</target> -<source>Configuration</source> -<target>Inställningar</target> - <source>Item exists on left side only</source> <target>Objektet finns bara pÃ¥ vänster sida</target> @@ -675,12 +678,6 @@ Filerna betecknas som lika om, <source>Conflict/item cannot be categorized</source> <target>Konflikten/Objektet kan inte kategoriseras</target> -<source>Synchronizing...</source> -<target>Synkroniserar...</target> - -<source>&Pause</source> -<target>&Paus</target> - <source>Source code written in C++ using:</source> <target>Källkod skriven i C++ med hjälp av:</target> @@ -741,8 +738,8 @@ OBS! Filnamnen mÃ¥ste anges relativt till basmappar <source>Maximum</source> <target>Maximum</target> -<source>&Default</source> -<target>&Standard</target> +<source>&Clear</source> +<target>&Rensa</target> <source>Fail-safe file copy</source> <target>Felsäker filkopiering</target> @@ -771,6 +768,12 @@ OBS! Filnamnen mÃ¥ste anges relativt till basmappar <source>Description</source> <target>Beskrivning</target> +<source>&Default</source> +<target>&Standard</target> + +<source>Start synchronization</source> +<target>Starta synkronisering</target> + <source>Variant</source> <target>Variant</target> @@ -801,12 +804,24 @@ OBS! Filnamnen mÃ¥ste anges relativt till basmappar <source>Overview</source> <target>Översikt</target> +<source>Configuration</source> +<target>Inställningar</target> + <source>Filter files</source> <target>Undantag</target> <source>Select view</source> <target>Välj vy</target> +<source>Open...</source> +<target>Öppna...</target> + +<source>Save</source> +<target>Spara</target> + +<source>Compare both sides</source> +<target>Jämför bÃ¥da sidor</target> + <source>Set direction:</source> <target>Ange riktning:</target> @@ -864,102 +879,63 @@ OBS! Filnamnen mÃ¥ste anges relativt till basmappar <source>FreeFileSync batch</source> <target>FreeFileSync batch</target> -<source>Never save changes</source> -<target>Spara aldrig ändringar</target> - <source>Do you want to save changes to %x?</source> <target>Vill du spara ändringar till %x?</target> <source>Do&n't save</source> <target>Spara &inte</target> +<source>Never save changes</source> +<target>Spara aldrig ändringar</target> + <source>Configuration loaded!</source> <target>Inställningar inlästa!</target> -<source>Hide files that exist on left side only</source> -<target>Visa inte filer som endast finns till vänster</target> - <source>Show files that exist on left side only</source> <target>Visa filer som endast finns till vänster</target> -<source>Hide files that exist on right side only</source> -<target>Visa inte filer som endast finns till höger</target> - <source>Show files that exist on right side only</source> <target>Visa filer som endast finns till höger</target> -<source>Hide files that are newer on left</source> -<target>Visa inte filer som är nyare till vänster</target> - <source>Show files that are newer on left</source> <target>Visa filer som är nyare till vänster</target> -<source>Hide files that are newer on right</source> -<target>Visa inte filer som är nyare till höger</target> - <source>Show files that are newer on right</source> <target>Visa filer som är nyare till höger</target> -<source>Hide files that are equal</source> -<target>Visa inte filer som är lika</target> - <source>Show files that are equal</source> <target>Visa filer som är lika</target> -<source>Hide files that are different</source> -<target>Visa inte filer som är olika</target> - <source>Show files that are different</source> <target>Visa filer som är olika</target> -<source>Hide conflicts</source> -<target>Visa inte konflikter</target> - <source>Show conflicts</source> <target>Visa konflikter</target> -<source>Hide files that will be created on the left side</source> -<target>Visa inte filer som kommer att skapas pÃ¥ vänster sida</target> - <source>Show files that will be created on the left side</source> <target>Visa filer som kommer att skapas till vänster</target> -<source>Hide files that will be created on the right side</source> -<target>Visa inte filer som kommer att skapas pÃ¥ höger sida</target> - <source>Show files that will be created on the right side</source> <target>Visa filer som kommer att skapas till höger</target> -<source>Hide files that will be deleted on the left side</source> -<target>Visa inte filer som kommer att tas bort pÃ¥ vänster sida</target> - <source>Show files that will be deleted on the left side</source> <target>Visa filer som kommer att tas bort till vänster</target> -<source>Hide files that will be deleted on the right side</source> -<target>Visa inte filer som kommer att tas bort pÃ¥ höger sida</target> - <source>Show files that will be deleted on the right side</source> <target>Visa filer som kommer att tas bort till höger</target> -<source>Hide files that will be overwritten on left side</source> -<target>Visa inte filer som kommer att skrivas över pÃ¥ vänster sida</target> - <source>Show files that will be overwritten on left side</source> <target>Visa filer som skrivas över till vänster</target> -<source>Hide files that will be overwritten on right side</source> -<target>Visa inte filer som kommer att skrivas över pÃ¥ höger sida</target> - <source>Show files that will be overwritten on right side</source> <target>Visa filer som skrivas över till höger</target> -<source>Hide files that won't be copied</source> -<target>Visa inte filer som som inte kopieras</target> - <source>Show files that won't be copied</source> <target>Visa filer som inte kommer att kopieras</target> +<source>Set as default</source> +<target>Ange som standard</target> + <source>All folders are in sync!</source> <target>Alla mappar är synkroniserade!</target> @@ -972,14 +948,8 @@ OBS! Filnamnen mÃ¥ste anges relativt till basmappar <source>File list exported!</source> <target>Fillista exporterad!</target> -<source> -<pluralform>Object deleted successfully!</pluralform> -<pluralform>%x objects deleted successfully!</pluralform> -</source> -<target> -<pluralform>Objektet borttaget!</pluralform> -<pluralform>%x objekt borttagna!</pluralform> -</target> +<source>Searching for program updates...</source> +<target>Söker efter programuppdateringar...</target> <source> <pluralform>1 directory</pluralform> @@ -1014,6 +984,9 @@ OBS! Filnamnen mÃ¥ste anges relativt till basmappar <source>&Ignore</source> <target>&Ignorera</target> +<source>Don't show this warning again</source> +<target>Visa inte denna varning igen.</target> + <source>&Switch</source> <target>&Växla</target> @@ -1032,9 +1005,6 @@ OBS! Filnamnen mÃ¥ste anges relativt till basmappar <source>Comparing content...</source> <target>Jämför innehÃ¥ll...</target> -<source>Copy</source> -<target>Kopiera</target> - <source>Paused</source> <target>Pausad</target> @@ -1117,17 +1087,17 @@ OBS! Filnamnen mÃ¥ste anges relativt till basmappar <target>Vill du göra dolda varningar och dialoger, synliga igen?</target> <source> -<pluralform>Do you really want to move the following object to the Recycle Bin?</pluralform> -<pluralform>Do you really want to move the following %x objects to the Recycle Bin?</pluralform> +<pluralform>Do you really want to move the following item to the Recycle Bin?</pluralform> +<pluralform>Do you really want to move the following %x items to the Recycle Bin?</pluralform> </source> <target> -<pluralform>Vill du verkligen flytta följande objekt till Papperskorgen?</pluralform> -<pluralform>Vill du verkligen flytta följande %x objekt till Papperskorgen?</pluralform> +<pluralform>Vill du verkligen flytta följande objekt till papperskorgen?</pluralform> +<pluralform>Vill du verkligen flytta följande %x objekt till papperskorgen?</pluralform> </target> <source> -<pluralform>Do you really want to delete the following object?</pluralform> -<pluralform>Do you really want to delete the following %x objects?</pluralform> +<pluralform>Do you really want to delete the following item?</pluralform> +<pluralform>Do you really want to delete the following %x items?</pluralform> </source> <target> <pluralform>Vill du verkligen ta bort följande objekt?</pluralform> @@ -1137,15 +1107,18 @@ OBS! Filnamnen mÃ¥ste anges relativt till basmappar <source>Leave as unresolved conflict</source> <target>Ignorera konflikt</target> +<source>Time stamp</source> +<target>Tidsstämpel</target> + +<source>Append a timestamp to each file name</source> +<target>Lägg till en tidsstämpel till varje filnamn</target> + <source>Replace</source> <target>Byt ut</target> <source>Move files and replace if existing</source> <target>Flytta filer och byt ut om de redan finns</target> -<source>Append a timestamp to each file name</source> -<target>Lägg till en tidsstämpel till varje filnamn</target> - <source>Folder</source> <target>Mapp</target> @@ -1260,6 +1233,12 @@ OBS! Filnamnen mÃ¥ste anges relativt till basmappar <source>Cannot set privilege %x.</source> <target>Kan inte att ange behörigheten %x.</target> +<source>Failed to suspend system sleep mode.</source> +<target>Kunde inte avbryta systemet vänteläge</target> + +<source>Cannot change process I/O priorities.</source> +<target>Kan inte ändra process I/O-prioritet</target> + <source>Unable to move %x to the Recycle Bin!</source> <target>Kan inte flytta %x till Papperskorgen</target> @@ -1278,14 +1257,38 @@ OBS! Filnamnen mÃ¥ste anges relativt till basmappar <source>Setting default synchronization directions: Old files will be overwritten with newer files.</source> <target>Standardsynkronisering: Gamla filer kommer att skrivas över av nyare versioner.</target> +<source>Checking recycle bin availability for folder %x...</source> +<target>Kontrollerar papperskorgens tillgänglighet för %x...</target> + +<source>Moving file %x to recycle bin</source> +<target>Flyttar filen %x till papperskorgen</target> + +<source>Moving folder %x to recycle bin</source> +<target>Flyttar mappen %x till papperskorgen</target> + +<source>Moving symbolic link %x to recycle bin</source> +<target>Flyttar den symboliska länken %x till papperskorgen</target> + +<source>Deleting file %x</source> +<target>Tar bort filen %x</target> + +<source>Deleting folder %x</source> +<target>Tar bort mappen %x</target> + +<source>Deleting symbolic link %x</source> +<target>Tar bort den symboliska länken %x</target> + <source>Recycle Bin is not available for the following paths! Files will be deleted permanently instead:</source> <target>Papperskorgen är inte tillgänglig för följande sökvägar! Filerna tas i stället bort permanent.</target> -<source>You can ignore this error to consider the folder as empty.</source> -<target>Du kan ignorera detta fel och betrakta mappen som tom</target> +<source>The corresponding folder will be considered as empty.</source> +<target>Motsvarande mapp kommer att betraktas som tom.</target> -<source>Cannot find folder %x.</source> -<target>Kan inte hitta mappen %x.</target> +<source>Cannot find the following folders:</source> +<target>Kan inte hitta följande mappar:</target> + +<source>You can ignore this error to consider each folder as empty.</source> +<target>Du kan ignorera det här felet och betrakta varje mappa som tom.</target> <source>Directories are dependent! Be careful when setting up synchronization rules:</source> <target>Mappar är beroende! Var försiktig när du sätter upp synkroniseringsregler:</target> @@ -1293,8 +1296,8 @@ OBS! Filnamnen mÃ¥ste anges relativt till basmappar <source>Start comparison</source> <target>Starta jämförelse</target> -<source>Preparing synchronization...</source> -<target>Förbereder synkronisering...</target> +<source>Calculating sync directions...</source> +<target>Beräknar synkroniseringsmappar...</target> <source>Conflict detected:</source> <target>Konflikt upptäckt:</target> @@ -1359,24 +1362,6 @@ OBS! Filnamnen mÃ¥ste anges relativt till basmappar <source>Multiple...</source> <target>Flera...</target> -<source>Deleting file %x</source> -<target>Tar bort filen %x</target> - -<source>Deleting folder %x</source> -<target>Tar bort mappen %x</target> - -<source>Deleting symbolic link %x</source> -<target>Tar bort den symboliska länken %x</target> - -<source>Moving file %x to recycle bin</source> -<target>Flyttar filen %x till papperskorgen</target> - -<source>Moving folder %x to recycle bin</source> -<target>Flyttar mappen %x till papperskorgen</target> - -<source>Moving symbolic link %x to recycle bin</source> -<target>Flyttar den symboliska länken %x till papperskorgen</target> - <source>Moving file %x to %y</source> <target>Flyttar filen %x till %y</target> @@ -1389,9 +1374,6 @@ OBS! Filnamnen mÃ¥ste anges relativt till basmappar <source>Removing old versions...</source> <target>Tar bort gamla versioner...</target> -<source>Creating file %x</source> -<target>Skapar fil %x</target> - <source>Creating symbolic link %x</source> <target>Skapar den symboliska länken %x</target> @@ -1410,6 +1392,9 @@ OBS! Filnamnen mÃ¥ste anges relativt till basmappar <source>Updating attributes of %x</source> <target>Uppdaterar attribut för %x</target> +<source>Cannot find %x.</source> +<target>Kan inte hitta %x.</target> + <source>Target folder %x already existing.</source> <target>MÃ¥lmappen %x finns redan.</target> @@ -1455,6 +1440,9 @@ OBS! Filnamnen mÃ¥ste anges relativt till basmappar <source>Generating database...</source> <target>Skapar databas...</target> +<source>Creating Volume Shadow Copy for %x...</source> +<target>Skapar Volume Shadow Copy för %x...</target> + <source>Data verification error: Source and target file have different content!</source> <target>Verifikationsfel: Källfil och mÃ¥lfil har olika innehÃ¥ll!</target> diff --git a/BUILD/Languages/turkish.lng b/BUILD/Languages/turkish.lng index 570156c8..f3c87e86 100644 --- a/BUILD/Languages/turkish.lng +++ b/BUILD/Languages/turkish.lng @@ -19,14 +19,17 @@ <source>Total time:</source> <target>Toplam süre:</target> +<source>Cannot set directory lock for %x.</source> +<target>%x için klasör kilidi uygulanamıyor.</target> + <source>Show in Explorer</source> -<target>Tarayıcıda Göster</target> +<target>Tarayıcıda Görüntüleyin</target> <source>Open with default application</source> -<target>Varsayılan uygulama ile aç</target> +<target>Varsayılan uygulama ile açın</target> <source>Browse directory</source> -<target>Klasöre gözat</target> +<target>Klasöre gözatın</target> <source>Abort requested: Waiting for current operation to finish...</source> <target>Vazgeçildi: Yürürlükteki iÅŸlemin bitmesi bekleniyor...</target> @@ -40,6 +43,9 @@ <source>Error</source> <target>Hata</target> +<source>Selected variant:</source> +<target>SeçilmiÅŸ çeÅŸit:</target> + <source>Select alternate comparison settings</source> <target>Alternatif karşılaÅŸtırma ayarlarını seçin</target> @@ -53,13 +59,19 @@ <target>SeçilmiÅŸ süzgeç yok</target> <source>Remove alternate settings</source> -<target>Alternatif ayarları sil</target> +<target>Alternatif ayarları silin</target> <source>Clear filter settings</source> -<target>Süzgeç ayarlarını temizle</target> +<target>Süzgeç ayarlarını temizleyin</target> + +<source>Copy</source> +<target>Kopyalayın</target> + +<source>Paste</source> +<target>Yapıştırın</target> <source>Save as batch job</source> -<target>Toplu iÅŸ olarak kaydet</target> +<target>Toplu iÅŸ olarak kaydedin</target> <source>Comparison settings</source> <target>KarşılaÅŸtırma ayarları</target> @@ -80,7 +92,7 @@ <target>Genel ayarlar</target> <source>Find</source> -<target>Bul</target> +<target>Arayın</target> <source>Select time span</source> <target>Zaman aralığı</target> @@ -97,11 +109,8 @@ <source>Fatal Error</source> <target>Ölümcül Hata</target> -<source>Windows Error Code %x:</source> -<target>Windows Hata Kodu %x:</target> - -<source>Linux Error Code %x:</source> -<target>Linux Hata Kodu %x:</target> +<source>Error Code %x:</source> +<target>Hata Kodu %x:</target> <source>Cannot resolve symbolic link %x.</source> <target>%x simge baÄŸlantısı çözümlenemedi</target> @@ -160,8 +169,8 @@ <source>Waiting while directory is locked (%x)...</source> <target>Klasör kilitli olduÄŸundan bekleniyor (%x)...</target> -<source>Cannot set directory lock %x.</source> -<target>%x klasörü kilitlenemedi.</target> +<source>Creating file %x</source> +<target>%x dosyası ekleniyor</target> <source> <pluralform>1 sec</pluralform> @@ -191,10 +200,7 @@ </target> <source>/sec</source> -<target>/san</target> - -<source>Cannot find file %x.</source> -<target>%x dosyası bulunamadı.</target> +<target>/saniye</target> <source>File %x does not contain a valid configuration.</source> <target>%x dosyası geçerli ayar bilgilerini içermiyor.</target> @@ -220,14 +226,17 @@ <source>Cannot read the following XML elements:</source> <target>Åžu XML elemanları okunamadı:</target> +<source>Cannot find file %x.</source> +<target>%x dosyası bulunamadı.</target> + <source>&Open...</source> -<target>&Aç...</target> +<target>&Açın...</target> <source>Save &as...</source> -<target>F&arklı kaydet...</target> +<target>F&arklı kaydedin...</target> <source>&Quit</source> -<target>Çı&k</target> +<target>Çı&kın</target> <source>&Program</source> <target>&Dosya</target> @@ -260,13 +269,13 @@ <target>Ä°zlenecek klasörler</target> <source>Add folder</source> -<target>Klasör ekle</target> +<target>Klasör ekleyin</target> <source>Remove folder</source> -<target>Klasörü sil</target> +<target>Klasörü silin</target> <source>Browse</source> -<target>Gözat</target> +<target>Gözatın</target> <source>Select a folder</source> <target>Bir klasör seçin</target> @@ -275,7 +284,7 @@ <target>BoÅŸta bekleme süresi {saniye]</target> <source>Idle time between last detected change and execution of command</source> -<target>Son algılanan deÄŸiÅŸiklik ile komutun yürütülmesi arasındaki bekleme süresi</target> +<target>Son algılanan deÄŸiÅŸiklik ile komutun yürütülmesi arasında beklenecek süre</target> <source>Command line</source> <target>Komut satırı</target> @@ -292,13 +301,13 @@ Komut ÅŸu durumlarda yürütülür: </target> <source>Start</source> -<target>BaÅŸla</target> +<target>BaÅŸlayın</target> <source>&Retry</source> -<target>&Yeniden dene</target> +<target>&Yeniden deneyin</target> <source>Cancel</source> -<target>Ä°ptal</target> +<target>Ä°ptal Edin</target> <source>Build: %x</source> <target>Yapım: %x</target> @@ -307,10 +316,10 @@ Komut ÅŸu durumlarda yürütülür: <target>Tüm dosyalar</target> <source>&Restore</source> -<target>Ge&ri yükle</target> +<target>Ge&ri yükleyin</target> <source>&Exit</source> -<target>Çı&kış</target> +<target>Çı&kın</target> <source>Monitoring active...</source> <target>Ä°zleme etkin...</target> @@ -325,7 +334,7 @@ Komut ÅŸu durumlarda yürütülür: <target>EÅŸleÅŸtirme durduruldu!</target> <source>Synchronization completed with errors!</source> -<target>EÅŸleÅŸtirme hatalarla tamamlandı!</target> +<target>EÅŸleÅŸtirme bazı hatalarla tamamlandı!</target> <source>Synchronization completed with warnings.</source> <target>EÅŸleÅŸtirme iÅŸlemi bazı uyarılarla tamamlandı.</target> @@ -340,7 +349,7 @@ Komut ÅŸu durumlarda yürütülür: <target>%x günlük dosyası kaydediliyor...</target> <source>Press "Switch" to resolve issues in FreeFileSync main dialog.</source> -<target>FreeFileSync ana penceresindeki sorunları çözmek için "DeÄŸiÅŸtir" düğmesine tıklayın.</target> +<target>FreeFileSync ana penceresindeki sorunları çözmek için "DeÄŸiÅŸtirin" düğmesine tıklayın.</target> <source>Switching to FreeFileSync main dialog...</source> <target>FreeFileSync ana penceresine geçiliyor...</target> @@ -349,7 +358,7 @@ Komut ÅŸu durumlarda yürütülür: <target>Yeni bir FreeFileSync sürümü yayınlanmış:</target> <source>Download now?</source> -<target>Åžimdi indir?</target> +<target>Ä°ndirilsin mi?</target> <source>FreeFileSync is up to date!</source> <target>FreeFileSync güncel!</target> @@ -412,34 +421,34 @@ Komut ÅŸu durumlarda yürütülür: <target>Klasör ya da dosyaları sürükleyip buraya bırakabilirsiniz</target> <source>Close progress dialog</source> -<target>Ä°ÅŸlem penceresini kapat</target> +<target>Ä°ÅŸlem penceresini kapatılsın</target> <source>Standby</source> -<target>Uykuya dal</target> +<target>Uykuya dalınsın</target> <source>Log off</source> -<target>Oturumu kapat</target> +<target>Oturum kapatılsın</target> <source>Shut down</source> -<target>Bilgisayarı kapat</target> +<target>Bilgisayar kapatılsın</target> <source>Hibernate</source> -<target>Hazırda beklet</target> +<target>Hazırda bekletilsin</target> <source>&New</source> <target>Ye&ni</target> <source>&Save</source> -<target>&Kaydet</target> +<target>&Kaydedin</target> <source>Save as &batch job...</source> -<target>&Toplu iÅŸ olarak kaydet...</target> +<target>&Toplu iÅŸ olarak kaydedin...</target> <source>1. &Compare</source> -<target>1. &KarşılaÅŸtır</target> +<target>1. &KarşılaÅŸtırın</target> <source>2. &Synchronize</source> -<target>2. &EÅŸleÅŸtir</target> +<target>2. &EÅŸleÅŸtirin</target> <source>&Language</source> <target>Di&l</target> @@ -448,46 +457,34 @@ Komut ÅŸu durumlarda yürütülür: <target>&Genel ayarlar...</target> <source>&Export file list...</source> -<target>Dosya list&esini ver...</target> +<target>Dosya list&esini verin...</target> <source>&Advanced</source> <target>&Araçlar</target> -<source>&Check for new version</source> -<target>Yeni &sürüm denetimi</target> +<source>&Check now</source> +<target>Sürümü &Denetleyin</target> -<source>Compare</source> -<target>KarşılaÅŸtır</target> +<source>Check &automatically once a week</source> +<target>KendiliÄŸinden haftada bir denetlensin</target> -<source>Compare both sides</source> -<target>Ä°ki tarafı karşılaÅŸtırır</target> +<source>Check for new version</source> +<target>Yeni sürüm denetimi</target> -<source>&Abort</source> -<target>V&azgeç</target> +<source>Compare</source> +<target>KarşılaÅŸtırın</target> <source>Synchronize</source> -<target>EÅŸleÅŸtir</target> - -<source>Start synchronization</source> -<target>EÅŸleÅŸtirmeyi baÅŸlatır</target> +<target>EÅŸleÅŸtirin</target> <source>Add folder pair</source> -<target>Klasör çifti ekle</target> +<target>Klasör çifti ekleyin</target> <source>Remove folder pair</source> -<target>Klasör çiftini sil</target> +<target>Klasör çiftini silin</target> <source>Swap sides</source> -<target>SaÄŸ ve sol tarafları deÄŸiÅŸtir</target> - -<source>Open</source> -<target>Aç</target> - -<source>Save</source> -<target>Kaydet</target> - -<source>Last used configurations (press DEL to remove from list)</source> -<target>Son kullanılan ayarlar (listeden silmek için DEL tuÅŸuna basın)</target> +<target>SaÄŸ ve sol tarafları deÄŸiÅŸtirin</target> <source>Hide excluded items</source> <target>Katılmayan ögeler görüntülensin</target> @@ -519,11 +516,23 @@ Komut ÅŸu durumlarda yürütülür: <source>Time elapsed:</source> <target>Geçen süre:</target> +<source>Synchronizing...</source> +<target>EÅŸleÅŸtiriliyor...</target> + +<source>On completion</source> +<target>Ä°ÅŸlem tamamlandığında:</target> + +<source>Close</source> +<target>Kapatılsın</target> + +<source>&Pause</source> +<target>&Duraklatılsın</target> + <source>Batch job</source> <target>Toplu iÅŸ</target> <source>Create a batch file to automate synchronization. Double-click this file or schedule in your system's task planner: FreeFileSync.exe <job name>.ffs_batch</source> -<target>Toplu iÅŸ dosyası ile otomatik eÅŸleÅŸtirme yapılabilir. Dosya, çift tıklanarak ya da sisteminizdeki görev zamanlayıcıya; FreeFileSync.exe <görev adı>.ffs_batch ÅŸeklinde eklenerek yürütülebilir.</target> +<target>Toplu iÅŸ dosyası ile otomatik eÅŸleÅŸtirme yapılabilir. Dosyadaki iÅŸlemler, çift tıklanarak ya da sisteminizdeki görev zamanlayıcıya; FreeFileSync.exe <görev adı>.ffs_batch ÅŸeklinde eklenerek yürütülebilir.</target> <source>Help</source> <target>Yardım</target> @@ -532,31 +541,28 @@ Komut ÅŸu durumlarda yürütülür: <target>Hata olursa:</target> <source>Ignore</source> -<target>Yoksay</target> +<target>Yoksayılsın</target> <source>Hide all error and warning messages</source> <target>Tüm hata ve uyarı iletileri gizlenir</target> <source>Pop-up</source> -<target>Görüntüle</target> +<target>Görüntülensin</target> <source>Show pop-up on errors or warnings</source> -<target>Hata ya da uyarılar açılır pencerede gösterilir</target> +<target>Hata ya da uyarılar açılır pencerede görüntülenir</target> <source>Exit</source> -<target>Çık</target> +<target>Çıkın</target> <source>Abort synchronization on first error</source> <target>OluÅŸacak ilk hatada eÅŸleÅŸtirme durdurulur</target> -<source>On completion</source> -<target>Ä°ÅŸlem tamamlandığında:</target> - <source>Show progress dialog</source> -<target>Ä°ÅŸlem penceresini görüntüle</target> +<target>Ä°ÅŸlem penceresi görüntülensin</target> <source>Save log</source> -<target>Günlüğe kaydet</target> +<target>Günlüğe kaydedilsin</target> <source>Select folder to save log files</source> <target>Günlük dosyalarının kaydedileceÄŸi klasörü seçin</target> @@ -601,7 +607,7 @@ aynı olmalıdır <target>İçeriÄŸe göre</target> <source>Symbolic Link handling</source> -<target>Sembolik baÄŸlantılar:</target> +<target>Sembolik baÄŸlantı iÅŸleme:</target> <source>OK</source> <target>Tamam</target> @@ -609,17 +615,17 @@ aynı olmalıdır <source><- Two way -></source> <target><- Çift yönlü -></target> -<source>Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically.</source> -<target>Ä°ki taraftaki deÄŸiÅŸiklikler, bir veritabanı kullanarak belirlenir ve görüntülenir. Silme, yeniden adlandırma ve uyuÅŸmazlık durumları kendiliÄŸinden algılanır.</target> +<source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> +<target>Ä°ki taraftaki deÄŸiÅŸiklikler belirlenir ve kopyalanır. Silme, taşıma ve çakışmalar, veritabanı kullanılarak kendiliÄŸinden algılanır.</target> <source>Mirror ->></source> -<target>Yansıt ->></target> +<target>Yansıtma ->></target> <source>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization.</source> <target>Sol taraftaki klasör saÄŸ tarafa yansıtılır. EÅŸleÅŸtirme sonrası saÄŸ klasör, sol klasörün tamamen aynısı olur.</target> <source>Update -></source> -<target>Güncelle -></target> +<target>Güncelleme -></target> <source>Copy new or updated files to right folder.</source> <target>Sol taraftaki yeni ya da güncellenmiÅŸ dosyalar saÄŸ tarafa kopyalanır.</target> @@ -628,35 +634,32 @@ aynı olmalıdır <target>Özel</target> <source>Configure your own synchronization rules.</source> -<target>EÅŸleÅŸtirme kuralları istendiÄŸi ÅŸekilde ayarlanabilir.</target> +<target>EÅŸleÅŸtirme kurallarını istediÄŸiniz ÅŸekilde ayarlayabilirsiniz.</target> <source>Deletion handling</source> -<target>Silinen dosyaları:</target> +<target>Silinen dosyalar:</target> <source>Permanent</source> -<target>Kalıcı olarak sil</target> +<target>Kalıcı olarak silinsin</target> <source>Delete or overwrite files permanently</source> <target>Dosyalar kalıcı olarak silinir ya da üzerine yazılır</target> <source>Recycle Bin</source> -<target>Geri dönüşüm kutusuna at</target> +<target>Geri Dönüşüm Kutusuna gönderilsin</target> <source>Use Recycle Bin for deleted and overwritten files</source> -<target>Silinen ve üzerine yazılan dosyalar Geri Dönüşüm Kutusuna atılır</target> +<target>Silinen ve üzerine yazılan dosyalar Geri Dönüşüm Kutusuna gönderilir</target> <source>Versioning</source> -<target>Eski sürüm olarak sakla</target> +<target>Eski sürüm olarak saklansın</target> -<source>Move time-stamped files into specified folder</source> -<target>Dosyalar, zaman damgası eklenerek belirtilen klasöre taşınır</target> +<source>Move files to user-defined folder</source> +<target>Dosyalar kullanıcı tarafından belirlenen bir klasöre taşınsın</target> <source>Naming convention:</source> <target>Adlandırma kuralı:</target> -<source>Configuration</source> -<target>Ä°ÅŸlemler</target> - <source>Item exists on left side only</source> <target>Sol taraftaki ögeler</target> @@ -675,12 +678,6 @@ aynı olmalıdır <source>Conflict/item cannot be categorized</source> <target>UyuÅŸmayan/sınıflanamayan ögeler</target> -<source>Synchronizing...</source> -<target>EÅŸleÅŸtiriliyor...</target> - -<source>&Pause</source> -<target>&Duraklat</target> - <source>Source code written in C++ using:</source> <target>Kaynak kodu C++ kullanılarak yazılmıştır:</target> @@ -688,7 +685,7 @@ aynı olmalıdır <target>FreeFileSync’i beÄŸendiyseniz</target> <source>Donate with PayPal</source> -<target>PayPal ile bağış yapın</target> +<target>PayPal üzerinden bağış yapın</target> <source>Many thanks for localization:</source> <target>Çeviriler için çok teÅŸekkürler:</target> @@ -709,7 +706,7 @@ aynı olmalıdır <target>GNU Genel Kamu Lisansı koÅŸulları altında yayınlanmıştır</target> <source>Delete on both sides</source> -<target>Her iki taraftakini de sil</target> +<target>Her iki taraftaki de silinsin</target> <source>Delete on both sides even if the file is selected on one side only</source> <target>Dosya yalnız bir tarafta seçili olsa bile her iki taraftaki de silinir</target> @@ -741,14 +738,14 @@ Not: Dosya adları kök klasörlere göre bağıl olmalıdır! <source>Maximum</source> <target>En büyük</target> -<source>&Default</source> -<target>&Varsayılan</target> +<source>&Clear</source> +<target>&Temizleyin</target> <source>Fail-safe file copy</source> <target>Dosyalar hatasız kopyalansın</target> <source>Write to a temporary file (*.ffs_tmp) first then rename it. This guarantees a consistent state even in case of fatal error.</source> -<target>Kopyalama önce geçici bir dosyaya (*.ffs_tmp) yapılır. Sonra dosya yeniden adlandırılır. Böylece hatalara karşı daha saÄŸlıklı bir ortam saÄŸlanır.</target> +<target>Kopyalama önce geçici bir dosyaya (*.ffs_tmp) yapılır. Sonra dosya yeniden adlandırılır. Böylece hatalara karşı daha saÄŸlıklı bir çalışma ortamı saÄŸlanır.</target> <source>Copy locked files</source> <target>Kilitli dosyalar da kopyalansın</target> @@ -771,6 +768,12 @@ Not: Dosya adları kök klasörlere göre bağıl olmalıdır! <source>Description</source> <target>Açıklama</target> +<source>&Default</source> +<target>&Varsayılan</target> + +<source>Start synchronization</source> +<target>EÅŸleÅŸtirmeyi baÅŸlatın</target> + <source>Variant</source> <target>Ä°ÅŸlem tipi</target> @@ -778,16 +781,16 @@ Not: Dosya adları kök klasörlere göre bağıl olmalıdır! <target>Ä°statistikler</target> <source>Don't show this dialog again</source> -<target>Bu iletiyi bir daha gösterme</target> +<target>Bu ileti artık görüntülenmesin</target> <source>Find what:</source> <target>Aranacak:</target> <source>Match case</source> -<target>Büyük/küçük harf uydur</target> +<target>Büyük/küçük harfe uyulsun</target> <source>&Find next</source> -<target>&Sonrakini bul</target> +<target>&Sonrakini bulun</target> <source>Operation aborted!</source> <target>Ä°ÅŸlemden vazgeçildi!</target> @@ -801,38 +804,50 @@ Not: Dosya adları kök klasörlere göre bağıl olmalıdır! <source>Overview</source> <target>Genel</target> +<source>Configuration</source> +<target>Ä°ÅŸlemler</target> + <source>Filter files</source> <target>Dosya süzgeci</target> <source>Select view</source> <target>Görünüm</target> +<source>Open...</source> +<target>Açın...</target> + +<source>Save</source> +<target>Kaydedin</target> + +<source>Compare both sides</source> +<target>Ä°ki tarafı karşılaÅŸtırır</target> + <source>Set direction:</source> <target>Yönü seçin:</target> <source>Exclude temporarily</source> -<target>Geçici olarak katma</target> +<target>Geçici olarak katılmasın</target> <source>Include temporarily</source> -<target>Geçici olarak kat</target> +<target>Geçici olarak katılsın</target> <source>Exclude via filter:</source> -<target>Süzerek dışarda bırak:</target> +<target>Süzerek dışarda bırakılsın:</target> <source><multiple selection></source> <target><çoklu seçim></target> <source>Delete</source> -<target>Sil</target> +<target>Silin</target> <source>Include all</source> -<target>Tümünü kat</target> +<target>Tümü katılsın</target> <source>Exclude all</source> -<target>Hiçbirini katma</target> +<target>Hiçbiri katılmasın</target> <source>Show icons:</source> -<target>Simgeleri göster:</target> +<target>Simgeler görüntülensin:</target> <source>Small</source> <target>Küçük</target> @@ -850,7 +865,7 @@ Not: Dosya adları kök klasörlere göre bağıl olmalıdır! <target>Varsayılan görünüm</target> <source>Show "%x"</source> -<target>"%x" panelini göster</target> +<target>"%x" panelini görüntülensin</target> <source><Last session></source> <target><Önceki oturum></target> @@ -864,102 +879,63 @@ Not: Dosya adları kök klasörlere göre bağıl olmalıdır! <source>FreeFileSync batch</source> <target>FreeFileSync toplu iÅŸi</target> -<source>Never save changes</source> -<target>Asla deÄŸiÅŸiklikleri kaydetme</target> - <source>Do you want to save changes to %x?</source> <target>DeÄŸiÅŸiklikleri %x dosyasına kaydetmek istiyor musunuz?</target> <source>Do&n't save</source> -<target>Kaydetme</target> +<target>Kaydedilmesin</target> + +<source>Never save changes</source> +<target>DeÄŸiÅŸiklikler asla kaydedilmesin</target> <source>Configuration loaded!</source> <target>Ayarlar yüklendi!</target> -<source>Hide files that exist on left side only</source> -<target>Yalnız sol tarafta bulunan dosyalar gizlensin</target> - <source>Show files that exist on left side only</source> <target>Yalnız sol tarafta bulunan dosyalar görüntülensin</target> -<source>Hide files that exist on right side only</source> -<target>Yalnız saÄŸ tarafta bulunan dosyalar gizlensin</target> - <source>Show files that exist on right side only</source> <target>Yalnız saÄŸ tarafta bulunan dosyalar görüntülensin</target> -<source>Hide files that are newer on left</source> -<target>Solda daha yeni olan dosyalar gizlensin</target> - <source>Show files that are newer on left</source> <target>Solda daha yeni olan dosyalar görüntülensin</target> -<source>Hide files that are newer on right</source> -<target>SaÄŸda daha yeni olan dosyalar gizlensin</target> - <source>Show files that are newer on right</source> <target>SaÄŸda daha yeni olan dosyalar görüntülensin</target> -<source>Hide files that are equal</source> -<target>Aynı olan dosyalar gizlensin</target> - <source>Show files that are equal</source> <target>Aynı olan dosyalar görüntülensin</target> -<source>Hide files that are different</source> -<target>Farklı olan dosyalar gizlensin</target> - <source>Show files that are different</source> <target>Farklı olan dosyalar görüntülensin</target> -<source>Hide conflicts</source> -<target>UyuÅŸmazlıklar gizlensin</target> - <source>Show conflicts</source> <target>UyuÅŸmazlıklar görüntülensin</target> -<source>Hide files that will be created on the left side</source> -<target>Sol tarafa eklenecek dosyalar gizlensin</target> - <source>Show files that will be created on the left side</source> <target>Sol tarafa eklenecek dosyalar görüntülensin</target> -<source>Hide files that will be created on the right side</source> -<target>SaÄŸ tarafa eklenecek dosyalar gizlensin</target> - <source>Show files that will be created on the right side</source> <target>SaÄŸ tarafa eklenecek dosyalar görüntülensin</target> -<source>Hide files that will be deleted on the left side</source> -<target>Sol tarafta silinecek dosyalar gizlensin</target> - <source>Show files that will be deleted on the left side</source> <target>Sol tarafta silinecek dosyalar görüntülensin</target> -<source>Hide files that will be deleted on the right side</source> -<target>SaÄŸ tarafta silinecek dosyalar gizlensin</target> - <source>Show files that will be deleted on the right side</source> <target>SaÄŸ tarafta silinecek dosyalar görüntülensin</target> -<source>Hide files that will be overwritten on left side</source> -<target>Sol tarafta üzerine yazılacak dosyalar gizlensin</target> - <source>Show files that will be overwritten on left side</source> <target>Sol tarafta üzerine yazılacak dosyalar görüntülensin</target> -<source>Hide files that will be overwritten on right side</source> -<target>SaÄŸ tarafta üzerine yazılacak dosyalar gizlensin</target> - <source>Show files that will be overwritten on right side</source> <target>SaÄŸ tarafta üzerine yazılacak dosyalar görüntülensin</target> -<source>Hide files that won't be copied</source> -<target>Kopyalanmayacak dosyalar gizlensin</target> - <source>Show files that won't be copied</source> <target>Kopyalanmayacak dosyalar görüntülensin</target> +<source>Set as default</source> +<target>Varsayılan olarak belirleyin</target> + <source>All folders are in sync!</source> <target>Tüm klasörler eÅŸleÅŸtirildi.</target> @@ -970,16 +946,10 @@ Not: Dosya adları kök klasörlere göre bağıl olmalıdır! <target>Gösterge</target> <source>File list exported!</source> -<target>Dosya listesi verilmiÅŸ!</target> +<target>Dosya listesi verildi!</target> -<source> -<pluralform>Object deleted successfully!</pluralform> -<pluralform>%x objects deleted successfully!</pluralform> -</source> -<target> -<pluralform>Nesne silindi!</pluralform> -<pluralform>%x nesne silindi!</pluralform> -</target> +<source>Searching for program updates...</source> +<target>Yazılım güncellemesine bakılıyor...</target> <source> <pluralform>1 directory</pluralform> @@ -1009,13 +979,16 @@ Not: Dosya adları kök klasörlere göre bağıl olmalıdır! </target> <source>Ignore further errors</source> -<target>Sonraki hataları yoksay</target> +<target>Sonraki hatalar yoksayılsın</target> <source>&Ignore</source> -<target>&Yoksay</target> +<target>&Yoksayın</target> + +<source>Don't show this warning again</source> +<target>Bu uyarı artık görüntülenmesin</target> <source>&Switch</source> -<target>&DeÄŸiÅŸtir</target> +<target>&DeÄŸiÅŸtirin</target> <source>Question</source> <target>Soru</target> @@ -1032,9 +1005,6 @@ Not: Dosya adları kök klasörlere göre bağıl olmalıdır! <source>Comparing content...</source> <target>İçerik karşılaÅŸtırılıyor...</target> -<source>Copy</source> -<target>Kopyala</target> - <source>Paused</source> <target>Duraklatıldı</target> @@ -1048,10 +1018,10 @@ Not: Dosya adları kök klasörlere göre bağıl olmalıdır! <target>Tamamlandı</target> <source>Continue</source> -<target>Devam et</target> +<target>Devam edin</target> <source>Pause</source> -<target>Duraklat</target> +<target>Duraklatın</target> <source>Logging</source> <target>Günlükleme</target> @@ -1117,34 +1087,37 @@ Not: Dosya adları kök klasörlere göre bağıl olmalıdır! <target>GizlenmiÅŸ iletiler yeniden görüntülensin mi?</target> <source> -<pluralform>Do you really want to move the following object to the Recycle Bin?</pluralform> -<pluralform>Do you really want to move the following %x objects to the Recycle Bin?</pluralform> +<pluralform>Do you really want to move the following item to the Recycle Bin?</pluralform> +<pluralform>Do you really want to move the following %x items to the Recycle Bin?</pluralform> </source> <target> -<pluralform>Åžu ögeyi geri dönüşüm kutusuna taşımak istediÄŸinizden emin misiniz?</pluralform> -<pluralform>Åžu %x ögeyi geri dönüşüm kutusuna taşımak istediÄŸinizden emin misiniz?</pluralform> +<pluralform>AÅŸağıdaki ögeyi Geri Dönüşüm Kutusuna göndermek istediÄŸinize emin misiniz?</pluralform> +<pluralform>AÅŸağıdaki ögeleri Geri Dönüşüm Kutusuna göndermek istediÄŸinize emin misiniz?</pluralform> </target> <source> -<pluralform>Do you really want to delete the following object?</pluralform> -<pluralform>Do you really want to delete the following %x objects?</pluralform> +<pluralform>Do you really want to delete the following item?</pluralform> +<pluralform>Do you really want to delete the following %x items?</pluralform> </source> <target> -<pluralform>Åžu ögeyi silmek istiyor musunuz?</pluralform> -<pluralform>Åžu %x ögeyi silmek istiyor musunuz?</pluralform> +<pluralform>AÅŸağıdaki ögeyi silmek istediÄŸinize emin misiniz?</pluralform> +<pluralform>AÅŸağıdaki ögeleri silmek istediÄŸinize emin misiniz?</pluralform> </target> <source>Leave as unresolved conflict</source> -<target>UyuÅŸmazlık çözülmeden kalsın</target> +<target>UyuÅŸmazlık çözülmeden bırakılsın</target> + +<source>Time stamp</source> +<target>Zaman Damgası</target> + +<source>Append a timestamp to each file name</source> +<target>Dosya adlarına zaman damgası eklensin</target> <source>Replace</source> -<target>DeÄŸiÅŸtir</target> +<target>DeÄŸiÅŸtirin</target> <source>Move files and replace if existing</source> -<target>Dosyaları taşı ve varsa üzerine yaz</target> - -<source>Append a timestamp to each file name</source> -<target>Dosya adlarına zaman damgası ekle</target> +<target>Dosyalar taşınsın ve varsa üzerine yazılsın</target> <source>Folder</source> <target>Klasör</target> @@ -1260,6 +1233,12 @@ Not: Dosya adları kök klasörlere göre bağıl olmalıdır! <source>Cannot set privilege %x.</source> <target>%x izni verilemedi.</target> +<source>Failed to suspend system sleep mode.</source> +<target>Sistem uyku kipine geçirilemedi.</target> + +<source>Cannot change process I/O priorities.</source> +<target>GiriÅŸ/Çıkış iÅŸlemi öncelikleri deÄŸiÅŸtirilemedi</target> + <source>Unable to move %x to the Recycle Bin!</source> <target>%x Geri Dönüşüm Kutusuna gönderilemedi</target> @@ -1273,28 +1252,52 @@ Not: Dosya adları kök klasörlere göre bağıl olmalıdır! <target>Son eÅŸleÅŸtirmeden bu yana bir deÄŸiÅŸiklik olmamış!</target> <source>The corresponding database entries are not in sync considering current settings.</source> -<target>Karşı düşen veritabanı kayıtları, geçerli ayarlar göz önüne alındığında eÅŸleÅŸmiyor.</target> +<target>Geçerli ayarlar ile ilgili veritabanı kayıtları eÅŸleÅŸmiyor.</target> <source>Setting default synchronization directions: Old files will be overwritten with newer files.</source> <target>Varsayılan eÅŸleÅŸtirme yönleri ayarlanıyor: Yeni dosyalar eski dosyaların üzerine yazılacak.</target> +<source>Checking recycle bin availability for folder %x...</source> +<target>%x klasörü için Geri Dönüşüm Kutusu kullanılabilir mi diye bakılıyor...</target> + +<source>Moving file %x to recycle bin</source> +<target>%x dosyası geri dönüşüm kutusuna atılıyor</target> + +<source>Moving folder %x to recycle bin</source> +<target>%x klasörü geri dönüşüm kutusuna atılıyor</target> + +<source>Moving symbolic link %x to recycle bin</source> +<target>%x sembolik baÄŸlantısı geri dönüşüm kutusuna atılıyor</target> + +<source>Deleting file %x</source> +<target>%x dosyası siliniyor</target> + +<source>Deleting folder %x</source> +<target>%x klasörü siliniyor</target> + +<source>Deleting symbolic link %x</source> +<target>%x sembolik baÄŸlantısı siliniyor</target> + <source>Recycle Bin is not available for the following paths! Files will be deleted permanently instead:</source> -<target>Åžu yollar için geri dönüşüm kutusu kullanılamaz! Dosyalar anında ve tamamen silinir:</target> +<target>AÅŸağıdaki yollar için Geri Dönüşüm Kutusu kullanılamaz! Dosyalar anında ve tamamen silinir:</target> + +<source>The corresponding folder will be considered as empty.</source> +<target>Karşıdaki klasör boÅŸ olarak kabul edilecek.</target> -<source>You can ignore this error to consider the folder as empty.</source> -<target>Bu hatayı yoksayarak, klasörün boÅŸ olarak kabul edilmesini saÄŸlayabilirsiniz.</target> +<source>Cannot find the following folders:</source> +<target>AÅŸağıdaki klasörler bulunamadı:</target> -<source>Cannot find folder %x.</source> -<target>%x klasörü bulunamıyor.</target> +<source>You can ignore this error to consider each folder as empty.</source> +<target>Bu hatayı yok sayarak karşıdaki klasörleri boÅŸ kabul edebilirsiniz.</target> <source>Directories are dependent! Be careful when setting up synchronization rules:</source> <target>Klasörler bağımlı! EÅŸleÅŸtirme kurallarını koyarken dikkatli olun:</target> <source>Start comparison</source> -<target>KarşılaÅŸtırmaya baÅŸla</target> +<target>KarşılaÅŸtırmaya baÅŸlayın</target> -<source>Preparing synchronization...</source> -<target>EÅŸleÅŸtirmeye hazırlanıyor...</target> +<source>Calculating sync directions...</source> +<target>EÅŸleÅŸtirme yönleri hesaplanıyor...</target> <source>Conflict detected:</source> <target>UyuÅŸmazlık bulundu:</target> @@ -1354,29 +1357,11 @@ Not: Dosya adları kök klasörlere göre bağıl olmalıdır! <target>Soldaki öznitelikleri güncelle</target> <source>Update attributes on right</source> -<target>SaÄŸdaki öznitelikleri güncelle</target> +<target>SaÄŸdaki öznitelikler güncellensin</target> <source>Multiple...</source> <target>Çoklu...</target> -<source>Deleting file %x</source> -<target>%x dosyası siliniyor</target> - -<source>Deleting folder %x</source> -<target>%x klasörü siliniyor</target> - -<source>Deleting symbolic link %x</source> -<target>%x sembolik baÄŸlantısı siliniyor</target> - -<source>Moving file %x to recycle bin</source> -<target>%x dosyası geri dönüşüm kutusuna atılıyor</target> - -<source>Moving folder %x to recycle bin</source> -<target>%x klasörü geri dönüşüm kutusuna atılıyor</target> - -<source>Moving symbolic link %x to recycle bin</source> -<target>%x sembolik baÄŸlantısı geri dönüşüm kutusuna atılıyor</target> - <source>Moving file %x to %y</source> <target>%x dosyası %y içine taşınıyor</target> @@ -1389,9 +1374,6 @@ Not: Dosya adları kök klasörlere göre bağıl olmalıdır! <source>Removing old versions...</source> <target>Eski sürümler siliniyor...</target> -<source>Creating file %x</source> -<target>%x dosyası ekleniyor</target> - <source>Creating symbolic link %x</source> <target>%x sembolik baÄŸlantısı ekleniyor</target> @@ -1410,6 +1392,9 @@ Not: Dosya adları kök klasörlere göre bağıl olmalıdır! <source>Updating attributes of %x</source> <target>%x öznitelikleri güncelleniyor</target> +<source>Cannot find %x.</source> +<target>%x bulunamadı.</target> + <source>Target folder %x already existing.</source> <target>%x hedef klasörü zaten var.</target> @@ -1455,6 +1440,9 @@ Not: Dosya adları kök klasörlere göre bağıl olmalıdır! <source>Generating database...</source> <target>Veri tabanı oluÅŸturuluyor...</target> +<source>Creating Volume Shadow Copy for %x...</source> +<target>%x için Birim Gölge Kopyası oluÅŸturuluyor...</target> + <source>Data verification error: Source and target file have different content!</source> -<target>Veri doÄŸrulama hatası: Kaynak ve hedef dosyası içeriÄŸi farklı!</target> +<target>Veri doÄŸrulama hatası: Kaynak ve hedef dosyanın içerikleri farklı!</target> diff --git a/BUILD/Languages/ukrainian.lng b/BUILD/Languages/ukrainian.lng index a2a0923c..374e212e 100644 --- a/BUILD/Languages/ukrainian.lng +++ b/BUILD/Languages/ukrainian.lng @@ -19,6 +19,9 @@ <source>Total time:</source> <target>Загальний чаÑ:</target> +<source>Cannot set directory lock for %x.</source> +<target>Ðе вдаєтьÑÑ Ð·Ð°Ð¼ÐºÐ½ÑƒÑ‚Ð¸ каталога %x.</target> + <source>Show in Explorer</source> <target>Показати у Провіднику</target> @@ -40,6 +43,9 @@ <source>Error</source> <target>Помилка</target> +<source>Selected variant:</source> +<target>Вибраний варіант:</target> + <source>Select alternate comparison settings</source> <target>Вибрати альтернативні Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ñ€Ñ–Ð²Ð½ÑннÑ</target> @@ -58,6 +64,12 @@ <source>Clear filter settings</source> <target>ОчиÑтити Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ñ–Ð»ÑŒÑ‚Ñ€Ð°</target> +<source>Copy</source> +<target>Копіювати</target> + +<source>Paste</source> +<target>Вклеїти</target> + <source>Save as batch job</source> <target>Зберегти Ñк пакетне завданнÑ</target> @@ -97,11 +109,8 @@ <source>Fatal Error</source> <target>Критична помилка</target> -<source>Windows Error Code %x:</source> -<target>Код помилки Windows %x:</target> - -<source>Linux Error Code %x:</source> -<target>Код помилки Linux %x:</target> +<source>Error Code %x:</source> +<target>Код помилки %x:</target> <source>Cannot resolve symbolic link %x.</source> <target>Ðе вдаєтьÑÑ Ð²Ð¸Ñ€Ñ–ÑˆÐ¸Ñ‚Ð¸ Ñимвольне поÑÐ¸Ð»Ð°Ð½Ð½Ñ %x.</target> @@ -161,8 +170,8 @@ <source>Waiting while directory is locked (%x)...</source> <target>ÐžÑ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð½ÑÑ‚Ñ‚Ñ Ð±Ð»Ð¾ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð· каталогу (%x)...</target> -<source>Cannot set directory lock %x.</source> -<target>Ðе вдаєтьÑÑ Ð²Ñтановити Ð±Ð»Ð¾ÐºÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð° %Ñ….</target> +<source>Creating file %x</source> +<target>Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ %x</target> <source> <pluralform>1 sec</pluralform> @@ -196,9 +205,6 @@ <source>/sec</source> <target>/Ñек</target> -<source>Cannot find file %x.</source> -<target>Ðе вдаєтьÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ файлу %x.</target> - <source>File %x does not contain a valid configuration.</source> <target>Файл %x не міÑтить правильної конфігурації.</target> @@ -223,6 +229,9 @@ <source>Cannot read the following XML elements:</source> <target>Ðе вдаєтьÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ такі елементи XML:</target> +<source>Cannot find file %x.</source> +<target>Ðе вдаєтьÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ файлу %x.</target> + <source>&Open...</source> <target>Відкрити...</target> @@ -445,35 +454,32 @@ The command is triggered if: <target>2. &Синхронізувати</target> <source>&Language</source> -<target>&Мова</target> +<target>Мова</target> <source>&Global settings...</source> -<target>&Глобальні налаштуваннÑ...</target> +<target>Глобальні налаштуваннÑ...</target> <source>&Export file list...</source> -<target>&ЕкÑпортувати ÑпиÑок файлів...</target> +<target>ЕкÑпортувати ÑпиÑок файлів...</target> <source>&Advanced</source> -<target>&Додатково</target> +<target>Додатково</target> -<source>&Check for new version</source> -<target>&Провірити наÑвніÑÑ‚ÑŒ нової верÑÑ–Ñ—</target> +<source>&Check now</source> +<target>Перевірити тепер</target> -<source>Compare</source> -<target>ПорівнÑти</target> +<source>Check &automatically once a week</source> +<target>ПеревірÑти автоматично щотижнÑ</target> -<source>Compare both sides</source> -<target>ПорівнÑти обидві Ñторони</target> +<source>Check for new version</source> +<target>Перевірити наÑвніÑÑ‚ÑŒ нової верÑÑ–Ñ—</target> -<source>&Abort</source> -<target>&Припинити</target> +<source>Compare</source> +<target>ПорівнÑти</target> <source>Synchronize</source> <target>Синхронізувати</target> -<source>Start synchronization</source> -<target>Розпочати Ñинхронізацію</target> - <source>Add folder pair</source> <target>Додати пару папок</target> @@ -483,18 +489,6 @@ The command is triggered if: <source>Swap sides</source> <target>ПомінÑти міÑцÑми</target> -<source>Open</source> -<target>Відкрити</target> - -<source>Save</source> -<target>Зберегти</target> - -<source>Last used configurations (press DEL to remove from list)</source> -<target> -ОÑтанні викориÑтовувані Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñинхронізації -(тиÑніть DEL Ð´Ð»Ñ Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð·Ñ– ÑпиÑку) -</target> - <source>Hide excluded items</source> <target>Приховати виключені елементи</target> @@ -525,6 +519,18 @@ The command is triggered if: <source>Time elapsed:</source> <target>Пройшло чаÑу:</target> +<source>Synchronizing...</source> +<target>СинхронізаціÑ...</target> + +<source>On completion</source> +<target>ПіÑÐ»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ</target> + +<source>Close</source> +<target>Замкнути</target> + +<source>&Pause</source> +<target>&Пауза</target> + <source>Batch job</source> <target>Пакетне завданнÑ</target> @@ -555,9 +561,6 @@ The command is triggered if: <source>Abort synchronization on first error</source> <target>Перервати Ñинхронізацію при першій помилці</target> -<source>On completion</source> -<target>ПіÑÐ»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ</target> - <source>Show progress dialog</source> <target>Показувати вікно прогреÑу</target> @@ -611,8 +614,8 @@ is the same <source><- Two way -></source> <target><- Обидва напрÑмки -></target> -<source>Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically.</source> -<target>ВиÑвити та поширити зміни на обидві Ñторони викориÑтовуючи базу даних. ВидаленнÑ, Ð¿ÐµÑ€ÐµÐ¹Ð¼ÐµÐ½ÑƒÐ²Ð°Ð½Ð½Ñ Ñ‚Ð° конфлікти визначаютьÑÑ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡Ð½Ð¾.</target> +<source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> +<target>ВиÑвити та поширити зміни на обидві Ñторони. ВидаленнÑ, Ð¿ÐµÑ€ÐµÐ¹Ð¼ÐµÐ½ÑƒÐ²Ð°Ð½Ð½Ñ Ñ‚Ð° конфлікти визначаютьÑÑ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡Ð½Ð¾ викориÑтовуючи базу даних.</target> <source>Mirror ->></source> <target>Дзеркало ->></target> @@ -650,15 +653,12 @@ is the same <source>Versioning</source> <target>Ð—Ð°Ð¿Ð¸Ñ Ð²ÐµÑ€Ñій</target> -<source>Move time-stamped files into specified folder</source> -<target>ПереміÑтити файли з чаÑовою міткою у вказану папку</target> +<source>Move files to user-defined folder</source> +<target>ПереміÑтити файли у визначену кориÑтувачем папку</target> <source>Naming convention:</source> <target>Метод іменуваннÑ:</target> -<source>Configuration</source> -<target>ÐалаштуваннÑ</target> - <source>Item exists on left side only</source> <target>Елемент Ñ–Ñнує тільки ліворуч</target> @@ -677,12 +677,6 @@ is the same <source>Conflict/item cannot be categorized</source> <target>Ðе вдаєтьÑÑ ÐºÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ð¸Ð·ÑƒÐ²Ð°Ñ‚Ð¸ конфлікт/елемент</target> -<source>Synchronizing...</source> -<target>СинхронізаціÑ...</target> - -<source>&Pause</source> -<target>&Пауза</target> - <source>Source code written in C++ using:</source> <target>Код програми напиÑаний на C++ з викориÑтаннÑм:</target> @@ -743,8 +737,8 @@ Note: File names must be relative to base directories! <source>Maximum</source> <target>МакÑимум</target> -<source>&Default</source> -<target>&За замовчуваннÑм</target> +<source>&Clear</source> +<target>ОчиÑтити</target> <source>Fail-safe file copy</source> <target>Безпечне ÐºÐ¾Ð¿Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð²</target> @@ -773,6 +767,12 @@ Note: File names must be relative to base directories! <source>Description</source> <target>ОпиÑ</target> +<source>&Default</source> +<target>&За замовчуваннÑм</target> + +<source>Start synchronization</source> +<target>Розпочати Ñинхронізацію</target> + <source>Variant</source> <target>Варіант</target> @@ -803,17 +803,23 @@ Note: File names must be relative to base directories! <source>Overview</source> <target>Головна</target> +<source>Configuration</source> +<target>ÐалаштуваннÑ</target> + <source>Filter files</source> <target>Фільтр файлів</target> <source>Select view</source> <target>СпиÑок файлів</target> -<source>Deleting file %x</source> -<target>Ð’Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ %x</target> +<source>Open...</source> +<target>Відкрити...</target> -<source>Deleting %x</source> -<target></target> +<source>Save</source> +<target>Зберегти</target> + +<source>Compare both sides</source> +<target>ПорівнÑти обидві Ñторони</target> <source>Set direction:</source> <target>Виберіть напрÑм:</target> @@ -872,104 +878,62 @@ Note: File names must be relative to base directories! <source>FreeFileSync batch</source> <target>Командний файл FreeFileSync</target> -<source>Never save changes</source> -<target>Ðіколи не зберігати змін</target> - <source>Do you want to save changes to %x?</source> <target>Зберегти зміни в %x?</target> <source>Do&n't save</source> <target>Ðе зберігати</target> +<source>Never save changes</source> +<target>Ðіколи не зберігати змін</target> + <source>Configuration loaded!</source> <target>ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñинхронізації загружено!</target> -<source>Hide files that exist on left side only</source> -<target>Приховати файли, Ñкі Ñ” тільки ліворуч</target> - <source>Show files that exist on left side only</source> <target>Показати файли, Ñкі Ñ” тільки ліворуч</target> -<source>Hide files that exist on right side only</source> -<target>Приховати файли, Ñкі Ñ” тільки праворуч</target> - <source>Show files that exist on right side only</source> <target>Показати файли, Ñкі Ñ” тільки праворуч</target> -<source>Hide files that are newer on left</source> -<target>Приховати файли, котрі новіші ліворуч</target> - <source>Show files that are newer on left</source> <target>Показати файли, Ñкі новіші ліворуч</target> -<source>Hide files that are newer on right</source> -<target>Приховати файли, котрі новіші праворуч</target> - <source>Show files that are newer on right</source> <target>Показати файли, Ñкі новіші праворуч</target> -<source>Hide files that are equal</source> -<target>Приховати однакові файли</target> - <source>Show files that are equal</source> <target>Показати однакові файли</target> -<source>Hide files that are different</source> -<target>Приховати файли з відмінноÑÑ‚Ñми</target> - <source>Show files that are different</source> <target>Показати різні файли</target> -<source>Hide conflicts</source> -<target>Приховати конфлікти</target> - <source>Show conflicts</source> <target>Показати конфлікти</target> -<source>Hide files that will be created on the left side</source> -<target>Приховати файли, Ñкі будуть Ñтворені ліворуч</target> - <source>Show files that will be created on the left side</source> <target>Показати файли, Ñкі будуть Ñтворені ліворуч</target> -<source>Hide files that will be created on the right side</source> -<target>Приховати файли, Ñкі будуть Ñтворені праворуч</target> - <source>Show files that will be created on the right side</source> <target>Показати файли, Ñкі будуть Ñтворені праворуч</target> -<source>Hide files that will be deleted on the left side</source> -<target>Приховати файли, Ñкі будуть вилучені ліворуч</target> - <source>Show files that will be deleted on the left side</source> <target>Показати файли, Ñкі будуть вилучені ліворуч</target> -<source>Hide files that will be deleted on the right side</source> -<target>Приховати файли, Ñкі будуть вилучені праворуч</target> - <source>Show files that will be deleted on the right side</source> <target>Показати файли, Ñкі будуть вилучені праворуч</target> -<source>Hide files that will be overwritten on left side</source> -<target>Приховати файли, Ñкі будуть перезапиÑані ліворуч</target> - <source>Show files that will be overwritten on left side</source> <target>Показати файли, Ñкі будуть перезапиÑані ліворуч</target> -<source>Hide files that will be overwritten on right side</source> -<target>Приховати файли, Ñкі будуть перезапиÑані праворуч</target> - <source>Show files that will be overwritten on right side</source> <target>Показати файли, Ñкі будуть перезапиÑані праворуч</target> -<source>Hide files that won't be copied</source> -<target>Приховати файли, Ñкі не будуть зкопійовані</target> - <source>Show files that won't be copied</source> <target>Показати файли, Ñкі не будуть зкопійовані</target> <source>Set as default</source> -<target></target> +<target>Ð’Ñтановити за замовчуваннÑм</target> <source>All folders are in sync!</source> <target>Ð’ÑÑ– папки Ñинхронізовано!</target> @@ -983,6 +947,9 @@ Note: File names must be relative to base directories! <source>File list exported!</source> <target>СпиÑок файлів екÑпортовано!</target> +<source>Searching for program updates...</source> +<target>Пошук оновлень програми ...</target> + <source> <pluralform>1 directory</pluralform> <pluralform>%x directories</pluralform> @@ -1019,6 +986,9 @@ Note: File names must be relative to base directories! <source>&Ignore</source> <target>&Ігнорувати</target> +<source>Don't show this warning again</source> +<target>Ðе показувати більше це попередженнÑ</target> + <source>&Switch</source> <target>&Змінити</target> @@ -1037,9 +1007,6 @@ Note: File names must be relative to base directories! <source>Comparing content...</source> <target>ÐŸÐ¾Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ Ð²Ð¼Ñ–Ñту...</target> -<source>Copy</source> -<target>КопіÑ</target> - <source>Paused</source> <target>Призупинено</target> @@ -1122,37 +1089,40 @@ Note: File names must be relative to base directories! <target>Зробити приховані Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ Ñ‚Ð° діалоги ​​знову видимими?</target> <source> -<pluralform>Do you really want to move the following object to the Recycle Bin?</pluralform> -<pluralform>Do you really want to move the following %x objects to the Recycle Bin?</pluralform> +<pluralform>Do you really want to move the following item to the Recycle Bin?</pluralform> +<pluralform>Do you really want to move the following %x items to the Recycle Bin?</pluralform> </source> <target> -<pluralform>Ви Ñправді хочете переміÑтити у Корзину цей %x об'єкт?</pluralform> -<pluralform>Ви Ñправді хочете переміÑтити у Корзину ці %x об'єкти?</pluralform> -<pluralform>Ви Ñправді хочете переміÑтити у Корзину ці %x об'єктів?</pluralform> +<pluralform>Ви дійÑно хочете переміÑтити цей елемент до Корзини?</pluralform> +<pluralform>Ви дійÑно хочете переміÑтити ці %x елементи до Корзини?</pluralform> +<pluralform>Ви дійÑно хочете переміÑтити ці %x елементів до Корзини?</pluralform> </target> <source> -<pluralform>Do you really want to delete the following object?</pluralform> -<pluralform>Do you really want to delete the following %x objects?</pluralform> +<pluralform>Do you really want to delete the following item?</pluralform> +<pluralform>Do you really want to delete the following %x items?</pluralform> </source> <target> -<pluralform>Ви Ñправді хочете вилучити цей %x об'єкт?</pluralform> -<pluralform>Ви Ñправді хочете вилучити ці %x об'єкти?</pluralform> -<pluralform>Ви Ñправді хочете вилучити ці %x об'єктів?</pluralform> +<pluralform>Ви дійÑно хочете вилучити цей елемент?</pluralform> +<pluralform>Ви дійÑно хочете вилучити ці %x елементи?</pluralform> +<pluralform>Ви дійÑно хочете вилучити ці %x елементів?</pluralform> </target> <source>Leave as unresolved conflict</source> <target>Залишити Ñк невирішений конфлікт</target> +<source>Time stamp</source> +<target>ЧаÑова мітка</target> + +<source>Append a timestamp to each file name</source> +<target>Додати чаÑову мітку до кожного імені файлу</target> + <source>Replace</source> <target>Замінити</target> <source>Move files and replace if existing</source> <target>ПереміÑтити файли замінюючи Ñ–Ñнуючі</target> -<source>Append a timestamp to each file name</source> -<target>Додати чаÑову мітку до кожного імені файлу</target> - <source>Folder</source> <target>Папка</target> @@ -1165,6 +1135,9 @@ Note: File names must be relative to base directories! <source>Files</source> <target>Файли</target> +<source>Items</source> +<target></target> + <source>Percentage</source> <target>Проценти</target> @@ -1270,6 +1243,12 @@ Note: File names must be relative to base directories! <source>Cannot set privilege %x.</source> <target>Ðе вдаєтьÑÑ Ð²Ñтановити привілеї %Ñ….</target> +<source>Failed to suspend system sleep mode.</source> +<target>Ðе вдалоÑÑ Ð¿Ñ€Ð¸Ð·ÑƒÐ¿Ð¸Ð½Ð¸Ñ‚Ð¸ режим Ñну ÑиÑтеми.</target> + +<source>Cannot change process I/O priorities.</source> +<target>Ðе вдалоÑÑ Ð·Ð¼Ñ–Ð½Ð¸Ñ‚Ð¸ пріоритетів Ð’Ñ…/Вих процеÑу.</target> + <source>Unable to move %x to the Recycle Bin!</source> <target>Ðе вдаєтьÑÑ Ð¿ÐµÑ€ÐµÐ½ÐµÑти %x до Корзини!</target> @@ -1292,16 +1271,37 @@ Note: File names must be relative to base directories! </target> <source>Checking recycle bin availability for folder %x...</source> -<target></target> +<target>Перевірка доÑтупноÑÑ‚Ñ– Корзини Ð´Ð»Ñ Ð¿Ð°Ð¿ÐºÐ¸ %x...</target> + +<source>Moving file %x to recycle bin</source> +<target>ÐŸÐµÑ€ÐµÐ¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ %x у Корзину</target> + +<source>Moving folder %x to recycle bin</source> +<target>ÐŸÐµÑ€ÐµÐ¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð¿Ð°Ð¿ÐºÐ¸ %x у Корзину</target> + +<source>Moving symbolic link %x to recycle bin</source> +<target>ÐŸÐµÑ€ÐµÐ¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ñимвольного поÑÐ¸Ð»Ð°Ð½Ð½Ñ %x у Корзину</target> + +<source>Deleting file %x</source> +<target>Ð’Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ %x</target> + +<source>Deleting folder %x</source> +<target>Ð’Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð¿Ð°Ð¿ÐºÐ¸ %x</target> + +<source>Deleting symbolic link %x</source> +<target>Ð’Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ñимвольного поÑÐ¸Ð»Ð°Ð½Ð½Ñ %x</target> <source>Recycle Bin is not available for the following paths! Files will be deleted permanently instead:</source> <target>Корзина Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ шлÑху недоÑтупна. Файли будуть вилучені назавжди:</target> -<source>You can ignore this error to consider the folder as empty.</source> -<target>Ви можете ігнорувати цю помилку вважаючи папку порожньою.</target> +<source>The corresponding folder will be considered as empty.</source> +<target>Відповідна папка буде вважатиÑÑ Ð¿Ð¾Ñ€Ð¾Ð¶Ð½ÑŒÐ¾ÑŽ.</target> + +<source>Cannot find the following folders:</source> +<target>Ðе вдаєтьÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ такі папки:</target> -<source>Cannot find folder %x.</source> -<target>Ðе вдаєтьÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ папку %x.</target> +<source>You can ignore this error to consider each folder as empty.</source> +<target>Ви можете ігнорувати цю помилку, вважаючи кожну папку порожньою.</target> <source>Directories are dependent! Be careful when setting up synchronization rules:</source> <target>Залежні каталоги! Будьте уважні при налаштуванні правил Ñинхронізації:</target> @@ -1309,8 +1309,8 @@ Note: File names must be relative to base directories! <source>Start comparison</source> <target>Розпочати порівнÑннÑ</target> -<source>Preparing synchronization...</source> -<target>Підготовка до Ñинхронізації...</target> +<source>Calculating sync directions...</source> +<target>Ð’ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð½Ð°Ð¿Ñ€Ñмку Ñинхронізації...</target> <source>Conflict detected:</source> <target>ВиÑвлено конфлікт:</target> @@ -1375,21 +1375,6 @@ Note: File names must be relative to base directories! <source>Multiple...</source> <target>Різні варіанти...</target> -<source>Deleting folder %x</source> -<target>Ð’Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð¿Ð°Ð¿ÐºÐ¸ %x</target> - -<source>Deleting symbolic link %x</source> -<target>Ð’Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ñимвольного поÑÐ¸Ð»Ð°Ð½Ð½Ñ %x</target> - -<source>Moving file %x to recycle bin</source> -<target>ÐŸÐµÑ€ÐµÐ¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ %x у Корзину</target> - -<source>Moving folder %x to recycle bin</source> -<target>ÐŸÐµÑ€ÐµÐ¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð¿Ð°Ð¿ÐºÐ¸ %x у Корзину</target> - -<source>Moving symbolic link %x to recycle bin</source> -<target>ÐŸÐµÑ€ÐµÐ¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ñимвольного поÑÐ¸Ð»Ð°Ð½Ð½Ñ %x у Корзину</target> - <source>Moving file %x to %y</source> <target>ÐŸÐµÑ€ÐµÐ¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ %x до %y</target> @@ -1402,9 +1387,6 @@ Note: File names must be relative to base directories! <source>Removing old versions...</source> <target>Ð’Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ñтарих верÑій...</target> -<source>Creating file %x</source> -<target>Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ %x</target> - <source>Creating symbolic link %x</source> <target>Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñимвольного поÑÐ¸Ð»Ð°Ð½Ð½Ñ %x</target> @@ -1423,6 +1405,9 @@ Note: File names must be relative to base directories! <source>Updating attributes of %x</source> <target>ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñ–Ð² %x</target> +<source>Cannot find %x.</source> +<target>Ðе вдаєтьÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ %x.</target> + <source>Target folder %x already existing.</source> <target>Цільова папка %x вже Ñ–Ñнує.</target> @@ -1468,6 +1453,9 @@ Note: File names must be relative to base directories! <source>Generating database...</source> <target>Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð±Ð°Ð·Ð¸ даних...</target> +<source>Creating Volume Shadow Copy for %x...</source> +<target>Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¢Ð¾Ð¼Ñƒ тіньового ÐºÐ¾Ð¿Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ %x...</target> + <source>Data verification error: Source and target file have different content!</source> <target>Помилка перевірки даних: вхідний Ñ– вихідний файли мають різний вміÑÑ‚!</target> diff --git a/BUILD/LastError.log b/BUILD/LastError.log new file mode 100644 index 00000000..55a1d2e2 --- /dev/null +++ b/BUILD/LastError.log @@ -0,0 +1 @@ +[30.04.2013 19:55:13] Unknown error.
\ No newline at end of file @@ -39,7 +39,7 @@ endif ifeq ($(BUILD),Launchpad) #default build/Launchpad CXXFLAGS += `wx-config --cxxflags --debug=no` -LINKFLAGS += `wx-config --libs std, aui --debug=no` -lboost_thread -lboost_system +LINKFLAGS += `wx-config --libs std, aui --debug=no` -lboost_thread -lboost_system -lz else #static wxWidgets and boost library linkage for precompiled release WX_CONFIG_BIN =$(HOME)/Desktop/wxGTK-2.8.12/lib/release/bin/wx-config @@ -47,7 +47,7 @@ CXXFLAGS += -I$(HOME)/Desktop/boost_1_53_0 BOOST_LIB_DIR =$(HOME)/Desktop/boost_1_53_0/stage/lib CXXFLAGS += `$(WX_CONFIG_BIN) --cxxflags --debug=no --static=yes` -LINKFLAGS += `$(WX_CONFIG_BIN) --libs std, aui --debug=no --static=yes` $(BOOST_LIB_DIR)/libboost_thread.a $(BOOST_LIB_DIR)/libboost_system.a +LINKFLAGS += `$(WX_CONFIG_BIN) --libs std, aui --debug=no --static=yes` $(BOOST_LIB_DIR)/libboost_thread.a $(BOOST_LIB_DIR)/libboost_system.a -lX11 endif endif diff --git a/RealtimeSync/main_dlg.cpp b/RealtimeSync/main_dlg.cpp index 1dbeb5e0..55d33fa1 100644 --- a/RealtimeSync/main_dlg.cpp +++ b/RealtimeSync/main_dlg.cpp @@ -239,10 +239,10 @@ void MainDialog::loadConfig(const wxString& filename) catch (const xmlAccess::FfsXmlError& error) { if (error.getSeverity() == xmlAccess::FfsXmlError::WARNING) - wxMessageBox(error.toString(), _("Warning"), wxOK | wxICON_WARNING); + wxMessageBox(error.toString(), _("Warning"), wxOK | wxICON_WARNING, this); else { - wxMessageBox(error.toString(), _("Error"), wxOK | wxICON_ERROR); + wxMessageBox(error.toString(), _("Error"), wxOK | wxICON_ERROR, this); return; } } diff --git a/RealtimeSync/makefile b/RealtimeSync/makefile index aee2d43c..82909526 100644 --- a/RealtimeSync/makefile +++ b/RealtimeSync/makefile @@ -22,7 +22,7 @@ LINKFLAGS += `pkg-config --libs gtk+-2.0` ifeq ($(BUILD),Launchpad) #default build/Launchpad CXXFLAGS += `wx-config --cxxflags --debug=no` -LINKFLAGS += `wx-config --libs --debug=no` -lboost_thread -lboost_system +LINKFLAGS += `wx-config --libs --debug=no` -lboost_thread -lboost_system -lz else #static wxWidgets and boost library linkage for precompiled release WX_CONFIG_BIN =$(HOME)/Desktop/wxGTK-2.8.12/lib/release/bin/wx-config @@ -30,7 +30,7 @@ CXXFLAGS += -I$(HOME)/Desktop/boost_1_53_0 BOOST_LIB_DIR =$(HOME)/Desktop/boost_1_53_0/stage/lib CXXFLAGS += `$(WX_CONFIG_BIN) --cxxflags --debug=no --static=yes` -LINKFLAGS += `$(WX_CONFIG_BIN) --libs --debug=no --static=yes` $(BOOST_LIB_DIR)/libboost_thread.a $(BOOST_LIB_DIR)/libboost_system.a +LINKFLAGS += `$(WX_CONFIG_BIN) --libs --debug=no --static=yes` $(BOOST_LIB_DIR)/libboost_thread.a $(BOOST_LIB_DIR)/libboost_system.a -lX11 endif endif diff --git a/RealtimeSync/xml_proc.cpp b/RealtimeSync/xml_proc.cpp index 5e645a31..1f4d89cc 100644 --- a/RealtimeSync/xml_proc.cpp +++ b/RealtimeSync/xml_proc.cpp @@ -49,7 +49,7 @@ void xmlAccess::readRealConfig(const Zstring& filename, XmlRealConfig& config) if (in.errorsOccured()) throw FfsXmlError(replaceCpy(_("Configuration file %x loaded partially only."), L"%x", fmtFileName(filename)) + L"\n\n" + - getErrorMessageFormatted(in), FfsXmlError::WARNING); + getErrorMessageFormatted(in.getErrorsAs<std::wstring>()), FfsXmlError::WARNING); } diff --git a/algorithm.cpp b/algorithm.cpp index b7adc039..46239369 100644 --- a/algorithm.cpp +++ b/algorithm.cpp @@ -168,13 +168,13 @@ struct AllEqual //test if non-equal items exist in scanned data bool operator()(const HierarchyObject& hierObj) const { return std::all_of(hierObj.refSubFiles().begin(), hierObj.refSubFiles().end(), - [](const FileMapping& fileObj) { return fileObj.getCategory() == FILE_EQUAL; }) && //files + [](const FileMapping& fileObj) { return fileObj.getCategory() == FILE_EQUAL; })&& //files - std::all_of(hierObj.refSubLinks().begin(), hierObj.refSubLinks().end(), - [](const SymLinkMapping& linkObj) { return linkObj.getLinkCategory() == SYMLINK_EQUAL; }) && //symlinks + std::all_of(hierObj.refSubLinks().begin(), hierObj.refSubLinks().end(), + [](const SymLinkMapping& linkObj) { return linkObj.getLinkCategory() == SYMLINK_EQUAL; })&& //symlinks - std::all_of(hierObj.refSubDirs(). begin(), hierObj.refSubDirs(). end(), - [](const DirMapping& dirObj) + std::all_of(hierObj.refSubDirs(). begin(), hierObj.refSubDirs(). end(), + [](const DirMapping& dirObj) { return dirObj.getDirCategory() == DIR_EQUAL && AllEqual()(dirObj); //short circuit-behavior! }); //directories @@ -1036,7 +1036,6 @@ void zen::applyFiltering(FolderComparison& folderCmp, const MainConfiguration& m mainCfg.additionalPairs.begin(), //add additional pairs mainCfg.additionalPairs.end()); - for (auto it = allPairs.begin(); it != allPairs.end(); ++it) { BaseDirMapping& baseDirectory = *folderCmp[it - allPairs.begin()]; diff --git a/comparison.cpp b/comparison.cpp index 63e7eddd..3cb20df0 100644 --- a/comparison.cpp +++ b/comparison.cpp @@ -54,7 +54,7 @@ std::vector<FolderPairCfg> zen::extractCompareCfg(const MainConfiguration& mainC //------------------------------------------------------------------------------------------ namespace { -void checkForIncompleteInput(const std::vector<FolderPairCfg>& folderPairsForm, ProcessCallback& callback) +void checkForIncompleteInput(const std::vector<FolderPairCfg>& folderPairsForm, bool& warningInputFieldEmpty, ProcessCallback& callback) { bool havePartialPair = false; bool haveFullPair = false; @@ -68,13 +68,9 @@ void checkForIncompleteInput(const std::vector<FolderPairCfg>& folderPairsForm, haveFullPair = true; }); - warn_static("seltsame fehlermeldung + each folder macht keinen sinn") - tryReportingError([&] - { - if (havePartialPair == haveFullPair) //error if: all empty or exist both full and partial pairs -> support single-dir scenario - throw FileError(_("A folder input field is empty.") + L" \n\n" + - _("You can ignore this error to consider each folder as empty.")); - }, callback); + if (havePartialPair == haveFullPair) //error if: all empty or exist both full and partial pairs -> support single-dir scenario + callback.reportWarning(_("A folder input field is empty.") + L" \n\n" + + _("The corresponding folder will be considered as empty."), warningInputFieldEmpty); } @@ -97,7 +93,7 @@ std::set<Zstring, LessFilename> determineExistentDirs(const std::vector<Zstring> std::wstring msg = _("Cannot find the following folders:") + L"\n"; std::for_each(dirsMissing.begin(), dirsMissing.end(), [&](const Zstring& dirname) { msg += std::wstring(L"\n") + dirname; }); - msg += L"\n\n" + _("You can ignore this error to consider each folder as empty."); + msg += L"\n\n" + _("You can ignore this error to consider each folder as empty. The folders then will be created automatically during synchronization."); throw FileError(msg); } }, callback); @@ -108,7 +104,7 @@ std::set<Zstring, LessFilename> determineExistentDirs(const std::vector<Zstring> //check whether one side is subdirectory of other side (folder pair wise!) //similar check if one directory is read/written by multiple pairs not before beginning of synchronization -std::wstring checkFolderDependency(const std::vector<FolderPairCfg>& folderPairsForm) //returns warning message, empty if all ok +void checkFolderDependency(const std::vector<FolderPairCfg>& folderPairsForm, bool& warningDependentFolders, ProcessCallback& callback) //returns warning message, empty if all ok { std::vector<std::pair<Zstring, Zstring>> dependentDirs; @@ -125,17 +121,16 @@ std::wstring checkFolderDependency(const std::vector<FolderPairCfg>& folderPairs dependentDirs.push_back(std::make_pair(i->leftDirectoryFmt, i->rightDirectoryFmt)); } - std::wstring warningMsg; - if (!dependentDirs.empty()) { - warningMsg = _("Directories are dependent! Be careful when setting up synchronization rules:"); + std::wstring warningMsg = _("Directories are dependent! Be careful when setting up synchronization rules:"); for (auto it = dependentDirs.begin(); it != dependentDirs.end(); ++it) warningMsg += std::wstring(L"\n\n") + it->first + L"\n" + it->second; + + callback.reportWarning(warningMsg, warningDependentFolders); } - return warningMsg; } @@ -263,6 +258,8 @@ void zen::compare(size_t fileTimeTolerance, xmlAccess::OptionalDialogs& warnings, bool allowUserInteraction, bool runWithBackgroundPriority, + bool createDirLocks, + std::unique_ptr<LockHolder>& dirLocks, const std::vector<FolderPairCfg>& cfgList, FolderComparison& output, ProcessCallback& callback) @@ -301,8 +298,8 @@ void zen::compare(size_t fileTimeTolerance, //-------------------some basic checks:------------------------------------------ - checkForIncompleteInput(cfgList, callback); - + checkForIncompleteInput(cfgList, warnings.warningInputFieldEmpty, callback); + checkFolderDependency (cfgList, warnings.warningDependentFolders, callback); std::set<Zstring, LessFilename> dirnamesExisting; //list of directories that are *expected* to be existent (and need to be scanned)! @@ -317,27 +314,24 @@ void zen::compare(size_t fileTimeTolerance, }); dirnamesExisting = determineExistentDirs(dirnames, allowUserInteraction, callback); } - auto dirAvailable = [&](const Zstring& dirnameFmt) { return dirnamesExisting.find(dirnameFmt) != dirnamesExisting.end(); }; - - { - //check if folders have dependencies - std::wstring warningMessage = checkFolderDependency(cfgList); - if (!warningMessage.empty()) - callback.reportWarning(warningMessage, warnings.warningDependentFolders); - } + auto dirAvailable = [&](const Zstring& dirnameFmt) { return dirnamesExisting.find(dirnameFmt) != dirnamesExisting.end(); }; //-------------------end of basic checks------------------------------------------ try { + //lock (existing) directories before comparison + if (createDirLocks) + dirLocks = make_unique<LockHolder>(dirnamesExisting, warnings.warningDirectoryLockFailed, callback); + //------------------- fill directory buffer --------------------------------------------------- std::set<DirectoryKey> keysToRead; std::for_each(cfgList.begin(), cfgList.end(), [&](const FolderPairCfg& fpCfg) { - if (dirAvailable(fpCfg.leftDirectoryFmt)) //only request *currently existing * directories: at this point user is aware that non-ex + empty string are seen as empty folder! + if (dirAvailable(fpCfg.leftDirectoryFmt)) //only request *currently existing* directories: at this point user is aware that non-ex + empty string are seen as empty folder! keysToRead.insert(DirectoryKey(fpCfg.leftDirectoryFmt, fpCfg.filter.nameFilter, fpCfg.handleSymlinks)); if (dirAvailable(fpCfg.rightDirectoryFmt)) keysToRead.insert(DirectoryKey(fpCfg.rightDirectoryFmt, fpCfg.filter.nameFilter, fpCfg.handleSymlinks)); @@ -386,7 +380,7 @@ void zen::compare(size_t fileTimeTolerance, { const FolderPairCfg& fpCfg = cfgList[j - output_tmp.begin()]; - callback.reportStatus(_("Preparing synchronization...")); + callback.reportStatus(_("Calculating sync directions...")); callback.forceUiRefresh(); zen::redetermineSyncDirection(fpCfg.directionCfg, *j, [&](const std::wstring& warning) { callback.reportWarning(warning, warnings.warningDatabaseError); }); diff --git a/comparison.h b/comparison.h index 40f7cedb..2796670a 100644 --- a/comparison.h +++ b/comparison.h @@ -11,6 +11,8 @@ #include "lib/process_xml.h" #include "process_callback.h" #include "lib/norm_filter.h" +#include "lib/lock_holder.h" + namespace zen { @@ -47,9 +49,10 @@ void compare(size_t fileTimeTolerance, //max allowed file time deviation xmlAccess::OptionalDialogs& warnings, bool allowUserInteraction, bool runWithBackgroundPriority, - + bool createDirLocks, + std::unique_ptr<LockHolder>& dirLocks, //out const std::vector<FolderPairCfg>& cfgList, - FolderComparison& output, + FolderComparison& output, //out ProcessCallback& callback); } diff --git a/file_hierarchy.h b/file_hierarchy.h index f51e76bb..d003e9ef 100644 --- a/file_hierarchy.h +++ b/file_hierarchy.h @@ -666,6 +666,7 @@ void FileSystemObject::setSyncDirConflict(const std::wstring& description) inline std::wstring FileSystemObject::getSyncOpConflict() const { + assert(getSyncOperation() == SO_UNRESOLVED_CONFLICT); return syncDirConflict ? *syncDirConflict : std::wstring(); } diff --git a/lib/db_file.cpp b/lib/db_file.cpp index 368cf56b..aa893711 100644 --- a/lib/db_file.cpp +++ b/lib/db_file.cpp @@ -24,7 +24,7 @@ namespace { //------------------------------------------------------------------------------------------------------------------------------- const char FILE_FORMAT_DESCR[] = "FreeFileSync"; -const int FILE_FORMAT_VER = 9; +const int DB_FILE_FORMAT_VER = 9; //------------------------------------------------------------------------------------------------------------------------------- typedef std::string UniqueId; @@ -39,6 +39,7 @@ template <SelectedSide side> inline Zstring getDBFilename(const BaseDirMapping& baseMap, bool tempfile = false) { //Linux and Windows builds are binary incompatible: different file id?, problem with case sensitivity? + //what about endianess!? //however 32 and 64 bit db files *are* designed to be binary compatible! //Give db files different names. //make sure they end with ".ffs_db". These files will be excluded from comparison @@ -63,7 +64,7 @@ void saveStreams(const StreamMapping& streamList, const Zstring& filename) //thr writeArray(streamOut, FILE_FORMAT_DESCR, sizeof(FILE_FORMAT_DESCR)); //save file format version - writeNumber<std::int32_t>(streamOut, FILE_FORMAT_VER); + writeNumber<std::int32_t>(streamOut, DB_FILE_FORMAT_VER); //save stream list writeNumber<std::uint32_t>(streamOut, static_cast<std::uint32_t>(streamList.size())); //number of streams, one for each sync-pair @@ -96,7 +97,7 @@ StreamMapping loadStreams(const Zstring& filename) //throw FileError, FileErrorD throw FileError(replaceCpy(_("Database file %x is incompatible."), L"%x", fmtFileName(filename))); const int version = readNumber<std::int32_t>(streamIn); //throw UnexpectedEndOfStreamError - if (version != FILE_FORMAT_VER) //read file format version# + if (version != DB_FILE_FORMAT_VER) //read file format version# throw FileError(replaceCpy(_("Database file %x is incompatible."), L"%x", fmtFileName(filename))); //read stream lists @@ -363,7 +364,7 @@ private: void recurse(InSyncDir& container) { size_t fileCount = readNumber<std::uint32_t>(inputBoth); - while (fileCount-- != 0) //files + while (fileCount-- != 0) { const Zstring shortName = readUtf8(inputBoth); const auto inSyncType = static_cast<InSyncFile::InSyncType>(readNumber<std::int32_t>(inputBoth)); @@ -377,7 +378,7 @@ private: } size_t linkCount = readNumber<std::uint32_t>(inputBoth); - while (linkCount-- != 0) //files + while (linkCount-- != 0) { const Zstring shortName = readUtf8(inputBoth); @@ -390,7 +391,7 @@ private: } size_t dirCount = readNumber<std::uint32_t>(inputBoth); - while (dirCount-- != 0) //files + while (dirCount-- != 0) { const Zstring shortName = readUtf8(inputBoth); diff --git a/lib/dir_lock.cpp b/lib/dir_lock.cpp index f263d4ac..328b87d3 100644 --- a/lib/dir_lock.cpp +++ b/lib/dir_lock.cpp @@ -98,7 +98,7 @@ public: FILE_END)) //__in DWORD dwMoveMethod return; - DWORD bytesWritten = 0; + DWORD bytesWritten = 0; //this parameter is NOT optional: http://blogs.msdn.com/b/oldnewthing/archive/2013/04/04/10407417.aspx /*bool rv = */ ::WriteFile(fileHandle, //__in HANDLE hFile, buffer, //__out LPVOID lpBuffer, @@ -375,7 +375,7 @@ LockInformation retrieveLockInfo(const Zstring& lockfilename) //throw FileError, } catch (UnexpectedEndOfStreamError&) { - throw FileError(replaceCpy(_("Cannot read file %x."), L"%x", fmtFileName(lockfilename))); + throw FileError(replaceCpy(_("Cannot read file %x."), L"%x", fmtFileName(lockfilename)) + L" (unexpected end of stream)"); } } @@ -535,7 +535,7 @@ bool tryLock(const Zstring& lockfilename) //throw FileError lastError == ERROR_ALREADY_EXISTS) //comment on msdn claims, this one is used on Windows Mobile 6 return false; else - throw FileError(replaceCpy(_("Cannot set directory lock %x."), L"%x", fmtFileName(lockfilename)) + L"\n\n" + getLastErrorFormatted()); + throw FileError(replaceCpy(_("Cannot write file %x."), L"%x", fmtFileName(lockfilename)) + L"\n\n" + zen::getLastErrorFormatted()); } ::CloseHandle(fileHandle); @@ -550,7 +550,7 @@ bool tryLock(const Zstring& lockfilename) //throw FileError if (errno == EEXIST) return false; else - throw FileError(replaceCpy(_("Cannot set directory lock %x."), L"%x", fmtFileName(lockfilename)) + L"\n\n" + getLastErrorFormatted()); + throw FileError(replaceCpy(_("Cannot write file %x."), L"%x", fmtFileName(lockfilename)) + L"\n\n" + zen::getLastErrorFormatted()); } ::close(fileHandle); #endif diff --git a/lib/generate_logfile.h b/lib/generate_logfile.h index 875d5b98..c441de66 100644 --- a/lib/generate_logfile.h +++ b/lib/generate_logfile.h @@ -119,7 +119,6 @@ inline void saveToLastSyncsLog(const SummaryInfo& summary, //throw FileError const ErrorLog& log, size_t maxBytesToWrite) //log may be *huge*, e.g. 1 million items; LastSyncs.log *must not* create performance problems! - { const Zstring filename = getConfigDir() + Zstr("LastSyncs.log"); @@ -127,7 +126,7 @@ void saveToLastSyncsLog(const SummaryInfo& summary, //throw FileError replace(newStream, '\n', LINE_BREAK); //don't replace line break any earlier newStream += LINE_BREAK; - //write log items one after the other instead of creating one big string: memory allocation might fail; think 1 million entries! + //check size of "newStream": memory allocation might fail - think 1 million entries! for (auto iter = log.begin(); iter != log.end(); ++iter) { newStream += replaceCpy(utfCvrtTo<Utf8String>(formatMessage<std::wstring>(*iter)), '\n', LINE_BREAK); diff --git a/lib/icon_buffer.cpp b/lib/icon_buffer.cpp index dd80f6dd..3912849e 100644 --- a/lib/icon_buffer.cpp +++ b/lib/icon_buffer.cpp @@ -359,11 +359,12 @@ IconHolder getAssociatedIcon(const Zstring& filename, IconBuffer::IconSize sz) sizeof(fileInfo), //UINT cbFileInfo, SHGFI_SYSICONINDEX | SHGFI_ATTRIBUTES)) //UINT uFlags { + (void)imgList; //imgList->Release(); //empiric study: crash on XP if we release this! Seems we do not own it... -> also no GDI leak on Win7 -> okay //another comment on http://msdn.microsoft.com/en-us/library/bb762179(v=VS.85).aspx describes exact same behavior on Win7/XP - //Quote: "The IImageList pointer type, such as that returned in the ppv parameter, can be cast as an HIMAGELIST as - // needed; for example, for use in a list view. Conversely, an HIMAGELIST can be cast as a pointer to an IImageList." + //Quote: "The IImageList pointer type, such as that returned in the ppv parameter, can be cast as an HIMAGELIST as needed; + // for example, for use in a list view. Conversely, an HIMAGELIST can be cast as a pointer to an IImageList." //http://msdn.microsoft.com/en-us/library/windows/desktop/bb762185(v=vs.85).aspx #ifndef SFGAO_LINK //Shobjidl.h diff --git a/lib/lock_holder.h b/lib/lock_holder.h index 9cde59a7..81b5632d 100644 --- a/lib/lock_holder.h +++ b/lib/lock_holder.h @@ -1,31 +1,29 @@ -#ifndef LOCK_HOLDER_H_INCLUDED -#define LOCK_HOLDER_H_INCLUDED +#ifndef LOCK_HOLDER_H_489572039485723453425 +#define LOCK_HOLDER_H_489572039485723453425 -#include <map> +#include <set> #include <zen/zstring.h> #include <zen/stl_tools.h> #include "dir_lock.h" #include "status_handler.h" -#include "dir_exist_async.h" +//#include "dir_exist_async.h" namespace zen { const Zstring LOCK_FILE_ENDING = Zstr(".ffs_lock"); //intermediate locks created by DirLock use this extension, too! //hold locks for a number of directories without blocking during lock creation +//call after having checked directory existence! class LockHolder { public: - LockHolder(const std::vector<Zstring>& dirnamesFmt, //resolved dirname ending with path separator - ProcessCallback& procCallback, - bool allowUserInteraction) + LockHolder(const std::set<Zstring, LessFilename>& dirnamesExisting, //resolved dirname ending with path separator + bool& warningDirectoryLockFailed, + ProcessCallback& procCallback) { - std::set<Zstring, LessFilename> existingDirs = getExistingDirsUpdating(dirnamesFmt, allowUserInteraction, procCallback); - - for (auto it = existingDirs.begin(); it != existingDirs.end(); ++it) + for (auto it = dirnamesExisting.begin(); it != dirnamesExisting.end(); ++it) { const Zstring& dirnameFmt = *it; - assert(endsWith(dirnameFmt, FILE_NAME_SEPARATOR)); //this is really the contract, formatting does other things as well, e.g. macro substitution class WaitOnLockHandler : public DirLockCallback @@ -45,8 +43,8 @@ public: } catch (const FileError& e) { - bool dummy = false; //this warning shall not be shown but logged only - procCallback.reportWarning(e.toString(), dummy); //may throw! + const std::wstring msg = replaceCpy(_("Cannot set directory lock for %x."), L"%x", fmtFileName(dirnameFmt)) + L"\n\n" + e.toString(); + procCallback.reportWarning(msg, warningDirectoryLockFailed); //may throw! } } } @@ -54,8 +52,6 @@ public: private: std::vector<DirLock> lockHolder; }; - } - -#endif // LOCK_HOLDER_H_INCLUDED +#endif //LOCK_HOLDER_H_489572039485723453425 diff --git a/lib/osx_file_icon.h b/lib/osx_file_icon.h index 1d57a00e..e9b17988 100644 --- a/lib/osx_file_icon.h +++ b/lib/osx_file_icon.h @@ -14,7 +14,7 @@ namespace osx { struct ImageData { - ImageData(int w, int h) : width(w), height(h), rgb(w * h * 3), alpha(w * h) {} + ImageData(int w, int h) : width(w), height(h), rgb(w* h * 3), alpha(w* h) {} ImageData(ImageData&& tmp) : width(tmp.width), height(tmp.height) { rgb.swap(tmp.rgb); alpha.swap(tmp.alpha); } const int width; diff --git a/lib/osx_file_icon.mm b/lib/osx_file_icon.mm index 6a068998..11fb053f 100644 --- a/lib/osx_file_icon.mm +++ b/lib/osx_file_icon.mm @@ -31,8 +31,8 @@ osx::ImageData extractBytes(NSImage* nsImg, int requestedSize) //throw OsxError; CGImageRef imgRef = [nsImg CGImageForProposedRect:&rectProposed context:nil hints:nil]; ZEN_OSX_ASSERT(imgRef != NULL); //can this fail? not documented; ownership?? not documented! - const size_t width = CGImageGetWidth (imgRef); - const size_t height = CGImageGetHeight(imgRef); + const size_t width = ::CGImageGetWidth (imgRef); + const size_t height = ::CGImageGetHeight(imgRef); ZEN_OSX_ASSERT(width > 0 && height > 0 && requestedSize > 0); @@ -46,14 +46,14 @@ osx::ImageData extractBytes(NSImage* nsImg, int requestedSize) //throw OsxError; trgHeight = height * requestedSize / maxExtent; } - CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); + CGColorSpaceRef colorSpace = ::CGColorSpaceCreateDeviceRGB(); ZEN_OSX_ASSERT(colorSpace != NULL); //may fail - ZEN_ON_SCOPE_EXIT(CGColorSpaceRelease(colorSpace)); + ZEN_ON_SCOPE_EXIT(::CGColorSpaceRelease(colorSpace)); std::vector<unsigned char> buf(trgWidth* trgHeight * 4); //32-bit ARGB, little endian byte order -> already initialized with 0 = fully transparent //supported color spaces: https://developer.apple.com/library/mac/#documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/dq_context/dq_context.html#//apple_ref/doc/uid/TP30001066-CH203-BCIBHHBB - CGContextRef ctxRef = CGBitmapContextCreate(&buf[0], //void *data, + CGContextRef ctxRef = ::CGBitmapContextCreate(&buf[0], //void *data, trgWidth, //size_t width, trgHeight, //size_t height, 8, //size_t bitsPerComponent, @@ -61,9 +61,9 @@ osx::ImageData extractBytes(NSImage* nsImg, int requestedSize) //throw OsxError; colorSpace, //CGColorSpaceRef colorspace, kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Little); //CGBitmapInfo bitmapInfo ZEN_OSX_ASSERT(ctxRef != NULL); - ZEN_ON_SCOPE_EXIT(CGContextRelease(ctxRef)); + ZEN_ON_SCOPE_EXIT(::CGContextRelease(ctxRef)); - CGContextDrawImage(ctxRef, CGRectMake(0, 0, trgWidth, trgHeight), imgRef); //can this fail? not documented + ::CGContextDrawImage(ctxRef, CGRectMake(0, 0, trgWidth, trgHeight), imgRef); //can this fail? not documented //CGContextFlush(ctxRef); //"If you pass [...] a bitmap context, this function does nothing." diff --git a/lib/parallel_scan.h b/lib/parallel_scan.h index f04d51b4..5a52e44e 100644 --- a/lib/parallel_scan.h +++ b/lib/parallel_scan.h @@ -35,8 +35,9 @@ bool operator<(const DirectoryKey& lhs, const DirectoryKey& rhs) if (lhs.handleSymlinks_ != rhs.handleSymlinks_) return lhs.handleSymlinks_ < rhs.handleSymlinks_; - if (!EqualFilename()(lhs.dirnameFull_, rhs.dirnameFull_)) - return LessFilename()(lhs.dirnameFull_, rhs.dirnameFull_); + const int cmpName = cmpFileName(lhs.dirnameFull_, rhs.dirnameFull_); + if (cmpName != 0) + return cmpName < 0; return *lhs.filter_ < *rhs.filter_; } diff --git a/lib/process_xml.cpp b/lib/process_xml.cpp index d41afc74..4974dcbc 100644 --- a/lib/process_xml.cpp +++ b/lib/process_xml.cpp @@ -1,4 +1,4 @@ -// ************************************************************************** +// ************************************************************************** // * This file is part of the FreeFileSync project. It is distributed under * // * GNU General Public License: http://www.gnu.org/licenses/gpl.html * // * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * @@ -17,6 +17,14 @@ using namespace xmlAccess; //functionally needed for correct overload resolution using namespace std::rel_ops; +namespace +{ +//------------------------------------------------------------------------------------------------------------------------------- +const int XML_FORMAT_VER_GLOBAL = 1; +const int XML_FORMAT_VER_FFS_GUI = 1; +const int XML_FORMAT_VER_FFS_BATCH = 1; +//------------------------------------------------------------------------------------------------------------------------------- +} XmlType getXmlType(const zen::XmlDoc& doc) //throw() { @@ -73,9 +81,9 @@ void setXmlType(XmlDoc& doc, XmlType type) //throw() } //################################################################################################################ -wxString xmlAccess::getGlobalConfigFile() +Zstring xmlAccess::getGlobalConfigFile() { - return utfCvrtTo<wxString>(zen::getConfigDir()) + L"GlobalSettings.xml"; + return zen::getConfigDir() + Zstr("GlobalSettings.xml"); } @@ -88,6 +96,8 @@ void xmlAccess::OptionalDialogs::resetDialogs() warningUnresolvedConflicts = true; warningDatabaseError = true; warningRecyclerMissing = true; + warningInputFieldEmpty = true; + warningDirectoryLockFailed = true; popupOnConfigChange = true; confirmSyncStart = true; } @@ -180,67 +190,21 @@ xmlAccess::MergeType xmlAccess::getMergeType(const std::vector<Zstring>& filenam namespace { -template <class XmlCfg> -XmlCfg readConfigNoWarnings(const Zstring& filename, std::unique_ptr<FfsXmlError>& warning) //throw FfsXmlError, but only if "FATAL" +std::vector<Zstring> splitFilterByLines(const Zstring& filterPhrase) { - XmlCfg cfg; - try - { - readConfig(filename, cfg); //throw xmlAccess::FfsXmlError - } - catch (const FfsXmlError& e) - { - if (e.getSeverity() == FfsXmlError::FATAL) - throw; - else if (!warning.get()) warning = make_unique<FfsXmlError>(e); - } - return cfg; + if (filterPhrase.empty()) + return std::vector<Zstring>(); + return split(filterPhrase, Zstr('\n')); } -} - -void xmlAccess::readAnyConfig(const std::vector<Zstring>& filenames, XmlGuiConfig& config) //throw FfsXmlError +Zstring mergeFilterLines(const std::vector<Zstring>& filterLines) { - assert(!filenames.empty()); - - std::vector<zen::MainConfiguration> mainCfgs; - std::unique_ptr<FfsXmlError> savedWarning; - - for (auto it = filenames.begin(); it != filenames.end(); ++it) - { - const Zstring& filename = *it; - const bool firstLine = it == filenames.begin(); //init all non-"mainCfg" settings with first config file - - switch (getXmlType(filename)) - { - case XML_TYPE_GUI: - if (firstLine) - config = readConfigNoWarnings<XmlGuiConfig>(filename, savedWarning); - else - mainCfgs.push_back(readConfigNoWarnings<XmlGuiConfig>(filename, savedWarning).mainCfg); //throw FfsXmlError - break; - - case XML_TYPE_BATCH: - if (firstLine) - config = convertBatchToGui(readConfigNoWarnings<XmlBatchConfig>(filename, savedWarning)); - else - mainCfgs.push_back(readConfigNoWarnings<XmlBatchConfig>(filename, savedWarning).mainCfg); //throw FfsXmlError - break; - - case XML_TYPE_GLOBAL: - case XML_TYPE_OTHER: - if (!fileExists(filename)) - throw FfsXmlError(replaceCpy(_("Cannot find file %x."), L"%x", fmtFileName(filename))); - else - throw FfsXmlError(replaceCpy(_("File %x does not contain a valid configuration."), L"%x", fmtFileName(filename))); - } - } - mainCfgs.push_back(config.mainCfg); //save cfg from first line - - config.mainCfg = merge(mainCfgs); - - if (savedWarning.get()) //"re-throw" exception - throw* savedWarning; + if (filterLines.empty()) + return Zstring(); + Zstring out = filterLines[0]; + std::for_each(filterLines.begin() + 1, filterLines.end(), [&](const Zstring& line) { out += Zstr('\n'); out += line; }); + return out; +} } @@ -594,6 +558,9 @@ void writeText(const ColumnTypeNavi& value, std::string& output) case COL_TYPE_NAVI_DIRECTORY: output = "Tree"; break; + case COL_TYPE_NAVI_ITEM_COUNT: + output = "Count"; + break; } } @@ -606,6 +573,8 @@ bool readText(const std::string& input, ColumnTypeNavi& value) value = COL_TYPE_NAVI_BYTES; else if (tmp == "Tree") value = COL_TYPE_NAVI_DIRECTORY; + else if (tmp == "Count") + value = COL_TYPE_NAVI_ITEM_COUNT; else return false; return true; @@ -870,8 +839,33 @@ void readConfig(const XmlIn& in, SyncConfig& syncCfg) void readConfig(const XmlIn& in, FilterConfig& filter) { - in["Include"](filter.includeFilter); - in["Exclude"](filter.excludeFilter); + warn_static("remove after migration?") + auto haveFilterAsSingleString = [&]() -> bool + { + if (in["Include"]) + if (auto elem = in["Include"].get()) + { + std::string tmp; + if (elem->getValue(tmp)) + return !tmp.empty(); + } + return false; + }; + if (haveFilterAsSingleString()) //obsolete style + { + in["Include"](filter.includeFilter); + in["Exclude"](filter.excludeFilter); + } + else + { + std::vector<Zstring> tmp = splitFilterByLines(filter.includeFilter); //default value + in["Include"](tmp); + filter.includeFilter = mergeFilterLines(tmp); + + std::vector<Zstring> tmp2 = splitFilterByLines(filter.excludeFilter); //default value + in["Exclude"](tmp2); + filter.excludeFilter = mergeFilterLines(tmp2); + } in["TimeSpan"](filter.timeSpan); warn_static("remove after migration?") @@ -942,15 +936,15 @@ void readConfig(const XmlIn& in, MainConfiguration& mainCfg) //read all folder pairs mainCfg.additionalPairs.clear(); - bool firstIter = true; + bool firstItem = true; for (XmlIn inPair = inMain["FolderPairs"]["Pair"]; inPair; inPair.next()) { FolderPairEnh newPair; readConfig(inPair, newPair); - if (firstIter) + if (firstItem) { - firstIter = false; + firstItem = false; mainCfg.firstPair = newPair; //set first folder pair } else @@ -966,7 +960,7 @@ void readConfig(const XmlIn& in, MainConfiguration& mainCfg) void readConfig(const XmlIn& in, xmlAccess::XmlGuiConfig& config) { - ::readConfig(in, config.mainCfg); //read main config + readConfig(in, config.mainCfg); //read main config //read GUI specific config data XmlIn inGuiCfg = in["GuiConfig"]; @@ -998,7 +992,7 @@ void readConfig(const XmlIn& in, xmlAccess::XmlGuiConfig& config) void readConfig(const XmlIn& in, xmlAccess::XmlBatchConfig& config) { - ::readConfig(in, config.mainCfg); //read main config + readConfig(in, config.mainCfg); //read main config //read GUI specific config data XmlIn inBatchCfg = in["BatchConfig"]; @@ -1021,31 +1015,29 @@ void readConfig(const XmlIn& in, XmlGlobalSettings& config) { XmlIn inShared = in["Shared"]; - //try to read program language setting - inShared["Language"](config.programLanguage); - - inShared["CopyLockedFiles" ](config.copyLockedFiles); - inShared["CopyFilePermissions" ](config.copyFilePermissions); - inShared["TransactionalFileCopy"](config.transactionalFileCopy); - inShared["LockDirectoriesDuringSync"](config.createLockFile); - inShared["VerifyCopiedFiles" ](config.verifyFileCopy); - inShared["RunWithBackgroundPriority"](config.runWithBackgroundPriority); + inShared["Language"].attribute("id", config.programLanguage); - //max. allowed file time deviation - inShared["FileTimeTolerance"](config.fileTimeTolerance); - - inShared["LastSyncsFileSizeMax"](config.lastSyncsLogFileSizeMax); + inShared["FailSafeFileCopy" ].attribute("Enabled", config.transactionalFileCopy); + inShared["CopyLockedFiles" ].attribute("Enabled", config.copyLockedFiles); + inShared["CopyFilePermissions" ].attribute("Enabled", config.copyFilePermissions); + inShared["RunWithBackgroundPriority"].attribute("Enabled", config.runWithBackgroundPriority); + inShared["LockDirectoriesDuringSync"].attribute("Enabled", config.createLockFile); + inShared["VerifyCopiedFiles" ].attribute("Enabled", config.verifyFileCopy); + inShared["FileTimeTolerance" ].attribute("Seconds", config.fileTimeTolerance); + inShared["LastSyncsLogSizeMax" ].attribute("Bytes" , config.lastSyncsLogFileSizeMax); XmlIn inOpt = inShared["OptionalDialogs"]; - inOpt["WarnUnresolvedConflicts" ](config.optDialogs.warningUnresolvedConflicts); - inOpt["WarnNotEnoughDiskSpace" ](config.optDialogs.warningNotEnoughDiskSpace); - inOpt["WarnSignificantDifference" ](config.optDialogs.warningSignificantDifference); - inOpt["WarnRecycleBinNotAvailable" ](config.optDialogs.warningRecyclerMissing); - inOpt["WarnDatabaseError" ](config.optDialogs.warningDatabaseError); - inOpt["WarnDependentFolders" ](config.optDialogs.warningDependentFolders); - inOpt["WarnFolderPairRaceCondition"](config.optDialogs.warningFolderPairRaceCondition); - inOpt["PromptSaveConfig" ](config.optDialogs.popupOnConfigChange); - inOpt["ConfirmSyncStart" ](config.optDialogs.confirmSyncStart); + inOpt["WarnUnresolvedConflicts" ].attribute("Enabled", config.optDialogs.warningUnresolvedConflicts); + inOpt["WarnNotEnoughDiskSpace" ].attribute("Enabled", config.optDialogs.warningNotEnoughDiskSpace); + inOpt["WarnSignificantDifference" ].attribute("Enabled", config.optDialogs.warningSignificantDifference); + inOpt["WarnRecycleBinNotAvailable" ].attribute("Enabled", config.optDialogs.warningRecyclerMissing); + inOpt["WarnInputFieldEmpty" ].attribute("Enabled", config.optDialogs.warningInputFieldEmpty); + inOpt["WarnDatabaseError" ].attribute("Enabled", config.optDialogs.warningDatabaseError); + inOpt["WarnDependentFolders" ].attribute("Enabled", config.optDialogs.warningDependentFolders); + inOpt["WarnFolderPairRaceCondition"].attribute("Enabled", config.optDialogs.warningFolderPairRaceCondition); + inOpt["WarnDirectoryLockFailed" ].attribute("Enabled", config.optDialogs.warningDirectoryLockFailed); + inOpt["ConfirmSaveConfig" ].attribute("Enabled", config.optDialogs.popupOnConfigChange); + inOpt["ConfirmStartSync" ].attribute("Enabled", config.optDialogs.confirmSyncStart); //gui specific global settings (optional) XmlIn inGui = in["Gui"]; @@ -1062,24 +1054,25 @@ void readConfig(const XmlIn& in, XmlGlobalSettings& config) //inManualDel.attribute("DeleteOnBothSides", config.gui.deleteOnBothSides); inManualDel.attribute("UseRecycler" , config.gui.useRecyclerForManualDeletion); - inWnd["CaseSensitiveSearch" ](config.gui.textSearchRespectCase); - inWnd["MaxFolderPairsVisible"](config.gui.maxFolderPairsVisible); + inWnd["CaseSensitiveSearch"].attribute("Enabled", config.gui.textSearchRespectCase); + inWnd["FolderPairsVisible" ].attribute("Max", config.gui.maxFolderPairsVisible); //########################################################### + + XmlIn inOverview = inWnd["OverviewPanel"]; + inOverview.attribute("ShowPercentage", config.gui.showPercentBar); + inOverview.attribute("SortByColumn", config.gui.naviLastSortColumn); + inOverview.attribute("SortAscending", config.gui.naviLastSortAscending); + //read column attributes - XmlIn inColNavi = inWnd["OverviewColumns"]; + XmlIn inColNavi = inOverview["Columns"]; inColNavi(config.gui.columnAttribNavi); - inColNavi.attribute("ShowPercentage", config.gui.showPercentBar); - inColNavi.attribute("SortByColumn", config.gui.naviLastSortColumn); - inColNavi.attribute("SortAscending", config.gui.naviLastSortAscending); - XmlIn inMainGrid = inWnd["MainGrid"]; inMainGrid.attribute("ShowIcons", config.gui.showIcons); inMainGrid.attribute("IconSize", config.gui.iconSize); inMainGrid.attribute("SashOffset", config.gui.sashOffset); - XmlIn inColLeft = inMainGrid["ColumnsLeft"]; inColLeft(config.gui.columnAttribLeft); @@ -1088,11 +1081,14 @@ void readConfig(const XmlIn& in, XmlGlobalSettings& config) //########################################################### inWnd["ViewFilterDefault"](config.gui.viewFilterDefault); - inWnd["Layout" ](config.gui.guiPerspectiveLast); + inWnd["Perspective" ](config.gui.guiPerspectiveLast); - //load config file history - inGui["LastUsedConfig"](config.gui.lastUsedConfigFiles); + std::vector<Zstring> tmp = splitFilterByLines(config.gui.defaultExclusionFilter); //default value + inGui["DefaultExclusionFilter"](tmp); + config.gui.defaultExclusionFilter = mergeFilterLines(tmp); + //load config file history + inGui["LastUsedConfig"](config.gui.lastUsedConfigFiles); inGui["ConfigHistory"](config.gui.cfgFileHistory); inGui["ConfigHistory"].attribute("MaxSize", config.gui.cfgFileHistMax); @@ -1114,44 +1110,146 @@ void readConfig(const XmlIn& in, XmlGlobalSettings& config) } +bool needsMigration(const XmlDoc& doc, int currentXmlFormatVer) +{ + //(try to) migrate old configuration if needed + int xmlFormatVer = 0; + /*bool success = */doc.root().getAttribute("XmlFormat", xmlFormatVer); + return xmlFormatVer < currentXmlFormatVer; +} + + template <class ConfigType> -void readConfig(const Zstring& filename, XmlType type, ConfigType& config) +void readConfig(const Zstring& filename, XmlType type, ConfigType& cfg, int currentXmlFormatVer, bool& needMigration) //throw FfsXmlError { XmlDoc doc; loadXmlDocument(filename, doc); //throw FfsXmlError - + if (getXmlType(doc) != type) //throw() throw FfsXmlError(replaceCpy(_("File %x does not contain a valid configuration."), L"%x", fmtFileName(filename))); XmlIn in(doc); - ::readConfig(in, config); + ::readConfig(in, cfg); if (in.errorsOccured()) throw FfsXmlError(replaceCpy(_("Configuration file %x loaded partially only."), L"%x", fmtFileName(filename)) + L"\n\n" + - getErrorMessageFormatted(in), FfsXmlError::WARNING); + getErrorMessageFormatted(in.getErrorsAs<std::wstring>()), FfsXmlError::WARNING); + + //(try to) migrate old configuration if needed + needMigration = needsMigration(doc, currentXmlFormatVer); } } -void xmlAccess::readConfig(const Zstring& filename, xmlAccess::XmlGuiConfig& config) +void xmlAccess::readConfig(const Zstring& filename, xmlAccess::XmlGuiConfig& cfg) +{ + bool needMigration = false; + ::readConfig(filename, XML_TYPE_GUI, cfg, XML_FORMAT_VER_FFS_GUI, needMigration); //throw FfsXmlError + + if (needMigration) //(try to) migrate old configuration + try { xmlAccess::writeConfig(cfg, filename); /*throw FfsXmlError*/ } + catch (FfsXmlError&) { assert(false); } //don't bother user! +} + + +void xmlAccess::readConfig(const Zstring& filename, xmlAccess::XmlBatchConfig& cfg) { - ::readConfig(filename, XML_TYPE_GUI, config); + bool needMigration = false; + ::readConfig(filename, XML_TYPE_BATCH, cfg, XML_FORMAT_VER_FFS_BATCH, needMigration); //throw FfsXmlError + + if (needMigration) //(try to) migrate old configuration + try { xmlAccess::writeConfig(cfg, filename); /*throw FfsXmlError*/ } + catch (FfsXmlError&) { assert(false); } //don't bother user! } -void xmlAccess::readConfig(const Zstring& filename, xmlAccess::XmlBatchConfig& config) +void xmlAccess::readConfig(xmlAccess::XmlGlobalSettings& cfg) { - ::readConfig(filename, XML_TYPE_BATCH, config); + bool needMigration = false; + ::readConfig(getGlobalConfigFile(), XML_TYPE_GLOBAL, cfg, XML_FORMAT_VER_GLOBAL, needMigration); //throw FfsXmlError } -void xmlAccess::readConfig(xmlAccess::XmlGlobalSettings& config) +namespace +{ +template <class XmlCfg> +XmlCfg parseConfig(const XmlDoc& doc, const Zstring& filename, int currentXmlFormatVer, std::unique_ptr<FfsXmlError>& warning) //nothrow { - ::readConfig(utfCvrtTo<Zstring>(getGlobalConfigFile()), XML_TYPE_GLOBAL, config); + XmlCfg cfg; + XmlIn in(doc); + ::readConfig(in, cfg); + + if (in.errorsOccured()) + { + if (!warning) + warning = make_unique<FfsXmlError>(replaceCpy(_("Configuration file %x loaded partially only."), L"%x", fmtFileName(filename)) + L"\n\n" + + getErrorMessageFormatted(in.getErrorsAs<std::wstring>()), FfsXmlError::WARNING); + } + else + { + //(try to) migrate old configuration if needed + if (needsMigration(doc, currentXmlFormatVer)) + try { xmlAccess::writeConfig(cfg, filename); /*throw FfsXmlError*/ } + catch (FfsXmlError&) { assert(false); } //don't bother user! + } + return cfg; +} } +void xmlAccess::readAnyConfig(const std::vector<Zstring>& filenames, XmlGuiConfig& config) //throw FfsXmlError +{ + assert(!filenames.empty()); + + std::vector<zen::MainConfiguration> mainCfgs; + std::unique_ptr<FfsXmlError> warning; + + for (auto it = filenames.begin(); it != filenames.end(); ++it) + { + const Zstring& filename = *it; + const bool firstItem = it == filenames.begin(); //init all non-"mainCfg" settings with first config file + + XmlDoc doc; + loadXmlDocument(filename, doc); //throw FfsXmlError + //do NOT use zen::loadStream as it will superfluously load even huge files! + + switch (::getXmlType(doc)) + { + case XML_TYPE_GUI: + { + XmlGuiConfig guiCfg = parseConfig<XmlGuiConfig>(doc, filename, XML_FORMAT_VER_FFS_GUI, warning); //nothrow + if (firstItem) + config = guiCfg; + else + mainCfgs.push_back(guiCfg.mainCfg); + } + break; + + case XML_TYPE_BATCH: + { + XmlBatchConfig batchCfg = parseConfig<XmlBatchConfig>(doc, filename, XML_FORMAT_VER_FFS_BATCH, warning); //nothrow + if (firstItem) + config = convertBatchToGui(batchCfg); + else + mainCfgs.push_back(batchCfg.mainCfg); + } + break; + + case XML_TYPE_GLOBAL: + case XML_TYPE_OTHER: + throw FfsXmlError(replaceCpy(_("File %x does not contain a valid configuration."), L"%x", fmtFileName(filename))); + } + } + mainCfgs.push_back(config.mainCfg); //save cfg from first line + + config.mainCfg = merge(mainCfgs); + + if (warning) + throw* warning; +} + //################################################################################################ + namespace { void writeConfig(const CompConfig& cmpConfig, XmlOut& out) @@ -1188,8 +1286,8 @@ void writeConfig(const SyncConfig& syncCfg, XmlOut& out) void writeConfig(const FilterConfig& filter, XmlOut& out) { - out["Include"](filter.includeFilter); - out["Exclude"](filter.excludeFilter); + out["Include"](splitFilterByLines(filter.includeFilter)); + out["Exclude"](splitFilterByLines(filter.excludeFilter)); out["TimeSpan"](filter.timeSpan); out["TimeSpan"].attribute("Type", filter.unitTimeSpan); @@ -1300,31 +1398,29 @@ void writeConfig(const XmlGlobalSettings& config, XmlOut& out) { XmlOut outShared = out["Shared"]; - //write program language setting - outShared["Language"](config.programLanguage); + outShared["Language"].attribute("id", config.programLanguage); - outShared["CopyLockedFiles" ](config.copyLockedFiles); - outShared["CopyFilePermissions" ](config.copyFilePermissions); - outShared["TransactionalFileCopy"](config.transactionalFileCopy); - outShared["LockDirectoriesDuringSync"](config.createLockFile); - outShared["VerifyCopiedFiles" ](config.verifyFileCopy); - outShared["RunWithBackgroundPriority"](config.runWithBackgroundPriority); - - //max. allowed file time deviation - outShared["FileTimeTolerance"](config.fileTimeTolerance); - - outShared["LastSyncsFileSizeMax"](config.lastSyncsLogFileSizeMax); + outShared["FailSafeFileCopy" ].attribute("Enabled", config.transactionalFileCopy); + outShared["CopyLockedFiles" ].attribute("Enabled", config.copyLockedFiles); + outShared["CopyFilePermissions" ].attribute("Enabled", config.copyFilePermissions); + outShared["RunWithBackgroundPriority"].attribute("Enabled", config.runWithBackgroundPriority); + outShared["LockDirectoriesDuringSync"].attribute("Enabled", config.createLockFile); + outShared["VerifyCopiedFiles" ].attribute("Enabled", config.verifyFileCopy); + outShared["FileTimeTolerance" ].attribute("Seconds", config.fileTimeTolerance); + outShared["LastSyncsLogSizeMax" ].attribute("Bytes" , config.lastSyncsLogFileSizeMax); XmlOut outOpt = outShared["OptionalDialogs"]; - outOpt["WarnUnresolvedConflicts" ](config.optDialogs.warningUnresolvedConflicts); - outOpt["WarnNotEnoughDiskSpace" ](config.optDialogs.warningNotEnoughDiskSpace); - outOpt["WarnSignificantDifference" ](config.optDialogs.warningSignificantDifference); - outOpt["WarnRecycleBinNotAvailable" ](config.optDialogs.warningRecyclerMissing); - outOpt["WarnDatabaseError" ](config.optDialogs.warningDatabaseError); - outOpt["WarnDependentFolders" ](config.optDialogs.warningDependentFolders); - outOpt["WarnFolderPairRaceCondition"](config.optDialogs.warningFolderPairRaceCondition); - outOpt["PromptSaveConfig" ](config.optDialogs.popupOnConfigChange); - outOpt["ConfirmSyncStart" ](config.optDialogs.confirmSyncStart); + outOpt["WarnUnresolvedConflicts" ].attribute("Enabled", config.optDialogs.warningUnresolvedConflicts); + outOpt["WarnNotEnoughDiskSpace" ].attribute("Enabled", config.optDialogs.warningNotEnoughDiskSpace); + outOpt["WarnSignificantDifference" ].attribute("Enabled", config.optDialogs.warningSignificantDifference); + outOpt["WarnRecycleBinNotAvailable" ].attribute("Enabled", config.optDialogs.warningRecyclerMissing); + outOpt["WarnInputFieldEmpty" ].attribute("Enabled", config.optDialogs.warningInputFieldEmpty); + outOpt["WarnDatabaseError" ].attribute("Enabled", config.optDialogs.warningDatabaseError); + outOpt["WarnDependentFolders" ].attribute("Enabled", config.optDialogs.warningDependentFolders); + outOpt["WarnFolderPairRaceCondition"].attribute("Enabled", config.optDialogs.warningFolderPairRaceCondition); + outOpt["WarnDirectoryLockFailed" ].attribute("Enabled", config.optDialogs.warningDirectoryLockFailed); + outOpt["ConfirmSaveConfig" ].attribute("Enabled", config.optDialogs.popupOnConfigChange); + outOpt["ConfirmStartSync" ].attribute("Enabled", config.optDialogs.confirmSyncStart); //gui specific global settings (optional) XmlOut outGui = out["Gui"]; @@ -1341,18 +1437,20 @@ void writeConfig(const XmlGlobalSettings& config, XmlOut& out) //outManualDel.attribute("DeleteOnBothSides", config.gui.deleteOnBothSides); outManualDel.attribute("UseRecycler" , config.gui.useRecyclerForManualDeletion); - outWnd["CaseSensitiveSearch" ](config.gui.textSearchRespectCase); - outWnd["MaxFolderPairsVisible"](config.gui.maxFolderPairsVisible); + outWnd["CaseSensitiveSearch"].attribute("Enabled", config.gui.textSearchRespectCase); + outWnd["FolderPairsVisible" ].attribute("Max", config.gui.maxFolderPairsVisible); //########################################################### + + XmlOut outOverview = outWnd["OverviewPanel"]; + outOverview.attribute("ShowPercentage", config.gui.showPercentBar); + outOverview.attribute("SortByColumn", config.gui.naviLastSortColumn); + outOverview.attribute("SortAscending", config.gui.naviLastSortAscending); + //write column attributes - XmlOut outColNavi = outWnd["OverviewColumns"]; + XmlOut outColNavi = outOverview["Columns"]; outColNavi(config.gui.columnAttribNavi); - outColNavi.attribute("ShowPercentage", config.gui.showPercentBar); - outColNavi.attribute("SortByColumn", config.gui.naviLastSortColumn); - outColNavi.attribute("SortAscending", config.gui.naviLastSortAscending); - XmlOut outMainGrid = outWnd["MainGrid"]; outMainGrid.attribute("ShowIcons", config.gui.showIcons); outMainGrid.attribute("IconSize", config.gui.iconSize); @@ -1366,7 +1464,9 @@ void writeConfig(const XmlGlobalSettings& config, XmlOut& out) //########################################################### outWnd["ViewFilterDefault"](config.gui.viewFilterDefault); - outWnd["Layout" ](config.gui.guiPerspectiveLast); + outWnd["Perspective" ](config.gui.guiPerspectiveLast); + + outGui["DefaultExclusionFilter"](splitFilterByLines(config.gui.defaultExclusionFilter)); //load config file history outGui["LastUsedConfig"](config.gui.lastUsedConfigFiles); @@ -1392,11 +1492,13 @@ void writeConfig(const XmlGlobalSettings& config, XmlOut& out) template <class ConfigType> -void writeConfig(const ConfigType& config, XmlType type, const Zstring& filename) +void writeConfig(const ConfigType& config, XmlType type, int xmlFormatVer, const Zstring& filename) { XmlDoc doc("FreeFileSync"); setXmlType(doc, type); //throw() + doc.root().setAttribute("XmlFormat", xmlFormatVer); + XmlOut out(doc); writeConfig(config, out); @@ -1404,21 +1506,21 @@ void writeConfig(const ConfigType& config, XmlType type, const Zstring& filename } } -void xmlAccess::writeConfig(const XmlGuiConfig& config, const Zstring& filename) +void xmlAccess::writeConfig(const XmlGuiConfig& cfg, const Zstring& filename) { - ::writeConfig(config, XML_TYPE_GUI, filename); //throw FfsXmlError + ::writeConfig(cfg, XML_TYPE_GUI, XML_FORMAT_VER_FFS_GUI, filename); //throw FfsXmlError } -void xmlAccess::writeConfig(const XmlBatchConfig& config, const Zstring& filename) +void xmlAccess::writeConfig(const XmlBatchConfig& cfg, const Zstring& filename) { - ::writeConfig(config, XML_TYPE_BATCH, filename); //throw FfsXmlError + ::writeConfig(cfg, XML_TYPE_BATCH, XML_FORMAT_VER_FFS_BATCH, filename); //throw FfsXmlError } -void xmlAccess::writeConfig(const XmlGlobalSettings& config) +void xmlAccess::writeConfig(const XmlGlobalSettings& cfg) { - ::writeConfig(config, XML_TYPE_GLOBAL, utfCvrtTo<Zstring>(getGlobalConfigFile())); //throw FfsXmlError + ::writeConfig(cfg, XML_TYPE_GLOBAL, XML_FORMAT_VER_GLOBAL, getGlobalConfigFile()); //throw FfsXmlError } diff --git a/lib/process_xml.h b/lib/process_xml.h index 9dda330e..8a65d67a 100644 --- a/lib/process_xml.h +++ b/lib/process_xml.h @@ -99,6 +99,8 @@ struct OptionalDialogs bool warningUnresolvedConflicts; bool warningDatabaseError; bool warningRecyclerMissing; + bool warningInputFieldEmpty; + bool warningDirectoryLockFailed; bool popupOnConfigChange; bool confirmSyncStart; }; @@ -124,7 +126,7 @@ struct ViewFilterDefault bool createLeft, createRight, updateLeft, updateRight, deleteLeft, deleteRight, doNothing; //action view }; -wxString getGlobalConfigFile(); +Zstring getGlobalConfigFile(); struct XmlGlobalSettings { @@ -173,6 +175,23 @@ struct XmlGlobalSettings cfgFileHistMax(30), folderHistMax(15), onCompletionHistoryMax(8), +#ifdef FFS_WIN + defaultExclusionFilter(Zstr("\\System Volume Information\\") Zstr("\n") + Zstr("\\$Recycle.Bin\\") Zstr("\n") + Zstr("\\RECYCLER\\") Zstr("\n") + Zstr("\\RECYCLED\\") Zstr("\n") + Zstr("*\\desktop.ini") Zstr("\n") + Zstr("*\\thumbs.db")), +#elif defined FFS_LINUX + defaultExclusionFilter(Zstr("/.Trash-*/") Zstr("\n") + Zstr("/.recycle/")), +#elif defined FFS_MAC + defaultExclusionFilter(Zstr("/.fseventsd/") Zstr("\n") + Zstr("/.Spotlight-V100/") Zstr("\n") + Zstr("/.Trashes/") Zstr("\n") + Zstr("/._.Trashes") Zstr("\n") + Zstr("*/.DS_Store")), +#endif //deleteOnBothSides(false), useRecyclerForManualDeletion(true), //enable if OS supports it; else user will have to activate first and then get an error message #if defined FFS_WIN || defined FFS_MAC @@ -218,10 +237,10 @@ struct XmlGlobalSettings ExternalApps externelApplications; - std::vector<wxString> cfgFileHistory; + std::vector<Zstring> cfgFileHistory; size_t cfgFileHistMax; - std::vector<wxString> lastUsedConfigFiles; + std::vector<Zstring> lastUsedConfigFiles; std::vector<Zstring> folderHistoryLeft; std::vector<Zstring> folderHistoryRight; @@ -230,6 +249,8 @@ struct XmlGlobalSettings std::vector<std::wstring> onCompletionHistory; size_t onCompletionHistoryMax; + Zstring defaultExclusionFilter; + //bool deleteOnBothSides; bool useRecyclerForManualDeletion; bool textSearchRespectCase; diff --git a/lib/shadow.cpp b/lib/shadow.cpp index 52b40a9e..d3106168 100644 --- a/lib/shadow.cpp +++ b/lib/shadow.cpp @@ -86,7 +86,7 @@ private: //############################################################################################################# -Zstring ShadowCopy::makeShadowCopy(const Zstring& inputFile) +Zstring ShadowCopy::makeShadowCopy(const Zstring& inputFile, const std::function<void(const Zstring&)>& onBeforeMakeVolumeCopy) { DWORD bufferSize = 10000; std::vector<wchar_t> volBuffer(bufferSize); @@ -111,6 +111,7 @@ Zstring ShadowCopy::makeShadowCopy(const Zstring& inputFile) VolNameShadowMap::const_iterator it = shadowVol.find(volumeNamePf); if (it == shadowVol.end()) { + onBeforeMakeVolumeCopy(volumeNamePf); //notify client before (potentially) blocking some time auto newEntry = std::make_shared<ShadowVolume>(volumeNamePf); //throw FileError it = shadowVol.insert(std::make_pair(volumeNamePf, newEntry)).first; } diff --git a/lib/shadow.h b/lib/shadow.h index cbe40dbb..4a05c860 100644 --- a/lib/shadow.h +++ b/lib/shadow.h @@ -9,6 +9,7 @@ #include <map> #include <memory> +#include <functional> #include <zen/zstring.h> #include <zen/file_error.h> @@ -20,7 +21,7 @@ class ShadowCopy //take and buffer Windows Volume Shadow Copy snapshots as neede public: ShadowCopy() {} - Zstring makeShadowCopy(const Zstring& inputFile); //throw FileError; returns filename on shadow copy + Zstring makeShadowCopy(const Zstring& inputFile, const std::function<void(const Zstring&)>& onBeforeMakeVolumeCopy); //throw FileError; returns filename on shadow copy private: ShadowCopy(const ShadowCopy&); diff --git a/lib/soft_filter.h b/lib/soft_filter.h index 32e7888d..1073cd43 100644 --- a/lib/soft_filter.h +++ b/lib/soft_filter.h @@ -76,8 +76,8 @@ inline SoftFilter::SoftFilter(size_t timeSpan, UnitTime unitTimeSpan, size_t sizeMin, UnitSize unitSizeMin, size_t sizeMax, UnitSize unitSizeMax) : - matchesFolder_(unitTimeSpan == UTIME_NONE && - unitSizeMin == USIZE_NONE && + matchesFolder_(unitTimeSpan == UTIME_NONE&& + unitSizeMin == USIZE_NONE&& unitSizeMax == USIZE_NONE) //exclude folders if size or date filter is active: avoids creating empty folders if not needed! { resolveUnits(timeSpan, unitTimeSpan, diff --git a/lib/xml_base.cpp b/lib/xml_base.cpp index e26f73c2..f5091cd6 100644 --- a/lib/xml_base.cpp +++ b/lib/xml_base.cpp @@ -19,28 +19,30 @@ void xmlAccess::loadXmlDocument(const Zstring& filename, XmlDoc& doc) //throw Ff std::string stream; try { + FileInput inputFile(filename); //throw FileError { //quick test whether input is an XML: avoid loading large binary files up front! const std::string xmlBegin = "<?xml version="; - std::vector<char> buffer(xmlBegin.size() + sizeof(zen::BYTE_ORDER_MARK_UTF8)); - - FileInput inputFile(filename); //throw FileError - const size_t bytesRead = inputFile.read(&buffer[0], buffer.size()); //throw FileError + stream.resize(strLength(zen::BYTE_ORDER_MARK_UTF8) + xmlBegin.size()); - const std::string fileBegin(&buffer[0], bytesRead); + const size_t bytesRead = inputFile.read(&stream[0], stream.size()); //throw FileError + stream.resize(bytesRead); - if (!startsWith(fileBegin, xmlBegin) && - !startsWith(fileBegin, zen::BYTE_ORDER_MARK_UTF8 + xmlBegin)) //respect BOM! + if (!startsWith(stream, xmlBegin) && + !startsWith(stream, zen::BYTE_ORDER_MARK_UTF8 + xmlBegin)) //respect BOM! throw FfsXmlError(replaceCpy(_("File %x does not contain a valid configuration."), L"%x", fmtFileName(filename))); } - const zen::UInt64 fs = zen::getFilesize(filename); //throw FileError - stream.resize(to<size_t>(fs)); + const size_t blockSize = 128 * 1024; + do + { + stream.resize(stream.size() + blockSize); - FileInput inputFile(filename); //throw FileError - const size_t bytesRead = inputFile.read(&stream[0], stream.size()); //throw FileError - if (bytesRead < to<size_t>(fs)) - throw FfsXmlError(replaceCpy(_("Cannot read file %x."), L"%x", fmtFileName(filename))); + const size_t bytesRead = inputFile.read(&*stream.begin() + stream.size() - blockSize, blockSize); //throw FileError + if (bytesRead < blockSize) + stream.resize(stream.size() - (blockSize - bytesRead)); //caveat: unsigned arithmetics + } + while (!inputFile.eof()); } catch (const FileError& error) { @@ -62,16 +64,14 @@ void xmlAccess::loadXmlDocument(const Zstring& filename, XmlDoc& doc) //throw Ff } -const std::wstring xmlAccess::getErrorMessageFormatted(const XmlIn& in) +const std::wstring xmlAccess::getErrorMessageFormatted(const std::vector<std::wstring>& failedElements) { std::wstring msg; - const auto& failedElements = in.getErrorsAs<std::wstring>(); if (!failedElements.empty()) { msg = _("Cannot read the following XML elements:") + L"\n"; - std::for_each(failedElements.begin(), failedElements.end(), - [&](const std::wstring& elem) { msg += L"\n" + elem; }); + std::for_each(failedElements.begin(), failedElements.end(), [&](const std::wstring& elem) { msg += L"\n" + elem; }); } return msg; diff --git a/lib/xml_base.h b/lib/xml_base.h index 338f91f7..ceaf609b 100644 --- a/lib/xml_base.h +++ b/lib/xml_base.h @@ -36,7 +36,7 @@ private: void saveXmlDocument(const zen::XmlDoc& doc, const Zstring& filename); //throw FfsXmlError void loadXmlDocument(const Zstring& filename, zen::XmlDoc& doc); //throw FfsXmlError -const std::wstring getErrorMessageFormatted(const zen::XmlIn& in); +const std::wstring getErrorMessageFormatted(const std::vector<std::wstring>& failedElements); } #endif // XMLBASE_H_INCLUDED diff --git a/structures.h b/structures.h index 021a2675..5ffb5620 100644 --- a/structures.h +++ b/structures.h @@ -348,20 +348,6 @@ bool operator==(const FolderPairEnh& lhs, const FolderPairEnh& rhs) struct MainConfiguration { - MainConfiguration() : - globalFilter(Zstr("*"), -#ifdef FFS_WIN - Zstr("\\System Volume Information\\\n") - Zstr("\\$Recycle.Bin\\\n") - Zstr("\\RECYCLER\\\n") - Zstr("\\RECYCLED\\\n")) {} -#elif defined FFS_LINUX - Zstr("/.Trash-*/\n") - Zstr("/.recycle/\n")) {} -#elif defined FFS_MAC - Zstr("/.Trashes/\n")) {} -#endif - CompConfig cmpConfig; //global compare settings: may be overwritten by folder pair settings SyncConfig syncCfg; //global synchronisation settings: may be overwritten by folder pair settings FilterConfig globalFilter; //global filter settings: combined with folder pair settings diff --git a/synchronization.cpp b/synchronization.cpp index 0c04e68f..91d11c04 100644 --- a/synchronization.cpp +++ b/synchronization.cpp @@ -522,6 +522,7 @@ Zstring DeletionHandling::getOrCreateRecyclerTempDirPf() //throw FileError } #endif + void DeletionHandling::tryCleanup(bool allowUserCallback) //throw FileError { if (!cleanedUp) @@ -563,6 +564,7 @@ void DeletionHandling::tryCleanup(bool allowUserCallback) //throw FileError } } + namespace { template <class Function> @@ -2429,7 +2431,12 @@ FileAttrib SynchronizeFolderPair::copyFileUpdatingTo(const FileMapping& fileObj, try { //contains prefix: E.g. "\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\Program Files\FFS\sample.dat" - source = shadowCopyHandler_->makeShadowCopy(source); //throw FileError + source = shadowCopyHandler_->makeShadowCopy(source, //throw FileError + [&](const Zstring& volumeName) + { + procCallback_.reportStatus(replaceCpy(_("Creating Volume Shadow Copy for %x..."), L"%x", fmtFileName(volumeName))); + procCallback_.forceUiRefresh(); + }); } catch (const FileError& e2) { diff --git a/ui/check_version.cpp b/ui/check_version.cpp index f01239da..b736b361 100644 --- a/ui/check_version.cpp +++ b/ui/check_version.cpp @@ -5,22 +5,25 @@ // ************************************************************************** #include "check_version.h" -#include <memory> +//#include <memory> #include <zen/string_tools.h> #include <zen/i18n.h> #include <zen/utf.h> #include <wx/msgdlg.h> -#include <wx/protocol/http.h> -#include <wx/sstream.h> -#include <wx/utils.h> #include <wx/timer.h> +#include <wx/utils.h> #include "msg_popup.h" #include "../version/version.h" -//#include "../lib/ffs_paths.h" +////#include "../lib/ffs_paths.h" #include <zen/scope_guard.h> #ifdef FFS_WIN +#include <zen/win.h> //tame wininet include #include <wininet.h> + +#elif defined FFS_LINUX || defined FFS_MAC +#include <wx/protocol/http.h> +#include <wx/sstream.h> #endif using namespace zen; @@ -158,7 +161,7 @@ GetVerResult getOnlineVersion(wxString& version) //empty string on error; { wxHTTP webAccess; webAccess.SetHeader(L"content-type", L"text/html; charset=utf-8"); - webAccess.SetTimeout(timeout); //default: 10 minutes(WTF are they thinking???)... + webAccess.SetTimeout(timeout); //default: 10 minutes(WTF are these wxWidgets people thinking???)... if (webAccess.Connect(server)) //will *not* fail for non-reachable url here! { @@ -245,7 +248,7 @@ void zen::checkForUpdateNow(wxWindow* parent) } -void zen::checkForUpdatePeriodically(wxWindow* parent, long& lastUpdateCheck) +void zen::checkForUpdatePeriodically(wxWindow* parent, long& lastUpdateCheck, const std::function<void()>& onBeforeInternetAccess) { if (lastUpdateCheck != -1) { @@ -268,9 +271,10 @@ void zen::checkForUpdatePeriodically(wxWindow* parent, long& lastUpdateCheck) // break; // } //} - //else - if (wxGetLocalTime() >= lastUpdateCheck + 7 * 24 * 3600) //check weekly + //else + if (wxGetLocalTime() >= lastUpdateCheck + 7 * 24 * 3600) //check weekly { + onBeforeInternetAccess(); //notify client before (potentially) blocking some time wxString onlineVersion; switch (getOnlineVersion(onlineVersion)) { diff --git a/ui/check_version.h b/ui/check_version.h index a61cc98c..d2e7220f 100644 --- a/ui/check_version.h +++ b/ui/check_version.h @@ -7,14 +7,14 @@ #ifndef UPDATEVERSION_H_INCLUDED #define UPDATEVERSION_H_INCLUDED +#include <functional> #include <wx/window.h> namespace zen { void checkForUpdateNow(wxWindow* parent); - -void checkForUpdatePeriodically(wxWindow* parent, long& lastUpdateCheck); +void checkForUpdatePeriodically(wxWindow* parent, long& lastUpdateCheck, const std::function<void()>& onBeforeInternetAccess); //-1: check never } #endif // UPDATEVERSION_H_INCLUDED diff --git a/ui/column_attr.h b/ui/column_attr.h index ab196cb1..5f0d79aa 100644 --- a/ui/column_attr.h +++ b/ui/column_attr.h @@ -76,7 +76,8 @@ enum ColumnTypeMiddle enum ColumnTypeNavi { COL_TYPE_NAVI_BYTES, - COL_TYPE_NAVI_DIRECTORY + COL_TYPE_NAVI_DIRECTORY, + COL_TYPE_NAVI_ITEM_COUNT }; @@ -93,15 +94,16 @@ struct ColumnAttributeNavi const bool defaultValueShowPercentage = true; -const ColumnTypeNavi defaultValueLastSortColumn = COL_TYPE_NAVI_DIRECTORY; //remember sort on navigation panel -const bool defaultValueLastSortAscending = true; // +const ColumnTypeNavi defaultValueLastSortColumn = COL_TYPE_NAVI_BYTES; //remember sort on navigation panel +const bool defaultValueLastSortAscending = false; // inline std::vector<ColumnAttributeNavi> getDefaultColumnAttributesNavi() { std::vector<ColumnAttributeNavi> attr; - attr.push_back(ColumnAttributeNavi(COL_TYPE_NAVI_DIRECTORY, -60, 1, true)); //stretch to full width and substract sum of fixed size widths - attr.push_back(ColumnAttributeNavi(COL_TYPE_NAVI_BYTES, 60, 0, true)); //GTK needs a few pixels width more + attr.push_back(ColumnAttributeNavi(COL_TYPE_NAVI_DIRECTORY, -120, 1, true)); //stretch to full width and substract sum of fixed size widths + attr.push_back(ColumnAttributeNavi(COL_TYPE_NAVI_ITEM_COUNT, 60, 0, true)); + attr.push_back(ColumnAttributeNavi(COL_TYPE_NAVI_BYTES, 60, 0, true)); //GTK needs a few pixels width more return attr; } } diff --git a/ui/custom_grid.cpp b/ui/custom_grid.cpp index 006ad834..35d3248d 100644 --- a/ui/custom_grid.cpp +++ b/ui/custom_grid.cpp @@ -695,11 +695,11 @@ class GridDataLeft : public GridDataRim<LEFT_SIDE> public: GridDataLeft(const std::shared_ptr<const zen::GridView>& gridDataView, Grid& grid) : GridDataRim<LEFT_SIDE>(gridDataView, grid) {} - void setNavigationMarker(std::vector<const HierarchyObject*>&& markedFiles, - std::vector<const HierarchyObject*>&& markedContainer) + void setNavigationMarker(hash_set<const FileSystemObject*>&& markedFilesAndLinks, + hash_set<const HierarchyObject*>&& markedContainer) { - markedFiles_ .swap(markedFiles); - markedContainer_.swap(markedContainer); + markedFilesAndLinks_.swap(markedFilesAndLinks); + markedContainer_ .swap(markedContainer); } private: @@ -714,33 +714,26 @@ private: { if (const FileSystemObject* fsObj = getRawData(row)) { - if (dynamic_cast<const FileMapping*>(fsObj) || dynamic_cast<const SymLinkMapping*>(fsObj)) - { - for (auto it = markedFiles_.begin(); it != markedFiles_.end(); ++it) - if (*it == &(fsObj->parent())) //mark files/links wich have the given parent - return true; - } - else if (auto dirObj = dynamic_cast<const DirMapping*>(fsObj)) + if (markedFilesAndLinks_.find(fsObj) != markedFilesAndLinks_.end()) //mark files/links directly + return true; + + if (auto dirObj = dynamic_cast<const DirMapping*>(fsObj)) { - for (auto it = markedContainer_.begin(); it != markedContainer_.end(); ++it) - if (*it == dirObj) //mark directories which *are* the given HierarchyObject* - return true; + if (markedContainer_.find(dirObj) != markedContainer_.end()) //mark directories which *are* the given HierarchyObject* + return true; } - for (auto it = markedContainer_.begin(); it != markedContainer_.end(); ++it) + //mark all objects which have the HierarchyObject as *any* matching ancestor + const HierarchyObject* parent = &(fsObj->parent()); + for (;;) { - //mark all objects which have the HierarchyObject as *any* matching ancestor - const HierarchyObject* parent = &(fsObj->parent()); - for (;;) - { - if (*it == parent) - return true; + if (markedContainer_.find(parent) != markedContainer_.end()) + return true; - if (auto dirObj = dynamic_cast<const DirMapping*>(parent)) - parent = &(dirObj->parent()); - else - break; - } + if (auto dirObj = dynamic_cast<const DirMapping*>(parent)) + parent = &(dirObj->parent()); + else + break; } } return false; @@ -758,8 +751,8 @@ private: } } - std::vector<const HierarchyObject*> markedFiles_; //mark files/symlinks directly within a container - std::vector<const HierarchyObject*> markedContainer_; //mark full container including all child-objects + hash_set<const FileSystemObject*> markedFilesAndLinks_; //mark files/symlinks directly within a container + hash_set<const HierarchyObject*> markedContainer_; //mark full container including all child-objects //DO NOT DEREFERENCE!!!! NOT GUARANTEED TO BE VALID!!! }; @@ -837,7 +830,8 @@ public: } //update highlight and tooltip: on OS X no mouse movement event is generated after a mouse button click (unlike on Windows) - onMouseMovement(refGrid().getMainWin().ScreenToClient(wxGetMousePosition())); + wxPoint clientPos = refGrid().getMainWin().ScreenToClient(wxGetMousePosition()); + onMouseMovement(clientPos); } void onMouseMovement(const wxPoint& clientPos) @@ -859,7 +853,8 @@ public: refreshCell(refGrid(), highlight->row_, static_cast<ColumnType>(COL_TYPE_MIDDLE_VALUE)); //show custom tooltip - showToolTip(row, refGrid().getMainWin().ClientToScreen(clientPos)); + if (refGrid().getMainWin().GetClientRect().Contains(clientPos)) //cursor might have moved outside visible client area + showToolTip(row, refGrid().getMainWin().ClientToScreen(clientPos)); } else onMouseLeave(); @@ -1623,11 +1618,11 @@ void gridview::refresh(Grid& gridLeft, Grid& gridCenter, Grid& gridRight) void gridview::setNavigationMarker(Grid& gridLeft, - std::vector<const HierarchyObject*>&& markedFiles, - std::vector<const HierarchyObject*>&& markedContainer) + hash_set<const FileSystemObject*>&& markedFilesAndLinks, + hash_set<const HierarchyObject*>&& markedContainer) { if (auto* provLeft = dynamic_cast<GridDataLeft*>(gridLeft.getDataProvider())) - provLeft->setNavigationMarker(std::move(markedFiles), std::move(markedContainer)); + provLeft->setNavigationMarker(std::move(markedFilesAndLinks), std::move(markedContainer)); else assert(false); gridLeft.Refresh(); diff --git a/ui/custom_grid.h b/ui/custom_grid.h index 6381c8c0..c2e653ef 100644 --- a/ui/custom_grid.h +++ b/ui/custom_grid.h @@ -31,8 +31,8 @@ void refresh(Grid& gridLeft, Grid& gridCenter, Grid& gridRight); //mark rows selected in navigation/compressed tree and navigate to leading object void setNavigationMarker(Grid& gridLeft, - std::vector<const HierarchyObject*>&& markedFiles, //mark files/symlinks directly within a container - std::vector<const HierarchyObject*>&& markedContainer); //mark full container including child-objects + hash_set<const FileSystemObject*>&& markedFilesAndLinks,//mark files/symlinks directly within a container + hash_set<const HierarchyObject*>&& markedContainer); //mark full container including child-objects } wxBitmap getSyncOpImage(SyncOperation syncOp); diff --git a/ui/folder_pair.h b/ui/folder_pair.h index 5a629ff5..801cd606 100644 --- a/ui/folder_pair.h +++ b/ui/folder_pair.h @@ -4,8 +4,8 @@ // * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * // ************************************************************************** -#ifndef FOLDERPAIR_H_INCLUDED -#define FOLDERPAIR_H_INCLUDED +#ifndef FOLDERPAIR_H_89341750847252345 +#define FOLDERPAIR_H_89341750847252345 #include <wx/event.h> #include <wx/menu.h> @@ -30,10 +30,6 @@ public: typedef std::shared_ptr<const CompConfig> AltCompCfgPtr; typedef std::shared_ptr<const SyncConfig> AltSyncCfgPtr; - AltCompCfgPtr getAltCompConfig() const { return altCompConfig; } - AltSyncCfgPtr getAltSyncConfig() const { return altSyncConfig; } - FilterConfig getAltFilterConfig() const { return localFilter; } - void setConfig(AltCompCfgPtr compConfig, AltSyncCfgPtr syncCfg, const FilterConfig& filter) { altCompConfig = compConfig; @@ -42,6 +38,27 @@ public: refreshButtons(); } + AltCompCfgPtr getAltCompConfig() const { return altCompConfig; } + AltSyncCfgPtr getAltSyncConfig() const { return altSyncConfig; } + FilterConfig getAltFilterConfig() const { return localFilter; } + + + FolderPairPanelBasic(GuiPanel& basicPanel) : //takes reference on basic panel to be enhanced + basicPanel_(basicPanel) + { + //register events for removal of alternate configuration + basicPanel_.m_bpButtonAltCompCfg ->Connect(wxEVT_RIGHT_DOWN, wxCommandEventHandler(FolderPairPanelBasic::OnAltCompCfgContext ), nullptr, this); + basicPanel_.m_bpButtonAltSyncCfg ->Connect(wxEVT_RIGHT_DOWN, wxCommandEventHandler(FolderPairPanelBasic::OnAltSyncCfgContext ), nullptr, this); + basicPanel_.m_bpButtonLocalFilter->Connect(wxEVT_RIGHT_DOWN, wxCommandEventHandler(FolderPairPanelBasic::OnLocalFilterCfgContext), nullptr, this); + + basicPanel_.m_bpButtonAltCompCfg-> Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(FolderPairPanelBasic::OnAltCompCfg ), nullptr, this); + basicPanel_.m_bpButtonAltSyncCfg-> Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(FolderPairPanelBasic::OnAltSyncCfg ), nullptr, this); + basicPanel_.m_bpButtonLocalFilter->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(FolderPairPanelBasic::OnLocalFilterCfg), nullptr, this); + + basicPanel_.m_bpButtonRemovePair->SetBitmapLabel(getResourceImage(L"item_delete")); + } + +private: void refreshButtons() { if (altCompConfig.get()) @@ -79,69 +96,72 @@ public: } } -protected: - FolderPairPanelBasic(GuiPanel& basicPanel) : //takes reference on basic panel to be enhanced - basicPanel_(basicPanel) - { - //register events for removal of alternate configuration - basicPanel_.m_bpButtonAltCompCfg ->Connect(wxEVT_RIGHT_DOWN, wxCommandEventHandler(FolderPairPanelBasic::OnAltCompCfgContext ), nullptr, this); - basicPanel_.m_bpButtonAltSyncCfg ->Connect(wxEVT_RIGHT_DOWN, wxCommandEventHandler(FolderPairPanelBasic::OnAltSyncCfgContext ), nullptr, this); - basicPanel_.m_bpButtonLocalFilter->Connect(wxEVT_RIGHT_DOWN, wxCommandEventHandler(FolderPairPanelBasic::OnLocalFilterCfgContext), nullptr, this); - - basicPanel_.m_bpButtonAltCompCfg-> Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(FolderPairPanelBasic::OnAltCompCfg ), nullptr, this); - basicPanel_.m_bpButtonAltSyncCfg-> Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(FolderPairPanelBasic::OnAltSyncCfg ), nullptr, this); - basicPanel_.m_bpButtonLocalFilter->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(FolderPairPanelBasic::OnLocalFilterCfg), nullptr, this); - - basicPanel_.m_bpButtonRemovePair->SetBitmapLabel(getResourceImage(L"item_delete")); - } - - virtual void removeAltCompCfg() - { - altCompConfig.reset(); - refreshButtons(); - } - - virtual void removeAltSyncCfg() - { - altSyncConfig.reset(); - refreshButtons(); - } - - virtual void removeLocalFilterCfg() - { - localFilter = FilterConfig(); - refreshButtons(); - } - -private: void OnAltCompCfgContext(wxCommandEvent& event) { + auto removeAltCompCfg = [&] + { + this->altCompConfig.reset(); //"this->" galore: workaround GCC compiler bugs + this->refreshButtons(); + this->onAltCompCfgChange(); + }; + ContextMenu menu; - menu.addItem(_("Remove alternate settings"), [this] { this->removeAltCompCfg(); }, nullptr, altCompConfig.get() != nullptr); + menu.addItem(_("Remove alternate settings"), removeAltCompCfg, nullptr, altCompConfig.get() != nullptr); menu.popup(basicPanel_); } void OnAltSyncCfgContext(wxCommandEvent& event) { + auto removeAltSyncCfg = [&] + { + this->altSyncConfig.reset(); + this->refreshButtons(); + this->onAltSyncCfgChange(); + }; + ContextMenu menu; - menu.addItem(_("Remove alternate settings"), [this] { this->removeAltSyncCfg(); }, nullptr, altSyncConfig.get() != nullptr); + menu.addItem(_("Remove alternate settings"), removeAltSyncCfg, nullptr, altSyncConfig.get() != nullptr); menu.popup(basicPanel_); } void OnLocalFilterCfgContext(wxCommandEvent& event) { + auto removeLocalFilterCfg = [&] + { + this->localFilter = FilterConfig(); + this->refreshButtons(); + this->onLocalFilterCfgChange(); + }; + + std::unique_ptr<FilterConfig>& filterCfgOnClipboard = getFilterCfgOnClipboardRef(); + + auto copyFilter = [&] { filterCfgOnClipboard = make_unique<FilterConfig>(this->localFilter); }; + auto pasteFilter = [&] + { + if (filterCfgOnClipboard) + { + this->localFilter = *filterCfgOnClipboard; + this->refreshButtons(); + this->onLocalFilterCfgChange(); + } + }; + ContextMenu menu; - menu.addItem(_("Clear filter settings"), [this] { this->removeLocalFilterCfg(); }, nullptr, !isNullFilter(localFilter)); + menu.addItem(_("Clear filter settings"), removeLocalFilterCfg, nullptr, !isNullFilter(localFilter)); + menu.addSeparator(); + menu.addItem( _("Copy"), copyFilter, nullptr, !isNullFilter(localFilter)); + menu.addItem( _("Paste"), pasteFilter, nullptr, filterCfgOnClipboard.get() != nullptr); menu.popup(basicPanel_); } virtual MainConfiguration getMainConfig() const = 0; virtual wxWindow* getParentWindow() = 0; + virtual std::unique_ptr<FilterConfig>& getFilterCfgOnClipboardRef() = 0; - virtual void OnAltCompCfgChange() = 0; - virtual void OnAltSyncCfgChange() = 0; - virtual void OnLocalFilterCfgChange() {}; + virtual void onAltCompCfgChange() = 0; + virtual void onAltSyncCfgChange() = 0; + virtual void onLocalFilterCfgChange() = 0; void OnAltCompCfg(wxCommandEvent& event) { @@ -153,8 +173,7 @@ private: { altCompConfig = std::make_shared<CompConfig>(cmpCfg); refreshButtons(); - - OnAltCompCfgChange(); + onAltCompCfgChange(); } } @@ -173,8 +192,7 @@ private: { altSyncConfig = std::make_shared<SyncConfig>(syncCfg); refreshButtons(); - - OnAltSyncCfgChange(); + onAltSyncCfgChange(); } } @@ -188,8 +206,7 @@ private: { localFilter = localFiltTmp; refreshButtons(); - - OnLocalFilterCfgChange(); + onLocalFilterCfgChange(); } } @@ -203,6 +220,4 @@ private: } -#endif // FOLDERPAIR_H_INCLUDED - - +#endif //FOLDERPAIR_H_89341750847252345 diff --git a/ui/gui_generated.cpp b/ui/gui_generated.cpp index 6ce104e7..db1f03da 100644 --- a/ui/gui_generated.cpp +++ b/ui/gui_generated.cpp @@ -89,8 +89,15 @@ MainDialogGenerated::MainDialogGenerated( wxWindow* parent, wxWindowID id, const m_menuItemManual = new wxMenuItem( m_menuHelp, wxID_HELP, wxString( _("&Content") ) + wxT('\t') + wxT("F1"), wxEmptyString, wxITEM_NORMAL ); m_menuHelp->Append( m_menuItemManual ); - m_menuItemCheckVer = new wxMenuItem( m_menuHelp, wxID_ANY, wxString( _("&Check for new version") ) , wxEmptyString, wxITEM_NORMAL ); - m_menuHelp->Append( m_menuItemCheckVer ); + m_menuCheckVersion = new wxMenu(); + m_menuItemCheckVersionNow = new wxMenuItem( m_menuCheckVersion, wxID_ANY, wxString( _("&Check now") ) , wxEmptyString, wxITEM_NORMAL ); + m_menuCheckVersion->Append( m_menuItemCheckVersionNow ); + + m_menuItemCheckVersionAuto = new wxMenuItem( m_menuCheckVersion, wxID_ANY, wxString( _("Check &automatically once a week") ) , wxEmptyString, wxITEM_CHECK ); + m_menuCheckVersion->Append( m_menuItemCheckVersionAuto ); + m_menuItemCheckVersionAuto->Check( true ); + + m_menuHelp->Append( -1, _("Check for new version"), m_menuCheckVersion ); m_menuHelp->AppendSeparator(); @@ -854,7 +861,8 @@ MainDialogGenerated::MainDialogGenerated( wxWindow* parent, wxWindowID id, const this->Connect( m_menuItemGlobSett->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuGlobalSettings ) ); this->Connect( m_menuItem5->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuExportFileList ) ); this->Connect( m_menuItemManual->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnShowHelp ) ); - this->Connect( m_menuItemCheckVer->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuCheckVersion ) ); + this->Connect( m_menuItemCheckVersionNow->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuCheckVersion ) ); + this->Connect( m_menuItemCheckVersionAuto->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuCheckVersionAutomatically ) ); this->Connect( m_menuItemAbout->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuAbout ) ); m_buttonCompare->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnCompare ), NULL, this ); m_bpButtonCmpConfig->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnCmpSettings ), NULL, this ); @@ -921,6 +929,7 @@ MainDialogGenerated::~MainDialogGenerated() this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuExportFileList ) ); this->Disconnect( wxID_HELP, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnShowHelp ) ); this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuCheckVersion ) ); + this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuCheckVersionAutomatically ) ); this->Disconnect( wxID_ABOUT, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuAbout ) ); m_buttonCompare->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnCompare ), NULL, this ); m_bpButtonCmpConfig->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnCmpSettings ), NULL, this ); @@ -1378,13 +1387,13 @@ SyncProgressDlgGenerated::SyncProgressDlgGenerated( wxWindow* parent, wxWindowID m_buttonClose->SetDefault(); m_buttonClose->Enable( false ); - bSizer28->Add( m_buttonClose, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 ); + bSizer28->Add( m_buttonClose, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); m_buttonPause = new wxButton( this, wxID_ANY, _("&Pause"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - bSizer28->Add( m_buttonPause, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 ); + bSizer28->Add( m_buttonPause, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); m_buttonAbort = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - bSizer28->Add( m_buttonAbort, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + bSizer28->Add( m_buttonAbort, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); bSizerRoot->Add( bSizer28, 0, wxALIGN_RIGHT, 5 ); @@ -1769,7 +1778,7 @@ SyncCfgDlgGenerated::SyncCfgDlgGenerated( wxWindow* parent, wxWindowID id, const fgSizer1->Add( m_toggleBtnAutomatic, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - m_staticTextAutomatic = new wxStaticText( m_panel37, wxID_ANY, _("Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically."), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextAutomatic = new wxStaticText( m_panel37, wxID_ANY, _("Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database."), wxDefaultPosition, wxDefaultSize, 0 ); m_staticTextAutomatic->Wrap( 450 ); fgSizer1->Add( m_staticTextAutomatic, 0, wxALIGN_CENTER_VERTICAL, 5 ); @@ -1910,7 +1919,7 @@ SyncCfgDlgGenerated::SyncCfgDlgGenerated( wxWindow* parent, wxWindowID id, const bSizer180->Add( m_toggleBtnRecycler, 0, wxRIGHT|wxALIGN_CENTER_VERTICAL, 5 ); m_toggleBtnVersioning = new wxToggleButton( m_panel37, wxID_ANY, _("Versioning"), wxDefaultPosition, wxDefaultSize, 0 ); - m_toggleBtnVersioning->SetToolTip( _("Move time-stamped files into specified folder") ); + m_toggleBtnVersioning->SetToolTip( _("Move files to user-defined folder") ); bSizer180->Add( m_toggleBtnVersioning, 0, wxALIGN_CENTER_VERTICAL, 5 ); @@ -1966,38 +1975,45 @@ SyncCfgDlgGenerated::SyncCfgDlgGenerated( wxWindow* parent, wxWindowID id, const bSizerConfig = new wxBoxSizer( wxVERTICAL ); - m_staticText90 = new wxStaticText( m_panel37, wxID_ANY, _("Configuration"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText90->Wrap( -1 ); - bSizerConfig->Add( m_staticText90, 0, wxBOTTOM, 5 ); + wxBoxSizer* bSizer18011; + bSizer18011 = new wxBoxSizer( wxHORIZONTAL ); + + m_staticTextHeaderCategory1 = new wxStaticText( m_panel37, wxID_ANY, _("Category"), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT ); + m_staticTextHeaderCategory1->Wrap( -1 ); + bSizer18011->Add( m_staticTextHeaderCategory1, 1, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer18011->Add( 5, 0, 0, 0, 5 ); + + m_staticTextHeaderAction1 = new wxStaticText( m_panel37, wxID_ANY, _("Action"), wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT ); + m_staticTextHeaderAction1->Wrap( -1 ); + bSizer18011->Add( m_staticTextHeaderAction1, 1, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + + bSizerConfig->Add( bSizer18011, 0, wxEXPAND, 5 ); bSizerConfig->Add( 0, 5, 0, 0, 5 ); m_bitmapDatabase = new wxStaticBitmap( m_panel37, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); - bSizerConfig->Add( m_bitmapDatabase, 0, wxALIGN_CENTER_HORIZONTAL, 10 ); + bSizerConfig->Add( m_bitmapDatabase, 0, wxALIGN_CENTER_HORIZONTAL|wxTOP, 10 ); - sbSizerSyncDirections = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* sbSizerKeepWidthStable; + sbSizerKeepWidthStable = new wxBoxSizer( wxHORIZONTAL ); - wxBoxSizer* bSizer1801; - bSizer1801 = new wxBoxSizer( wxHORIZONTAL ); - m_staticTextHeaderCategory = new wxStaticText( m_panel37, wxID_ANY, _("Category"), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT ); - m_staticTextHeaderCategory->Wrap( -1 ); - m_staticTextHeaderCategory->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + sbSizerKeepWidthStable->Add( 45, 0, 0, 0, 5 ); - bSizer1801->Add( m_staticTextHeaderCategory, 1, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + sbSizerKeepWidthStable->Add( 5, 0, 0, 0, 5 ); - bSizer1801->Add( 5, 0, 0, 0, 5 ); - m_staticTextHeaderAction = new wxStaticText( m_panel37, wxID_ANY, _("Action"), wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT ); - m_staticTextHeaderAction->Wrap( -1 ); - m_staticTextHeaderAction->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + sbSizerKeepWidthStable->Add( 46, 0, 0, 0, 5 ); - bSizer1801->Add( m_staticTextHeaderAction, 1, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + bSizerConfig->Add( sbSizerKeepWidthStable, 0, 0, 5 ); - sbSizerSyncDirections->Add( bSizer1801, 0, wxEXPAND, 5 ); + sbSizerSyncDirections = new wxBoxSizer( wxVERTICAL ); bSizerLeftOnly = new wxBoxSizer( wxHORIZONTAL ); @@ -2099,9 +2115,6 @@ SyncCfgDlgGenerated::SyncCfgDlgGenerated( wxWindow* parent, wxWindowID id, const bSizerConfig->Add( sbSizerSyncDirections, 0, wxEXPAND, 5 ); - bSizerConfig->Add( 0, 0, 1, wxEXPAND, 5 ); - - bSizer181->Add( bSizerConfig, 0, wxALL|wxEXPAND, 5 ); @@ -2913,8 +2926,8 @@ FilterDlgGenerated::FilterDlgGenerated( wxWindow* parent, wxWindowID id, const w wxBoxSizer* bSizer22; bSizer22 = new wxBoxSizer( wxHORIZONTAL ); - m_button9 = new wxButton( this, wxID_DEFAULT, _("&Default"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - bSizer22->Add( m_button9, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); + m_buttonClear = new wxButton( this, wxID_DEFAULT, _("&Clear"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + bSizer22->Add( m_buttonClear, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 ); bSizer22->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 ); @@ -2946,7 +2959,7 @@ FilterDlgGenerated::FilterDlgGenerated( wxWindow* parent, wxWindowID id, const w m_choiceUnitTimespan->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateChoice ), NULL, this ); m_choiceUnitMinSize->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateChoice ), NULL, this ); m_choiceUnitMaxSize->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateChoice ), NULL, this ); - m_button9->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnDefault ), NULL, this ); + m_buttonClear->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnClear ), NULL, this ); m_buttonOk->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnApply ), NULL, this ); m_button17->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnCancel ), NULL, this ); } @@ -2961,7 +2974,7 @@ FilterDlgGenerated::~FilterDlgGenerated() m_choiceUnitTimespan->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateChoice ), NULL, this ); m_choiceUnitMinSize->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateChoice ), NULL, this ); m_choiceUnitMaxSize->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateChoice ), NULL, this ); - m_button9->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnDefault ), NULL, this ); + m_buttonClear->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnClear ), NULL, this ); m_buttonOk->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnApply ), NULL, this ); m_button17->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnCancel ), NULL, this ); diff --git a/ui/gui_generated.h b/ui/gui_generated.h index 0972f194..1f034dc2 100644 --- a/ui/gui_generated.h +++ b/ui/gui_generated.h @@ -82,7 +82,9 @@ protected: wxMenuItem* m_menuItemGlobSett; wxMenu* m_menuHelp; wxMenuItem* m_menuItemManual; - wxMenuItem* m_menuItemCheckVer; + wxMenu* m_menuCheckVersion; + wxMenuItem* m_menuItemCheckVersionNow; + wxMenuItem* m_menuItemCheckVersionAuto; wxMenuItem* m_menuItemAbout; wxBoxSizer* bSizerPanelHolder; wxPanel* m_panelTopButtons; @@ -188,6 +190,7 @@ protected: virtual void OnMenuExportFileList( wxCommandEvent& event ) { event.Skip(); } virtual void OnShowHelp( wxCommandEvent& event ) { event.Skip(); } virtual void OnMenuCheckVersion( wxCommandEvent& event ) { event.Skip(); } + virtual void OnMenuCheckVersionAutomatically( wxCommandEvent& event ) { event.Skip(); } virtual void OnMenuAbout( wxCommandEvent& event ) { event.Skip(); } virtual void OnCmpSettings( wxCommandEvent& event ) { event.Skip(); } virtual void OnCompSettingsContext( wxMouseEvent& event ) { event.Skip(); } @@ -482,11 +485,10 @@ protected: wxButton* m_buttonSelectDirVersioning; wxStaticLine* m_staticline31; wxBoxSizer* bSizerConfig; - wxStaticText* m_staticText90; + wxStaticText* m_staticTextHeaderCategory1; + wxStaticText* m_staticTextHeaderAction1; wxStaticBitmap* m_bitmapDatabase; wxBoxSizer* sbSizerSyncDirections; - wxStaticText* m_staticTextHeaderCategory; - wxStaticText* m_staticTextHeaderAction; wxBoxSizer* bSizerLeftOnly; wxStaticBitmap* m_bitmapLeftOnly; wxBitmapButton* m_bpButtonLeftOnly; @@ -730,7 +732,7 @@ protected: wxSpinCtrl* m_spinCtrlMaxSize; wxChoice* m_choiceUnitMaxSize; wxStaticLine* m_staticline16; - wxButton* m_button9; + wxButton* m_buttonClear; wxButton* m_buttonOk; wxButton* m_button17; @@ -739,14 +741,14 @@ protected: virtual void OnHelp( wxCommandEvent& event ) { event.Skip(); } virtual void OnUpdateNameFilter( wxCommandEvent& event ) { event.Skip(); } virtual void OnUpdateChoice( wxCommandEvent& event ) { event.Skip(); } - virtual void OnDefault( wxCommandEvent& event ) { event.Skip(); } + virtual void OnClear( wxCommandEvent& event ) { event.Skip(); } virtual void OnApply( wxCommandEvent& event ) { event.Skip(); } virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); } public: - FilterDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Configure filter"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); + FilterDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Configure filter"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE|wxMAXIMIZE_BOX|wxMINIMIZE_BOX|wxRESIZE_BORDER ); ~FilterDlgGenerated(); }; diff --git a/ui/main_dlg.cpp b/ui/main_dlg.cpp index 26036817..cb05e086 100644 --- a/ui/main_dlg.cpp +++ b/ui/main_dlg.cpp @@ -13,7 +13,7 @@ #include <zen/format_unit.h> #include <zen/file_handling.h> #include <zen/serialize.h> -#include <zen/file_id.h> +//#include <zen/file_id.h> #include <zen/thread.h> #include <wx+/context_menu.h> #include <wx+/string_conv.h> @@ -54,9 +54,9 @@ namespace { struct wxClientHistoryData: public wxClientData //we need a wxClientData derived class to tell wxWidgets to take object ownership! { - wxClientHistoryData(const wxString& cfgFile, int lastUseIndex) : cfgFile_(cfgFile), lastUseIndex_(lastUseIndex) {} + wxClientHistoryData(const Zstring& cfgFile, int lastUseIndex) : cfgFile_(cfgFile), lastUseIndex_(lastUseIndex) {} - wxString cfgFile_; + Zstring cfgFile_; int lastUseIndex_; //support sorting history by last usage, the higher the index the more recent the usage }; @@ -99,7 +99,7 @@ public: case xmlAccess::MERGE_BATCH: case xmlAccess::MERGE_GUI: case xmlAccess::MERGE_GUI_BATCH: - mainDlg_.loadConfiguration(droppedFiles); + mainDlg_.loadConfiguration(toZ(droppedFiles)); return false; case xmlAccess::MERGE_OTHER: @@ -142,34 +142,13 @@ public: mainDlg(mainDialog) {} private: - virtual wxWindow* getParentWindow() - { - return &mainDlg; - } - virtual MainConfiguration getMainConfig() const { return mainDlg.getConfig().mainCfg; } - virtual void OnAltCompCfgChange() { mainDlg.applyCompareConfig(); } - virtual void OnAltSyncCfgChange() { mainDlg.applySyncConfig (); } - - virtual void removeAltCompCfg() - { - FolderPairPanelBasic<GuiPanel>::removeAltCompCfg(); - mainDlg.applyCompareConfig(); - } - - virtual void removeAltSyncCfg() - { - FolderPairPanelBasic<GuiPanel>::removeAltSyncCfg(); - mainDlg.applySyncConfig(); - } + virtual wxWindow* getParentWindow() { return &mainDlg; } + virtual std::unique_ptr<FilterConfig>& getFilterCfgOnClipboardRef() { return mainDlg.filterCfgOnClipboard; } - virtual void OnLocalFilterCfgChange() { mainDlg.applyFilterConfig(); } //re-apply filter - - virtual void removeLocalFilterCfg() - { - FolderPairPanelBasic<GuiPanel>::removeLocalFilterCfg(); - mainDlg.applyFilterConfig(); //update filter - } + virtual void onAltCompCfgChange () { mainDlg.applyCompareConfig(); } + virtual void onAltSyncCfgChange () { mainDlg.applySyncConfig(); } + virtual void onLocalFilterCfgChange() { mainDlg.applyFilterConfig(); } //re-apply filter MainDialog& mainDlg; }; @@ -193,18 +172,18 @@ public: dirNameRight.Connect(EVENT_ON_DIR_MANUAL_CORRECTION, wxCommandEventHandler(MainDialog::onDirManualCorrection), nullptr, &mainDialog); } - void setValues(const wxString& leftDir, - const wxString& rightDir, + void setValues(const Zstring& leftDir, + const Zstring& rightDir, AltCompCfgPtr cmpCfg, AltSyncCfgPtr syncCfg, const FilterConfig& filter) { setConfig(cmpCfg, syncCfg, filter); - dirNameLeft.setName(leftDir); - dirNameRight.setName(rightDir); + dirNameLeft .setName(toWx(leftDir)); + dirNameRight.setName(toWx(rightDir)); } - wxString getLeftDir () const { return dirNameLeft .getName(); } - wxString getRightDir() const { return dirNameRight.getName(); } + Zstring getLeftDir () const { return toZ(dirNameLeft .getName()); } + Zstring getRightDir() const { return toZ(dirNameRight.getName()); } private: //support for drag and drop @@ -240,18 +219,18 @@ public: dirNameRight.Connect(EVENT_ON_DIR_MANUAL_CORRECTION, wxCommandEventHandler(MainDialog::onDirManualCorrection), nullptr, &mainDialog); } - void setValues(const wxString& leftDir, - const wxString& rightDir, + void setValues(const Zstring& leftDir, + const Zstring& rightDir, AltCompCfgPtr cmpCfg, AltSyncCfgPtr syncCfg, const FilterConfig& filter) { setConfig(cmpCfg, syncCfg, filter); - dirNameLeft.setName(leftDir); - dirNameRight.setName(rightDir); + dirNameLeft .setName(toWx(leftDir)); + dirNameRight.setName(toWx(rightDir)); } - wxString getLeftDir () const { return dirNameLeft .getName(); } - wxString getRightDir() const { return dirNameRight.getName(); } + Zstring getLeftDir () const { return toZ(dirNameLeft .getName()); } + Zstring getRightDir() const { return toZ(dirNameRight.getName()); } private: //support for drag and drop @@ -328,12 +307,13 @@ xmlAccess::XmlGlobalSettings retrieveGlobalCfgFromDisk() //blocks on GUI on erro XmlGlobalSettings globalCfg; try { - if (fileExists(toZ(getGlobalConfigFile()))) + if (fileExists(getGlobalConfigFile())) readConfig(globalCfg); //throw FfsXmlError //else: globalCfg already has default values } catch (const FfsXmlError& e) { + assert(false); if (e.getSeverity() != FfsXmlError::WARNING) //ignore parsing errors: should be migration problems only *cross-fingers* wxMessageBox(e.toString(), _("Error"), wxOK | wxICON_ERROR); } @@ -342,12 +322,12 @@ xmlAccess::XmlGlobalSettings retrieveGlobalCfgFromDisk() //blocks on GUI on erro } -void MainDialog::create(const std::vector<wxString>& cfgFileNames) +void MainDialog::create(const std::vector<Zstring>& cfgFileNames) { using namespace xmlAccess; const XmlGlobalSettings globalSettings = retrieveGlobalCfgFromDisk(); - std::vector<wxString> filenames; + std::vector<Zstring> filenames; if (!cfgFileNames.empty()) //1. this one has priority filenames = cfgFileNames; else //FFS default startup: use last used selection @@ -359,11 +339,9 @@ void MainDialog::create(const std::vector<wxString>& cfgFileNames) RunUntilFirstHit<NullType> findFirstMissing; - std::for_each(filenames.begin(), filenames.end(), - [&](const wxString& filename) + std::for_each(filenames.begin(), filenames.end(), [&](const Zstring& filename) { - const Zstring filenameFmt = toZ(filename); //convert to Zstring first: we don't want to pass wxString by value and risk MT issues! - findFirstMissing.addJob([=] { return filenameFmt.empty() /*ever empty??*/ || !fileExists(filenameFmt) ? zen::make_unique<NullType>() : nullptr; }); + findFirstMissing.addJob([=] { return filename.empty() /*ever empty??*/ || !fileExists(filename) ? zen::make_unique<NullType>() : nullptr; }); }); //potentially slow network access: give all checks 500ms to finish const bool allFilesExist = findFirstMissing.timedWait(boost::posix_time::milliseconds(500)) && //false: time elapsed @@ -374,7 +352,7 @@ void MainDialog::create(const std::vector<wxString>& cfgFileNames) if (filenames.empty()) { - if (zen::fileExists(zen::toZ(lastRunConfigName()))) //3. try to load auto-save config + if (zen::fileExists(lastRunConfigName())) //3. try to load auto-save config filenames.push_back(lastRunConfigName()); } } @@ -382,10 +360,19 @@ void MainDialog::create(const std::vector<wxString>& cfgFileNames) XmlGuiConfig guiCfg; //structure to receive gui settings with default values bool loadCfgSuccess = false; - if (!filenames.empty()) + if (filenames.empty()) + { + //add default exclusion filter: this is only ever relevant when creating new configurations! + //a default XmlGuiConfig does not need these user-specific exclusions! + Zstring& excludeFilter = guiCfg.mainCfg.globalFilter.excludeFilter; + if (!excludeFilter.empty() && !endsWith(excludeFilter, Zstr("\n"))) + excludeFilter += Zstr("\n"); + excludeFilter += globalSettings.gui.defaultExclusionFilter; + } + else try { - readAnyConfig(toZ(filenames), guiCfg); //throw FfsXmlError + readAnyConfig(filenames, guiCfg); //throw FfsXmlError loadCfgSuccess = true; } catch (const FfsXmlError& error) @@ -396,6 +383,7 @@ void MainDialog::create(const std::vector<wxString>& cfgFileNames) else wxMessageBox(error.toString(), _("Error"), wxOK | wxICON_ERROR); } + const bool startComparisonImmediately = !cfgFileNames.empty() && loadCfgSuccess; //------------------------------------------------------------------------------------------ @@ -407,12 +395,12 @@ void MainDialog::create(const std::vector<wxString>& cfgFileNames) void MainDialog::create(const xmlAccess::XmlGuiConfig& guiCfg, bool startComparison) { - create_impl(guiCfg, std::vector<wxString>(), retrieveGlobalCfgFromDisk(), startComparison); + create_impl(guiCfg, std::vector<Zstring>(), retrieveGlobalCfgFromDisk(), startComparison); } void MainDialog::create(const xmlAccess::XmlGuiConfig& guiCfg, - const std::vector<wxString>& referenceFiles, + const std::vector<Zstring>& referenceFiles, const xmlAccess::XmlGlobalSettings& globalSettings, bool startComparison) { @@ -421,7 +409,7 @@ void MainDialog::create(const xmlAccess::XmlGuiConfig& guiCfg, void MainDialog::create_impl(const xmlAccess::XmlGuiConfig& guiCfg, - const std::vector<wxString>& referenceFiles, + const std::vector<Zstring>& referenceFiles, const xmlAccess::XmlGlobalSettings& globalSettings, bool startComparison) { @@ -442,7 +430,7 @@ void MainDialog::create_impl(const xmlAccess::XmlGuiConfig& guiCfg, MainDialog::MainDialog(const xmlAccess::XmlGuiConfig& guiCfg, - const std::vector<wxString>& referenceFiles, + const std::vector<Zstring>& referenceFiles, const xmlAccess::XmlGlobalSettings& globalSettings, bool startComparison) : MainDialogGenerated(nullptr), @@ -479,34 +467,34 @@ MainDialog::MainDialog(const xmlAccess::XmlGuiConfig& guiCfg, //caption required for all panes that can be manipulated by the users => used by context menu auiMgr.AddPane(m_panelTopButtons, - wxAuiPaneInfo().Name(wxT("Panel1")).Layer(4).Top().Caption(_("Main bar")).CaptionVisible(false).PaneBorder(false).Gripper().MinSize(-1, m_panelTopButtons->GetSize().GetHeight())); + wxAuiPaneInfo().Name(L"Panel1").Layer(4).Top().Caption(_("Main bar")).CaptionVisible(false).PaneBorder(false).Gripper().MinSize(-1, m_panelTopButtons->GetSize().GetHeight())); //note: min height is calculated incorrectly by wxAuiManager if panes with and without caption are in the same row => use smaller min-size compareStatus = make_unique<CompareProgressDialog>(*this); //integrate the compare status panel (in hidden state) auiMgr.AddPane(compareStatus->getAsWindow(), - wxAuiPaneInfo().Name(wxT("Panel9")).Layer(4).Top().Row(1).CaptionVisible(false).PaneBorder(false).Hide()); //name "CmpStatus" used by context menu + wxAuiPaneInfo().Name(L"Panel9").Layer(4).Top().Row(1).CaptionVisible(false).PaneBorder(false).Hide()); //name "CmpStatus" used by context menu auiMgr.AddPane(m_panelDirectoryPairs, - wxAuiPaneInfo().Name(wxT("Panel2")).Layer(2).Top().Row(2).Caption(_("Folder pairs")).CaptionVisible(false).PaneBorder(false).Gripper()); + wxAuiPaneInfo().Name(L"Panel2").Layer(2).Top().Row(2).Caption(_("Folder pairs")).CaptionVisible(false).PaneBorder(false).Gripper()); auiMgr.AddPane(m_panelCenter, - wxAuiPaneInfo().Name(wxT("Panel3")).CenterPane().PaneBorder(false)); + wxAuiPaneInfo().Name(L"Panel3").CenterPane().PaneBorder(false)); auiMgr.AddPane(m_gridNavi, - wxAuiPaneInfo().Name(L"Panel10").Left().Layer(3).Caption(_("Overview")).MinSize(230, m_gridNavi->GetSize().GetHeight())); //MinSize(): just default size, see comment below + wxAuiPaneInfo().Name(L"Panel10").Left().Layer(3).Caption(_("Overview")).MinSize(300, m_gridNavi->GetSize().GetHeight())); //MinSize(): just default size, see comment below auiMgr.AddPane(m_panelConfig, - wxAuiPaneInfo().Name(wxT("Panel4")).Layer(4).Bottom().Row(1).Position(0).Caption(_("Configuration")).MinSize(m_listBoxHistory->GetSize().GetWidth(), m_panelConfig->GetSize().GetHeight())); + wxAuiPaneInfo().Name(L"Panel4").Layer(4).Bottom().Row(1).Position(0).Caption(_("Configuration")).MinSize(m_listBoxHistory->GetSize().GetWidth(), m_panelConfig->GetSize().GetHeight())); auiMgr.AddPane(m_panelFilter, - wxAuiPaneInfo().Name(wxT("Panel5")).Layer(4).Bottom().Row(1).Position(1).Caption(_("Filter files")).MinSize(m_bpButtonFilter->GetSize().GetWidth(), m_panelFilter->GetSize().GetHeight())); + wxAuiPaneInfo().Name(L"Panel5").Layer(4).Bottom().Row(1).Position(1).Caption(_("Filter files")).MinSize(m_bpButtonFilter->GetSize().GetWidth(), m_panelFilter->GetSize().GetHeight())); auiMgr.AddPane(m_panelViewFilter, - wxAuiPaneInfo().Name(wxT("Panel6")).Layer(4).Bottom().Row(1).Position(2).Caption(_("Select view")).MinSize(m_bpButtonShowDoNothing->GetSize().GetWidth(), m_panelViewFilter->GetSize().GetHeight())); + wxAuiPaneInfo().Name(L"Panel6").Layer(4).Bottom().Row(1).Position(2).Caption(_("Select view")).MinSize(m_bpButtonShowDoNothing->GetSize().GetWidth(), m_panelViewFilter->GetSize().GetHeight())); auiMgr.AddPane(m_panelStatistics, - wxAuiPaneInfo().Name(wxT("Panel7")).Layer(4).Bottom().Row(1).Position(3).Caption(_("Statistics")).MinSize(m_bitmapData->GetSize().GetWidth() + m_staticTextData->GetSize().GetWidth(), m_panelStatistics->GetSize().GetHeight())); + wxAuiPaneInfo().Name(L"Panel7").Layer(4).Bottom().Row(1).Position(3).Caption(_("Statistics")).MinSize(m_bitmapData->GetSize().GetWidth() + m_staticTextData->GetSize().GetWidth(), m_panelStatistics->GetSize().GetHeight())); auiMgr.Update(); @@ -632,7 +620,16 @@ MainDialog::MainDialog(const xmlAccess::XmlGuiConfig& guiCfg, setMenuItemImage(m_menuItemAbout, getResourceImage(L"aboutSmall")); if (!manualProgramUpdateRequired()) - m_menuItemCheckVer->Enable(false); + { + m_menuItemCheckVersionNow ->Enable(false); + m_menuItemCheckVersionAuto->Enable(false); + + //wxFormbuilder doesn't give us a wxMenuItem for m_menuCheckVersion, so we need this abomination: + wxMenuItemList& items = m_menuHelp->GetMenuItems(); + for (auto it = items.begin(); it != items.end(); ++it) + if ((*it)->GetSubMenu() == m_menuCheckVersion) + (*it)->Enable(false); + } //create language selection menu std::for_each(zen::ExistingTranslations::get().begin(), ExistingTranslations::get().end(), @@ -664,7 +661,7 @@ MainDialog::MainDialog(const xmlAccess::XmlGuiConfig& guiCfg, setupFileDrop(*m_gridNavi); m_gridNavi->Connect(EVENT_DROP_FILE, FileDropEventHandler(MainDialog::onNaviPanelFilesDropped), nullptr, this); - Connect(wxEVT_IDLE, wxEventHandler(MainDialog::OnIdleEvent), nullptr, this); + timerForAsyncTasks.Connect(wxEVT_TIMER, wxEventHandler(MainDialog::onProcessAsyncTasks), nullptr, this); //Connect(wxEVT_SIZE, wxSizeEventHandler(MainDialog::OnResize), nullptr, this); //Connect(wxEVT_MOVE, wxSizeEventHandler(MainDialog::OnResize), nullptr, this); @@ -760,7 +757,7 @@ MainDialog::~MainDialog() try //save "LastRun.ffs_gui" { - xmlAccess::writeConfig(getConfig(), toZ(lastRunConfigName())); //throw FfsXmlError + xmlAccess::writeConfig(getConfig(), lastRunConfigName()); //throw FfsXmlError } //don't annoy users on read-only drives: it's enough to show a single error message when saving global config catch (const xmlAccess::FfsXmlError&) {} @@ -781,7 +778,7 @@ void MainDialog::onQueryEndSession() try { xmlAccess::writeConfig(getGlobalCfgBeforeExit()); } catch (const xmlAccess::FfsXmlError&) {} //we try our best do to something useful in this extreme situation - no reason to notify or even log errors here! - try { xmlAccess::writeConfig(getConfig(), toZ(lastRunConfigName())); } + try { xmlAccess::writeConfig(getConfig(), lastRunConfigName()); } catch (const xmlAccess::FfsXmlError&) {} } @@ -818,11 +815,12 @@ void MainDialog::setGlobalCfgOnInit(const xmlAccess::XmlGlobalSettings& globalSe //-------------------------------------------------------------------------------- //load list of last used configuration files - std::vector<wxString> cfgFileNames = globalSettings.gui.cfgFileHistory; + std::vector<Zstring> cfgFileNames = globalSettings.gui.cfgFileHistory; std::reverse(cfgFileNames.begin(), cfgFileNames.end()); //list is stored with last used files first in xml, however addFileToCfgHistory() needs them last!!! cfgFileNames.push_back(lastRunConfigName()); //make sure <Last session> is always part of history list (if existing) addFileToCfgHistory(cfgFileNames); + removeObsoleteCfgHistoryItems(cfgFileNames); //remove non-existent items (we need this only on startup) //-------------------------------------------------------------------------------- //load list of last used folders @@ -849,6 +847,8 @@ void MainDialog::setGlobalCfgOnInit(const xmlAccess::XmlGlobalSettings& globalSe //if MainDialog::onQueryEndSession() is called while comparison is active, this panel is saved and restored as "visible" auiMgr.GetPane(compareStatus->getAsWindow()).Hide(); + m_menuItemCheckVersionAuto->Check(globalCfg.gui.lastUpdateCheck != -1); + auiMgr.Update(); } @@ -876,14 +876,14 @@ xmlAccess::XmlGlobalSettings MainDialog::getGlobalCfgBeforeExit() //-------------------------------------------------------------------------------- //write list of last used configuration files - std::map<int, wxString> historyDetail; //(cfg-file/last use index) + std::map<int, Zstring> historyDetail; //(cfg-file/last use index) for (unsigned int i = 0; i < m_listBoxHistory->GetCount(); ++i) if (auto clientString = dynamic_cast<const wxClientHistoryData*>(m_listBoxHistory->GetClientObject(i))) historyDetail.insert(std::make_pair(clientString->lastUseIndex_, clientString->cfgFile_)); //sort by last use; put most recent items *first* (looks better in xml than the reverse) - std::vector<wxString> history; - std::transform(historyDetail.rbegin(), historyDetail.rend(), std::back_inserter(history), [](const std::pair<int, wxString>& item) { return item.second; }); + std::vector<Zstring> history; + std::transform(historyDetail.rbegin(), historyDetail.rend(), std::back_inserter(history), [](const std::pair<int, Zstring>& item) { return item.second; }); if (history.size() > globalSettings.gui.cfgFileHistMax) //erase oldest elements history.resize(globalSettings.gui.cfgFileHistMax); @@ -952,7 +952,7 @@ namespace typedef Zbase<wchar_t> zxString; //guaranteed exponential growth } -void MainDialog::copySelectionToClipboard() +void MainDialog::copySelectionToClipboard(const std::vector<const Grid*>& gridRefs) { try { @@ -983,8 +983,8 @@ void MainDialog::copySelectionToClipboard() } }; - addSelection(*m_gridMainL); - addSelection(*m_gridMainR); + for (auto it = gridRefs.begin(); it != gridRefs.end(); ++it) + addSelection(**it); //finally write to clipboard if (!clipboardString.empty()) @@ -996,7 +996,7 @@ void MainDialog::copySelectionToClipboard() } catch (const std::bad_alloc& e) { - wxMessageBox(_("Out of memory!") + L" " + utfCvrtTo<std::wstring>(e.what()), _("Error"), wxOK | wxICON_ERROR); + wxMessageBox(_("Out of memory!") + L" " + utfCvrtTo<std::wstring>(e.what()), _("Error"), wxOK | wxICON_ERROR, this); } } @@ -1023,9 +1023,9 @@ std::vector<FileSystemObject*> MainDialog::getGridSelection(bool fromLeft, bool std::vector<FileSystemObject*> MainDialog::getTreeSelection() const { - const std::vector<size_t>& sel = m_gridNavi->getSelectedRows(); - std::vector<FileSystemObject*> output; + + const std::vector<size_t>& sel = m_gridNavi->getSelectedRows(); std::for_each(sel.begin(), sel.end(), [&](size_t row) { @@ -1042,12 +1042,7 @@ std::vector<FileSystemObject*> MainDialog::getTreeSelection() const else if (auto dir = dynamic_cast<const TreeView::DirNode*>(node.get())) output.push_back(&(dir->dirObj_)); else if (auto file = dynamic_cast<const TreeView::FilesNode*>(node.get())) - { - //does a "little more" than what is shown on main grid: we return ALL files - HierarchyObject& parent = file->firstFile_.parent(); - std::transform(parent.refSubFiles().begin(), parent.refSubFiles().end(), std::back_inserter(output), [](FileSystemObject& fsObj) { return &fsObj; }); - std::transform(parent.refSubLinks().begin(), parent.refSubLinks().end(), std::back_inserter(output), [](FileSystemObject& fsObj) { return &fsObj; }); - } + output.insert(output.end(), file->filesAndLinks_.begin(), file->filesAndLinks_.end()); } }); return output; @@ -1266,8 +1261,8 @@ void MainDialog::openExternalApplication(const wxString& commandline, const std: Zstring fallbackDir; if (selectionTmp.empty()) fallbackDir = leftSide ? - getFormattedDirectoryName(toZ(firstFolderPair->getLeftDir())) : - getFormattedDirectoryName(toZ(firstFolderPair->getRightDir())); + getFormattedDirectoryName(firstFolderPair->getLeftDir()) : + getFormattedDirectoryName(firstFolderPair->getRightDir()); else fallbackDir = leftSide ? @@ -1350,12 +1345,11 @@ void MainDialog::setStatusBarFileStatistics(size_t filesOnLeftView, setText(*m_staticTextStatusRightFiles, replaceCpy(_P("1 file", "%x files", filesOnRightView), L"%x", toGuiString(filesOnRightView), false)); setText(*m_staticTextStatusRightBytes, filesizeToShortString(to<Int64>(filesizeRightView))); - //fill middle text (considering flashStatusInformation()) - if (!oldStatusMsg) + if (oldStatusMsgs.empty()) setText(*m_staticTextStatusMiddle, statusMiddleNew); else - *oldStatusMsg = statusMiddleNew; + oldStatusMsgs.front() = statusMiddleNew; m_panelStatusBar->Layout(); } @@ -1379,36 +1373,42 @@ void MainDialog::setStatusBarFullText(const wxString& msg) void MainDialog::flashStatusInformation(const wxString& text) { - if (!oldStatusMsg) - oldStatusMsg = make_unique<wxString>(m_staticTextStatusMiddle->GetLabel()); + oldStatusMsgs.push_back(m_staticTextStatusMiddle->GetLabel()); - lastStatusChange = wxGetLocalTimeMillis(); m_staticTextStatusMiddle->SetLabel(text); m_staticTextStatusMiddle->SetForegroundColour(wxColour(31, 57, 226)); //highlight color: blue m_panelStatusBar->Layout(); - //if (needLayoutUpdate) auiMgr.Update(); -> not needed here, this is called anyway in updateGui() + + asyncTasks.add2([] { boost::this_thread::sleep(boost::posix_time::millisec(2500)); }, + [this] { this->restoreStatusInformation(); }); + startProcessingAsyncTasks(); } -void MainDialog::OnIdleEvent(wxEvent& event) +void MainDialog::restoreStatusInformation() { - //small routine to restore status information after some time - if (oldStatusMsg) //check if there is some work to do + if (!oldStatusMsgs.empty()) { - wxMilliClock_t currentTime = wxGetLocalTimeMillis(); - if (numeric::dist(currentTime, lastStatusChange) > 2500) //restore after two seconds - { - lastStatusChange = currentTime; + wxString oldMsg = oldStatusMsgs.back(); + oldStatusMsgs.pop_back(); - m_staticTextStatusMiddle->SetLabel(*oldStatusMsg); + if (oldStatusMsgs.empty()) //restore original status text + { + m_staticTextStatusMiddle->SetLabel(oldMsg); m_staticTextStatusMiddle->SetForegroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT)); //reset color m_panelStatusBar->Layout(); - oldStatusMsg.reset(); } } +} - event.Skip(); + +void MainDialog::onProcessAsyncTasks(wxEvent& event) +{ + //schedule and run long-running tasks asynchronously + asyncTasks.evalResults(); //process results on GUI queue + if (asyncTasks.empty()) + timerForAsyncTasks.Stop(); } @@ -1569,7 +1569,17 @@ void MainDialog::onTreeButtonEvent(wxKeyEvent& event) } if (event.ControlDown()) - ; + switch (keyCode) + { + case 'C': + case WXK_INSERT: //CTRL + C || CTRL + INS + { + std::vector<const Grid*> gridRefs; + gridRefs.push_back(m_gridNavi); + copySelectionToClipboard(gridRefs); + } + return; + } else if (event.AltDown()) switch (keyCode) { @@ -1646,8 +1656,13 @@ void MainDialog::onGridButtonEvent(wxKeyEvent& event, Grid& grid, bool leftSide) { case 'C': case WXK_INSERT: //CTRL + C || CTRL + INS - copySelectionToClipboard(); - return; // -> swallow event! don't allow default grid commands! + { + std::vector<const Grid*> gridRefs; + gridRefs.push_back(m_gridMainL); + gridRefs.push_back(m_gridMainR); + copySelectionToClipboard(gridRefs); + } + return; // -> swallow event! don't allow default grid commands! } else if (event.AltDown()) @@ -1813,7 +1828,11 @@ void MainDialog::onNaviSelection(GridRangeSelectEvent& event) leadRow = gridDataView->findRowFirstChild(&(dir->dirObj_)); } else if (const TreeView::FilesNode* files = dynamic_cast<const TreeView::FilesNode*>(node.get())) - leadRow = gridDataView->findRowDirect(files->firstFile_.getId()); + { + assert(!files->filesAndLinks_.empty()); + if (!files->filesAndLinks_.empty()) + leadRow = gridDataView->findRowDirect(files->filesAndLinks_[0]->getId()); + } } if (leadRow >= 0) @@ -1829,8 +1848,8 @@ void MainDialog::onNaviSelection(GridRangeSelectEvent& event) } //get selection on navigation tree and set corresponding markers on main grid - std::vector<const HierarchyObject*> markedFiles; //mark files/symlinks directly within a container - std::vector<const HierarchyObject*> markedContainer; //mark full container including child-objects + hash_set<const FileSystemObject*> markedFilesAndLinks; //mark files/symlinks directly + hash_set<const HierarchyObject*> markedContainer; //mark full container including child-objects const std::vector<size_t>& selection = m_gridNavi->getSelectedRows(); std::for_each(selection.begin(), selection.end(), @@ -1839,15 +1858,15 @@ void MainDialog::onNaviSelection(GridRangeSelectEvent& event) if (std::unique_ptr<TreeView::Node> node = treeDataView->getLine(row)) { if (const TreeView::RootNode* root = dynamic_cast<const TreeView::RootNode*>(node.get())) - markedContainer.push_back(&(root->baseMap_)); + markedContainer.insert(&(root->baseMap_)); else if (const TreeView::DirNode* dir = dynamic_cast<const TreeView::DirNode*>(node.get())) - markedContainer.push_back(&(dir->dirObj_)); + markedContainer.insert(&(dir->dirObj_)); else if (const TreeView::FilesNode* files = dynamic_cast<const TreeView::FilesNode*>(node.get())) - markedFiles.push_back(&(files->firstFile_.parent())); + markedFilesAndLinks.insert(files->filesAndLinks_.begin(), files->filesAndLinks_.end()); } }); - gridview::setNavigationMarker(*m_gridMainL, std::move(markedFiles), std::move(markedContainer)); + gridview::setNavigationMarker(*m_gridMainL, std::move(markedFilesAndLinks), std::move(markedContainer)); event.Skip(); } @@ -2068,11 +2087,11 @@ void MainDialog::excludeExtension(const Zstring& extension) //add to filter config Zstring& excludeFilter = currentCfg.mainCfg.globalFilter.excludeFilter; - if (!excludeFilter.empty() && !endsWith(excludeFilter, Zstr(";"))) + if (!excludeFilter.empty() && !endsWith(excludeFilter, Zstr(";")) && !endsWith(excludeFilter, Zstr("\n"))) excludeFilter += Zstr("\n"); excludeFilter += newExclude + Zstr(";"); //';' is appended to 'mark' that next exclude extension entry won't write to new line - updateFilterButtons(); + updateGlobalFilterButton(); //do not fully apply filter, just exclude new items std::for_each(begin(folderCmp), end(folderCmp), [&](BaseDirMapping& baseMap) { addHardFiltering(baseMap, newExclude); }); @@ -2093,7 +2112,7 @@ void MainDialog::excludeShortname(const FileSystemObject& fsObj) excludeFilter += Zstr("\n"); excludeFilter += newExclude; - updateFilterButtons(); + updateGlobalFilterButton(); //do not fully apply filter, just exclude new items std::for_each(begin(folderCmp), end(folderCmp), [&](BaseDirMapping& baseMap) { addHardFiltering(baseMap, newExclude); }); @@ -2127,7 +2146,7 @@ void MainDialog::excludeItems(const std::vector<FileSystemObject*>& selection) excludeFilter += Zstr("\n"); excludeFilter += newExclude; - updateFilterButtons(); + updateGlobalFilterButton(); //do not fully apply filter, just exclude new items std::for_each(begin(folderCmp), end(folderCmp), [&](BaseDirMapping& baseMap) { addHardFiltering(baseMap, newExclude); }); @@ -2305,9 +2324,9 @@ void MainDialog::OnSyncSettingsContext(wxMouseEvent& event) const auto currentVar = getConfig().mainCfg.syncCfg.directionCfg.var; menu.addRadio(_("<- Two way ->"), [&] { setVariant(DirectionConfig::AUTOMATIC); }, currentVar == DirectionConfig::AUTOMATIC); - menu.addRadio(_("Mirror ->>") , [&] { setVariant(DirectionConfig::MIRROR); }, currentVar == DirectionConfig::MIRROR); - menu.addRadio(_("Update ->") , [&] { setVariant(DirectionConfig::UPDATE); }, currentVar == DirectionConfig::UPDATE); - menu.addRadio(_("Custom") , [&] { setVariant(DirectionConfig::CUSTOM); }, currentVar == DirectionConfig::CUSTOM); + menu.addRadio(_("Mirror ->>") , [&] { setVariant(DirectionConfig::MIRROR); }, currentVar == DirectionConfig::MIRROR); + menu.addRadio(_("Update ->") , [&] { setVariant(DirectionConfig::UPDATE); }, currentVar == DirectionConfig::UPDATE); + menu.addRadio(_("Custom") , [&] { setVariant(DirectionConfig::CUSTOM); }, currentVar == DirectionConfig::CUSTOM); menu.popup(*this); } @@ -2315,7 +2334,7 @@ void MainDialog::OnSyncSettingsContext(wxMouseEvent& event) void MainDialog::onNaviPanelFilesDropped(FileDropEvent& event) { - loadConfiguration(event.getFiles()); + loadConfiguration(toZ(event.getFiles())); event.Skip(); } @@ -2335,31 +2354,17 @@ void MainDialog::onDirManualCorrection(wxCommandEvent& event) } -wxString getFormattedHistoryElement(const wxString& filename) +wxString getFormattedHistoryElement(const Zstring& filename) { - wxString output = afterLast(filename, utfCvrtTo<wxString>(FILE_NAME_SEPARATOR)); - if (endsWith(output, L".ffs_gui")) - output = beforeLast(output, L'.'); - return output; + Zstring output = afterLast(filename, FILE_NAME_SEPARATOR); + if (endsWith(output, Zstr(".ffs_gui"))) + output = beforeLast(output, Zstr('.')); + return utfCvrtTo<wxString>(output); } -void MainDialog::addFileToCfgHistory(const std::vector<wxString>& filenames) +void MainDialog::addFileToCfgHistory(const std::vector<Zstring>& filenames) { - //check existence of all config files in parallel! - std::list<boost::unique_future<bool>> fileEx; - std::for_each(filenames.begin(), filenames.end(), - [&](const wxString& filename) - { - const Zstring file = toZ(filename); //convert to Zstring first: we don't want to pass wxString by value and risk MT issues! - fileEx.push_back(zen::async2<bool>([=]() { return zen::fileExists(file); })); - }); - - //potentially slow network access: give all checks 500ms to finish - wait_for_all_timed(fileEx.begin(), fileEx.end(), boost::posix_time::milliseconds(500)); - - //------------------------------------------------------------------------------------------ - //determine highest "last use" index number of m_listBoxHistory int lastUseIndexMax = 0; for (int i = 0; i < static_cast<int>(m_listBoxHistory->GetCount()); ++i) @@ -2369,39 +2374,36 @@ void MainDialog::addFileToCfgHistory(const std::vector<wxString>& filenames) std::deque<bool> selections(m_listBoxHistory->GetCount()); //items to select after update of history list - auto futIter = fileEx.begin(); - for (auto it = filenames.begin(); it != filenames.end(); ++it, ++futIter) - if (!futIter->is_ready() || futIter->get()) //only existing files should be included in the list (and also those with no result yet) - { - const wxString& filename = *it; + for (auto it = filenames.begin(); it != filenames.end(); ++it) + { + const Zstring& filename = *it; - warn_static("perf!!!!? samePhysicalFile : andere setllen?") + //Do we need to additionally check for aliases of the same physical files here? (and aliases for lastRunConfigName?) - auto findItem = [&]() -> int - { - const int itemCount = static_cast<int>(m_listBoxHistory->GetCount()); - for (int i = 0; i < itemCount; ++i) - if (auto histData = dynamic_cast<const wxClientHistoryData*>(m_listBoxHistory->GetClientObject(i))) - if (samePhysicalFile(toZ(filename), toZ(histData->cfgFile_))) - return i; - return -1; - }; - - const int itemPos = findItem(); - if (itemPos >= 0) //update - { - if (auto histData = dynamic_cast<wxClientHistoryData*>(m_listBoxHistory->GetClientObject(itemPos))) - histData->lastUseIndex_ = ++lastUseIndexMax; - selections[itemPos] = true; - } - else //insert - { - const wxString label = samePhysicalFile(toZ(lastRunConfigName()), toZ(filename)) ? //give default config file a different name - _("<Last session>") : getFormattedHistoryElement(filename); - const int newPos = m_listBoxHistory->Append(label, new wxClientHistoryData(filename, ++lastUseIndexMax)); //*insert* into sorted list - selections.insert(selections.begin() + newPos, true); - } + const int itemPos = [&]() -> int + { + const int itemCount = static_cast<int>(m_listBoxHistory->GetCount()); + for (int i = 0; i < itemCount; ++i) + if (auto histData = dynamic_cast<const wxClientHistoryData*>(m_listBoxHistory->GetClientObject(i))) + if (EqualFilename()(filename, histData->cfgFile_)) + return i; + return -1; + }(); + + if (itemPos >= 0) //update + { + if (auto histData = dynamic_cast<wxClientHistoryData*>(m_listBoxHistory->GetClientObject(itemPos))) + histData->lastUseIndex_ = ++lastUseIndexMax; + selections[itemPos] = true; } + else //insert + { + const wxString label = EqualFilename()(filename, lastRunConfigName()) ? //give default config file a different name + _("<Last session>") : getFormattedHistoryElement(filename); + const int newPos = m_listBoxHistory->Append(label, new wxClientHistoryData(filename, ++lastUseIndexMax)); //*insert* into sorted list + selections.insert(selections.begin() + newPos, true); + } + } assert(selections.size() == m_listBoxHistory->GetCount()); @@ -2418,9 +2420,61 @@ void MainDialog::addFileToCfgHistory(const std::vector<wxString>& filenames) } +void MainDialog::removeObsoleteCfgHistoryItems(const std::vector<Zstring>& filenames) +{ + //don't use wxString: NOT thread-safe! (e.g. non-atomic ref-count) + + auto getMissingFilesAsync = [filenames]() -> std::vector<Zstring> + { + //boost::this_thread::sleep(boost::posix_time::millisec(5000)); + + //check existence of all config files in parallel! + std::list<boost::unique_future<bool>> fileEx; + + for (auto it = filenames.begin(); it != filenames.end(); ++it) //avoid VC11 compiler issues with std::for_each + { + const Zstring filename = *it; //don't reference iterator in lambda! + fileEx.push_back(zen::async2<bool>([=] { return fileExists(filename); })); + } + + //potentially slow network access => limit maximum wait time! + wait_for_all_timed(fileEx.begin(), fileEx.end(), boost::posix_time::milliseconds(1000)); + + std::vector<Zstring> missingFiles; + + auto itFut = fileEx.begin(); + for (auto it = filenames.begin(); it != filenames.end(); ++it, ++itFut) + if (itFut->is_ready() && !itFut->get()) //remove only files that are confirmed to be non-existent + missingFiles.push_back(*it); + + return missingFiles; + }; + + asyncTasks.add(getMissingFilesAsync, + [this](const std::vector<Zstring>& files) { removeCfgHistoryItems(files); }); + startProcessingAsyncTasks(); +} + + +void MainDialog::removeCfgHistoryItems(const std::vector<Zstring>& filenames) +{ + std::for_each(filenames.begin(), filenames.end(), [&](const Zstring& filename) + { + const int histSize = m_listBoxHistory->GetCount(); + for (int i = 0; i < histSize; ++i) + if (auto histData = dynamic_cast<wxClientHistoryData*>(m_listBoxHistory->GetClientObject(i))) + if (EqualFilename()(filename, histData->cfgFile_)) + { + m_listBoxHistory->Delete(i); + break; + } + }); +} + + void MainDialog::updateUnsavedCfgStatus() { - const wxString activeCfgFilename = activeConfigFiles.size() == 1 && activeConfigFiles[0] != lastRunConfigName() ? activeConfigFiles[0] : wxString(); + const Zstring activeCfgFilename = activeConfigFiles.size() == 1 && activeConfigFiles[0] != lastRunConfigName() ? activeConfigFiles[0] : Zstring(); const bool haveUnsavedCfg = lastConfigurationSaved != getConfig(); @@ -2446,15 +2500,15 @@ void MainDialog::updateUnsavedCfgStatus() title += L'*'; if (!activeCfgFilename.empty()) - title += activeCfgFilename; + title += toWx(activeCfgFilename); else if (activeConfigFiles.size() > 1) { #ifdef _MSC_VER #pragma warning(disable:4428) // VC wrongly issues warning C4428: universal-character-name encountered in source #endif const wchar_t* EM_DASH = L" \u2014 "; - title += xmlAccess::extractJobName(toZ(activeConfigFiles[0])); - std::for_each(activeConfigFiles.begin() + 1, activeConfigFiles.end(), [&](const wxString& filename) { title += EM_DASH + xmlAccess::extractJobName(toZ(filename)); }); + title += xmlAccess::extractJobName(activeConfigFiles[0]); + std::for_each(activeConfigFiles.begin() + 1, activeConfigFiles.end(), [&](const Zstring& filename) { title += EM_DASH + xmlAccess::extractJobName(filename); }); } else title += L"FreeFileSync - " + _("Folder Comparison and Synchronization"); @@ -2465,7 +2519,7 @@ void MainDialog::updateUnsavedCfgStatus() void MainDialog::OnConfigSave(wxCommandEvent& event) { - const wxString activeCfgFilename = activeConfigFiles.size() == 1 && activeConfigFiles[0] != lastRunConfigName() ? activeConfigFiles[0] : wxString(); + const Zstring activeCfgFilename = activeConfigFiles.size() == 1 && activeConfigFiles[0] != lastRunConfigName() ? activeConfigFiles[0] : Zstring(); //if we work on a single named configuration document: save directly if changed //else: always show file dialog @@ -2473,7 +2527,7 @@ void MainDialog::OnConfigSave(wxCommandEvent& event) { using namespace xmlAccess; - switch (getXmlType(utfCvrtTo<Zstring>(activeCfgFilename))) //throw() + switch (getXmlType(activeCfgFilename)) //throw() { case XML_TYPE_GUI: trySaveConfig(&activeCfgFilename); @@ -2504,18 +2558,18 @@ void MainDialog::OnSaveAsBatchJob(wxCommandEvent& event) } -bool MainDialog::trySaveConfig(const wxString* fileNameGui) //return true if saved successfully +bool MainDialog::trySaveConfig(const Zstring* fileNameGui) //return true if saved successfully { - wxString targetFilename; + Zstring targetFilename; if (fileNameGui) { targetFilename = *fileNameGui; - assert(endsWith(targetFilename, L".ffs_gui")); + assert(endsWith(targetFilename, Zstr(".ffs_gui"))); } else { - wxString defaultFileName = activeConfigFiles.size() == 1 && activeConfigFiles[0] != lastRunConfigName() ? activeConfigFiles[0] : L"SyncSettings.ffs_gui"; + wxString defaultFileName = activeConfigFiles.size() == 1 && activeConfigFiles[0] != lastRunConfigName() ? toWx(activeConfigFiles[0]) : L"SyncSettings.ffs_gui"; //attention: activeConfigFiles may be an imported *.ffs_batch file! We don't want to overwrite it with a GUI config! if (endsWith(defaultFileName, L".ffs_batch")) replace(defaultFileName, L".ffs_batch", L".ffs_gui", false); @@ -2528,14 +2582,14 @@ bool MainDialog::trySaveConfig(const wxString* fileNameGui) //return true if sav wxFD_SAVE | wxFD_OVERWRITE_PROMPT); if (filePicker.ShowModal() != wxID_OK) return false; - targetFilename = filePicker.GetPath(); + targetFilename = toZ(filePicker.GetPath()); } const xmlAccess::XmlGuiConfig guiCfg = getConfig(); try { - xmlAccess::writeConfig(guiCfg, toZ(targetFilename)); //throw FfsXmlError + xmlAccess::writeConfig(guiCfg, targetFilename); //throw FfsXmlError setLastUsedConfig(targetFilename, guiCfg); flashStatusInformation(_("Configuration saved!")); @@ -2549,25 +2603,25 @@ bool MainDialog::trySaveConfig(const wxString* fileNameGui) //return true if sav } -bool MainDialog::trySaveBatchConfig(const wxString* fileNameBatch) +bool MainDialog::trySaveBatchConfig(const Zstring* fileNameBatch) { //essentially behave like trySaveConfig(): the collateral damage of not saving GUI-only settings "hideExcludedItems, showSyncAction" is negliable const xmlAccess::XmlGuiConfig guiCfg = getConfig(); - wxString targetFilename; + Zstring targetFilename; xmlAccess::XmlBatchConfig batchCfg; if (fileNameBatch) { targetFilename = *fileNameBatch; - batchCfg = convertGuiToBatchPreservingExistingBatch(guiCfg, toZ(*fileNameBatch)); - assert(endsWith(targetFilename, L".ffs_batch")); + batchCfg = convertGuiToBatchPreservingExistingBatch(guiCfg, *fileNameBatch); + assert(endsWith(targetFilename, Zstr(".ffs_batch"))); } else { - const wxString activeCfgFilename = activeConfigFiles.size() == 1 && activeConfigFiles[0] != lastRunConfigName() ? activeConfigFiles[0] : wxString(); - batchCfg = convertGuiToBatchPreservingExistingBatch(guiCfg, toZ(activeCfgFilename)); + const Zstring activeCfgFilename = activeConfigFiles.size() == 1 && activeConfigFiles[0] != lastRunConfigName() ? activeConfigFiles[0] : Zstring(); + batchCfg = convertGuiToBatchPreservingExistingBatch(guiCfg, activeCfgFilename); //let user change batch config: this should change batch-exclusive settings only, else the "setLastUsedConfig" below would be somewhat of a lie if (!customizeBatchConfig(this, @@ -2576,7 +2630,7 @@ bool MainDialog::trySaveBatchConfig(const wxString* fileNameBatch) globalCfg.gui.onCompletionHistoryMax)) return false; - wxString defaultFileName = !activeCfgFilename.empty() ? activeCfgFilename : L"BatchRun.ffs_batch"; + wxString defaultFileName = !activeCfgFilename.empty() ? toWx(activeCfgFilename) : L"BatchRun.ffs_batch"; //attention: activeConfigFiles may be a *.ffs_gui file! We don't want to overwrite it with a BATCH config! if (endsWith(defaultFileName, L".ffs_gui")) replace(defaultFileName, L".ffs_gui", L".ffs_batch"); @@ -2589,12 +2643,12 @@ bool MainDialog::trySaveBatchConfig(const wxString* fileNameBatch) wxFD_SAVE | wxFD_OVERWRITE_PROMPT); if (filePicker.ShowModal() != wxID_OK) return false; - targetFilename = filePicker.GetPath(); + targetFilename = toZ(filePicker.GetPath()); } try { - xmlAccess::writeConfig(batchCfg, toZ(targetFilename)); //throw FfsXmlError + xmlAccess::writeConfig(batchCfg, targetFilename); //throw FfsXmlError setLastUsedConfig(targetFilename, guiCfg); //[!] behave as if we had saved guiCfg flashStatusInformation(_("Configuration saved!")); @@ -2612,7 +2666,7 @@ bool MainDialog::saveOldConfig() //return false on user abort { if (lastConfigurationSaved != getConfig()) { - const wxString activeCfgFilename = activeConfigFiles.size() == 1 && activeConfigFiles[0] != lastRunConfigName() ? activeConfigFiles[0] : wxString(); + const Zstring activeCfgFilename = activeConfigFiles.size() == 1 && activeConfigFiles[0] != lastRunConfigName() ? activeConfigFiles[0] : Zstring(); //notify user about changed settings if (globalCfg.optDialogs.popupOnConfigChange) @@ -2623,8 +2677,8 @@ bool MainDialog::saveOldConfig() //return false on user abort switch (showQuestionDlg(this, ReturnQuestionDlg::BUTTON_YES | ReturnQuestionDlg::BUTTON_NO | ReturnQuestionDlg::BUTTON_CANCEL, - replaceCpy(_("Do you want to save changes to %x?"), L"%x", fmtFileName(afterLast(utfCvrtTo<Zstring>(activeCfgFilename), FILE_NAME_SEPARATOR))), - QuestConfig().setCaption(activeCfgFilename). + replaceCpy(_("Do you want to save changes to %x?"), L"%x", fmtFileName(afterLast(activeCfgFilename, FILE_NAME_SEPARATOR))), + QuestConfig().setCaption(toWx(activeCfgFilename)). setLabelYes(_("&Save")). setLabelNo(_("Do&n't save")). showCheckBox(neverSave, _("Never save changes")))) @@ -2632,7 +2686,7 @@ bool MainDialog::saveOldConfig() //return false on user abort case ReturnQuestionDlg::BUTTON_YES: using namespace xmlAccess; - switch (getXmlType(utfCvrtTo<Zstring>(activeCfgFilename))) //throw() + switch (getXmlType(activeCfgFilename)) //throw() { case XML_TYPE_GUI: return trySaveConfig(&activeCfgFilename); @@ -2654,7 +2708,7 @@ bool MainDialog::saveOldConfig() //return false on user abort } //discard current reference file(s), this ensures next app start will load <last session> instead of the original non-modified config selection - setLastUsedConfig(std::vector<wxString>(), lastConfigurationSaved); + setLastUsedConfig(std::vector<Zstring>(), lastConfigurationSaved); //this seems to make theoretical sense also: the job of this function is to make sure current (volatile) config and reference file name are in sync // => if user does not save cfg, it is not attached to a physical file names anymore! } @@ -2664,11 +2718,11 @@ bool MainDialog::saveOldConfig() //return false on user abort void MainDialog::OnConfigLoad(wxCommandEvent& event) { - const wxString activeCfgFilename = activeConfigFiles.size() == 1 && activeConfigFiles[0] != lastRunConfigName() ? activeConfigFiles[0] : wxString(); + const Zstring activeCfgFilename = activeConfigFiles.size() == 1 && activeConfigFiles[0] != lastRunConfigName() ? activeConfigFiles[0] : Zstring(); wxFileDialog filePicker(this, wxEmptyString, - beforeLast(activeCfgFilename, utfCvrtTo<wxString>(FILE_NAME_SEPARATOR)), //set default dir: empty string if "activeConfigFiles" is empty or has no path separator + toWx(beforeLast(activeCfgFilename, FILE_NAME_SEPARATOR)), //set default dir: empty string if "activeConfigFiles" is empty or has no path separator wxEmptyString, wxString(L"FreeFileSync (*.ffs_gui;*.ffs_batch)|*.ffs_gui;*.ffs_batch") + L"|" +_("All files") + L" (*.*)|*", wxFD_OPEN | wxFD_MULTIPLE); @@ -2677,9 +2731,9 @@ void MainDialog::OnConfigLoad(wxCommandEvent& event) { wxArrayString tmp; filePicker.GetPaths(tmp); - std::vector<wxString> fileNames(tmp.begin(), tmp.end()); + std::vector<wxString> filenames(tmp.begin(), tmp.end()); - loadConfiguration(fileNames); + loadConfiguration(toZ(filenames)); } } @@ -2689,7 +2743,16 @@ void MainDialog::OnConfigNew(wxCommandEvent& event) if (!saveOldConfig()) //notify user about changed settings return; - setConfig(xmlAccess::XmlGuiConfig(), std::vector<wxString>()); + xmlAccess::XmlGuiConfig newConfig; + + //add default exclusion filter: this is only ever relevant when creating new configurations! + //a default XmlGuiConfig does not need these user-specific exclusions! + Zstring& excludeFilter = newConfig.mainCfg.globalFilter.excludeFilter; + if (!excludeFilter.empty() && !endsWith(excludeFilter, Zstr("\n"))) + excludeFilter += Zstr("\n"); + excludeFilter += globalCfg.gui.defaultExclusionFilter; + + setConfig(newConfig, std::vector<Zstring>()); } @@ -2698,7 +2761,7 @@ void MainDialog::OnLoadFromHistory(wxCommandEvent& event) wxArrayInt selections; m_listBoxHistory->GetSelections(selections); - std::vector<wxString> filenames; + std::vector<Zstring> filenames; std::for_each(selections.begin(), selections.end(), [&](int pos) { @@ -2709,7 +2772,7 @@ void MainDialog::OnLoadFromHistory(wxCommandEvent& event) if (!filenames.empty()) loadConfiguration(filenames); - //user changed m_listBoxHistory selection so it's this method's responsibility to synchronize with activeConfigFiles + //user changed m_listBoxHistory selection so it's this method's responsibility to synchronize with activeConfigFiles: //- if user cancelled saving old config //- there's an error loading new config //- filenames is empty and user tried to unselect the current config @@ -2722,9 +2785,8 @@ void MainDialog::OnLoadFromHistoryDoubleClick(wxCommandEvent& event) wxArrayInt selections; m_listBoxHistory->GetSelections(selections); - std::vector<wxString> filenames; - std::for_each(selections.begin(), selections.end(), - [&](int pos) + std::vector<Zstring> filenames; + std::for_each(selections.begin(), selections.end(), [&](int pos) { if (auto histData = dynamic_cast<const wxClientHistoryData*>(m_listBoxHistory->GetClientObject(pos))) filenames.push_back(histData->cfgFile_); @@ -2744,7 +2806,7 @@ void MainDialog::OnLoadFromHistoryDoubleClick(wxCommandEvent& event) } -bool MainDialog::loadConfiguration(const std::vector<wxString>& filenames) +bool MainDialog::loadConfiguration(const std::vector<Zstring>& filenames) { if (filenames.empty()) return true; @@ -2757,7 +2819,7 @@ bool MainDialog::loadConfiguration(const std::vector<wxString>& filenames) try { //allow reading batch configurations also - xmlAccess::readAnyConfig(toZ(filenames), newGuiCfg); //throw FfsXmlError + xmlAccess::readAnyConfig(filenames, newGuiCfg); //throw FfsXmlError setConfig(newGuiCfg, filenames); //flashStatusInformation(_("Configuration loaded!")); -> irrelevant!? @@ -2783,14 +2845,8 @@ void MainDialog::deleteSelectedCfgHistoryItems() m_listBoxHistory->GetSelections(tmp); std::set<int> selections(tmp.begin(), tmp.end()); //sort ascending! - - int shift = 0; - std::for_each(selections.begin(), selections.end(), - [&](int pos) - { - m_listBoxHistory->Delete(pos + shift); - --shift; - }); + //delete starting with high positions: + std::for_each(selections.rbegin(), selections.rend(), [&](int pos) { m_listBoxHistory->Delete(pos); }); //set active selection on next element to allow "batch-deletion" by holding down DEL key if (!selections.empty() && m_listBoxHistory->GetCount() > 0) @@ -2876,15 +2932,15 @@ void MainDialog::onSetSyncDirection(SyncDirectionEvent& event) } -void MainDialog::setLastUsedConfig(const wxString& filename, const xmlAccess::XmlGuiConfig& guiConfig) +void MainDialog::setLastUsedConfig(const Zstring& filename, const xmlAccess::XmlGuiConfig& guiConfig) { - std::vector<wxString> filenames; + std::vector<Zstring> filenames; filenames.push_back(filename); setLastUsedConfig(filenames, guiConfig); } -void MainDialog::setLastUsedConfig(const std::vector<wxString>& filenames, +void MainDialog::setLastUsedConfig(const std::vector<Zstring>& filenames, const xmlAccess::XmlGuiConfig& guiConfig) { activeConfigFiles = filenames; @@ -2896,7 +2952,7 @@ void MainDialog::setLastUsedConfig(const std::vector<wxString>& filenames, } -void MainDialog::setConfig(const xmlAccess::XmlGuiConfig& newGuiCfg, const std::vector<wxString>& referenceFiles) +void MainDialog::setConfig(const xmlAccess::XmlGuiConfig& newGuiCfg, const std::vector<Zstring>& referenceFiles) { currentCfg = newGuiCfg; @@ -2905,11 +2961,11 @@ void MainDialog::setConfig(const xmlAccess::XmlGuiConfig& newGuiCfg, const std:: //(re-)set view filter buttons setViewFilterDefault(); - updateFilterButtons(); + updateGlobalFilterButton(); //set first folder pair - firstFolderPair->setValues(toWx(currentCfg.mainCfg.firstPair.leftDirectory), - toWx(currentCfg.mainCfg.firstPair.rightDirectory), + firstFolderPair->setValues(currentCfg.mainCfg.firstPair.leftDirectory, + currentCfg.mainCfg.firstPair.rightDirectory, currentCfg.mainCfg.firstPair.altCmpConfig, currentCfg.mainCfg.firstPair.altSyncConfig, currentCfg.mainCfg.firstPair.localFilter); @@ -2946,8 +3002,8 @@ void MainDialog::setConfig(const xmlAccess::XmlGuiConfig& newGuiCfg, const std:: inline FolderPairEnh getEnhancedPair(const DirectoryPair* panel) { - return FolderPairEnh(toZ(panel->getLeftDir()), - toZ(panel->getRightDir()), + return FolderPairEnh(panel->getLeftDir(), + panel->getRightDir(), panel->getAltCompConfig(), panel->getAltSyncConfig(), panel->getAltFilterConfig()); @@ -2961,8 +3017,8 @@ xmlAccess::XmlGuiConfig MainDialog::getConfig() const //load settings whose ownership lies not in currentCfg: //first folder pair - guiCfg.mainCfg.firstPair = FolderPairEnh(toZ(firstFolderPair->getLeftDir()), - toZ(firstFolderPair->getRightDir()), + guiCfg.mainCfg.firstPair = FolderPairEnh(firstFolderPair->getLeftDir(), + firstFolderPair->getRightDir(), firstFolderPair->getAltCompConfig(), firstFolderPair->getAltSyncConfig(), firstFolderPair->getAltFilterConfig()); @@ -2979,9 +3035,9 @@ xmlAccess::XmlGuiConfig MainDialog::getConfig() const } -const wxString& MainDialog::lastRunConfigName() +const Zstring& MainDialog::lastRunConfigName() { - static wxString instance = toWx(zen::getConfigDir()) + L"LastRun.ffs_gui"; + static Zstring instance = zen::getConfigDir() + Zstr("LastRun.ffs_gui"); return instance; } @@ -3021,7 +3077,7 @@ void MainDialog::OnConfigureFilter(wxCommandEvent& event) true, //is main filter dialog currentCfg.mainCfg.globalFilter) == ReturnSmallDlg::BUTTON_OKAY) { - updateFilterButtons(); //refresh global filter icon + updateGlobalFilterButton(); //refresh global filter icon applyFilterConfig(); //re-apply filter } @@ -3031,17 +3087,28 @@ void MainDialog::OnConfigureFilter(wxCommandEvent& event) void MainDialog::OnGlobalFilterContext(wxMouseEvent& event) { - ContextMenu menu; - auto clearFilter = [&] { currentCfg.mainCfg.globalFilter = FilterConfig(); - - updateFilterButtons(); //refresh global filter icon + updateGlobalFilterButton(); //refresh global filter icon applyFilterConfig(); //re-apply filter }; - menu.addItem( _("Clear filter settings"), clearFilter, nullptr, !isNullFilter(currentCfg.mainCfg.globalFilter)); + auto copyFilter = [&] { filterCfgOnClipboard = make_unique<FilterConfig>(currentCfg.mainCfg.globalFilter); }; + auto pasteFilter = [&] + { + if (filterCfgOnClipboard) + { + currentCfg.mainCfg.globalFilter = *filterCfgOnClipboard; + updateGlobalFilterButton(); //refresh global filter icon + applyFilterConfig(); //re-apply filter + } + }; + ContextMenu menu; + menu.addItem( _("Clear filter settings"), clearFilter, nullptr, !isNullFilter(currentCfg.mainCfg.globalFilter)); + menu.addSeparator(); + menu.addItem( _("Copy"), copyFilter, nullptr, !isNullFilter(currentCfg.mainCfg.globalFilter)); + menu.addItem( _("Paste"), pasteFilter, nullptr, filterCfgOnClipboard.get() != nullptr); menu.popup(*this); } @@ -3063,8 +3130,7 @@ wxBitmap buttonPressed(const std::string& name) { wxBitmap background = getResourceImage(L"buttonPressed"); return mirrorIfRtl( - layOver( - getResourceImage(utfCvrtTo<wxString>(name)), background)); + layOver(getResourceImage(utfCvrtTo<wxString>(name)), background)); } @@ -3084,73 +3150,59 @@ void MainDialog::initViewFilterButtons() //compare result buttons m_bpButtonShowLeftOnly->init(buttonPressed("leftOnly"), buttonReleased("leftOnly"), - _("Hide files that exist on left side only"), _("Show files that exist on left side only")); m_bpButtonShowRightOnly->init(buttonPressed("rightOnly"), buttonReleased("rightOnly"), - _("Hide files that exist on right side only"), _("Show files that exist on right side only")); m_bpButtonShowLeftNewer->init(buttonPressed("leftNewer"), buttonReleased("leftNewer"), - _("Hide files that are newer on left"), _("Show files that are newer on left")); m_bpButtonShowRightNewer->init(buttonPressed("rightNewer"), buttonReleased("rightNewer"), - _("Hide files that are newer on right"), _("Show files that are newer on right")); m_bpButtonShowEqual->init(buttonPressed("equal"), buttonReleased("equal"), - _("Hide files that are equal"), _("Show files that are equal")); m_bpButtonShowDifferent->init(buttonPressed("different"), buttonReleased("different"), - _("Hide files that are different"), _("Show files that are different")); m_bpButtonShowConflict->init(buttonPressed("conflict"), buttonReleased("conflict"), - _("Hide conflicts"), _("Show conflicts")); //sync preview buttons m_bpButtonShowCreateLeft->init(buttonPressed("createLeft"), buttonReleased("createLeft"), - _("Hide files that will be created on the left side"), _("Show files that will be created on the left side")); m_bpButtonShowCreateRight->init(buttonPressed("createRight"), buttonReleased("createRight"), - _("Hide files that will be created on the right side"), _("Show files that will be created on the right side")); m_bpButtonShowDeleteLeft->init(buttonPressed("deleteLeft"), buttonReleased("deleteLeft"), - _("Hide files that will be deleted on the left side"), _("Show files that will be deleted on the left side")); m_bpButtonShowDeleteRight->init(buttonPressed("deleteRight"), buttonReleased("deleteRight"), - _("Hide files that will be deleted on the right side"), _("Show files that will be deleted on the right side")); m_bpButtonShowUpdateLeft->init(buttonPressed("updateLeft"), buttonReleased("updateLeft"), - _("Hide files that will be overwritten on left side"), _("Show files that will be overwritten on left side")); m_bpButtonShowUpdateRight->init(buttonPressed("updateRight"), buttonReleased("updateRight"), - _("Hide files that will be overwritten on right side"), _("Show files that will be overwritten on right side")); m_bpButtonShowDoNothing->init(buttonPressed("none"), buttonReleased("none"), - _("Hide files that won't be copied"), _("Show files that won't be copied")); } @@ -3212,7 +3264,7 @@ void MainDialog::OnViewButtonRightClick(wxMouseEvent& event) } -void MainDialog::updateFilterButtons() +void MainDialog::updateGlobalFilterButton() { //global filter: test for Null-filter if (!isNullFilter(currentCfg.mainCfg.globalFilter)) @@ -3225,12 +3277,6 @@ void MainDialog::updateFilterButtons() setImage(*m_bpButtonFilter, greyScale(getResourceImage(L"filter"))); m_bpButtonFilter->SetToolTip(_("No filter selected")); } - - //update local filter buttons - firstFolderPair->refreshButtons(); - - std::for_each(additionalFolderPairs.begin(), additionalFolderPairs.end(), - [&](DirectoryPair* dirPair) { dirPair->refreshButtons(); }); } @@ -3261,24 +3307,15 @@ void MainDialog::OnCompare(wxCommandEvent& event) const std::vector<zen::FolderPairCfg> cmpConfig = zen::extractCompareCfg(getConfig().mainCfg); //GUI mode: place directory locks on directories isolated(!) during both comparison and synchronization - std::unique_ptr<LockHolder> dummy2; - if (globalCfg.createLockFile) - { - std::vector<Zstring> dirnames; - std::for_each(cmpConfig.begin(), cmpConfig.end(), - [&](const FolderPairCfg& fpCfg) - { - dirnames.push_back(fpCfg.leftDirectoryFmt); - dirnames.push_back(fpCfg.rightDirectoryFmt); - }); - dummy2 = make_unique<LockHolder>(dirnames, statusHandler, true); //allow pw prompt - } + std::unique_ptr<LockHolder> dirLocks; //COMPARE DIRECTORIES compare(globalCfg.fileTimeTolerance, globalCfg.optDialogs, true, //allow pw prompt globalCfg.runWithBackgroundPriority, + globalCfg.createLockFile, + dirLocks, cmpConfig, folderCmp, statusHandler); //throw GuiAbortProcess @@ -3300,12 +3337,12 @@ void MainDialog::OnCompare(wxCommandEvent& event) m_gridNavi->clearSelection(); //play (optional) sound notification after sync has completed (GUI and batch mode) - const wxString soundFile = toWx(zen::getResourceDir()) + L"Compare_Complete.wav"; - if (fileExists(toZ(soundFile))) - wxSound::Play(soundFile, wxSOUND_ASYNC); + const Zstring soundFile = zen::getResourceDir() + Zstr("Compare_Complete.wav"); + if (fileExists(soundFile)) + wxSound::Play(toWx(soundFile), wxSOUND_ASYNC); //add to folder history after successful comparison only - folderHistoryLeft ->addItem(toZ(m_directoryLeft->GetValue())); + folderHistoryLeft ->addItem(toZ(m_directoryLeft ->GetValue())); folderHistoryRight->addItem(toZ(m_directoryRight->GetValue())); //prepare status information @@ -3474,7 +3511,7 @@ void MainDialog::OnStartSync(wxCommandEvent& event) try { //PERF_START; - const wxString activeCfgFilename = activeConfigFiles.size() == 1 && activeConfigFiles[0] != lastRunConfigName() ? activeConfigFiles[0] : wxString(); + const Zstring activeCfgFilename = activeConfigFiles.size() == 1 && activeConfigFiles[0] != lastRunConfigName() ? activeConfigFiles[0] : Zstring(); const auto& guiCfg = getConfig(); @@ -3482,21 +3519,23 @@ void MainDialog::OnStartSync(wxCommandEvent& event) SyncStatusHandler statusHandler(this, //throw GuiAbortProcess globalCfg.lastSyncsLogFileSizeMax, currentCfg.handleError, - xmlAccess::extractJobName(utfCvrtTo<Zstring>(activeCfgFilename)), + xmlAccess::extractJobName(activeCfgFilename), guiCfg.mainCfg.onCompletion, globalCfg.gui.onCompletionHistory); //GUI mode: place directory locks on directories isolated(!) during both comparison and synchronization - std::unique_ptr<LockHolder> dummy2; + std::unique_ptr<LockHolder> dirLocks; if (globalCfg.createLockFile) { - std::vector<Zstring> dirnames; + std::set<Zstring, LessFilename> dirnamesExisting; for (auto it = begin(folderCmp); it != end(folderCmp); ++it) { - dirnames.push_back(it->getBaseDirPf<LEFT_SIDE >()); - dirnames.push_back(it->getBaseDirPf<RIGHT_SIDE>()); + if (it->isExisting<LEFT_SIDE>()) //do NOT check directory existence again! + dirnamesExisting.insert(it->getBaseDirPf<LEFT_SIDE >()); + if (it->isExisting<RIGHT_SIDE>()) + dirnamesExisting.insert(it->getBaseDirPf<RIGHT_SIDE>()); } - dummy2 = make_unique<LockHolder>(dirnames, statusHandler, true); //allow pw prompt + dirLocks = make_unique<LockHolder>(dirnamesExisting, globalCfg.optDialogs.warningDirectoryLockFailed, statusHandler); } //START SYNCHRONIZATION @@ -3818,8 +3857,8 @@ void MainDialog::OnAddFolderPair(wxCommandEvent& event) //clear first pair const FolderPairEnh cfgEmpty; - firstFolderPair->setValues(toWx(cfgEmpty.leftDirectory), - toWx(cfgEmpty.rightDirectory), + firstFolderPair->setValues(cfgEmpty.leftDirectory, + cfgEmpty.rightDirectory, cfgEmpty.altCmpConfig, cfgEmpty.altSyncConfig, cfgEmpty.localFilter); @@ -3839,8 +3878,8 @@ void MainDialog::OnRemoveTopFolderPair(wxCommandEvent& event) const FolderPairEnh cfgSecond = getEnhancedPair(additionalFolderPairs[0]); //reset first pair - firstFolderPair->setValues(toWx(cfgSecond.leftDirectory), - toWx(cfgSecond.rightDirectory), + firstFolderPair->setValues(cfgSecond.leftDirectory, + cfgSecond.rightDirectory, cfgSecond.altCmpConfig, cfgSecond.altSyncConfig, cfgSecond.localFilter); @@ -3897,7 +3936,8 @@ void MainDialog::updateGuiForFolderPair() addPairOptimalHeight = std::max(addPairOptimalHeight, addPairMinimalHeight); //implicitly handle corrupted values for "maxFolderPairsVisible" } - const int firstPairHeight = m_panelDirectoryPairs->ClientToWindowSize(m_panelTopLeft->GetSize()).GetHeight(); //include m_panelDirectoryPairs window borders! + const int firstPairHeight = std::max(m_panelDirectoryPairs->ClientToWindowSize(m_panelTopLeft ->GetSize()).GetHeight(), //include m_panelDirectoryPairs window borders! + m_panelDirectoryPairs->ClientToWindowSize(m_panelTopMiddle->GetSize()).GetHeight()); // //######################################################################################################################## //wxAUI hack: set minimum height to desired value, then call wxAuiPaneInfo::Fixed() to apply it @@ -3963,8 +4003,8 @@ void MainDialog::addFolderPair(const std::vector<FolderPairEnh>& newPairs, bool updateGuiForFolderPair(); for (auto it = newPairs.begin(); it != newPairs.end(); ++it)//set alternate configuration - newEntries[it - newPairs.begin()]->setValues(toWx(it->leftDirectory), - toWx(it->rightDirectory), + newEntries[it - newPairs.begin()]->setValues(it->leftDirectory, + it->rightDirectory, it->altCmpConfig, it->altSyncConfig, it->localFilter); @@ -4198,20 +4238,26 @@ void MainDialog::OnMenuCheckVersion(wxCommandEvent& event) } +void MainDialog::OnMenuCheckVersionAutomatically(wxCommandEvent& event) +{ + globalCfg.gui.lastUpdateCheck = globalCfg.gui.lastUpdateCheck == -1 ? 0 : -1; + m_menuItemCheckVersionAuto->Check(globalCfg.gui.lastUpdateCheck != -1); + zen::checkForUpdatePeriodically(this, globalCfg.gui.lastUpdateCheck, [&] { flashStatusInformation(_("Searching for program updates...")); }); +} + + void MainDialog::OnRegularUpdateCheck(wxIdleEvent& event) { //execute just once per startup! Disconnect(wxEVT_IDLE, wxIdleEventHandler(MainDialog::OnRegularUpdateCheck), nullptr, this); if (manualProgramUpdateRequired()) - zen::checkForUpdatePeriodically(this, globalCfg.gui.lastUpdateCheck); + zen::checkForUpdatePeriodically(this, globalCfg.gui.lastUpdateCheck, [&] { flashStatusInformation(_("Searching for program updates...")); }); } void MainDialog::OnLayoutWindowAsync(wxIdleEvent& event) { - warn_static("harmonize with async version check?") - //execute just once per startup! Disconnect(wxEVT_IDLE, wxIdleEventHandler(MainDialog::OnLayoutWindowAsync), nullptr, this); diff --git a/ui/main_dlg.h b/ui/main_dlg.h index e1b2d44f..70f78e93 100644 --- a/ui/main_dlg.h +++ b/ui/main_dlg.h @@ -7,18 +7,19 @@ #ifndef MAINDIALOG_H #define MAINDIALOG_H -#include <memory> #include <map> #include <set> -#include <wx/aui/aui.h> -#include <zen/int64.h> #include <stack> +#include <memory> +#include <zen/int64.h> +#include <zen/async_task.h> +#include <wx+/file_drop.h> +#include <wx/aui/aui.h> #include "gui_generated.h" -#include "../lib/process_xml.h" #include "custom_grid.h" #include "tree_view.h" -#include <wx+/file_drop.h> #include "folder_history_box.h" +#include "../lib/process_xml.h" //class FolderHistory; class DirectoryPair; @@ -30,14 +31,14 @@ class MainDialog : public MainDialogGenerated { public: //default behavior, application start - static void create(const std::vector<wxString>& cfgFileNames); //cfgFileNames empty: restore last config; non-empty load/merge given set of config files + static void create(const std::vector<Zstring>& cfgFileNames); //cfgFileNames empty: restore last config; non-empty load/merge given set of config files //load dynamically assembled config static void create(const xmlAccess::XmlGuiConfig& guiCfg, bool startComparison); //when switching language or switching from batch run to GUI on warnings static void create(const xmlAccess::XmlGuiConfig& guiCfg, - const std::vector<wxString>& referenceFiles, + const std::vector<Zstring>& referenceFiles, const xmlAccess::XmlGlobalSettings& globalSettings, //take over ownership => save on exit bool startComparison); @@ -48,12 +49,12 @@ public: private: static void create_impl(const xmlAccess::XmlGuiConfig& guiCfg, - const std::vector<wxString>& referenceFiles, + const std::vector<Zstring>& referenceFiles, const xmlAccess::XmlGlobalSettings& globalSettings, bool startComparison); MainDialog(const xmlAccess::XmlGuiConfig& guiCfg, - const std::vector<wxString>& referenceFiles, + const std::vector<Zstring>& referenceFiles, const xmlAccess::XmlGlobalSettings& globalSettings, //take over ownership => save on exit bool startComparison); ~MainDialog(); @@ -69,33 +70,35 @@ private: friend class PanelMoveWindow; //configuration load/save - void setLastUsedConfig(const wxString& filename, const xmlAccess::XmlGuiConfig& guiConfig); - void setLastUsedConfig(const std::vector<wxString>& filenames, const xmlAccess::XmlGuiConfig& guiConfig); + void setLastUsedConfig(const Zstring& filename, const xmlAccess::XmlGuiConfig& guiConfig); + void setLastUsedConfig(const std::vector<Zstring>& filenames, const xmlAccess::XmlGuiConfig& guiConfig); xmlAccess::XmlGuiConfig getConfig() const; - void setConfig(const xmlAccess::XmlGuiConfig& newGuiCfg, const std::vector<wxString>& referenceFiles); + void setConfig(const xmlAccess::XmlGuiConfig& newGuiCfg, const std::vector<Zstring>& referenceFiles); void setGlobalCfgOnInit(const xmlAccess::XmlGlobalSettings& globalSettings); //messes with Maximize(), window sizes, so call just once! xmlAccess::XmlGlobalSettings getGlobalCfgBeforeExit(); //destructive "get" thanks to "Iconize(false), Maximize(false)" - bool loadConfiguration(const std::vector<wxString>& filenames); //return true if loaded successfully + bool loadConfiguration(const std::vector<Zstring>& filenames); //return true if loaded successfully - bool trySaveConfig (const wxString* fileNameGui); //return true if saved successfully - bool trySaveBatchConfig(const wxString* fileNameBatch); // + bool trySaveConfig (const Zstring* fileNameGui); //return true if saved successfully + bool trySaveBatchConfig(const Zstring* fileNameBatch); // bool saveOldConfig(); //return false on user abort - static const wxString& lastRunConfigName(); + static const Zstring& lastRunConfigName(); xmlAccess::XmlGuiConfig lastConfigurationSaved; //support for: "Save changed configuration?" dialog //used when saving configuration - std::vector<wxString> activeConfigFiles; //name of currently loaded config file (may be more than 1) + std::vector<Zstring> activeConfigFiles; //name of currently loaded config file (may be more than 1) - void updateFilterButtons(); //file exclusion + void updateGlobalFilterButton(); void initViewFilterButtons(); void setViewFilterDefault(); - void addFileToCfgHistory(const std::vector<wxString>& filenames); //= update/insert + apply selection + void addFileToCfgHistory(const std::vector<Zstring>& filenames); //= update/insert + apply selection + void removeObsoleteCfgHistoryItems(const std::vector<Zstring>& filenames); + void removeCfgHistoryItems(const std::vector<Zstring>& filenames); void addFolderPair(const std::vector<zen::FolderPairEnh>& newPairs, bool addFront = false); void removeAddFolderPair(size_t pos); @@ -117,19 +120,22 @@ private: void setSyncDirManually(const std::vector<zen::FileSystemObject*>& selection, zen::SyncDirection direction); void setFilterManually(const std::vector<zen::FileSystemObject*>& selection, bool setIncluded); - void copySelectionToClipboard(); + void copySelectionToClipboard(const std::vector<const zen::Grid*>& gridRefs); void deleteSelectedFiles(const std::vector<zen::FileSystemObject*>& selectionLeft, const std::vector<zen::FileSystemObject*>& selectionRight); void openExternalApplication(const wxString& commandline, const std::vector<zen::FileSystemObject*>& selection, bool leftSide); //selection may be empty - //work to be done in idle time - void OnIdleEvent(wxEvent& event); + //don't use wxWidgets idle handling => repeated idle requests/consumption hogs 100% cpu! + void startProcessingAsyncTasks() { timerForAsyncTasks.Start(50); } //timer interval in [ms] + void onProcessAsyncTasks(wxEvent& event); //status bar supports one of the following two states at a time: void setStatusBarFullText(const wxString& msg); void setStatusBarFileStatistics(size_t filesOnLeftView, size_t foldersOnLeftView, size_t filesOnRightView, size_t foldersOnRightView, zen::UInt64 filesizeLeftView, zen::UInt64 filesizeRightView); + void flashStatusInformation(const wxString& msg); //temporarily show different status (only valid for setStatusBarFullText) + void restoreStatusInformation(); //called automatically after a few seconds //events void onGridButtonEventL(wxKeyEvent& event); @@ -225,6 +231,7 @@ private: virtual void OnMenuGlobalSettings(wxCommandEvent& event); virtual void OnMenuExportFileList(wxCommandEvent& event); virtual void OnMenuCheckVersion (wxCommandEvent& event); + virtual void OnMenuCheckVersionAutomatically(wxCommandEvent& event); virtual void OnMenuAbout (wxCommandEvent& event); virtual void OnShowHelp (wxCommandEvent& event); virtual void OnMenuQuit (wxCommandEvent& event) { Close(); } @@ -263,8 +270,7 @@ private: //*********************************************** //status information - wxLongLong lastStatusChange; - std::unique_ptr<wxString> oldStatusMsg; + std::list<wxString> oldStatusMsgs; //the first one is the original/non-flash status message //compare status panel (hidden on start, shown when comparing) std::unique_ptr<CompareProgressDialog> compareStatus; //always bound @@ -285,6 +291,12 @@ private: std::shared_ptr<FolderHistory> folderHistoryLeft; //shared by all wxComboBox dropdown controls std::shared_ptr<FolderHistory> folderHistoryRight; //always bound! + + //schedule and run long-running tasks asynchronously, but process results on GUI queue + zen::AsyncTasks asyncTasks; + wxTimer timerForAsyncTasks; //don't use wxWidgets idle handling => repeated idle requests/consumption hogs 100% cpu! + + std::unique_ptr<zen::FilterConfig> filterCfgOnClipboard; //copy/paste of filter config }; #endif // MAINDIALOG_H diff --git a/ui/msg_popup.cpp b/ui/msg_popup.cpp index fb33dfb0..940163af 100644 --- a/ui/msg_popup.cpp +++ b/ui/msg_popup.cpp @@ -156,7 +156,7 @@ WarningDlg::WarningDlg(wxWindow* parent, int activeButtons, const wxString& mes SetTitle(_("Warning")); m_bitmapMsgType->SetBitmap(getResourceImage(L"msg_warning")); m_textCtrlMessage->SetValue(messageText); - checkBoxDontShowAgain.SetLabel(_("Don't show this dialog again")); + checkBoxDontShowAgain.SetLabel(_("Don't show this warning again")); buttonIgnore.SetLabel(_("&Ignore")); buttonSwitch.SetLabel(_("&Switch")); //buttonIgnore.SetId(wxID_IGNORE); -> see comment in ErrorDlg diff --git a/ui/progress_indicator.cpp b/ui/progress_indicator.cpp index b36ccb0f..d23de61a 100644 --- a/ui/progress_indicator.cpp +++ b/ui/progress_indicator.cpp @@ -196,17 +196,17 @@ void CompareProgressDialog::Pimpl::updateStatusPanelNow() //remaining time and speed: only visible during binary comparison if (perf) { - if (numeric::dist(lastStatCallSpeed, timeElapsed.Time()) >= 500) + const long timeNow = timeElapsed.Time(); + if (numeric::dist(lastStatCallSpeed, timeNow) >= 500) { - lastStatCallSpeed = timeElapsed.Time(); + lastStatCallSpeed = timeNow; - perf->addSample(objectsCurrent, to<double>(dataCurrent), timeElapsed.Time()); + perf->addSample(objectsCurrent, to<double>(dataCurrent), timeNow); //current speed -> Win 7 copy uses 1 sec update interval setText(*m_staticTextSpeed, perf->getBytesPerSecond(), &layoutChanged); } - warn_static("more often: eveyr 100 ms?") //remaining time setText(*m_staticTextRemTime, perf->getRemainingTime(to<double>(dataTotal - dataCurrent)), &layoutChanged); } @@ -1257,11 +1257,12 @@ void SyncProgressDialog::Pimpl::updateGui(bool allowYield) assert(perf); if (perf) { - if (numeric::dist(lastStatCallSpeed, timeElapsed.Time()) >= 500) + const long timeNow = timeElapsed.Time(); + if (numeric::dist(lastStatCallSpeed, timeNow) >= 500) { - lastStatCallSpeed = timeElapsed.Time(); + lastStatCallSpeed = timeNow; - perf->addSample(objectsCurrent, to<double>(dataCurrent), timeElapsed.Time()); + perf->addSample(objectsCurrent, to<double>(dataCurrent), timeNow); //current speed -> Win 7 copy uses 1 sec update interval setText(*m_staticTextSpeed, perf->getBytesPerSecond(), &layoutChanged); @@ -1617,6 +1618,7 @@ void SyncProgressDialog::Pimpl::processHasFinished(SyncResult resultId, const Er void SyncProgressDialog::Pimpl::OnOkay(wxCommandEvent& event) { + isZombie = true; //on Fedora the iconize event is executed *before* entering SyncProgressDialog::Pimpl::OnClose()!!! Close(); //generate close event: do NOT destroy window unconditionally! } @@ -1726,7 +1728,9 @@ SyncProgressDialog::SyncProgressDialog(AbortCallback& abortCb, if (showProgress) { pimpl->Show(); - pimpl->updateGui(false); //clear gui flicker, remove dummy texts: window must be visible to make this work! + warn_static("problem??") + //clear gui flicker, remove dummy texts: window must be visible to make this work! + pimpl->updateGui(true); //at least on OS X a real Yield() is required to flush pending GUI updates; Update() is not enough } else pimpl->minimizeToTray(); diff --git a/ui/small_dlgs.cpp b/ui/small_dlgs.cpp index fd62b0cb..3827c837 100644 --- a/ui/small_dlgs.cpp +++ b/ui/small_dlgs.cpp @@ -143,7 +143,7 @@ private: virtual void OnClose (wxCloseEvent& event) { EndModal(ReturnSmallDlg::BUTTON_CANCEL); } virtual void OnCancel (wxCommandEvent& event) { EndModal(ReturnSmallDlg::BUTTON_CANCEL); } virtual void OnHelp (wxCommandEvent& event) { displayHelpEntry(L"html/Exclude Items.html", this); } - virtual void OnDefault (wxCommandEvent& event); + virtual void OnClear (wxCommandEvent& event); virtual void OnApply (wxCommandEvent& event); virtual void OnUpdateChoice(wxCommandEvent& event) { updateGui(); } virtual void OnUpdateNameFilter(wxCommandEvent& event) { updateGui(); } @@ -153,7 +153,6 @@ private: FilterConfig getFilter() const; void onKeyEvent(wxKeyEvent& event); - const bool isGlobalFilter_; FilterConfig& outputRef; EnumDescrList<UnitTime> enumTimeDescr; @@ -165,7 +164,6 @@ FilterDlg::FilterDlg(wxWindow* parent, bool isGlobalFilter, //global or local filter dialog? FilterConfig& filter) : FilterDlgGenerated(parent), - isGlobalFilter_(isGlobalFilter), outputRef(filter) //just hold reference { #ifdef FFS_WIN @@ -207,6 +205,7 @@ FilterDlg::FilterDlg(wxWindow* parent, // else // m_staticTexHeader->SetLabel("Filter single folder pair")); // + m_staticTextHeader->SetLabel(_("Filter")); Fit(); //child-element widths have changed: image was set @@ -234,30 +233,23 @@ void FilterDlg::updateGui() { FilterConfig activeCfg = getFilter(); - m_bitmapInclude->SetBitmap( - !NameFilter::isNull(activeCfg.includeFilter, FilterConfig().excludeFilter) ? - getResourceImage(L"filter_include") : - greyScale(getResourceImage(L"filter_include"))); - - m_bitmapExclude->SetBitmap( - !NameFilter::isNull(FilterConfig().includeFilter, activeCfg.excludeFilter) ? - getResourceImage(L"filter_exclude") : - greyScale(getResourceImage(L"filter_exclude"))); - - m_bitmapFilterDate->SetBitmap( - activeCfg.unitTimeSpan != UTIME_NONE ? - getResourceImage(L"clock") : - greyScale(getResourceImage(L"clock"))); - - m_bitmapFilterSize->SetBitmap( - activeCfg.unitSizeMin != USIZE_NONE || - activeCfg.unitSizeMax != USIZE_NONE ? - getResourceImage(L"size") : - greyScale(getResourceImage(L"size"))); + auto setStatusBitmap = [&](wxStaticBitmap& staticBmp, const wxString& bmpName, bool active) + { + if (active) + staticBmp.SetBitmap(getResourceImage(bmpName)); + else + staticBmp.SetBitmap(greyScale(getResourceImage(bmpName))); + }; + setStatusBitmap(*m_bitmapInclude, L"filter_include", !NameFilter::isNull(activeCfg.includeFilter, FilterConfig().excludeFilter)); + setStatusBitmap(*m_bitmapExclude, L"filter_exclude", !NameFilter::isNull(FilterConfig().includeFilter, activeCfg.excludeFilter)); + setStatusBitmap(*m_bitmapFilterDate, L"clock", activeCfg.unitTimeSpan != UTIME_NONE); + setStatusBitmap(*m_bitmapFilterSize, L"size", activeCfg.unitSizeMin != USIZE_NONE || activeCfg.unitSizeMax != USIZE_NONE); m_spinCtrlTimespan->Enable(activeCfg.unitTimeSpan == UTIME_LAST_X_DAYS); m_spinCtrlMinSize ->Enable(activeCfg.unitSizeMin != USIZE_NONE); m_spinCtrlMaxSize ->Enable(activeCfg.unitSizeMax != USIZE_NONE); + + m_buttonClear ->Enable(!(activeCfg == FilterConfig())); } @@ -291,21 +283,15 @@ FilterConfig FilterDlg::getFilter() const } -void FilterDlg::OnDefault(wxCommandEvent& event) +void FilterDlg::OnClear(wxCommandEvent& event) { - if (isGlobalFilter_) - setFilter(MainConfiguration().globalFilter); - else - setFilter(FilterConfig()); - - //changes to mainDialog are only committed when the OK button is pressed - Fit(); + setFilter(FilterConfig()); } void FilterDlg::OnApply(wxCommandEvent& event) { - //only if user presses ApplyFilter, he wants the changes to be committed + //changes to mainDialog are only committed when the OK button is pressed outputRef = getFilter(); //when leaving dialog: filter and redraw grid, if filter is active @@ -395,14 +381,14 @@ void DeleteDialog::updateGui() wxString header; if (m_checkBoxUseRecycler->GetValue()) { - header = _P("Do you really want to move the following object to the Recycle Bin?", - "Do you really want to move the following %x objects to the Recycle Bin?", delInfo.second); + header = _P("Do you really want to move the following item to the Recycle Bin?", + "Do you really want to move the following %x items to the Recycle Bin?", delInfo.second); m_bitmapDeleteType->SetBitmap(getResourceImage(L"recycler")); } else { - header = _P("Do you really want to delete the following object?", - "Do you really want to delete the following %x objects?", delInfo.second); + header = _P("Do you really want to delete the following item?", + "Do you really want to delete the following %x items?", delInfo.second); m_bitmapDeleteType->SetBitmap(getResourceImage(L"deleteFile")); } replace(header, L"%x", toGuiString(delInfo.second)); diff --git a/ui/switch_to_gui.h b/ui/switch_to_gui.h index a12c7b03..a3cf6827 100644 --- a/ui/switch_to_gui.h +++ b/ui/switch_to_gui.h @@ -16,7 +16,7 @@ namespace zen class SwitchToGui { public: - SwitchToGui(const wxString& referenceFile, + SwitchToGui(const Zstring& referenceFile, const xmlAccess::XmlBatchConfig& batchCfg, xmlAccess::XmlGlobalSettings& globalSettings) : guiCfg(xmlAccess::convertBatchToGui(batchCfg)), @@ -31,7 +31,7 @@ public: } private: - std::vector<wxString> referenceFiles; + std::vector<Zstring> referenceFiles; const xmlAccess::XmlGuiConfig guiCfg; xmlAccess::XmlGlobalSettings& globalSettings_; }; diff --git a/ui/sync_cfg.cpp b/ui/sync_cfg.cpp index 2d92e231..dbef3619 100644 --- a/ui/sync_cfg.cpp +++ b/ui/sync_cfg.cpp @@ -233,12 +233,10 @@ SyncCfgDialog::SyncCfgDialog(wxWindow* parent, setRelativeFontSize(*m_toggleBtnMirror, 1.25); setRelativeFontSize(*m_toggleBtnUpdate, 1.25); setRelativeFontSize(*m_toggleBtnCustom, 1.25); - setRelativeFontSize(*m_staticTextHeaderCategory, 0.90); - setRelativeFontSize(*m_staticTextHeaderAction, 0.90); enumVersioningStyle. - add(VER_STYLE_ADD_TIMESTAMP, _("Versioning"), _("Append a timestamp to each file name")). - add(VER_STYLE_REPLACE, _("Replace"), _("Move files and replace if existing")); + add(VER_STYLE_ADD_TIMESTAMP, _("Time stamp"), _("Append a timestamp to each file name")). + add(VER_STYLE_REPLACE, _("Replace"), _("Move files and replace if existing")); //hide controls for optional parameters if (!handleError && !execWhenFinished) //currently either both or neither are bound! diff --git a/ui/tree_view.cpp b/ui/tree_view.cpp index eff840bc..07f7a942 100644 --- a/ui/tree_view.cpp +++ b/ui/tree_view.cpp @@ -24,13 +24,13 @@ inline void TreeView::compressNode(Container& cont) //remove single-element sub-trees -> gain clarity + usability (call *after* inclusion check!!!) { if (cont.subDirs.empty() || //single files node or... - (cont.firstFile == nullptr && //single dir node... + (cont.firstFileId == nullptr && //single dir node... cont.subDirs.size() == 1 && // - cont.subDirs[0].firstFile == nullptr && //...that is empty + cont.subDirs[0].firstFileId == nullptr && //...that is empty cont.subDirs[0].subDirs.empty())) // { cont.subDirs.clear(); - cont.firstFile = nullptr; + cont.firstFileId = nullptr; } } @@ -56,50 +56,57 @@ void TreeView::extractVisibleSubtree(HierarchyObject& hierObj, //in return std::max(fileObj.getFileSize<LEFT_SIDE>(), fileObj.getFileSize<RIGHT_SIDE>()); }; - - cont.firstFile = nullptr; + cont.firstFileId = nullptr; std::for_each(hierObj.refSubFiles().begin(), hierObj.refSubFiles().end(), [&](FileMapping& fileObj) { if (pred(fileObj)) { cont.bytesNet += getBytes(fileObj); + ++cont.itemCountNet; - if (!cont.firstFile) - cont.firstFile = fileObj.getId(); + if (!cont.firstFileId) + cont.firstFileId = fileObj.getId(); } }); - cont.bytesGross += cont.bytesNet; - if (!cont.firstFile) - std::find_if(hierObj.refSubLinks().begin(), hierObj.refSubLinks().end(), - [&](SymLinkMapping& linkObj) -> bool + std::for_each(hierObj.refSubLinks().begin(), hierObj.refSubLinks().end(), + [&](SymLinkMapping& linkObj) { if (pred(linkObj)) { - cont.firstFile = linkObj.getId(); - return true; + ++cont.itemCountNet; + + if (!cont.firstFileId) + cont.firstFileId = linkObj.getId(); } - return false; }); + cont.bytesGross += cont.bytesNet; + cont.itemCountGross += cont.itemCountNet; cont.subDirs.reserve(hierObj.refSubDirs().size()); //avoid expensive reallocations! std::for_each(hierObj.refSubDirs().begin(), hierObj.refSubDirs().end(), [&cont, pred](DirMapping& subDirObj) { + const bool included = pred(subDirObj); + cont.subDirs.push_back(TreeView::DirNodeImpl()); // auto& subDirView = cont.subDirs.back(); TreeView::extractVisibleSubtree(subDirObj, subDirView, pred); - cont.bytesGross += subDirView.bytesGross; + if (included) + ++subDirView.itemCountGross; + + cont.bytesGross += subDirView.bytesGross; + cont.itemCountGross += subDirView.itemCountGross; - if (pred(subDirObj) || subDirView.firstFile || !subDirView.subDirs.empty()) + if (!included && !subDirView.firstFileId && subDirView.subDirs.empty()) + cont.subDirs.pop_back(); + else { subDirView.objId = subDirObj.getId(); compressNode(subDirView); } - else - cont.subDirs.pop_back(); }); } @@ -202,7 +209,23 @@ void TreeView::sortSingleLevel(std::vector<TreeLine>& items, ColumnTypeNavi colu return 0U; }; + auto getCount = [](const TreeLine& line) -> int + { + switch (line.type_) + { + case TreeView::TYPE_ROOT: + case TreeView::TYPE_DIRECTORY: + return line.node_->itemCountGross; + + case TreeView::TYPE_FILES: + return line.node_->itemCountNet; + } + assert(false); + return 0; + }; + const auto lessBytes = [&](const TreeLine& lhs, const TreeLine& rhs) { return getBytes(lhs) < getBytes(rhs); }; + const auto lessCount = [&](const TreeLine& lhs, const TreeLine& rhs) { return getCount(lhs) < getCount(rhs); }; switch (columnType) { @@ -213,6 +236,10 @@ void TreeView::sortSingleLevel(std::vector<TreeLine>& items, ColumnTypeNavi colu case COL_TYPE_NAVI_DIRECTORY: std::sort(items.begin(), items.end(), LessShortName<ascending>()); break; + + case COL_TYPE_NAVI_ITEM_COUNT: + std::sort(items.begin(), items.end(), makeSortDirection(lessCount, Int2Type<ascending>())); + break; } } @@ -230,7 +257,7 @@ void TreeView::getChildren(const Container& cont, size_t level, std::vector<Tree workList.push_back(std::make_pair(subDir.bytesGross, &output.back().percent_)); }); - if (cont.firstFile) + if (cont.firstFileId) { output.push_back(TreeLine(level, 0, &cont, TreeView::TYPE_FILES)); workList.push_back(std::make_pair(cont.bytesNet, &output.back().percent_)); @@ -302,7 +329,7 @@ void TreeView::applySubView(std::vector<RootNodeImpl>&& newView) } //restore node expansion status - for (size_t row = 0; row < flatTree.size(); ++row) //flatTree size changes within loop! + for (size_t row = 0; row < flatTree.size(); ++row) //flatTree size changes during loop! { const TreeLine& line = flatTree[row]; @@ -334,15 +361,16 @@ void TreeView::updateView(Predicate pred) //warning: the following lines are almost 1:1 copy from extractVisibleSubtree: //however we *cannot* reuse code here; this were only possible if we could replace "std::vector<RootNodeImpl>" by "Container"! - if (root.firstFile || !root.subDirs.empty()) + if (!root.firstFileId && root.subDirs.empty()) + newView.pop_back(); + else { root.baseMap = baseObj; this->compressNode(root); //"this->" required by two-pass lookup as enforced by GCC 4.7 } - else - newView.pop_back(); }); + lastViewFilterPred = pred; applySubView(std::move(newView)); } @@ -365,6 +393,8 @@ bool TreeView::getDefaultSortDirection(ColumnTypeNavi colType) return false; case COL_TYPE_NAVI_DIRECTORY: return true; + case COL_TYPE_NAVI_ITEM_COUNT: + return false; } assert(false); return true; @@ -383,7 +413,7 @@ TreeView::NodeStatus TreeView::getStatus(size_t row) const { case TreeView::TYPE_DIRECTORY: case TreeView::TYPE_ROOT: - return flatTree[row].node_->firstFile || !flatTree[row].node_->subDirs.empty() ? TreeView::STATUS_REDUCED : TreeView::STATUS_EMPTY; + return flatTree[row].node_->firstFileId || !flatTree[row].node_->subDirs.empty() ? TreeView::STATUS_REDUCED : TreeView::STATUS_EMPTY; case TreeView::TYPE_FILES: return TreeView::STATUS_EMPTY; @@ -466,7 +496,14 @@ void TreeView::updateCmpResult(bool hideFiltered, bool equalFilesActive, bool conflictFilesActive) { - updateView([&](const FileSystemObject& fsObj) -> bool + updateView([hideFiltered, //make sure the predicate can be stored safely! + leftOnlyFilesActive, + rightOnlyFilesActive, + leftNewerFilesActive, + rightNewerFilesActive, + differentFilesActive, + equalFilesActive, + conflictFilesActive](const FileSystemObject& fsObj) -> bool { if (hideFiltered && !fsObj.isActive()) return false; @@ -506,7 +543,16 @@ void TreeView::updateSyncPreview(bool hideFiltered, bool syncEqualActive, bool conflictFilesActive) { - updateView([&](const FileSystemObject& fsObj) -> bool + updateView([hideFiltered, //make sure the predicate can be stored safely! + syncCreateLeftActive, + syncCreateRightActive, + syncDeleteLeftActive, + syncDeleteRightActive, + syncDirOverwLeftActive, + syncDirOverwRightActive, + syncDirNoneActive, + syncEqualActive, + conflictFilesActive](const FileSystemObject& fsObj) -> bool { if (hideFiltered && !fsObj.isActive()) return false; @@ -564,14 +610,14 @@ std::unique_ptr<TreeView::Node> TreeView::getLine(size_t row) const if (row < flatTree.size()) { const auto level = flatTree[row].level_; - const int percent = flatTree[row].percent_; + switch (flatTree[row].type_) { case TreeView::TYPE_ROOT: { const auto* root = static_cast<const TreeView::RootNodeImpl*>(flatTree[row].node_); - return make_unique<TreeView::RootNode>(percent, getStatus(row), root->bytesGross, *(root->baseMap)); + return make_unique<TreeView::RootNode>(percent, root->bytesGross, root->itemCountGross, getStatus(row), *(root->baseMap)); } break; @@ -579,15 +625,34 @@ std::unique_ptr<TreeView::Node> TreeView::getLine(size_t row) const { const auto* dir = static_cast<const TreeView::DirNodeImpl*>(flatTree[row].node_); if (auto dirObj = dynamic_cast<DirMapping*>(FileSystemObject::retrieve(dir->objId))) - return make_unique<TreeView::DirNode>(percent, level, getStatus(row), dir->bytesGross, *dirObj); + return make_unique<TreeView::DirNode>(percent, dir->bytesGross, dir->itemCountGross, level, getStatus(row), *dirObj); } break; case TreeView::TYPE_FILES: { const auto* parentDir = flatTree[row].node_; - if (auto firstFile = FileSystemObject::retrieve(parentDir->firstFile)) - return make_unique<TreeView::FilesNode>(percent, level, parentDir->bytesNet, *firstFile); + if (auto firstFile = FileSystemObject::retrieve(parentDir->firstFileId)) + { + std::vector<FileSystemObject*> filesAndLinks; + HierarchyObject& parent = firstFile->parent(); + + //lazy evaluation: recheck "lastViewFilterPred" again rather than buffer and bloat "lastViewFilterPred" + std::for_each(parent.refSubFiles().begin(), parent.refSubFiles().end(), + [&](FileSystemObject& fsObj) + { + if (lastViewFilterPred(fsObj)) + filesAndLinks.push_back(&fsObj); + }); + std::for_each(parent.refSubLinks().begin(), parent.refSubLinks().end(), + [&](FileSystemObject& fsObj) + { + if (lastViewFilterPred(fsObj)) + filesAndLinks.push_back(&fsObj); + }); + + return make_unique<TreeView::FilesNode>(percent, parentDir->bytesNet, parentDir->itemCountNet, level, filesAndLinks); + } } break; } @@ -672,13 +737,16 @@ private: else if (dirRight.empty()) return dirLeft; else - return utfCvrtTo<wxString>(dirLeft + L" \x2212 " + dirRight); //\x2212 = unicode minus + return dirLeft + L" \x2212 " + dirRight; //\x2212 = unicode minus } else if (const TreeView::DirNode* dir = dynamic_cast<const TreeView::DirNode*>(node.get())) return utfCvrtTo<wxString>(dir->dirObj_.getObjShortName()); else if (dynamic_cast<const TreeView::FilesNode*>(node.get())) return _("Files"); break; + + case COL_TYPE_NAVI_ITEM_COUNT: + return toGuiString(node->itemCount_); } } return wxEmptyString; @@ -876,8 +944,9 @@ private: { int alignment = wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL; - //have file size right-justified (but don't change for RTL languages) - if (static_cast<ColumnTypeNavi>(colType) == COL_TYPE_NAVI_BYTES && grid.GetLayoutDirection() != wxLayout_RightToLeft) + //have file size and item count right-justified (but don't change for RTL languages) + if ((static_cast<ColumnTypeNavi>(colType) == COL_TYPE_NAVI_BYTES || + static_cast<ColumnTypeNavi>(colType) == COL_TYPE_NAVI_ITEM_COUNT) && grid.GetLayoutDirection() != wxLayout_RightToLeft) { rectTmp.width -= 2 * GAP_SIZE; alignment = wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL; @@ -918,6 +987,8 @@ private: return _("Size"); case COL_TYPE_NAVI_DIRECTORY: return _("Name"); + case COL_TYPE_NAVI_ITEM_COUNT: + return _("Items"); } return wxEmptyString; } @@ -1043,6 +1114,8 @@ private: ContextMenu menu; //-------------------------------------------------------------------------------------------------------- + menu.addCheckBox(_("Percentage"), [this] { setShowPercentage(!getShowPercentage()); }, getShowPercentage()); + //-------------------------------------------------------------------------------------------------------- auto toggleColumn = [&](const Grid::ColumnAttribute& ca) { auto colAttr = grid_.getColumnConfig(); @@ -1065,8 +1138,6 @@ private: ca.visible_, ca.type_ != static_cast<ColumnType>(COL_TYPE_NAVI_DIRECTORY)); //do not allow user to hide file name column! } //-------------------------------------------------------------------------------------------------------- - menu.addCheckBox(_("Percentage"), [this] { setShowPercentage(!getShowPercentage()); }, getShowPercentage()); - //-------------------------------------------------------------------------------------------------------- menu.addSeparator(); auto setDefaultColumns = [&] diff --git a/ui/tree_view.h b/ui/tree_view.h index af269d53..9ea7d0e4 100644 --- a/ui/tree_view.h +++ b/ui/tree_view.h @@ -7,10 +7,11 @@ #ifndef TREE_H_INCLUDED_841703190201835280256673425 #define TREE_H_INCLUDED_841703190201835280256673425 +#include <functional> +#include <zen/optional.h> #include <wx+/grid.h> -#include "../file_hierarchy.h" #include "column_attr.h" -#include <zen/optional.h> +#include "../file_hierarchy.h" namespace zen { @@ -56,31 +57,32 @@ public: //--------------------------------------------------------------------- struct Node { - Node(int percent, size_t level, NodeStatus status, UInt64 bytes) : - percent_(percent), level_(level), status_(status), bytes_(bytes) {} + Node(int percent, UInt64 bytes, int itemCount, size_t level, NodeStatus status) : + percent_(percent), level_(level), status_(status), bytes_(bytes), itemCount_(itemCount) {} virtual ~Node() {} const int percent_; //[0, 100] const size_t level_; const NodeStatus status_; const UInt64 bytes_; + const int itemCount_; }; struct FilesNode : public Node { - FilesNode(int percent, size_t level, UInt64 bytes, FileSystemObject& firstFile) : Node(percent, level, STATUS_EMPTY, bytes), firstFile_(firstFile) {} - FileSystemObject& firstFile_; //or symlink + FilesNode(int percent, UInt64 bytes, int itemCount, size_t level, const std::vector<FileSystemObject*>& filesAndLinks) : Node(percent, bytes, itemCount, level, STATUS_EMPTY), filesAndLinks_(filesAndLinks) {} + std::vector<FileSystemObject*> filesAndLinks_; //files or symlinks; pointers are bound! }; struct DirNode : public Node { - DirNode(int percent, size_t level, NodeStatus status, UInt64 bytes, DirMapping& dirObj) : Node(percent, level, status, bytes), dirObj_(dirObj) {} + DirNode(int percent, UInt64 bytes, int itemCount, size_t level, NodeStatus status, DirMapping& dirObj) : Node(percent, bytes, itemCount, level, status), dirObj_(dirObj) {} DirMapping& dirObj_; }; struct RootNode : public Node { - RootNode(int percent, NodeStatus status, UInt64 bytes, BaseDirMapping& baseMap) : Node(percent, 0, status, bytes), baseMap_(baseMap) {} + RootNode(int percent, UInt64 bytes, int itemCount, NodeStatus status, BaseDirMapping& baseMap) : Node(percent, bytes, itemCount, 0, status), baseMap_(baseMap) {} BaseDirMapping& baseMap_; }; @@ -101,11 +103,17 @@ private: struct Container { - Container() : firstFile(nullptr) {} + Container() : itemCountGross(), itemCountNet(), firstFileId(nullptr) {} UInt64 bytesGross; - UInt64 bytesNet; //files in this directory only + UInt64 bytesNet; //bytes for files on view in this directory only + int itemCountGross; + int itemCountNet; //number of files on view for in this directory only + std::vector<DirNodeImpl> subDirs; - FileSystemObject::ObjectId firstFile; //weak pointer to first FileMapping or SymLinkMapping + FileSystemObject::ObjectId firstFileId; //weak pointer to first FileMapping or SymLinkMapping + //- "compress" algorithm may hide file nodes for directories with a single included file, i.e. itemCountGross == itemCountNet == 1 + //- a HierarchyObject* would a better fit, but we need weak pointer semantics! + //- a std::vector<FileSystemObject::ObjectId> would be a better design, but we don't want a second memory structure as large as custom grid! }; struct DirNodeImpl : public Container @@ -134,13 +142,13 @@ private: size_t level_; int percent_; //[0, 100] const Container* node_; // - NodeType type_; //we choose to increase size of "flatTree" rather than "folderCmpView" by not using dynamic polymorphism! + NodeType type_; //we choose to increase size of "flatTree" rather than "folderCmpView" by not using dynamic polymorphism! }; static void compressNode(Container& cont); template <class Function> static void extractVisibleSubtree(HierarchyObject& hierObj, Container& cont, Function includeObject); - void getChildren(const Container& cont, size_t level, std::vector<TreeLine>& output); + void getChildren(const Container& cont, size_t level, std::vector<TreeLine>& output); template <class Predicate> void updateView(Predicate pred); void applySubView(std::vector<RootNodeImpl>&& newView); @@ -152,6 +160,7 @@ private: | (update...) | */ std::vector<RootNodeImpl> folderCmpView; //partial view on folderCmp -> unsorted (cannot be, because files are not a separate entity) + std::function<bool(const FileSystemObject& fsObj)> lastViewFilterPred; //buffer view filter predicate for lazy evaluation of files/symlinks corresponding to a TYPE_FILES node /* /|\ | (update...) | */ diff --git a/version/version.h b/version/version.h index 53ad7f08..3aae7d4c 100644 --- a/version/version.h +++ b/version/version.h @@ -3,7 +3,7 @@ namespace zen { -const wchar_t currentVersion[] = L"5.14"; //internal linkage! +const wchar_t currentVersion[] = L"5.15"; //internal linkage! } #endif diff --git a/wx+/file_drop.h b/wx+/file_drop.h index 7b6020ac..0916b0cb 100644 --- a/wx+/file_drop.h +++ b/wx+/file_drop.h @@ -7,6 +7,7 @@ #ifndef FILE_DROP_H_INCLUDED #define FILE_DROP_H_INCLUDED +#include <wx/window.h> #include <wx/event.h> #include <wx/dnd.h> diff --git a/wx+/grid.cpp b/wx+/grid.cpp index 750c4241..67d01fef 100644 --- a/wx+/grid.cpp +++ b/wx+/grid.cpp @@ -1865,7 +1865,7 @@ void Grid::SetScrollbar(int orientation, int position, int thumbSize, int range, } #endif - //get rid of scrollbars, but preserve scrolling behavior! +//get rid of scrollbars, but preserve scrolling behavior! #ifdef FFS_WIN #ifdef __MINGW32__ //MinGW is clueless... #define WM_MOUSEHWHEEL 0x020E diff --git a/wx+/shell_execute.h b/wx+/shell_execute.h index acf84794..a069fdb3 100644 --- a/wx+/shell_execute.h +++ b/wx+/shell_execute.h @@ -102,7 +102,7 @@ void shellExecute(const Zstring& command, ExecutionType type = EXEC_TYPE_ASYNC) wxMessageBox(_("Invalid command line:") + L"\n" + utfCvrtTo<wxString>(command)); } else - async([=] { /*int rv = */ ::system(command.c_str()); }); + async([=] { int rv = ::system(command.c_str()); (void)rv; }); //unfortunately we are not allowed to show a wxMessageBox from a worker thread #endif } diff --git a/wx+/toggle_button.h b/wx+/toggle_button.h index 666f291d..548def1d 100644 --- a/wx+/toggle_button.h +++ b/wx+/toggle_button.h @@ -28,8 +28,7 @@ public: void init(const wxBitmap& activeBmp, const wxBitmap& inactiveBmp, - const wxString& activeTooltip, - const wxString& inactiveTooltip = wxString()); + const wxString& tooltip); void setActive(bool value); bool isActive() const { return active; } @@ -38,11 +37,8 @@ public: private: bool active; - wxBitmap m_activeBmp; - wxString m_activeTooltip; - - wxBitmap m_inactiveBmp; - wxString m_inactiveTooltip; + wxBitmap activeBmp_; + wxBitmap inactiveBmp_; }; @@ -61,15 +57,13 @@ private: inline void ToggleButton::init(const wxBitmap& activeBmp, const wxBitmap& inactiveBmp, - const wxString& activeTooltip, - const wxString& inactiveTooltip) + const wxString& tooltip) { - m_activeBmp = activeBmp; - m_activeTooltip = activeTooltip; - m_inactiveBmp = inactiveBmp; - m_inactiveTooltip = inactiveTooltip.empty() ? activeTooltip : inactiveTooltip; + SetToolTip(tooltip); + + activeBmp_ = activeBmp; + inactiveBmp_ = inactiveBmp; - //load resources setActive(active); } @@ -78,17 +72,7 @@ inline void ToggleButton::setActive(bool value) { active = value; - - if (active) - { - SetBitmapLabel(m_activeBmp); - SetToolTip(m_activeTooltip); - } - else - { - SetBitmapLabel(m_inactiveBmp); - SetToolTip(m_inactiveTooltip); - } + SetBitmapLabel(active ? activeBmp_ : inactiveBmp_); } #endif // TOGGLEBUTTON_H_INCLUDED diff --git a/zen/FindFilePlus/find_file_plus.cpp b/zen/FindFilePlus/find_file_plus.cpp index ec56b0bc..fdabc46f 100644 --- a/zen/FindFilePlus/find_file_plus.cpp +++ b/zen/FindFilePlus/find_file_plus.cpp @@ -8,9 +8,7 @@ #include "init_dll_binding.h" //#include <windows.h> //these two don't play nice with each other #include "load_dll.h" -#include <zen/scope_guard.h> #include <new> -//#include <cstdio> using namespace dll; using namespace findplus; @@ -56,15 +54,18 @@ typedef struct _RTL_RELATIVE_NAME_U PVOID /*PRTLP_CURDIR_REF*/ CurDirRef; } RTL_RELATIVE_NAME_U, *PRTL_RELATIVE_NAME_U; -typedef BOOLEAN (NTAPI* RtlDosPathNameToNtPathName_UFunc)(PCWSTR, //__in dosFileName, - PUNICODE_STRING, //__out ntFileName, - PCWSTR*, //__out_optFilePart, - PRTL_RELATIVE_NAME_U); //__out_opt relativeName +typedef BOOLEAN (NTAPI* RtlDosPathNameToNtPathName_UFunc)(PCWSTR dosFileName, //__in + PUNICODE_STRING ntFileName, //__out + PCWSTR* filePart, //__out + PRTL_RELATIVE_NAME_U relativeName); //__out -typedef BOOLEAN (NTAPI* RtlDosPathNameToRelativeNtPathName_UFunc)(PCWSTR, //__in dosFileName, - PUNICODE_STRING, //__out ntFileName, - PCWSTR*, //__out_optFilePart, - PRTL_RELATIVE_NAME_U); //__out_opt relativeName +typedef BOOLEAN (NTAPI* RtlDosPathNameToRelativeNtPathName_UFunc)(PCWSTR dosFileName, //__in + PUNICODE_STRING ntFileName, //__out + PCWSTR* filePart, //__out + PRTL_RELATIVE_NAME_U relativeName); //__out + +typedef BOOLEAN (NTAPI* RtlCreateUnicodeStringFunc)(PUNICODE_STRING DestinationString, //_Out_ + PCWSTR SourceString); //_In_ typedef VOID (NTAPI* RtlFreeUnicodeStringFunc)(PUNICODE_STRING); //__inout unicodeString @@ -76,6 +77,7 @@ const SysDllFun<NtOpenFileFunc> ntOpenFile (L"ntdll.d const SysDllFun<NtCloseFunc> ntClose (L"ntdll.dll", "NtClose"); const SysDllFun<NtQueryDirectoryFileFunc> ntQueryDirectoryFile (L"ntdll.dll", "NtQueryDirectoryFile"); const SysDllFun<RtlNtStatusToDosErrorFunc> rtlNtStatusToDosError (L"ntdll.dll", "RtlNtStatusToDosError"); +const SysDllFun<RtlCreateUnicodeStringFunc> rtlCreateUnicodeString (L"ntdll.dll", "RtlCreateUnicodeString"); const SysDllFun<RtlFreeUnicodeStringFunc> rtlFreeUnicodeString (L"ntdll.dll", "RtlFreeUnicodeString"); const SysDllFun<RtlDosPathNameToNtPathName_UFunc> rtlDosPathNameToNtPathName_U(SysDllFun<RtlDosPathNameToRelativeNtPathName_UFunc>(L"ntdll.dll", "RtlDosPathNameToRelativeNtPathName_U") ? SysDllFun<RtlDosPathNameToRelativeNtPathName_UFunc>(L"ntdll.dll", "RtlDosPathNameToRelativeNtPathName_U") : //use the newer version if available @@ -93,11 +95,12 @@ bool findplus::initDllBinding() //evaluate in ::DllMain() when attaching process //http://msdn.microsoft.com/en-us/library/ff563638(v=VS.85).aspx //verify dynamic dll binding - return ntOpenFile && - ntClose && - ntQueryDirectoryFile && - rtlNtStatusToDosError && - rtlFreeUnicodeString && + return ntOpenFile && + ntClose && + ntQueryDirectoryFile && + rtlNtStatusToDosError && + rtlCreateUnicodeString && + rtlFreeUnicodeString && rtlDosPathNameToNtPathName_U; //this may become handy some time: nt status code STATUS_ORDINAL_NOT_FOUND maps to win32 code ERROR_INVALID_ORDINAL @@ -128,43 +131,89 @@ private: }; +//a simple scope guard without <utility>, <type_traits>, <cassert> dependencies: +template <typename F> +class ScopeGuardLean +{ +public: + explicit ScopeGuardLean(F fun) : dismissed_(false), fun_(fun) {} + ScopeGuardLean(ScopeGuardLean&& other) : dismissed_(other.dismissed_), fun_(std::move(other.fun_)) { other.dismiss(); } + + void dismiss() { dismissed_ = true; } + + ~ScopeGuardLean() + { + if (!dismissed_) + try { fun_(); } + catch (...) {} + } + +private: + ScopeGuardLean (const ScopeGuardLean&); // = delete + ScopeGuardLean& operator=(const ScopeGuardLean&); // + + bool dismissed_; + F fun_; +}; + +template <class F> inline +ScopeGuardLean<F> makeGuard(F fun) { return ScopeGuardLean<F>(fun); } + + FileSearcher::FileSearcher(const wchar_t* dirname) : + dirnameNt(), //[!] hDir(nullptr), nextEntryOffset(0) { - dirnameNt.Buffer = nullptr; - dirnameNt.Length = 0; - dirnameNt.MaximumLength = 0; - - zen::ScopeGuard guardConstructor = zen::makeGuard([&] { this->~FileSearcher(); }); + auto guardConstructor = makeGuard([&] { this->~FileSearcher(); }); //-------------------------------------------------------------------------------------------------------------- //convert dosFileName, e.g. C:\Users or \\?\C:\Users to ntFileName \??\C:\Users //in contrast to ::FindFirstFile() implementation we don't evaluate the relativeName, //however tests indicate ntFileName is *always* filled with an absolute name, even if dosFileName is relative + PCWSTR filePart = nullptr; + RTL_RELATIVE_NAME_U relativeName = {}; + //NOTE: RtlDosPathNameToNtPathName_U may be used on all XP/Win7/Win8 for compatibility // RtlDosPathNameToNtPathName_U: used by Windows XP available with OS version 3.51 (Windows NT) and higher // RtlDosPathNameToRelativeNtPathName_U: used by Win7/Win8 available with OS version 5.2 (Windows Server 2003) and higher - if (!rtlDosPathNameToNtPathName_U(dirname, //__in dosFileName, - &dirnameNt, //__out ntFileName, - nullptr, //__out_optFilePart, - nullptr)) //__out_opt relativeName - empty if dosFileName is absolute + if (!rtlDosPathNameToNtPathName_U(dirname, //__in dosFileName, + &dirnameNt, //__out ntFileName, + &filePart, //__out FilePart - points into ntFileName + &relativeName)) //__out relativeName - points into ntFileName; empty if dosFileName is absolute throw NtFileError(STATUS_OBJECT_PATH_NOT_FOUND); //translates to ERROR_PATH_NOT_FOUND, same behavior like ::FindFirstFileEx() + //note 1: internally it distinguishes between "quick path" == \\?\ and "slow path" handling! + //http://doxygen.reactos.org/d9/d6e/lib_2rtl_2path_8c_a11c87ad0f7752999b0b8972af6165d7a.html#a11c87ad0f7752999b0b8972af6165d7a + //note 2: without \\?\, i.e. slow path handling it calls RtlGetFullPathName_Ustr() which removes trailing spaces!!! + //http://doxygen.reactos.org/d9/d6e/lib_2rtl_2path_8c_a8624b864678ca64b031f5fc273e022af.html#a8624b864678ca64b031f5fc273e022af + //FindFirstFile() gets lucky because it passes "<dirname>\*" which never has trailing space chars! >:( OBJECT_ATTRIBUTES objAttr = {}; - InitializeObjectAttributes(&objAttr, //[out] POBJECT_ATTRIBUTES initializedAttributes, - &dirnameNt, //[in] PUNICODE_STRING objectName, - OBJ_CASE_INSENSITIVE, //[in] ULONG attributes, - nullptr, //[in] HANDLE rootDirectory, - nullptr); //[in, optional] PSECURITY_DESCRIPTOR securityDescriptor + if (relativeName.RelativeName.Length == 0) //absolute name + { + InitializeObjectAttributes(&objAttr, //[out] POBJECT_ATTRIBUTES initializedAttributes, + &dirnameNt, //[in] PUNICODE_STRING objectName, + OBJ_CASE_INSENSITIVE, //[in] ULONG attributes, + nullptr, //[in] HANDLE rootDirectory, + nullptr); //[in, optional] PSECURITY_DESCRIPTOR securityDescriptor + } + else //relative name (it seems we alternatively could also use dirnameNt here?) + { + InitializeObjectAttributes(&objAttr, //[out] POBJECT_ATTRIBUTES initializedAttributes, + &relativeName.RelativeName, //[in] PUNICODE_STRING objectName, + OBJ_CASE_INSENSITIVE, //[in] ULONG attributes, + relativeName.ContainingDirectory, //[in] HANDLE rootDirectory, + nullptr); //[in, optional] PSECURITY_DESCRIPTOR securityDescriptor + } + { IO_STATUS_BLOCK status = {}; - NTSTATUS rv = ntOpenFile(&hDir, //__out PHANDLE FileHandle, + NTSTATUS rv = ntOpenFile(&hDir, //__out PHANDLE FileHandle, FILE_LIST_DIRECTORY | SYNCHRONIZE, //__in ACCESS_MASK desiredAccess, - 100001 used by ::FindFirstFile() on all XP/Win7/Win8 - &objAttr, //__in POBJECT_ATTRIBUTES objectAttributes, - &status, //__out PIO_STATUS_BLOCK ioStatusBlock, + &objAttr, //__in POBJECT_ATTRIBUTES objectAttributes, + &status, //__out PIO_STATUS_BLOCK ioStatusBlock, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, //__in ULONG shareAccess, - 7 on Win7/Win8, 3 on XP FILE_DIRECTORY_FILE | FILE_SYNCHRONOUS_IO_NONALERT | FILE_OPEN_FOR_BACKUP_INTENT); //__in ULONG openOptions - 4021 used on all XP/Win7/Win8 if (!NT_SUCCESS(rv)) @@ -184,7 +233,7 @@ FileSearcher::~FileSearcher() if (dirnameNt.Buffer) rtlFreeUnicodeString(&dirnameNt); //cleanup identical to ::FindFirstFile() - //note that most of this function seems inlined by the linker, so that its assembly looks equivalent to "RtlFreeHeap(GetProcessHeap(), 0, ntPathName.Buffer)" + //note that most of this function seems inlined by the linker, so that its assembly looks equivalent to "RtlFreeHeap(RtlGetProcessHeap(), 0, ntPathName.Buffer)" } @@ -364,7 +413,7 @@ FindHandle findplus::openDir(const wchar_t* dirname) setWin32Error(rtlNtStatusToDosError(e.ntError)); return nullptr; } - catch (const std::bad_alloc&) //not unlikely in this context! => handle! + catch (const std::bad_alloc&) //not unlikely in file sync context! => handle! { setWin32Error(rtlNtStatusToDosError(STATUS_NO_MEMORY)); return nullptr; diff --git a/zen/IFileOperation/FileOperation_Vista.vcxproj b/zen/IFileOperation/FileOperation_Vista.vcxproj index 73bfd56a..4694a3a5 100644 --- a/zen/IFileOperation/FileOperation_Vista.vcxproj +++ b/zen/IFileOperation/FileOperation_Vista.vcxproj @@ -88,7 +88,7 @@ </BuildLog> <ClCompile> <Optimization>Disabled</Optimization> - <PreprocessorDefinitions>_DEBUG;_WINDOWS;_USRDLL;FILE_OP_DLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PreprocessorDefinitions>WXINTL_NO_GETTEXT_MACRO;FFS_WIN;_DEBUG;_WINDOWS;_USRDLL;FILE_OP_DLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <MinimalRebuild>true</MinimalRebuild> <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks> <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> @@ -97,7 +97,7 @@ <WarningLevel>Level4</WarningLevel> <SuppressStartupBanner>true</SuppressStartupBanner> <DebugInformationFormat>EditAndContinue</DebugInformationFormat> - <DisableSpecificWarnings>4100;4996</DisableSpecificWarnings> + <DisableSpecificWarnings>4100;4996;4512</DisableSpecificWarnings> <AdditionalIncludeDirectories>../..;C:\Program Files\C++\boost</AdditionalIncludeDirectories> <SmallerTypeCheck>true</SmallerTypeCheck> </ClCompile> @@ -124,7 +124,7 @@ </Midl> <ClCompile> <Optimization>Disabled</Optimization> - <PreprocessorDefinitions>_DEBUG;_WINDOWS;_USRDLL;FILE_OP_DLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PreprocessorDefinitions>WXINTL_NO_GETTEXT_MACRO;FFS_WIN;_DEBUG;_WINDOWS;_USRDLL;FILE_OP_DLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <MinimalRebuild>true</MinimalRebuild> <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks> <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> @@ -133,7 +133,7 @@ <WarningLevel>Level4</WarningLevel> <SuppressStartupBanner>true</SuppressStartupBanner> <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> - <DisableSpecificWarnings>4100;4996</DisableSpecificWarnings> + <DisableSpecificWarnings>4100;4996;4512</DisableSpecificWarnings> <AdditionalIncludeDirectories>../..;C:\Program Files\C++\boost</AdditionalIncludeDirectories> <SmallerTypeCheck>true</SmallerTypeCheck> </ClCompile> @@ -158,7 +158,7 @@ <ClCompile> <Optimization>MaxSpeed</Optimization> <IntrinsicFunctions>true</IntrinsicFunctions> - <PreprocessorDefinitions>NDEBUG;_WINDOWS;_USRDLL;FILE_OP_DLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PreprocessorDefinitions>WXINTL_NO_GETTEXT_MACRO;FFS_WIN;NDEBUG;_WINDOWS;_USRDLL;FILE_OP_DLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <RuntimeLibrary>MultiThreaded</RuntimeLibrary> <FunctionLevelLinking>true</FunctionLevelLinking> <PrecompiledHeader> @@ -167,7 +167,7 @@ <SuppressStartupBanner>true</SuppressStartupBanner> <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed> - <DisableSpecificWarnings>4100;4996</DisableSpecificWarnings> + <DisableSpecificWarnings>4100;4996;4512</DisableSpecificWarnings> <AdditionalIncludeDirectories>../..;C:\Program Files\C++\boost</AdditionalIncludeDirectories> </ClCompile> <Link> @@ -196,7 +196,7 @@ <ClCompile> <Optimization>MaxSpeed</Optimization> <IntrinsicFunctions>true</IntrinsicFunctions> - <PreprocessorDefinitions>NDEBUG;_WINDOWS;_USRDLL;FILE_OP_DLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PreprocessorDefinitions>WXINTL_NO_GETTEXT_MACRO;FFS_WIN;NDEBUG;_WINDOWS;_USRDLL;FILE_OP_DLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <RuntimeLibrary>MultiThreaded</RuntimeLibrary> <FunctionLevelLinking>true</FunctionLevelLinking> <PrecompiledHeader> @@ -205,7 +205,7 @@ <SuppressStartupBanner>true</SuppressStartupBanner> <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed> - <DisableSpecificWarnings>4100;4996</DisableSpecificWarnings> + <DisableSpecificWarnings>4100;4996;4512</DisableSpecificWarnings> <AdditionalIncludeDirectories>../..;C:\Program Files\C++\boost</AdditionalIncludeDirectories> </ClCompile> <Link> @@ -226,20 +226,11 @@ </ItemDefinitionGroup> <ItemGroup> <ClCompile Include="..\debug_memory_leaks.cpp" /> - <ClCompile Include="dll_main.cpp"> - <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - </PrecompiledHeader> - <CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</CompileAsManaged> - <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - </PrecompiledHeader> - <CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</CompileAsManaged> - <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - </PrecompiledHeader> - <CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</CompileAsManaged> - <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - </PrecompiledHeader> - <CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</CompileAsManaged> - </ClCompile> + <ClCompile Include="..\dst_hack.cpp" /> + <ClCompile Include="..\file_handling.cpp" /> + <ClCompile Include="..\file_traverser.cpp" /> + <ClCompile Include="..\privilege.cpp" /> + <ClCompile Include="..\zstring.cpp" /> <ClCompile Include="file_op.cpp" /> </ItemGroup> <ItemGroup> diff --git a/zen/IFileOperation/file_op.cpp b/zen/IFileOperation/file_op.cpp index b3990ee0..8816b502 100644 --- a/zen/IFileOperation/file_op.cpp +++ b/zen/IFileOperation/file_op.cpp @@ -14,6 +14,7 @@ #include <zen/com_error.h> #include <zen/scope_guard.h> #include <zen/stl_tools.h> +#include <zen/file_handling.h> #include <boost/thread/tss.hpp> @@ -98,12 +99,18 @@ public: if (psiItem) { LPWSTR itemPath = nullptr; - HRESULT hr = psiItem->GetDisplayName(SIGDN_FILESYSPATH, &itemPath); - if (FAILED(hr)) - return hr; - ZEN_ON_SCOPE_EXIT(::CoTaskMemFree(itemPath)); - - currentItem = itemPath; + if (SUCCEEDED(psiItem->GetDisplayName(SIGDN_FILESYSPATH, &itemPath))) //will fail for long file paths > MAX_PATH! + { + ZEN_ON_SCOPE_EXIT(::CoTaskMemFree(itemPath)); + currentItem = itemPath; + } + else if (SUCCEEDED(psiItem->GetDisplayName(SIGDN_NORMALDISPLAY, &itemPath))) //short name only; should work even for long file paths! + { + ZEN_ON_SCOPE_EXIT(::CoTaskMemFree(itemPath)); + currentItem = itemPath; + } + else + currentItem = L"<unknown file>"; //give some indication that file name determination failed (rather than leaving the name empty!) } //"Returns S_OK if successful, or an error value otherwise. In the case of an error value, the delete operation //and all subsequent operations pending from the call to IFileOperation are canceled." @@ -222,7 +229,12 @@ void moveToRecycleBin(const wchar_t* fileNames[], //throw ComError { if (hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) || //file not existing anymore hr == HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND)) - continue; + { + //make sure the file really is not there: Win32 by default strips trailing spaces, so we might end up here in error! + //on the other hand, shell layer does not support \\?\ prefix to prevent this! + if (!somethingExists(fileNames[i])) + continue; + } throw ComError(std::wstring(L"Error calling \"SHCreateItemFromParsingName\" for file:\n") + L"\'" + fileNames[i] + L"\'.", hr); } @@ -231,7 +243,7 @@ void moveToRecycleBin(const wchar_t* fileNames[], //throw ComError ++operationCount; } - if (operationCount == 0) //calling PerformOperations() without anything to do would yielt E_UNEXPECTED + if (operationCount == 0) //calling PerformOperations() without anything to do would yield E_UNEXPECTED return; //perform planned operations diff --git a/zen/async_task.h b/zen/async_task.h new file mode 100644 index 00000000..b4123b5d --- /dev/null +++ b/zen/async_task.h @@ -0,0 +1,70 @@ +// ************************************************************************** +// * This file is part of the FreeFileSync project. It is distributed under * +// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * +// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * +// ************************************************************************** + +#ifndef ASYNC_JOB_839147839170432143214321 +#define ASYNC_JOB_839147839170432143214321 + +#include <list> +#include <functional> +#include <zen/thread.h> +#include <zen/scope_guard.h> + +namespace zen +{ +//run a job in an async thread, but process result on GUI event loop +class AsyncTasks +{ +public: + AsyncTasks() : inRecursion(false) {} + + template <class Fun, class Fun2> + void add(Fun doAsync, Fun2 evalOnGui) + //equivalent to "evalOnGui(doAsync())" + // -> doAsync: the usual thread-safety requirements apply! + // -> evalOnGui: no thread-safety concerns, but must only reference variables with greater-equal lifetime than the AsyncTask instance! + { + tasks.push_back(zen::async([=]() -> std::function<void()> + { + auto result = doAsync(); + return [=]{ evalOnGui(result); }; + })); + } + + template <class Fun, class Fun2> + void add2(Fun doAsync, Fun2 evalOnGui) //for doAsync returning void + { + tasks.push_back(zen::async([=]() -> std::function<void()> { doAsync(); return [=]{ evalOnGui(); }; })); + } + + void evalResults() //call from gui thread repreatedly + { + if (!inRecursion) //prevent implicit recursion, e.g. if we're called from an idle event and spawn another one via the callback below + { + inRecursion = true; + ZEN_ON_SCOPE_EXIT(inRecursion = false); + + tasks.remove_if([](boost::unique_future<std::function<void()>>& ft) -> bool + { + if (ft.is_ready()) + { + (ft.get())(); + return true; + } + return false; + }); + } + } + + bool empty() const { return tasks.empty(); } + +private: + bool inRecursion; + std::list<boost::unique_future<std::function<void()>>> tasks; +}; + +} + +#endif //ASYNC_JOB_839147839170432143214321 diff --git a/zen/debug_minidump.cpp b/zen/debug_minidump.cpp index c229b4aa..1b625015 100644 --- a/zen/debug_minidump.cpp +++ b/zen/debug_minidump.cpp @@ -55,7 +55,9 @@ void debug_tools::writeMinidump() { ::RaiseException(EXCEPTION_BREAKPOINT, 0, 0, nullptr); } - __except (writeDumpOnException(GetExceptionInformation()), EXCEPTION_CONTINUE_EXECUTION) {} + __except (writeDumpOnException(GetExceptionInformation()), EXCEPTION_EXECUTE_HANDLER) {} + //don't use EXCEPTION_CONTINUE_EXECUTION: although used in most minidump examples this resulted in an infinite loop in tests + //although it really should not: http://msdn.microsoft.com/en-us/library/c34eyfac.aspx } diff --git a/zen/debug_minidump.h b/zen/debug_minidump.h index 2ef43039..e2605038 100644 --- a/zen/debug_minidump.h +++ b/zen/debug_minidump.h @@ -21,11 +21,11 @@ Minidumps http://msdn.microsoft.com/en-us/library/windows/desktop/ee416349(v=vs. ---------------------------------------------------------------------------------------- 1. Compile "debug_minidump.cpp" 2. Compile "release" build with: - - C/C++ -> General: Debug Information Format: "Program Database" (/Zi). - - C/C++ -> Optimization: Omit Frame Pointers: No (/Oy-) - avoid call stack mess up! - Linker -> Debugging: Generate Debug Info: Yes (/DEBUG) - Linker -> Optimization: References: Yes (/OPT:REF). - Linker -> Optimization: Enable COMDAT Folding: Yes (/OPT:ICF). + - C/C++ -> General: Debug Information Format: "Program Database" (/Zi). + - C/C++ -> Optimization: Omit Frame Pointers: No (/Oy-) - avoid call stack mess up! Optional: - C/C++ -> Optimization: Disabled (/Od) */ diff --git a/zen/dir_watcher.cpp b/zen/dir_watcher.cpp index 0b34f890..6c6c0929 100644 --- a/zen/dir_watcher.cpp +++ b/zen/dir_watcher.cpp @@ -188,6 +188,8 @@ public: ZEN_ON_SCOPE_EXIT(::CloseHandle(overlapped.hEvent)); + DWORD bytesReturned = 0; //should not be needed for async calls, still pass it to help broken drivers + //asynchronous variant: runs on this thread's APC queue! if (!::ReadDirectoryChangesW(hDir, // __in HANDLE hDirectory, &buffer[0], // __out LPVOID lpBuffer, @@ -197,7 +199,7 @@ public: FILE_NOTIFY_CHANGE_DIR_NAME | FILE_NOTIFY_CHANGE_SIZE | FILE_NOTIFY_CHANGE_LAST_WRITE, // __in DWORD dwNotifyFilter, - nullptr, // __out_opt LPDWORD lpBytesReturned, + &bytesReturned, // __out_opt LPDWORD lpBytesReturned, &overlapped, // __inout_opt LPOVERLAPPED lpOverlapped, nullptr)) // __in_opt LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine return shared_->reportError(replaceCpy(_("Cannot monitor directory %x."), L"%x", fmtFileName(dirnamePf)) + L" (ReadDirectoryChangesW)" L"\n\n" + getLastErrorFormatted(), ::GetLastError()); diff --git a/zen/file_handling.cpp b/zen/file_handling.cpp index 3565700a..b529720f 100644 --- a/zen/file_handling.cpp +++ b/zen/file_handling.cpp @@ -35,12 +35,12 @@ #elif defined FFS_MAC #include <sys/mount.h> //statfs -#include <utime.h> +//#include <utime.h> #endif #if defined FFS_LINUX || defined FFS_MAC #include <sys/stat.h> -//#include <sys/time.h> +#include <sys/time.h> //lutimes #endif using namespace zen; @@ -933,15 +933,18 @@ void zen::setFileTime(const Zstring& filename, const Int64& modTime, ProcSymlink } #endif -#elif defined FFS_LINUX - struct ::timespec newTimes[2] = {}; - newTimes[0].tv_nsec = UTIME_OMIT; //omit access time - newTimes[1].tv_sec = to<time_t>(modTime); //modification time (seconds) +#elif defined FFS_LINUX || defined FFS_MAC + //sigh, we can't use utimensat on NTFS volumes on Ubuntu: silent failure!!! what morons are programming this shit??? - if (::utimensat(AT_FDCWD, filename.c_str(), newTimes, procSl == SYMLINK_DIRECT ? AT_SYMLINK_NOFOLLOW : 0) != 0) - throw FileError(replaceCpy(_("Cannot write modification time of %x."), L"%x", fmtFileName(filename)) + L"\n\n" + getLastErrorFormatted()); + // struct ::timespec newTimes[2] = {}; + // newTimes[0].tv_nsec = UTIME_OMIT; //omit access time + // newTimes[1].tv_sec = to<time_t>(modTime); //modification time (seconds) + // + // if (::utimensat(AT_FDCWD, filename.c_str(), newTimes, procSl == SYMLINK_DIRECT ? AT_SYMLINK_NOFOLLOW : 0) != 0) + // throw FileError(replaceCpy(_("Cannot write modification time of %x."), L"%x", fmtFileName(filename)) + L"\n\n" + getLastErrorFormatted()); + + //=> fallback to "retarded-idiot version"! -- DarkByte -#elif defined FFS_MAC struct ::timeval newTimes[2] = {}; newTimes[0].tv_sec = ::time(nullptr); //access time (seconds) newTimes[1].tv_sec = to<time_t>(modTime); //modification time (seconds) diff --git a/zen/file_id.cpp b/zen/file_id.cpp index 7e0fa81b..8c66d1c9 100644 --- a/zen/file_id.cpp +++ b/zen/file_id.cpp @@ -19,9 +19,7 @@ zen::FileId zen::getFileID(const Zstring& filename) { #ifdef FFS_WIN - //WARNING: CreateFile() is SLOW, while GetFileInformationByHandle() is cheap! - //http://msdn.microsoft.com/en-us/library/aa363788(VS.85).aspx - + //WARNING: CreateFile() is SLOW, while GetFileInformationByHandle() is cheap! http://msdn.microsoft.com/en-us/library/aa363788(VS.85).aspx //privilege SE_BACKUP_NAME doesn't seem to be required here at all const HANDLE hFile = ::CreateFile(zen::applyLongPathPrefix(filename).c_str(), @@ -49,17 +47,19 @@ zen::FileId zen::getFileID(const Zstring& filename) return zen::FileId(); } - -bool zen::samePhysicalFile(const Zstring& file1, const Zstring& file2) -{ - if (EqualFilename()(file1, file2)) //quick check - return true; - - const auto id1 = getFileID(file1); - const auto id2 = getFileID(file2); - - if (id1 == zen::FileId() || id2 == zen::FileId()) - return false; - - return id1 == id2; -} +//test whether two distinct paths point to the same file or directory: +// true: paths point to same files/dirs +// false: error occurred OR point to different files/dirs +//bool zen::samePhysicalFile(const Zstring& file1, const Zstring& file2) +//{ +// if (EqualFilename()(file1, file2)) //quick check +// return true; +// +// const auto id1 = getFileID(file1); +// const auto id2 = getFileID(file2); +// +// if (id1 == zen::FileId() || id2 == zen::FileId()) +// return false; +// +// return id1 == id2; +//} diff --git a/zen/file_id.h b/zen/file_id.h index 9f73a29b..0ff6d7ec 100644 --- a/zen/file_id.h +++ b/zen/file_id.h @@ -4,12 +4,11 @@ // * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * // ************************************************************************** -#ifndef FILEID_H_INCLUDED -#define FILEID_H_INCLUDED +#ifndef FILEID_H_INCLUDED_32q87634289562345 +#define FILEID_H_INCLUDED_32q87634289562345 #include "file_id_def.h" #include "zstring.h" -#include <string> //unique file identifier @@ -18,11 +17,6 @@ namespace zen //get unique file id (symbolic link handling: opens the link!!!) //returns initial FileId() on error! FileId getFileID(const Zstring& filename); - -//test whether two distinct paths point to the same file or directory: -// true: paths point to same files/dirs -// false: error occurred OR point to different files/dirs -bool samePhysicalFile(const Zstring& file1, const Zstring& file2); } -#endif // FILEID_H_INCLUDED +#endif //FILEID_H_INCLUDED_32q87634289562345 diff --git a/zen/file_io.cpp b/zen/file_io.cpp index 6581dfbe..4961cac9 100644 --- a/zen/file_io.cpp +++ b/zen/file_io.cpp @@ -291,7 +291,7 @@ FileOutput::~FileOutput() void FileOutput::write(const void* buffer, size_t bytesToWrite) //throw FileError { #ifdef FFS_WIN - DWORD bytesWritten = 0; + DWORD bytesWritten = 0; //this parameter is NOT optional: http://blogs.msdn.com/b/oldnewthing/archive/2013/04/04/10407417.aspx if (!::WriteFile(fileHandle, //__in HANDLE hFile, buffer, //__out LPVOID lpBuffer, static_cast<DWORD>(bytesToWrite), //__in DWORD nNumberOfBytesToWrite, diff --git a/zen/file_traverser.cpp b/zen/file_traverser.cpp index 7093c44a..84bd6c64 100644 --- a/zen/file_traverser.cpp +++ b/zen/file_traverser.cpp @@ -566,8 +566,8 @@ private: #ifdef FFS_MAC //some file system abstraction layers fail to properly return decomposed UTF8: http://developer.apple.com/library/mac/#qa/qa1173/_index.html //so we need to do it ourselves; perf: ~600 ns per conversion - //note: it's not sufficient to apply this in z_impl::compareFilenamesNoCase: if UTF8 forms differ, FFS assumes a rename in case sensitivity and - // will try to propagate the rename => this won't work if target drive reports a particular UTF8 form only! + //note: it's not sufficient to apply this in z_impl::compareFilenamesNoCase: if UTF8 forms differ, FFS assumes a rename in case sensitivity and + // will try to propagate the rename => this won't work if target drive reports a particular UTF8 form only! if (CFStringRef cfStr = osx::createCFString(shortName)) { ZEN_ON_SCOPE_EXIT(::CFRelease(cfStr)); diff --git a/zen/int64.h b/zen/int64.h index 3e967df8..a760d5ab 100644 --- a/zen/int64.h +++ b/zen/int64.h @@ -52,11 +52,11 @@ public: Int64() : value(0) {} Int64(const Int64& rhs) : value(rhs.value) {} template <class T> - Int64(T rhs, typename EnableIf<IsSignedInt<T>::value && sizeof(T) <= sizeof(std::int64_t)>::Type* = nullptr) : + Int64(T rhs, typename EnableIf<IsSignedInt<T>::value&& sizeof(T) <= sizeof(std::int64_t)>::Type* = nullptr) : value(static_cast<std::int64_t>(rhs)) {} //unsafe explicit but checked conversion for all other integer types - template <class T> explicit Int64(T rhs, typename EnableIf<!(IsSignedInt<T>::value && sizeof(T) <= sizeof(std::int64_t))>::Type* = nullptr) : + template <class T> explicit Int64(T rhs, typename EnableIf<!(IsSignedInt<T>::value&& sizeof(T) <= sizeof(std::int64_t))>::Type* = nullptr) : value(static_cast<std::int64_t>(rhs)) { checkRange<std::int64_t>(rhs); } Int64& operator=(const Int64& rhs) { value = rhs.value; return *this; } @@ -131,11 +131,11 @@ public: UInt64() : value(0) {} UInt64(const UInt64& rhs) : value(rhs.value) {} template <class T> - UInt64(T rhs, typename EnableIf<IsUnsignedInt<T>::value && sizeof(T) <= sizeof(std::uint64_t)>::Type* = nullptr) : + UInt64(T rhs, typename EnableIf<IsUnsignedInt<T>::value&& sizeof(T) <= sizeof(std::uint64_t)>::Type* = nullptr) : value(static_cast<std::uint64_t>(rhs)) {} //unsafe explicit but checked conversion for all other integer types - template <class T> explicit UInt64(T rhs, typename EnableIf<!(IsUnsignedInt<T>::value && sizeof(T) <= sizeof(std::uint64_t))>::Type* = nullptr) : + template <class T> explicit UInt64(T rhs, typename EnableIf<!(IsUnsignedInt<T>::value&& sizeof(T) <= sizeof(std::uint64_t))>::Type* = nullptr) : value(static_cast<std::uint64_t>(rhs)) { checkRange<std::uint64_t>(rhs); } UInt64& operator=(const UInt64& rhs) { value = rhs.value; return *this; } diff --git a/zen/long_path_prefix.h b/zen/long_path_prefix.h index 80b5453e..c3d705e2 100644 --- a/zen/long_path_prefix.h +++ b/zen/long_path_prefix.h @@ -51,20 +51,22 @@ Zstring removeLongPathPrefix(const Zstring& path); //throw() const Zstring LONG_PATH_PREFIX = L"\\\\?\\"; const Zstring LONG_PATH_PREFIX_UNC = L"\\\\?\\UNC"; -template <size_t max_path> inline +template <size_t maxPath> inline Zstring applyLongPathPrefixImpl(const Zstring& path) { assert(!path.empty()); //nicely check almost all WinAPI accesses! assert(!zen::isWhiteSpace(path[0])); - if (path.length() >= max_path && //maximum allowed path length without prefix is (MAX_PATH - 1) - !zen::startsWith(path, LONG_PATH_PREFIX)) - { - if (zen::startsWith(path, L"\\\\")) //UNC-name, e.g. \\zenju-pc\Users - return LONG_PATH_PREFIX_UNC + zen::afterFirst(path, L'\\'); //convert to \\?\UNC\zenju-pc\Users - else - return LONG_PATH_PREFIX + path; //prepend \\?\ prefix - } + if (path.length() >= maxPath || //maximum allowed path length without prefix is (MAX_PATH - 1) + endsWith(path, L' ') || //by default all Win32 APIs trim trailing spaces and period, unless long path prefix is supplied! + endsWith(path, L'.')) // + if (!startsWith(path, LONG_PATH_PREFIX)) + { + if (startsWith(path, L"\\\\")) //UNC-name, e.g. \\zenju-pc\Users + return LONG_PATH_PREFIX_UNC + afterFirst(path, L'\\'); //convert to \\?\UNC\zenju-pc\Users + else + return LONG_PATH_PREFIX + path; //prepend \\?\ prefix + } return path; //fallback } diff --git a/zen/osx_string.h b/zen/osx_string.h index a5c0849e..ce8b1062 100644 --- a/zen/osx_string.h +++ b/zen/osx_string.h @@ -35,7 +35,7 @@ Zstring cfStringToZstring(const CFStringRef& cfStr) { if (cfStr) { - //perf: try to get away cheap: + //perf: try to get away cheap: if (const char* utf8Str = ::CFStringGetCStringPtr(cfStr, kCFStringEncodingUTF8)) return utf8Str; diff --git a/zen/osx_throw_exception.h b/zen/osx_throw_exception.h index cb458974..31592854 100644 --- a/zen/osx_throw_exception.h +++ b/zen/osx_throw_exception.h @@ -35,9 +35,9 @@ inline void throwOsxError(NSException* e) //throw OsxError { std::string msg; - if (const char* name = [[e name ] cStringUsingEncoding:NSUTF8StringEncoding]) //"const char*" NOT owned by us! +if (const char* name = [[e name ] cStringUsingEncoding:NSUTF8StringEncoding]) //"const char*" NOT owned by us! msg += name; - if (const char* descr = [[e reason] cStringUsingEncoding:NSUTF8StringEncoding]) +if (const char* descr = [[e reason] cStringUsingEncoding:NSUTF8StringEncoding]) { msg += "\n"; msg += descr; diff --git a/zen/scope_guard.h b/zen/scope_guard.h index ca05d39d..cb28904f 100644 --- a/zen/scope_guard.h +++ b/zen/scope_guard.h @@ -8,6 +8,8 @@ #define ZEN_SCOPEGUARD_8971632487321434 #include <cassert> +//#include <type_traits> //std::decay +//#include <utility> //best of Zen, Loki and C++11 diff --git a/zen/stl_tools.h b/zen/stl_tools.h index 52f9f916..07fc31d7 100644 --- a/zen/stl_tools.h +++ b/zen/stl_tools.h @@ -175,12 +175,13 @@ template <class K, class V> class hash_map : public std::unordered_map<K, V> {}; #endif //as long as variadic templates are not available in MSVC -template<class T> inline std::unique_ptr<T> make_unique() { return std::unique_ptr<T>(new T); } -template<class T, class Arg1> inline std::unique_ptr<T> make_unique(Arg1&& arg1) { return std::unique_ptr<T>(new T(std::forward<Arg1>(arg1))); } -template<class T, class Arg1, class Arg2> inline std::unique_ptr<T> make_unique(Arg1&& arg1, Arg2&& arg2) { return std::unique_ptr<T>(new T(std::forward<Arg1>(arg1), std::forward<Arg2>(arg2))); } -template<class T, class Arg1, class Arg2, class Arg3> inline std::unique_ptr<T> make_unique(Arg1&& arg1, Arg2&& arg2, Arg3&& arg3) { return std::unique_ptr<T>(new T(std::forward<Arg1>(arg1), std::forward<Arg2>(arg2), std::forward<Arg3>(arg3))); } -template<class T, class Arg1, class Arg2, class Arg3, class Arg4> inline std::unique_ptr<T> make_unique(Arg1&& arg1, Arg2&& arg2, Arg3&& arg3, Arg4&& arg4) { return std::unique_ptr<T>(new T(std::forward<Arg1>(arg1), std::forward<Arg2>(arg2), std::forward<Arg3>(arg3), std::forward<Arg4>(arg4))); } -template<class T, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5> inline std::unique_ptr<T> make_unique(Arg1&& arg1, Arg2&& arg2, Arg3&& arg3, Arg4&& arg4, Arg5&& arg5) { return std::unique_ptr<T>(new T(std::forward<Arg1>(arg1), std::forward<Arg2>(arg2), std::forward<Arg3>(arg3), std::forward<Arg4>(arg4), std::forward<Arg5>(arg5))); } +template<class T> inline std::unique_ptr<T> make_unique() { return std::unique_ptr<T>(new T); } +template<class T, class Arg1> inline std::unique_ptr<T> make_unique(Arg1&& arg1) { return std::unique_ptr<T>(new T(std::forward<Arg1>(arg1))); } +template<class T, class Arg1, class Arg2> inline std::unique_ptr<T> make_unique(Arg1&& arg1, Arg2&& arg2) { return std::unique_ptr<T>(new T(std::forward<Arg1>(arg1), std::forward<Arg2>(arg2))); } +template<class T, class Arg1, class Arg2, class Arg3> inline std::unique_ptr<T> make_unique(Arg1&& arg1, Arg2&& arg2, Arg3&& arg3) { return std::unique_ptr<T>(new T(std::forward<Arg1>(arg1), std::forward<Arg2>(arg2), std::forward<Arg3>(arg3))); } +template<class T, class Arg1, class Arg2, class Arg3, class Arg4> inline std::unique_ptr<T> make_unique(Arg1&& arg1, Arg2&& arg2, Arg3&& arg3, Arg4&& arg4) { return std::unique_ptr<T>(new T(std::forward<Arg1>(arg1), std::forward<Arg2>(arg2), std::forward<Arg3>(arg3), std::forward<Arg4>(arg4))); } +template<class T, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5> inline std::unique_ptr<T> make_unique(Arg1&& arg1, Arg2&& arg2, Arg3&& arg3, Arg4&& arg4, Arg5&& arg5) { return std::unique_ptr<T>(new T(std::forward<Arg1>(arg1), std::forward<Arg2>(arg2), std::forward<Arg3>(arg3), std::forward<Arg4>(arg4), std::forward<Arg5>(arg5))); } +template<class T, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6> inline std::unique_ptr<T> make_unique(Arg1&& arg1, Arg2&& arg2, Arg3&& arg3, Arg4&& arg4, Arg5&& arg5, Arg6&& arg6) { return std::unique_ptr<T>(new T(std::forward<Arg1>(arg1), std::forward<Arg2>(arg2), std::forward<Arg3>(arg3), std::forward<Arg4>(arg4), std::forward<Arg5>(arg5), std::forward<Arg6>(arg6))); } //template<typename T, typename ...Args> inline //std::unique_ptr<T> make_unique(Args&& ...args) diff --git a/zen/string_base.h b/zen/string_base.h index e4e21716..e38fab94 100644 --- a/zen/string_base.h +++ b/zen/string_base.h @@ -209,6 +209,8 @@ public: typedef Char& reference; typedef const Char& const_reference; typedef Char value_type; + + Zbase(const_iterator first, const_iterator last); Char* begin(); Char* end (); const Char* begin() const; @@ -338,6 +340,17 @@ Zbase<Char, SP, AP>::Zbase(const Char* source, size_t sourceLen) } +template <class Char, template <class, class> class SP, class AP> +Zbase<Char, SP, AP>::Zbase(const_iterator first, const_iterator last) +{ + assert(first <= last); + const size_t sourceLen = last - first; + rawStr = this->create(sourceLen); + std::copy(first, last, rawStr); + rawStr[sourceLen] = 0; +} + + template <class Char, template <class, class> class SP, class AP> inline Zbase<Char, SP, AP>::Zbase(const Zbase<Char, SP, AP>& source) { diff --git a/zenxml/bind.h b/zenxml/bind.h index b297b607..b679af40 100644 --- a/zenxml/bind.h +++ b/zenxml/bind.h @@ -195,7 +195,7 @@ public: { auto iterPair = refList[refIndex]->getChildren(name); std::for_each(iterPair.first, iterPair.second, - [&](const XmlElement & child) { childList.push_back(&child); }); + [&](const XmlElement& child) { childList.push_back(&child); }); } return XmlIn(childList, childList.empty() ? getChildNameFormatted(name) : std::string(), log); diff --git a/zenxml/cvrt_struc.h b/zenxml/cvrt_struc.h index 5f7f4ad1..b5340ec9 100644 --- a/zenxml/cvrt_struc.h +++ b/zenxml/cvrt_struc.h @@ -69,11 +69,11 @@ ZEN_INIT_DETECT_MEMBER(insert) // template <typename T> struct IsStlContainer : StaticBool< - impl_2384343::HasMemberType_value_type <T>::value && - impl_2384343::HasMemberType_iterator <T>::value && - impl_2384343::HasMemberType_const_iterator<T>::value && - impl_2384343::HasMember_begin <T>::value && - impl_2384343::HasMember_end <T>::value && + impl_2384343::HasMemberType_value_type <T>::value&& + impl_2384343::HasMemberType_iterator <T>::value&& + impl_2384343::HasMemberType_const_iterator<T>::value&& + impl_2384343::HasMember_begin <T>::value&& + impl_2384343::HasMember_end <T>::value&& impl_2384343::HasMember_insert <T>::value> {}; @@ -89,9 +89,9 @@ ZEN_INIT_DETECT_MEMBER(second) // template <typename T> struct IsStlPair : StaticBool< - impl_2384343::HasMemberType_first_type <T>::value && - impl_2384343::HasMemberType_second_type<T>::value && - impl_2384343::HasMember_first <T>::value && + impl_2384343::HasMemberType_first_type <T>::value&& + impl_2384343::HasMemberType_second_type<T>::value&& + impl_2384343::HasMember_first <T>::value&& impl_2384343::HasMember_second <T>::value> {}; //###################################################################################### diff --git a/zenxml/parser.h b/zenxml/parser.h index 823cd793..be777a40 100644 --- a/zenxml/parser.h +++ b/zenxml/parser.h @@ -89,7 +89,7 @@ std::pair<char, char> hexify(unsigned char c) { auto hexifyDigit = [](int num) -> char //input [0, 15], output 0-9, A-F { - assert(0 <= num && num <= 15); //guaranteed by design below! + assert(0 <= num&& num <= 15); //guaranteed by design below! return static_cast<char>(num <= 9 ? //no signed/unsigned char problem here! '0' + num : 'A' + (num - 10)); |