summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Application.cpp73
-rw-r--r--Application.h3
-rw-r--r--BUILD/Changelog.txt317
-rw-r--r--BUILD/FreeFileSync.chmbin429891 -> 432113 bytes
-rw-r--r--BUILD/FreeFileSync.chwbin8650 -> 0 bytes
-rw-r--r--BUILD/Help/FreeFileSync.hhc32
-rw-r--r--BUILD/Help/FreeFileSync.hhp18
-rw-r--r--BUILD/Help/html/Batch Scripting.html31
-rw-r--r--BUILD/Help/html/Compare by File Size.html42
-rw-r--r--BUILD/Help/html/Comparison Settings.html13
-rw-r--r--BUILD/Help/html/Daylight Saving Time.html11
-rw-r--r--BUILD/Help/html/Exclude Items.html158
-rw-r--r--BUILD/Help/html/Expert settings.html90
-rw-r--r--BUILD/Help/html/External Applications.html9
-rw-r--r--BUILD/Help/html/FreeFileSync.html1
-rw-r--r--BUILD/Help/html/Links.html9
-rw-r--r--BUILD/Help/html/Macros.html86
-rw-r--r--BUILD/Help/html/RealtimeSync.html37
-rw-r--r--BUILD/Help/html/Run as Service.html9
-rw-r--r--BUILD/Help/html/Schedule a Batch Job.html8
-rw-r--r--BUILD/Help/html/Synchronize with FTP.html15
-rw-r--r--BUILD/Help/html/Variable Drive Letters.html34
-rw-r--r--BUILD/Help/html/Versioning.html28
-rw-r--r--BUILD/Help/html/Volume Shadow Copy.html17
-rw-r--r--BUILD/Languages/arabic.lng143
-rw-r--r--BUILD/Languages/chinese_simple.lng271
-rw-r--r--BUILD/Languages/chinese_traditional.lng281
-rw-r--r--BUILD/Languages/croatian.lng280
-rw-r--r--BUILD/Languages/czech.lng286
-rw-r--r--BUILD/Languages/danish.lng266
-rw-r--r--BUILD/Languages/dutch.lng271
-rw-r--r--BUILD/Languages/english_uk.lng149
-rw-r--r--BUILD/Languages/finnish.lng291
-rw-r--r--BUILD/Languages/french.lng276
-rw-r--r--BUILD/Languages/german.lng132
-rw-r--r--BUILD/Languages/greek.lng202
-rw-r--r--BUILD/Languages/hebrew.lng274
-rw-r--r--BUILD/Languages/hungarian.lng224
-rw-r--r--BUILD/Languages/italian.lng277
-rw-r--r--BUILD/Languages/japanese.lng279
-rw-r--r--BUILD/Languages/korean.lng285
-rw-r--r--BUILD/Languages/lithuanian.lng284
-rw-r--r--BUILD/Languages/norwegian.lng135
-rw-r--r--BUILD/Languages/polish.lng286
-rw-r--r--BUILD/Languages/portuguese.lng272
-rw-r--r--BUILD/Languages/portuguese_br.lng283
-rw-r--r--BUILD/Languages/romanian.lng271
-rw-r--r--BUILD/Languages/russian.lng280
-rw-r--r--BUILD/Languages/scottish_gaelic.lng282
-rw-r--r--BUILD/Languages/slovenian.lng280
-rw-r--r--BUILD/Languages/spanish.lng273
-rw-r--r--BUILD/Languages/swedish.lng268
-rw-r--r--BUILD/Languages/turkish.lng436
-rw-r--r--BUILD/Languages/ukrainian.lng280
-rw-r--r--BUILD/LastError.log1
-rw-r--r--Makefile4
-rw-r--r--RealtimeSync/main_dlg.cpp4
-rw-r--r--RealtimeSync/makefile4
-rw-r--r--RealtimeSync/xml_proc.cpp2
-rw-r--r--algorithm.cpp11
-rw-r--r--comparison.cpp46
-rw-r--r--comparison.h7
-rw-r--r--file_hierarchy.h1
-rw-r--r--lib/db_file.cpp13
-rw-r--r--lib/dir_lock.cpp8
-rw-r--r--lib/generate_logfile.h3
-rw-r--r--lib/icon_buffer.cpp5
-rw-r--r--lib/lock_holder.h28
-rw-r--r--lib/osx_file_icon.h2
-rw-r--r--lib/osx_file_icon.mm14
-rw-r--r--lib/parallel_scan.h5
-rw-r--r--lib/process_xml.cpp400
-rw-r--r--lib/process_xml.h27
-rw-r--r--lib/shadow.cpp3
-rw-r--r--lib/shadow.h3
-rw-r--r--lib/soft_filter.h4
-rw-r--r--lib/xml_base.cpp34
-rw-r--r--lib/xml_base.h2
-rw-r--r--structures.h14
-rw-r--r--synchronization.cpp9
-rw-r--r--ui/check_version.cpp22
-rw-r--r--ui/check_version.h4
-rw-r--r--ui/column_attr.h12
-rw-r--r--ui/custom_grid.cpp61
-rw-r--r--ui/custom_grid.h4
-rw-r--r--ui/folder_pair.h127
-rw-r--r--ui/gui_generated.cpp77
-rw-r--r--ui/gui_generated.h16
-rw-r--r--ui/main_dlg.cpp632
-rw-r--r--ui/main_dlg.h60
-rw-r--r--ui/msg_popup.cpp2
-rw-r--r--ui/progress_indicator.cpp20
-rw-r--r--ui/small_dlgs.cpp58
-rw-r--r--ui/switch_to_gui.h4
-rw-r--r--ui/sync_cfg.cpp6
-rw-r--r--ui/tree_view.cpp143
-rw-r--r--ui/tree_view.h35
-rw-r--r--version/version.h2
-rw-r--r--wx+/file_drop.h1
-rw-r--r--wx+/grid.cpp2
-rw-r--r--wx+/shell_execute.h2
-rw-r--r--wx+/toggle_button.h34
-rw-r--r--zen/FindFilePlus/find_file_plus.cpp117
-rw-r--r--zen/IFileOperation/FileOperation_Vista.vcxproj35
-rw-r--r--zen/IFileOperation/file_op.cpp28
-rw-r--r--zen/async_task.h70
-rw-r--r--zen/debug_minidump.cpp4
-rw-r--r--zen/debug_minidump.h4
-rw-r--r--zen/dir_watcher.cpp4
-rw-r--r--zen/file_handling.cpp21
-rw-r--r--zen/file_id.cpp34
-rw-r--r--zen/file_id.h12
-rw-r--r--zen/file_io.cpp2
-rw-r--r--zen/file_traverser.cpp4
-rw-r--r--zen/int64.h8
-rw-r--r--zen/long_path_prefix.h20
-rw-r--r--zen/osx_string.h2
-rw-r--r--zen/osx_throw_exception.h4
-rw-r--r--zen/scope_guard.h2
-rw-r--r--zen/stl_tools.h13
-rw-r--r--zen/string_base.h13
-rw-r--r--zenxml/bind.h2
-rw-r--r--zenxml/cvrt_struc.h16
-rw-r--r--zenxml/parser.h2
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
index 4d02da2a..98150320 100644
--- a/BUILD/FreeFileSync.chm
+++ b/BUILD/FreeFileSync.chm
Binary files differ
diff --git a/BUILD/FreeFileSync.chw b/BUILD/FreeFileSync.chw
deleted file mode 100644
index 1d52bd22..00000000
--- a/BUILD/FreeFileSync.chw
+++ /dev/null
Binary files differ
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">&quot;C:\Program
Files\FreeFileSync\FreeFileSync.exe&quot; &quot;H:\some
folder\SyncJob.ffs_batch&quot;<BR>if errorlevel 1 (<BR>&nbsp;&nbsp;</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 &quot;</FONT><FONT FACE="Courier New, monospace">GlobalSettings.xml</FONT><FONT FACE="Tahoma, sans-serif">&quot;
-located either in &quot;</FONT><FONT FACE="Courier New, monospace">%appdata%\FreeFileSync</FONT><FONT FACE="Tahoma, sans-serif">&quot;
-or the installation folder and change the value of XML node
-</FONT><FONT FACE="Courier New, monospace">&lt;FileTimeTolerance&gt;</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 &quot;File time and size&quot;</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>&nbsp;&nbsp;&nbsp;&nbsp;<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>&nbsp;&nbsp;&nbsp;&nbsp;<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>&nbsp;&nbsp;&nbsp;&nbsp;<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>&nbsp;&nbsp;&nbsp;&nbsp;<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>&nbsp;&nbsp;&nbsp;&nbsp;<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>&nbsp;&nbsp;&nbsp;&nbsp;<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 &quot;<FONT FACE="Courier New, monospace">GlobalSettings.xml</FONT>&quot;.
+To locate this file enter &quot;<FONT FACE="Courier New, monospace">%appdata%\FreeFileSync</FONT>&quot;
+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">&lt;?xml
+ version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;<BR>&lt;FreeFileSync
+ XmlType=&quot;GLOBAL&quot;&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;Shared&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;<B>FileTimeTolerance</B>
+ Seconds=&quot;2&quot;/&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;<B>RunWithBackgroundPriority</B>
+ Enabled=&quot;false&quot;/&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;<B>LockDirectoriesDuringSync</B>
+ Enabled=&quot;true&quot;/&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;<B>VerifyCopiedFiles</B>
+ Enabled=&quot;false&quot;/&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;<B>LastSyncsLogSizeMax</B>
+ Bytes=&quot;100000&quot;/&gt;</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 &quot;compare by file size&quot;,
+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 (&quot;</FONT><FONT FACE="Courier New, monospace">sync.ffs_lock</FONT><FONT FACE="Tahoma, sans-serif">&quot;).
+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 &quot;</FONT><FONT FACE="Courier New, monospace">LastSyncs.log</FONT><FONT FACE="Tahoma, sans-serif">&quot;.
+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%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-
<FONT FACE="Tahoma, sans-serif">full file or folder
name</FONT><BR>%item_folder% &nbsp;&nbsp;- <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
&quot;%item_folder%&quot;<BR>&nbsp;</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&amp;business=zenju@gmx.de&amp;no_shipping=1&amp;lc=US&amp;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%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-
- </FONT>format [YYYY-MM-DD], e. g. &quot;<FONT FACE="Courier New, monospace">2012-12-22</FONT>&quot;<BR><FONT FACE="Courier New, monospace">%time%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-
- </FONT>format [hhmmss], e. g. &quot;<FONT FACE="Courier New, monospace">123044</FONT>&quot;<BR><FONT FACE="Courier New, monospace">%timestamp%&nbsp;-
- </FONT>format [YYYY-MM-DD hhmmss], e. g. &quot;<FONT FACE="Courier New, monospace">2012-12-22
- 123044</FONT>&quot;<BR><BR><FONT FACE="Courier New, monospace">%year%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-
- </FONT>e. g. &quot;<FONT FACE="Courier New, monospace">2012</FONT>&quot;<BR><FONT FACE="Courier New, monospace">%month%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-
- </FONT>e. g. &quot;<FONT FACE="Courier New, monospace">12</FONT>&quot;<BR><FONT FACE="Courier New, monospace">%day%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-
- </FONT>e. g. &quot;<FONT FACE="Courier New, monospace">22</FONT>&quot;<BR><BR><FONT FACE="Courier New, monospace">%hour%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-
- </FONT>e. g. &quot;<FONT FACE="Courier New, monospace">12</FONT>&quot;<BR><FONT FACE="Courier New, monospace">%min%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-
- </FONT>e. g. &quot;<FONT FACE="Courier New, monospace">30</FONT>&quot;<BR><FONT FACE="Courier New, monospace">%sec%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-
- </FONT>e. g. &quot;<FONT FACE="Courier New, monospace">44</FONT>&quot;<BR><BR><FONT FACE="Courier New, monospace">%weekday%&nbsp;&nbsp;&nbsp;-
- </FONT>day of the week, e. g. &quot;<FONT FACE="Courier New, monospace">Monday</FONT>&quot;<BR><FONT FACE="Courier New, monospace">%week%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-
- </FONT>calendar week, e. g. &quot;<FONT FACE="Courier New, monospace">28</FONT>&quot;</FONT></P>
+ <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><FONT FACE="Courier New, monospace">%date%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ </FONT>e. g. <FONT FACE="Courier New, monospace">2012-12-22&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</FONT>format
+ [YYYY-MM-DD] <BR><FONT FACE="Courier New, monospace">%time%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ </FONT>e. g. <FONT FACE="Courier New, monospace">123044&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</FONT>format
+ [hhmmss] <BR><FONT FACE="Courier New, monospace">%timestamp%&nbsp;
+ </FONT>e. g. <FONT FACE="Courier New, monospace">2012-12-22
+ 123044&nbsp;</FONT>format [YYYY-MM-DD hhmmss] <BR><BR><FONT FACE="Courier New, monospace">%year%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ </FONT>e. g. <FONT FACE="Courier New, monospace">2012</FONT><BR><FONT FACE="Courier New, monospace">%month%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ </FONT>e. g. <FONT FACE="Courier New, monospace">12</FONT><BR><FONT FACE="Courier New, monospace">%day%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ </FONT>e. g. <FONT FACE="Courier New, monospace">22</FONT><BR><BR><FONT FACE="Courier New, monospace">%hour%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ </FONT>e. g. <FONT FACE="Courier New, monospace">12</FONT><BR><FONT FACE="Courier New, monospace">%min%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ </FONT>e. g. <FONT FACE="Courier New, monospace">30</FONT><BR><FONT FACE="Courier New, monospace">%sec%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ </FONT>e. g. <FONT FACE="Courier New, monospace">44</FONT><BR><BR><FONT FACE="Courier New, monospace">%weekday%&nbsp;&nbsp;&nbsp;
+ </FONT>e. g. <FONT FACE="Courier New, monospace">Monday&nbsp;</FONT>day
+ of the week <BR><FONT FACE="Courier New, monospace">%week%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ </FONT>e. g. <FONT FACE="Courier New, monospace">28&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</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%&nbsp;&nbsp;&nbsp;</FONT>e.
+ <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><FONT FACE="Courier New, monospace">%AllUsersProfile%&nbsp;&nbsp;&nbsp;</FONT>e.
g. <FONT FACE="Courier New, monospace">C:\ProgramData<BR>%AppData%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</FONT>e.
g. <FONT FACE="Courier New, monospace">C:\Users\&lt;username&gt;\AppData\Roaming<BR>%ComputerName%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</FONT>e.
g. <FONT FACE="Courier New, monospace">Zenju-PC<BR>%LocalAppData%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</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%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</FONT>e.
- g. <FONT FACE="Courier New, monospace">C:\Users\&lt;username&gt;\Desktop<BR>%csidl_D</FONT><FONT FACE="Courier New, monospace">ownloads</FONT><FONT FACE="Courier New, monospace">%&nbsp;&nbsp;&nbsp;</FONT>e.
- g. <FONT FACE="Courier New, monospace">C:\Users\&lt;username&gt;\D</FONT><FONT FACE="Courier New, monospace">ownloads</FONT><FONT FACE="Courier New, monospace"><BR>%csidl_Favorites%&nbsp;&nbsp;&nbsp;</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%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</FONT>e.
+ g. <FONT FACE="Courier New, monospace">C:\Users\&lt;username&gt;\Desktop<BR>%csidl_Downloads%&nbsp;&nbsp;&nbsp;</FONT>e.
+ g. <FONT FACE="Courier New, monospace">C:\Users\&lt;username&gt;\Downloads<BR>%csidl_Favorites%&nbsp;&nbsp;&nbsp;</FONT>e.
g. <FONT FACE="Courier New, monospace">C:\Users\&lt;username&gt;\Favorites<BR>%csidl_MyDocuments%&nbsp;</FONT>e.
g. <FONT FACE="Courier New, monospace">C:\Users\&lt;username&gt;\Documents<BR>%csidl_MyMusic%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</FONT>e.
g. <FONT FACE="Courier New, monospace">C:\Users\&lt;username&gt;\Music<BR>%csidl_MyPictures%&nbsp;&nbsp;</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\&lt;username&gt;\AppData\Roaming\Microsoft\Windows\Network
Shortcuts<BR>%csidl_Programs%&nbsp;&nbsp;&nbsp;&nbsp;</FONT>e. g.
<FONT FACE="Courier New, monospace">C:\Users\&lt;username&gt;\AppData\Roaming\Microsoft\Windows\Start
- Menu\Programs<BR>%csidl_</FONT><FONT FACE="Courier New, monospace">Quicklaunch</FONT><FONT FACE="Courier New, monospace">%&nbsp;</FONT>e.
- g. <FONT FACE="Courier New, monospace">C:\Users\&lt;username&gt;\AppData\Roaming\Microsoft\Internet
- Explorer\Quick Launch</FONT><FONT FACE="Courier New, monospace"><BR>%csidl_Resources%&nbsp;&nbsp;&nbsp;</FONT>e.
+ Menu\Programs<BR>%csidl_Quicklaunch%&nbsp;</FONT>e. g.
+ <FONT FACE="Courier New, monospace">C:\Users\&lt;username&gt;\AppData\Roaming\Microsoft\Internet
+ Explorer\Quick Launch<BR>%csidl_Resources%&nbsp;&nbsp;&nbsp;</FONT>e.
g. <FONT FACE="Courier New, monospace">C:\Windows\Resources<BR>%csidl_StartMenu%&nbsp;&nbsp;&nbsp;</FONT>e.
g. <FONT FACE="Courier New, monospace">C:\Users\&lt;username&gt;\AppData\Roaming\Microsoft\Windows\Start
Menu<BR>%csidl_Startup%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</FONT>e. g.
@@ -105,19 +105,7 @@ E.g. <FONT FACE="Courier New, monospace">csidl_MyMusic</FONT> &rarr;
</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&nbsp;</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&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</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>&quot;C:\Program
files\FreeFileSync\FreeFileSync.exe&quot;
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 &quot;<FONT FACE="Courier New, monospace">set</FONT>&quot;
command are only valid if the batch job is started by calling the
executable directly! Using &quot;<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>&nbsp;</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&quot;
&quot;C:\SyncJob.ffs_real&quot;<BR></FONT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT FACE="Courier New, monospace">&quot;C:\Program
Files\FreeFileSync\RealtimeSync.exe&quot; &quot;C:\SyncJob.ffs_batch&quot;</FONT><BR>&nbsp;</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 &quot;</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>&nbsp;&nbsp;&nbsp;&nbsp;cmd /c echo
%change_action% &quot;%change_path%&quot; &amp; pause<BR><BR><FONT FACE="Tahoma, sans-serif">Write
a list of all changes to a logfile:</FONT><BR>&nbsp;&nbsp;&nbsp;&nbsp;cmd
/c echo %change_action% &quot;%change_path%&quot; &gt;&gt;
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
&quot;HideConsole.vbs&quot; 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
&quot;C:\Program files\FreeFileSync\HideConsole.vbs&quot;
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&gt;</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">&quot;C:\Program
Files\FreeFileSync\RealtimeSync.exe&quot; &quot;C:\some
folder\SyncJob.ffs_real&quot;</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&quot;</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 &quot;Program/script&quot; always needs
point to an executable file like &quot;FreeFileSync.exe&quot; 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>&nbsp;</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:&lt;path&gt; mountpoint<BR>&nbsp;</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 &quot;<FONT FACE="Courier New, monospace">[ZENJU-USB]\folder</FONT>&quot;
instead of &quot;<FONT FACE="Courier New, monospace">G:\folder</FONT>&quot;
where &quot;<FONT FACE="Courier New, monospace">ZENJU-USB</FONT>&quot;
- 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
&quot;</FONT><FONT FACE="Courier New, monospace">\folder</FONT><FONT FACE="Tahoma, sans-serif">&quot;
instead of &quot;</FONT><FONT FACE="Courier New, monospace">G:\folder</FONT><FONT FACE="Tahoma, sans-serif">&quot;<BR>&nbsp;</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:
&quot;</FONT><FONT COLOR="#000000"><FONT FACE="Courier New, monospace"><FONT SIZE=3>G:\settings.ffs_gui&quot;<BR>&nbsp;</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 &quot;</FONT><FONT FACE="Courier New, monospace">G:\settings.ffs_gui</FONT><FONT FACE="Tahoma, sans-serif">&quot;<BR>&rarr;
Working directory is automatically set to &quot;</FONT><FONT FACE="Courier New, monospace">G:\</FONT><FONT FACE="Tahoma, sans-serif">&quot;
by the operating system so that &quot;</FONT><FONT FACE="Courier New, monospace">\folder</FONT><FONT FACE="Tahoma, sans-serif">&quot;
will be resolved as &quot;</FONT><FONT FACE="Courier New, monospace">G:\folder</FONT><FONT FACE="Tahoma, sans-serif">&quot;
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 &quot;</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">&quot;
was updated three times and old versions were moved to folder
&quot;</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">&quot;</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 &quot;</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">&quot;</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
&rarr; Advanced &rarr; 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
diff --git a/Makefile b/Makefile
index 495e04a4..5e393bc2 100644
--- a/Makefile
+++ b/Makefile
@@ -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));
bgstack15